packages feed

elm-reactor 0.3 → 0.3.1

raw patch · 5 files changed

+15622/−13613 lines, 5 filesdep ~elm-compiler

Dependency ranges changed: elm-compiler

Files

README.md view
@@ -19,13 +19,13 @@ Install [Elm Platform][platform]. This will install Elm Reactor and everything else it needs. -[platform]: https://github.com/elm-lang/elm-platform+[platform]: http://elm-lang.org/Install.elm  ## Use  Navigate to the Elm project you want to work on. A great project to get started-with is [elm-examples][] which contains a simple Mario game and todo list app,-both setup to be fun to debug.+with is [elm-examples][] which contains some simple programs that should be fun+to debug.  [elm-examples]: https://github.com/evancz/elm-examples @@ -51,27 +51,30 @@    * Add watches and traces to track and visualize values over time. -  * Hot-swap in new code at any time, maintaining all recorded events.+  * Swap in new code at any time, maintaining all recorded events.   #### Debugging code embedded in HTML  To use the debugger with more complex HTML or CSS, you may want to start the-debugger from within an HTML file.+debugger from within an HTML file. This process is still improving, so *use this+with caution*. -In your custom HTML file load the `/debugger.js` script:+In your custom HTML file, load the `/_reactor/debug.js` script.  ```html-<script type="text/javascript" src="/debugger.js"></script>+<script type="text/javascript" src="/_reactor/debug.js"></script> ``` -That creates the `Elm.debugFullscreen` function so you can initiate your Elm+That creates the `Elm.fullscreenDebug` function so you can initiate your Elm program with the debugger:  ```javascript-var runningElmModule = Elm.debugFullscreen(Elm.Todo, "todo.elm");+var main = Elm.fullscreenDebug('MyProject.Main', 'MyProject/Main.elm'); ``` -The argument `"todo.elm"` is the file path to the root module of your project,-the one with a `main` value. This file path makes it possible to hot-swap when-you change any relevant code.+The first argument is the name of the module you would like to debug.+The second argument is the name of the source file for that module.+The file name is needed so that we know which file to recompile when+the Reactor detects that a file has changed. You may edit a dependency,+but we always need to compile from the root file.
assets/_reactor/debug.js view
@@ -9,13603 +9,15608 @@    _N = Elm.Native,    _U = _N.Utils.make(_elm),    _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Array",-   $Basics = Elm.Basics.make(_elm),-   $List = Elm.List.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $Native$Array = Elm.Native.Array.make(_elm);-   var append = $Native$Array.append;-   var length = $Native$Array.length;-   var slice = $Native$Array.slice;-   var set = $Native$Array.set;-   var get = F2(function (i,-   array) {-      return _U.cmp(0,-      i) < 1 && _U.cmp(i,-      $Native$Array.length(array)) < 0 ? $Maybe.Just(A2($Native$Array.get,-      i,-      array)) : $Maybe.Nothing;-   });-   var push = $Native$Array.push;-   var empty = $Native$Array.empty;-   var filter = F2(function (isOkay,-   arr) {-      return function () {-         var update = F2(function (x,-         xs) {-            return isOkay(x) ? A2($Native$Array.push,-            x,-            xs) : xs;-         });-         return A3($Native$Array.foldl,-         update,-         $Native$Array.empty,-         arr);-      }();-   });-   var foldr = $Native$Array.foldr;-   var foldl = $Native$Array.foldl;-   var indexedMap = $Native$Array.indexedMap;-   var map = $Native$Array.map;-   var toIndexedList = function (array) {-      return A3($List.map2,-      F2(function (v0,v1) {-         return {ctor: "_Tuple2"-                ,_0: v0-                ,_1: v1};-      }),-      _L.range(0,-      $Native$Array.length(array) - 1),-      $Native$Array.toList(array));-   };-   var toList = $Native$Array.toList;-   var fromList = $Native$Array.fromList;-   var initialize = $Native$Array.initialize;-   var repeat = F2(function (n,e) {-      return A2(initialize,-      n,-      $Basics.always(e));-   });-   var Array = {ctor: "Array"};-   _elm.Array.values = {_op: _op-                       ,Array: Array-                       ,initialize: initialize-                       ,repeat: repeat-                       ,fromList: fromList-                       ,toList: toList-                       ,toIndexedList: toIndexedList-                       ,map: map-                       ,indexedMap: indexedMap-                       ,foldl: foldl-                       ,foldr: foldr-                       ,filter: filter-                       ,empty: empty-                       ,push: push-                       ,get: get-                       ,set: set-                       ,slice: slice-                       ,length: length-                       ,append: append};-   return _elm.Array.values;-};-Elm.Basics = Elm.Basics || {};-Elm.Basics.make = function (_elm) {-   "use strict";-   _elm.Basics = _elm.Basics || {};-   if (_elm.Basics.values)-   return _elm.Basics.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Basics",-   $Native$Basics = Elm.Native.Basics.make(_elm),-   $Native$Show = Elm.Native.Show.make(_elm),-   $Native$Utils = Elm.Native.Utils.make(_elm);-   var uncurry = F2(function (f,-   _v0) {-      return function () {-         switch (_v0.ctor)-         {case "_Tuple2": return A2(f,-              _v0._0,-              _v0._1);}-         _U.badCase($moduleName,-         "on line 460, column 19 to 24");-      }();-   });-   var curry = F3(function (f,-   a,-   b) {-      return f({ctor: "_Tuple2"-               ,_0: a-               ,_1: b});-   });-   var flip = F3(function (f,b,a) {-      return A2(f,a,b);-   });-   var snd = function (_v4) {-      return function () {-         switch (_v4.ctor)-         {case "_Tuple2": return _v4._1;}-         _U.badCase($moduleName,-         "on line 444, column 13 to 14");-      }();-   };-   var fst = function (_v8) {-      return function () {-         switch (_v8.ctor)-         {case "_Tuple2": return _v8._0;}-         _U.badCase($moduleName,-         "on line 440, column 13 to 14");-      }();-   };-   var always = F2(function (a,-   _v12) {-      return function () {-         return a;-      }();-   });-   var identity = function (x) {-      return x;-   };-   _op["<|"] = F2(function (f,x) {-      return f(x);-   });-   _op["|>"] = F2(function (x,f) {-      return f(x);-   });-   _op[">>"] = F3(function (f,-   g,-   x) {-      return g(f(x));-   });-   _op["<<"] = F3(function (g,-   f,-   x) {-      return g(f(x));-   });-   _op["++"] = $Native$Utils.append;-   var toString = $Native$Show.toString;-   var isInfinite = $Native$Basics.isInfinite;-   var isNaN = $Native$Basics.isNaN;-   var toFloat = $Native$Basics.toFloat;-   var ceiling = $Native$Basics.ceiling;-   var floor = $Native$Basics.floor;-   var truncate = $Native$Basics.truncate;-   var round = $Native$Basics.round;-   var otherwise = true;-   var not = $Native$Basics.not;-   var xor = $Native$Basics.xor;-   _op["||"] = $Native$Basics.or;-   _op["&&"] = $Native$Basics.and;-   var max = $Native$Basics.max;-   var min = $Native$Basics.min;-   var GT = {ctor: "GT"};-   var EQ = {ctor: "EQ"};-   var LT = {ctor: "LT"};-   var compare = $Native$Basics.compare;-   _op[">="] = $Native$Basics.ge;-   _op["<="] = $Native$Basics.le;-   _op[">"] = $Native$Basics.gt;-   _op["<"] = $Native$Basics.lt;-   _op["/="] = $Native$Basics.neq;-   _op["=="] = $Native$Basics.eq;-   var e = $Native$Basics.e;-   var pi = $Native$Basics.pi;-   var clamp = $Native$Basics.clamp;-   var logBase = $Native$Basics.logBase;-   var abs = $Native$Basics.abs;-   var negate = $Native$Basics.negate;-   var sqrt = $Native$Basics.sqrt;-   var atan2 = $Native$Basics.atan2;-   var atan = $Native$Basics.atan;-   var asin = $Native$Basics.asin;-   var acos = $Native$Basics.acos;-   var tan = $Native$Basics.tan;-   var sin = $Native$Basics.sin;-   var cos = $Native$Basics.cos;-   _op["^"] = $Native$Basics.exp;-   _op["%"] = $Native$Basics.mod;-   var rem = $Native$Basics.rem;-   _op["//"] = $Native$Basics.div;-   _op["/"] = $Native$Basics.floatDiv;-   _op["*"] = $Native$Basics.mul;-   _op["-"] = $Native$Basics.sub;-   _op["+"] = $Native$Basics.add;-   var toPolar = $Native$Basics.toPolar;-   var fromPolar = $Native$Basics.fromPolar;-   var turns = $Native$Basics.turns;-   var degrees = $Native$Basics.degrees;-   var radians = function (t) {-      return t;-   };-   _elm.Basics.values = {_op: _op-                        ,radians: radians-                        ,degrees: degrees-                        ,turns: turns-                        ,fromPolar: fromPolar-                        ,toPolar: toPolar-                        ,rem: rem-                        ,cos: cos-                        ,sin: sin-                        ,tan: tan-                        ,acos: acos-                        ,asin: asin-                        ,atan: atan-                        ,atan2: atan2-                        ,sqrt: sqrt-                        ,negate: negate-                        ,abs: abs-                        ,logBase: logBase-                        ,clamp: clamp-                        ,pi: pi-                        ,e: e-                        ,compare: compare-                        ,LT: LT-                        ,EQ: EQ-                        ,GT: GT-                        ,min: min-                        ,max: max-                        ,xor: xor-                        ,not: not-                        ,otherwise: otherwise-                        ,round: round-                        ,truncate: truncate-                        ,floor: floor-                        ,ceiling: ceiling-                        ,toFloat: toFloat-                        ,isNaN: isNaN-                        ,isInfinite: isInfinite-                        ,toString: toString-                        ,identity: identity-                        ,always: always-                        ,fst: fst-                        ,snd: snd-                        ,flip: flip-                        ,curry: curry-                        ,uncurry: uncurry};-   return _elm.Basics.values;-};-Elm.Char = Elm.Char || {};-Elm.Char.make = function (_elm) {-   "use strict";-   _elm.Char = _elm.Char || {};-   if (_elm.Char.values)-   return _elm.Char.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Char",-   $Native$Char = Elm.Native.Char.make(_elm);-   var fromCode = $Native$Char.fromCode;-   var toCode = $Native$Char.toCode;-   var toLocaleLower = $Native$Char.toLocaleLower;-   var toLocaleUpper = $Native$Char.toLocaleUpper;-   var toLower = $Native$Char.toLower;-   var toUpper = $Native$Char.toUpper;-   var isHexDigit = $Native$Char.isHexDigit;-   var isOctDigit = $Native$Char.isOctDigit;-   var isDigit = $Native$Char.isDigit;-   var isLower = $Native$Char.isLower;-   var isUpper = $Native$Char.isUpper;-   _elm.Char.values = {_op: _op-                      ,isUpper: isUpper-                      ,isLower: isLower-                      ,isDigit: isDigit-                      ,isOctDigit: isOctDigit-                      ,isHexDigit: isHexDigit-                      ,toUpper: toUpper-                      ,toLower: toLower-                      ,toLocaleUpper: toLocaleUpper-                      ,toLocaleLower: toLocaleLower-                      ,toCode: toCode-                      ,fromCode: fromCode};-   return _elm.Char.values;-};-Elm.Color = Elm.Color || {};-Elm.Color.make = function (_elm) {-   "use strict";-   _elm.Color = _elm.Color || {};-   if (_elm.Color.values)-   return _elm.Color.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Color",-   $Basics = Elm.Basics.make(_elm);-   var Radial = F5(function (a,-   b,-   c,-   d,-   e) {-      return {ctor: "Radial"-             ,_0: a-             ,_1: b-             ,_2: c-             ,_3: d-             ,_4: e};-   });-   var radial = Radial;-   var Linear = F3(function (a,-   b,-   c) {-      return {ctor: "Linear"-             ,_0: a-             ,_1: b-             ,_2: c};-   });-   var linear = Linear;-   var fmod = F2(function (f,n) {-      return function () {-         var integer = $Basics.floor(f);-         return $Basics.toFloat(A2($Basics._op["%"],-         integer,-         n)) + f - $Basics.toFloat(integer);-      }();-   });-   var rgbToHsl = F3(function (red,-   green,-   blue) {-      return function () {-         var b = $Basics.toFloat(blue) / 255;-         var g = $Basics.toFloat(green) / 255;-         var r = $Basics.toFloat(red) / 255;-         var cMax = A2($Basics.max,-         A2($Basics.max,r,g),-         b);-         var cMin = A2($Basics.min,-         A2($Basics.min,r,g),-         b);-         var c = cMax - cMin;-         var lightness = (cMax + cMin) / 2;-         var saturation = _U.eq(lightness,-         0) ? 0 : c / (1 - $Basics.abs(2 * lightness - 1));-         var hue = $Basics.degrees(60) * (_U.eq(cMax,-         r) ? A2(fmod,-         (g - b) / c,-         6) : _U.eq(cMax,-         g) ? (b - r) / c + 2 : _U.eq(cMax,-         b) ? (r - g) / c + 4 : _U.badIf($moduleName,-         "between lines 141 and 143"));-         return {ctor: "_Tuple3"-                ,_0: hue-                ,_1: saturation-                ,_2: lightness};-      }();-   });-   var hslToRgb = F3(function (hue,-   saturation,-   lightness) {-      return function () {-         var hue$ = hue / $Basics.degrees(60);-         var chroma = (1 - $Basics.abs(2 * lightness - 1)) * saturation;-         var x = chroma * (1 - $Basics.abs(A2(fmod,-         hue$,-         2) - 1));-         var $ = _U.cmp(hue$,-         0) < 0 ? {ctor: "_Tuple3"-                  ,_0: 0-                  ,_1: 0-                  ,_2: 0} : _U.cmp(hue$,-         1) < 0 ? {ctor: "_Tuple3"-                  ,_0: chroma-                  ,_1: x-                  ,_2: 0} : _U.cmp(hue$,-         2) < 0 ? {ctor: "_Tuple3"-                  ,_0: x-                  ,_1: chroma-                  ,_2: 0} : _U.cmp(hue$,-         3) < 0 ? {ctor: "_Tuple3"-                  ,_0: 0-                  ,_1: chroma-                  ,_2: x} : _U.cmp(hue$,-         4) < 0 ? {ctor: "_Tuple3"-                  ,_0: 0-                  ,_1: x-                  ,_2: chroma} : _U.cmp(hue$,-         5) < 0 ? {ctor: "_Tuple3"-                  ,_0: x-                  ,_1: 0-                  ,_2: chroma} : _U.cmp(hue$,-         6) < 0 ? {ctor: "_Tuple3"-                  ,_0: chroma-                  ,_1: 0-                  ,_2: x} : {ctor: "_Tuple3"-                            ,_0: 0-                            ,_1: 0-                            ,_2: 0},-         r = $._0,-         g = $._1,-         b = $._2;-         var m = lightness - chroma / 2;-         return {ctor: "_Tuple3"-                ,_0: r + m-                ,_1: g + m-                ,_2: b + m};-      }();-   });-   var toRgb = function (color) {-      return function () {-         switch (color.ctor)-         {case "HSLA":-            return function () {-                 var $ = A3(hslToRgb,-                 color._0,-                 color._1,-                 color._2),-                 r = $._0,-                 g = $._1,-                 b = $._2;-                 return {_: {}-                        ,alpha: color._3-                        ,blue: $Basics.round(255 * b)-                        ,green: $Basics.round(255 * g)-                        ,red: $Basics.round(255 * r)};-              }();-            case "RGBA": return {_: {}-                                ,alpha: color._3-                                ,blue: color._2-                                ,green: color._1-                                ,red: color._0};}-         _U.badCase($moduleName,-         "between lines 115 and 123");-      }();-   };-   var toHsl = function (color) {-      return function () {-         switch (color.ctor)-         {case "HSLA": return {_: {}-                              ,alpha: color._3-                              ,hue: color._0-                              ,lightness: color._2-                              ,saturation: color._1};-            case "RGBA":-            return function () {-                 var $ = A3(rgbToHsl,-                 color._0,-                 color._1,-                 color._2),-                 h = $._0,-                 s = $._1,-                 l = $._2;-                 return {_: {}-                        ,alpha: color._3-                        ,hue: h-                        ,lightness: l-                        ,saturation: s};-              }();}-         _U.badCase($moduleName,-         "between lines 105 and 112");-      }();-   };-   var HSLA = F4(function (a,-   b,-   c,-   d) {-      return {ctor: "HSLA"-             ,_0: a-             ,_1: b-             ,_2: c-             ,_3: d};-   });-   var hsla = F4(function (hue,-   saturation,-   lightness,-   alpha) {-      return A4(HSLA,-      hue - $Basics.turns($Basics.toFloat($Basics.floor(hue / (2 * $Basics.pi)))),-      saturation,-      lightness,-      alpha);-   });-   var hsl = F3(function (hue,-   saturation,-   lightness) {-      return A4(hsla,-      hue,-      saturation,-      lightness,-      1);-   });-   var complement = function (color) {-      return function () {-         switch (color.ctor)-         {case "HSLA": return A4(hsla,-              color._0 + $Basics.degrees(180),-              color._1,-              color._2,-              color._3);-            case "RGBA":-            return function () {-                 var $ = A3(rgbToHsl,-                 color._0,-                 color._1,-                 color._2),-                 h = $._0,-                 s = $._1,-                 l = $._2;-                 return A4(hsla,-                 h + $Basics.degrees(180),-                 s,-                 l,-                 color._3);-              }();}-         _U.badCase($moduleName,-         "between lines 96 and 102");-      }();-   };-   var grayscale = function (p) {-      return A4(HSLA,0,0,1 - p,1);-   };-   var greyscale = function (p) {-      return A4(HSLA,0,0,1 - p,1);-   };-   var RGBA = F4(function (a,-   b,-   c,-   d) {-      return {ctor: "RGBA"-             ,_0: a-             ,_1: b-             ,_2: c-             ,_3: d};-   });-   var rgba = RGBA;-   var rgb = F3(function (r,g,b) {-      return A4(RGBA,r,g,b,1);-   });-   var lightRed = A4(RGBA,-   239,-   41,-   41,-   1);-   var red = A4(RGBA,204,0,0,1);-   var darkRed = A4(RGBA,-   164,-   0,-   0,-   1);-   var lightOrange = A4(RGBA,-   252,-   175,-   62,-   1);-   var orange = A4(RGBA,-   245,-   121,-   0,-   1);-   var darkOrange = A4(RGBA,-   206,-   92,-   0,-   1);-   var lightYellow = A4(RGBA,-   255,-   233,-   79,-   1);-   var yellow = A4(RGBA,-   237,-   212,-   0,-   1);-   var darkYellow = A4(RGBA,-   196,-   160,-   0,-   1);-   var lightGreen = A4(RGBA,-   138,-   226,-   52,-   1);-   var green = A4(RGBA,-   115,-   210,-   22,-   1);-   var darkGreen = A4(RGBA,-   78,-   154,-   6,-   1);-   var lightBlue = A4(RGBA,-   114,-   159,-   207,-   1);-   var blue = A4(RGBA,-   52,-   101,-   164,-   1);-   var darkBlue = A4(RGBA,-   32,-   74,-   135,-   1);-   var lightPurple = A4(RGBA,-   173,-   127,-   168,-   1);-   var purple = A4(RGBA,-   117,-   80,-   123,-   1);-   var darkPurple = A4(RGBA,-   92,-   53,-   102,-   1);-   var lightBrown = A4(RGBA,-   233,-   185,-   110,-   1);-   var brown = A4(RGBA,-   193,-   125,-   17,-   1);-   var darkBrown = A4(RGBA,-   143,-   89,-   2,-   1);-   var black = A4(RGBA,0,0,0,1);-   var white = A4(RGBA,-   255,-   255,-   255,-   1);-   var lightGrey = A4(RGBA,-   238,-   238,-   236,-   1);-   var grey = A4(RGBA,-   211,-   215,-   207,-   1);-   var darkGrey = A4(RGBA,-   186,-   189,-   182,-   1);-   var lightGray = A4(RGBA,-   238,-   238,-   236,-   1);-   var gray = A4(RGBA,-   211,-   215,-   207,-   1);-   var darkGray = A4(RGBA,-   186,-   189,-   182,-   1);-   var lightCharcoal = A4(RGBA,-   136,-   138,-   133,-   1);-   var charcoal = A4(RGBA,-   85,-   87,-   83,-   1);-   var darkCharcoal = A4(RGBA,-   46,-   52,-   54,-   1);-   _elm.Color.values = {_op: _op-                       ,RGBA: RGBA-                       ,HSLA: HSLA-                       ,rgba: rgba-                       ,rgb: rgb-                       ,hsla: hsla-                       ,hsl: hsl-                       ,grayscale: grayscale-                       ,greyscale: greyscale-                       ,complement: complement-                       ,toHsl: toHsl-                       ,toRgb: toRgb-                       ,fmod: fmod-                       ,rgbToHsl: rgbToHsl-                       ,hslToRgb: hslToRgb-                       ,Linear: Linear-                       ,Radial: Radial-                       ,linear: linear-                       ,radial: radial-                       ,lightRed: lightRed-                       ,red: red-                       ,darkRed: darkRed-                       ,lightOrange: lightOrange-                       ,orange: orange-                       ,darkOrange: darkOrange-                       ,lightYellow: lightYellow-                       ,yellow: yellow-                       ,darkYellow: darkYellow-                       ,lightGreen: lightGreen-                       ,green: green-                       ,darkGreen: darkGreen-                       ,lightBlue: lightBlue-                       ,blue: blue-                       ,darkBlue: darkBlue-                       ,lightPurple: lightPurple-                       ,purple: purple-                       ,darkPurple: darkPurple-                       ,lightBrown: lightBrown-                       ,brown: brown-                       ,darkBrown: darkBrown-                       ,black: black-                       ,white: white-                       ,lightGrey: lightGrey-                       ,grey: grey-                       ,darkGrey: darkGrey-                       ,lightGray: lightGray-                       ,gray: gray-                       ,darkGray: darkGray-                       ,lightCharcoal: lightCharcoal-                       ,charcoal: charcoal-                       ,darkCharcoal: darkCharcoal};-   return _elm.Color.values;-};-Elm.Debug = Elm.Debug || {};-Elm.Debug.make = function (_elm) {-   "use strict";-   _elm.Debug = _elm.Debug || {};-   if (_elm.Debug.values)-   return _elm.Debug.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Debug",-   $Graphics$Collage = Elm.Graphics.Collage.make(_elm),-   $Native$Debug = Elm.Native.Debug.make(_elm);-   var trace = $Native$Debug.tracePath;-   var watchSummary = $Native$Debug.watchSummary;-   var watch = $Native$Debug.watch;-   var crash = $Native$Debug.crash;-   var log = $Native$Debug.log;-   _elm.Debug.values = {_op: _op-                       ,log: log-                       ,crash: crash-                       ,watch: watch-                       ,watchSummary: watchSummary-                       ,trace: trace};-   return _elm.Debug.values;-};-Elm.Dict = Elm.Dict || {};-Elm.Dict.make = function (_elm) {-   "use strict";-   _elm.Dict = _elm.Dict || {};-   if (_elm.Dict.values)-   return _elm.Dict.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Dict",-   $Basics = Elm.Basics.make(_elm),-   $List = Elm.List.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $Native$Debug = Elm.Native.Debug.make(_elm),-   $String = Elm.String.make(_elm);-   var foldr = F3(function (f,-   acc,-   t) {-      return function () {-         switch (t.ctor)-         {case "RBEmpty":-            switch (t._0.ctor)-              {case "LBlack": return acc;}-              break;-            case "RBNode": return A3(foldr,-              f,-              A3(f,-              t._1,-              t._2,-              A3(foldr,f,acc,t._4)),-              t._3);}-         _U.badCase($moduleName,-         "between lines 409 and 417");-      }();-   });-   var keys = function (dict) {-      return A3(foldr,-      F3(function (key,-      value,-      keyList) {-         return A2($List._op["::"],-         key,-         keyList);-      }),-      _L.fromArray([]),-      dict);-   };-   var values = function (dict) {-      return A3(foldr,-      F3(function (key,-      value,-      valueList) {-         return A2($List._op["::"],-         value,-         valueList);-      }),-      _L.fromArray([]),-      dict);-   };-   var toList = function (dict) {-      return A3(foldr,-      F3(function (key,value,list) {-         return A2($List._op["::"],-         {ctor: "_Tuple2"-         ,_0: key-         ,_1: value},-         list);-      }),-      _L.fromArray([]),-      dict);-   };-   var foldl = F3(function (f,-   acc,-   dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            switch (dict._0.ctor)-              {case "LBlack": return acc;}-              break;-            case "RBNode": return A3(foldl,-              f,-              A3(f,-              dict._1,-              dict._2,-              A3(foldl,f,acc,dict._3)),-              dict._4);}-         _U.badCase($moduleName,-         "between lines 398 and 406");-      }();-   });-   var isBBlack = function (dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            switch (dict._0.ctor)-              {case "LBBlack": return true;}-              break;-            case "RBNode":-            switch (dict._0.ctor)-              {case "BBlack": return true;}-              break;}-         return false;-      }();-   };-   var showFlag = function (f) {-      return function () {-         switch (f.ctor)-         {case "Insert": return "Insert";-            case "Remove": return "Remove";-            case "Same": return "Same";}-         _U.badCase($moduleName,-         "between lines 174 and 180");-      }();-   };-   var Same = {ctor: "Same"};-   var Remove = {ctor: "Remove"};-   var Insert = {ctor: "Insert"};-   var get = F2(function (targetKey,-   dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            switch (dict._0.ctor)-              {case "LBlack":-                 return $Maybe.Nothing;}-              break;-            case "RBNode":-            return function () {-                 var _v29 = A2($Basics.compare,-                 targetKey,-                 dict._1);-                 switch (_v29.ctor)-                 {case "EQ":-                    return $Maybe.Just(dict._2);-                    case "GT": return A2(get,-                      targetKey,-                      dict._4);-                    case "LT": return A2(get,-                      targetKey,-                      dict._3);}-                 _U.badCase($moduleName,-                 "between lines 130 and 136");-              }();}-         _U.badCase($moduleName,-         "between lines 125 and 136");-      }();-   });-   var member = F2(function (key,-   dict) {-      return function () {-         var _v30 = A2(get,key,dict);-         switch (_v30.ctor)-         {case "Just": return true;-            case "Nothing": return false;}-         _U.badCase($moduleName,-         "between lines 139 and 141");-      }();-   });-   var max = function (dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            return $Native$Debug.crash("(max Empty) is not defined");-            case "RBNode":-            switch (dict._4.ctor)-              {case "RBEmpty":-                 return {ctor: "_Tuple2"-                        ,_0: dict._1-                        ,_1: dict._2};}-              return max(dict._4);}-         _U.badCase($moduleName,-         "between lines 101 and 122");-      }();-   };-   var min = function (dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            switch (dict._0.ctor)-              {case "LBlack":-                 return $Native$Debug.crash("(min Empty) is not defined");}-              break;-            case "RBNode":-            switch (dict._3.ctor)-              {case "RBEmpty":-                 switch (dict._3._0.ctor)-                   {case "LBlack":-                      return {ctor: "_Tuple2"-                             ,_0: dict._1-                             ,_1: dict._2};}-                   break;}-              return min(dict._3);}-         _U.badCase($moduleName,-         "between lines 88 and 96");-      }();-   };-   var RBEmpty = function (a) {-      return {ctor: "RBEmpty"-             ,_0: a};-   };-   var RBNode = F5(function (a,-   b,-   c,-   d,-   e) {-      return {ctor: "RBNode"-             ,_0: a-             ,_1: b-             ,_2: c-             ,_3: d-             ,_4: e};-   });-   var showLColor = function (color) {-      return function () {-         switch (color.ctor)-         {case "LBBlack":-            return "LBBlack";-            case "LBlack": return "LBlack";}-         _U.badCase($moduleName,-         "between lines 71 and 73");-      }();-   };-   var LBBlack = {ctor: "LBBlack"};-   var LBlack = {ctor: "LBlack"};-   var empty = RBEmpty(LBlack);-   var map = F2(function (f,dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            switch (dict._0.ctor)-              {case "LBlack":-                 return RBEmpty(LBlack);}-              break;-            case "RBNode": return A5(RBNode,-              dict._0,-              dict._1,-              A2(f,dict._1,dict._2),-              A2(map,f,dict._3),-              A2(map,f,dict._4));}-         _U.badCase($moduleName,-         "between lines 386 and 395");-      }();-   });-   var showNColor = function (c) {-      return function () {-         switch (c.ctor)-         {case "BBlack": return "BBlack";-            case "Black": return "Black";-            case "NBlack": return "NBlack";-            case "Red": return "Red";}-         _U.badCase($moduleName,-         "between lines 57 and 61");-      }();-   };-   var reportRemBug = F4(function (msg,-   c,-   lgot,-   rgot) {-      return $Native$Debug.crash($String.concat(_L.fromArray(["Internal red-black tree invariant violated, expected "-                                                             ,msg-                                                             ," and got "-                                                             ,showNColor(c)-                                                             ,"/"-                                                             ,lgot-                                                             ,"/"-                                                             ,rgot-                                                             ,"\nPlease report this bug to <https://github.com/elm-lang/Elm/issues>"])));-   });-   var NBlack = {ctor: "NBlack"};-   var BBlack = {ctor: "BBlack"};-   var Black = {ctor: "Black"};-   var ensureBlackRoot = function (dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            switch (dict._0.ctor)-              {case "LBlack": return dict;}-              break;-            case "RBNode":-            switch (dict._0.ctor)-              {case "Black": return dict;-                 case "Red": return A5(RBNode,-                   Black,-                   dict._1,-                   dict._2,-                   dict._3,-                   dict._4);}-              break;}-         _U.badCase($moduleName,-         "between lines 146 and 158");-      }();-   };-   var blackish = function (t) {-      return function () {-         switch (t.ctor)-         {case "RBEmpty": return true;-            case "RBNode":-            return _U.eq(t._0,-              Black) || _U.eq(t._0,BBlack);}-         _U.badCase($moduleName,-         "between lines 331 and 333");-      }();-   };-   var blacken = function (t) {-      return function () {-         switch (t.ctor)-         {case "RBEmpty":-            return RBEmpty(LBlack);-            case "RBNode": return A5(RBNode,-              Black,-              t._1,-              t._2,-              t._3,-              t._4);}-         _U.badCase($moduleName,-         "between lines 370 and 372");-      }();-   };-   var Red = {ctor: "Red"};-   var moreBlack = function (color) {-      return function () {-         switch (color.ctor)-         {case "BBlack":-            return $Native$Debug.crash("Can\'t make a double black node more black!");-            case "Black": return BBlack;-            case "NBlack": return Red;-            case "Red": return Black;}-         _U.badCase($moduleName,-         "between lines 236 and 240");-      }();-   };-   var lessBlack = function (color) {-      return function () {-         switch (color.ctor)-         {case "BBlack": return Black;-            case "Black": return Red;-            case "NBlack":-            return $Native$Debug.crash("Can\'t make a negative black node less black!");-            case "Red": return NBlack;}-         _U.badCase($moduleName,-         "between lines 245 and 249");-      }();-   };-   var lessBlackTree = function (dict) {-      return function () {-         switch (dict.ctor)-         {case "RBEmpty":-            switch (dict._0.ctor)-              {case "LBBlack":-                 return RBEmpty(LBlack);}-              break;-            case "RBNode": return A5(RBNode,-              lessBlack(dict._0),-              dict._1,-              dict._2,-              dict._3,-              dict._4);}-         _U.badCase($moduleName,-         "between lines 254 and 256");-      }();-   };-   var redden = function (t) {-      return function () {-         switch (t.ctor)-         {case "RBEmpty":-            return $Native$Debug.crash("can\'t make a Leaf red");-            case "RBNode": return A5(RBNode,-              Red,-              t._1,-              t._2,-              t._3,-              t._4);}-         _U.badCase($moduleName,-         "between lines 378 and 383");-      }();-   };-   var balance_node = function (t) {-      return function () {-         var assemble = function (col) {-            return function (xk) {-               return function (xv) {-                  return function (yk) {-                     return function (yv) {-                        return function (zk) {-                           return function (zv) {-                              return function (a) {-                                 return function (b) {-                                    return function (c) {-                                       return function (d) {-                                          return A5(RBNode,-                                          lessBlack(col),-                                          yk,-                                          yv,-                                          A5(RBNode,Black,xk,xv,a,b),-                                          A5(RBNode,Black,zk,zv,c,d));-                                       };-                                    };-                                 };-                              };-                           };-                        };-                     };-                  };-               };-            };-         };-         return blackish(t) ? function () {-            switch (t.ctor)-            {case "RBNode":-               switch (t._3.ctor)-                 {case "RBNode":-                    switch (t._3._0.ctor)-                      {case "Red":-                         switch (t._3._3.ctor)-                           {case "RBNode":-                              switch (t._3._3._0.ctor)-                                {case "Red":-                                   return assemble(t._0)(t._3._3._1)(t._3._3._2)(t._3._1)(t._3._2)(t._1)(t._2)(t._3._3._3)(t._3._3._4)(t._3._4)(t._4);}-                                break;}-                           switch (t._3._4.ctor)-                           {case "RBNode":-                              switch (t._3._4._0.ctor)-                                {case "Red":-                                   return assemble(t._0)(t._3._1)(t._3._2)(t._3._4._1)(t._3._4._2)(t._1)(t._2)(t._3._3)(t._3._4._3)(t._3._4._4)(t._4);}-                                break;}-                           break;}-                      break;}-                 switch (t._4.ctor)-                 {case "RBNode":-                    switch (t._4._0.ctor)-                      {case "Red":-                         switch (t._4._3.ctor)-                           {case "RBNode":-                              switch (t._4._3._0.ctor)-                                {case "Red":-                                   return assemble(t._0)(t._1)(t._2)(t._4._3._1)(t._4._3._2)(t._4._1)(t._4._2)(t._3)(t._4._3._3)(t._4._3._4)(t._4._4);}-                                break;}-                           switch (t._4._4.ctor)-                           {case "RBNode":-                              switch (t._4._4._0.ctor)-                                {case "Red":-                                   return assemble(t._0)(t._1)(t._2)(t._4._1)(t._4._2)(t._4._4._1)(t._4._4._2)(t._3)(t._4._3)(t._4._4._3)(t._4._4._4);}-                                break;}-                           break;}-                      break;}-                 switch (t._0.ctor)-                 {case "BBlack":-                    switch (t._4.ctor)-                      {case "RBNode":-                         switch (t._4._0.ctor)-                           {case "NBlack":-                              switch (t._4._3.ctor)-                                {case "RBNode":-                                   switch (t._4._3._0.ctor)-                                     {case "Black":-                                        return function () {-                                             switch (t._4._4.ctor)-                                             {case "RBNode":-                                                switch (t._4._4._0.ctor)-                                                  {case "Black":-                                                     return A5(RBNode,-                                                       Black,-                                                       t._4._3._1,-                                                       t._4._3._2,-                                                       A5(RBNode,-                                                       Black,-                                                       t._1,-                                                       t._2,-                                                       t._3,-                                                       t._4._3._3),-                                                       A5(balance,-                                                       Black,-                                                       t._4._1,-                                                       t._4._2,-                                                       t._4._3._4,-                                                       redden(t._4._4)));}-                                                  break;}-                                             return t;-                                          }();}-                                     break;}-                                break;}-                           break;}-                      switch (t._3.ctor)-                      {case "RBNode":-                         switch (t._3._0.ctor)-                           {case "NBlack":-                              switch (t._3._4.ctor)-                                {case "RBNode":-                                   switch (t._3._4._0.ctor)-                                     {case "Black":-                                        return function () {-                                             switch (t._3._3.ctor)-                                             {case "RBNode":-                                                switch (t._3._3._0.ctor)-                                                  {case "Black":-                                                     return A5(RBNode,-                                                       Black,-                                                       t._3._4._1,-                                                       t._3._4._2,-                                                       A5(balance,-                                                       Black,-                                                       t._3._1,-                                                       t._3._2,-                                                       redden(t._3._3),-                                                       t._3._4._3),-                                                       A5(RBNode,-                                                       Black,-                                                       t._1,-                                                       t._2,-                                                       t._3._4._4,-                                                       t._4));}-                                                  break;}-                                             return t;-                                          }();}-                                     break;}-                                break;}-                           break;}-                      break;}-                 break;}-            return t;-         }() : t;-      }();-   };-   var balance = F5(function (c,-   k,-   v,-   l,-   r) {-      return balance_node(A5(RBNode,-      c,-      k,-      v,-      l,-      r));-   });-   var bubble = F5(function (c,-   k,-   v,-   l,-   r) {-      return isBBlack(l) || isBBlack(r) ? A5(balance,-      moreBlack(c),-      k,-      v,-      lessBlackTree(l),-      lessBlackTree(r)) : A5(RBNode,-      c,-      k,-      v,-      l,-      r);-   });-   var remove_max = F5(function (c,-   k,-   v,-   l,-   r) {-      return function () {-         switch (r.ctor)-         {case "RBEmpty": return A3(rem,-              c,-              l,-              r);-            case "RBNode": return A5(bubble,-              c,-              k,-              v,-              l,-              A5(remove_max,-              r._0,-              r._1,-              r._2,-              r._3,-              r._4));}-         _U.badCase($moduleName,-         "between lines 315 and 320");-      }();-   });-   var rem = F3(function (c,l,r) {-      return function () {-         var _v169 = {ctor: "_Tuple2"-                     ,_0: l-                     ,_1: r};-         switch (_v169.ctor)-         {case "_Tuple2":-            switch (_v169._0.ctor)-              {case "RBEmpty":-                 switch (_v169._1.ctor)-                   {case "RBEmpty":-                      return function () {-                           switch (c.ctor)-                           {case "Black":-                              return RBEmpty(LBBlack);-                              case "Red":-                              return RBEmpty(LBlack);}-                           _U.badCase($moduleName,-                           "between lines 274 and 278");-                        }();-                      case "RBNode":-                      return function () {-                           var _v191 = {ctor: "_Tuple3"-                                       ,_0: c-                                       ,_1: _v169._0._0-                                       ,_2: _v169._1._0};-                           switch (_v191.ctor)-                           {case "_Tuple3":-                              switch (_v191._0.ctor)-                                {case "Black":-                                   switch (_v191._1.ctor)-                                     {case "LBlack":-                                        switch (_v191._2.ctor)-                                          {case "Red": return A5(RBNode,-                                               Black,-                                               _v169._1._1,-                                               _v169._1._2,-                                               _v169._1._3,-                                               _v169._1._4);}-                                          break;}-                                     break;}-                                break;}-                           return A4(reportRemBug,-                           "Black/LBlack/Red",-                           c,-                           showLColor(_v169._0._0),-                           showNColor(_v169._1._0));-                        }();}-                   break;-                 case "RBNode":-                 switch (_v169._1.ctor)-                   {case "RBEmpty":-                      return function () {-                           var _v195 = {ctor: "_Tuple3"-                                       ,_0: c-                                       ,_1: _v169._0._0-                                       ,_2: _v169._1._0};-                           switch (_v195.ctor)-                           {case "_Tuple3":-                              switch (_v195._0.ctor)-                                {case "Black":-                                   switch (_v195._1.ctor)-                                     {case "Red":-                                        switch (_v195._2.ctor)-                                          {case "LBlack":-                                             return A5(RBNode,-                                               Black,-                                               _v169._0._1,-                                               _v169._0._2,-                                               _v169._0._3,-                                               _v169._0._4);}-                                          break;}-                                     break;}-                                break;}-                           return A4(reportRemBug,-                           "Black/Red/LBlack",-                           c,-                           showNColor(_v169._0._0),-                           showLColor(_v169._1._0));-                        }();-                      case "RBNode":-                      return function () {-                           var l$ = A5(remove_max,-                           _v169._0._0,-                           _v169._0._1,-                           _v169._0._2,-                           _v169._0._3,-                           _v169._0._4);-                           var r = A5(RBNode,-                           _v169._1._0,-                           _v169._1._1,-                           _v169._1._2,-                           _v169._1._3,-                           _v169._1._4);-                           var l = A5(RBNode,-                           _v169._0._0,-                           _v169._0._1,-                           _v169._0._2,-                           _v169._0._3,-                           _v169._0._4);-                           var $ = max(l),-                           k = $._0,-                           v = $._1;-                           return A5(bubble,c,k,v,l$,r);-                        }();}-                   break;}-              break;}-         _U.badCase($moduleName,-         "between lines 272 and 301");-      }();-   });-   var update = F3(function (k,-   alter,-   dict) {-      return function () {-         var up = function (dict) {-            return function () {-               switch (dict.ctor)-               {case "RBEmpty":-                  switch (dict._0.ctor)-                    {case "LBlack":-                       return function () {-                            var _v206 = alter($Maybe.Nothing);-                            switch (_v206.ctor)-                            {case "Just":-                               return {ctor: "_Tuple2"-                                      ,_0: Insert-                                      ,_1: A5(RBNode,-                                      Red,-                                      k,-                                      _v206._0,-                                      empty,-                                      empty)};-                               case "Nothing":-                               return {ctor: "_Tuple2"-                                      ,_0: Same-                                      ,_1: empty};}-                            _U.badCase($moduleName,-                            "between lines 186 and 190");-                         }();}-                    break;-                  case "RBNode":-                  return function () {-                       var _v208 = A2($Basics.compare,-                       k,-                       dict._1);-                       switch (_v208.ctor)-                       {case "EQ": return function () {-                               var _v209 = alter($Maybe.Just(dict._2));-                               switch (_v209.ctor)-                               {case "Just":-                                  return {ctor: "_Tuple2"-                                         ,_0: Same-                                         ,_1: A5(RBNode,-                                         dict._0,-                                         dict._1,-                                         _v209._0,-                                         dict._3,-                                         dict._4)};-                                  case "Nothing":-                                  return {ctor: "_Tuple2"-                                         ,_0: Remove-                                         ,_1: A3(rem,-                                         dict._0,-                                         dict._3,-                                         dict._4)};}-                               _U.badCase($moduleName,-                               "between lines 193 and 198");-                            }();-                          case "GT": return function () {-                               var $ = up(dict._4),-                               flag = $._0,-                               newRight = $._1;-                               return function () {-                                  switch (flag.ctor)-                                  {case "Insert":-                                     return {ctor: "_Tuple2"-                                            ,_0: Insert-                                            ,_1: A5(balance,-                                            dict._0,-                                            dict._1,-                                            dict._2,-                                            dict._3,-                                            newRight)};-                                     case "Remove":-                                     return {ctor: "_Tuple2"-                                            ,_0: Remove-                                            ,_1: A5(bubble,-                                            dict._0,-                                            dict._1,-                                            dict._2,-                                            dict._3,-                                            newRight)};-                                     case "Same":-                                     return {ctor: "_Tuple2"-                                            ,_0: Same-                                            ,_1: A5(RBNode,-                                            dict._0,-                                            dict._1,-                                            dict._2,-                                            dict._3,-                                            newRight)};}-                                  _U.badCase($moduleName,-                                  "between lines 207 and 212");-                               }();-                            }();-                          case "LT": return function () {-                               var $ = up(dict._3),-                               flag = $._0,-                               newLeft = $._1;-                               return function () {-                                  switch (flag.ctor)-                                  {case "Insert":-                                     return {ctor: "_Tuple2"-                                            ,_0: Insert-                                            ,_1: A5(balance,-                                            dict._0,-                                            dict._1,-                                            dict._2,-                                            newLeft,-                                            dict._4)};-                                     case "Remove":-                                     return {ctor: "_Tuple2"-                                            ,_0: Remove-                                            ,_1: A5(bubble,-                                            dict._0,-                                            dict._1,-                                            dict._2,-                                            newLeft,-                                            dict._4)};-                                     case "Same":-                                     return {ctor: "_Tuple2"-                                            ,_0: Same-                                            ,_1: A5(RBNode,-                                            dict._0,-                                            dict._1,-                                            dict._2,-                                            newLeft,-                                            dict._4)};}-                                  _U.badCase($moduleName,-                                  "between lines 200 and 205");-                               }();-                            }();}-                       _U.badCase($moduleName,-                       "between lines 191 and 212");-                    }();}-               _U.badCase($moduleName,-               "between lines 184 and 212");-            }();-         };-         var $ = up(dict),-         flag = $._0,-         updatedDict = $._1;-         return function () {-            switch (flag.ctor)-            {case "Insert":-               return ensureBlackRoot(updatedDict);-               case "Remove":-               return blacken(updatedDict);-               case "Same":-               return updatedDict;}-            _U.badCase($moduleName,-            "between lines 214 and 220");-         }();-      }();-   });-   var insert = F3(function (key,-   value,-   dict) {-      return A3(update,-      key,-      $Basics.always($Maybe.Just(value)),-      dict);-   });-   var singleton = F2(function (key,-   value) {-      return A3(insert,-      key,-      value,-      RBEmpty(LBlack));-   });-   var union = F2(function (t1,-   t2) {-      return A3(foldl,-      insert,-      t2,-      t1);-   });-   var fromList = function (assocs) {-      return A3($List.foldl,-      F2(function (_v214,dict) {-         return function () {-            switch (_v214.ctor)-            {case "_Tuple2":-               return A3(insert,-                 _v214._0,-                 _v214._1,-                 dict);}-            _U.badCase($moduleName,-            "on line 458, column 38 to 59");-         }();-      }),-      empty,-      assocs);-   };-   var filter = F2(function (predicate,-   dictionary) {-      return function () {-         var add = F3(function (key,-         value,-         dict) {-            return A2(predicate,-            key,-            value) ? A3(insert,-            key,-            value,-            dict) : dict;-         });-         return A3(foldl,-         add,-         empty,-         dictionary);-      }();-   });-   var intersect = F2(function (t1,-   t2) {-      return A2(filter,-      F2(function (k,_v218) {-         return function () {-            return A2(member,k,t2);-         }();-      }),-      t1);-   });-   var partition = F2(function (predicate,-   dict) {-      return function () {-         var add = F3(function (key,-         value,-         _v220) {-            return function () {-               switch (_v220.ctor)-               {case "_Tuple2":-                  return A2(predicate,-                    key,-                    value) ? {ctor: "_Tuple2"-                             ,_0: A3(insert,-                             key,-                             value,-                             _v220._0)-                             ,_1: _v220._1} : {ctor: "_Tuple2"-                                              ,_0: _v220._0-                                              ,_1: A3(insert,-                                              key,-                                              value,-                                              _v220._1)};}-               _U.badCase($moduleName,-               "between lines 479 and 481");-            }();-         });-         return A3(foldl,-         add,-         {ctor: "_Tuple2"-         ,_0: empty-         ,_1: empty},-         dict);-      }();-   });-   var remove = F2(function (key,-   dict) {-      return A3(update,-      key,-      $Basics.always($Maybe.Nothing),-      dict);-   });-   var diff = F2(function (t1,t2) {-      return A3(foldl,-      F3(function (k,v,t) {-         return A2(remove,k,t);-      }),-      t1,-      t2);-   });-   _elm.Dict.values = {_op: _op-                      ,empty: empty-                      ,singleton: singleton-                      ,insert: insert-                      ,update: update-                      ,get: get-                      ,remove: remove-                      ,member: member-                      ,filter: filter-                      ,partition: partition-                      ,foldl: foldl-                      ,foldr: foldr-                      ,map: map-                      ,union: union-                      ,intersect: intersect-                      ,diff: diff-                      ,keys: keys-                      ,values: values-                      ,toList: toList-                      ,fromList: fromList};-   return _elm.Dict.values;-};-Elm.Graphics = Elm.Graphics || {};-Elm.Graphics.Collage = Elm.Graphics.Collage || {};-Elm.Graphics.Collage.make = function (_elm) {-   "use strict";-   _elm.Graphics = _elm.Graphics || {};-   _elm.Graphics.Collage = _elm.Graphics.Collage || {};-   if (_elm.Graphics.Collage.values)-   return _elm.Graphics.Collage.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Graphics.Collage",-   $Basics = Elm.Basics.make(_elm),-   $Color = Elm.Color.make(_elm),-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $List = Elm.List.make(_elm),-   $Native$Graphics$Collage = Elm.Native.Graphics.Collage.make(_elm),-   $Transform2D = Elm.Transform2D.make(_elm);-   var ngon = F2(function (n,r) {-      return function () {-         var m = $Basics.toFloat(n);-         var t = 2 * $Basics.pi / m;-         var f = function (i) {-            return {ctor: "_Tuple2"-                   ,_0: r * $Basics.cos(t * i)-                   ,_1: r * $Basics.sin(t * i)};-         };-         return A2($List.map,-         f,-         _L.range(0,m - 1));-      }();-   });-   var oval = F2(function (w,h) {-      return function () {-         var hh = h / 2;-         var hw = w / 2;-         var n = 50;-         var t = 2 * $Basics.pi / n;-         var f = function (i) {-            return {ctor: "_Tuple2"-                   ,_0: hw * $Basics.cos(t * i)-                   ,_1: hh * $Basics.sin(t * i)};-         };-         return A2($List.map,-         f,-         _L.range(0,n - 1));-      }();-   });-   var circle = function (r) {-      return A2(oval,2 * r,2 * r);-   };-   var rect = F2(function (w,h) {-      return function () {-         var hh = h / 2;-         var hw = w / 2;-         return _L.fromArray([{ctor: "_Tuple2"-                              ,_0: 0 - hw-                              ,_1: 0 - hh}-                             ,{ctor: "_Tuple2"-                              ,_0: 0 - hw-                              ,_1: hh}-                             ,{ctor: "_Tuple2",_0: hw,_1: hh}-                             ,{ctor: "_Tuple2"-                              ,_0: hw-                              ,_1: 0 - hh}]);-      }();-   });-   var square = function (n) {-      return A2(rect,n,n);-   };-   var polygon = function (points) {-      return points;-   };-   var segment = F2(function (p1,-   p2) {-      return _L.fromArray([p1,p2]);-   });-   var path = function (ps) {-      return ps;-   };-   var collage = $Native$Graphics$Collage.collage;-   var alpha = F2(function (a,f) {-      return _U.replace([["alpha"-                         ,a]],-      f);-   });-   var rotate = F2(function (t,f) {-      return _U.replace([["theta"-                         ,f.theta + t]],-      f);-   });-   var scale = F2(function (s,f) {-      return _U.replace([["scale"-                         ,f.scale * s]],-      f);-   });-   var moveY = F2(function (y,f) {-      return _U.replace([["y"-                         ,f.y + y]],-      f);-   });-   var moveX = F2(function (x,f) {-      return _U.replace([["x"-                         ,f.x + x]],-      f);-   });-   var move = F2(function (_v0,f) {-      return function () {-         switch (_v0.ctor)-         {case "_Tuple2":-            return _U.replace([["x"-                               ,f.x + _v0._0]-                              ,["y",f.y + _v0._1]],-              f);}-         _U.badCase($moduleName,-         "on line 179, column 20 to 48");-      }();-   });-   var form = function (f) {-      return {_: {}-             ,alpha: 1-             ,form: f-             ,scale: 1-             ,theta: 0-             ,x: 0-             ,y: 0};-   };-   var Fill = function (a) {-      return {ctor: "Fill",_0: a};-   };-   var Line = function (a) {-      return {ctor: "Line",_0: a};-   };-   var FGroup = F2(function (a,b) {-      return {ctor: "FGroup"-             ,_0: a-             ,_1: b};-   });-   var group = function (fs) {-      return form(A2(FGroup,-      $Transform2D.identity,-      fs));-   };-   var groupTransform = F2(function (matrix,-   fs) {-      return form(A2(FGroup,-      matrix,-      fs));-   });-   var FElement = function (a) {-      return {ctor: "FElement"-             ,_0: a};-   };-   var toForm = function (e) {-      return form(FElement(e));-   };-   var FImage = F4(function (a,-   b,-   c,-   d) {-      return {ctor: "FImage"-             ,_0: a-             ,_1: b-             ,_2: c-             ,_3: d};-   });-   var sprite = F4(function (w,-   h,-   pos,-   src) {-      return form(A4(FImage,-      w,-      h,-      pos,-      src));-   });-   var FShape = F2(function (a,b) {-      return {ctor: "FShape"-             ,_0: a-             ,_1: b};-   });-   var fill = F2(function (style,-   shape) {-      return form(A2(FShape,-      Fill(style),-      shape));-   });-   var outlined = F2(function (style,-   shape) {-      return form(A2(FShape,-      Line(style),-      shape));-   });-   var FPath = F2(function (a,b) {-      return {ctor: "FPath"-             ,_0: a-             ,_1: b};-   });-   var traced = F2(function (style,-   path) {-      return form(A2(FPath,-      style,-      path));-   });-   var LineStyle = F6(function (a,-   b,-   c,-   d,-   e,-   f) {-      return {_: {}-             ,cap: c-             ,color: a-             ,dashOffset: f-             ,dashing: e-             ,join: d-             ,width: b};-   });-   var Clipped = {ctor: "Clipped"};-   var Sharp = function (a) {-      return {ctor: "Sharp",_0: a};-   };-   var Smooth = {ctor: "Smooth"};-   var Padded = {ctor: "Padded"};-   var Round = {ctor: "Round"};-   var Flat = {ctor: "Flat"};-   var defaultLine = {_: {}-                     ,cap: Flat-                     ,color: $Color.black-                     ,dashOffset: 0-                     ,dashing: _L.fromArray([])-                     ,join: Sharp(10)-                     ,width: 1};-   var solid = function (clr) {-      return _U.replace([["color"-                         ,clr]],-      defaultLine);-   };-   var dashed = function (clr) {-      return _U.replace([["color"-                         ,clr]-                        ,["dashing"-                         ,_L.fromArray([8,4])]],-      defaultLine);-   };-   var dotted = function (clr) {-      return _U.replace([["color"-                         ,clr]-                        ,["dashing"-                         ,_L.fromArray([3,3])]],-      defaultLine);-   };-   var Grad = function (a) {-      return {ctor: "Grad",_0: a};-   };-   var gradient = F2(function (grad,-   shape) {-      return A2(fill,-      Grad(grad),-      shape);-   });-   var Texture = function (a) {-      return {ctor: "Texture"-             ,_0: a};-   };-   var textured = F2(function (src,-   shape) {-      return A2(fill,-      Texture(src),-      shape);-   });-   var Solid = function (a) {-      return {ctor: "Solid",_0: a};-   };-   var filled = F2(function (color,-   shape) {-      return A2(fill,-      Solid(color),-      shape);-   });-   var Form = F6(function (a,-   b,-   c,-   d,-   e,-   f) {-      return {_: {}-             ,alpha: e-             ,form: f-             ,scale: b-             ,theta: a-             ,x: c-             ,y: d};-   });-   _elm.Graphics.Collage.values = {_op: _op-                                  ,Form: Form-                                  ,Solid: Solid-                                  ,Texture: Texture-                                  ,Grad: Grad-                                  ,Flat: Flat-                                  ,Round: Round-                                  ,Padded: Padded-                                  ,Smooth: Smooth-                                  ,Sharp: Sharp-                                  ,Clipped: Clipped-                                  ,LineStyle: LineStyle-                                  ,defaultLine: defaultLine-                                  ,solid: solid-                                  ,dashed: dashed-                                  ,dotted: dotted-                                  ,FPath: FPath-                                  ,FShape: FShape-                                  ,FImage: FImage-                                  ,FElement: FElement-                                  ,FGroup: FGroup-                                  ,Line: Line-                                  ,Fill: Fill-                                  ,form: form-                                  ,fill: fill-                                  ,filled: filled-                                  ,textured: textured-                                  ,gradient: gradient-                                  ,outlined: outlined-                                  ,traced: traced-                                  ,sprite: sprite-                                  ,toForm: toForm-                                  ,group: group-                                  ,groupTransform: groupTransform-                                  ,move: move-                                  ,moveX: moveX-                                  ,moveY: moveY-                                  ,scale: scale-                                  ,rotate: rotate-                                  ,alpha: alpha-                                  ,collage: collage-                                  ,path: path-                                  ,segment: segment-                                  ,polygon: polygon-                                  ,rect: rect-                                  ,square: square-                                  ,oval: oval-                                  ,circle: circle-                                  ,ngon: ngon};-   return _elm.Graphics.Collage.values;-};-Elm.Graphics = Elm.Graphics || {};-Elm.Graphics.Element = Elm.Graphics.Element || {};-Elm.Graphics.Element.make = function (_elm) {-   "use strict";-   _elm.Graphics = _elm.Graphics || {};-   _elm.Graphics.Element = _elm.Graphics.Element || {};-   if (_elm.Graphics.Element.values)-   return _elm.Graphics.Element.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Graphics.Element",-   $Basics = Elm.Basics.make(_elm),-   $Color = Elm.Color.make(_elm),-   $List = Elm.List.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $Native$Graphics$Element = Elm.Native.Graphics.Element.make(_elm);-   var DOut = {ctor: "DOut"};-   var outward = DOut;-   var DIn = {ctor: "DIn"};-   var inward = DIn;-   var DRight = {ctor: "DRight"};-   var right = DRight;-   var DLeft = {ctor: "DLeft"};-   var left = DLeft;-   var DDown = {ctor: "DDown"};-   var down = DDown;-   var DUp = {ctor: "DUp"};-   var up = DUp;-   var Position = F4(function (a,-   b,-   c,-   d) {-      return {_: {}-             ,horizontal: a-             ,vertical: b-             ,x: c-             ,y: d};-   });-   var Relative = function (a) {-      return {ctor: "Relative"-             ,_0: a};-   };-   var relative = Relative;-   var Absolute = function (a) {-      return {ctor: "Absolute"-             ,_0: a};-   };-   var absolute = Absolute;-   var N = {ctor: "N"};-   var bottomLeftAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: N-             ,vertical: N-             ,x: x-             ,y: y};-   });-   var Z = {ctor: "Z"};-   var middle = {_: {}-                ,horizontal: Z-                ,vertical: Z-                ,x: Relative(0.5)-                ,y: Relative(0.5)};-   var midLeft = _U.replace([["horizontal"-                             ,N]-                            ,["x",Absolute(0)]],-   middle);-   var middleAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: Z-             ,vertical: Z-             ,x: x-             ,y: y};-   });-   var midLeftAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: N-             ,vertical: Z-             ,x: x-             ,y: y};-   });-   var midBottomAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: Z-             ,vertical: N-             ,x: x-             ,y: y};-   });-   var P = {ctor: "P"};-   var topLeft = {_: {}-                 ,horizontal: N-                 ,vertical: P-                 ,x: Absolute(0)-                 ,y: Absolute(0)};-   var bottomLeft = _U.replace([["vertical"-                                ,N]],-   topLeft);-   var topRight = _U.replace([["horizontal"-                              ,P]],-   topLeft);-   var bottomRight = _U.replace([["horizontal"-                                 ,P]],-   bottomLeft);-   var midRight = _U.replace([["horizontal"-                              ,P]],-   midLeft);-   var midTop = _U.replace([["vertical"-                            ,P]-                           ,["y",Absolute(0)]],-   middle);-   var midBottom = _U.replace([["vertical"-                               ,N]],-   midTop);-   var topLeftAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: N-             ,vertical: P-             ,x: x-             ,y: y};-   });-   var topRightAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: P-             ,vertical: P-             ,x: x-             ,y: y};-   });-   var bottomRightAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: P-             ,vertical: N-             ,x: x-             ,y: y};-   });-   var midRightAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: P-             ,vertical: Z-             ,x: x-             ,y: y};-   });-   var midTopAt = F2(function (x,-   y) {-      return {_: {}-             ,horizontal: Z-             ,vertical: P-             ,x: x-             ,y: y};-   });-   var Tiled = {ctor: "Tiled"};-   var Cropped = function (a) {-      return {ctor: "Cropped"-             ,_0: a};-   };-   var Fitted = {ctor: "Fitted"};-   var Plain = {ctor: "Plain"};-   var Custom = {ctor: "Custom"};-   var RawHtml = {ctor: "RawHtml"};-   var Spacer = {ctor: "Spacer"};-   var Flow = F2(function (a,b) {-      return {ctor: "Flow"-             ,_0: a-             ,_1: b};-   });-   var Container = F2(function (a,-   b) {-      return {ctor: "Container"-             ,_0: a-             ,_1: b};-   });-   var Image = F4(function (a,-   b,-   c,-   d) {-      return {ctor: "Image"-             ,_0: a-             ,_1: b-             ,_2: c-             ,_3: d};-   });-   var link = F2(function (href,-   e) {-      return function () {-         var p = e.props;-         return {_: {}-                ,element: e.element-                ,props: _U.replace([["href"-                                    ,href]],-                p)};-      }();-   });-   var tag = F2(function (name,e) {-      return function () {-         var p = e.props;-         return {_: {}-                ,element: e.element-                ,props: _U.replace([["tag"-                                    ,name]],-                p)};-      }();-   });-   var color = F2(function (c,e) {-      return function () {-         var p = e.props;-         return {_: {}-                ,element: e.element-                ,props: _U.replace([["color"-                                    ,$Maybe.Just(c)]],-                p)};-      }();-   });-   var opacity = F2(function (o,-   e) {-      return function () {-         var p = e.props;-         return {_: {}-                ,element: e.element-                ,props: _U.replace([["opacity"-                                    ,o]],-                p)};-      }();-   });-   var height = F2(function (nh,-   e) {-      return function () {-         var p = e.props;-         var props = function () {-            var _v0 = e.element;-            switch (_v0.ctor)-            {case "Image":-               return _U.replace([["width"-                                  ,$Basics.round($Basics.toFloat(_v0._1) / $Basics.toFloat(_v0._2) * $Basics.toFloat(nh))]],-                 p);}-            return p;-         }();-         return {_: {}-                ,element: e.element-                ,props: _U.replace([["height"-                                    ,nh]],-                p)};-      }();-   });-   var width = F2(function (nw,e) {-      return function () {-         var p = e.props;-         var props = function () {-            var _v5 = e.element;-            switch (_v5.ctor)-            {case "Image":-               return _U.replace([["height"-                                  ,$Basics.round($Basics.toFloat(_v5._2) / $Basics.toFloat(_v5._1) * $Basics.toFloat(nw))]],-                 p);-               case "RawHtml":-               return _U.replace([["height"-                                  ,$Basics.snd(A2($Native$Graphics$Element.htmlHeight,-                                  nw,-                                  e.element))]],-                 p);}-            return p;-         }();-         return {_: {}-                ,element: e.element-                ,props: _U.replace([["width"-                                    ,nw]],-                props)};-      }();-   });-   var size = F3(function (w,h,e) {-      return A2(height,-      h,-      A2(width,w,e));-   });-   var sizeOf = function (e) {-      return {ctor: "_Tuple2"-             ,_0: e.props.width-             ,_1: e.props.height};-   };-   var heightOf = function (e) {-      return e.props.height;-   };-   var widthOf = function (e) {-      return e.props.width;-   };-   var Element = F2(function (a,-   b) {-      return {_: {}-             ,element: b-             ,props: a};-   });-   var Properties = F9(function (a,-   b,-   c,-   d,-   e,-   f,-   g,-   h,-   i) {-      return {_: {}-             ,click: i-             ,color: e-             ,height: c-             ,hover: h-             ,href: f-             ,id: a-             ,opacity: d-             ,tag: g-             ,width: b};-   });-   var newElement = F3(function (w,-   h,-   e) {-      return {_: {}-             ,element: e-             ,props: A9(Properties,-             $Native$Graphics$Element.guid({ctor: "_Tuple0"}),-             w,-             h,-             1,-             $Maybe.Nothing,-             "",-             "",-             {ctor: "_Tuple0"},-             {ctor: "_Tuple0"})};-   });-   var image = F3(function (w,-   h,-   src) {-      return A3(newElement,-      w,-      h,-      A4(Image,Plain,w,h,src));-   });-   var fittedImage = F3(function (w,-   h,-   src) {-      return A3(newElement,-      w,-      h,-      A4(Image,Fitted,w,h,src));-   });-   var croppedImage = F4(function (pos,-   w,-   h,-   src) {-      return A3(newElement,-      w,-      h,-      A4(Image,Cropped(pos),w,h,src));-   });-   var tiledImage = F3(function (w,-   h,-   src) {-      return A3(newElement,-      w,-      h,-      A4(Image,Tiled,w,h,src));-   });-   var container = F4(function (w,-   h,-   pos,-   e) {-      return A3(newElement,-      w,-      h,-      A2(Container,pos,e));-   });-   var spacer = F2(function (w,h) {-      return A3(newElement,-      w,-      h,-      Spacer);-   });-   var empty = A2(spacer,0,0);-   var flow = F2(function (dir,-   es) {-      return function () {-         var newFlow = F2(function (w,-         h) {-            return A3(newElement,-            w,-            h,-            A2(Flow,dir,es));-         });-         var hs = A2($List.map,-         heightOf,-         es);-         var ws = A2($List.map,-         widthOf,-         es);-         return _U.eq(es,-         _L.fromArray([])) ? empty : function () {-            switch (dir.ctor)-            {case "DDown":-               return A2(newFlow,-                 $List.maximum(ws),-                 $List.sum(hs));-               case "DIn": return A2(newFlow,-                 $List.maximum(ws),-                 $List.maximum(hs));-               case "DLeft": return A2(newFlow,-                 $List.sum(ws),-                 $List.maximum(hs));-               case "DOut": return A2(newFlow,-                 $List.maximum(ws),-                 $List.maximum(hs));-               case "DRight":-               return A2(newFlow,-                 $List.sum(ws),-                 $List.maximum(hs));-               case "DUp": return A2(newFlow,-                 $List.maximum(ws),-                 $List.sum(hs));}-            _U.badCase($moduleName,-            "between lines 280 and 291");-         }();-      }();-   });-   var above = F2(function (hi,-   lo) {-      return A3(newElement,-      A2($Basics.max,-      widthOf(hi),-      widthOf(lo)),-      heightOf(hi) + heightOf(lo),-      A2(Flow,-      DDown,-      _L.fromArray([hi,lo])));-   });-   var below = F2(function (lo,-   hi) {-      return A3(newElement,-      A2($Basics.max,-      widthOf(hi),-      widthOf(lo)),-      heightOf(hi) + heightOf(lo),-      A2(Flow,-      DDown,-      _L.fromArray([hi,lo])));-   });-   var beside = F2(function (lft,-   rht) {-      return A3(newElement,-      widthOf(lft) + widthOf(rht),-      A2($Basics.max,-      heightOf(lft),-      heightOf(rht)),-      A2(Flow,-      right,-      _L.fromArray([lft,rht])));-   });-   var layers = function (es) {-      return function () {-         var hs = A2($List.map,-         heightOf,-         es);-         var ws = A2($List.map,-         widthOf,-         es);-         return A3(newElement,-         $List.maximum(ws),-         $List.maximum(hs),-         A2(Flow,DOut,es));-      }();-   };-   _elm.Graphics.Element.values = {_op: _op-                                  ,Properties: Properties-                                  ,Element: Element-                                  ,empty: empty-                                  ,widthOf: widthOf-                                  ,heightOf: heightOf-                                  ,sizeOf: sizeOf-                                  ,width: width-                                  ,height: height-                                  ,size: size-                                  ,opacity: opacity-                                  ,color: color-                                  ,tag: tag-                                  ,link: link-                                  ,newElement: newElement-                                  ,Image: Image-                                  ,Container: Container-                                  ,Flow: Flow-                                  ,Spacer: Spacer-                                  ,RawHtml: RawHtml-                                  ,Custom: Custom-                                  ,Plain: Plain-                                  ,Fitted: Fitted-                                  ,Cropped: Cropped-                                  ,Tiled: Tiled-                                  ,image: image-                                  ,fittedImage: fittedImage-                                  ,croppedImage: croppedImage-                                  ,tiledImage: tiledImage-                                  ,P: P-                                  ,Z: Z-                                  ,N: N-                                  ,Absolute: Absolute-                                  ,Relative: Relative-                                  ,Position: Position-                                  ,container: container-                                  ,spacer: spacer-                                  ,DUp: DUp-                                  ,DDown: DDown-                                  ,DLeft: DLeft-                                  ,DRight: DRight-                                  ,DIn: DIn-                                  ,DOut: DOut-                                  ,flow: flow-                                  ,above: above-                                  ,below: below-                                  ,beside: beside-                                  ,layers: layers-                                  ,absolute: absolute-                                  ,relative: relative-                                  ,middle: middle-                                  ,topLeft: topLeft-                                  ,topRight: topRight-                                  ,bottomLeft: bottomLeft-                                  ,bottomRight: bottomRight-                                  ,midLeft: midLeft-                                  ,midRight: midRight-                                  ,midTop: midTop-                                  ,midBottom: midBottom-                                  ,middleAt: middleAt-                                  ,topLeftAt: topLeftAt-                                  ,topRightAt: topRightAt-                                  ,bottomLeftAt: bottomLeftAt-                                  ,bottomRightAt: bottomRightAt-                                  ,midLeftAt: midLeftAt-                                  ,midRightAt: midRightAt-                                  ,midTopAt: midTopAt-                                  ,midBottomAt: midBottomAt-                                  ,up: up-                                  ,down: down-                                  ,left: left-                                  ,right: right-                                  ,inward: inward-                                  ,outward: outward};-   return _elm.Graphics.Element.values;-};-Elm.Graphics = Elm.Graphics || {};-Elm.Graphics.Input = Elm.Graphics.Input || {};-Elm.Graphics.Input.make = function (_elm) {-   "use strict";-   _elm.Graphics = _elm.Graphics || {};-   _elm.Graphics.Input = _elm.Graphics.Input || {};-   if (_elm.Graphics.Input.values)-   return _elm.Graphics.Input.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Graphics.Input",-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $Native$Graphics$Input = Elm.Native.Graphics.Input.make(_elm),-   $Signal = Elm.Signal.make(_elm);-   var clickable = $Native$Graphics$Input.clickable;-   var hoverable = $Native$Graphics$Input.hoverable;-   var dropDown = $Native$Graphics$Input.dropDown;-   var checkbox = $Native$Graphics$Input.checkbox;-   var customButton = $Native$Graphics$Input.customButton;-   var button = $Native$Graphics$Input.button;-   _elm.Graphics.Input.values = {_op: _op-                                ,button: button-                                ,customButton: customButton-                                ,checkbox: checkbox-                                ,dropDown: dropDown-                                ,hoverable: hoverable-                                ,clickable: clickable};-   return _elm.Graphics.Input.values;-};-Elm.Html = Elm.Html || {};-Elm.Html.make = function (_elm) {-   "use strict";-   _elm.Html = _elm.Html || {};-   if (_elm.Html.values)-   return _elm.Html.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Html",-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $VirtualDom = Elm.VirtualDom.make(_elm);-   var fromElement = $VirtualDom.fromElement;-   var toElement = $VirtualDom.toElement;-   var text = $VirtualDom.text;-   var node = $VirtualDom.node;-   var body = node("body");-   var section = node("section");-   var nav = node("nav");-   var article = node("article");-   var aside = node("aside");-   var h1 = node("h1");-   var h2 = node("h2");-   var h3 = node("h3");-   var h4 = node("h4");-   var h5 = node("h5");-   var h6 = node("h6");-   var header = node("header");-   var footer = node("footer");-   var address = node("address");-   var main$ = node("main");-   var p = node("p");-   var hr = node("hr");-   var pre = node("pre");-   var blockquote = node("blockquote");-   var ol = node("ol");-   var ul = node("ul");-   var li = node("li");-   var dl = node("dl");-   var dt = node("dt");-   var dd = node("dd");-   var figure = node("figure");-   var figcaption = node("figcaption");-   var div = node("div");-   var a = node("a");-   var em = node("em");-   var strong = node("strong");-   var small = node("small");-   var s = node("s");-   var cite = node("cite");-   var q = node("q");-   var dfn = node("dfn");-   var abbr = node("abbr");-   var time = node("time");-   var code = node("code");-   var $var = node("var");-   var samp = node("samp");-   var kbd = node("kbd");-   var sub = node("sub");-   var sup = node("sup");-   var i = node("i");-   var b = node("b");-   var u = node("u");-   var mark = node("mark");-   var ruby = node("ruby");-   var rt = node("rt");-   var rp = node("rp");-   var bdi = node("bdi");-   var bdo = node("bdo");-   var span = node("span");-   var br = node("br");-   var wbr = node("wbr");-   var ins = node("ins");-   var del = node("del");-   var img = node("img");-   var iframe = node("iframe");-   var embed = node("embed");-   var object = node("object");-   var param = node("param");-   var video = node("video");-   var audio = node("audio");-   var source = node("source");-   var track = node("track");-   var canvas = node("canvas");-   var svg = node("svg");-   var math = node("math");-   var table = node("table");-   var caption = node("caption");-   var colgroup = node("colgroup");-   var col = node("col");-   var tbody = node("tbody");-   var thead = node("thead");-   var tfoot = node("tfoot");-   var tr = node("tr");-   var td = node("td");-   var th = node("th");-   var form = node("form");-   var fieldset = node("fieldset");-   var legend = node("legend");-   var label = node("label");-   var input = node("input");-   var button = node("button");-   var select = node("select");-   var datalist = node("datalist");-   var optgroup = node("optgroup");-   var option = node("option");-   var textarea = node("textarea");-   var keygen = node("keygen");-   var output = node("output");-   var progress = node("progress");-   var meter = node("meter");-   var details = node("details");-   var summary = node("summary");-   var menuitem = node("menuitem");-   var menu = node("menu");-   _elm.Html.values = {_op: _op-                      ,node: node-                      ,text: text-                      ,toElement: toElement-                      ,fromElement: fromElement-                      ,body: body-                      ,section: section-                      ,nav: nav-                      ,article: article-                      ,aside: aside-                      ,h1: h1-                      ,h2: h2-                      ,h3: h3-                      ,h4: h4-                      ,h5: h5-                      ,h6: h6-                      ,header: header-                      ,footer: footer-                      ,address: address-                      ,main$: main$-                      ,p: p-                      ,hr: hr-                      ,pre: pre-                      ,blockquote: blockquote-                      ,ol: ol-                      ,ul: ul-                      ,li: li-                      ,dl: dl-                      ,dt: dt-                      ,dd: dd-                      ,figure: figure-                      ,figcaption: figcaption-                      ,div: div-                      ,a: a-                      ,em: em-                      ,strong: strong-                      ,small: small-                      ,s: s-                      ,cite: cite-                      ,q: q-                      ,dfn: dfn-                      ,abbr: abbr-                      ,time: time-                      ,code: code-                      ,$var: $var-                      ,samp: samp-                      ,kbd: kbd-                      ,sub: sub-                      ,sup: sup-                      ,i: i-                      ,b: b-                      ,u: u-                      ,mark: mark-                      ,ruby: ruby-                      ,rt: rt-                      ,rp: rp-                      ,bdi: bdi-                      ,bdo: bdo-                      ,span: span-                      ,br: br-                      ,wbr: wbr-                      ,ins: ins-                      ,del: del-                      ,img: img-                      ,iframe: iframe-                      ,embed: embed-                      ,object: object-                      ,param: param-                      ,video: video-                      ,audio: audio-                      ,source: source-                      ,track: track-                      ,canvas: canvas-                      ,svg: svg-                      ,math: math-                      ,table: table-                      ,caption: caption-                      ,colgroup: colgroup-                      ,col: col-                      ,tbody: tbody-                      ,thead: thead-                      ,tfoot: tfoot-                      ,tr: tr-                      ,td: td-                      ,th: th-                      ,form: form-                      ,fieldset: fieldset-                      ,legend: legend-                      ,label: label-                      ,input: input-                      ,button: button-                      ,select: select-                      ,datalist: datalist-                      ,optgroup: optgroup-                      ,option: option-                      ,textarea: textarea-                      ,keygen: keygen-                      ,output: output-                      ,progress: progress-                      ,meter: meter-                      ,details: details-                      ,summary: summary-                      ,menuitem: menuitem-                      ,menu: menu};-   return _elm.Html.values;-};-Elm.Html = Elm.Html || {};-Elm.Html.Attributes = Elm.Html.Attributes || {};-Elm.Html.Attributes.make = function (_elm) {-   "use strict";-   _elm.Html = _elm.Html || {};-   _elm.Html.Attributes = _elm.Html.Attributes || {};-   if (_elm.Html.Attributes.values)-   return _elm.Html.Attributes.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Html.Attributes",-   $Basics = Elm.Basics.make(_elm),-   $Html = Elm.Html.make(_elm),-   $Json$Encode = Elm.Json.Encode.make(_elm),-   $List = Elm.List.make(_elm),-   $String = Elm.String.make(_elm),-   $VirtualDom = Elm.VirtualDom.make(_elm);-   var property = $VirtualDom.property;-   var stringProperty = F2(function (name,-   string) {-      return A2(property,-      name,-      $Json$Encode.string(string));-   });-   var $class = function (name) {-      return A2(stringProperty,-      "className",-      name);-   };-   var id = function (name) {-      return A2(stringProperty,-      "id",-      name);-   };-   var title = function (name) {-      return A2(stringProperty,-      "title",-      name);-   };-   var accesskey = function ($char) {-      return A2(stringProperty,-      "accesskey",-      $String.fromList(_L.fromArray([$char])));-   };-   var contextmenu = function (value) {-      return A2(stringProperty,-      "contextmenu",-      value);-   };-   var dir = function (value) {-      return A2(stringProperty,-      "dir",-      value);-   };-   var draggable = function (value) {-      return A2(stringProperty,-      "draggable",-      value);-   };-   var dropzone = function (value) {-      return A2(stringProperty,-      "dropzone",-      value);-   };-   var itemprop = function (value) {-      return A2(stringProperty,-      "itemprop",-      value);-   };-   var lang = function (value) {-      return A2(stringProperty,-      "lang",-      value);-   };-   var tabindex = function (n) {-      return A2(stringProperty,-      "tabIndex",-      $Basics.toString(n));-   };-   var charset = function (value) {-      return A2(stringProperty,-      "charset",-      value);-   };-   var content = function (value) {-      return A2(stringProperty,-      "content",-      value);-   };-   var httpEquiv = function (value) {-      return A2(stringProperty,-      "httpEquiv",-      value);-   };-   var language = function (value) {-      return A2(stringProperty,-      "language",-      value);-   };-   var src = function (value) {-      return A2(stringProperty,-      "src",-      value);-   };-   var height = function (value) {-      return A2(stringProperty,-      "height",-      $Basics.toString(value));-   };-   var width = function (value) {-      return A2(stringProperty,-      "width",-      $Basics.toString(value));-   };-   var alt = function (value) {-      return A2(stringProperty,-      "alt",-      value);-   };-   var poster = function (value) {-      return A2(stringProperty,-      "poster",-      value);-   };-   var kind = function (value) {-      return A2(stringProperty,-      "kind",-      value);-   };-   var srclang = function (value) {-      return A2(stringProperty,-      "srclang",-      value);-   };-   var sandbox = function (value) {-      return A2(stringProperty,-      "sandbox",-      value);-   };-   var srcdoc = function (value) {-      return A2(stringProperty,-      "srcdoc",-      value);-   };-   var type$ = function (value) {-      return A2(stringProperty,-      "type",-      value);-   };-   var value = function (value) {-      return A2(stringProperty,-      "value",-      value);-   };-   var placeholder = function (value) {-      return A2(stringProperty,-      "placeholder",-      value);-   };-   var accept = function (value) {-      return A2(stringProperty,-      "accept",-      value);-   };-   var acceptCharset = function (value) {-      return A2(stringProperty,-      "acceptCharset",-      value);-   };-   var action = function (value) {-      return A2(stringProperty,-      "action",-      value);-   };-   var autocomplete = function (bool) {-      return A2(stringProperty,-      "autocomplete",-      bool ? "on" : "off");-   };-   var autosave = function (value) {-      return A2(stringProperty,-      "autosave",-      value);-   };-   var enctype = function (value) {-      return A2(stringProperty,-      "enctype",-      value);-   };-   var formaction = function (value) {-      return A2(stringProperty,-      "formaction",-      value);-   };-   var list = function (value) {-      return A2(stringProperty,-      "list",-      value);-   };-   var maxlength = function (n) {-      return A2(stringProperty,-      "maxLength",-      $Basics.toString(n));-   };-   var method = function (value) {-      return A2(stringProperty,-      "method",-      value);-   };-   var name = function (value) {-      return A2(stringProperty,-      "name",-      value);-   };-   var pattern = function (value) {-      return A2(stringProperty,-      "pattern",-      value);-   };-   var size = function (n) {-      return A2(stringProperty,-      "size",-      $Basics.toString(n));-   };-   var $for = function (value) {-      return A2(stringProperty,-      "htmlFor",-      value);-   };-   var form = function (value) {-      return A2(stringProperty,-      "form",-      value);-   };-   var max = function (value) {-      return A2(stringProperty,-      "max",-      value);-   };-   var min = function (value) {-      return A2(stringProperty,-      "min",-      value);-   };-   var step = function (n) {-      return A2(stringProperty,-      "step",-      $Basics.toString(n));-   };-   var cols = function (n) {-      return A2(stringProperty,-      "cols",-      $Basics.toString(n));-   };-   var rows = function (n) {-      return A2(stringProperty,-      "rows",-      $Basics.toString(n));-   };-   var wrap = function (value) {-      return A2(stringProperty,-      "wrap",-      value);-   };-   var ismap = function (value) {-      return A2(stringProperty,-      "ismap",-      value);-   };-   var usemap = function (value) {-      return A2(stringProperty,-      "usemap",-      value);-   };-   var shape = function (value) {-      return A2(stringProperty,-      "shape",-      value);-   };-   var coords = function (value) {-      return A2(stringProperty,-      "coords",-      value);-   };-   var challenge = function (value) {-      return A2(stringProperty,-      "challenge",-      value);-   };-   var keytype = function (value) {-      return A2(stringProperty,-      "keytype",-      value);-   };-   var align = function (value) {-      return A2(stringProperty,-      "align",-      value);-   };-   var cite = function (value) {-      return A2(stringProperty,-      "cite",-      value);-   };-   var href = function (value) {-      return A2(stringProperty,-      "href",-      value);-   };-   var target = function (value) {-      return A2(stringProperty,-      "target",-      value);-   };-   var downloadAs = function (value) {-      return A2(stringProperty,-      "download",-      value);-   };-   var hreflang = function (value) {-      return A2(stringProperty,-      "hreflang",-      value);-   };-   var media = function (value) {-      return A2(stringProperty,-      "media",-      value);-   };-   var ping = function (value) {-      return A2(stringProperty,-      "ping",-      value);-   };-   var rel = function (value) {-      return A2(stringProperty,-      "rel",-      value);-   };-   var datetime = function (value) {-      return A2(stringProperty,-      "datetime",-      value);-   };-   var pubdate = function (value) {-      return A2(stringProperty,-      "pubdate",-      value);-   };-   var start = function (n) {-      return A2(stringProperty,-      "start",-      $Basics.toString(n));-   };-   var colspan = function (value) {-      return A2(stringProperty,-      "colSpan",-      value);-   };-   var headers = function (value) {-      return A2(stringProperty,-      "headers",-      value);-   };-   var rowspan = function (value) {-      return A2(stringProperty,-      "rowSpan",-      value);-   };-   var scope = function (value) {-      return A2(stringProperty,-      "scope",-      value);-   };-   var manifest = function (value) {-      return A2(stringProperty,-      "manifest",-      value);-   };-   var boolProperty = F2(function (name,-   bool) {-      return A2(property,-      name,-      $Json$Encode.bool(bool));-   });-   var hidden = function (bool) {-      return A2(boolProperty,-      "hidden",-      bool);-   };-   var contenteditable = function (bool) {-      return A2(boolProperty,-      "contentEditable",-      bool);-   };-   var spellcheck = function (bool) {-      return A2(boolProperty,-      "spellcheck",-      bool);-   };-   var async = function (bool) {-      return A2(boolProperty,-      "async",-      bool);-   };-   var defer = function (bool) {-      return A2(boolProperty,-      "defer",-      bool);-   };-   var scoped = function (bool) {-      return A2(boolProperty,-      "scoped",-      bool);-   };-   var autoplay = function (bool) {-      return A2(boolProperty,-      "autoplay",-      bool);-   };-   var controls = function (bool) {-      return A2(boolProperty,-      "controls",-      bool);-   };-   var loop = function (bool) {-      return A2(boolProperty,-      "loop",-      bool);-   };-   var preload = function (bool) {-      return A2(boolProperty,-      "preload",-      bool);-   };-   var $default = function (bool) {-      return A2(boolProperty,-      "default",-      bool);-   };-   var seamless = function (bool) {-      return A2(boolProperty,-      "seamless",-      bool);-   };-   var checked = function (bool) {-      return A2(boolProperty,-      "checked",-      bool);-   };-   var selected = function (bool) {-      return A2(boolProperty,-      "selected",-      bool);-   };-   var autofocus = function (bool) {-      return A2(boolProperty,-      "autofocus",-      bool);-   };-   var disabled = function (bool) {-      return A2(boolProperty,-      "disabled",-      bool);-   };-   var multiple = function (bool) {-      return A2(boolProperty,-      "multiple",-      bool);-   };-   var novalidate = function (bool) {-      return A2(boolProperty,-      "novalidate",-      bool);-   };-   var readonly = function (bool) {-      return A2(boolProperty,-      "readonly",-      bool);-   };-   var required = function (bool) {-      return A2(boolProperty,-      "required",-      bool);-   };-   var download = function (bool) {-      return A2(boolProperty,-      "download",-      bool);-   };-   var reversed = function (bool) {-      return A2(boolProperty,-      "reversed",-      bool);-   };-   var classList = function (list) {-      return $class($String.join(" ")($List.map($Basics.fst)($List.filter($Basics.snd)(list))));-   };-   var style = function (props) {-      return property("style")($Json$Encode.object($List.map(function (_v0) {-         return function () {-            switch (_v0.ctor)-            {case "_Tuple2":-               return {ctor: "_Tuple2"-                      ,_0: _v0._0-                      ,_1: $Json$Encode.string(_v0._1)};}-            _U.badCase($moduleName,-            "on line 136, column 35 to 57");-         }();-      })(props)));-   };-   var key = function (k) {-      return A2(stringProperty,-      "key",-      k);-   };-   _elm.Html.Attributes.values = {_op: _op-                                 ,key: key-                                 ,style: style-                                 ,classList: classList-                                 ,property: property-                                 ,stringProperty: stringProperty-                                 ,boolProperty: boolProperty-                                 ,$class: $class-                                 ,hidden: hidden-                                 ,id: id-                                 ,title: title-                                 ,accesskey: accesskey-                                 ,contenteditable: contenteditable-                                 ,contextmenu: contextmenu-                                 ,dir: dir-                                 ,draggable: draggable-                                 ,dropzone: dropzone-                                 ,itemprop: itemprop-                                 ,lang: lang-                                 ,spellcheck: spellcheck-                                 ,tabindex: tabindex-                                 ,async: async-                                 ,charset: charset-                                 ,content: content-                                 ,defer: defer-                                 ,httpEquiv: httpEquiv-                                 ,language: language-                                 ,scoped: scoped-                                 ,src: src-                                 ,height: height-                                 ,width: width-                                 ,alt: alt-                                 ,autoplay: autoplay-                                 ,controls: controls-                                 ,loop: loop-                                 ,preload: preload-                                 ,poster: poster-                                 ,$default: $default-                                 ,kind: kind-                                 ,srclang: srclang-                                 ,sandbox: sandbox-                                 ,seamless: seamless-                                 ,srcdoc: srcdoc-                                 ,type$: type$-                                 ,value: value-                                 ,checked: checked-                                 ,placeholder: placeholder-                                 ,selected: selected-                                 ,accept: accept-                                 ,acceptCharset: acceptCharset-                                 ,action: action-                                 ,autocomplete: autocomplete-                                 ,autofocus: autofocus-                                 ,autosave: autosave-                                 ,disabled: disabled-                                 ,enctype: enctype-                                 ,formaction: formaction-                                 ,list: list-                                 ,maxlength: maxlength-                                 ,method: method-                                 ,multiple: multiple-                                 ,name: name-                                 ,novalidate: novalidate-                                 ,pattern: pattern-                                 ,readonly: readonly-                                 ,required: required-                                 ,size: size-                                 ,$for: $for-                                 ,form: form-                                 ,max: max-                                 ,min: min-                                 ,step: step-                                 ,cols: cols-                                 ,rows: rows-                                 ,wrap: wrap-                                 ,ismap: ismap-                                 ,usemap: usemap-                                 ,shape: shape-                                 ,coords: coords-                                 ,challenge: challenge-                                 ,keytype: keytype-                                 ,align: align-                                 ,cite: cite-                                 ,href: href-                                 ,target: target-                                 ,download: download-                                 ,downloadAs: downloadAs-                                 ,hreflang: hreflang-                                 ,media: media-                                 ,ping: ping-                                 ,rel: rel-                                 ,datetime: datetime-                                 ,pubdate: pubdate-                                 ,reversed: reversed-                                 ,start: start-                                 ,colspan: colspan-                                 ,headers: headers-                                 ,rowspan: rowspan-                                 ,scope: scope-                                 ,manifest: manifest};-   return _elm.Html.Attributes.values;-};-Elm.Json = Elm.Json || {};-Elm.Json.Decode = Elm.Json.Decode || {};-Elm.Json.Decode.make = function (_elm) {-   "use strict";-   _elm.Json = _elm.Json || {};-   _elm.Json.Decode = _elm.Json.Decode || {};-   if (_elm.Json.Decode.values)-   return _elm.Json.Decode.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Json.Decode",-   $Array = Elm.Array.make(_elm),-   $Dict = Elm.Dict.make(_elm),-   $Json$Encode = Elm.Json.Encode.make(_elm),-   $List = Elm.List.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $Native$Json = Elm.Native.Json.make(_elm),-   $Result = Elm.Result.make(_elm);-   var tuple8 = $Native$Json.decodeTuple8;-   var tuple7 = $Native$Json.decodeTuple7;-   var tuple6 = $Native$Json.decodeTuple6;-   var tuple5 = $Native$Json.decodeTuple5;-   var tuple4 = $Native$Json.decodeTuple4;-   var tuple3 = $Native$Json.decodeTuple3;-   var tuple2 = $Native$Json.decodeTuple2;-   var tuple1 = $Native$Json.decodeTuple1;-   var succeed = $Native$Json.succeed;-   var fail = $Native$Json.fail;-   var andThen = $Native$Json.andThen;-   var customDecoder = $Native$Json.customDecoder;-   var decodeValue = $Native$Json.runDecoderValue;-   var value = $Native$Json.decodeValue;-   var maybe = $Native$Json.decodeMaybe;-   var $null = $Native$Json.decodeNull;-   var array = $Native$Json.decodeArray;-   var list = $Native$Json.decodeList;-   var bool = $Native$Json.decodeBool;-   var $int = $Native$Json.decodeInt;-   var $float = $Native$Json.decodeFloat;-   var string = $Native$Json.decodeString;-   var oneOf = $Native$Json.oneOf;-   var keyValuePairs = $Native$Json.decodeKeyValuePairs;-   var object8 = $Native$Json.decodeObject8;-   var object7 = $Native$Json.decodeObject7;-   var object6 = $Native$Json.decodeObject6;-   var object5 = $Native$Json.decodeObject5;-   var object4 = $Native$Json.decodeObject4;-   var object3 = $Native$Json.decodeObject3;-   var object2 = $Native$Json.decodeObject2;-   var object1 = $Native$Json.decodeObject1;-   _op[":="] = $Native$Json.decodeField;-   var at = F2(function (fields,-   decoder) {-      return A3($List.foldr,-      F2(function (x,y) {-         return A2(_op[":="],x,y);-      }),-      decoder,-      fields);-   });-   var decodeString = $Native$Json.runDecoderString;-   var map = $Native$Json.decodeObject1;-   var dict = function (decoder) {-      return A2(map,-      $Dict.fromList,-      keyValuePairs(decoder));-   };-   var Decoder = {ctor: "Decoder"};-   _elm.Json.Decode.values = {_op: _op-                             ,Decoder: Decoder-                             ,map: map-                             ,decodeString: decodeString-                             ,at: at-                             ,object1: object1-                             ,object2: object2-                             ,object3: object3-                             ,object4: object4-                             ,object5: object5-                             ,object6: object6-                             ,object7: object7-                             ,object8: object8-                             ,keyValuePairs: keyValuePairs-                             ,dict: dict-                             ,oneOf: oneOf-                             ,string: string-                             ,$float: $float-                             ,$int: $int-                             ,bool: bool-                             ,list: list-                             ,array: array-                             ,$null: $null-                             ,maybe: maybe-                             ,value: value-                             ,decodeValue: decodeValue-                             ,customDecoder: customDecoder-                             ,andThen: andThen-                             ,fail: fail-                             ,succeed: succeed-                             ,tuple1: tuple1-                             ,tuple2: tuple2-                             ,tuple3: tuple3-                             ,tuple4: tuple4-                             ,tuple5: tuple5-                             ,tuple6: tuple6-                             ,tuple7: tuple7-                             ,tuple8: tuple8};-   return _elm.Json.Decode.values;-};-Elm.Json = Elm.Json || {};-Elm.Json.Encode = Elm.Json.Encode || {};-Elm.Json.Encode.make = function (_elm) {-   "use strict";-   _elm.Json = _elm.Json || {};-   _elm.Json.Encode = _elm.Json.Encode || {};-   if (_elm.Json.Encode.values)-   return _elm.Json.Encode.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Json.Encode",-   $Array = Elm.Array.make(_elm),-   $Native$Json = Elm.Native.Json.make(_elm);-   var list = $Native$Json.encodeList;-   var array = $Native$Json.encodeArray;-   var object = $Native$Json.encodeObject;-   var $null = $Native$Json.encodeNull;-   var bool = $Native$Json.identity;-   var $float = $Native$Json.identity;-   var $int = $Native$Json.identity;-   var string = $Native$Json.identity;-   var encode = $Native$Json.encode;-   var Value = {ctor: "Value"};-   _elm.Json.Encode.values = {_op: _op-                             ,Value: Value-                             ,encode: encode-                             ,string: string-                             ,$int: $int-                             ,$float: $float-                             ,bool: bool-                             ,$null: $null-                             ,object: object-                             ,array: array-                             ,list: list};-   return _elm.Json.Encode.values;-};-Elm.List = Elm.List || {};-Elm.List.make = function (_elm) {-   "use strict";-   _elm.List = _elm.List || {};-   if (_elm.List.values)-   return _elm.List.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "List",-   $Basics = Elm.Basics.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $Native$List = Elm.Native.List.make(_elm);-   var sortWith = $Native$List.sortWith;-   var sortBy = $Native$List.sortBy;-   var sort = $Native$List.sort;-   var repeat = $Native$List.repeat;-   var drop = $Native$List.drop;-   var take = $Native$List.take;-   var map5 = $Native$List.map5;-   var map4 = $Native$List.map4;-   var map3 = $Native$List.map3;-   var map2 = $Native$List.map2;-   var append = $Native$List.append;-   var any = $Native$List.any;-   var all = $Native$List.all;-   var length = $Native$List.length;-   var filter = $Native$List.filter;-   var scanl1 = $Native$List.scanl1;-   var scanl = $Native$List.scanl;-   var foldr1 = $Native$List.foldr1;-   var foldl1 = $Native$List.foldl1;-   var maximum = foldl1($Basics.max);-   var minimum = foldl1($Basics.min);-   var foldr = $Native$List.foldr;-   var concat = function (lists) {-      return A3(foldr,-      append,-      _L.fromArray([]),-      lists);-   };-   var foldl = $Native$List.foldl;-   var sum = function (numbers) {-      return A3(foldl,-      F2(function (x,y) {-         return x + y;-      }),-      0,-      numbers);-   };-   var product = function (numbers) {-      return A3(foldl,-      F2(function (x,y) {-         return x * y;-      }),-      1,-      numbers);-   };-   var indexedMap = F2(function (f,-   xs) {-      return A3(map2,-      f,-      _L.range(0,length(xs) - 1),-      xs);-   });-   var map = $Native$List.map;-   var concatMap = F2(function (f,-   list) {-      return concat(A2(map,-      f,-      list));-   });-   var member = $Native$List.member;-   var isEmpty = function (xs) {-      return function () {-         switch (xs.ctor)-         {case "[]": return true;}-         return false;-      }();-   };-   var tail = $Native$List.tail;-   var head = $Native$List.head;-   _op["::"] = $Native$List.cons;-   var maybeCons = F3(function (f,-   mx,-   xs) {-      return function () {-         var _v1 = f(mx);-         switch (_v1.ctor)-         {case "Just":-            return A2(_op["::"],_v1._0,xs);-            case "Nothing": return xs;}-         _U.badCase($moduleName,-         "between lines 162 and 169");-      }();-   });-   var filterMap = F2(function (f,-   xs) {-      return A3(foldr,-      maybeCons(f),-      _L.fromArray([]),-      xs);-   });-   var reverse = A2(foldl,-   F2(function (x,y) {-      return A2(_op["::"],x,y);-   }),-   _L.fromArray([]));-   var partition = F2(function (pred,-   list) {-      return function () {-         var step = F2(function (x,-         _v3) {-            return function () {-               switch (_v3.ctor)-               {case "_Tuple2":-                  return pred(x) ? {ctor: "_Tuple2"-                                   ,_0: A2(_op["::"],x,_v3._0)-                                   ,_1: _v3._1} : {ctor: "_Tuple2"-                                                  ,_0: _v3._0-                                                  ,_1: A2(_op["::"],x,_v3._1)};}-               _U.badCase($moduleName,-               "between lines 271 and 273");-            }();-         });-         return A3(foldr,-         step,-         {ctor: "_Tuple2"-         ,_0: _L.fromArray([])-         ,_1: _L.fromArray([])},-         list);-      }();-   });-   var unzip = function (pairs) {-      return function () {-         var step = F2(function (_v7,-         _v8) {-            return function () {-               switch (_v8.ctor)-               {case "_Tuple2":-                  return function () {-                       switch (_v7.ctor)-                       {case "_Tuple2":-                          return {ctor: "_Tuple2"-                                 ,_0: A2(_op["::"],_v7._0,_v8._0)-                                 ,_1: A2(_op["::"],-                                 _v7._1,-                                 _v8._1)};}-                       _U.badCase($moduleName,-                       "on line 309, column 12 to 28");-                    }();}-               _U.badCase($moduleName,-               "on line 309, column 12 to 28");-            }();-         });-         return A3(foldr,-         step,-         {ctor: "_Tuple2"-         ,_0: _L.fromArray([])-         ,_1: _L.fromArray([])},-         pairs);-      }();-   };-   var intersperse = F2(function (sep,-   xs) {-      return function () {-         switch (xs.ctor)-         {case "::": return function () {-                 var step = F2(function (x,-                 rest) {-                    return A2(_op["::"],-                    sep,-                    A2(_op["::"],x,rest));-                 });-                 var spersed = A3(foldr,-                 step,-                 _L.fromArray([]),-                 xs._1);-                 return A2(_op["::"],-                 xs._0,-                 spersed);-              }();-            case "[]":-            return _L.fromArray([]);}-         _U.badCase($moduleName,-         "between lines 320 and 331");-      }();-   });-   _elm.List.values = {_op: _op-                      ,head: head-                      ,tail: tail-                      ,isEmpty: isEmpty-                      ,member: member-                      ,map: map-                      ,indexedMap: indexedMap-                      ,foldl: foldl-                      ,foldr: foldr-                      ,foldl1: foldl1-                      ,foldr1: foldr1-                      ,scanl: scanl-                      ,scanl1: scanl1-                      ,filter: filter-                      ,filterMap: filterMap-                      ,maybeCons: maybeCons-                      ,length: length-                      ,reverse: reverse-                      ,all: all-                      ,any: any-                      ,append: append-                      ,concat: concat-                      ,concatMap: concatMap-                      ,sum: sum-                      ,product: product-                      ,maximum: maximum-                      ,minimum: minimum-                      ,partition: partition-                      ,map2: map2-                      ,map3: map3-                      ,map4: map4-                      ,map5: map5-                      ,unzip: unzip-                      ,intersperse: intersperse-                      ,take: take-                      ,drop: drop-                      ,repeat: repeat-                      ,sort: sort-                      ,sortBy: sortBy-                      ,sortWith: sortWith};-   return _elm.List.values;-};-Elm.Markdown = Elm.Markdown || {};-Elm.Markdown.make = function (_elm) {-   "use strict";-   _elm.Markdown = _elm.Markdown || {};-   if (_elm.Markdown.values)-   return _elm.Markdown.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Markdown",-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $Html = Elm.Html.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $Native$Markdown = Elm.Native.Markdown.make(_elm);-   var toElementWith = $Native$Markdown.toElementWith;-   var toHtmlWith = $Native$Markdown.toHtmlWith;-   var defaultOptions = {_: {}-                        ,githubFlavored: $Maybe.Just({_: {}-                                                     ,breaks: false-                                                     ,tables: false})-                        ,sanitize: false-                        ,smartypants: false};-   var Options = F3(function (a,-   b,-   c) {-      return {_: {}-             ,githubFlavored: a-             ,sanitize: b-             ,smartypants: c};-   });-   var toElement = function (string) {-      return A2($Native$Markdown.toElementWith,-      defaultOptions,-      string);-   };-   var toHtml = function (string) {-      return A2($Native$Markdown.toHtmlWith,-      defaultOptions,-      string);-   };-   _elm.Markdown.values = {_op: _op-                          ,toHtml: toHtml-                          ,toElement: toElement-                          ,Options: Options-                          ,defaultOptions: defaultOptions-                          ,toHtmlWith: toHtmlWith-                          ,toElementWith: toElementWith};-   return _elm.Markdown.values;-};-Elm.Maybe = Elm.Maybe || {};-Elm.Maybe.make = function (_elm) {-   "use strict";-   _elm.Maybe = _elm.Maybe || {};-   if (_elm.Maybe.values)-   return _elm.Maybe.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Maybe";-   var withDefault = F2(function ($default,-   maybe) {-      return function () {-         switch (maybe.ctor)-         {case "Just": return maybe._0;-            case "Nothing":-            return $default;}-         _U.badCase($moduleName,-         "between lines 45 and 56");-      }();-   });-   var Nothing = {ctor: "Nothing"};-   var oneOf = function (maybes) {-      return function () {-         switch (maybes.ctor)-         {case "::": return function () {-                 switch (maybes._0.ctor)-                 {case "Just": return maybes._0;-                    case "Nothing":-                    return oneOf(maybes._1);}-                 _U.badCase($moduleName,-                 "between lines 64 and 73");-              }();-            case "[]": return Nothing;}-         _U.badCase($moduleName,-         "between lines 59 and 73");-      }();-   };-   var andThen = F2(function (maybeValue,-   callback) {-      return function () {-         switch (maybeValue.ctor)-         {case "Just":-            return callback(maybeValue._0);-            case "Nothing": return Nothing;}-         _U.badCase($moduleName,-         "between lines 110 and 112");-      }();-   });-   var Just = function (a) {-      return {ctor: "Just",_0: a};-   };-   var map = F2(function (f,-   maybe) {-      return function () {-         switch (maybe.ctor)-         {case "Just":-            return Just(f(maybe._0));-            case "Nothing": return Nothing;}-         _U.badCase($moduleName,-         "between lines 76 and 107");-      }();-   });-   _elm.Maybe.values = {_op: _op-                       ,andThen: andThen-                       ,map: map-                       ,withDefault: withDefault-                       ,oneOf: oneOf-                       ,Just: Just-                       ,Nothing: Nothing};-   return _elm.Maybe.values;-};-Elm.Native.Array = {};-Elm.Native.Array.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.Array = elm.Native.Array || {};-    if (elm.Native.Array.values) return elm.Native.Array.values;-    if ('values' in Elm.Native.Array)-      return elm.Native.Array.values = Elm.Native.Array.values;--    var List = Elm.Native.List.make(elm);--    // A RRB-Tree has two distinct data types.-    // Leaf -> "height"  is always 0-    //         "table"   is an array of elements-    // Node -> "height"  is always greater than 0-    //         "table"   is an array of child nodes-    //         "lengths" is an array of accumulated lengths of the child nodes--    // M is the maximal table size. 32 seems fast. E is the allowed increase-    // of search steps when concatting to find an index. Lower values will -    // decrease balancing, but will increase search steps.-    var M = 32;-    var E = 2;--    // An empty array.-    var empty = { ctor:"_Array", height:0, table:new Array() };--    function get(i, array) {-        if (i < 0 || i >= length(array)) {-            throw new Error("Index " + i + " is out of range. Check the length of " +-                            "your array first or use getMaybe or getWithDefault.");-        }-        return unsafeGet(i, array);-    }--    function unsafeGet(i, array) {-      for (var x = array.height; x > 0; x--) {-        var slot = i >> (x * 5);-        while (array.lengths[slot] <= i) {-          slot++;-        }-        if (slot > 0) {-          i -= array.lengths[slot - 1];-        }-        array = array.table[slot];-      }-      return array.table[i];-    }--    // Sets the value at the index i. Only the nodes leading to i will get-    // copied and updated.-    function set(i, item, array) {-      if (i < 0 || length(array) <= i) {-        return array;-      }-      return unsafeSet(i, item, array);-    }--    function unsafeSet(i, item, array) {-      array = nodeCopy(array);--      if (array.height == 0) {-        array.table[i] = item;-      } else {-        var slot = getSlot(i, array);-        if (slot > 0) {-          i -= array.lengths[slot - 1];-        }-        array.table[slot] = unsafeSet(i, item, array.table[slot]);-      }-      return array;-    }--    function initialize(len, f) {-      if (len == 0) { return empty; }-      var h = Math.floor(Math.log(len)/Math.log(M));-      return initialize_(f, h, 0, len);-    }--    function initialize_(f, h, from, to) {-      if (h == 0) {-        var table = new Array((to - from) % (M + 1));-        for (var i = 0; i < table.length; i++) {-          table[i] = f(from + i);-        }-        return { ctor:"_Array", height:0, table:table };-      }--      var step = Math.pow(M, h);-      var table = new Array(Math.ceil((to - from) / step));-      var lengths = new Array(table.length);-      for (var i = 0; i < table.length; i++) {-        table[i] = initialize_( f, h - 1, from + (i * step)-                              , Math.min(from + ((i + 1) * step), to));-        lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);-      }-      return { ctor:"_Array", height:h, table:table, lengths:lengths };-    }--    function fromList(list) {-      if (list == List.Nil) { return empty; }--      // Allocate M sized blocks (table) and write list elements to it.-      var table = new Array(M);-      var nodes = new Array();-      var i = 0;--      while (list.ctor !== '[]') {-        table[i] = list._0;-        list = list._1;-        i++;--        // table is full, so we can push a leaf containing it into the-        // next node.-        if (i == M) {-          fromListPush({ ctor:"_Array", height:0, table:table }-                      , nodes);-          table = new Array(M);-          i = 0;-        }-      }--      // Maybe there is something left on the table.-      if (i > 0) {-        fromListPush({ ctor:"_Array", height:0, table:table.splice(0,i) }-                    , nodes);-      }--      // Go through all of the nodes and eventually push them into higher nodes.-      for (var h = 0; h < nodes.length - 1; h++) {-        if (nodes[h].table.length > 0) {-          fromListPush(nodes[h], nodes);-        }-      }--      var head = nodes[nodes.length - 1];-      if (head.height > 0 && head.table.length == 1) {-        return head.table[0];-      } else {-        return head;-      }-    }--    // Push a node into a higher node as a child.-    function fromListPush(toPush, nodes) {-      var h = toPush.height;--      // Maybe the node on this height does not exist.-      if (nodes.length == h) {-        nodes.push({ ctor:"_Array", height:h + 1-                                  , table:new Array()-                                  , lengths:new Array() });-      }--      nodes[h].table.push(toPush);-      var len = length(toPush);-      if (nodes[h].lengths.length > 0) {-        len += nodes[h].lengths[nodes[h].lengths.length - 1];-      }-      nodes[h].lengths.push(len);--      if (nodes[h].table.length == M) {-        fromListPush(nodes[h], nodes);-        nodes[h] = { ctor:"_Array", height:h + 1-                                  , table:new Array()-                                  , lengths:new Array() };-      }-    }--    // Pushes an item via push_ to the bottom right of a tree.-    function push(item, a) {-      var pushed = push_(item, a);-      if (pushed !== null) {-        return pushed;-      }--      var newTree = create(item, a.height);-      return siblise(a, newTree);-    }--    // Recursively tries to push an item to the bottom-right most-    // tree possible. If there is no space left for the item,-    // null will be returned.-    function push_(item, a) {-      // Handle resursion stop at leaf level.-      if (a.height == 0) {-        if (a.table.length < M) {-          var newA = { ctor:"_Array", height:0, table:a.table.slice() };-          newA.table.push(item);-          return newA;-        } else {-          return null;-        }-      }--      // Recursively push-      var pushed = push_(item, botRight(a));--      // There was space in the bottom right tree, so the slot will-      // be updated.-      if (pushed != null) {-        var newA = nodeCopy(a);-        newA.table[newA.table.length - 1] = pushed;-        newA.lengths[newA.lengths.length - 1]++;-        return newA-      }--      // When there was no space left, check if there is space left-      // for a new slot with a tree which contains only the item-      // at the bottom.-      if (a.table.length < M) {-        var newSlot = create(item, a.height - 1);-        var newA = nodeCopy(a);-        newA.table.push(newSlot);-        newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));-        return newA-      } else {-        return null;-      }-    }--    // Converts an array into a list of elements.-    function toList(a) {-      return toList_(List.Nil, a);-    }--    function toList_(list, a) {-      for (var i = a.table.length - 1; i >= 0; i--) {-        list = a.height == 0 ? List.Cons(a.table[i], list) : toList_(list, a.table[i]);-      }-      return list;-    }--    // Maps a function over the elements of an array.-    function map(f, a) {-      var newA = { ctor:"_Array", height:a.height, table:new Array(a.table) };-      if (a.height > 0) { newA.lengths = a.lengths; }-      for (var i = 0; i < a.table.length; i++) {-        newA.table[i] = a.height == 0 ? f(a.table[i]) : map(f, a.table[i]);-      }-      return newA;-    }--    // Maps a function over the elements with their index as first argument.-    function indexedMap(f, a) {-      return indexedMap_(f, a, 0);-    }--    function indexedMap_(f, a, from) {-      var newA = { ctor:"_Array", height:a.height, table:new Array(a.table) };-      if (a.height > 0) { newA.lengths = a.lengths; }-      for (var i = 0; i < a.table.length; i++) {-        newA.table[i] = a.height == 0 ? A2(f, from + i, a.table[i])-                                      : indexedMap_( f, a.table[i]-                                                   , i == 0 ? 0 : a.lengths[i - 1]);-      }-      return newA;-    }--    function foldl(f, b, a) {-      if (a.height == 0) {-        for (var i = 0; i < a.table.length; i++) {-          b = A2(f, a.table[i], b);-        }-      } else {-        for (var i = 0; i < a.table.length; i++) {-          b = foldl(f, b, a.table[i]);-        }-      }-      return b;-    }--    function foldr(f, b, a) {-      if (a.height == 0) {-        for (var i = a.table.length; i--; ) {-          b = A2(f, a.table[i], b);-        }-      } else {-        for (var i = a.table.length; i--; ) {-          b = foldr(f, b, a.table[i]);-        }-      }-      return b;-    }--    // TODO: currently, it slices the right, then the left. This can be-    // optimized.-    function slice(from, to, a) {-      if (from < 0) { from += length(a); }-      if (to < 0)   { to += length(a); }-      return sliceLeft(from, sliceRight(to, a));-    }--    function sliceRight(to, a) {-      if (to == length(a)) {-        return a;-      }--      // Handle leaf level.-      if (a.height == 0) {-        var newA = { ctor:"_Array", height:0 };-        newA.table = a.table.slice(0, to);-        return newA;-      }--      // Slice the right recursively.-      var right = getSlot(to, a);-      var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);--      // Maybe the a node is not even needed, as sliced contains the whole slice.-      if (right == 0) {-        return sliced;-      }--      // Create new node.-      var newA = { ctor:"_Array", height:a.height-                                , table:a.table.slice(0, right)-                                , lengths:a.lengths.slice(0, right) };-      if (sliced.table.length > 0) {-        newA.table[right] = sliced;-        newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);-      }-      return newA;-    }--    function sliceLeft(from, a) {-      if (from == 0) {-        return a;-      }--      // Handle leaf level.-      if (a.height == 0) {-        var newA = { ctor:"_Array", height:0 };-        newA.table = a.table.slice(from, a.table.length + 1);-        return newA;-      }--      // Slice the left recursively.-      var left = getSlot(from, a);-      var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);--      // Maybe the a node is not even needed, as sliced contains the whole slice.-      if (left == a.table.length - 1) {-        return sliced;-      }--      // Create new node.-      var newA = { ctor:"_Array", height:a.height-                                , table:a.table.slice(left, a.table.length + 1)-                                , lengths:new Array(a.table.length - left) };-      newA.table[0] = sliced;-      var len = 0;-      for (var i = 0; i < newA.table.length; i++) {-        len += length(newA.table[i]);-        newA.lengths[i] = len;-      }--      return newA;-    }--    // Appends two trees.-    function append(a,b) {-      if (a.table.length === 0) {-        return b;-      }-      if (b.table.length === 0) {-        return a;-      }--      var c = append_(a, b);--      // Check if both nodes can be crunshed together.-      if (c[0].table.length + c[1].table.length <= M) {-        if (c[0].table.length === 0) {-          return c[1];-        }-        if (c[1].table.length === 0) {-          return c[0];-        }--        // Adjust .table and .lengths-        c[0].table = c[0].table.concat(c[1].table);-        if (c[0].height > 0) {-          var len = length(c[0]);-          for (var i = 0; i < c[1].lengths.length; i++) {-            c[1].lengths[i] += len;-          }-          c[0].lengths = c[0].lengths.concat(c[1].lengths);-        }--        return c[0];-      }--      if (c[0].height > 0) {-        var toRemove = calcToRemove(a, b);-        if (toRemove > E) {-          c = shuffle(c[0], c[1], toRemove);-        }-      }--      return siblise(c[0], c[1]);-    }--    // Returns an array of two nodes; right and left. One node _may_ be empty.-    function append_(a, b) {-      if (a.height === 0 && b.height === 0) {-        return [a, b];-      }--      if (a.height !== 1 || b.height !== 1) {-        if (a.height === b.height) {-          a = nodeCopy(a);-          b = nodeCopy(b);-          var appended = append_(botRight(a), botLeft(b));--          insertRight(a, appended[1]);-          insertLeft(b, appended[0]);-        } else if (a.height > b.height) {-          a = nodeCopy(a);-          var appended = append_(botRight(a), b);--          insertRight(a, appended[0]);-          b = parentise(appended[1], appended[1].height + 1);-        } else {-          b = nodeCopy(b);-          var appended = append_(a, botLeft(b));--          var left = appended[0].table.length === 0 ? 0 : 1;-          var right = left === 0 ? 1 : 0;-          insertLeft(b, appended[left]);-          a = parentise(appended[right], appended[right].height + 1);-        }-      }--      // Check if balancing is needed and return based on that.-      if (a.table.length === 0 || b.table.length === 0) {-        return [a,b];-      }--      var toRemove = calcToRemove(a, b);-      if (toRemove <= E) {-        return [a,b];-      }-      return shuffle(a, b, toRemove);-    }--    // Helperfunctions for append_. Replaces a child node at the side of the parent.-    function insertRight(parent, node) {-      var index = parent.table.length - 1;-      parent.table[index] = node;-      parent.lengths[index] = length(node)-      parent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;-    }--    function insertLeft(parent, node) {-      if (node.table.length > 0) {-        parent.table[0] = node;-        parent.lengths[0] = length(node);--        var len = length(parent.table[0]);-        for (var i = 1; i < parent.lengths.length; i++) {-          len += length(parent.table[i]);-          parent.lengths[i] = len;-        }-      } else {-        parent.table.shift();-        for (var i = 1; i < parent.lengths.length; i++) {-          parent.lengths[i] = parent.lengths[i] - parent.lengths[0];-        }-        parent.lengths.shift();-      }-    }--    // Returns the extra search steps for E. Refer to the paper.-    function calcToRemove(a, b) {-      var subLengths = 0;-      for (var i = 0; i < a.table.length; i++) {-        subLengths += a.table[i].table.length;-      }-      for (var i = 0; i < b.table.length; i++) {-        subLengths += b.table[i].table.length;-      }--      var toRemove = a.table.length + b.table.length-      return toRemove - (Math.floor((subLengths - 1) / M) + 1);-    }--    // get2, set2 and saveSlot are helpers for accessing elements over two arrays.-    function get2(a, b, index) {-      return index < a.length ? a[index] : b[index - a.length];-    }--    function set2(a, b, index, value) {-      if (index < a.length) {-        a[index] = value;-      } else {-        b[index - a.length] = value;-      }-    }--    function saveSlot(a, b, index, slot) {-      set2(a.table, b.table, index, slot);--      var l = (index == 0 || index == a.lengths.length) ?-                0 : get2(a.lengths, a.lengths, index - 1);-      set2(a.lengths, b.lengths, index, l + length(slot));-    }--    // Creates a node or leaf with a given length at their arrays for perfomance.-    // Is only used by shuffle.-    function createNode(h, length) {-      if (length < 0) { length = 0; }-      var a = { ctor:"_Array", height:h, table:new Array(length) };-      if (h > 0) {-        a.lengths = new Array(length);-      }-      return a;-    }--    // Returns an array of two balanced nodes.-    function shuffle(a, b, toRemove) {-      var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));-      var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));--      // Skip the slots with size M. More precise: copy the slot references-      // to the new node-      var read = 0;-      while (get2(a.table, b.table, read).table.length % M == 0) {-        set2(newA.table, newB.table, read, get2(a.table, b.table, read));-        set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));-        read++;-      }--      // Pulling items from left to right, caching in a slot before writing-      // it into the new nodes.-      var write = read;-      var slot = new createNode(a.height - 1, 0);-      var from = 0;--      // If the current slot is still containing data, then there will be at-      // least one more write, so we do not break this loop yet.-      while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove) {-        // Find out the max possible items for copying.-        var source = get2(a.table, b.table, read);-        var to = Math.min(M - slot.table.length, source.table.length)--        // Copy and adjust size table.-        slot.table = slot.table.concat(source.table.slice(from, to));-        if (slot.height > 0) {-          var len = slot.lengths.length;-          for (var i = len; i < len + to - from; i++) {-            slot.lengths[i] = length(slot.table[i]);-            slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);-          }-        }--        from += to;--        // Only proceed to next slots[i] if the current one was-        // fully copied.-        if (source.table.length <= to) {-          read++; from = 0;-        }--        // Only create a new slot if the current one is filled up.-        if (slot.table.length == M) {-          saveSlot(newA, newB, write, slot);-          slot = createNode(a.height - 1,0);-          write++;-        }-      }--      // Cleanup after the loop. Copy the last slot into the new nodes.-      if (slot.table.length > 0) {-        saveSlot(newA, newB, write, slot);-        write++;-      }--      // Shift the untouched slots to the left-      while (read < a.table.length + b.table.length ) {-        saveSlot(newA, newB, write, get2(a.table, b.table, read));-        read++; write++;-      }--      return [newA, newB];-    }--    // Navigation functions-    function botRight(a) { return a.table[a.table.length - 1]; }-    function botLeft(a)  { return a.table[0]; }--    // Copies a node for updating. Note that you should not use this if-    // only updating only one of "table" or "lengths" for performance reasons.-    function nodeCopy(a) {-      var newA = { ctor:"_Array", height:a.height-                                , table:a.table.slice() };-      if (a.height > 0) { newA.lengths = a.lengths.slice(); }-      return newA;-    }--    // Returns how many items are in the tree.-    function length(array) {-      if (array.height == 0) {-        return array.table.length;-      } else {-        return array.lengths[array.lengths.length - 1];-      }-    }--    // Calculates in which slot of "table" the item probably is, then-    // find the exact slot via forward searching in  "lengths". Returns the index.-    function getSlot(i, a) {-      var slot = i >> (5 * a.height);-      while (a.lengths[slot] <= i) {-        slot++;-      }-      return slot;-    }--    // Recursively creates a tree with a given height containing-    // only the given item.-    function create(item, h) {-      if (h == 0) {-        return { ctor:"_Array", height:0-                              , table:[item] };-      } else {-        return { ctor:"_Array", height:h-                              , table:[create(item, h - 1)]-                              , lengths:[1] };-      }-    }--    // Recursively creates a tree that contains the given tree.-    function parentise(tree, h) {-      if (h == tree.height) {-        return tree;-      } else {-        return { ctor:"_Array", height:h-                              , table:[parentise(tree, h - 1)]-                              , lengths:[length(tree)] };-      }-    }--    // Emphasizes blood brotherhood beneath two trees.-    function siblise(a, b) {-      return { ctor:"_Array", height:a.height + 1-                            , table:[a, b]-                            , lengths:[length(a), length(a) + length(b)] };-    }--    function toJSArray(a) {-      var jsArray = new Array(length(a));-      toJSArray_(jsArray, 0, a);-      return jsArray;-    }--    function toJSArray_(jsArray, i, a) {-      for (var t = 0; t < a.table.length; t++) {-        if (a.height == 0) {-          jsArray[i + t] = a.table[t];-        } else {-          var inc = t == 0 ? 0 : a.lengths[t - 1];-          toJSArray_(jsArray, i + inc, a.table[t]);-        }-      }-    }--    function fromJSArray(jsArray) {-      if (jsArray.length == 0) { return empty; }-      var h = Math.floor(Math.log(jsArray.length) / Math.log(M));-      return fromJSArray_(jsArray, h, 0, jsArray.length);-    }--    function fromJSArray_(jsArray, h, from, to) {-      if (h == 0) {-        return { ctor:"_Array", height:0-                              , table:jsArray.slice(from, to) };-      }--      var step = Math.pow(M, h);-      var table = new Array(Math.ceil((to - from) / step));-      var lengths = new Array(table.length);-      for (var i = 0; i < table.length; i++) {-        table[i] = fromJSArray_( jsArray, h - 1, from + (i * step)-                               , Math.min(from + ((i + 1) * step), to));-        lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);-      }-      return { ctor:"_Array", height:h, table:table, lengths:lengths };-    }--    Elm.Native.Array.values = {-      empty:empty,-      fromList:fromList,-      toList:toList,-      initialize:F2(initialize),-      append:F2(append),-      push:F2(push),-      slice:F3(slice),-      get:F2(get),-      set:F3(set),-      map:F2(map),-      indexedMap:F2(indexedMap),-      foldl:F3(foldl),-      foldr:F3(foldr),-      length:length,--      toJSArray:toJSArray,-      fromJSArray:fromJSArray-    };--    return elm.Native.Array.values = Elm.Native.Array.values;-}---Elm.Native.Basics = {};-Elm.Native.Basics.make = function(elm) {-  elm.Native = elm.Native || {};-  elm.Native.Basics = elm.Native.Basics || {};-  if (elm.Native.Basics.values) return elm.Native.Basics.values;--  var Utils = Elm.Native.Utils.make(elm);--  function div(a, b) {-      return (a/b)|0;-  }-  function rem(a, b) {-      return a % b;-  }-  function mod(a, b) {-        if (b === 0) {-            throw new Error("Cannot perform mod 0. Division by zero error.");-        }-        var r = a % b;-        var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r+b) : -mod(-a,-b));--        return m === b ? 0 : m;-  }-  function logBase(base, n) {-      return Math.log(n) / Math.log(base);-  }-  function negate(n) {-      return -n;-  }-  function abs(n) {-      return n < 0 ? -n : n;-  }--  function min(a, b) {-      return Utils.cmp(a,b) < 0 ? a : b;-  }-  function max(a, b) {-      return Utils.cmp(a,b) > 0 ? a : b;-  }-  function clamp(lo, hi, n) {-      return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n;-  }--  function xor(a, b) {-      return a !== b;-  }-  function not(b) {-      return !b;-  }-  function isInfinite(n) {-      return n === Infinity || n === -Infinity-  }--  function truncate(n) {-      return n|0;-  }--  function degrees(d) {-      return d * Math.PI / 180;-  }-  function turns(t) {-      return 2 * Math.PI * t;-  }-  function fromPolar(point) {-      var r = point._0;-      var t = point._1;-      return Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));-  }-  function toPolar(point) {-      var x = point._0;-      var y = point._1;-      return Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y,x));-  }--  var basics = {-      div: F2(div),-      rem: F2(rem),-      mod: F2(mod),--      pi: Math.PI,-      e: Math.E,-      cos: Math.cos,-      sin: Math.sin,-      tan: Math.tan,-      acos: Math.acos,-      asin: Math.asin,-      atan: Math.atan,-      atan2: F2(Math.atan2),--      degrees:  degrees,-      turns:  turns,-      fromPolar:  fromPolar,-      toPolar:  toPolar,--      sqrt: Math.sqrt,-      logBase: F2(logBase),-      negate: negate,-      abs: abs,-      min: F2(min),-      max: F2(max),-      clamp: F3(clamp),-      compare: Utils.compare,--      xor: F2(xor),-      not: not,--      truncate: truncate,-      ceiling: Math.ceil,-      floor: Math.floor,-      round: Math.round,-      toFloat: function(x) { return x; },-      isNaN: isNaN,-      isInfinite: isInfinite-  };--  return elm.Native.Basics.values = basics;-};--Elm.Native.Char = {};-Elm.Native.Char.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.Char = elm.Native.Char || {};-    if (elm.Native.Char.values) return elm.Native.Char.values;--    var Utils = Elm.Native.Utils.make(elm);--    function isBetween(lo,hi) { return function(chr) {-	var c = chr.charCodeAt(0);-	return lo <= c && c <= hi;-    };-                              }-    var isDigit = isBetween('0'.charCodeAt(0),'9'.charCodeAt(0));-    var chk1 = isBetween('a'.charCodeAt(0),'f'.charCodeAt(0));-    var chk2 = isBetween('A'.charCodeAt(0),'F'.charCodeAt(0));--    return elm.Native.Char.values = {-        fromCode : function(c) { return String.fromCharCode(c); },-        toCode   : function(c) { return c.toUpperCase().charCodeAt(0); },-        toUpper  : function(c) { return Utils.chr(c.toUpperCase()); },-        toLower  : function(c) { return Utils.chr(c.toLowerCase()); },-        toLocaleUpper : function(c) { return Utils.chr(c.toLocaleUpperCase()); },-        toLocaleLower : function(c) { return Utils.chr(c.toLocaleLowerCase()); },-        isLower    : isBetween('a'.charCodeAt(0),'z'.charCodeAt(0)),-        isUpper    : isBetween('A'.charCodeAt(0),'Z'.charCodeAt(0)),-        isDigit    : isDigit,-        isOctDigit : isBetween('0'.charCodeAt(0),'7'.charCodeAt(0)),-        isHexDigit : function(c) { return isDigit(c) || chk1(c) || chk2(c); }-    };-};--Elm.Native.Color = {};-Elm.Native.Color.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.Color = elm.Native.Color || {};-    if (elm.Native.Color.values) return elm.Native.Color.values;--    function toCss(c) {-        var format = '';-        var colors = '';-        if (c.ctor === 'RGBA') {-            format = 'rgb';-            colors = c._0 + ', ' + c._1 + ', ' + c._2;-        } else {-            format = 'hsl';-            colors = (c._0 * 180 / Math.PI) + ', ' +-                     (c._1 * 100) + '%, ' +-                     (c._2 * 100) + '%';-        }-        if (c._3 === 1) {-            return format + '(' + colors + ')';-        } else {-            return format + 'a(' + colors + ', ' + c._3 + ')';-        }-    }--    return elm.Native.Color.values = {-        toCss:toCss-    };--};--Elm.Native.Debug = {};-Elm.Native.Debug.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.Debug = elm.Native.Debug || {};-    if (elm.Native.Debug.values)-    {-        return elm.Native.Debug.values;-    }--    var toString = Elm.Native.Show.make(elm).toString;--    function log(tag, value)-    {-        var msg = tag + ': ' + toString(value);-        var process = process || {};-        if (process.stdout) {-            process.stdout.write(msg);-        } else {-            console.log(msg);-        }-        return value;-    }--    function crash(message)-    {-        throw new Error(message);-    }--    function tracePath(tag, form)-    {-        if (elm.debug)-        {-            return elm.debug.trace(tag, form);-        }-        return form;-    }--    function watch(tag, value)-    {-        if (elm.debug)-        {-            elm.debug.watch(tag, value);-        }-        return value;-    }--    function watchSummary(tag, summarize, value)-    {-        if (elm.debug)-        {-            elm.debug.watch(tag, summarize(value));-        }-        return value;-    }--    return elm.Native.Debug.values = {-        crash: crash,-        tracePath: F2(tracePath),-        log: F2(log),-        watch: F2(watch),-        watchSummary:F3(watchSummary),-    };-};---// setup-Elm.Native = Elm.Native || {};-Elm.Native.Graphics = Elm.Native.Graphics || {};-Elm.Native.Graphics.Collage = Elm.Native.Graphics.Collage || {};--// definition-Elm.Native.Graphics.Collage.make = function(localRuntime) {-    'use strict';--    // attempt to short-circuit-    localRuntime.Native = localRuntime.Native || {};-    localRuntime.Native.Graphics = localRuntime.Native.Graphics || {};-    localRuntime.Native.Graphics.Collage = localRuntime.Native.Graphics.Collage || {};-    if ('values' in localRuntime.Native.Graphics.Collage) {-        return localRuntime.Native.Graphics.Collage.values;-    }--    // okay, we cannot short-ciruit, so now we define everything-    var Color = Elm.Native.Color.make(localRuntime);-    var List = Elm.Native.List.make(localRuntime);-    var Transform = Elm.Transform2D.make(localRuntime);--    var Element = Elm.Graphics.Element.make(localRuntime);-    var NativeElement = Elm.Native.Graphics.Element.make(localRuntime);---    function trace(ctx, path) {-        var points = List.toArray(path);-        var i = points.length - 1;-        if (i <= 0) {-            return;-        }-        ctx.moveTo(points[i]._0, points[i]._1);-        while (i--) {-            ctx.lineTo(points[i]._0, points[i]._1);-        }-        if (path.closed) {-            i = points.length - 1;-            ctx.lineTo(points[i]._0, points[i]._1);-        }-    }--    function line(ctx,style,path) {-        (style.dashing.ctor === '[]')-            ? trace(ctx, path)-            : customLineHelp(ctx, style, path);-        ctx.scale(1,-1);-        ctx.stroke();-    }--    function customLineHelp(ctx, style, path) {-        var points = List.toArray(path);-        if (path.closed) {-            points.push(points[0]);-        }-        var pattern = List.toArray(style.dashing);-        var i = points.length - 1;-        if (i <= 0) {-            return;-        }-        var x0 = points[i]._0, y0 = points[i]._1;-        var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0;-        var pindex = 0, plen = pattern.length;-        var draw = true, segmentLength = pattern[0];-        ctx.moveTo(x0,y0);-        while (i--) {-            x1 = points[i]._0; y1 = points[i]._1;-            dx = x1 - x0; dy = y1 - y0;-            remaining = Math.sqrt(dx * dx + dy * dy);-            while (segmentLength <= remaining) {-                x0 += dx * segmentLength / remaining;-                y0 += dy * segmentLength / remaining;-                ctx[draw ? 'lineTo' : 'moveTo'](x0, y0);-                // update starting position-                dx = x1 - x0; dy = y1 - y0;-                remaining = Math.sqrt(dx * dx + dy * dy);-                // update pattern-                draw = !draw;-                pindex = (pindex + 1) % plen;-                segmentLength = pattern[pindex];-            }-            if (remaining > 0) {-                ctx[draw ? 'lineTo' : 'moveTo'](x1, y1);-                segmentLength -= remaining;-            }-            x0 = x1; y0 = y1;-        }-    }--    function drawLine(ctx, style, path) {-        ctx.lineWidth = style.width;--        var cap = style.cap.ctor;-        ctx.lineCap = cap === 'Flat'-            ? 'butt'-            : cap === 'Round'-                ? 'round'-                : 'square';--        var join = style.join.ctor;-        ctx.lineJoin = join === 'Smooth'-            ? 'round'-            : join === 'Sharp'-                ? 'miter'-                : 'bevel';--        ctx.miterLimit = style.join._0 || 10;-        ctx.strokeStyle = Color.toCss(style.color);--        return line(ctx, style, path);-    }--    function texture(redo, ctx, src) {-        var img = new Image();-        img.src = src;-        img.onload = redo;-        return ctx.createPattern(img, 'repeat');-    }--    function gradient(ctx, grad) {-        var g;-        var stops = [];-        if (grad.ctor === 'Linear') {-            var p0 = grad._0, p1 = grad._1;-            g = ctx.createLinearGradient(p0._0, -p0._1, p1._0, -p1._1);-            stops = List.toArray(grad._2);-        } else {-            var p0 = grad._0, p2 = grad._2;-            g = ctx.createRadialGradient(p0._0, -p0._1, grad._1, p2._0, -p2._1, grad._3);-            stops = List.toArray(grad._4);-        }-        var len = stops.length;-        for (var i = 0; i < len; ++i) {-            var stop = stops[i];-            g.addColorStop(stop._0, Color.toCss(stop._1));-        }-        return g;-    }--    function drawShape(redo, ctx, style, path) {-        trace(ctx, path);-        var sty = style.ctor;-        ctx.fillStyle = sty === 'Solid'-            ? Color.toCss(style._0)-            : sty === 'Texture'-                ? texture(redo, ctx, style._0)-                : gradient(ctx, style._0);--        ctx.scale(1,-1);-        ctx.fill();-    }--    function drawImage(redo, ctx, form) {-        var img = new Image();-        img.onload = redo;-        img.src = form._3;-        var w = form._0,-            h = form._1,-            pos = form._2,-            srcX = pos._0,-            srcY = pos._1,-            srcW = w,-            srcH = h,-            destX = -w/2,-            destY = -h/2,-            destW = w,-            destH = h;--        ctx.scale(1,-1);-        ctx.drawImage(img, srcX, srcY, srcW, srcH, destX, destY, destW, destH);-    }--    function renderForm(redo, ctx, form) {-        ctx.save();-        var x = form.x, y = form.y, theta = form.theta, scale = form.scale;-        if (x !== 0 || y !== 0) ctx.translate(x, y);-        if (theta !== 0) ctx.rotate(theta);-        if (scale !== 1) ctx.scale(scale,scale);-        if (form.alpha !== 1) ctx.globalAlpha = ctx.globalAlpha * form.alpha;-        ctx.beginPath();-        var f = form.form;-        switch(f.ctor) {-        case 'FPath' : drawLine(ctx, f._0, f._1); break;-        case 'FImage': drawImage(redo, ctx, f); break;-        case 'FShape':-          if (f._0.ctor === 'Line') {-            f._1.closed = true;-            drawLine(ctx, f._0._0, f._1);-          } else {-            drawShape(redo, ctx, f._0._0, f._1);-          }-        break;-        }-        ctx.restore();-    }--    function formToMatrix(form) {-       var scale = form.scale;-       var matrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );--       var theta = form.theta-       if (theta !== 0) {-           matrix = A2( Transform.multiply, matrix, Transform.rotation(theta) );-       }--       return matrix;-    }--    function str(n) {-        if (n < 0.00001 && n > -0.00001) return 0;-        return n;-    }--    function makeTransform(w, h, form, matrices) {-        var props = form.form._0.props;-        var m = A6( Transform.matrix, 1, 0, 0, -1,-                    (w - props.width ) / 2,-                    (h - props.height) / 2 );-        var len = matrices.length;-        for (var i = 0; i < len; ++i) {-            m = A2( Transform.multiply, m, matrices[i] );-        }-        m = A2( Transform.multiply, m, formToMatrix(form) );--        return 'matrix(' + str( m[0]) + ', ' + str( m[3]) + ', ' +-                           str(-m[1]) + ', ' + str(-m[4]) + ', ' +-                           str( m[2]) + ', ' + str( m[5]) + ')';-    }--    function stepperHelp(list) {-        var arr = List.toArray(list);-        var i = 0;-        function peekNext() {-            return i < arr.length ? arr[i].form.ctor : '';-        }-        // assumes that there is a next element-        function next() {-            var out = arr[i];-            ++i;-            return out;-        }-        return {-            peekNext:peekNext,-            next:next-        };-    }--    function formStepper(forms) {-        var ps = [stepperHelp(forms)];-        var matrices = [];-        var alphas = [];-        function peekNext() {-            var len = ps.length;-            var formType = '';-            for (var i = 0; i < len; ++i ) {-                if (formType = ps[i].peekNext()) return formType;-            }-            return '';-        }-        // assumes that there is a next element-        function next(ctx) {-            while (!ps[0].peekNext()) {-                ps.shift();-                matrices.pop();-                alphas.shift();-                if (ctx) { ctx.restore(); }-            }-            var out = ps[0].next();-            var f = out.form;-            if (f.ctor === 'FGroup') {-                ps.unshift(stepperHelp(f._1));-                var m = A2(Transform.multiply, f._0, formToMatrix(out));-                ctx.save();-                ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);-                matrices.push(m);--                var alpha = (alphas[0] || 1) * out.alpha;-                alphas.unshift(alpha);-                ctx.globalAlpha = alpha;-            }-            return out;-        }-        function transforms() { return matrices; }-        function alpha() { return alphas[0] || 1; }-        return {-            peekNext:peekNext,-            next:next,-            transforms:transforms,-            alpha:alpha-        };-    }--    function makeCanvas(w,h) {-        var canvas = NativeElement.createNode('canvas');-        canvas.style.width  = w + 'px';-        canvas.style.height = h + 'px';-        canvas.style.display = "block";-        canvas.style.position = "absolute";-        canvas.width  = w;-        canvas.height = h;-        return canvas;-    }--    function render(model) {-        var div = NativeElement.createNode('div');-        div.style.overflow = 'hidden';-        div.style.position = 'relative';-        update(div, model, model);-        return div;-    }--    function nodeStepper(w,h,div) {-        var kids = div.childNodes;-        var i = 0;-        function transform(transforms, ctx) {-            ctx.translate(w/2, h/2);-            ctx.scale(1,-1);-            var len = transforms.length;-            for (var i = 0; i < len; ++i) {-                var m = transforms[i];-                ctx.save();-                ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);-            }-            return ctx;-        }-        function nextContext(transforms) {-            while (i < kids.length) {-                var node = kids[i];-                if (node.getContext) {-                    node.width = w;-                    node.height = h;-                    node.style.width = w + 'px';-                    node.style.height = h + 'px';-                    ++i;-                    return transform(transforms, node.getContext('2d'));-                }-                div.removeChild(node);-            }-            var canvas = makeCanvas(w,h);-            div.appendChild(canvas);-            // we have added a new node, so we must step our position-            ++i;-            return transform(transforms, canvas.getContext('2d'));-        }-        function addElement(matrices, alpha, form) {-            var kid = kids[i];-            var elem = form.form._0;--            var node = (!kid || kid.getContext)-                ? NativeElement.render(elem)-                : NativeElement.update(kid, kid.oldElement, elem);--            node.style.position = 'absolute';-            node.style.opacity = alpha * form.alpha * elem.props.opacity;-            NativeElement.addTransform(node.style, makeTransform(w, h, form, matrices));-            node.oldElement = elem;-            ++i;-            if (!kid) {-                div.appendChild(node);-            } else {-                div.insertBefore(node, kid);-            }-        }-        function clearRest() {-            while (i < kids.length) {-                div.removeChild(kids[i]);-            }-        }-        return { nextContext:nextContext, addElement:addElement, clearRest:clearRest };-    }---    function update(div, _, model) {-        var w = model.w;-        var h = model.h;--        var forms = formStepper(model.forms);-        var nodes = nodeStepper(w,h,div);-        var ctx = null;-        var formType = '';--        while (formType = forms.peekNext()) {-            // make sure we have context if we need it-            if (ctx === null && formType !== 'FElement') {-                ctx = nodes.nextContext(forms.transforms());-                ctx.globalAlpha = forms.alpha();-            }--            var form = forms.next(ctx);-            // if it is FGroup, all updates are made within formStepper when next is called.-            if (formType === 'FElement') {-                // update or insert an element, get a new context-                nodes.addElement(forms.transforms(), forms.alpha(), form);-                ctx = null;-            } else if (formType !== 'FGroup') {-                renderForm(function() { update(div, model, model); }, ctx, form);-            }-        }-        nodes.clearRest();-        return div;-    }---    function collage(w,h,forms) {-        return A3(Element.newElement, w, h, {-            ctor: 'Custom',-            type: 'Collage',-            render: render,-            update: update,-            model: {w:w, h:h, forms:forms}-      	});-    }--    return localRuntime.Native.Graphics.Collage.values = {-        collage:F3(collage)-    };-};---// setup-Elm.Native = Elm.Native || {};-Elm.Native.Graphics = Elm.Native.Graphics || {};-Elm.Native.Graphics.Element = Elm.Native.Graphics.Element || {};--// definition-Elm.Native.Graphics.Element.make = function(localRuntime) {-    'use strict';--    // attempt to short-circuit-    localRuntime.Native = localRuntime.Native || {};-    localRuntime.Native.Graphics = localRuntime.Native.Graphics || {};-    localRuntime.Native.Graphics.Element = localRuntime.Native.Graphics.Element || {};-    if ('values' in localRuntime.Native.Graphics.Element) {-        return localRuntime.Native.Graphics.Element.values;-    }--    var Color = Elm.Native.Color.make(localRuntime);-    var List = Elm.Native.List.make(localRuntime);-    var Utils = Elm.Native.Utils.make(localRuntime);---    function createNode(elementType) {-        var node = document.createElement(elementType);-        node.style.padding = "0";-        node.style.margin = "0";-        return node;-    }--    function setProps(elem, node) {-        var props = elem.props;--        var element = elem.element;-        var width = props.width - (element.adjustWidth || 0);-        var height = props.height - (element.adjustHeight || 0);-        node.style.width  = (width |0) + 'px';-        node.style.height = (height|0) + 'px';--        if (props.opacity !== 1) {-            node.style.opacity = props.opacity;-        }--        if (props.color.ctor === 'Just') {-            node.style.backgroundColor = Color.toCss(props.color._0);-        }--        if (props.tag !== '') {-            node.id = props.tag;-        }--        if (props.hover.ctor !== '_Tuple0') {-            addHover(node, props.hover);-        }--        if (props.click.ctor !== '_Tuple0') {-            addClick(node, props.click);-        }--        if (props.href !== '') {-            var anchor = createNode('a');-            anchor.href = props.href;-            anchor.style.display = 'block';-            anchor.style.pointerEvents = 'auto';-            anchor.appendChild(node);-            node = anchor;-        }--        return node;-    }--    function addClick(e, handler) {-        e.style.pointerEvents = 'auto';-        e.elm_click_handler = handler;-        function trigger(ev) {-            e.elm_click_handler(Utils.Tuple0);-            ev.stopPropagation();-        }-        e.elm_click_trigger = trigger;-        e.addEventListener('click', trigger);-    }--    function removeClick(e, handler) {-        if (e.elm_click_trigger) {-            e.removeEventListener('click', e.elm_click_trigger);-            e.elm_click_trigger = null;-            e.elm_click_handler = null;-        }-    }--    function addHover(e, handler) {-        e.style.pointerEvents = 'auto';-        e.elm_hover_handler = handler;-        e.elm_hover_count = 0;--        function over(evt) {-            if (e.elm_hover_count++ > 0) return;-            e.elm_hover_handler(true);-            evt.stopPropagation();-        }-        function out(evt) {-            if (e.contains(evt.toElement || evt.relatedTarget)) return;-            e.elm_hover_count = 0;-            e.elm_hover_handler(false);-            evt.stopPropagation();-        }-        e.elm_hover_over = over;-        e.elm_hover_out = out;-        e.addEventListener('mouseover', over);-        e.addEventListener('mouseout', out);-    }--    function removeHover(e) {-        e.elm_hover_handler = null;-        if (e.elm_hover_over) {-            e.removeEventListener('mouseover', e.elm_hover_over);-            e.elm_hover_over = null;-        }-        if (e.elm_hover_out) {-            e.removeEventListener('mouseout', e.elm_hover_out);-            e.elm_hover_out = null;-        }-    }--    function image(props, img) {-        switch (img._0.ctor) {-        case 'Plain':   return plainImage(img._3);-        case 'Fitted':  return fittedImage(props.width, props.height, img._3);-        case 'Cropped': return croppedImage(img,props.width,props.height,img._3);-        case 'Tiled':   return tiledImage(img._3);-        }-    }--    function plainImage(src) {-        var img = createNode('img');-        img.src = src;-        img.name = src;-        img.style.display = "block";-        return img;-    }--    function tiledImage(src) {-        var div = createNode('div');-        div.style.backgroundImage = 'url(' + src + ')';-        return div;-    }--    function fittedImage(w, h, src) {-        var div = createNode('div');-        div.style.background = 'url(' + src + ') no-repeat center';-        div.style.webkitBackgroundSize = 'cover';-        div.style.MozBackgroundSize = 'cover';-        div.style.OBackgroundSize = 'cover';-        div.style.backgroundSize = 'cover';-        return div;-    }--    function croppedImage(elem, w, h, src) {-        var pos = elem._0._0;-        var e = createNode('div');-        e.style.overflow = "hidden";--        var img = createNode('img');-        img.onload = function() {-            var sw = w / elem._1, sh = h / elem._2;-            img.style.width = ((this.width * sw)|0) + 'px';-            img.style.height = ((this.height * sh)|0) + 'px';-            img.style.marginLeft = ((- pos._0 * sw)|0) + 'px';-            img.style.marginTop = ((- pos._1 * sh)|0) + 'px';-        };-        img.src = src;-        img.name = src;-        e.appendChild(img);-        return e;-    }--    function goOut(node) {-        node.style.position = 'absolute';-        return node;-    }-    function goDown(node) {-        return node;-    }-    function goRight(node) {-        node.style.styleFloat = 'left';-        node.style.cssFloat = 'left';-        return node;-    }--    var directionTable = {-        DUp    : goDown,-        DDown  : goDown,-        DLeft  : goRight,-        DRight : goRight,-        DIn    : goOut,-        DOut   : goOut-    };-    function needsReversal(dir) {-        return dir == 'DUp' || dir == 'DLeft' || dir == 'DIn';-    }--    function flow(dir,elist) {-        var array = List.toArray(elist);-        var container = createNode('div');-        var goDir = directionTable[dir];-        if (goDir == goOut) {-            container.style.pointerEvents = 'none';-        }-        if (needsReversal(dir)) {-            array.reverse();-        }-        var len = array.length;-        for (var i = 0; i < len; ++i) {-            container.appendChild(goDir(render(array[i])));-        }-        return container;-    }--    function toPos(pos) {-        switch(pos.ctor) {-        case "Absolute": return  pos._0 + "px";-        case "Relative": return (pos._0 * 100) + "%";-        }-    }--    // must clear right, left, top, bottom, and transform-    // before calling this function-    function setPos(pos,elem,e) {-        var element = elem.element;-        var props = elem.props;-        var w = props.width + (element.adjustWidth ? element.adjustWidth : 0);-        var h = props.height + (element.adjustHeight ? element.adjustHeight : 0);--        e.style.position = 'absolute';-        e.style.margin = 'auto';-        var transform = '';-        switch(pos.horizontal.ctor) {-        case 'P': e.style.right = toPos(pos.x); e.style.removeProperty('left'); break;-        case 'Z': transform = 'translateX(' + ((-w/2)|0) + 'px) ';-        case 'N': e.style.left = toPos(pos.x); e.style.removeProperty('right'); break;-        }-        switch(pos.vertical.ctor) {-        case 'N': e.style.bottom = toPos(pos.y); e.style.removeProperty('top'); break;-        case 'Z': transform += 'translateY(' + ((-h/2)|0) + 'px)';-        case 'P': e.style.top = toPos(pos.y); e.style.removeProperty('bottom'); break;-        }-        if (transform !== '') {-            addTransform(e.style, transform);-        }-        return e;-    }--    function addTransform(style, transform) {-        style.transform       = transform;-        style.msTransform     = transform;-        style.MozTransform    = transform;-        style.webkitTransform = transform;-        style.OTransform      = transform;-    }--    function container(pos,elem) {-        var e = render(elem);-        setPos(pos, elem, e);-        var div = createNode('div');-        div.style.position = 'relative';-        div.style.overflow = 'hidden';-        div.appendChild(e);-        return div;-    }--    function rawHtml(elem) {-        var html = elem.html;-        var guid = elem.guid;-        var align = elem.align;--        var div = createNode('div');-        div.innerHTML = html;-        div.style.visibility = "hidden";-        if (align) {-            div.style.textAlign = align;-        }-        div.style.visibility = 'visible';-        div.style.pointerEvents = 'auto';-        return div;-    }--    function render(elem) {-        return setProps(elem, makeElement(elem));-    }-    function makeElement(e) {-        var elem = e.element;-        switch(elem.ctor) {-        case 'Image':     return image(e.props, elem);-        case 'Flow':      return flow(elem._0.ctor, elem._1);-        case 'Container': return container(elem._0, elem._1);-        case 'Spacer':    return createNode('div');-        case 'RawHtml':   return rawHtml(elem);-        case 'Custom':    return elem.render(elem.model);-        }-    }--    function updateAndReplace(node, curr, next) {-        var newNode = update(node, curr, next);-        if (newNode !== node) {-            node.parentNode.replaceChild(newNode, node);-        }-        return newNode;-    }--    function update(node, curr, next) {-        var rootNode = node;-        if (node.tagName === 'A') {-            node = node.firstChild;-        }-        if (curr.props.id === next.props.id) {-            updateProps(node, curr, next);-            return rootNode;-        }-        if (curr.element.ctor !== next.element.ctor) {-            return render(next);-        }-        var nextE = next.element;-        var currE = curr.element;-        switch(nextE.ctor) {-        case "Spacer":-            updateProps(node, curr, next);-            return rootNode;--        case "RawHtml":-            if(currE.html.valueOf() !== nextE.html.valueOf()) {-                node.innerHTML = nextE.html;-            }-            updateProps(node, curr, next);-            return rootNode;--        case "Image":-            if (nextE._0.ctor === 'Plain') {-                if (nextE._3 !== currE._3) {-                    node.src = nextE._3;-                }-            } else if (!Utils.eq(nextE,currE) ||-                       next.props.width !== curr.props.width ||-                       next.props.height !== curr.props.height) {-                return render(next);-            }-            updateProps(node, curr, next);-            return rootNode;--        case "Flow":-            var arr = List.toArray(nextE._1);-            for (var i = arr.length; i--; ) {-                arr[i] = arr[i].element.ctor;-            }-            if (nextE._0.ctor !== currE._0.ctor) {-                return render(next);-            }-            var nexts = List.toArray(nextE._1);-            var kids = node.childNodes;-            if (nexts.length !== kids.length) {-                return render(next);-            }-            var currs = List.toArray(currE._1);-            var dir = nextE._0.ctor;-            var goDir = directionTable[dir];-            var toReverse = needsReversal(dir);-            var len = kids.length;-            for (var i = len; i-- ;) {-                var subNode = kids[toReverse ? len - i - 1 : i];-                goDir(updateAndReplace(subNode, currs[i], nexts[i]));-            }-            updateProps(node, curr, next);-            return rootNode;--        case "Container":-            var subNode = node.firstChild;-            var newSubNode = updateAndReplace(subNode, currE._1, nextE._1);-            setPos(nextE._0, nextE._1, newSubNode);-            updateProps(node, curr, next);-            return rootNode;--        case "Custom":-            if (currE.type === nextE.type) {-                var updatedNode = nextE.update(node, currE.model, nextE.model);-                updateProps(updatedNode, curr, next);-                return updatedNode;-            } else {-                return render(next);-            }-        }-    }--    function updateProps(node, curr, next) {-        var nextProps = next.props;-        var currProps = curr.props;--        var element = next.element;-        var width = nextProps.width - (element.adjustWidth || 0);-        var height = nextProps.height - (element.adjustHeight || 0);-        if (width !== currProps.width) {-            node.style.width = (width|0) + 'px';-        }-        if (height !== currProps.height) {-            node.style.height = (height|0) + 'px';-        }--        if (nextProps.opacity !== currProps.opacity) {-            node.style.opacity = nextProps.opacity;-        }--        var nextColor = nextProps.color.ctor === 'Just'-            ? Color.toCss(nextProps.color._0)-            : '';-        if (node.style.backgroundColor !== nextColor) {-            node.style.backgroundColor = nextColor;-        }--        if (nextProps.tag !== currProps.tag) {-            node.id = nextProps.tag;-        }--        if (nextProps.href !== currProps.href) {-            if (currProps.href === '') {-                // add a surrounding href-                var anchor = createNode('a');-                anchor.href = nextProps.href;-                anchor.style.display = 'block';-                anchor.style.pointerEvents = 'auto';--                node.parentNode.replaceChild(anchor, node);-                anchor.appendChild(node);-            } else if (nextProps.href === '') {-                // remove the surrounding href-                var anchor = node.parentNode;-                anchor.parentNode.replaceChild(node, anchor);-            } else {-                // just update the link-                node.parentNode.href = nextProps.href;-            }-        }--        // update click and hover handlers-        var removed = false;--        // update hover handlers-        if (currProps.hover.ctor === '_Tuple0') {-            if (nextProps.hover.ctor !== '_Tuple0') {-                addHover(node, nextProps.hover);-            }-        }-        else {-            if (nextProps.hover.ctor === '_Tuple0') {-                removed = true;-                removeHover(node);-            }-            else {-                node.elm_hover_handler = nextProps.hover;-            }-        }--        // update click handlers-        if (currProps.click.ctor === '_Tuple0') {-            if (nextProps.click.ctor !== '_Tuple0') {-                addClick(node, nextProps.click);-            }-        }-        else {-            if (nextProps.click.ctor === '_Tuple0') {-                removed = true;-                removeClick(node);-            } else {-                node.elm_click_handler = nextProps.click;-            }-        }--        // stop capturing clicks if -        if (removed-            && nextProps.hover.ctor === '_Tuple0'-            && nextProps.click.ctor === '_Tuple0')-        {-            node.style.pointerEvents = 'none';-        }-    }---    function htmlHeight(width, rawHtml) {-        // create dummy node-        var temp = document.createElement('div');-        temp.innerHTML = rawHtml.html;-        if (width > 0) {-            temp.style.width = width + "px";-        }-        temp.style.visibility = "hidden";-        temp.style.styleFloat = "left";-        temp.style.cssFloat   = "left";--        document.body.appendChild(temp);--        // get dimensions-        var style = window.getComputedStyle(temp, null);-        var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);-        var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);-        document.body.removeChild(temp);-        return Utils.Tuple2(w,h);-    }---    return localRuntime.Native.Graphics.Element.values = {-        render: render,-        update: update,-        updateAndReplace: updateAndReplace,--        createNode: createNode,-        addTransform: addTransform,-        htmlHeight: F2(htmlHeight),-        guid: Utils.guid-    };--};--// setup-Elm.Native = Elm.Native || {};-Elm.Native.Graphics = Elm.Native.Graphics || {};-Elm.Native.Graphics.Input = Elm.Native.Graphics.Input || {};--// definition-Elm.Native.Graphics.Input.make = function(localRuntime) {-    'use strict';--    // attempt to short-circuit-    if ('values' in Elm.Native.Graphics.Input) {-        return Elm.Native.Graphics.Input.values;-    }--    var Color = Elm.Native.Color.make(localRuntime);-    var List = Elm.Native.List.make(localRuntime);-    var Text = Elm.Native.Text.make(localRuntime);-    var Utils = Elm.Native.Utils.make(localRuntime);--    var Element = Elm.Graphics.Element.make(localRuntime);-    var NativeElement = Elm.Native.Graphics.Element.make(localRuntime);---    function renderDropDown(model) {-        var drop = NativeElement.createNode('select');-        drop.style.border = '0 solid';-        drop.style.pointerEvents = 'auto';-        drop.style.display = 'block';--        drop.elm_values = List.toArray(model.values);-        drop.elm_handler = model.handler;-        var values = drop.elm_values;--        for (var i = 0; i < values.length; ++i) {-            var option = NativeElement.createNode('option');-            var name = values[i]._0;-            option.value = name;-            option.innerHTML = name;-            drop.appendChild(option);-        }-        drop.addEventListener('change', function() {-            drop.elm_handler(drop.elm_values[drop.selectedIndex]._1)();-        });--        return drop;-    }--    function updateDropDown(node, oldModel, newModel) {-        node.elm_values = List.toArray(newModel.values);-        node.elm_handler = newModel.handler;--        var values = node.elm_values;-        var kids = node.childNodes;-        var kidsLength = kids.length;--        var i = 0;-        for (; i < kidsLength && i < values.length; ++i) {-            var option = kids[i];-            var name = values[i]._0;-            option.value = name;-            option.innerHTML = name;-        }-        for (; i < kidsLength; ++i) {-            node.removeChild(node.lastChild);-        }-        for (; i < values.length; ++i) {-            var option = NativeElement.createNode('option');-            var name = values[i]._0;-            option.value = name;-            option.innerHTML = name;-            node.appendChild(option);-        }-        return node;-    }--    function dropDown(handler, values) {-        return A3(Element.newElement, 100, 24, {-            ctor: 'Custom',-            type: 'DropDown',-            render: renderDropDown,-            update: updateDropDown,-            model: {-                values: values,-                handler: handler-            }-        });-    }--    function renderButton(model) {-        var node = NativeElement.createNode('button');-        node.style.display = 'block';-        node.style.pointerEvents = 'auto';-        node.elm_message = model.message;-        function click() {-            node.elm_message();-        }-        node.addEventListener('click', click);-        node.innerHTML = model.text;-        return node;-    }--    function updateButton(node, oldModel, newModel) {-        node.elm_message = newModel.message;-        var txt = newModel.text;-        if (oldModel.text !== txt) {-            node.innerHTML = txt;-        }-        return node;-    }--    function button(message, text) {-        return A3(Element.newElement, 100, 40, {-            ctor: 'Custom',-            type: 'Button',-            render: renderButton,-            update: updateButton,-            model: {-                message: message,-                text:text-            }-        });-    }--    function renderCustomButton(model) {-        var btn = NativeElement.createNode('div');-        btn.style.pointerEvents = 'auto';-        btn.elm_message = model.message;--        btn.elm_up    = NativeElement.render(model.up);-        btn.elm_hover = NativeElement.render(model.hover);-        btn.elm_down  = NativeElement.render(model.down);--        btn.elm_up.style.display = 'block';-        btn.elm_hover.style.display = 'none';-        btn.elm_down.style.display = 'none';-  -        btn.appendChild(btn.elm_up);-        btn.appendChild(btn.elm_hover);-        btn.appendChild(btn.elm_down);--        function swap(visibleNode, hiddenNode1, hiddenNode2) {-            visibleNode.style.display = 'block';-            hiddenNode1.style.display = 'none';-            hiddenNode2.style.display = 'none';-        }--        var overCount = 0;-        function over(e) {-            if (overCount++ > 0) return;-            swap(btn.elm_hover, btn.elm_down, btn.elm_up);-        }-        function out(e) {-            if (btn.contains(e.toElement || e.relatedTarget)) return;-            overCount = 0;-            swap(btn.elm_up, btn.elm_down, btn.elm_hover);-        }-        function up() {-            swap(btn.elm_hover, btn.elm_down, btn.elm_up);-            btn.elm_message();-        }-        function down() {-            swap(btn.elm_down, btn.elm_hover, btn.elm_up);-        }--        btn.addEventListener('mouseover', over);-        btn.addEventListener('mouseout' , out);-        btn.addEventListener('mousedown', down);-        btn.addEventListener('mouseup'  , up);--        return btn;-    }--    function updateCustomButton(node, oldModel, newModel) {-        node.elm_message = newModel.message;--        var kids = node.childNodes;-        var styleUp    = kids[0].style.display;-        var styleHover = kids[1].style.display;-        var styleDown  = kids[2].style.display;--        NativeElement.updateAndReplace(kids[0], oldModel.up, newModel.up);-        NativeElement.updateAndReplace(kids[1], oldModel.hover, newModel.hover);-        NativeElement.updateAndReplace(kids[2], oldModel.down, newModel.down);--        var kids = node.childNodes;-        kids[0].style.display = styleUp;-        kids[1].style.display = styleHover;-        kids[2].style.display = styleDown;--        return node;-    }--    function max3(a,b,c) {-        var ab = a > b ? a : b;-        return ab > c ? ab : c;-    }--    function customButton(message, up, hover, down) {-        return A3(Element.newElement,-                  max3(up.props.width, hover.props.width, down.props.width),-                  max3(up.props.height, hover.props.height, down.props.height),-                  { ctor: 'Custom',-                    type: 'CustomButton',-                    render: renderCustomButton,-                    update: updateCustomButton,-                    model: {-                        message: message,-                        up: up,-                        hover: hover,-                        down: down-                    }-                  });-    }--    function renderCheckbox(model) {-        var node = NativeElement.createNode('input');-        node.type = 'checkbox';-        node.checked = model.checked;-        node.style.display = 'block';-        node.style.pointerEvents = 'auto';-        node.elm_handler = model.handler;-        function change() {-            node.elm_handler(node.checked)();-        }-        node.addEventListener('change', change);-        return node;-    }--    function updateCheckbox(node, oldModel, newModel) {-        node.elm_handler = newModel.handler;-        node.checked = newModel.checked;-        return node;-    }--    function checkbox(handler, checked) {-        return A3(Element.newElement, 13, 13, {-            ctor: 'Custom',-            type: 'CheckBox',-            render: renderCheckbox,-            update: updateCheckbox,-            model: { handler:handler, checked:checked }-        });-    }--    function setRange(node, start, end, dir) {-        if (node.parentNode) {-            node.setSelectionRange(start, end, dir);-        } else {-            setTimeout(function(){node.setSelectionRange(start, end, dir);}, 0);-        }-    }--    function updateIfNeeded(css, attribute, latestAttribute) {-        if (css[attribute] !== latestAttribute) {-            css[attribute] = latestAttribute;-        }-    }-    function cssDimensions(dimensions) {-        return dimensions.top    + 'px ' +-               dimensions.right  + 'px ' +-               dimensions.bottom + 'px ' +-               dimensions.left   + 'px';-    }-    function updateFieldStyle(css, style) {-        updateIfNeeded(css, 'padding', cssDimensions(style.padding));--        var outline = style.outline;-        updateIfNeeded(css, 'border-width', cssDimensions(outline.width));-        updateIfNeeded(css, 'border-color', Color.toCss(outline.color));-        updateIfNeeded(css, 'border-radius', outline.radius + 'px');--        var highlight = style.highlight;-        if (highlight.width === 0) {-            css.outline = 'none';-        } else {-            updateIfNeeded(css, 'outline-width', highlight.width + 'px');-            updateIfNeeded(css, 'outline-color', Color.toCss(highlight.color));-        }--        var textStyle = style.style;-        updateIfNeeded(css, 'color', Color.toCss(textStyle.color));-        if (textStyle.typeface.ctor !== '[]') {-            updateIfNeeded(css, 'font-family', Text.toTypefaces(textStyle.typeface));-        }-        if (textStyle.height.ctor !== "Nothing") {-            updateIfNeeded(css, 'font-size', textStyle.height._0 + 'px');-        }-        updateIfNeeded(css, 'font-weight', textStyle.bold ? 'bold' : 'normal');-        updateIfNeeded(css, 'font-style', textStyle.italic ? 'italic' : 'normal');-        if (textStyle.line.ctor !== 'Nothing') {-            updateIfNeeded(css, 'text-decoration', Text.toLine(textStyle.line._0));-        }-    }--    function renderField(model) {-        var field = NativeElement.createNode('input');-        updateFieldStyle(field.style, model.style);-        field.style.borderStyle = 'solid';-        field.style.pointerEvents = 'auto';--        field.type = model.type;-        field.placeholder = model.placeHolder;-        field.value = model.content.string;--        field.elm_handler = model.handler;-        field.elm_old_value = field.value;--        function inputUpdate(event) {-            var curr = field.elm_old_value;-            var next = field.value;-            if (curr === next) {-                return;-            }--            var direction = field.selectionDirection === 'forward' ? 'Forward' : 'Backward';-            var start = field.selectionStart;-            var end = field.selectionEnd;-            field.value = field.elm_old_value;--            field.elm_handler({-                _:{},-                string: next,-                selection: {-                    _:{},-                    start: start,-                    end: end,-                    direction: { ctor: direction }-                }-            })();-        }--        field.addEventListener('input', inputUpdate);-        field.addEventListener('focus', function() {-            field.elm_hasFocus = true;-        });-        field.addEventListener('blur', function() {-            field.elm_hasFocus = false;-        });--        return field;-    }--    function updateField(field, oldModel, newModel) {-        if (oldModel.style !== newModel.style) {-            updateFieldStyle(field.style, newModel.style);-        }-        field.elm_handler = newModel.handler;--        field.type = newModel.type;-        field.placeholder = newModel.placeHolder;-        var value = newModel.content.string;-        field.value = value;-        field.elm_old_value = value;-        if (field.elm_hasFocus) {-            var selection = newModel.content.selection;-            var direction = selection.direction.ctor === 'Forward' ? 'forward' : 'backward';-            setRange(field, selection.start, selection.end, direction);-        }-        return field;-    }--    function mkField(type) {-        function field(style, handler, placeHolder, content) {-            var padding = style.padding;-            var outline = style.outline.width;-            var adjustWidth = padding.left + padding.right + outline.left + outline.right;-            var adjustHeight = padding.top + padding.bottom + outline.top + outline.bottom;-            return A3(Element.newElement, 200, 30, {-                ctor: 'Custom',-                type: type + 'Field',-                adjustWidth: adjustWidth,-                adjustHeight: adjustHeight,-                render: renderField,-                update: updateField,-                model: {-                    handler:handler,-                    placeHolder:placeHolder,-                    content:content,-                    style:style,-                    type:type-                }-            });-        }-        return F4(field);-    }--    function hoverable(handler, elem) {-        function onHover(bool) {-            handler(bool)();-        }-        var props = Utils.replace([['hover',onHover]], elem.props);-        return { props:props, element:elem.element };-    }--    function clickable(message, elem) {-        function onClick() {-            message();-        }-        var props = Utils.replace([['click',onClick]], elem.props);-        return { props:props, element:elem.element };-    }--    return Elm.Native.Graphics.Input.values = {-        button: F2(button),-        customButton: F4(customButton),-        checkbox: F2(checkbox),-        dropDown: F2(dropDown),-        field: mkField('text'),-        email: mkField('email'),-        password: mkField('password'),-        hoverable: F2(hoverable),-        clickable: F2(clickable)-    };--};--Elm.Native.Json = {};-Elm.Native.Json.make = function(localRuntime) {-    localRuntime.Native = localRuntime.Native || {};-    localRuntime.Native.Json = localRuntime.Native.Json || {};-    if (localRuntime.Native.Json.values) {-        return localRuntime.Native.Json.values;-    }--    var ElmArray = Elm.Native.Array.make(localRuntime);-    var List = Elm.Native.List.make(localRuntime);-    var Maybe = Elm.Maybe.make(localRuntime);-    var Result = Elm.Result.make(localRuntime);-    var Utils = Elm.Native.Utils.make(localRuntime);---    function crash(expected, actual) {-        throw new Error(-            'expecting ' + expected + ' but got ' + JSON.stringify(actual)-        );-    }---    // PRIMITIVE VALUES--    function decodeNull(successValue) {-        return function(value) {-            if (value === null) {-                return successValue;-            }-            crash('null', value);-        };-    }---    function decodeString(value) {-        if (typeof value === 'string' || value instanceof String) {-            return value;-        }-        crash('a String', value);-    }---    function decodeFloat(value) {-        if (typeof value === 'number') {-            return value;-        }-        crash('a Float', value);-    }---    function decodeInt(value) {-        if (typeof value === 'number' && (value|0) === value) {-            return value;-        }-        crash('an Int', value);-    }---    function decodeBool(value) {-        if (typeof value === 'boolean') {-            return value;-        }-        crash('a Bool', value);-    }---    // ARRAY--    function decodeArray(decoder) {-        return function(value) {-            if (value instanceof Array) {-                var len = value.length;-                var array = new Array(len);-                for (var i = len; i-- ; ) {-                    array[i] = decoder(value[i]);-                }-                return ElmArray.fromJSArray(array);-            }-            crash('an Array', value);-        };-    }---    // LIST--    function decodeList(decoder) {-        return function(value) {-            if (value instanceof Array) {-                var len = value.length;-                var list = List.Nil;-                for (var i = len; i-- ; ) {-                    list = List.Cons( decoder(value[i]), list );-                }-                return list;-            }-            crash('a List', value);-        };-    }---    // MAYBE--    function decodeMaybe(decoder) {-        return function(value) {-            try {-                return Maybe.Just(decoder(value));-            } catch(e) {-                return Maybe.Nothing;-            }-        };-    }---    // FIELDS--    function decodeField(field, decoder) {-        return function(value) {-            var subValue = value[field];-            if (subValue !== undefined) {-                return decoder(subValue);-            }-            crash("an object with field '" + field + "'", value);-        };-    }---    // OBJECTS--    function decodeKeyValuePairs(decoder) {-        return function(value) {-            var isObject =-                typeof value === 'object'-                    && value !== null-                    && !(value instanceof Array);--            if (isObject) {-                var keyValuePairs = List.Nil;-                for (var key in value) {-                    var elmValue = decoder(value[key]);-                    var pair = Utils.Tuple2(key, elmValue);-                    keyValuePairs = List.Cons(pair, keyValuePairs);-                }-                return keyValuePairs;-            }--            crash("an object", value);-        };-    }--    function decodeObject1(f, d1) {-        return function(value) {-            return f(d1(value));-        };-    }--    function decodeObject2(f, d1, d2) {-        return function(value) {-            return A2( f, d1(value), d2(value) );-        };-    }--    function decodeObject3(f, d1, d2, d3) {-        return function(value) {-            return A3( f, d1(value), d2(value), d3(value) );-        };-    }--    function decodeObject4(f, d1, d2, d3, d4) {-        return function(value) {-            return A4( f, d1(value), d2(value), d3(value), d4(value) );-        };-    }--    function decodeObject5(f, d1, d2, d3, d4, d5) {-        return function(value) {-            return A5( f, d1(value), d2(value), d3(value), d4(value), d5(value) );-        };-    }--    function decodeObject6(f, d1, d2, d3, d4, d5, d6) {-        return function(value) {-            return A6( f,-                d1(value),-                d2(value),-                d3(value),-                d4(value),-                d5(value),-                d6(value)-            );-        };-    }--    function decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) {-        return function(value) {-            return A7( f,-                d1(value),-                d2(value),-                d3(value),-                d4(value),-                d5(value),-                d6(value),-                d7(value)-            );-        };-    }--    function decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) {-        return function(value) {-            return A8( f,-                d1(value),-                d2(value),-                d3(value),-                d4(value),-                d5(value),-                d6(value),-                d7(value),-                d8(value)-            );-        };-    }---    // TUPLES--    function decodeTuple1(f, d1) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 1 ) {-                crash('a Tuple of length 1', value);-            }-            return f( d1(value[0]) );-        };-    }--    function decodeTuple2(f, d1, d2) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 2 ) {-                crash('a Tuple of length 2', value);-            }-            return A2( f, d1(value[0]), d2(value[1]) );-        };-    }--    function decodeTuple3(f, d1, d2, d3) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 3 ) {-                crash('a Tuple of length 3', value);-            }-            return A3( f, d1(value[0]), d2(value[1]), d3(value[2]) );-        };-    }---    function decodeTuple4(f, d1, d2, d3, d4) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 4 ) {-                crash('a Tuple of length 4', value);-            }-            return A4( f, d1(value[0]), d2(value[1]), d3(value[2]), d4(value[3]) );-        };-    }---    function decodeTuple5(f, d1, d2, d3, d4, d5) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 5 ) {-                crash('a Tuple of length 5', value);-            }-            return A5( f,-                d1(value[0]),-                d2(value[1]),-                d3(value[2]),-                d4(value[3]),-                d5(value[4])-            );-        };-    }---    function decodeTuple6(f, d1, d2, d3, d4, d5, d6) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 6 ) {-                crash('a Tuple of length 6', value);-            }-            return A6( f,-                d1(value[0]),-                d2(value[1]),-                d3(value[2]),-                d4(value[3]),-                d5(value[4]),-                d6(value[5])-            );-        };-    }--    function decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 7 ) {-                crash('a Tuple of length 7', value);-            }-            return A7( f,-                d1(value[0]),-                d2(value[1]),-                d3(value[2]),-                d4(value[3]),-                d5(value[4]),-                d6(value[5]),-                d7(value[6])-            );-        };-    }---    function decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) {-        return function(value) {-            if ( !(value instanceof Array) || value.length !== 8 ) {-                crash('a Tuple of length 8', value);-            }-            return A8( f,-                d1(value[0]),-                d2(value[1]),-                d3(value[2]),-                d4(value[3]),-                d5(value[4]),-                d6(value[5]),-                d7(value[6]),-                d8(value[7])-            );-        };-    }---    // CUSTOM DECODERS--    function decodeValue(value) {-        return value;-    }--    function runDecoderValue(decoder, value) {-        try {-            return Result.Ok(decoder(value));-        } catch(e) {-            return Result.Err(e.message);-        }-    }--    function customDecoder(decoder, callback) {-        return function(value) {-            var result = callback(decoder(value));-            if (result.ctor === 'Err') {-                throw new Error('custom decoder failed: ' + result._0);-            }-            return result._0;-        }-    }--    function andThen(decode, callback) {-        return function(value) {-            var result = decode(value);-            return callback(result)(value);-        }-    }--    function fail(msg) {-        return function(value) {-            throw new Error(msg);-        }-    }--    function succeed(successValue) {-        return function(value) {-            return successValue;-        }-    }---    // ONE OF MANY--    function oneOf(decoders) {-        return function(value) {-            var errors = [];-            var temp = decoders;-            while (temp.ctor !== '[]') {-                try {-                    return temp._0(value);-                } catch(e) {-                    errors.push(e.message);-                }-                temp = temp._1;-            }-            throw new Error('expecting one of the following:\n    ' + errors.join('\n    '));-        }-    }--    function get(decoder, value) {-        try {-            return Result.Ok(decoder(value));-        } catch(e) {-            return Result.Err(e.message);-        }-    }---    // ENCODE / DECODE--    function runDecoderString(decoder, string) {-        try {-            return Result.Ok(decoder(JSON.parse(string)));-        } catch(e) {-            return Result.Err(e.message);-        }-    }--    function encode(indentLevel, value) {-        return JSON.stringify(value, null, indentLevel);-    }--    function identity(value) {-        return value;-    }--    function encodeObject(keyValuePairs) {-        var obj = {};-        while (keyValuePairs.ctor !== '[]') {-            var pair = keyValuePairs._0;-            obj[pair._0] = pair._1;-            keyValuePairs = keyValuePairs._1;-        }-        return obj;-    }--    return localRuntime.Native.Json.values = {-        encode: F2(encode),-        runDecoderString: F2(runDecoderString),-        runDecoderValue: F2(runDecoderValue),--        get: F2(get),-        oneOf: oneOf,--        decodeNull: decodeNull,-        decodeInt: decodeInt,-        decodeFloat: decodeFloat,-        decodeString: decodeString,-        decodeBool: decodeBool,--        decodeMaybe: decodeMaybe,--        decodeList: decodeList,-        decodeArray: decodeArray,--        decodeField: F2(decodeField),--        decodeObject1: F2(decodeObject1),-        decodeObject2: F3(decodeObject2),-        decodeObject3: F4(decodeObject3),-        decodeObject4: F5(decodeObject4),-        decodeObject5: F6(decodeObject5),-        decodeObject6: F7(decodeObject6),-        decodeObject7: F8(decodeObject7),-        decodeObject8: F9(decodeObject8),-        decodeKeyValuePairs: decodeKeyValuePairs,--        decodeTuple1: F2(decodeTuple1),-        decodeTuple2: F3(decodeTuple2),-        decodeTuple3: F4(decodeTuple3),-        decodeTuple4: F5(decodeTuple4),-        decodeTuple5: F6(decodeTuple5),-        decodeTuple6: F7(decodeTuple6),-        decodeTuple7: F8(decodeTuple7),-        decodeTuple8: F9(decodeTuple8),--        andThen: F2(andThen),-        decodeValue: decodeValue,-        customDecoder: F2(customDecoder),-        fail: fail,-        succeed: succeed,--        identity: identity,-        encodeNull: null,-        encodeArray: ElmArray.toJSArray,-        encodeList: List.toArray,-        encodeObject: encodeObject--    };--};--Elm.Native.List = {};-Elm.Native.List.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.List = elm.Native.List || {};-    if (elm.Native.List.values) return elm.Native.List.values;-    if ('values' in Elm.Native.List)-        return elm.Native.List.values = Elm.Native.List.values;--    var Utils = Elm.Native.Utils.make(elm);--    var Nil = Utils.Nil;-    var Cons = Utils.Cons;--    function throwError(f) {-        throw new Error("Function '" + f + "' expects a non-empty list!");-    }--    function toArray(xs) {-        var out = [];-        while (xs.ctor !== '[]') {-            out.push(xs._0);-            xs = xs._1;-        }-        return out;-    }--    function fromArray(arr) {-        var out = Nil;-        for (var i = arr.length; i--; ) {-            out = Cons(arr[i], out);-        }-        return out;-    }--    function range(lo,hi) {-        var lst = Nil;-        if (lo <= hi) {-            do { lst = Cons(hi,lst) } while (hi-->lo);-        }-        return lst-    }--    function head(v) {-        return v.ctor === '[]' ? throwError('head') : v._0;-    }-    function tail(v) {-        return v.ctor === '[]' ? throwError('tail') : v._1;-    }--    function map(f, xs) {-        var arr = [];-        while (xs.ctor !== '[]') {-            arr.push(f(xs._0));-            xs = xs._1;-        }-        return fromArray(arr);-    }--    // f defined similarly for both foldl and foldr (NB: different from Haskell)-    // ie, foldl : (a -> b -> b) -> b -> [a] -> b-    function foldl(f, b, xs) {-        var acc = b;-        while (xs.ctor !== '[]') {-            acc = A2(f, xs._0, acc);-            xs = xs._1;-        }-        return acc;-    }--    function foldr(f, b, xs) {-        var arr = toArray(xs);-        var acc = b;-        for (var i = arr.length; i--; ) {-            acc = A2(f, arr[i], acc);-        }-        return acc;-    }--    function foldl1(f, xs) {-        return xs.ctor === '[]' ? throwError('foldl1') : foldl(f, xs._0, xs._1);-    }--    function foldr1(f, xs) {-        if (xs.ctor === '[]') { throwError('foldr1'); }-        var arr = toArray(xs);-        var acc = arr.pop();-        for (var i = arr.length; i--; ) {-            acc = A2(f, arr[i], acc);-        }-        return acc;-    }--    function scanl(f, b, xs) {-        var arr = toArray(xs);-        arr.unshift(b);-        var len = arr.length;-        for (var i = 1; i < len; ++i) {-            arr[i] = A2(f, arr[i], arr[i-1]);-        }-        return fromArray(arr);-    }--    function scanl1(f, xs) {-        return xs.ctor === '[]' ? throwError('scanl1') : scanl(f, xs._0, xs._1);-    }--    function filter(pred, xs) {-        var arr = [];-        while (xs.ctor !== '[]') {-            if (pred(xs._0)) { arr.push(xs._0); }-            xs = xs._1;-        }-        return fromArray(arr);-    }--    function length(xs) {-        var out = 0;-        while (xs.ctor !== '[]') {-            out += 1;-            xs = xs._1;-        }-        return out;-    }--    function member(x, xs) {-        while (xs.ctor !== '[]') {-            if (Utils.eq(x,xs._0)) return true;-            xs = xs._1;-        }-        return false;-    }--    function append(xs, ys) {-        if (xs.ctor === '[]') {-            return ys;-        }-        var root = Cons(xs._0, Nil);-        var curr = root;-        xs = xs._1;-        while (xs.ctor !== '[]') {-            curr._1 = Cons(xs._0, Nil);-            xs = xs._1;-            curr = curr._1;-        }-        curr._1 = ys;-        return root;-    }--    function all(pred, xs) {-        while (xs.ctor !== '[]') {-            if (!pred(xs._0)) return false;-            xs = xs._1;-        }-        return true;-    }--    function any(pred, xs) {-        while (xs.ctor !== '[]') {-            if (pred(xs._0)) return true;-            xs = xs._1;-        }-        return false;-    }--    function map2(f, xs, ys) {-        var arr = [];-        while (xs.ctor !== '[]' && ys.ctor !== '[]') {-            arr.push(A2(f, xs._0, ys._0));-            xs = xs._1;-            ys = ys._1;-        }-        return fromArray(arr);-    }--    function map3(f, xs, ys, zs) {-        var arr = [];-        while (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]') {-            arr.push(A3(f, xs._0, ys._0, zs._0));-            xs = xs._1;-            ys = ys._1;-            zs = zs._1;-        }-        return fromArray(arr);-    }--    function map4(f, ws, xs, ys, zs) {-        var arr = [];-        while (   ws.ctor !== '[]'-               && xs.ctor !== '[]'-               && ys.ctor !== '[]'-               && zs.ctor !== '[]')-        {-            arr.push(A4(f, ws._0, xs._0, ys._0, zs._0));-            ws = ws._1;-            xs = xs._1;-            ys = ys._1;-            zs = zs._1;-        }-        return fromArray(arr);-    }--    function map5(f, vs, ws, xs, ys, zs) {-        var arr = [];-        while (   vs.ctor !== '[]'-               && ws.ctor !== '[]'-               && xs.ctor !== '[]'-               && ys.ctor !== '[]'-               && zs.ctor !== '[]')-        {-            arr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));-            vs = vs._1;-            ws = ws._1;-            xs = xs._1;-            ys = ys._1;-            zs = zs._1;-        }-        return fromArray(arr);-    }--    function sort(xs) {-        return fromArray(toArray(xs).sort(Utils.cmp));-    }--    function sortBy(f, xs) {-        return fromArray(toArray(xs).sort(function(a,b){-            return Utils.cmp(f(a), f(b));-        }));-    }--    function sortWith(f, xs) {-        return fromArray(toArray(xs).sort(function(a,b){-            var ord = f(a)(b).ctor;-            return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;-        }));-    }--    function take(n, xs) {-        var arr = [];-        while (xs.ctor !== '[]' && n > 0) {-            arr.push(xs._0);-            xs = xs._1;-            --n;-        }-        return fromArray(arr);-    }--    function drop(n, xs) {-        while (xs.ctor !== '[]' && n > 0) {-            xs = xs._1;-            --n;-        }-        return xs;-    }--    function repeat(n, x) {-        var arr = [];-        var pattern = [x];-        while (n > 0) {-            if (n & 1) arr = arr.concat(pattern);-            n >>= 1, pattern = pattern.concat(pattern);-        }-        return fromArray(arr);-    }---    Elm.Native.List.values = {-        Nil:Nil,-        Cons:Cons,-        cons:F2(Cons),-        toArray:toArray,-        fromArray:fromArray,-        range:range,-        append: F2(append),--        head:head,-        tail:tail,--        map:F2(map),-        foldl:F3(foldl),-        foldr:F3(foldr),--        foldl1:F2(foldl1),-        foldr1:F2(foldr1),-        scanl:F3(scanl),-        scanl1:F2(scanl1),-        filter:F2(filter),-        length:length,-        member:F2(member),--        all:F2(all),-        any:F2(any),-        map2:F3(map2),-        map3:F4(map3),-        map4:F5(map4),-        map5:F6(map5),-        sort:sort,-        sortBy:F2(sortBy),-        sortWith:F2(sortWith),-        take:F2(take),-        drop:F2(drop),-        repeat:F2(repeat)-    };-    return elm.Native.List.values = Elm.Native.List.values;--};---// setup-Elm.Native = Elm.Native || {};-Elm.Native.Markdown = Elm.Native.Markdown || {};--// definition-Elm.Native.Markdown.make = function(localRuntime) {-    'use strict';--    // attempt to short-circuit-    if ('values' in Elm.Native.Markdown) {-        return Elm.Native.Markdown.values;-    }--    var Text = Elm.Text.make(localRuntime);--    /**-     * marked - a markdown parser-     * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)-     * https://github.com/chjj/marked-     */-    (function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g,"    ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[2]==="="?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"hr"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"blockquote_start"});cap=cap[0].replace(/^ *> ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\d+\.) +/,"");if(~item.indexOf("\n ")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp("^ {1,"+space+"}","gm"),""):item.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script"||cap[1]==="style",text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:"paragraph",text:cap[1].charAt(cap[1].length-1)==="\n"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"text",text:cap[0]});continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};inline._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;inline._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(this.smartypants(cap[0]));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"—").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"<pre><code>"+(escaped?code:escape(code,true))+"\n</code></pre>"}return'<pre><code class="'+this.options.langPrefix+escape(lang,true)+'">'+(escaped?code:escape(code,true))+"\n</code></pre>\n"};Renderer.prototype.blockquote=function(quote){return"<blockquote>\n"+quote+"</blockquote>\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"<h"+level+' id="'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\w]+/g,"-")+'">'+text+"</h"+level+">\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"</"+type+">\n"};Renderer.prototype.listitem=function(text){return"<li>"+text+"</li>\n"};Renderer.prototype.paragraph=function(text){return"<p>"+text+"</p>\n"};Renderer.prototype.table=function(header,body){return"<table>\n"+"<thead>\n"+header+"</thead>\n"+"<tbody>\n"+body+"</tbody>\n"+"</table>\n"};Renderer.prototype.tablerow=function(content){return"<tr>\n"+content+"</tr>\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"</"+type+">\n"};Renderer.prototype.strong=function(text){return"<strong>"+text+"</strong>"};Renderer.prototype.em=function(text){return"<em>"+text+"</em>"};Renderer.prototype.codespan=function(text){return"<code>"+text+"</code>"};Renderer.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"};Renderer.prototype.del=function(text){return"<del>"+text+"</del>"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0){return""}}var out='<a href="'+href+'"';if(title){out+=' title="'+title+'"'}out+=">"+text+"</a>";return out};Renderer.prototype.image=function(href,title,text){var out='<img src="'+href+'" alt="'+text+'"';if(title){out+=' title="'+title+'"'}out+=this.options.xhtml?"/>":">";return out};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell="";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case"blockquote_start":{var body="";while(this.next().type!=="blockquote_end"){body+=this.tok()}return this.renderer.blockquote(body)}case"list_start":{var body="",ordered=this.token.ordered;while(this.next().type!=="list_end"){body+=this.tok()}return this.renderer.list(body,ordered)}case"list_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.token.type==="text"?this.parseText():this.tok()}return this.renderer.listitem(body)}case"loose_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.tok()}return this.renderer.listitem(body)}case"html":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case"paragraph":{return this.renderer.paragraph(this.inline.output(this.token.text))}case"text":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt==="function"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!=="code"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+="\nPlease report this to https://github.com/chjj/marked.";if((opt||marked.defaults).silent){return"<p>An error occured:</p><pre>"+escape(e.message+"",true)+"</pre>"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}());--    marked.setOptions({-        highlight: function (code, lang) {-            if (typeof hljs !== 'undefined'-                && lang-                && hljs.listLanguages().indexOf(lang) >= 0) {-                return hljs.highlight(lang, code, true).value;-            }-            return code;-        }-    });--    function formatOptions(options) {-        var gfm = options.githubFlavored;-        if (gfm.ctor === 'Just') {-            return {-                gfm: true,-                tables: gfm.tables,-                breaks: gfm.breaks,-                sanitize: options.sanitize,-                smartypants: options.smartypants-            }-        }-        else {-            return {-                gfm: false,-                tables: false,-                breaks: false,-                sanitize: options.sanitize,-                smartypants: options.smartypants-            }-        }-    }--    function toHtmlWith(options, rawMarkdown) {-        var widget = {-            type: "Widget",--            init: function () {-                var html = marked(rawMarkdown, formatOptions(options));-                var div = document.createElement('div');-                div.innerHTML = html;-                return div;-            },--            update: function (previous, node) {-                var html = marked(rawMarkdown, formatOptions(options));-                node.innerHTML = html;-                return node;-            }-        };-        return widget;-    }--    function toElementWith(options, rawMarkdown) {-        return Text.markdown(marked(rawMarkdown, formatOptions(options)));-    }--    return Elm.Native.Markdown.values = {-        toHtmlWith: F2(toHtmlWith),-        toElementWith: F2(toElementWith)-    };-};-Elm.Native.Ports = {};-Elm.Native.Ports.make = function(localRuntime) {-    localRuntime.Native = localRuntime.Native || {};-    localRuntime.Native.Ports = localRuntime.Native.Ports || {};-    if (localRuntime.Native.Ports.values) {-        return localRuntime.Native.Ports.values;-    }--    var Signal;--    function incomingSignal(converter) {-        converter.isSignal = true;-        return converter;-    }--    function outgoingSignal(converter) {-        if (!Signal) {-            Signal = Elm.Signal.make(localRuntime);-        }-        return function(signal) {-            var subscribers = []-            function subscribe(handler) {-                subscribers.push(handler);-            }-            function unsubscribe(handler) {-                subscribers.pop(subscribers.indexOf(handler));-            }-            A2( Signal.map, function(value) {-                var val = converter(value);-                var len = subscribers.length;-                for (var i = 0; i < len; ++i) {-                    subscribers[i](val);-                }-            }, signal);-            return { subscribe:subscribe, unsubscribe:unsubscribe };-        }-    }--    function portIn(name, converter) {-        var jsValue = localRuntime.ports.incoming[name];-        if (jsValue === undefined) {-            throw new Error("Initialization Error: port '" + name +-                            "' was not given an input!");-        }-        localRuntime.ports.uses[name] += 1;-        try {-            var elmValue = converter(jsValue);-        } catch(e) {-            throw new Error("Initialization Error on port '" + name + "': \n" + e.message);-        }--        // just return a static value if it is not a signal-        if (!converter.isSignal) {-            return elmValue;-        }--        // create a signal if necessary-        if (!Signal) {-            Signal = Elm.Signal.make(localRuntime);-        }-        var signal = Signal.constant(elmValue);-        function send(jsValue) {-            try {-                var elmValue = converter(jsValue);-            } catch(e) {-                throw new Error("Error sending to port '" + name + "': \n" + e.message);-            }-            setTimeout(function() {-                localRuntime.notify(signal.id, elmValue);-            }, 0);-        }-        localRuntime.ports.outgoing[name] = { send:send };-        return signal;-    }--    function portOut(name, converter, value) {-        try {-            localRuntime.ports.outgoing[name] = converter(value);-        } catch(e) {-            throw new Error("Initialization Error on port '" + name + "': \n" + e.message);-        }-        return value;-    }--    return localRuntime.Native.Ports.values = {-        incomingSignal: incomingSignal,-        outgoingSignal: outgoingSignal,-        portOut: portOut,-        portIn: portIn-    };-};----if (!Elm.fullscreen) {--    (function() {-        'use strict';--        var Display = { FULLSCREEN: 0, COMPONENT: 1, NONE: 2 };--        Elm.fullscreen = function(module, ports) {-            var container = document.createElement('div');-            document.body.appendChild(container);-            return init(Display.FULLSCREEN, container, module, ports || {});-        };--        Elm.embed = function(module, container, ports) {-            var tag = container.tagName;-            if (tag !== 'DIV') {-                throw new Error('Elm.node must be given a DIV, not a ' + tag + '.');-            }-            return init(Display.COMPONENT, container, module, ports || {});-        };--        Elm.worker = function(module, ports) {-            return init(Display.NONE, {}, module, ports || {});-        };--        function init(display, container, module, ports, moduleToReplace) {-            // defining state needed for an instance of the Elm RTS-            var inputs = [];--            /* OFFSET-             * Elm's time traveling debugger lets you pause time. This means-             * "now" may be shifted a bit into the past. By wrapping Date.now()-             * we can manage this.-             */-            var timer = {-                now: function() {-                    return Date.now();-                }-            };--            var updateInProgress = false;-            function notify(id, v) {-                if (updateInProgress) {-                    throw new Error(-                        'The notify function has been called synchronously!\n' +-                        'This can lead to frames being dropped.\n' +-                        'Definitely report this to <https://github.com/elm-lang/Elm/issues>\n');-                }-                updateInProgress = true;-                var timestep = timer.now();-                for (var i = inputs.length; i--; ) {-                    inputs[i].recv(timestep, id, v);-                }-                updateInProgress = false;-            }-            function setTimeout(func, delay) {-                window.setTimeout(func, delay);-            }--            var listeners = [];-            function addListener(relevantInputs, domNode, eventName, func) {-                domNode.addEventListener(eventName, func);-                var listener = {-                    relevantInputs: relevantInputs,-                    domNode: domNode,-                    eventName: eventName,-                    func: func-                };-                listeners.push(listener);-            }--            var portUses = {}-            for (var key in ports) {-                portUses[key] = 0;-            }-            // create the actual RTS. Any impure modules will attach themselves to this-            // object. This permits many Elm programs to be embedded per document.-            var elm = {-                notify: notify,-                setTimeout: setTimeout,-                node: container,-                addListener: addListener,-                inputs: inputs,-                timer: timer,-                ports: { incoming:ports, outgoing:{}, uses:portUses },--                isFullscreen: function() { return display === Display.FULLSCREEN; },-                isEmbed: function() { return display === Display.COMPONENT; },-                isWorker: function() { return display === Display.NONE; }-            };--            function swap(newModule) {-                removeListeners(listeners);-                var div = document.createElement('div');-                var newElm = init(display, div, newModule, ports, elm);-                inputs = [];-                // elm.swap = newElm.swap;-                return newElm;-            }--            function dispose() {-                removeListeners(listeners);-                inputs = [];-            }--            var Module = {};-            try {-                Module = module.make(elm);-                checkPorts(elm);-            }-            catch (error) {-                if (typeof container.appendChild == 'undefined') {-                    console.log(error.message);-                } else {-                    container.appendChild(errorNode(error.message));-                }-                throw error;-            }-            inputs = filterDeadInputs(inputs);-            filterListeners(inputs, listeners);-            addReceivers(elm.ports.outgoing);-            if (display !== Display.NONE) {-                var graphicsNode = initGraphics(elm, Module);-            }-            if (typeof moduleToReplace !== 'undefined') {-                hotSwap(moduleToReplace, elm);--                // rerender scene if graphics are enabled.-                if (typeof graphicsNode !== 'undefined') {-                    graphicsNode.recv(0, true, 0);-                }-            }--            return {-                swap:swap,-                ports:elm.ports.outgoing,-                dispose:dispose-            };-        };--        function checkPorts(elm) {-            var portUses = elm.ports.uses;-            for (var key in portUses) {-                var uses = portUses[key]-                if (uses === 0) {-                    throw new Error(-                        "Initialization Error: provided port '" + key +-                        "' to a module that does not take it as in input.\n" +-                        "Remove '" + key + "' from the module initialization code.");-                } else if (uses > 1) {-                    throw new Error(-                        "Initialization Error: port '" + key +-                        "' has been declared multiple times in the Elm code.\n" +-                        "Remove declarations until there is exactly one.");-                }-            }-        }--        function errorNode(message) {-            var code = document.createElement('code');--            var lines = message.split('\n');-            code.appendChild(document.createTextNode(lines[0]));-            code.appendChild(document.createElement('br'));-            code.appendChild(document.createElement('br'));-            for (var i = 1; i < lines.length; ++i) {-                code.appendChild(document.createTextNode('\u00A0 \u00A0 ' + lines[i]));-                code.appendChild(document.createElement('br'));-            }-            code.appendChild(document.createElement('br'));-            code.appendChild(document.createTextNode("Open the developer console for more details."));-            return code;-        }---        //// FILTER SIGNALS ////--        // TODO: move this code into the signal module and create a function-        // Signal.initializeGraph that actually instantiates everything.--        function filterListeners(inputs, listeners) {-            loop:-            for (var i = listeners.length; i--; ) {-                var listener = listeners[i];-                for (var j = inputs.length; j--; ) {-                    if (listener.relevantInputs.indexOf(inputs[j].id) >= 0) {-                        continue loop;-                    }-                }-                listener.domNode.removeEventListener(listener.eventName, listener.func);-            }-        }--        function removeListeners(listeners) {-            for (var i = listeners.length; i--; ) {-                var listener = listeners[i];-                listener.domNode.removeEventListener(listener.eventName, listener.func);-            }-        }--        // add receivers for built-in ports if they are defined-        function addReceivers(ports) {-            if ('log' in ports) {-                ports.log.subscribe(function(v) { console.log(v) });-            }-            if ('stdout' in ports) {-                var process = process || {};-                var handler = process.stdout-                    ? function(v) { process.stdout.write(v); }-                    : function(v) { console.log(v); };-                ports.stdout.subscribe(handler);-            }-            if ('stderr' in ports) {-                var process = process || {};-                var handler = process.stderr-                    ? function(v) { process.stderr.write(v); }-                    : function(v) { console.log('Error:' + v); };-                ports.stderr.subscribe(handler);-            }-            if ('title' in ports) {-                if (typeof ports.title === 'string') {-                    document.title = ports.title;-                } else {-                    ports.title.subscribe(function(v) { document.title = v; });-                }-            }-            if ('redirect' in ports) {-                ports.redirect.subscribe(function(v) {-                    if (v.length > 0) window.location = v;-                });-            }-            if ('favicon' in ports) {-                if (typeof ports.favicon === 'string') {-                    changeFavicon(ports.favicon);-                } else {-                    ports.favicon.subscribe(changeFavicon);-                }-            }-            function changeFavicon(src) {-                var link = document.createElement('link');-                var oldLink = document.getElementById('elm-favicon');-                link.id = 'elm-favicon';-                link.rel = 'shortcut icon';-                link.href = src;-                if (oldLink) {-                    document.head.removeChild(oldLink);-                }-                document.head.appendChild(link);-            }-        }---        function filterDeadInputs(inputs) {-            var temp = [];-            for (var i = inputs.length; i--; ) {-                if (isAlive(inputs[i])) temp.push(inputs[i]);-            }-            return temp;-        }---        function isAlive(input) {-            if (!('defaultNumberOfKids' in input)) return true;-            var len = input.kids.length;-            if (len === 0) return false;-            if (len > input.defaultNumberOfKids) return true;-            var alive = false;-            for (var i = len; i--; ) {-                alive = alive || isAlive(input.kids[i]);-            }-            return alive;-        }---        ////  RENDERING  ////--        function initGraphics(elm, Module) {-            if (!('main' in Module)) {-                throw new Error("'main' is missing! What do I display?!");-            }--            var signalGraph = Module.main;--            // make sure the signal graph is actually a signal & extract the visual model-            var Signal = Elm.Signal.make(elm);-            if (!('recv' in signalGraph)) {-                signalGraph = Signal.constant(signalGraph);-            }-            var initialScene = signalGraph.value;--            // Figure out what the render functions should be-            var render;-            var update;-            if (initialScene.props) {-                var Element = Elm.Native.Graphics.Element.make(elm);-                render = Element.render;-                update = Element.updateAndReplace;-            } else {-                var VirtualDom = Elm.Native.VirtualDom.make(elm);-                render = VirtualDom.render;-                update = VirtualDom.updateAndReplace;-            }--            // Add the initialScene to the DOM-            var container = elm.node;-            var node = render(initialScene);-            while (container.firstChild) {-                container.removeChild(container.firstChild);-            }-            container.appendChild(node);--            var _requestAnimationFrame =-                typeof requestAnimationFrame !== 'undefined'-                    ? requestAnimationFrame-                    : function(cb) { setTimeout(cb, 1000/60); }-                    ;--            // domUpdate is called whenever the main Signal changes.-            //-            // domUpdate and drawCallback implement a small state machine in order-            // to schedule only 1 draw per animation frame. This enforces that-            // once draw has been called, it will not be called again until the-            // next frame.-            //-            // drawCallback is scheduled whenever-            // 1. The state transitions from PENDING_REQUEST to EXTRA_REQUEST, or-            // 2. The state transitions from NO_REQUEST to PENDING_REQUEST-            //-            // Invariants:-            // 1. In the NO_REQUEST state, there is never a scheduled drawCallback.-            // 2. In the PENDING_REQUEST and EXTRA_REQUEST states, there is always exactly 1-            //    scheduled drawCallback.-            var NO_REQUEST = 0;-            var PENDING_REQUEST = 1;-            var EXTRA_REQUEST = 2;-            var state = NO_REQUEST;-            var savedScene = initialScene;-            var scheduledScene = initialScene;--            function domUpdate(newScene) {-                scheduledScene = newScene;--                switch (state) {-                    case NO_REQUEST:-                        _requestAnimationFrame(drawCallback);-                        state = PENDING_REQUEST;-                        return;-                    case PENDING_REQUEST:-                        state = PENDING_REQUEST;-                        return;-                    case EXTRA_REQUEST:-                        state = PENDING_REQUEST;-                        return;-                }-            }--            function drawCallback() {-                switch (state) {-                    case NO_REQUEST:-                        // This state should not be possible. How can there be no-                        // request, yet somehow we are actively fulfilling a-                        // request?-                        throw new Error(-                            "Unexpected draw callback.\n" +-                            "Please report this to <https://github.com/elm-lang/core/issues>."-                        );--                    case PENDING_REQUEST:-                        // At this point, we do not *know* that another frame is-                        // needed, but we make an extra request to rAF just in-                        // case. It's possible to drop a frame if rAF is called-                        // too late, so we just do it preemptively.-                        _requestAnimationFrame(drawCallback);-                        state = EXTRA_REQUEST;--                        // There's also stuff we definitely need to draw.-                        draw();-                        return;--                    case EXTRA_REQUEST:-                        // Turns out the extra request was not needed, so we will-                        // stop calling rAF. No reason to call it all the time if-                        // no one needs it.-                        state = NO_REQUEST;-                        return;-                }-            }--            function draw() {-                update(elm.node.firstChild, savedScene, scheduledScene);-                if (elm.Native.Window) {-                    elm.Native.Window.values.resizeIfNeeded();-                }-                savedScene = scheduledScene;-            }--            var renderer = A2(Signal.map, domUpdate, signalGraph);--            // must check for resize after 'renderer' is created so-            // that changes show up.-            if (elm.Native.Window) {-                elm.Native.Window.values.resizeIfNeeded();-            }--            return renderer;-        }--        //// HOT SWAPPING ////--        // Returns boolean indicating if the swap was successful.-        // Requires that the two signal graphs have exactly the same-        // structure.-        function hotSwap(from, to) {-            function similar(nodeOld,nodeNew) {-                var idOkay = nodeOld.id === nodeNew.id;-                var lengthOkay = nodeOld.kids.length === nodeNew.kids.length;-                return idOkay && lengthOkay;-            }-            function swap(nodeOld,nodeNew) {-                nodeNew.value = nodeOld.value;-                return true;-            }-            var canSwap = depthFirstTraversals(similar, from.inputs, to.inputs);-            if (canSwap) {-                depthFirstTraversals(swap, from.inputs, to.inputs);-            }-            from.node.parentNode.replaceChild(to.node, from.node);--            return canSwap;-        }--        // Returns false if the node operation f ever fails.-        function depthFirstTraversals(f, queueOld, queueNew) {-            if (queueOld.length !== queueNew.length) return false;-            queueOld = queueOld.slice(0);-            queueNew = queueNew.slice(0);--            var seen = [];-            while (queueOld.length > 0 && queueNew.length > 0) {-                var nodeOld = queueOld.pop();-                var nodeNew = queueNew.pop();-                if (seen.indexOf(nodeOld.id) < 0) {-                    if (!f(nodeOld, nodeNew)) return false;-                    queueOld = queueOld.concat(nodeOld.kids);-                    queueNew = queueNew.concat(nodeNew.kids);-                    seen.push(nodeOld.id);-                }-            }-            return true;-        }-    }());--    function F2(fun) {-        function wrapper(a) { return function(b) { return fun(a,b) } }-        wrapper.arity = 2;-        wrapper.func = fun;-        return wrapper;-    }--    function F3(fun) {-        function wrapper(a) {-            return function(b) { return function(c) { return fun(a,b,c) }}-        }-        wrapper.arity = 3;-        wrapper.func = fun;-        return wrapper;-    }--    function F4(fun) {-        function wrapper(a) { return function(b) { return function(c) {-            return function(d) { return fun(a,b,c,d) }}}-        }-        wrapper.arity = 4;-        wrapper.func = fun;-        return wrapper;-    }--    function F5(fun) {-        function wrapper(a) { return function(b) { return function(c) {-            return function(d) { return function(e) { return fun(a,b,c,d,e) }}}}-        }-        wrapper.arity = 5;-        wrapper.func = fun;-        return wrapper;-    }--    function F6(fun) {-        function wrapper(a) { return function(b) { return function(c) {-            return function(d) { return function(e) { return function(f) {-            return fun(a,b,c,d,e,f) }}}}}-        }-        wrapper.arity = 6;-        wrapper.func = fun;-        return wrapper;-    }--    function F7(fun) {-        function wrapper(a) { return function(b) { return function(c) {-            return function(d) { return function(e) { return function(f) {-            return function(g) { return fun(a,b,c,d,e,f,g) }}}}}}-        }-        wrapper.arity = 7;-        wrapper.func = fun;-        return wrapper;-    }--    function F8(fun) {-        function wrapper(a) { return function(b) { return function(c) {-            return function(d) { return function(e) { return function(f) {-            return function(g) { return function(h) {-            return fun(a,b,c,d,e,f,g,h)}}}}}}}-        }-        wrapper.arity = 8;-        wrapper.func = fun;-        return wrapper;-    }--    function F9(fun) {-        function wrapper(a) { return function(b) { return function(c) {-            return function(d) { return function(e) { return function(f) {-            return function(g) { return function(h) { return function(i) {-            return fun(a,b,c,d,e,f,g,h,i) }}}}}}}}-        }-        wrapper.arity = 9;-        wrapper.func = fun;-        return wrapper;-    }--    function A2(fun,a,b) {-        return fun.arity === 2-            ? fun.func(a,b)-            : fun(a)(b);-    }-    function A3(fun,a,b,c) {-        return fun.arity === 3-            ? fun.func(a,b,c)-            : fun(a)(b)(c);-    }-    function A4(fun,a,b,c,d) {-        return fun.arity === 4-            ? fun.func(a,b,c,d)-            : fun(a)(b)(c)(d);-    }-    function A5(fun,a,b,c,d,e) {-        return fun.arity === 5-            ? fun.func(a,b,c,d,e)-            : fun(a)(b)(c)(d)(e);-    }-    function A6(fun,a,b,c,d,e,f) {-        return fun.arity === 6-            ? fun.func(a,b,c,d,e,f)-            : fun(a)(b)(c)(d)(e)(f);-    }-    function A7(fun,a,b,c,d,e,f,g) {-        return fun.arity === 7-            ? fun.func(a,b,c,d,e,f,g)-            : fun(a)(b)(c)(d)(e)(f)(g);-    }-    function A8(fun,a,b,c,d,e,f,g,h) {-        return fun.arity === 8-            ? fun.func(a,b,c,d,e,f,g,h)-            : fun(a)(b)(c)(d)(e)(f)(g)(h);-    }-    function A9(fun,a,b,c,d,e,f,g,h,i) {-        return fun.arity === 9-            ? fun.func(a,b,c,d,e,f,g,h,i)-            : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);-    }-}-Elm.Native.Show = {};-Elm.Native.Show.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.Show = elm.Native.Show || {};-    if (elm.Native.Show.values)-    {-        return elm.Native.Show.values;-    }--    var _Array;-    var Dict;-    var List;-    var Utils = Elm.Native.Utils.make(elm);--    var toString = function(v) {-        var type = typeof v;-        if (type === "function") {-            var name = v.func ? v.func.name : v.name;-            return '<function' + (name === '' ? '' : ': ') + name + '>';-        }-        else if (type === "boolean") {-            return v ? "True" : "False";-        }-        else if (type === "number") {-            return v + "";-        }-        else if ((v instanceof String) && v.isChar) {-            return "'" + addSlashes(v, true) + "'";-        }-        else if (type === "string") {-            return '"' + addSlashes(v, false) + '"';-        }-        else if (type === "object" && '_' in v && probablyPublic(v)) {-            var output = [];-            for (var k in v._) {-                for (var i = v._[k].length; i--; ) {-                    output.push(k + " = " + toString(v._[k][i]));-                }-            }-            for (var k in v) {-                if (k === '_') continue;-                output.push(k + " = " + toString(v[k]));-            }-            if (output.length === 0) {-                return "{}";-            }-            return "{ " + output.join(", ") + " }";-        }-        else if (type === "object" && 'ctor' in v) {-            if (v.ctor.substring(0,6) === "_Tuple") {-                var output = [];-                for (var k in v) {-                    if (k === 'ctor') continue;-                    output.push(toString(v[k]));-                }-                return "(" + output.join(",") + ")";-            }-            else if (v.ctor === "_Array") {-                if (!_Array) {-                    _Array = Elm.Array.make(elm);-                }-                var list = _Array.toList(v);-                return "Array.fromList " + toString(list);-            }-            else if (v.ctor === "::") {-                var output = '[' + toString(v._0);-                v = v._1;-                while (v.ctor === "::") {-                    output += "," + toString(v._0);-                    v = v._1;-                }-                return output + ']';-            }-            else if (v.ctor === "[]") {-                return "[]";-            }-            else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {-                if (!Dict) {-                    Dict = Elm.Dict.make(elm);-                }-                if (!List) {-                    List = Elm.List.make(elm);-                }-                var list = Dict.toList(v);-                var name = "Dict";-                if (list.ctor === "::" && list._0._1.ctor === "_Tuple0") {-                    name = "Set";-                    list = A2(List.map, function(x){return x._0}, list);-                }-                return name + ".fromList " + toString(list);-            }-            else {-                var output = "";-                for (var i in v) {-                    if (i === 'ctor') continue;-                    var str = toString(v[i]);-                    var parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0;-                    output += ' ' + (parenless ? str : '(' + str + ')');-                }-                return v.ctor + output;-            }-        }-        if (type === 'object' && 'recv' in v) {-            return '<signal>';-        }-        return "<internal structure>";-    };--    function addSlashes(str, isChar) {-        var s = str.replace(/\\/g, '\\\\')-                  .replace(/\n/g, '\\n')-                  .replace(/\t/g, '\\t')-                  .replace(/\r/g, '\\r')-                  .replace(/\v/g, '\\v')-                  .replace(/\0/g, '\\0');-        if (isChar) {-            return s.replace(/\'/g, "\\'")-        } else {-            return s.replace(/\"/g, '\\"');-        }-    }--    function probablyPublic(v) {-        var keys = Object.keys(v);-        var len = keys.length;-        if (len === 3-            && 'props' in v-            && 'element' in v)-        {-            return false;-        }-        else if (len === 5-            && 'horizontal' in v-            && 'vertical' in v-            && 'x' in v-            && 'y' in v)-        {-            return false;-        }-        else if (len === 7-            && 'theta' in v-            && 'scale' in v-            && 'x' in v-            && 'y' in v-            && 'alpha' in v-            && 'form' in v)-        {-            return false;-        }-        return true;-    }--    return elm.Native.Show.values = {-        toString: toString-    };-};---Elm.Native.Signal = {};-Elm.Native.Signal.make = function(localRuntime) {--  localRuntime.Native = localRuntime.Native || {};-  localRuntime.Native.Signal = localRuntime.Native.Signal || {};-  if (localRuntime.Native.Signal.values) {-      return localRuntime.Native.Signal.values;-  }--  var Utils = Elm.Native.Utils.make(localRuntime);--  function broadcastToKids(node, timestep, changed) {-    var kids = node.kids;-    for (var i = kids.length; i--; ) {-      kids[i].recv(timestep, changed, node.id);-    }-  }--  function Input(base) {-    this.id = Utils.guid();-    this.value = base;-    this.kids = [];-    this.defaultNumberOfKids = 0;-    this.recv = function(timestep, eid, v) {-      var changed = eid === this.id;-      if (changed) {-        this.value = v;-      }-      broadcastToKids(this, timestep, changed);-      return changed;-    };-    localRuntime.inputs.push(this);-  }--  function LiftN(update, args) {-    this.id = Utils.guid();-    this.value = update();-    this.kids = [];--    var n = args.length;-    var count = 0;-    var isChanged = false;--    this.recv = function(timestep, changed, parentID) {-      ++count;-      if (changed) { isChanged = true; }-      if (count == n) {-        if (isChanged) { this.value = update(); }-        broadcastToKids(this, timestep, isChanged);-        isChanged = false;-        count = 0;-      }-    };-    for (var i = n; i--; ) { args[i].kids.push(this); }-  }--  function map(func, a) {-    function update() { return func(a.value); }-    return new LiftN(update, [a]);-  }-  function map2(func, a, b) {-    function update() { return A2( func, a.value, b.value ); }-    return new LiftN(update, [a,b]);-  }-  function map3(func, a, b, c) {-    function update() { return A3( func, a.value, b.value, c.value ); }-    return new LiftN(update, [a,b,c]);-  }-  function map4(func, a, b, c, d) {-    function update() { return A4( func, a.value, b.value, c.value, d.value ); }-    return new LiftN(update, [a,b,c,d]);-  }-  function map5(func, a, b, c, d, e) {-    function update() { return A5( func, a.value, b.value, c.value, d.value, e.value ); }-    return new LiftN(update, [a,b,c,d,e]);-  }--  function Foldp(step, state, input) {-    this.id = Utils.guid();-    this.value = state;-    this.kids = [];--    this.recv = function(timestep, changed, parentID) {-      if (changed) {-          this.value = A2( step, input.value, this.value );-      }-      broadcastToKids(this, timestep, changed);-    };-    input.kids.push(this);-  }--  function foldp(step, state, input) {-      return new Foldp(step, state, input);-  }--  function DropIf(pred,base,input) {-    this.id = Utils.guid();-    this.value = pred(input.value) ? base : input.value;-    this.kids = [];-    this.recv = function(timestep, changed, parentID) {-      var chng = changed && !pred(input.value);-      if (chng) { this.value = input.value; }-      broadcastToKids(this, timestep, chng);-    };-    input.kids.push(this);-  }--  function DropRepeats(input) {-    this.id = Utils.guid();-    this.value = input.value;-    this.kids = [];-    this.recv = function(timestep, changed, parentID) {-      var chng = changed && !Utils.eq(this.value,input.value);-      if (chng) { this.value = input.value; }-      broadcastToKids(this, timestep, chng);-    };-    input.kids.push(this);-  }--  function timestamp(a) {-    function update() { return Utils.Tuple2(localRuntime.timer.now(), a.value); }-    return new LiftN(update, [a]);-  }--  function SampleOn(s1,s2) {-    this.id = Utils.guid();-    this.value = s2.value;-    this.kids = [];--    var count = 0;-    var isChanged = false;--    this.recv = function(timestep, changed, parentID) {-      if (parentID === s1.id) isChanged = changed;-      ++count;-      if (count == 2) {-        if (isChanged) { this.value = s2.value; }-        broadcastToKids(this, timestep, isChanged);-        count = 0;-        isChanged = false;-      }-    };-    s1.kids.push(this);-    s2.kids.push(this);-  }--  function sampleOn(s1,s2) { return new SampleOn(s1,s2); }--  function delay(t,s) {-      var delayed = new Input(s.value);-      var firstEvent = true;-      function update(v) {-        if (firstEvent) {-            firstEvent = false; return;-        }-        setTimeout(function() {-            localRuntime.notify(delayed.id, v);-        }, t);-      }-      function first(a,b) { return a; }-      return new SampleOn(delayed, map2(F2(first), delayed, map(update,s)));-  }--  function Merge(s1,s2) {-      this.id = Utils.guid();-      this.value = s1.value;-      this.kids = [];--      var next = null;-      var count = 0;-      var isChanged = false;--      this.recv = function(timestep, changed, parentID) {-        ++count;-        if (changed) {-            isChanged = true;-            if (parentID == s2.id && next === null) { next = s2.value; }-            if (parentID == s1.id) { next = s1.value; }-        }--        if (count == 2) {-            if (isChanged) { this.value = next; next = null; }-            broadcastToKids(this, timestep, isChanged);-            isChanged = false;-            count = 0;-        }-      };-      s1.kids.push(this);-      s2.kids.push(this);-  }--  function merge(s1,s2) {-      return new Merge(s1,s2);-  }---    // SIGNAL INPUTS--    function input(initialValue) {-        return new Input(initialValue);-    }--    function send(input, value) {-        return function() {-            localRuntime.notify(input.id, value);-        };-    }--    function subscribe(input) {-        return input;-    }---  return localRuntime.Native.Signal.values = {-    constant : function(v) { return new Input(v); },-    map  : F2(map ),-    map2 : F3(map2),-    map3 : F4(map3),-    map4 : F5(map4),-    map5 : F6(map5),-    foldp : F3(foldp),-    delay : F2(delay),-    merge : F2(merge),-    keepIf : F3(function(pred,base,sig) {-      return new DropIf(function(x) {return !pred(x);},base,sig); }),-    dropIf : F3(function(pred,base,sig) { return new DropIf(pred,base,sig); }),-    dropRepeats : function(s) { return new DropRepeats(s);},-    sampleOn : F2(sampleOn),-    timestamp : timestamp,-    input: input,-    send: F2(send),-    subscribe: subscribe-  };-};--Elm.Native.Slider = {};-Elm.Native.Slider.make = function(localRuntime) {--    localRuntime.Native = localRuntime.Native || {};-    localRuntime.Native.Slider = localRuntime.Native.Slider || {};-    if (localRuntime.Native.Slider.values) {-        return localRuntime.Native.Slider.values;-    }--    var Element = Elm.Graphics.Element.make(localRuntime);-    var NativeElement = Elm.Native.Graphics.Element.make(localRuntime);--    function renderSlider(model) {-        var node = NativeElement.createNode('input');-        node.type = 'range';--        node.min = model.styling.min;-        node.max = model.styling.max;-        node.step = model.styling.step;-        node.value = model.styling.value;--        if (!model.styling.horizontal) {-            node.orient = "vertical"; // FF-            node.style.webkitAppearance = "slider-vertical"; // webkit-            node.style.writingMode = "bt-lr"; // ie-        }--        if (model.styling.disabled) {-            node.disabled = true;-        }--        node.style.display = 'block';-        node.style.pointerEvents = 'auto';-        node.elm_handler = model.handler;-        node.addEventListener('input', notifySlider);-        node.addEventListener('change', notifySlider);-        function notifySlider() {-            node.elm_handler(node.value)();-        }-        return node;-    }--    function updateSlider(node, oldModel, newModel) {-        if (newModel.styling.disabled) {-            node.disabled = true;-        } else {-            node.disabled = false;-        }-        node.elm_handler = newModel.handler;-        node.min = newModel.styling.min;-        node.max = newModel.styling.max;-        node.step = newModel.styling.step;-        node.value = newModel.styling.value;--        return node;-    }--    function slider(handler, styling) {-        var width = styling.length;-        var height = 24;-        if (!styling.horizontal) {-            var temp = width;-            width = height;-            height = temp;-        }-        return A3(Element.newElement, width, height, {-            ctor: 'Custom',-            type: 'Slider',-            render: renderSlider,-            update: updateSlider,-            model: { handler:handler, styling:styling }-        });-    }--    return localRuntime.Native.Slider.values = {-        slider: F2(slider)-    };-}--Elm.Native.String = {};-Elm.Native.String.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.String = elm.Native.String || {};-    if (elm.Native.String.values) return elm.Native.String.values;-    if ('values' in Elm.Native.String) {-        return elm.Native.String.values = Elm.Native.String.values;-    }--    var Char = Elm.Char.make(elm);-    var List = Elm.Native.List.make(elm);-    var Maybe = Elm.Maybe.make(elm);-    var Result = Elm.Result.make(elm);-    var Utils = Elm.Native.Utils.make(elm);--    function isEmpty(str) {-        return str.length === 0;-    }-    function cons(chr,str) {-        return chr + str;-    }-    function uncons(str) {-        var hd;-        return (hd = str[0])-            ? Maybe.Just(Utils.Tuple2(Utils.chr(hd), str.slice(1)))-            : Maybe.Nothing;-    }-    function append(a,b) {-        return a + b;-    }-    function concat(strs) {-        return List.toArray(strs).join('');-    }-    function length(str) {-        return str.length;-    }-    function map(f,str) {-        var out = str.split('');-        for (var i = out.length; i--; ) {-            out[i] = f(Utils.chr(out[i]));-        }-        return out.join('');-    }-    function filter(pred,str) {-        return str.split('').map(Utils.chr).filter(pred).join('');-    }-    function reverse(str) {-        return str.split('').reverse().join('');-    }-    function foldl(f,b,str) {-        var len = str.length;-        for (var i = 0; i < len; ++i) {-            b = A2(f, Utils.chr(str[i]), b);-        }-        return b;-    }-    function foldr(f,b,str) {-        for (var i = str.length; i--; ) {-            b = A2(f, Utils.chr(str[i]), b);-        }-        return b;-    }--    function split(sep, str) {-        return List.fromArray(str.split(sep));-    }-    function join(sep, strs) {-        return List.toArray(strs).join(sep);-    }-    function repeat(n, str) {-        var result = '';-        while (n > 0) {-            if (n & 1) result += str;-            n >>= 1, str += str;-        }-        return result;-    }--    function slice(start, end, str) {-        return str.slice(start,end);-    }-    function left(n, str) {-        return n < 1 ? "" : str.slice(0,n);-    }-    function right(n, str) {-        return n < 1 ? "" : str.slice(-n);-    }-    function dropLeft(n, str) {-        return n < 1 ? str : str.slice(n);-    }-    function dropRight(n, str) {-        return n < 1 ? str : str.slice(0,-n);-    }--    function pad(n,chr,str) {-        var half = (n - str.length) / 2;-        return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);-    }-    function padRight(n,chr,str) {-        return str + repeat(n - str.length, chr);-    }-    function padLeft(n,chr,str) {-        return repeat(n - str.length, chr) + str;-    }--    function trim(str) {-        return str.trim();-    }-    function trimLeft(str) {-        return str.trimLeft();-    }-    function trimRight(str) {-        return str.trimRight();-    }--    function words(str) {-        return List.fromArray(str.trim().split(/\s+/g));-    }-    function lines(str) {-        return List.fromArray(str.split(/\r\n|\r|\n/g));-    }--    function toUpper(str) {-        return str.toUpperCase();-    }-    function toLower(str) {-        return str.toLowerCase();-    }--    function any(pred, str) {-        for (var i = str.length; i--; ) {-            if (pred(Utils.chr(str[i]))) return true;-        }-        return false;-    }-    function all(pred, str) {-        for (var i = str.length; i--; ) {-            if (!pred(Utils.chr(str[i]))) return false;-        }-        return true;-    }--    function contains(sub, str) {-        return str.indexOf(sub) > -1;-    }-    function startsWith(sub, str) {-        return str.indexOf(sub) === 0;-    }-    function endsWith(sub, str) {-        return str.length >= sub.length &&-               str.lastIndexOf(sub) === str.length - sub.length;-    }-    function indexes(sub, str) {-        var subLen = sub.length;-        var i = 0;-        var is = [];-        while ((i = str.indexOf(sub, i)) > -1) {-            is.push(i);-            i = i + subLen;-        }-        return List.fromArray(is);-    }--    function toInt(s) {-        var len = s.length;-        if (len === 0) {-            return Result.Err("could not convert string '" + s + "' to an Int" );-        }-        var start = 0;-        if (s[0] == '-') {-            if (len === 1) {-                return Result.Err("could not convert string '" + s + "' to an Int" );-            }-            start = 1;-        }-        for (var i = start; i < len; ++i) {-            if (!Char.isDigit(s[i])) {-                return Result.Err("could not convert string '" + s + "' to an Int" );-            }-        }-        return Result.Ok(parseInt(s, 10));-    }--    function toFloat(s) {-        var len = s.length;-        if (len === 0) {-            return Result.Err("could not convert string '" + s + "' to a Float" );-        }-        var start = 0;-        if (s[0] == '-') {-            if (len === 1) {-                return Result.Err("could not convert string '" + s + "' to a Float" );-            }-            start = 1;-        }-        var dotCount = 0;-        for (var i = start; i < len; ++i) {-            if (Char.isDigit(s[i])) {-                continue;-            }-            if (s[i] === '.') {-                dotCount += 1;-                if (dotCount <= 1) {-                    continue;-                }-            }-            return Result.Err("could not convert string '" + s + "' to a Float" );-        }-        return Result.Ok(parseFloat(s));-    }--    function toList(str) {-        return List.fromArray(str.split('').map(Utils.chr));-    }-    function fromList(chars) {-        return List.toArray(chars).join('');-    }--    return Elm.Native.String.values = {-        isEmpty: isEmpty,-        cons: F2(cons),-        uncons: uncons,-        append: F2(append),-        concat: concat,-        length: length,-        map: F2(map),-        filter: F2(filter),-        reverse: reverse,-        foldl: F3(foldl),-        foldr: F3(foldr),--        split: F2(split),-        join: F2(join),-        repeat: F2(repeat),--        slice: F3(slice),-        left: F2(left),-        right: F2(right),-        dropLeft: F2(dropLeft),-        dropRight: F2(dropRight),--        pad: F3(pad),-        padLeft: F3(padLeft),-        padRight: F3(padRight),--        trim: trim,-        trimLeft: trimLeft,-        trimRight: trimRight,--        words: words,-        lines: lines,--        toUpper: toUpper,-        toLower: toLower,--        any: F2(any),-        all: F2(all),--        contains: F2(contains),-        startsWith: F2(startsWith),-        endsWith: F2(endsWith),-        indexes: F2(indexes),--        toInt: toInt,-        toFloat: toFloat,-        toList: toList,-        fromList: fromList-    };-};--Elm.Native.Text = {};-Elm.Native.Text.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.Text = elm.Native.Text || {};-    if (elm.Native.Text.values) return elm.Native.Text.values;--    var toCss = Elm.Native.Color.make(elm).toCss;-    var Element = Elm.Graphics.Element.make(elm);-    var NativeElement = Elm.Native.Graphics.Element.make(elm);-    var List = Elm.Native.List.make(elm);-    var Utils = Elm.Native.Utils.make(elm);--    function makeSpaces(s) {-        if (s.length == 0) { return s; }-        var arr = s.split('');-        if (arr[0] == ' ') { arr[0] = "&nbsp;" }      -        for (var i = arr.length; --i; ) {-            if (arr[i][0] == ' ' && arr[i-1] == ' ') {-                arr[i-1] = arr[i-1] + arr[i];-                arr[i] = '';-            }-        }-        for (var i = arr.length; i--; ) {-            if (arr[i].length > 1 && arr[i][0] == ' ') {-                var spaces = arr[i].split('');-                for (var j = spaces.length - 2; j >= 0; j -= 2) {-                    spaces[j] = '&nbsp;';-                }-                arr[i] = spaces.join('');-            }-        }-        arr = arr.join('');-        if (arr[arr.length-1] === " ") {-            return arr.slice(0,-1) + '&nbsp;';-        }-        return arr;-    }--    function properEscape(str) {-        if (str.length == 0) return str;-        str = str //.replace(/&/g,  "&#38;")-            .replace(/"/g,  '&#34;')-            .replace(/'/g,  "&#39;")-            .replace(/</g,  "&#60;")-            .replace(/>/g,  "&#62;")-            .replace(/\n/g, "<br/>");-        var arr = str.split('<br/>');-        for (var i = arr.length; i--; ) {-            arr[i] = makeSpaces(arr[i]);-        }-        return arr.join('<br/>');-    }--    function fromString(str) {-        return Utils.txt(properEscape(str));-    }--    function append(xs, ys) {-        return Utils.txt(Utils.makeText(xs) + Utils.makeText(ys));-    }--    // conversions from Elm values to CSS-    function toTypefaces(list) {-        var typefaces = List.toArray(list);-        for (var i = typefaces.length; i--; ) {-            var typeface = typefaces[i];-            if (typeface.indexOf(' ') > -1) {-                typefaces[i] = "'" + typeface + "'";-            }-        }-        return typefaces.join(',');-    }-    function toLine(line) {-        var ctor = line.ctor;-        return ctor === 'Under' ? 'underline' :-               ctor === 'Over'  ? 'overline'  : 'line-through';-    }--    // setting styles of Text-    function style(style, text) {-        var newText = '<span style="color:' + toCss(style.color) + ';'-        if (style.typeface.ctor !== '[]') {-            newText += 'font-family:' + toTypefaces(style.typeface) + ';'-        }-        if (style.height.ctor !== "Nothing") {-            newText += 'font-size:' + style.height._0 + 'px;';-        }-        if (style.bold) {-            newText += 'font-weight:bold;';-        }-        if (style.italic) {-            newText += 'font-style:italic;';-        }-        if (style.line.ctor !== 'Nothing') {-            newText += 'text-decoration:' + toLine(style.line._0) + ';';-        }-        newText += '">' + Utils.makeText(text) + '</span>'-        return Utils.txt(newText);-    }-    function height(px, text) {-        return { style: 'font-size:' + px + 'px;', text:text }-    }-    function typeface(names, text) {-        return { style: 'font-family:' + toTypefaces(names) + ';', text:text }-    }-    function monospace(text) {-        return { style: 'font-family:monospace;', text:text }-    }-    function italic(text) {-        return { style: 'font-style:italic;', text:text }-    }-    function bold(text) {-        return { style: 'font-weight:bold;', text:text }-    }-    function link(href, text) {-        return { href: fromString(href), text:text };-    }-    function line(line, text) {-        return { style: 'text-decoration:' + toLine(line) + ';', text:text };-    }--    function color(color, text) {-        return { style: 'color:' + toCss(color) + ';', text:text };-    }--    function block(align) {-        return function(text) {-            var raw = {-                ctor :'RawHtml',-                html : Utils.makeText(text),-                align: align-            };-            var pos = A2(NativeElement.htmlHeight, 0, raw);-            return A3(Element.newElement, pos._0, pos._1, raw);-        }-    }--    function markdown(text) {-        var raw = {-            ctor:'RawHtml',-            html: text,-            align: null-        };-        var pos = A2(NativeElement.htmlHeight, 0, raw);-        return A3(Element.newElement, pos._0, pos._1, raw);-    }--    return elm.Native.Text.values = {-        fromString: fromString,-        append: F2(append),--        height : F2(height),-        italic : italic,-        bold : bold,-        line : F2(line),-        monospace : monospace,-        typeface : F2(typeface),-        color : F2(color),-        link : F2(link),-        style : F2(style),--        leftAligned  : block('left'),-        rightAligned : block('right'),-        centered     : block('center'),-        justified    : block('justify'),-        markdown     : markdown,--        toTypefaces:toTypefaces,-        toLine:toLine-    };-};--Elm.Native.Transform2D = {};-Elm.Native.Transform2D.make = function(elm) {-- elm.Native = elm.Native || {};- elm.Native.Transform2D = elm.Native.Transform2D || {};- if (elm.Native.Transform2D.values) return elm.Native.Transform2D.values;-- var A;- if (typeof Float32Array === 'undefined') {-     A = function(arr) {-         this.length = arr.length;-         this[0] = arr[0];-         this[1] = arr[1];-         this[2] = arr[2];-         this[3] = arr[3];-         this[4] = arr[4];-         this[5] = arr[5];-     };- } else {-     A = Float32Array;- }-- // layout of matrix in an array is- //- //   | m11 m12 dx |- //   | m21 m22 dy |- //   |  0   0   1 |- //- //  new A([ m11, m12, dx, m21, m22, dy ])-- var identity = new A([1,0,0,0,1,0]);- function matrix(m11, m12, m21, m22, dx, dy) {-     return new A([m11, m12, dx, m21, m22, dy]);- }- function rotation(t) {-     var c = Math.cos(t);-     var s = Math.sin(t);-     return new A([c, -s, 0, s, c, 0]);- }- function rotate(t,m) {-     var c = Math.cos(t);-     var s = Math.sin(t);-     var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];-     return new A([m11*c + m12*s, -m11*s + m12*c, m[2],-                   m21*c + m22*s, -m21*s + m22*c, m[5]]);- }- /*- function move(xy,m) {-     var x = xy._0;-     var y = xy._1;-     var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];-     return new A([m11, m12, m11*x + m12*y + m[2],-                   m21, m22, m21*x + m22*y + m[5]]);- }- function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }- function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }- function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }- function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }- function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }-- function transform(m11, m21, m12, m22, mdx, mdy, n) {-     var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];-     return new A([m11*n11 + m12*n21,-                   m11*n12 + m12*n22,-                   m11*ndx + m12*ndy + mdx,-                   m21*n11 + m22*n21,-                   m21*n12 + m22*n22,-                   m21*ndx + m22*ndy + mdy]);- }- */- function multiply(m, n) {-     var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];-     var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];-     return new A([m11*n11 + m12*n21,-                   m11*n12 + m12*n22,-                   m11*ndx + m12*ndy + mdx,-                   m21*n11 + m22*n21,-                   m21*n12 + m22*n22,-                   m21*ndx + m22*ndy + mdy]);- }-- return elm.Native.Transform2D.values = {-     identity:identity,-     matrix:F6(matrix),-     rotation:rotation,-     multiply:F2(multiply)-     /*-     transform:F7(transform),-     rotate:F2(rotate),-     move:F2(move),-     scale:F2(scale),-     scaleX:F2(scaleX),-     scaleY:F2(scaleY),-     reflectX:reflectX,-     reflectY:reflectY-     */- };--};--Elm.Native = Elm.Native || {};-Elm.Native.Utils = {};-Elm.Native.Utils.make = function(localRuntime) {--    localRuntime.Native = localRuntime.Native || {};-    localRuntime.Native.Utils = localRuntime.Native.Utils || {};-    if (localRuntime.Native.Utils.values) {-        return localRuntime.Native.Utils.values;-    }--    function eq(l,r) {-        var stack = [{'x': l, 'y': r}]-        while (stack.length > 0) {-            var front = stack.pop();-            var x = front.x;-            var y = front.y;-            if (x === y) continue;-            if (typeof x === "object") {-                var c = 0;-                for (var i in x) {-                    ++c;-                    if (i in y) {-                        if (i !== 'ctor') {-                            stack.push({ 'x': x[i], 'y': y[i] });-                        }-                    } else {-                        return false;-                    }-                }-                if ('ctor' in x) {-                    stack.push({'x': x.ctor, 'y': y.ctor});-                }-                if (c !== Object.keys(y).length) {-                    return false;-                };-            } else if (typeof x === 'function') {-                throw new Error('Equality error: general function equality is ' +-                                'undecidable, and therefore, unsupported');-            } else {-                return false;-            }-        }-        return true;-    }--    // code in Generate/JavaScript.hs depends on the particular-    // integer values assigned to LT, EQ, and GT-    var LT = -1, EQ = 0, GT = 1, ord = ['LT','EQ','GT'];-    function compare(x,y) { return { ctor: ord[cmp(x,y)+1] } }-    function cmp(x,y) {-        var ord;-        if (typeof x !== 'object'){-            return x === y ? EQ : x < y ? LT : GT;-        }-        else if (x.isChar){-            var a = x.toString();-            var b = y.toString();-            return a === b ? EQ : a < b ? LT : GT;-        }-        else if (x.ctor === "::" || x.ctor === "[]") {-            while (true) {-                if (x.ctor === "[]" && y.ctor === "[]") return EQ;-                if (x.ctor !== y.ctor) return x.ctor === '[]' ? LT : GT;-                ord = cmp(x._0, y._0);-                if (ord !== EQ) return ord;-                x = x._1;-                y = y._1;-            }-        }-        else if (x.ctor.slice(0,6) === '_Tuple') {-            var n = x.ctor.slice(6) - 0;-            var err = 'cannot compare tuples with more than 6 elements.';-            if (n === 0) return EQ;-            if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;-            if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;-            if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;-            if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;-            if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;-            if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;-            if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }-            return EQ;-        }-        else {-            throw new Error('Comparison error: comparison is only defined on ints, ' +-                            'floats, times, chars, strings, lists of comparable values, ' +-                            'and tuples of comparable values.');-        }-    }---    var Tuple0 = { ctor: "_Tuple0" };-    function Tuple2(x,y) {-        return {-            ctor: "_Tuple2",-            _0: x,-            _1: y-        };-    }--    function chr(c) {-        var x = new String(c);-        x.isChar = true;-        return x;-    }--    function txt(str) {-        var t = new String(str);-        t.text = true;-        return t;-    }--    function makeText(text) {-        var style = '';-        var href = '';-        while (true) {-            if (text.style) {-                style += text.style;-                text = text.text;-                continue;-            }-            if (text.href) {-                href = text.href;-                text = text.text;-                continue;-            }-            if (href) {-                text = '<a href="' + href + '">' + text + '</a>';-            }-            if (style) {-                text = '<span style="' + style + '">' + text + '</span>';-            }-            return text;-        }-    }--    var count = 0;-    function guid(_) {-        return count++-    }--    function copy(oldRecord) {-        var newRecord = {};-        for (var key in oldRecord) {-            var value = key === '_'-                ? copy(oldRecord._)-                : oldRecord[key]-                ;-            newRecord[key] = value;-        }-        return newRecord;-    }--    function remove(key, oldRecord) {-        var record = copy(oldRecord);-        if (key in record._) {-            record[key] = record._[key][0];-            record._[key] = record._[key].slice(1);-            if (record._[key].length === 0) {-                delete record._[key];-            }-        } else {-            delete record[key];-        }-        return record;-    }--    function replace(keyValuePairs, oldRecord) {-        var record = copy(oldRecord);-        for (var i = keyValuePairs.length; i--; ) {-            var pair = keyValuePairs[i];-            record[pair[0]] = pair[1];-        }-        return record;-    }--    function insert(key, value, oldRecord) {-        var newRecord = copy(oldRecord);-        if (key in newRecord) {-            var values = newRecord._[key];-            var copiedValues = values ? values.slice(0) : [];-            newRecord._[key] = [newRecord[key]].concat(copiedValues);-        }-        newRecord[key] = value;-        return newRecord;-    }--    function getXY(e) {-        var posx = 0;-        var posy = 0;-        if (e.pageX || e.pageY) {-            posx = e.pageX;-            posy = e.pageY;-        } else if (e.clientX || e.clientY) {-            posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;-            posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;-        }--        if (localRuntime.isEmbed()) {-            var rect = localRuntime.node.getBoundingClientRect();-            var relx = rect.left + document.body.scrollLeft + document.documentElement.scrollLeft;-            var rely = rect.top + document.body.scrollTop + document.documentElement.scrollTop;-            // TODO: figure out if there is a way to avoid rounding here-            posx = posx - Math.round(relx) - localRuntime.node.clientLeft;-            posy = posy - Math.round(rely) - localRuntime.node.clientTop;-        }-        return Tuple2(posx, posy);-    }---    //// LIST STUFF ////--    var Nil = { ctor:'[]' };--    function Cons(hd,tl) {-        return {-            ctor: "::",-            _0: hd,-            _1: tl-        };-    }--    function append(xs,ys) {-        // append Text-        if (xs.text || ys.text) {-            return txt(makeText(xs) + makeText(ys));-        }--        // append Strings-        if (typeof xs === "string") {-            return xs + ys;-        }--        // append Lists-        if (xs.ctor === '[]') {-            return ys;-        }-        var root = Cons(xs._0, Nil);-        var curr = root;-        xs = xs._1;-        while (xs.ctor !== '[]') {-            curr._1 = Cons(xs._0, Nil);-            xs = xs._1;-            curr = curr._1;-        }-        curr._1 = ys;-        return root;-    }--    //// RUNTIME ERRORS ////--    function indent(lines) {-        return '\n' + lines.join('\n');-    }--    function badCase(moduleName, span) { -        var msg = indent([-            'Non-exhaustive pattern match in case-expression.',-            'Make sure your patterns cover every case!'-        ]);-        throw new Error('Runtime error in module ' + moduleName + ' (' + span + ')' + msg);-    }--    function badIf(moduleName, span) { -        var msg = indent([-            'Non-exhaustive pattern match in multi-way-if expression.',-            'It is best to use \'otherwise\' as the last branch of multi-way-if.'-        ]);-        throw new Error('Runtime error in module ' + moduleName + ' (' + span + ')' + msg);-    }---    function badPort(expected, received) { -        var msg = indent([-            'Expecting ' + expected + ' but was given ',-            JSON.stringify(received)-        ]);-        throw new Error('Runtime error when sending values through a port.' + msg);-    }---    return localRuntime.Native.Utils.values = {-        eq:eq,-        cmp:cmp,-        compare:F2(compare),-        Tuple0:Tuple0,-        Tuple2:Tuple2,-        chr:chr,-        txt:txt,-        makeText:makeText,-        copy: copy,-        remove: remove,-        replace: replace,-        insert: insert,-        guid: guid,-        getXY: getXY,--        Nil: Nil,-        Cons: Cons,-        append: F2(append),--        badCase: badCase,-        badIf: badIf,-        badPort: badPort-    };-};--(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){-module.exports = createHash--function createHash(elem) {-    var attributes = elem.attributes-    var hash = {}--    if (attributes === null || attributes === undefined) {-        return hash-    }--    for (var i = 0; i < attributes.length; i++) {-        var attr = attributes[i]--        if (attr.name.substr(0,5) !== "data-") {-            continue-        }--        hash[attr.name.substr(5)] = attr.value-    }--    return hash-}--},{}],2:[function(require,module,exports){-var createStore = require("weakmap-shim/create-store")-var Individual = require("individual")--var createHash = require("./create-hash.js")--var hashStore = Individual("__DATA_SET_WEAKMAP@3", createStore())--module.exports = DataSet--function DataSet(elem) {-    var store = hashStore(elem)--    if (!store.hash) {-        store.hash = createHash(elem)-    }--    return store.hash-}--},{"./create-hash.js":1,"individual":3,"weakmap-shim/create-store":4}],3:[function(require,module,exports){-(function (global){-var root = typeof window !== 'undefined' ?-    window : typeof global !== 'undefined' ?-    global : {};--module.exports = Individual--function Individual(key, value) {-    if (root[key]) {-        return root[key]-    }--    Object.defineProperty(root, key, {-        value: value-        , configurable: true-    })--    return value-}--}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})-},{}],4:[function(require,module,exports){-var hiddenStore = require('./hidden-store.js');--module.exports = createStore;--function createStore() {-    var key = {};--    return function (obj) {-        if (typeof obj !== 'object' || obj === null) {-            throw new Error('Weakmap-shim: Key must be object')-        }--        var store = obj.valueOf(key);-        return store && store.identity === key ?-            store : hiddenStore(obj, key);-    };-}--},{"./hidden-store.js":5}],5:[function(require,module,exports){-module.exports = hiddenStore;--function hiddenStore(obj, key) {-    var store = { identity: key };-    var valueOf = obj.valueOf;--    Object.defineProperty(obj, "valueOf", {-        value: function (value) {-            return value !== key ?-                valueOf.apply(this, arguments) : store;-        },-        writable: true-    });--    return store;-}--},{}],6:[function(require,module,exports){-var DataSet = require("data-set")--module.exports = addEvent--function addEvent(target, type, handler) {-    var ds = DataSet(target)-    var events = ds[type]--    if (!events) {-        ds[type] = handler-    } else if (Array.isArray(events)) {-        if (events.indexOf(handler) === -1) {-            events.push(handler)-        }-    } else if (events !== handler) {-        ds[type] = [events, handler]-    }-}--},{"data-set":2}],7:[function(require,module,exports){-var globalDocument = require("global/document")-var DataSet = require("data-set")-var createStore = require("weakmap-shim/create-store")--var addEvent = require("./add-event.js")-var removeEvent = require("./remove-event.js")-var ProxyEvent = require("./proxy-event.js")--var HANDLER_STORE = createStore()--module.exports = DOMDelegator--function DOMDelegator(document) {-    document = document || globalDocument--    this.target = document.documentElement-    this.events = {}-    this.rawEventListeners = {}-    this.globalListeners = {}-}--DOMDelegator.prototype.addEventListener = addEvent-DOMDelegator.prototype.removeEventListener = removeEvent--DOMDelegator.prototype.allocateHandle =-    function allocateHandle(func) {-        var handle = new Handle()--        HANDLER_STORE(handle).func = func;--        return handle-    }--DOMDelegator.prototype.transformHandle =-    function transformHandle(handle, lambda) {-        var func = HANDLER_STORE(handle).func--        return this.allocateHandle(function (ev) {-            var result = lambda(ev)-            if (result) {-                func(result)-            }-        })-    }--DOMDelegator.prototype.addGlobalEventListener =-    function addGlobalEventListener(eventName, fn) {-        var listeners = this.globalListeners[eventName] || [];-        if (listeners.indexOf(fn) === -1) {-            listeners.push(fn)-        }--        this.globalListeners[eventName] = listeners;-    }--DOMDelegator.prototype.removeGlobalEventListener =-    function removeGlobalEventListener(eventName, fn) {-        var listeners = this.globalListeners[eventName] || [];--        var index = listeners.indexOf(fn)-        if (index !== -1) {-            listeners.splice(index, 1)-        }-    }--DOMDelegator.prototype.listenTo = function listenTo(eventName) {-    if (this.events[eventName]) {-        return-    }--    this.events[eventName] = true--    var listener = this.rawEventListeners[eventName]-    if (!listener) {-        listener = this.rawEventListeners[eventName] =-            createHandler(eventName, this)-    }--    this.target.addEventListener(eventName, listener, true)-}--DOMDelegator.prototype.unlistenTo = function unlistenTo(eventName) {-    if (!this.events[eventName]) {-        return-    }--    this.events[eventName] = false-    var listener = this.rawEventListeners[eventName]--    if (!listener) {-        throw new Error("dom-delegator#unlistenTo: cannot " +-            "unlisten to " + eventName)-    }--    this.target.removeEventListener(eventName, listener, true)-}--function createHandler(eventName, delegator) {-    var globalListeners = delegator.globalListeners;-    var delegatorTarget = delegator.target;--    return handler--    function handler(ev) {-        var globalHandlers = globalListeners[eventName] || []--        if (globalHandlers.length > 0) {-            var globalEvent = new ProxyEvent(ev);-            globalEvent.currentTarget = delegatorTarget;-            callListeners(globalHandlers, globalEvent)-        }--        findAndInvokeListeners(ev.target, ev, eventName)-    }-}--function findAndInvokeListeners(elem, ev, eventName) {-    var listener = getListener(elem, eventName)--    if (listener && listener.handlers.length > 0) {-        var listenerEvent = new ProxyEvent(ev);-        listenerEvent.currentTarget = listener.currentTarget-        callListeners(listener.handlers, listenerEvent)--        if (listenerEvent._bubbles) {-            var nextTarget = listener.currentTarget.parentNode-            findAndInvokeListeners(nextTarget, ev, eventName)-        }-    }-}--function getListener(target, type) {-    // terminate recursion if parent is `null`-    if (target === null) {-        return null-    }--    var ds = DataSet(target)-    // fetch list of handler fns for this event-    var handler = ds[type]-    var allHandler = ds.event--    if (!handler && !allHandler) {-        return getListener(target.parentNode, type)-    }--    var handlers = [].concat(handler || [], allHandler || [])-    return new Listener(target, handlers)-}--function callListeners(handlers, ev) {-    handlers.forEach(function (handler) {-        if (typeof handler === "function") {-            handler(ev)-        } else if (typeof handler.handleEvent === "function") {-            handler.handleEvent(ev)-        } else if (handler.type === "dom-delegator-handle") {-            HANDLER_STORE(handler).func(ev)-        } else {-            throw new Error("dom-delegator: unknown handler " +-                "found: " + JSON.stringify(handlers));-        }-    })-}--function Listener(target, handlers) {-    this.currentTarget = target-    this.handlers = handlers-}--function Handle() {-    this.type = "dom-delegator-handle"-}--},{"./add-event.js":6,"./proxy-event.js":15,"./remove-event.js":16,"data-set":2,"global/document":10,"weakmap-shim/create-store":13}],8:[function(require,module,exports){-var Individual = require("individual")-var cuid = require("cuid")-var globalDocument = require("global/document")--var DOMDelegator = require("./dom-delegator.js")--var delegatorCache = Individual("__DOM_DELEGATOR_CACHE@9", {-    delegators: {}-})-var commonEvents = [-    "blur", "change", "click",  "contextmenu", "dblclick",-    "error","focus", "focusin", "focusout", "input", "keydown",-    "keypress", "keyup", "load", "mousedown", "mouseup",-    "resize", "scroll", "select", "submit", "touchcancel",-    "touchend", "touchstart", "unload"-]--/*  Delegator is a thin wrapper around a singleton `DOMDelegator`-        instance.--    Only one DOMDelegator should exist because we do not want-        duplicate event listeners bound to the DOM.--    `Delegator` will also `listenTo()` all events unless -        every caller opts out of it-*/-module.exports = Delegator--function Delegator(opts) {-    opts = opts || {}-    var document = opts.document || globalDocument--    var cacheKey = document["__DOM_DELEGATOR_CACHE_TOKEN@9"]--    if (!cacheKey) {-        cacheKey =-            document["__DOM_DELEGATOR_CACHE_TOKEN@9"] = cuid()-    }--    var delegator = delegatorCache.delegators[cacheKey]--    if (!delegator) {-        delegator = delegatorCache.delegators[cacheKey] =-            new DOMDelegator(document)-    }--    if (opts.defaultEvents !== false) {-        for (var i = 0; i < commonEvents.length; i++) {-            delegator.listenTo(commonEvents[i])-        }-    }--    return delegator-}----},{"./dom-delegator.js":7,"cuid":9,"global/document":10,"individual":11}],9:[function(require,module,exports){-/**- * cuid.js- * Collision-resistant UID generator for browsers and node.- * Sequential for fast db lookups and recency sorting.- * Safe for element IDs and server-side lookups.- *- * Extracted from CLCTR- * - * Copyright (c) Eric Elliott 2012- * MIT License- */--/*global window, navigator, document, require, process, module */-(function (app) {-  'use strict';-  var namespace = 'cuid',-    c = 0,-    blockSize = 4,-    base = 36,-    discreteValues = Math.pow(base, blockSize),--    pad = function pad(num, size) {-      var s = "000000000" + num;-      return s.substr(s.length-size);-    },--    randomBlock = function randomBlock() {-      return pad((Math.random() *-            discreteValues << 0)-            .toString(base), blockSize);-    },--    safeCounter = function () {-      c = (c < discreteValues) ? c : 0;-      c++; // this is not subliminal-      return c - 1;-    },--    api = function cuid() {-      // Starting with a lowercase letter makes-      // it HTML element ID friendly.-      var letter = 'c', // hard-coded allows for sequential access--        // timestamp-        // warning: this exposes the exact date and time-        // that the uid was created.-        timestamp = (new Date().getTime()).toString(base),--        // Prevent same-machine collisions.-        counter,--        // A few chars to generate distinct ids for different-        // clients (so different computers are far less-        // likely to generate the same id)-        fingerprint = api.fingerprint(),--        // Grab some more chars from Math.random()-        random = randomBlock() + randomBlock();--        counter = pad(safeCounter().toString(base), blockSize);--      return  (letter + timestamp + counter + fingerprint + random);-    };--  api.slug = function slug() {-    var date = new Date().getTime().toString(36),-      counter,-      print = api.fingerprint().slice(0,1) +-        api.fingerprint().slice(-1),-      random = randomBlock().slice(-2);--      counter = safeCounter().toString(36).slice(-4);--    return date.slice(-2) + -      counter + print + random;-  };--  api.globalCount = function globalCount() {-    // We want to cache the results of this-    var cache = (function calc() {-        var i,-          count = 0;--        for (i in window) {-          count++;-        }--        return count;-      }());--    api.globalCount = function () { return cache; };-    return cache;-  };--  api.fingerprint = function browserPrint() {-    return pad((navigator.mimeTypes.length +-      navigator.userAgent.length).toString(36) +-      api.globalCount().toString(36), 4);-  };--  // don't change anything from here down.-  if (app.register) {-    app.register(namespace, api);-  } else if (typeof module !== 'undefined') {-    module.exports = api;-  } else {-    app[namespace] = api;-  }--}(this.applitude || this));--},{}],10:[function(require,module,exports){-(function (global){-var topLevel = typeof global !== 'undefined' ? global :-    typeof window !== 'undefined' ? window : {}-var minDoc = require('min-document');--if (typeof document !== 'undefined') {-    module.exports = document;-} else {-    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];--    if (!doccy) {-        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;-    }--    module.exports = doccy;-}--}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})-},{"min-document":40}],11:[function(require,module,exports){-module.exports=require(3)-},{}],12:[function(require,module,exports){-if (typeof Object.create === 'function') {-  // implementation from standard node.js 'util' module-  module.exports = function inherits(ctor, superCtor) {-    ctor.super_ = superCtor-    ctor.prototype = Object.create(superCtor.prototype, {-      constructor: {-        value: ctor,-        enumerable: false,-        writable: true,-        configurable: true-      }-    });-  };-} else {-  // old school shim for old browsers-  module.exports = function inherits(ctor, superCtor) {-    ctor.super_ = superCtor-    var TempCtor = function () {}-    TempCtor.prototype = superCtor.prototype-    ctor.prototype = new TempCtor()-    ctor.prototype.constructor = ctor-  }-}--},{}],13:[function(require,module,exports){-module.exports=require(4)-},{"./hidden-store.js":14}],14:[function(require,module,exports){-module.exports=require(5)-},{}],15:[function(require,module,exports){-var inherits = require("inherits")--var ALL_PROPS = [-    "altKey", "bubbles", "cancelable", "ctrlKey",-    "eventPhase", "metaKey", "relatedTarget", "shiftKey",-    "target", "timeStamp", "type", "view", "which"-]-var KEY_PROPS = ["char", "charCode", "key", "keyCode"]-var MOUSE_PROPS = [-    "button", "buttons", "clientX", "clientY", "layerX",-    "layerY", "offsetX", "offsetY", "pageX", "pageY",-    "screenX", "screenY", "toElement"-]--var rkeyEvent = /^key|input/-var rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/--module.exports = ProxyEvent--function ProxyEvent(ev) {-    if (!(this instanceof ProxyEvent)) {-        return new ProxyEvent(ev)-    }--    if (rkeyEvent.test(ev.type)) {-        return new KeyEvent(ev)-    } else if (rmouseEvent.test(ev.type)) {-        return new MouseEvent(ev)-    }--    for (var i = 0; i < ALL_PROPS.length; i++) {-        var propKey = ALL_PROPS[i]-        this[propKey] = ev[propKey]-    }--    this._rawEvent = ev-    this._bubbles = false;-}--ProxyEvent.prototype.preventDefault = function () {-    this._rawEvent.preventDefault()-}--ProxyEvent.prototype.startPropagation = function () {-    this._bubbles = true;-}--function MouseEvent(ev) {-    for (var i = 0; i < ALL_PROPS.length; i++) {-        var propKey = ALL_PROPS[i]-        this[propKey] = ev[propKey]-    }--    for (var j = 0; j < MOUSE_PROPS.length; j++) {-        var mousePropKey = MOUSE_PROPS[j]-        this[mousePropKey] = ev[mousePropKey]-    }--    this._rawEvent = ev-}--inherits(MouseEvent, ProxyEvent)--function KeyEvent(ev) {-    for (var i = 0; i < ALL_PROPS.length; i++) {-        var propKey = ALL_PROPS[i]-        this[propKey] = ev[propKey]-    }--    for (var j = 0; j < KEY_PROPS.length; j++) {-        var keyPropKey = KEY_PROPS[j]-        this[keyPropKey] = ev[keyPropKey]-    }--    this._rawEvent = ev-}--inherits(KeyEvent, ProxyEvent)--},{"inherits":12}],16:[function(require,module,exports){-var DataSet = require("data-set")--module.exports = removeEvent--function removeEvent(target, type, handler) {-    var ds = DataSet(target)-    var events = ds[type]--    if (!events) {-        return-    } else if (Array.isArray(events)) {-        var index = events.indexOf(handler)-        if (index !== -1) {-            events.splice(index, 1)-        }-    } else if (events === handler) {-        ds[type] = null-    }-}--},{"data-set":2}],17:[function(require,module,exports){-var isObject = require("is-object")-var isHook = require("vtree/is-vhook")--module.exports = applyProperties--function applyProperties(node, props, previous) {-    for (var propName in props) {-        var propValue = props[propName]--        if (propValue === undefined) {-            removeProperty(node, props, previous, propName);-        } else if (isHook(propValue)) {-            propValue.hook(node,-                propName,-                previous ? previous[propName] : undefined)-        } else {-            if (isObject(propValue)) {-                patchObject(node, props, previous, propName, propValue);-            } else if (propValue !== undefined) {-                node[propName] = propValue-            }-        }-    }-}--function removeProperty(node, props, previous, propName) {-    if (previous) {-        var previousValue = previous[propName]--        if (!isHook(previousValue)) {-            if (propName === "attributes") {-                for (var attrName in previousValue) {-                    node.removeAttribute(attrName)-                }-            } else if (propName === "style") {-                for (var i in previousValue) {-                    node.style[i] = ""-                }-            } else if (typeof previousValue === "string") {-                node[propName] = ""-            } else {-                node[propName] = null-            }-        }-    }-}--function patchObject(node, props, previous, propName, propValue) {-    var previousValue = previous ? previous[propName] : undefined--    // Set attributes-    if (propName === "attributes") {-        for (var attrName in propValue) {-            var attrValue = propValue[attrName]--            if (attrValue === undefined) {-                node.removeAttribute(attrName)-            } else {-                node.setAttribute(attrName, attrValue)-            }-        }--        return-    }--    if(previousValue && isObject(previousValue) &&-        getPrototype(previousValue) !== getPrototype(propValue)) {-        node[propName] = propValue-        return-    }--    if (!isObject(node[propName])) {-        node[propName] = {}-    }--    var replacer = propName === "style" ? "" : undefined--    for (var k in propValue) {-        var value = propValue[k]-        node[propName][k] = (value === undefined) ? replacer : value-    }-}--function getPrototype(value) {-    if (Object.getPrototypeOf) {-        return Object.getPrototypeOf(value)-    } else if (value.__proto__) {-        return value.__proto__-    } else if (value.constructor) {-        return value.constructor.prototype-    }-}--},{"is-object":21,"vtree/is-vhook":29}],18:[function(require,module,exports){-var document = require("global/document")--var applyProperties = require("./apply-properties")--var isVNode = require("vtree/is-vnode")-var isVText = require("vtree/is-vtext")-var isWidget = require("vtree/is-widget")-var handleThunk = require("vtree/handle-thunk")--module.exports = createElement--function createElement(vnode, opts) {-    var doc = opts ? opts.document || document : document-    var warn = opts ? opts.warn : null--    vnode = handleThunk(vnode).a--    if (isWidget(vnode)) {-        return vnode.init()-    } else if (isVText(vnode)) {-        return doc.createTextNode(vnode.text)-    } else if (!isVNode(vnode)) {-        if (warn) {-            warn("Item is not a valid virtual dom node", vnode)-        }-        return null-    }--    var node = (vnode.namespace === null) ?-        doc.createElement(vnode.tagName) :-        doc.createElementNS(vnode.namespace, vnode.tagName)--    var props = vnode.properties-    applyProperties(node, props)--    var children = vnode.children--    for (var i = 0; i < children.length; i++) {-        var childNode = createElement(children[i], opts)-        if (childNode) {-            node.appendChild(childNode)-        }-    }--    return node-}--},{"./apply-properties":17,"global/document":20,"vtree/handle-thunk":27,"vtree/is-vnode":30,"vtree/is-vtext":31,"vtree/is-widget":32}],19:[function(require,module,exports){-// Maps a virtual DOM tree onto a real DOM tree in an efficient manner.-// We don't want to read all of the DOM nodes in the tree so we use-// the in-order tree indexing to eliminate recursion down certain branches.-// We only recurse into a DOM node if we know that it contains a child of-// interest.--var noChild = {}--module.exports = domIndex--function domIndex(rootNode, tree, indices, nodes) {-    if (!indices || indices.length === 0) {-        return {}-    } else {-        indices.sort(ascending)-        return recurse(rootNode, tree, indices, nodes, 0)-    }-}--function recurse(rootNode, tree, indices, nodes, rootIndex) {-    nodes = nodes || {}---    if (rootNode) {-        if (indexInRange(indices, rootIndex, rootIndex)) {-            nodes[rootIndex] = rootNode-        }--        var vChildren = tree.children--        if (vChildren) {--            var childNodes = rootNode.childNodes--            for (var i = 0; i < tree.children.length; i++) {-                rootIndex += 1--                var vChild = vChildren[i] || noChild-                var nextIndex = rootIndex + (vChild.count || 0)--                // skip recursion down the tree if there are no nodes down here-                if (indexInRange(indices, rootIndex, nextIndex)) {-                    recurse(childNodes[i], vChild, indices, nodes, rootIndex)-                }--                rootIndex = nextIndex-            }-        }-    }--    return nodes-}--// Binary search for an index in the interval [left, right]-function indexInRange(indices, left, right) {-    if (indices.length === 0) {-        return false-    }--    var minIndex = 0-    var maxIndex = indices.length - 1-    var currentIndex-    var currentItem--    while (minIndex <= maxIndex) {-        currentIndex = ((maxIndex + minIndex) / 2) >> 0-        currentItem = indices[currentIndex]--        if (minIndex === maxIndex) {-            return currentItem >= left && currentItem <= right-        } else if (currentItem < left) {-            minIndex = currentIndex + 1-        } else  if (currentItem > right) {-            maxIndex = currentIndex - 1-        } else {-            return true-        }-    }--    return false;-}--function ascending(a, b) {-    return a > b ? 1 : -1-}--},{}],20:[function(require,module,exports){-module.exports=require(10)-},{"min-document":40}],21:[function(require,module,exports){-module.exports = isObject--function isObject(x) {-    return typeof x === "object" && x !== null-}--},{}],22:[function(require,module,exports){-var nativeIsArray = Array.isArray-var toString = Object.prototype.toString--module.exports = nativeIsArray || isArray--function isArray(obj) {-    return toString.call(obj) === "[object Array]"-}--},{}],23:[function(require,module,exports){-var applyProperties = require("./apply-properties")--var isWidget = require("vtree/is-widget")-var VPatch = require("vtree/vpatch")--var render = require("./create-element")-var updateWidget = require("./update-widget")--module.exports = applyPatch--function applyPatch(vpatch, domNode, renderOptions) {-    var type = vpatch.type-    var vNode = vpatch.vNode-    var patch = vpatch.patch--    switch (type) {-        case VPatch.REMOVE:-            return removeNode(domNode, vNode)-        case VPatch.INSERT:-            return insertNode(domNode, patch, renderOptions)-        case VPatch.VTEXT:-            return stringPatch(domNode, vNode, patch, renderOptions)-        case VPatch.WIDGET:-            return widgetPatch(domNode, vNode, patch, renderOptions)-        case VPatch.VNODE:-            return vNodePatch(domNode, vNode, patch, renderOptions)-        case VPatch.ORDER:-            reorderChildren(domNode, patch)-            return domNode-        case VPatch.PROPS:-            applyProperties(domNode, patch, vNode.properties)-            return domNode-        case VPatch.THUNK:-            return replaceRoot(domNode,-                renderOptions.patch(domNode, patch, renderOptions))-        default:-            return domNode-    }-}--function removeNode(domNode, vNode) {-    var parentNode = domNode.parentNode--    if (parentNode) {-        parentNode.removeChild(domNode)-    }--    destroyWidget(domNode, vNode);--    return null-}--function insertNode(parentNode, vNode, renderOptions) {-    var newNode = render(vNode, renderOptions)--    if (parentNode) {-        parentNode.appendChild(newNode)-    }--    return parentNode-}--function stringPatch(domNode, leftVNode, vText, renderOptions) {-    var newNode--    if (domNode.nodeType === 3) {-        domNode.replaceData(0, domNode.length, vText.text)-        newNode = domNode-    } else {-        var parentNode = domNode.parentNode-        newNode = render(vText, renderOptions)--        if (parentNode) {-            parentNode.replaceChild(newNode, domNode)-        }-    }--    destroyWidget(domNode, leftVNode)--    return newNode-}--function widgetPatch(domNode, leftVNode, widget, renderOptions) {-    if (updateWidget(leftVNode, widget)) {-        return widget.update(leftVNode, domNode) || domNode-    }--    var parentNode = domNode.parentNode-    var newWidget = render(widget, renderOptions)--    if (parentNode) {-        parentNode.replaceChild(newWidget, domNode)-    }--    destroyWidget(domNode, leftVNode)--    return newWidget-}--function vNodePatch(domNode, leftVNode, vNode, renderOptions) {-    var parentNode = domNode.parentNode-    var newNode = render(vNode, renderOptions)--    if (parentNode) {-        parentNode.replaceChild(newNode, domNode)-    }--    destroyWidget(domNode, leftVNode)--    return newNode-}--function destroyWidget(domNode, w) {-    if (typeof w.destroy === "function" && isWidget(w)) {-        w.destroy(domNode)-    }-}--function reorderChildren(domNode, bIndex) {-    var children = []-    var childNodes = domNode.childNodes-    var len = childNodes.length-    var i-    var reverseIndex = bIndex.reverse--    for (i = 0; i < len; i++) {-        children.push(domNode.childNodes[i])-    }--    var insertOffset = 0-    var move-    var node-    var insertNode-    for (i = 0; i < len; i++) {-        move = bIndex[i]-        if (move !== undefined && move !== i) {-            // the element currently at this index will be moved later so increase the insert offset-            if (reverseIndex[i] > i) {-                insertOffset++-            }--            node = children[move]-            insertNode = childNodes[i + insertOffset] || null-            if (node !== insertNode) {-                domNode.insertBefore(node, insertNode)-            }--            // the moved element came from the front of the array so reduce the insert offset-            if (move < i) {-                insertOffset---            }-        }--        // element at this index is scheduled to be removed so increase insert offset-        if (i in bIndex.removes) {-            insertOffset++-        }-    }-}--function replaceRoot(oldRoot, newRoot) {-    if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {-        console.log(oldRoot)-        oldRoot.parentNode.replaceChild(newRoot, oldRoot)-    }--    return newRoot;-}--},{"./apply-properties":17,"./create-element":18,"./update-widget":25,"vtree/is-widget":32,"vtree/vpatch":37}],24:[function(require,module,exports){-var document = require("global/document")-var isArray = require("x-is-array")--var domIndex = require("./dom-index")-var patchOp = require("./patch-op")-module.exports = patch--function patch(rootNode, patches) {-    return patchRecursive(rootNode, patches)-}--function patchRecursive(rootNode, patches, renderOptions) {-    var indices = patchIndices(patches)--    if (indices.length === 0) {-        return rootNode-    }--    var index = domIndex(rootNode, patches.a, indices)-    var ownerDocument = rootNode.ownerDocument--    if (!renderOptions) {-        renderOptions = { patch: patchRecursive }-        if (ownerDocument !== document) {-            renderOptions.document = ownerDocument-        }-    }--    for (var i = 0; i < indices.length; i++) {-        var nodeIndex = indices[i]-        rootNode = applyPatch(rootNode,-            index[nodeIndex],-            patches[nodeIndex],-            renderOptions)-    }--    return rootNode-}--function applyPatch(rootNode, domNode, patchList, renderOptions) {-    if (!domNode) {-        return rootNode-    }--    var newNode--    if (isArray(patchList)) {-        for (var i = 0; i < patchList.length; i++) {-            newNode = patchOp(patchList[i], domNode, renderOptions)--            if (domNode === rootNode) {-                rootNode = newNode-            }-        }-    } else {-        newNode = patchOp(patchList, domNode, renderOptions)--        if (domNode === rootNode) {-            rootNode = newNode-        }-    }--    return rootNode-}--function patchIndices(patches) {-    var indices = []--    for (var key in patches) {-        if (key !== "a") {-            indices.push(Number(key))-        }-    }--    return indices-}--},{"./dom-index":19,"./patch-op":23,"global/document":20,"x-is-array":22}],25:[function(require,module,exports){-var isWidget = require("vtree/is-widget")--module.exports = updateWidget--function updateWidget(a, b) {-    if (isWidget(a) && isWidget(b)) {-        if ("name" in a && "name" in b) {-            return a.id === b.id-        } else {-            return a.init === b.init-        }-    }--    return false-}--},{"vtree/is-widget":32}],26:[function(require,module,exports){-var isArray = require("x-is-array")-var isObject = require("is-object")--var VPatch = require("./vpatch")-var isVNode = require("./is-vnode")-var isVText = require("./is-vtext")-var isWidget = require("./is-widget")-var isThunk = require("./is-thunk")-var handleThunk = require("./handle-thunk")--module.exports = diff--function diff(a, b) {-    var patch = { a: a }-    walk(a, b, patch, 0)-    return patch-}--function walk(a, b, patch, index) {-    if (a === b) {-        if (isThunk(a) || isThunk(b)) {-            thunks(a, b, patch, index)-        } else {-            hooks(b, patch, index)-        }-        return-    }--    var apply = patch[index]--    if (b == null) {-        apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b))-        destroyWidgets(a, patch, index)-    } else if (isThunk(a) || isThunk(b)) {-        thunks(a, b, patch, index)-    } else if (isVNode(b)) {-        if (isVNode(a)) {-            if (a.tagName === b.tagName &&-                a.namespace === b.namespace &&-                a.key === b.key) {-                var propsPatch = diffProps(a.properties, b.properties, b.hooks)-                if (propsPatch) {-                    apply = appendPatch(apply,-                        new VPatch(VPatch.PROPS, a, propsPatch))-                }-                apply = diffChildren(a, b, patch, apply, index)-            } else {-                apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))-                destroyWidgets(a, patch, index)-            }-        } else {-            apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))-            destroyWidgets(a, patch, index)-        }-    } else if (isVText(b)) {-        if (!isVText(a)) {-            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))-            destroyWidgets(a, patch, index)-        } else if (a.text !== b.text) {-            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))-        }-    } else if (isWidget(b)) {-        apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b))--        if (!isWidget(a)) {-            destroyWidgets(a, patch, index)-        }-    }--    if (apply) {-        patch[index] = apply-    }-}--function diffProps(a, b, hooks) {-    var diff--    for (var aKey in a) {-        if (!(aKey in b)) {-            diff = diff || {}-            diff[aKey] = undefined-        }--        var aValue = a[aKey]-        var bValue = b[aKey]--        if (hooks && aKey in hooks) {-            diff = diff || {}-            diff[aKey] = bValue-        } else {-            if (isObject(aValue) && isObject(bValue)) {-                if (getPrototype(bValue) !== getPrototype(aValue)) {-                    diff = diff || {}-                    diff[aKey] = bValue-                } else {-                    var objectDiff = diffProps(aValue, bValue)-                    if (objectDiff) {-                        diff = diff || {}-                        diff[aKey] = objectDiff-                    }-                }-            } else if (aValue !== bValue) {-                diff = diff || {}-                diff[aKey] = bValue-            }-        }-    }--    for (var bKey in b) {-        if (!(bKey in a)) {-            diff = diff || {}-            diff[bKey] = b[bKey]-        }-    }--    return diff-}--function getPrototype(value) {-    if (Object.getPrototypeOf) {-        return Object.getPrototypeOf(value)-    } else if (value.__proto__) {-        return value.__proto__-    } else if (value.constructor) {-        return value.constructor.prototype-    }-}--function diffChildren(a, b, patch, apply, index) {-    var aChildren = a.children-    var bChildren = reorder(aChildren, b.children)--    var aLen = aChildren.length-    var bLen = bChildren.length-    var len = aLen > bLen ? aLen : bLen--    for (var i = 0; i < len; i++) {-        var leftNode = aChildren[i]-        var rightNode = bChildren[i]-        index += 1--        if (!leftNode) {-            if (rightNode) {-                // Excess nodes in b need to be added-                apply = appendPatch(apply,-                    new VPatch(VPatch.INSERT, null, rightNode))-            }-        } else if (!rightNode) {-            if (leftNode) {-                // Excess nodes in a need to be removed-                patch[index] = new VPatch(VPatch.REMOVE, leftNode, null)-                destroyWidgets(leftNode, patch, index)-            }-        } else {-            walk(leftNode, rightNode, patch, index)-        }--        if (isVNode(leftNode) && leftNode.count) {-            index += leftNode.count-        }-    }--    if (bChildren.moves) {-        // Reorder nodes last-        apply = appendPatch(apply, new VPatch(VPatch.ORDER, a, bChildren.moves))-    }--    return apply-}--// Patch records for all destroyed widgets must be added because we need-// a DOM node reference for the destroy function-function destroyWidgets(vNode, patch, index) {-    if (isWidget(vNode)) {-        if (typeof vNode.destroy === "function") {-            patch[index] = new VPatch(VPatch.REMOVE, vNode, null)-        }-    } else if (isVNode(vNode) && vNode.hasWidgets) {-        var children = vNode.children-        var len = children.length-        for (var i = 0; i < len; i++) {-            var child = children[i]-            index += 1--            destroyWidgets(child, patch, index)--            if (isVNode(child) && child.count) {-                index += child.count-            }-        }-    }-}--// Create a sub-patch for thunks-function thunks(a, b, patch, index) {-    var nodes = handleThunk(a, b);-    var thunkPatch = diff(nodes.a, nodes.b)-    if (hasPatches(thunkPatch)) {-        patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch)-    }-}--function hasPatches(patch) {-    for (var index in patch) {-        if (index !== "a") {-            return true;-        }-    }--    return false;-}--// Execute hooks when two nodes are identical-function hooks(vNode, patch, index) {-    if (isVNode(vNode)) {-        if (vNode.hooks) {-            patch[index] = new VPatch(VPatch.PROPS, vNode.hooks, vNode.hooks)-        }--        if (vNode.descendantHooks) {-            var children = vNode.children-            var len = children.length-            for (var i = 0; i < len; i++) {-                var child = children[i]-                index += 1--                hooks(child, patch, index)--                if (isVNode(child) && child.count) {-                    index += child.count-                }-            }-        }-    }-}--// List diff, naive left to right reordering-function reorder(aChildren, bChildren) {--    var bKeys = keyIndex(bChildren)--    if (!bKeys) {-        return bChildren-    }--    var aKeys = keyIndex(aChildren)--    if (!aKeys) {-        return bChildren-    }--    var bMatch = {}, aMatch = {}--    for (var key in bKeys) {-        bMatch[bKeys[key]] = aKeys[key]-    }--    for (var key in aKeys) {-        aMatch[aKeys[key]] = bKeys[key]-    }--    var aLen = aChildren.length-    var bLen = bChildren.length-    var len = aLen > bLen ? aLen : bLen-    var shuffle = []-    var freeIndex = 0-    var i = 0-    var moveIndex = 0-    var moves = {}-    var removes = moves.removes = {}-    var reverse = moves.reverse = {}-    var hasMoves = false--    while (freeIndex < len) {-        var move = aMatch[i]-        if (move !== undefined) {-            shuffle[i] = bChildren[move]-            if (move !== moveIndex) {-                moves[move] = moveIndex-                reverse[moveIndex] = move-                hasMoves = true-            }-            moveIndex++-        } else if (i in aMatch) {-            shuffle[i] = undefined-            removes[i] = moveIndex++-            hasMoves = true-        } else {-            while (bMatch[freeIndex] !== undefined) {-                freeIndex++-            }--            if (freeIndex < len) {-                var freeChild = bChildren[freeIndex]-                if (freeChild) {-                    shuffle[i] = freeChild-                    if (freeIndex !== moveIndex) {-                        hasMoves = true-                        moves[freeIndex] = moveIndex-                        reverse[moveIndex] = freeIndex-                    }-                    moveIndex++-                }-                freeIndex++-            }-        }-        i++-    }--    if (hasMoves) {-        shuffle.moves = moves-    }--    return shuffle-}--function keyIndex(children) {-    var i, keys--    for (i = 0; i < children.length; i++) {-        var child = children[i]--        if (child.key !== undefined) {-            keys = keys || {}-            keys[child.key] = i-        }-    }--    return keys-}--function appendPatch(apply, patch) {-    if (apply) {-        if (isArray(apply)) {-            apply.push(patch)-        } else {-            apply = [apply, patch]-        }--        return apply-    } else {-        return patch-    }-}--},{"./handle-thunk":27,"./is-thunk":28,"./is-vnode":30,"./is-vtext":31,"./is-widget":32,"./vpatch":37,"is-object":33,"x-is-array":34}],27:[function(require,module,exports){-var isVNode = require("./is-vnode")-var isVText = require("./is-vtext")-var isWidget = require("./is-widget")-var isThunk = require("./is-thunk")--module.exports = handleThunk--function handleThunk(a, b) {-    var renderedA = a-    var renderedB = b--    if (isThunk(b)) {-        renderedB = renderThunk(b, a)-    }--    if (isThunk(a)) {-        renderedA = renderThunk(a, null)-    }--    return {-        a: renderedA,-        b: renderedB-    }-}--function renderThunk(thunk, previous) {-    var renderedThunk = thunk.vnode--    if (!renderedThunk) {-        renderedThunk = thunk.vnode = thunk.render(previous)-    }--    if (!(isVNode(renderedThunk) ||-            isVText(renderedThunk) ||-            isWidget(renderedThunk))) {-        throw new Error("thunk did not return a valid node");-    }--    return renderedThunk-}--},{"./is-thunk":28,"./is-vnode":30,"./is-vtext":31,"./is-widget":32}],28:[function(require,module,exports){-module.exports = isThunk
-
-function isThunk(t) {
-    return t && t.type === "Thunk"
-}
--},{}],29:[function(require,module,exports){-module.exports = isHook--function isHook(hook) {-    return hook && typeof hook.hook === "function" &&-        !hook.hasOwnProperty("hook")-}--},{}],30:[function(require,module,exports){-var version = require("./version")--module.exports = isVirtualNode--function isVirtualNode(x) {-    return x && x.type === "VirtualNode" && x.version === version-}--},{"./version":35}],31:[function(require,module,exports){-var version = require("./version")--module.exports = isVirtualText--function isVirtualText(x) {-    return x && x.type === "VirtualText" && x.version === version-}--},{"./version":35}],32:[function(require,module,exports){-module.exports = isWidget--function isWidget(w) {-    return w && w.type === "Widget"-}--},{}],33:[function(require,module,exports){-module.exports=require(21)-},{}],34:[function(require,module,exports){-module.exports=require(22)-},{}],35:[function(require,module,exports){-module.exports = "1"--},{}],36:[function(require,module,exports){-var version = require("./version")-var isVNode = require("./is-vnode")-var isWidget = require("./is-widget")-var isVHook = require("./is-vhook")--module.exports = VirtualNode--var noProperties = {}-var noChildren = []--function VirtualNode(tagName, properties, children, key, namespace) {-    this.tagName = tagName-    this.properties = properties || noProperties-    this.children = children || noChildren-    this.key = key != null ? String(key) : undefined-    this.namespace = (typeof namespace === "string") ? namespace : null--    var count = (children && children.length) || 0-    var descendants = 0-    var hasWidgets = false-    var descendantHooks = false-    var hooks--    for (var propName in properties) {-        if (properties.hasOwnProperty(propName)) {-            var property = properties[propName]-            if (isVHook(property)) {-                if (!hooks) {-                    hooks = {}-                }--                hooks[propName] = property-            }-        }-    }--    for (var i = 0; i < count; i++) {-        var child = children[i]-        if (isVNode(child)) {-            descendants += child.count || 0--            if (!hasWidgets && child.hasWidgets) {-                hasWidgets = true-            }--            if (!descendantHooks && (child.hooks || child.descendantHooks)) {-                descendantHooks = true-            }-        } else if (!hasWidgets && isWidget(child)) {-            if (typeof child.destroy === "function") {-                hasWidgets = true-            }-        }-    }--    this.count = count + descendants-    this.hasWidgets = hasWidgets-    this.hooks = hooks-    this.descendantHooks = descendantHooks-}--VirtualNode.prototype.version = version-VirtualNode.prototype.type = "VirtualNode"--},{"./is-vhook":29,"./is-vnode":30,"./is-widget":32,"./version":35}],37:[function(require,module,exports){-var version = require("./version")--VirtualPatch.NONE = 0-VirtualPatch.VTEXT = 1-VirtualPatch.VNODE = 2-VirtualPatch.WIDGET = 3-VirtualPatch.PROPS = 4-VirtualPatch.ORDER = 5-VirtualPatch.INSERT = 6-VirtualPatch.REMOVE = 7-VirtualPatch.THUNK = 8--module.exports = VirtualPatch--function VirtualPatch(type, vNode, patch) {-    this.type = Number(type)-    this.vNode = vNode-    this.patch = patch-}--VirtualPatch.prototype.version = version-VirtualPatch.prototype.type = "VirtualPatch"--},{"./version":35}],38:[function(require,module,exports){-var version = require("./version")--module.exports = VirtualText--function VirtualText(text) {-    this.text = String(text)-}--VirtualText.prototype.version = version-VirtualText.prototype.type = "VirtualText"--},{"./version":35}],39:[function(require,module,exports){--var VNode = require('vtree/vnode');-var VText = require('vtree/vtext');-var diff = require('vtree/diff');-var patch = require('vdom/patch');-var createElement = require('vdom/create-element');-var DataSet = require("data-set");-var Delegator = require("dom-delegator");-var isHook = require("vtree/is-vhook");--Elm.Native.VirtualDom = {};-Elm.Native.VirtualDom.make = function(elm) {-    elm.Native = elm.Native || {};-    elm.Native.VirtualDom = elm.Native.VirtualDom || {};-    if (elm.Native.VirtualDom.values) {-        return elm.Native.VirtualDom.values;-    }--    // This manages event listeners. Somehow...-    var delegator = Delegator();--    var NativeElement = Elm.Native.Graphics.Element.make(elm);-    var Element = Elm.Graphics.Element.make(elm);-    var Json = Elm.Native.Json.make(elm);-    var List = Elm.Native.List.make(elm);-    var Utils = Elm.Native.Utils.make(elm);--    function listToObject(list) {-        var object = {};-        while (list.ctor !== '[]') {-            var entry = list._0;-            object[entry.key] = entry.value;-            list = list._1;-        }-        return object;-    }--    function node(name, propertyList, contents) {-        var props = listToObject(propertyList);--        var key, namespace;-        // support keys-        if (props.key !== undefined) {-            key = props.key;-            props.key = undefined;-        }--        // support namespace-        if (props.namespace !== undefined) {-            namespace = props.namespace;-            props.namespace = undefined;-        }--        // ensure that setting text of an input does not move the cursor-        var useSoftSet =-            name === 'input'-            && props.value !== undefined-            && !isHook(props.value);--        if (useSoftSet) {-            props.value = SoftSetHook(props.value);-        }--        return new VNode(name, props, List.toArray(contents), key, namespace);-    }--    function property(key, value) {-        return {-            key: key,-            value: value-        };-    }--    function on(name, decoder, createMessage) {-        function eventHandler(event) {-            var value = A2(Json.runDecoderValue, decoder, event);-            if (value.ctor === 'Ok') {-                createMessage(value._0)();-            }-        }-        return property(name, DataSetHook(eventHandler));-    }--    function DataSetHook(value) {-        if (!(this instanceof DataSetHook)) {-            return new DataSetHook(value);-        }--        this.value = value;-    }--    DataSetHook.prototype.hook = function (node, propertyName) {-        var ds = DataSet(node);-        ds[propertyName] = this.value;-    };---    function SoftSetHook(value) {-      if (!(this instanceof SoftSetHook)) {-        return new SoftSetHook(value);-      }--      this.value = value;-    }--    SoftSetHook.prototype.hook = function (node, propertyName) {-      if (node[propertyName] !== this.value) {-        node[propertyName] = this.value;-      }-    };--    function text(string) {-        return new VText(string);-    }--    function fromElement(element) {-        return {-            type: "Widget",--            element: element,--            init: function () {-                return NativeElement.render(element);-            },--            update: function (previous, node) {-                return NativeElement.update(node, previous.element, element);-            }-        };-    }--    function toElement(width, height, html) {-        return A3(Element.newElement, width, height,-                  { ctor: 'Custom'-                  , type: 'evancz/elm-html'-                  , render: render-                  , update: update-                  , model: html-                  });-    }--    function render(model) {-        var element = NativeElement.createNode('div');-        element.appendChild(createElement(model));-        return element;-    }--    function update(node, oldModel, newModel) {-        updateAndReplace(node.firstChild, oldModel, newModel);-        return node;-    }--    function updateAndReplace(node, oldModel, newModel) {-        var patches = diff(oldModel, newModel);-        var newNode = patch(node, patches);-        if (newNode !== node) {-            node.parentNode.replaceChild(newNode, node);-        }-        return newNode;-    }--    function lazyRef(fn, a) {-        function thunk() {-            return fn(a);-        }-        return new Thunk(fn, [a], thunk);-    }--    function lazyRef2(fn, a, b) {-        function thunk() {-            return A2(fn, a, b);-        }-        return new Thunk(fn, [a,b], thunk);-    }--    function lazyRef3(fn, a, b, c) {-        function thunk() {-            return A3(fn, a, b, c);-        }-        return new Thunk(fn, [a,b,c], thunk);-    }--    function Thunk(fn, args, thunk) {-        this.fn = fn;-        this.args = args;-        this.vnode = null;-        this.key = undefined;-        this.thunk = thunk;-    }--    Thunk.prototype.type = "Thunk";-    Thunk.prototype.update = updateThunk;-    Thunk.prototype.render = renderThunk;--    function shouldUpdate(current, previous) {-        if (current.fn !== previous.fn) {-            return true;-        }--        // if it's the same function, we know the number of args must match-        var cargs = current.args;-        var pargs = previous.args;--        for (var i = cargs.length; i--; ) {-            if (cargs[i] !== pargs[i]) {-                return true;-            }-        }--        return false;-    }--    function updateThunk(previous, domNode) {-        if (!shouldUpdate(this, previous)) {-            this.vnode = previous.vnode;-            return;-        }--        if (!this.vnode) {-            this.vnode = this.thunk();-        }--        var patches = diff(previous.vnode, this.vnode);-        patch(domNode, patches);-    }--    function renderThunk() {-        return this.thunk();-    }--    return Elm.Native.VirtualDom.values = {-        node: F3(node),-        text: text,-        on: F3(on),--        property: F2(property),--        lazy: F2(lazyRef),-        lazy2: F3(lazyRef2),-        lazy3: F4(lazyRef3),--        toElement: F3(toElement),-        fromElement: fromElement,--        render: createElement,-        updateAndReplace: updateAndReplace-    };-};--},{"data-set":2,"dom-delegator":8,"vdom/create-element":18,"vdom/patch":24,"vtree/diff":26,"vtree/is-vhook":29,"vtree/vnode":36,"vtree/vtext":38}],40:[function(require,module,exports){--},{}]},{},[39]);--Elm.Native = Elm.Native || {};-Elm.Native.Window = {};-Elm.Native.Window.make = function(localRuntime) {--    localRuntime.Native = localRuntime.Native || {};-    localRuntime.Native.Window = localRuntime.Native.Window || {};-    if (localRuntime.Native.Window.values) {-        return localRuntime.Native.Window.values;-    }--    var Signal = Elm.Signal.make(localRuntime);-    var NS = Elm.Native.Signal.make(localRuntime);-    var Tuple2 = Elm.Native.Utils.make(localRuntime).Tuple2;--    function getWidth() {-        return localRuntime.node.clientWidth;-    }-    function getHeight() {-        if (localRuntime.isFullscreen()) {-            return window.innerHeight;-        }-        return localRuntime.node.clientHeight;-    }--    var dimensions = NS.input(Tuple2(getWidth(), getHeight()));-    dimensions.defaultNumberOfKids = 2;--    // Do not move width and height into Elm. By setting the default number of kids,-    // the resize listener can be detached.-    var width  = A2(Signal.map, function(p){return p._0;}, dimensions);-    width.defaultNumberOfKids = 0;--    var height = A2(Signal.map, function(p){return p._1;}, dimensions);-    height.defaultNumberOfKids = 0;--    function resizeIfNeeded() {-        // Do not trigger event if the dimensions have not changed.-        // This should be most of the time.-        var w = getWidth();-        var h = getHeight();-        if (dimensions.value._0 === w && dimensions.value._1 === h) return;--        setTimeout(function () {-            // Check again to see if the dimensions have changed.-            // It is conceivable that the dimensions have changed-            // again while some other event was being processed.-            var w = getWidth();-            var h = getHeight();-            if (dimensions.value._0 === w && dimensions.value._1 === h) return;-            localRuntime.notify(dimensions.id, Tuple2(w,h));-        }, 0);-    }-    localRuntime.addListener([dimensions.id], window, 'resize', resizeIfNeeded);--    return localRuntime.Native.Window.values = {-        dimensions: dimensions,-        width: width,-        height: height,-        resizeIfNeeded: resizeIfNeeded-    };--};--Elm.Result = Elm.Result || {};-Elm.Result.make = function (_elm) {-   "use strict";-   _elm.Result = _elm.Result || {};-   if (_elm.Result.values)-   return _elm.Result.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Result",-   $Maybe = Elm.Maybe.make(_elm);-   var toMaybe = function (result) {-      return function () {-         switch (result.ctor)-         {case "Err":-            return $Maybe.Nothing;-            case "Ok":-            return $Maybe.Just(result._0);}-         _U.badCase($moduleName,-         "between lines 158 and 171");-      }();-   };-   var Err = function (a) {-      return {ctor: "Err",_0: a};-   };-   var andThen = F2(function (result,-   callback) {-      return function () {-         switch (result.ctor)-         {case "Err":-            return Err(result._0);-            case "Ok":-            return callback(result._0);}-         _U.badCase($moduleName,-         "between lines 120 and 139");-      }();-   });-   var Ok = function (a) {-      return {ctor: "Ok",_0: a};-   };-   var map = F2(function (func,-   ra) {-      return function () {-         switch (ra.ctor)-         {case "Err": return Err(ra._0);-            case "Ok":-            return Ok(func(ra._0));}-         _U.badCase($moduleName,-         "between lines 35 and 46");-      }();-   });-   var map2 = F3(function (func,-   ra,-   rb) {-      return function () {-         var _v9 = {ctor: "_Tuple2"-                   ,_0: ra-                   ,_1: rb};-         switch (_v9.ctor)-         {case "_Tuple2":-            switch (_v9._0.ctor)-              {case "Err":-                 return Err(_v9._0._0);-                 case "Ok": switch (_v9._1.ctor)-                   {case "Ok": return Ok(A2(func,-                        _v9._0._0,-                        _v9._1._0));}-                   break;}-              switch (_v9._1.ctor)-              {case "Err":-                 return Err(_v9._1._0);}-              break;}-         _U.badCase($moduleName,-         "between lines 49 and 52");-      }();-   });-   var map3 = F4(function (func,-   ra,-   rb,-   rc) {-      return function () {-         var _v16 = {ctor: "_Tuple3"-                    ,_0: ra-                    ,_1: rb-                    ,_2: rc};-         switch (_v16.ctor)-         {case "_Tuple3":-            switch (_v16._0.ctor)-              {case "Err":-                 return Err(_v16._0._0);-                 case "Ok": switch (_v16._1.ctor)-                   {case "Ok":-                      switch (_v16._2.ctor)-                        {case "Ok": return Ok(A3(func,-                             _v16._0._0,-                             _v16._1._0,-                             _v16._2._0));}-                        break;}-                   break;}-              switch (_v16._1.ctor)-              {case "Err":-                 return Err(_v16._1._0);}-              switch (_v16._2.ctor)-              {case "Err":-                 return Err(_v16._2._0);}-              break;}-         _U.badCase($moduleName,-         "between lines 57 and 61");-      }();-   });-   var map4 = F5(function (func,-   ra,-   rb,-   rc,-   rd) {-      return function () {-         var _v26 = {ctor: "_Tuple4"-                    ,_0: ra-                    ,_1: rb-                    ,_2: rc-                    ,_3: rd};-         switch (_v26.ctor)-         {case "_Tuple4":-            switch (_v26._0.ctor)-              {case "Err":-                 return Err(_v26._0._0);-                 case "Ok": switch (_v26._1.ctor)-                   {case "Ok":-                      switch (_v26._2.ctor)-                        {case "Ok":-                           switch (_v26._3.ctor)-                             {case "Ok": return Ok(A4(func,-                                  _v26._0._0,-                                  _v26._1._0,-                                  _v26._2._0,-                                  _v26._3._0));}-                             break;}-                        break;}-                   break;}-              switch (_v26._1.ctor)-              {case "Err":-                 return Err(_v26._1._0);}-              switch (_v26._2.ctor)-              {case "Err":-                 return Err(_v26._2._0);}-              switch (_v26._3.ctor)-              {case "Err":-                 return Err(_v26._3._0);}-              break;}-         _U.badCase($moduleName,-         "between lines 66 and 71");-      }();-   });-   var map5 = F6(function (func,-   ra,-   rb,-   rc,-   rd,-   re) {-      return function () {-         var _v39 = {ctor: "_Tuple5"-                    ,_0: ra-                    ,_1: rb-                    ,_2: rc-                    ,_3: rd-                    ,_4: re};-         switch (_v39.ctor)-         {case "_Tuple5":-            switch (_v39._0.ctor)-              {case "Err":-                 return Err(_v39._0._0);-                 case "Ok": switch (_v39._1.ctor)-                   {case "Ok":-                      switch (_v39._2.ctor)-                        {case "Ok":-                           switch (_v39._3.ctor)-                             {case "Ok":-                                switch (_v39._4.ctor)-                                  {case "Ok": return Ok(A5(func,-                                       _v39._0._0,-                                       _v39._1._0,-                                       _v39._2._0,-                                       _v39._3._0,-                                       _v39._4._0));}-                                  break;}-                             break;}-                        break;}-                   break;}-              switch (_v39._1.ctor)-              {case "Err":-                 return Err(_v39._1._0);}-              switch (_v39._2.ctor)-              {case "Err":-                 return Err(_v39._2._0);}-              switch (_v39._3.ctor)-              {case "Err":-                 return Err(_v39._3._0);}-              switch (_v39._4.ctor)-              {case "Err":-                 return Err(_v39._4._0);}-              break;}-         _U.badCase($moduleName,-         "between lines 76 and 117");-      }();-   });-   var formatError = F2(function (f,-   result) {-      return function () {-         switch (result.ctor)-         {case "Err":-            return Err(f(result._0));-            case "Ok":-            return Ok(result._0);}-         _U.badCase($moduleName,-         "between lines 142 and 155");-      }();-   });-   var fromMaybe = F2(function (err,-   maybe) {-      return function () {-         switch (maybe.ctor)-         {case "Just":-            return Ok(maybe._0);-            case "Nothing":-            return Err(err);}-         _U.badCase($moduleName,-         "between lines 174 and 176");-      }();-   });-   _elm.Result.values = {_op: _op-                        ,Ok: Ok-                        ,Err: Err-                        ,map: map-                        ,map2: map2-                        ,map3: map3-                        ,map4: map4-                        ,map5: map5-                        ,andThen: andThen-                        ,formatError: formatError-                        ,toMaybe: toMaybe-                        ,fromMaybe: fromMaybe};-   return _elm.Result.values;-};-Elm.SideBar = Elm.SideBar || {};-Elm.SideBar.make = function (_elm) {-   "use strict";-   _elm.SideBar = _elm.SideBar || {};-   if (_elm.SideBar.values)-   return _elm.SideBar.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "SideBar",-   $Basics = Elm.Basics.make(_elm),-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $Html = Elm.Html.make(_elm),-   $SideBar$Controls = Elm.SideBar.Controls.make(_elm),-   $SideBar$Model = Elm.SideBar.Model.make(_elm),-   $SideBar$Watches = Elm.SideBar.Watches.make(_elm),-   $Signal = Elm.Signal.make(_elm),-   $Window = Elm.Window.make(_elm);-   var permitSwap = _P.portOut("permitSwap",-   _P.outgoingSignal(function (v) {-      return v;-   }),-   $Signal.subscribe($SideBar$Controls.permitSwapChannel));-   var restart = _P.portOut("restart",-   _P.outgoingSignal(function (v) {-      return v;-   }),-   A2($Signal.map,-   $Basics.always(0),-   $Signal.subscribe($SideBar$Controls.restartChannel)));-   var pause = _P.portOut("pause",-   _P.outgoingSignal(function (v) {-      return v;-   }),-   $Signal.subscribe($SideBar$Controls.pausedInput));-   var scrubTo = _P.portOut("scrubTo",-   _P.outgoingSignal(function (v) {-      return v;-   }),-   $Signal.subscribe($SideBar$Controls.scrubChannel));-   var showSwap = _P.portIn("showSwap",-   function (v) {-      return typeof v === "boolean" ? v : _U.badPort("a boolean (true or false)",-      v);-   });-   var watches = _P.portIn("watches",-   _P.incomingSignal(function (v) {-      return typeof v === "object" && v instanceof Array ? Elm.Native.List.make(_elm).fromArray(v.map(function (v) {-         return typeof v === "object" && v instanceof Array ? {ctor: "_Tuple2"-                                                              ,_0: typeof v[0] === "string" || typeof v[0] === "object" && v[0] instanceof String ? v[0] : _U.badPort("a string",-                                                              v[0])-                                                              ,_1: typeof v[1] === "string" || typeof v[1] === "object" && v[1] instanceof String ? v[1] : _U.badPort("a string",-                                                              v[1])} : _U.badPort("an array",-         v);-      })) : _U.badPort("an array",v);-   }));-   var eventCounter = _P.portIn("eventCounter",-   _P.incomingSignal(function (v) {-      return typeof v === "number" ? v : _U.badPort("a number",-      v);-   }));-   var aggregateUpdates = $Signal.mergeMany(_L.fromArray([A2($Signal.map,-                                                         $Basics.always($SideBar$Model.Restart),-                                                         $Signal.subscribe($SideBar$Controls.restartChannel))-                                                         ,A2($Signal.map,-                                                         $SideBar$Model.Pause,-                                                         $Signal.subscribe($SideBar$Controls.pausedInput))-                                                         ,A2($Signal.map,-                                                         $SideBar$Model.TotalEvents,-                                                         eventCounter)-                                                         ,A2($Signal.map,-                                                         $SideBar$Model.ScrubPosition,-                                                         $Signal.subscribe($SideBar$Controls.scrubChannel))]));-   var scene = A3($Signal.foldp,-   $SideBar$Model.update,-   $SideBar$Model.startModel,-   aggregateUpdates);-   var view = F4(function (_v0,-   watches,-   permitSwap,-   state) {-      return function () {-         switch (_v0.ctor)-         {case "_Tuple2":-            return function () {-                 var watchView = A3($Html.toElement,-                 _v0._0,-                 _v0._1 - 150,-                 $SideBar$Watches.view(watches));-                 var controls = A4($SideBar$Controls.view,-                 {ctor: "_Tuple2"-                 ,_0: _v0._0-                 ,_1: _v0._1},-                 showSwap,-                 permitSwap,-                 state);-                 return A2($Graphics$Element.flow,-                 $Graphics$Element.down,-                 _L.fromArray([controls-                              ,watchView]));-              }();}-         _U.badCase($moduleName,-         "between lines 16 and 25");-      }();-   });-   var main = A5($Signal.map4,-   view,-   A2($Signal.map,-   function (_v4) {-      return function () {-         switch (_v4.ctor)-         {case "_Tuple2":-            return {ctor: "_Tuple2"-                   ,_0: $SideBar$Controls.panelWidth-                   ,_1: _v4._1};}-         _U.badCase($moduleName,-         "on line 33, column 29 to 51");-      }();-   },-   $Window.dimensions),-   watches,-   $Signal.subscribe($SideBar$Controls.permitSwapChannel),-   scene);-   _elm.SideBar.values = {_op: _op-                         ,view: view-                         ,main: main-                         ,scene: scene-                         ,aggregateUpdates: aggregateUpdates};-   return _elm.SideBar.values;-};-Elm.SideBar = Elm.SideBar || {};-Elm.SideBar.Controls = Elm.SideBar.Controls || {};-Elm.SideBar.Controls.make = function (_elm) {-   "use strict";-   _elm.SideBar = _elm.SideBar || {};-   _elm.SideBar.Controls = _elm.SideBar.Controls || {};-   if (_elm.SideBar.Controls.values)-   return _elm.SideBar.Controls.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "SideBar.Controls",-   $Basics = Elm.Basics.make(_elm),-   $Color = Elm.Color.make(_elm),-   $Graphics$Collage = Elm.Graphics.Collage.make(_elm),-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $Graphics$Input = Elm.Graphics.Input.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $SideBar$Model = Elm.SideBar.Model.make(_elm),-   $Signal = Elm.Signal.make(_elm),-   $Slider = Elm.Slider.make(_elm),-   $Text = Elm.Text.make(_elm);-   var roundedSquare = F3(function (side,-   radius,-   toForm) {-      return function () {-         var formedCircle = toForm($Graphics$Collage.circle(radius));-         var shortSide = side - 2 * radius;-         var xRect = toForm(A2($Graphics$Collage.rect,-         side,-         shortSide));-         var yRect = toForm(A2($Graphics$Collage.rect,-         shortSide,-         side));-         var circleOffset = shortSide / 2;-         var tl = $Graphics$Collage.move({ctor: "_Tuple2"-                                         ,_0: 0 - circleOffset-                                         ,_1: circleOffset})(formedCircle);-         var tr = $Graphics$Collage.move({ctor: "_Tuple2"-                                         ,_0: circleOffset-                                         ,_1: circleOffset})(formedCircle);-         var bl = $Graphics$Collage.move({ctor: "_Tuple2"-                                         ,_0: 0 - circleOffset-                                         ,_1: 0 - circleOffset})(formedCircle);-         var br = $Graphics$Collage.move({ctor: "_Tuple2"-                                         ,_0: circleOffset-                                         ,_1: 0 - circleOffset})(formedCircle);-         return $Graphics$Collage.group(_L.fromArray([xRect-                                                     ,yRect-                                                     ,tl-                                                     ,tr-                                                     ,bl-                                                     ,br]));-      }();-   });-   var scrubChannel = $Signal.channel(0);-   var scrubSlider = F2(function (_v0,-   state) {-      return function () {-         switch (_v0.ctor)-         {case "_Tuple2":-            return function () {-                 var sliderLength = _v0._0;-                 var sliderStyle = _U.replace([["length"-                                               ,sliderLength]-                                              ,["max"-                                               ,$Basics.toFloat(state.totalEvents)]-                                              ,["value"-                                               ,$Basics.toFloat(state.scrubPosition)]],-                 $Slider.defaultSlider);-                 return A3($Graphics$Element.container,-                 sliderLength,-                 20,-                 $Graphics$Element.middle)(A2($Slider.slider,-                 function (n) {-                    return A2($Signal.send,-                    scrubChannel,-                    $Basics.round(n));-                 },-                 sliderStyle));-              }();}-         _U.badCase($moduleName,-         "between lines 142 and 152");-      }();-   });-   var permitSwapChannel = $Signal.channel(true);-   var restartChannel = $Signal.channel({ctor: "_Tuple0"});-   var pausedInput = $Signal.channel(false);-   var myButton = F2(function (message,-   name) {-      return function () {-         var img = function (state) {-            return A3($Graphics$Element.image,-            40,-            40,-            A2($Basics._op["++"],-            "/_reactor/debugger/",-            A2($Basics._op["++"],-            name,-            A2($Basics._op["++"],-            "-button-",-            A2($Basics._op["++"],-            state,-            ".png")))));-         };-         return A4($Graphics$Input.customButton,-         message,-         img("up"),-         img("hover"),-         img("down"));-      }();-   });-   var playButton = A2(myButton,-   A2($Signal.send,-   pausedInput,-   false),-   "play");-   var pauseButton = A2(myButton,-   A2($Signal.send,-   pausedInput,-   true),-   "pause");-   var restartButton = A2(myButton,-   A2($Signal.send,-   restartChannel,-   {ctor: "_Tuple0"}),-   "restart");-   var textTypefaces = _L.fromArray(["Gotham"-                                    ,"Futura"-                                    ,"Lucida Grande"-                                    ,"sans-serif"]);-   var darkGrey = A3($Color.rgb,-   74,-   74,-   74);-   var lightGrey = A3($Color.rgb,-   228,-   228,-   228);-   var dataStyle = F3(function (typefaces,-   height,-   string) {-      return function () {-         var $default = $Text.defaultStyle;-         var myStyle = _U.replace([["typeface"-                                   ,typefaces]-                                  ,["color",lightGrey]-                                  ,["height"-                                   ,$Maybe.Just(height)]],-         $default);-         return A2($Text.style,-         myStyle,-         $Text.fromString(string));-      }();-   });-   var textStyle = function (string) {-      return A3(dataStyle,-      textTypefaces,-      12,-      string);-   };-   var blue = A3($Color.rgb,-   28,-   129,-   218);-   var swapButton = function (permitSwap) {-      return function () {-         var info = $Text.leftAligned(textStyle("swap"));-         var radius = 4;-         var hsWidth = 25;-         var bgButton = A3(roundedSquare,-         hsWidth,-         radius,-         $Graphics$Collage.filled(lightGrey));-         var trueButton = _L.fromArray([bgButton-                                       ,A3(roundedSquare,-                                       22,-                                       radius,-                                       $Graphics$Collage.filled(blue))]);-         var falseButtonClick = trueButton;-         var trueButtonHover = _L.fromArray([bgButton-                                            ,A3(roundedSquare,-                                            22,-                                            radius,-                                            $Graphics$Collage.filled(blue))-                                            ,$Graphics$Collage.alpha(0.1)(A3(roundedSquare,-                                            22,-                                            radius,-                                            $Graphics$Collage.filled(darkGrey)))]);-         var falseButton = _L.fromArray([bgButton-                                        ,A3(roundedSquare,-                                        22,-                                        radius,-                                        $Graphics$Collage.filled(darkGrey))]);-         var trueButtonClick = falseButton;-         var falseButtonHover = _L.fromArray([bgButton-                                             ,A3(roundedSquare,-                                             22,-                                             radius,-                                             $Graphics$Collage.filled(darkGrey))-                                             ,$Graphics$Collage.alpha(0.1)(A3(roundedSquare,-                                             22,-                                             radius,-                                             $Graphics$Collage.filled(blue)))]);-         var button = function () {-            switch (permitSwap)-            {case false:-               return A4($Graphics$Input.customButton,-                 A2($Signal.send,-                 permitSwapChannel,-                 true),-                 A3($Graphics$Collage.collage,-                 hsWidth,-                 hsWidth,-                 falseButton),-                 A3($Graphics$Collage.collage,-                 hsWidth,-                 hsWidth,-                 falseButtonHover),-                 A3($Graphics$Collage.collage,-                 hsWidth,-                 hsWidth,-                 falseButtonClick));-               case true:-               return A4($Graphics$Input.customButton,-                 A2($Signal.send,-                 permitSwapChannel,-                 false),-                 A3($Graphics$Collage.collage,-                 hsWidth,-                 hsWidth,-                 trueButton),-                 A3($Graphics$Collage.collage,-                 hsWidth,-                 hsWidth,-                 trueButtonHover),-                 A3($Graphics$Collage.collage,-                 hsWidth,-                 hsWidth,-                 trueButtonClick));}-            _U.badCase($moduleName,-            "between lines 118 and 130");-         }();-         return A2($Graphics$Element.flow,-         $Graphics$Element.right,-         _L.fromArray([info-                      ,A2($Graphics$Element.spacer,-                      10,-                      1)-                      ,button]));-      }();-   };-   var panelWidth = 275;-   var textHeight = 20;-   var sliderMinMaxText = F2(function (w,-   state) {-      return function () {-         var sliderTotalEvents = A3($Graphics$Element.container,-         w,-         textHeight,-         $Graphics$Element.topRight)($Text.rightAligned(textStyle($Basics.toString(state.totalEvents))));-         var sliderStartText = A3($Graphics$Element.container,-         w,-         textHeight,-         $Graphics$Element.topLeft)($Text.leftAligned(textStyle("0")));-         return A2($Graphics$Element.flow,-         $Graphics$Element.outward,-         _L.fromArray([sliderStartText-                      ,sliderTotalEvents]));-      }();-   });-   var sideMargin = 2 * 20;-   var sliderEventText = F2(function (w,-   state) {-      return function () {-         var text$ = $Text.centered(textStyle($Basics.toString(state.scrubPosition)));-         var yPos = $Graphics$Element.absolute($Basics.round(textHeight / 2));-         var totalEvents = $Basics.toFloat(state.totalEvents);-         var scrubPosition = $Basics.toFloat(state.scrubPosition);-         var textWidthOffset = 14;-         var midWidth = $Basics.toFloat(w) - sideMargin - textWidthOffset;-         var leftDistance = function () {-            switch (totalEvents)-            {case 0:-               return sideMargin / 2 + textWidthOffset / 2;}-            return scrubPosition / totalEvents * midWidth + sideMargin / 2 + textWidthOffset / 2;-         }();-         var xPos = $Graphics$Element.absolute($Basics.round(leftDistance));-         var textPosition = A2($Graphics$Element.middleAt,-         xPos,-         yPos);-         return A4($Graphics$Element.container,-         w,-         textHeight,-         textPosition,-         text$);-      }();-   });-   var buttonWidth = 40;-   var buttonHeight = 40;-   var view = F4(function (_v6,-   showSwap,-   permitSwap,-   state) {-      return function () {-         switch (_v6.ctor)-         {case "_Tuple2":-            return function () {-                 var bar = A2($Graphics$Element.opacity,-                 0.3,-                 A2($Graphics$Element.color,-                 lightGrey,-                 A2($Graphics$Element.spacer,-                 _v6._0,-                 1)));-                 var fittedSwapButton = showSwap ? A3($Graphics$Element.container,-                 _v6._0 - 2 * buttonWidth - sideMargin,-                 buttonHeight,-                 $Graphics$Element.middle)(swapButton(permitSwap)) : A2($Graphics$Element.spacer,-                 2 * buttonWidth,-                 1);-                 var buttons = A2($Graphics$Element.flow,-                 $Graphics$Element.right,-                 _L.fromArray([restartButton-                              ,fittedSwapButton-                              ,state.paused ? playButton : pauseButton]));-                 var buttonContainer = A4($Graphics$Element.container,-                 _v6._0,-                 buttonHeight,-                 $Graphics$Element.midTop,-                 buttons);-                 var buttonSliderSpaceHeight = 10;-                 var topSpacerHeight = 15;-                 var midWidth = _v6._0 - sideMargin;-                 var centeredSliderContainer = A3($Graphics$Element.container,-                 _v6._0,-                 24 + textHeight,-                 $Graphics$Element.midTop)(A2($Graphics$Element.flow,-                 $Graphics$Element.down,-                 _L.fromArray([A2(scrubSlider,-                              {ctor: "_Tuple2"-                              ,_0: midWidth-                              ,_1: _v6._1},-                              state)-                              ,A2(sliderMinMaxText,-                              midWidth,-                              state)])));-                 var slider = A3($Graphics$Element.container,-                 _v6._0,-                 24 + 2 * textHeight,-                 $Graphics$Element.midTop)(A2($Graphics$Element.flow,-                 $Graphics$Element.down,-                 _L.fromArray([A2(sliderEventText,-                              _v6._0,-                              state)-                              ,centeredSliderContainer])));-                 var controls = A2($Graphics$Element.flow,-                 $Graphics$Element.down,-                 _L.fromArray([A2($Graphics$Element.spacer,-                              midWidth,-                              topSpacerHeight)-                              ,buttonContainer-                              ,A2($Graphics$Element.spacer,-                              midWidth,-                              buttonSliderSpaceHeight)-                              ,slider-                              ,A2($Graphics$Element.spacer,-                              midWidth,-                              10)]));-                 return A2($Graphics$Element.flow,-                 $Graphics$Element.down,-                 _L.fromArray([controls,bar]));-              }();}-         _U.badCase($moduleName,-         "between lines 210 and 262");-      }();-   });-   _elm.SideBar.Controls.values = {_op: _op-                                  ,buttonHeight: buttonHeight-                                  ,buttonWidth: buttonWidth-                                  ,sideMargin: sideMargin-                                  ,textHeight: textHeight-                                  ,panelWidth: panelWidth-                                  ,blue: blue-                                  ,lightGrey: lightGrey-                                  ,darkGrey: darkGrey-                                  ,dataStyle: dataStyle-                                  ,textTypefaces: textTypefaces-                                  ,textStyle: textStyle-                                  ,myButton: myButton-                                  ,playButton: playButton-                                  ,pauseButton: pauseButton-                                  ,pausedInput: pausedInput-                                  ,restartButton: restartButton-                                  ,restartChannel: restartChannel-                                  ,swapButton: swapButton-                                  ,permitSwapChannel: permitSwapChannel-                                  ,scrubSlider: scrubSlider-                                  ,scrubChannel: scrubChannel-                                  ,sliderEventText: sliderEventText-                                  ,sliderMinMaxText: sliderMinMaxText-                                  ,view: view-                                  ,roundedSquare: roundedSquare};-   return _elm.SideBar.Controls.values;-};-Elm.SideBar = Elm.SideBar || {};-Elm.SideBar.Model = Elm.SideBar.Model || {};-Elm.SideBar.Model.make = function (_elm) {-   "use strict";-   _elm.SideBar = _elm.SideBar || {};-   _elm.SideBar.Model = _elm.SideBar.Model || {};-   if (_elm.SideBar.Model.values)-   return _elm.SideBar.Model.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "SideBar.Model";-   var update = F2(function (action,-   state) {-      return function () {-         switch (action.ctor)-         {case "Pause":-            return _U.replace([["paused"-                               ,action._0]-                              ,["totalEvents"-                               ,action._0 ? state.totalEvents : state.scrubPosition]],-              state);-            case "Restart":-            return _U.replace([["totalEvents"-                               ,0]-                              ,["scrubPosition",0]],-              state);-            case "ScrubPosition":-            return _U.replace([["scrubPosition"-                               ,action._0]-                              ,["paused",true]],-              state);-            case "TotalEvents":-            return _U.replace([["totalEvents"-                               ,action._0]-                              ,["scrubPosition",action._0]],-              state);}-         _U.badCase($moduleName,-         "between lines 28 and 52");-      }();-   });-   var startModel = {_: {}-                    ,paused: false-                    ,scrubPosition: 0-                    ,totalEvents: 0};-   var Model = F3(function (a,-   b,-   c) {-      return {_: {}-             ,paused: a-             ,scrubPosition: c-             ,totalEvents: b};-   });-   var ScrubPosition = function (a) {-      return {ctor: "ScrubPosition"-             ,_0: a};-   };-   var TotalEvents = function (a) {-      return {ctor: "TotalEvents"-             ,_0: a};-   };-   var Pause = function (a) {-      return {ctor: "Pause",_0: a};-   };-   var Restart = {ctor: "Restart"};-   _elm.SideBar.Model.values = {_op: _op-                               ,Restart: Restart-                               ,Pause: Pause-                               ,TotalEvents: TotalEvents-                               ,ScrubPosition: ScrubPosition-                               ,Model: Model-                               ,startModel: startModel-                               ,update: update};-   return _elm.SideBar.Model.values;-};-Elm.SideBar = Elm.SideBar || {};-Elm.SideBar.Watches = Elm.SideBar.Watches || {};-Elm.SideBar.Watches.make = function (_elm) {-   "use strict";-   _elm.SideBar = _elm.SideBar || {};-   _elm.SideBar.Watches = _elm.SideBar.Watches || {};-   if (_elm.SideBar.Watches.values)-   return _elm.SideBar.Watches.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "SideBar.Watches",-   $Basics = Elm.Basics.make(_elm),-   $Html = Elm.Html.make(_elm),-   $Html$Attributes = Elm.Html.Attributes.make(_elm),-   $List = Elm.List.make(_elm),-   $Markdown = Elm.Markdown.make(_elm);-   var noWatches = $Markdown.toHtml("\n\n### <span style=\"font-family: Gotham, Futura, \'Lucida Grande\', sans-serif; font-size: 12pt; color: rgb(170,170,170)\"> You don\'t have any watches! </span>\n\n<span style=\"color: rgb(170,170,170)\">\n<span style=\"font-family: Gotham, Futura, \'Lucida Grande\', sans-serif; font-size: 10pt; color: rgb(170,170,170)\">\nUse [<span style=\"text-decoration:underline; color: rgb(170,170,170)\">Debug.watch</span>](http://library.elm-lang.org/catalog/elm-lang-Elm/latest/Debug#watch)\nto show any value. <br>\n`watch : String -> a -> a`</span>\n\n<span style=\"font-family: Gotham, Futura, \'Lucida Grande\', sans-serif; font-size: 10pt; color: rgb(170,170,170)\">\nUse [<span style=\"text-decoration:underline; color: rgb(170,170,170)\">Debug.watchSummary</span>](http://library.elm-lang.org/catalog/elm-lang-Elm/latest/Debug#watchSummary) to show a <br>\nsummary or subvalue of any value. </span><br>\n\n");-   var valueAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"-                                                                            ,_0: "margin"-                                                                            ,_1: "0 0 0 10px"}]))]);-   var viewValue = function (value) {-      return A2($Html.pre,-      valueAttributes,-      _L.fromArray([$Html.text(value)]));-   };-   var nameAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"-                                                                           ,_0: "margin"-                                                                           ,_1: "20px 0 10px"}-                                                                          ,{ctor: "_Tuple2"-                                                                           ,_0: "font-weight"-                                                                           ,_1: "bold"}-                                                                          ,{ctor: "_Tuple2"-                                                                           ,_0: "font-family"-                                                                           ,_1: "Gotham, Futura, \'Lucida Grande\', sans-serif"}]))]);-   var viewName = function (name) {-      return A2($Html.div,-      nameAttributes,-      _L.fromArray([$Html.text(name)]));-   };-   var watchAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"-                                                                            ,_0: "color"-                                                                            ,_1: "rgb(228, 228, 228)"}]))]);-   var viewWatch = function (_v0) {-      return function () {-         switch (_v0.ctor)-         {case "_Tuple2":-            return A2($Html.div,-              watchAttributes,-              _L.fromArray([viewName(_v0._0)-                           ,viewValue(_v0._1)]));}-         _U.badCase($moduleName,-         "on line 34, column 3 to 55");-      }();-   };-   var viewAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"-                                                                           ,_0: "overflow-y"-                                                                           ,_1: "auto"}-                                                                          ,{ctor: "_Tuple2"-                                                                           ,_0: "overflow-x"-                                                                           ,_1: "hidden"}-                                                                          ,{ctor: "_Tuple2"-                                                                           ,_0: "height"-                                                                           ,_1: "100%"}-                                                                          ,{ctor: "_Tuple2"-                                                                           ,_0: "padding"-                                                                           ,_1: "0 20px"}]))]);-   var view = function (watches) {-      return $Html.div(viewAttributes)(function () {-         switch (watches.ctor)-         {case "[]":-            return _L.fromArray([noWatches]);}-         return A2($List.map,-         viewWatch,-         watches);-      }());-   };-   _elm.SideBar.Watches.values = {_op: _op-                                 ,view: view-                                 ,viewAttributes: viewAttributes-                                 ,viewWatch: viewWatch-                                 ,watchAttributes: watchAttributes-                                 ,viewName: viewName-                                 ,nameAttributes: nameAttributes-                                 ,viewValue: viewValue-                                 ,valueAttributes: valueAttributes-                                 ,noWatches: noWatches};-   return _elm.SideBar.Watches.values;-};-Elm.Signal = Elm.Signal || {};-Elm.Signal.make = function (_elm) {-   "use strict";-   _elm.Signal = _elm.Signal || {};-   if (_elm.Signal.values)-   return _elm.Signal.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Signal",-   $Basics = Elm.Basics.make(_elm),-   $List = Elm.List.make(_elm),-   $Native$Signal = Elm.Native.Signal.make(_elm);-   var subscribe = $Native$Signal.subscribe;-   var send = $Native$Signal.send;-   var channel = $Native$Signal.input;-   var Message = {ctor: "Message"};-   var Channel = {ctor: "Channel"};-   _op["~"] = F2(function (sf,s) {-      return A3($Native$Signal.map2,-      F2(function (f,x) {-         return f(x);-      }),-      sf,-      s);-   });-   _op["<~"] = F2(function (f,s) {-      return A2($Native$Signal.map,-      f,-      s);-   });-   var sampleOn = $Native$Signal.sampleOn;-   var dropRepeats = $Native$Signal.dropRepeats;-   var dropIf = $Native$Signal.dropIf;-   var keepIf = $Native$Signal.keepIf;-   var keepWhen = F3(function (bs,-   def,-   sig) {-      return A2(_op["<~"],-      $Basics.snd,-      A3(keepIf,-      $Basics.fst,-      {ctor: "_Tuple2"-      ,_0: false-      ,_1: def},-      A2(_op["~"],-      A2(_op["<~"],-      F2(function (v0,v1) {-         return {ctor: "_Tuple2"-                ,_0: v0-                ,_1: v1};-      }),-      A2(sampleOn,sig,bs)),-      sig)));-   });-   var dropWhen = function (bs) {-      return keepWhen(A2(_op["<~"],-      $Basics.not,-      bs));-   };-   var merge = $Native$Signal.merge;-   var mergeMany = function (signals) {-      return A2($List.foldr1,-      merge,-      signals);-   };-   var foldp = $Native$Signal.foldp;-   var map5 = $Native$Signal.map5;-   var map4 = $Native$Signal.map4;-   var map3 = $Native$Signal.map3;-   var map2 = $Native$Signal.map2;-   var map = $Native$Signal.map;-   var constant = $Native$Signal.constant;-   var Signal = {ctor: "Signal"};-   _elm.Signal.values = {_op: _op-                        ,Signal: Signal-                        ,constant: constant-                        ,map: map-                        ,map2: map2-                        ,map3: map3-                        ,map4: map4-                        ,map5: map5-                        ,foldp: foldp-                        ,merge: merge-                        ,mergeMany: mergeMany-                        ,keepIf: keepIf-                        ,dropIf: dropIf-                        ,keepWhen: keepWhen-                        ,dropWhen: dropWhen-                        ,dropRepeats: dropRepeats-                        ,sampleOn: sampleOn-                        ,Channel: Channel-                        ,Message: Message-                        ,channel: channel-                        ,send: send-                        ,subscribe: subscribe};-   return _elm.Signal.values;-};-Elm.Slider = Elm.Slider || {};-Elm.Slider.make = function (_elm) {-   "use strict";-   _elm.Slider = _elm.Slider || {};-   if (_elm.Slider.values)-   return _elm.Slider.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Slider",-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $Native$Slider = Elm.Native.Slider.make(_elm),-   $Signal = Elm.Signal.make(_elm);-   var slider = $Native$Slider.slider;-   var defaultSlider = {_: {}-                       ,disabled: false-                       ,horizontal: true-                       ,length: 100-                       ,max: 100-                       ,min: 0-                       ,step: 1-                       ,value: 0};-   var SliderStyle = F7(function (a,-   b,-   c,-   d,-   e,-   f,-   g) {-      return {_: {}-             ,disabled: b-             ,horizontal: a-             ,length: c-             ,max: e-             ,min: d-             ,step: f-             ,value: g};-   });-   _elm.Slider.values = {_op: _op-                        ,SliderStyle: SliderStyle-                        ,defaultSlider: defaultSlider-                        ,slider: slider};-   return _elm.Slider.values;-};-Elm.String = Elm.String || {};-Elm.String.make = function (_elm) {-   "use strict";-   _elm.String = _elm.String || {};-   if (_elm.String.values)-   return _elm.String.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "String",-   $Maybe = Elm.Maybe.make(_elm),-   $Native$String = Elm.Native.String.make(_elm),-   $Result = Elm.Result.make(_elm);-   var fromList = $Native$String.fromList;-   var toList = $Native$String.toList;-   var toFloat = $Native$String.toFloat;-   var toInt = $Native$String.toInt;-   var indices = $Native$String.indexes;-   var indexes = $Native$String.indexes;-   var endsWith = $Native$String.endsWith;-   var startsWith = $Native$String.startsWith;-   var contains = $Native$String.contains;-   var all = $Native$String.all;-   var any = $Native$String.any;-   var toLower = $Native$String.toLower;-   var toUpper = $Native$String.toUpper;-   var lines = $Native$String.lines;-   var words = $Native$String.words;-   var trimRight = $Native$String.trimRight;-   var trimLeft = $Native$String.trimLeft;-   var trim = $Native$String.trim;-   var padRight = $Native$String.padRight;-   var padLeft = $Native$String.padLeft;-   var pad = $Native$String.pad;-   var dropRight = $Native$String.dropRight;-   var dropLeft = $Native$String.dropLeft;-   var right = $Native$String.right;-   var left = $Native$String.left;-   var slice = $Native$String.slice;-   var repeat = $Native$String.repeat;-   var join = $Native$String.join;-   var split = $Native$String.split;-   var foldr = $Native$String.foldr;-   var foldl = $Native$String.foldl;-   var reverse = $Native$String.reverse;-   var filter = $Native$String.filter;-   var map = $Native$String.map;-   var length = $Native$String.length;-   var concat = $Native$String.concat;-   var append = $Native$String.append;-   var uncons = $Native$String.uncons;-   var cons = $Native$String.cons;-   var fromChar = function ($char) {-      return A2(cons,$char,"");-   };-   var isEmpty = $Native$String.isEmpty;-   _elm.String.values = {_op: _op-                        ,isEmpty: isEmpty-                        ,cons: cons-                        ,fromChar: fromChar-                        ,uncons: uncons-                        ,append: append-                        ,concat: concat-                        ,length: length-                        ,map: map-                        ,filter: filter-                        ,reverse: reverse-                        ,foldl: foldl-                        ,foldr: foldr-                        ,split: split-                        ,join: join-                        ,repeat: repeat-                        ,slice: slice-                        ,left: left-                        ,right: right-                        ,dropLeft: dropLeft-                        ,dropRight: dropRight-                        ,pad: pad-                        ,padLeft: padLeft-                        ,padRight: padRight-                        ,trim: trim-                        ,trimLeft: trimLeft-                        ,trimRight: trimRight-                        ,words: words-                        ,lines: lines-                        ,toUpper: toUpper-                        ,toLower: toLower-                        ,any: any-                        ,all: all-                        ,contains: contains-                        ,startsWith: startsWith-                        ,endsWith: endsWith-                        ,indexes: indexes-                        ,indices: indices-                        ,toInt: toInt-                        ,toFloat: toFloat-                        ,toList: toList-                        ,fromList: fromList};-   return _elm.String.values;-};-Elm.Text = Elm.Text || {};-Elm.Text.make = function (_elm) {-   "use strict";-   _elm.Text = _elm.Text || {};-   if (_elm.Text.values)-   return _elm.Text.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Text",-   $Basics = Elm.Basics.make(_elm),-   $Color = Elm.Color.make(_elm),-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $List = Elm.List.make(_elm),-   $Maybe = Elm.Maybe.make(_elm),-   $Native$Text = Elm.Native.Text.make(_elm);-   var markdown = $Native$Text.markdown;-   var justified = $Native$Text.justified;-   var centered = $Native$Text.centered;-   var rightAligned = $Native$Text.rightAligned;-   var leftAligned = $Native$Text.leftAligned;-   var line = $Native$Text.line;-   var italic = $Native$Text.italic;-   var bold = $Native$Text.bold;-   var color = $Native$Text.color;-   var height = $Native$Text.height;-   var link = $Native$Text.link;-   var monospace = $Native$Text.monospace;-   var typeface = $Native$Text.typeface;-   var style = $Native$Text.style;-   var append = $Native$Text.append;-   var fromString = $Native$Text.fromString;-   var empty = fromString("");-   var concat = function (texts) {-      return A3($List.foldr,-      append,-      empty,-      texts);-   };-   var join = F2(function (seperator,-   texts) {-      return concat(A2($List.intersperse,-      seperator,-      texts));-   });-   var plainText = function (str) {-      return leftAligned(fromString(str));-   };-   var asText = function (value) {-      return leftAligned(monospace(fromString($Basics.toString(value))));-   };-   var defaultStyle = {_: {}-                      ,bold: false-                      ,color: $Color.black-                      ,height: $Maybe.Nothing-                      ,italic: false-                      ,line: $Maybe.Nothing-                      ,typeface: _L.fromArray([])};-   var Style = F6(function (a,-   b,-   c,-   d,-   e,-   f) {-      return {_: {}-             ,bold: d-             ,color: c-             ,height: b-             ,italic: e-             ,line: f-             ,typeface: a};-   });-   var Through = {ctor: "Through"};-   var Over = {ctor: "Over"};-   var Under = {ctor: "Under"};-   var Text = {ctor: "Text"};-   _elm.Text.values = {_op: _op-                      ,Text: Text-                      ,Under: Under-                      ,Over: Over-                      ,Through: Through-                      ,Style: Style-                      ,defaultStyle: defaultStyle-                      ,fromString: fromString-                      ,empty: empty-                      ,append: append-                      ,concat: concat-                      ,join: join-                      ,style: style-                      ,typeface: typeface-                      ,monospace: monospace-                      ,link: link-                      ,height: height-                      ,color: color-                      ,bold: bold-                      ,italic: italic-                      ,line: line-                      ,leftAligned: leftAligned-                      ,rightAligned: rightAligned-                      ,centered: centered-                      ,justified: justified-                      ,plainText: plainText-                      ,markdown: markdown-                      ,asText: asText};-   return _elm.Text.values;-};-Elm.Transform2D = Elm.Transform2D || {};-Elm.Transform2D.make = function (_elm) {-   "use strict";-   _elm.Transform2D = _elm.Transform2D || {};-   if (_elm.Transform2D.values)-   return _elm.Transform2D.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Transform2D",-   $Native$Transform2D = Elm.Native.Transform2D.make(_elm);-   var multiply = $Native$Transform2D.multiply;-   var rotation = $Native$Transform2D.rotation;-   var matrix = $Native$Transform2D.matrix;-   var translation = F2(function (x,-   y) {-      return A6(matrix,-      1,-      0,-      0,-      1,-      x,-      y);-   });-   var scale = function (s) {-      return A6(matrix,-      s,-      0,-      0,-      s,-      0,-      0);-   };-   var scaleX = function (x) {-      return A6(matrix,-      x,-      0,-      0,-      1,-      0,-      0);-   };-   var scaleY = function (y) {-      return A6(matrix,-      1,-      0,-      0,-      y,-      0,-      0);-   };-   var identity = $Native$Transform2D.identity;-   var Transform2D = {ctor: "Transform2D"};-   _elm.Transform2D.values = {_op: _op-                             ,identity: identity-                             ,matrix: matrix-                             ,multiply: multiply-                             ,rotation: rotation-                             ,translation: translation-                             ,scale: scale-                             ,scaleX: scaleX-                             ,scaleY: scaleY};-   return _elm.Transform2D.values;-};-Elm.VirtualDom = Elm.VirtualDom || {};-Elm.VirtualDom.make = function (_elm) {-   "use strict";-   _elm.VirtualDom = _elm.VirtualDom || {};-   if (_elm.VirtualDom.values)-   return _elm.VirtualDom.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "VirtualDom",-   $Graphics$Element = Elm.Graphics.Element.make(_elm),-   $Json$Decode = Elm.Json.Decode.make(_elm),-   $Native$VirtualDom = Elm.Native.VirtualDom.make(_elm),-   $Signal = Elm.Signal.make(_elm);-   var lazy3 = $Native$VirtualDom.lazy3;-   var lazy2 = $Native$VirtualDom.lazy2;-   var lazy = $Native$VirtualDom.lazy;-   var on = $Native$VirtualDom.on;-   var property = $Native$VirtualDom.property;-   var Property = {ctor: "Property"};-   var fromElement = $Native$VirtualDom.fromElement;-   var toElement = $Native$VirtualDom.toElement;-   var text = $Native$VirtualDom.text;-   var node = $Native$VirtualDom.node;-   var Node = {ctor: "Node"};-   _elm.VirtualDom.values = {_op: _op-                            ,Node: Node-                            ,node: node-                            ,text: text-                            ,toElement: toElement-                            ,fromElement: fromElement-                            ,Property: Property-                            ,property: property-                            ,on: on-                            ,lazy: lazy-                            ,lazy2: lazy2-                            ,lazy3: lazy3};-   return _elm.VirtualDom.values;-};-Elm.Window = Elm.Window || {};-Elm.Window.make = function (_elm) {-   "use strict";-   _elm.Window = _elm.Window || {};-   if (_elm.Window.values)-   return _elm.Window.values;-   var _op = {},-   _N = Elm.Native,-   _U = _N.Utils.make(_elm),-   _L = _N.List.make(_elm),-   _P = _N.Ports.make(_elm),-   $moduleName = "Window",-   $Native$Window = Elm.Native.Window.make(_elm),-   $Signal = Elm.Signal.make(_elm);-   var height = $Native$Window.height;-   var width = $Native$Window.width;-   var dimensions = $Native$Window.dimensions;-   _elm.Window.values = {_op: _op-                        ,dimensions: dimensions-                        ,width: width-                        ,height: height};-   return _elm.Window.values;-};-(function() {-'use strict';--function assert(bool, msg) {-    if (!bool) {-        throw new Error("Assertion error: " + msg);-    }-}---// SIDE BAR--var SIDE_BAR_ID = "elm-reactor-side-bar";-var SIDE_BAR_BODY_ID = "elm-reactor-side-bar-body";-var SIDE_BAR_WIDTH = 275;--var DARK_GREY = "#4A4A4A";-var LIGHT_GREY = "#E4E4E4";--function createSideBar() {-    var debuggingPanelExpanded = true;--    var sideBar = document.createElement("div");-    sideBar.id = SIDE_BAR_ID;--    var sideBarBody = document.createElement("div");-    sideBarBody.id = SIDE_BAR_BODY_ID;-    sideBarBody.style.overflow = "hidden";-    sideBarBody.style.height = "100%";--    // Create and style the panel-    sideBar.style.background = DARK_GREY;-    sideBar.style.width = SIDE_BAR_WIDTH + "px";-    sideBar.style.height = "100%";-    sideBar.style.position = "absolute";-    sideBar.style.top = "0px";-    sideBar.style.right = "0px";-    sideBar.style.transitionDuration = "0.3s";-    sideBar.style.opacity = 0.97;-    sideBar.style.zIndex = 1;--    // Prevent clicks from reaching the main elm instance under the panel-    sideBar.addEventListener("click", blockClicks);-    function blockClicks(e) {-        var event = e || window.event;-        event.cancelBubble = true;-        if (event.stopPropagation) {-            event.stopPropagation();-        }-    }--    // Create and style the button-    var tabWidth = 25;-    var sideBarTab = document.createElement("div");-    sideBarTab.id = "debugToggle";-    sideBarTab.style.position = "absolute";-    sideBarTab.style.width = tabWidth + "px";-    sideBarTab.style.height = "60px";-    sideBarTab.style.top = "50%";-    sideBarTab.style.left = "-" + tabWidth + "px";-    sideBarTab.style.borderTopLeftRadius = "3px";-    sideBarTab.style.borderBottomLeftRadius = "3px";-    sideBarTab.style.background = DARK_GREY;---    // Wire the button-    sideBarTab.onclick = function() {-        var toolPanel = document.getElementById(SIDE_BAR_ID);-        if (debuggingPanelExpanded){-            toolPanel.style.width = "0px";-            debuggingPanelExpanded = false;-        } else {-            toolPanel.style.right = "0px";-            toolPanel.style.width = SIDE_BAR_WIDTH + "px";-            debuggingPanelExpanded = true;-        }-    };--    sideBar.appendChild(sideBarTab);-    sideBar.appendChild(sideBarBody);-    return sideBar;-}---// ERROR MESSAGE--var ERROR_MESSAGE_ID = 'elm-reactor-error-message';--function initErrorMessage(message) {-    var node = document.createElement("pre");-    node.id = ERROR_MESSAGE_ID;-    node.innerHTML = message;-    node.style.zindex = 1;-    node.style.position = "absolute";-    node.style.top = "0";-    node.style.left = "0";-    node.style.color = DARK_GREY;-    node.style.backgroundColor = LIGHT_GREY;-    node.style.padding = "1em";-    node.style.margin = "1em";-    node.style.borderRadius = "10px";-    return node;-}---// EVENT BLOCKER--var EVENT_BLOCKER_ID = 'elm-reactor-event-blocker'--var eventsToIgnore = [-    "click", "mousemove", "mouseup", "mousedown", "mouseclick", "keydown",-    "keypress", "keyup", "touchstart", "touchend", "touchcancel", "touchleave",-    "touchmove", "pointermove", "pointerdown", "pointerup", "pointerover",-    "pointerout", "pointerenter", "pointerleave", "pointercancel"-];--function ignore(e) {-    var event = e || window.event;-    if (event.stopPropagation) {-        event.stopPropagation();-    }-    if (event.cancelBubble !== null) {-        event.cancelBubble = true;-    }-    if (event.preventDefault) {-        event.preventDefault();-    }-    return false;-}--function initEventBlocker() {-    var node = document.createElement("div");-    node.id = EVENT_BLOCKER_ID;-    node.style.position = "absolute";-    node.style.top = "0px";-    node.style.left = "0px";-    node.style.width = "100%";-    node.style.height = "100%";--    for (var i = eventsToIgnore.length; i-- ;) {-        node.addEventListener(eventsToIgnore[i], ignore, true);-    }--    return node;-}--function addEventBlocker(node) {-    if (!document.getElementById(EVENT_BLOCKER_ID)) {-        node.appendChild(initEventBlocker());-    }-}--function removeEventBlocker() {-    var blocker = document.getElementById(EVENT_BLOCKER_ID);-    if (blocker)-    {-        blocker.parentNode.removeChild(blocker);-    }-}----// CODE TO SET UP A MODULE FOR DEBUGGING--Elm.fullscreenDebug = function(moduleName, fileName) {-    var result = initModuleWithDebugState(moduleName);--    document.body.appendChild(createSideBar());--    var sideBar = Elm.embed(Elm.SideBar, document.getElementById(SIDE_BAR_BODY_ID), {-        eventCounter: 0,-        watches: [],-        showSwap: true-    });--    function updateWatches(index)-    {-        sideBar.ports.watches.send(watchesAt(index, result.debugState)); -    }--    sideBar.ports.scrubTo.subscribe(function(index) {-        jumpTo(index, result.debugState);-        updateWatches(index);-    });--    sideBar.ports.pause.subscribe(function(paused) {-        if (paused) {-            pause(result.debugState);-        } else {-            unpause(result.debugState);-            redoTraces(result.debugState);-        }-    });--    sideBar.ports.restart.subscribe(function() {-        restart(result.debugState);-        updateWatches(0);-    });--    sideBar.ports.permitSwap.subscribe(function(permitSwaps) {-        result.debugState.permitSwaps = permitSwaps;-    });--    result.debugState.onNotify = function(debugState) {-        sideBar.ports.eventCounter.send(debugState.index);-        updateWatches(debugState.index);-    };--    // handle swaps-    var updates = 'ws://' + window.location.host + '/socket?file=' + fileName-    var connection = new WebSocket(updates);-    connection.addEventListener('message', function(event) {-        if (result.debugState.permitSwaps)-        {-            result = swap(event.data, result.debugState, result.module.dispose);-            updateWatches(result.debugState.index);-        }-    });-    window.addEventListener("unload", function() {-        connection.close();-    });--    return result.module;-};---function initModuleWithDebugState(moduleName) {-    var debugState;--    function make(localRuntime) {-        var result = initAndWrap(getModule(moduleName), localRuntime);-        debugState = result.debugState;-        return result.values;-    }--    return {-        module: Elm.fullscreen({ make: make }),-        debugState: debugState-    };-}--function getModule(moduleName)-{-    var elmModule = Elm;-    var names = moduleName.split('.');-    for (var i = 0; i < names.length; ++i)-    {-        elmModule = elmModule[names[i]];-    }-    return elmModule;-}---// DEBUG STATE--function emptyDebugState()-{-    return {-        paused: false,-        pausedAtTime: 0,-        totalTimeLost: 0,--        index: 0,-        events: [],-        watches: [{}],-        snapshots: [],-        asyncCallbacks: [],--        initialSnapshot: [],-        initialAsyncCallbacks: [],-        signalGraphNodes: [],--        traces: {},-        traceCanvas: createCanvas(),--        permitSwaps: true,-        swapInProgress: false,--        onNotify: function() {},-        refreshScreen: function() {},-        node: null,-        notify: function() {}-    };-}--function restart(debugState)-{-    var running = !debugState.paused;-    if (running)-    {-        pause(debugState);-    }-    debugState.index = 0;-    debugState.events = [];-    debugState.watches = [debugState.watches[0]];--    var snap = debugState.initialSnapshot;-    debugState.snapshots = [snap];-    for (var i = snap.length; i--; )-    {-        debugState.signalGraphNodes[i].value = snap[i].value;-    }--    debugState.asyncCallbacks = debugState.initialAsyncCallbacks.map(function(thunk) {-        return {-            thunk: thunk,-            id: 0,-            executed: false-        };-    });--    debugState.traces = {};-    redoTraces(debugState);-    debugState.refreshScreen();--    if (running)-    {-        unpause(debugState);-    }-}--function pause(debugState)-{-    if (debugState.paused)-    {-        return;-    }-    debugState.paused = true;-    pauseAsyncCallbacks(debugState);-    debugState.pausedAtTime = Date.now();-    addEventBlocker(debugState.node);-}--function unpause(debugState)-{-    debugState.paused = false;--    // add delay due to the pause itself-    var pauseDelay = Date.now() - debugState.pausedAtTime;-    debugState.totalTimeLost += pauseDelay;--    // add delay if travelling to older event-    if (debugState.index < debugState.events.length - 1)-    {-        debugState.totalTimeLost = Date.now() - debugState.events[debugState.index].time;-    }--    // clear out future snapshots, events, and traces-    var nearestSnapshotIndex = Math.floor(debugState.index / EVENTS_PER_SAVE);-    debugState.snapshots = debugState.snapshots.slice(0, nearestSnapshotIndex + 1);-    debugState.events = debugState.events.slice(0, debugState.index);-    clearTracesAfter(debugState.index, debugState);-    clearWatchesAfter(debugState.index, debugState);--    unpauseAsyncCallbacks(debugState.asyncCallbacks);--    removeEventBlocker();-}--function jumpTo(index, debugState)-{-    if (!debugState.paused)-    {-        pause(debugState);-    }--    assert(-        0 <= index && index <= debugState.events.length,-        "Trying to step to non-existent event index " + index);--    var potentialIndex = indexOfSnapshotBefore(index);-    if (index < debugState.index || potentialIndex > debugState.index)-    {-        var snapshot = getNearestSnapshot(index, debugState.snapshots);--        for (var i = debugState.signalGraphNodes.length; i-- ; )-        {-            debugState.signalGraphNodes[i].value = snapshot[i].value;-        }--        debugState.index = potentialIndex;-    }--    while (debugState.index < index)-    {-        var event = debugState.events[debugState.index];-        debugState.notify(event.id, event.value, event.time);-        debugState.index += 1;-    }-    redoTraces(debugState);-}--function swap(rawJsonResponse, debugState, freeOldRuntime) {-    var error = document.getElementById(ERROR_MESSAGE_ID);-    if (error)-    {-        error.parentNode.removeChild(error);-    }--    var result = JSON.parse(rawJsonResponse);--    if (!result.code)-    {-        var msg = result.error || 'something went wrong with swap';-        document.body.appendChild(initErrorMessage(msg));-        return null;-    }-    // TODO: pause/unpause?-    pauseAsyncCallbacks(debugState);-    window.eval(result.code);--    // remove old nodes-    debugState.node.parentNode.removeChild(debugState.node);-    document.body.removeChild(debugState.traceCanvas);-    freeOldRuntime();--    var result = initModuleWithDebugState(result.name);-    transferState(debugState, result.debugState);-    return result;-}--function transferState(previousDebugState, debugState)-{-    debugState.swapInProgress = true;-    debugState.events = previousDebugState.events;-    debugState.onNotify = previousDebugState.onNotify;--    if (previousDebugState.paused)-    {-        debugState.paused = true;-        pauseAsyncCallbacks(debugState);-        debugState.pausedAtTime = previousDebugState.pausedAtTime;-        debugState.totalTimeLost = previousDebugState.totalTimeLost;-        addEventBlocker(debugState.node);-    }--    while (debugState.index < debugState.events.length)-    {-        var event = debugState.events[debugState.index];-        debugState.index += 1;-        pushWatchFrame(debugState);--        debugState.notify(event.id, event.value, event.time);-        snapshotIfNeeded(debugState);-    }-    redoTraces(debugState);-    debugState.swapInProgress = false;--    jumpTo(previousDebugState.index, debugState);-}---// CALLBACKS--// TODO: is it weird that the callbacks array never shrinks?--function unpauseAsyncCallbacks(callbacks) {-    callbacks.forEach(function(callback) {-        if (!callback.executed) {-            callback.executed = true;-            callback.thunk();-        }-    });-}--function pauseAsyncCallbacks(debugState) {-    debugState.asyncCallbacks.forEach(function(callback) {-        if (!callback.executed) {-            clearTimeout(callback.id);-        }-    });-}----// TRACES--function clearTracesAfter(index, debugState)-{-    var newTraces = {};-    for (var id in debugState.traces)-    {-        var trace = debugState.traces[id];-        for (var i = trace.length; i--; )-        {-            if (trace[i].index < index)-            {-                newTraces[id] = debugState.traces[id].slice(0, i + 1);-                break;-            }-        }-    }-    debugState.traces = newTraces;-}--function createCanvas() {-    var canvas = document.createElement('canvas');-    // TODO: make dimensions adjust based on screen size-    canvas.width = window.innerWidth;-    canvas.height = window.innerHeight;-    canvas.style.position = "absolute";-    canvas.style.top = "0";-    canvas.style.left = "0";-    canvas.style.pointerEvents = "none";-    return canvas;-}--function addTraces(debugState)-{-    var ctx = debugState.traceCanvas.getContext('2d');--    ctx.save();-    for (var id in debugState.traces)-    {-        var points = debugState.traces[id];-        if (points.length < 2)-        {-            continue;-        }-        var lastTracePoint = points[points.length - 1];-        if (lastTracePoint.index < debugState.index - 1)-        {-            continue;-        }-        ctx.beginPath();-        ctx.moveTo(lastTracePoint.x, lastTracePoint.y);-        var secondToLastTracePoint = points[points.length - 2];-        ctx.lineTo(secondToLastTracePoint.x, secondToLastTracePoint.y);--        ctx.lineWidth = 1;-        ctx.strokeStyle = "rgba(50, 50, 50, 0.4)";-        ctx.stroke();-    }-    ctx.restore();-}--function redoTraces(debugState) {-    var ctx = debugState.traceCanvas.getContext('2d');--    // TODO: be more clever about the size of the canvas on resize-    ctx.clearRect(0, 0, debugState.traceCanvas.width, debugState.traceCanvas.height);--    ctx.save();-    for (var id in debugState.traces)-    {-        var points = debugState.traces[id];-        var length = points.length;-        if (length < 2)-        {-            continue;-        }-        ctx.beginPath();-        ctx.lineWidth = 1;-        ctx.moveTo(points[0].x, points[0].y);-        var currentIndex = debugState.index;-        var traceIndex = points[0].index;-        for (var i = 1; traceIndex < currentIndex && i < length; ++i)-        {-            var point = points[i];-            ctx.lineTo(point.x, point.y);-            traceIndex = point.index;-        }-        ctx.strokeStyle = "rgba(50, 50, 50, 0.4)";-        ctx.stroke();--        for (; i < length; ++i)-        {-            var point = points[i];-            ctx.lineTo(point.x, point.y);-            traceIndex = point.index;-        }-        ctx.strokeStyle = "rgba(50, 50, 50, 0.2)";-        ctx.stroke();-    }-    ctx.restore();-}--function makeTraceRecorder(debugState, runtime)-{-    var List = Elm.List.make(runtime);-    var Transform = Elm.Transform2D.make(runtime);--    function crawlElement(element)-    {-        if (debugState.paused && !debugState.swapInProgress)-        {-            return;-        }--        var e = element.element;-        if (!e)-        {-            return;-        }-        if (e.ctor === 'Custom' && e.type === 'Collage')-        {-            var w = element.props.width;-            var h = element.props.height;-            var identity = A6( Transform.matrix, 1, 0, 0, -1, w/2, h/2 );-            return A2(List.map, crawlForm(identity), e.model.forms);-        }-    }--    function crawlForm(matrix)-    {-        return function(form) {-            if (form.form.ctor == "FGroup")-            {-                var scale = form.scale;-                var localMatrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );--                var theta = form.theta-                if (theta !== 0)-                {-                    localMatrix = A2( Transform.multiply, localMatrix, Transform.rotation(theta) );-                }--                var newMatrix = A2( Transform.multiply, matrix, localMatrix );-                A2(List.map, crawlForm(newMatrix), form.form._1);-            }--            var tag = form.trace;-            if (!tag)-            {-                return;-            }--            var x = matrix[0] * form.x + matrix[1] * form.y + matrix[2];-            var y = matrix[3] * form.x + matrix[4] * form.y + matrix[5];--            if ( !(tag in debugState.traces) )-            {-                debugState.traces[tag] = [{ index: debugState.index, x: x, y: y }];-                return;-            }                --            var trace = debugState.traces[tag];-            var lastPoint = trace[trace.length - 1];-            if (lastPoint.x === x && lastPoint.y === y)-            {-                return;-            }-            trace.push({ index: debugState.index, x: x, y: y });-        }-    }--    return crawlElement;-}---// SNAPSHOTS--var EVENTS_PER_SAVE = 100;--function snapshotIfNeeded(debugState)-{-    if (debugState.index % EVENTS_PER_SAVE === 0)-    {-        debugState.snapshots.push(createSnapshot(debugState.signalGraphNodes));-    }-}--function indexOfSnapshotBefore(index)-{-    return Math.floor(index / EVENTS_PER_SAVE) * EVENTS_PER_SAVE;-}--function getNearestSnapshot(i, snapshots)-{-    var snapshotIndex = Math.floor(i / EVENTS_PER_SAVE);-    assert(-        snapshotIndex < snapshots.length && snapshotIndex >= 0,-        "Trying to access non-existent snapshot (event " + i + ", snapshot " + snapshotIndex + ")");-    return snapshots[snapshotIndex];-}--function createSnapshot(signalGraphNodes)-{-    var nodeValues = [];--    signalGraphNodes.forEach(function(node) {-        nodeValues.push({ value: node.value, id: node.id });-    });--    return nodeValues;-}--function flattenSignalGraph(nodes)-{-    var nodesById = {};--    function addAllToDict(node) {-        nodesById[node.id] = node;-        node.kids.forEach(addAllToDict);-    }-    nodes.forEach(addAllToDict);--    var allNodes = Object.keys(nodesById).sort(compareNumbers).map(function(key) {-        return nodesById[key];-    });-    return allNodes;-}--function compareNumbers(a, b) {-    return a - b;-}---// WRAP THE RUNTIME--function initAndWrap(elmModule, runtime)-{-    var debugState = emptyDebugState();--    // runtime is the prototype of wrappedRuntime-    // so we can access all runtime properties too-    var wrappedRuntime = Object.create(runtime);-    wrappedRuntime.notify = notifyWrapper;-    wrappedRuntime.setTimeout = setTimeoutWrapper;--    // make a copy of the wrappedRuntime-    var assignedPropTracker = Object.create(wrappedRuntime);-    var values = elmModule.make(assignedPropTracker);--    // make sure the signal graph is actually a signal & extract the visual model-    var Signal = Elm.Signal.make(assignedPropTracker);-    if ( !('recv' in values.main) )-    {-        values.main = Signal.constant(values.main);-    }-    A2(Signal.map, makeTraceRecorder(debugState, assignedPropTracker), values.main);--    debugState.refreshScreen = function() {-        var main = values.main-        for (var i = main.kids.length ; i-- ; )-        {-            main.kids[i].recv(runtime.timer.now(), true, main.id);-        }-    };--    // The main module stores imported modules onto the runtime.-    // To ensure only one instance of each module is created,-    // we assign them back on the original runtime object.-    Object.keys(assignedPropTracker).forEach(function(key) {-        runtime[key] = assignedPropTracker[key];-    });--    debugState.signalGraphNodes = flattenSignalGraph(wrappedRuntime.inputs);-    debugState.initialSnapshot = createSnapshot(debugState.signalGraphNodes);-    debugState.snapshots = [debugState.initialSnapshot];-    debugState.initialAsyncCallbacks = debugState.asyncCallbacks.map(function(callback) {-        return callback.thunk;-    });-    debugState.node = runtime.node;-    debugState.notify = runtime.notify;--    // Tracing stuff-    document.body.appendChild(debugState.traceCanvas);--    var replace = Elm.Native.Utils.make(assignedPropTracker).replace;--    runtime.timer.now = function() {-        return Date.now() - debugState.totalTimeLost;-    };--    runtime.debug = {};--    runtime.debug.trace = function(tag, form) {-        return replace([['trace', tag]], form);-    }--    runtime.debug.watch = function(tag, value) {-        if (debugState.paused && !debugState.swapInProgress)-        {-            return;-        }-        var index = debugState.index;-        var numWatches = debugState.watches.length - 1;-        assert(-            index === numWatches,-            'number of watch frames (' + numWatches + ') should match current index (' + index + ')');-        debugState.watches[debugState.index][tag] = value;-    }--    function notifyWrapper(id, value)-    {-        // Ignore all events that occur while the program is paused.-        if (debugState.paused)-        {-            return false;-        }--        // Record the event-        debugState.events.push({ id: id, value: value, time: runtime.timer.now() });-        debugState.index += 1;-        pushWatchFrame(debugState);--        var changed = runtime.notify(id, value);--        snapshotIfNeeded(debugState);-        debugState.onNotify(debugState);-        addTraces(debugState);--        return changed;-    }--    function setTimeoutWrapper(thunk, delay)-    {-        if (debugState.paused)-        {-            return 0;-        }--        var callback = {-            thunk: thunk,-            id: 0,-            executed: false-        };--        callback.id = setTimeout(function() {-            callback.executed = true;-            thunk();-        }, delay);--        debugState.asyncCallbacks.push(callback);-        return callback.id;-    }--    return {-        values: values,-        debugState: debugState-    };-}---// WATCHES--function watchesAt(index, debugState)-{-    var watchSnapshot = [];-    var watches = debugState.watches[index];--    for (var name in watches)-    {-        var value = prettyPrint(watches[name], "  ");-        watchSnapshot.push([ name, value ]);-    }-    return watchSnapshot;-}--function pushWatchFrame(debugState)-{-    var length = debugState.watches.length;-    var oldFrame = length === 0 ? {} : debugState.watches[length - 1];-    var newFrame = {};-    for (var tag in oldFrame)-    {-        newFrame[tag] = oldFrame[tag];-    }-    debugState.watches.push(newFrame);-}--function clearWatchesAfter(index, debugState)-{-    debugState.watches = debugState.watches.slice(0, index + 1);-}--var prettyPrint = function() {--    var independentRuntime = {};-    var List;-    var ElmArray;-    var Dict;--    var toString = function(v, separator) {-        var type = typeof v;-        if (type === "function") {-            var name = v.func ? v.func.name : v.name;-            return '<function' + (name === '' ? '' : ': ') + name + '>';-        } else if (type === "boolean") {-            return v ? "True" : "False";-        } else if (type === "number") {-            return v.toFixed(2).replace(/\.0+$/g, '');-        } else if ((v instanceof String) && v.isChar) {-            return "'" + addSlashes(v) + "'";-        } else if (type === "string") {-            return '"' + addSlashes(v) + '"';-        } else if (type === "object" && '_' in v && probablyPublic(v)) {-            var output = [];-            for (var k in v._) {-                for (var i = v._[k].length; i--; ) {-                    output.push(k + " = " + toString(v._[k][i], separator));-                }-            }-            for (var k in v) {-                if (k === '_') continue;-                output.push(k + " = " + toString(v[k], separator));-            }-            if (output.length === 0) return "{}";-            var body = "\n" + output.join(",\n");-            return "{" + body.replace(/\n/g,"\n" + separator) + "\n}";-        } else if (type === "object" && 'ctor' in v) {-            if (v.ctor.substring(0,6) === "_Tuple") {-                var output = [];-                for (var k in v) {-                    if (k === 'ctor') continue;-                    output.push(toString(v[k], separator));-                }-                return "(" + output.join(", ") + ")";-            } else if (v.ctor === "_Array") {-                if (!ElmArray) {-                    ElmArray = Elm.Array.make(independentRuntime);-                }-                var list = ElmArray.toList(v);-                return "Array.fromList " + toString(list, separator);-            } else if (v.ctor === "::") {-                var output = '[\n' + toString(v._0, separator);-                v = v._1;-                while (v && v.ctor === "::") {-                    output += ",\n" + toString(v._0, separator);-                    v = v._1;-                }-                return output.replace(/\n/g,"\n" + separator) + "\n]";-            } else if (v.ctor === "[]") {-                return "[]";-            } else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {-                if (!Dict || !List) {-                    Dict = Elm.Dict.make(independentRuntime);-                    List = Elm.List.make(independentRuntime);-                }-                var list = Dict.toList(v);-                var name = "Dict";-                if (list.ctor === "::" && list._0._1.ctor === "_Tuple0") {-                    name = "Set";-                    list = A2(List.map, function(x){return x._0}, list);-                }-                return name + ".fromList " + toString(list, separator);-            } else {-                var output = "";-                for (var i in v) {-                    if (i === 'ctor') continue;-                    var str = toString(v[i], separator);-                    var parenless = str[0] === '{' ||-                                    str[0] === '<' ||-                                    str[0] === "[" ||-                                    str.indexOf(' ') < 0;-                    output += ' ' + (parenless ? str : "(" + str + ')');-                }-                return v.ctor + output;-            }-        }-        if (type === 'object' && 'recv' in v) return '<signal>';+   $moduleName = "Array",+   $Basics = Elm.Basics.make(_elm),+   $List = Elm.List.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Array = Elm.Native.Array.make(_elm);+   var append = $Native$Array.append;+   var length = $Native$Array.length;+   var slice = $Native$Array.slice;+   var set = $Native$Array.set;+   var get = F2(function (i,+   array) {+      return _U.cmp(0,+      i) < 1 && _U.cmp(i,+      $Native$Array.length(array)) < 0 ? $Maybe.Just(A2($Native$Array.get,+      i,+      array)) : $Maybe.Nothing;+   });+   var push = $Native$Array.push;+   var empty = $Native$Array.empty;+   var filter = F2(function (isOkay,+   arr) {+      return function () {+         var update = F2(function (x,+         xs) {+            return isOkay(x) ? A2($Native$Array.push,+            x,+            xs) : xs;+         });+         return A3($Native$Array.foldl,+         update,+         $Native$Array.empty,+         arr);+      }();+   });+   var foldr = $Native$Array.foldr;+   var foldl = $Native$Array.foldl;+   var indexedMap = $Native$Array.indexedMap;+   var map = $Native$Array.map;+   var toIndexedList = function (array) {+      return A3($List.map2,+      F2(function (v0,v1) {+         return {ctor: "_Tuple2"+                ,_0: v0+                ,_1: v1};+      }),+      _L.range(0,+      $Native$Array.length(array) - 1),+      $Native$Array.toList(array));+   };+   var toList = $Native$Array.toList;+   var fromList = $Native$Array.fromList;+   var initialize = $Native$Array.initialize;+   var repeat = F2(function (n,e) {+      return A2(initialize,+      n,+      $Basics.always(e));+   });+   var Array = {ctor: "Array"};+   _elm.Array.values = {_op: _op+                       ,empty: empty+                       ,repeat: repeat+                       ,initialize: initialize+                       ,fromList: fromList+                       ,length: length+                       ,push: push+                       ,append: append+                       ,get: get+                       ,set: set+                       ,slice: slice+                       ,toList: toList+                       ,toIndexedList: toIndexedList+                       ,map: map+                       ,indexedMap: indexedMap+                       ,filter: filter+                       ,foldl: foldl+                       ,foldr: foldr};+   return _elm.Array.values;+};+Elm.Basics = Elm.Basics || {};+Elm.Basics.make = function (_elm) {+   "use strict";+   _elm.Basics = _elm.Basics || {};+   if (_elm.Basics.values)+   return _elm.Basics.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Basics",+   $Native$Basics = Elm.Native.Basics.make(_elm),+   $Native$Show = Elm.Native.Show.make(_elm),+   $Native$Utils = Elm.Native.Utils.make(_elm);+   var uncurry = F2(function (f,+   _v0) {+      return function () {+         switch (_v0.ctor)+         {case "_Tuple2": return A2(f,+              _v0._0,+              _v0._1);}+         _U.badCase($moduleName,+         "on line 595, column 3 to 8");+      }();+   });+   var curry = F3(function (f,+   a,+   b) {+      return f({ctor: "_Tuple2"+               ,_0: a+               ,_1: b});+   });+   var flip = F3(function (f,b,a) {+      return A2(f,a,b);+   });+   var snd = function (_v4) {+      return function () {+         switch (_v4.ctor)+         {case "_Tuple2": return _v4._1;}+         _U.badCase($moduleName,+         "on line 573, column 3 to 4");+      }();+   };+   var fst = function (_v8) {+      return function () {+         switch (_v8.ctor)+         {case "_Tuple2": return _v8._0;}+         _U.badCase($moduleName,+         "on line 567, column 3 to 4");+      }();+   };+   var always = F2(function (a,+   _v12) {+      return function () {+         return a;+      }();+   });+   var identity = function (x) {+      return x;+   };+   _op["<|"] = F2(function (f,x) {+      return f(x);+   });+   _op["|>"] = F2(function (x,f) {+      return f(x);+   });+   _op[">>"] = F3(function (f,+   g,+   x) {+      return g(f(x));+   });+   _op["<<"] = F3(function (g,+   f,+   x) {+      return g(f(x));+   });+   _op["++"] = $Native$Utils.append;+   var toString = $Native$Show.toString;+   var isInfinite = $Native$Basics.isInfinite;+   var isNaN = $Native$Basics.isNaN;+   var toFloat = $Native$Basics.toFloat;+   var ceiling = $Native$Basics.ceiling;+   var floor = $Native$Basics.floor;+   var truncate = $Native$Basics.truncate;+   var round = $Native$Basics.round;+   var otherwise = true;+   var not = $Native$Basics.not;+   var xor = $Native$Basics.xor;+   _op["||"] = $Native$Basics.or;+   _op["&&"] = $Native$Basics.and;+   var max = $Native$Basics.max;+   var min = $Native$Basics.min;+   var GT = {ctor: "GT"};+   var EQ = {ctor: "EQ"};+   var LT = {ctor: "LT"};+   var compare = $Native$Basics.compare;+   _op[">="] = $Native$Basics.ge;+   _op["<="] = $Native$Basics.le;+   _op[">"] = $Native$Basics.gt;+   _op["<"] = $Native$Basics.lt;+   _op["/="] = $Native$Basics.neq;+   _op["=="] = $Native$Basics.eq;+   var e = $Native$Basics.e;+   var pi = $Native$Basics.pi;+   var clamp = $Native$Basics.clamp;+   var logBase = $Native$Basics.logBase;+   var abs = $Native$Basics.abs;+   var negate = $Native$Basics.negate;+   var sqrt = $Native$Basics.sqrt;+   var atan2 = $Native$Basics.atan2;+   var atan = $Native$Basics.atan;+   var asin = $Native$Basics.asin;+   var acos = $Native$Basics.acos;+   var tan = $Native$Basics.tan;+   var sin = $Native$Basics.sin;+   var cos = $Native$Basics.cos;+   _op["^"] = $Native$Basics.exp;+   _op["%"] = $Native$Basics.mod;+   var rem = $Native$Basics.rem;+   _op["//"] = $Native$Basics.div;+   _op["/"] = $Native$Basics.floatDiv;+   _op["*"] = $Native$Basics.mul;+   _op["-"] = $Native$Basics.sub;+   _op["+"] = $Native$Basics.add;+   var toPolar = $Native$Basics.toPolar;+   var fromPolar = $Native$Basics.fromPolar;+   var turns = $Native$Basics.turns;+   var degrees = $Native$Basics.degrees;+   var radians = function (t) {+      return t;+   };+   _elm.Basics.values = {_op: _op+                        ,max: max+                        ,min: min+                        ,compare: compare+                        ,not: not+                        ,xor: xor+                        ,otherwise: otherwise+                        ,rem: rem+                        ,negate: negate+                        ,abs: abs+                        ,sqrt: sqrt+                        ,clamp: clamp+                        ,logBase: logBase+                        ,e: e+                        ,pi: pi+                        ,cos: cos+                        ,sin: sin+                        ,tan: tan+                        ,acos: acos+                        ,asin: asin+                        ,atan: atan+                        ,atan2: atan2+                        ,round: round+                        ,floor: floor+                        ,ceiling: ceiling+                        ,truncate: truncate+                        ,toFloat: toFloat+                        ,degrees: degrees+                        ,radians: radians+                        ,turns: turns+                        ,toPolar: toPolar+                        ,fromPolar: fromPolar+                        ,isNaN: isNaN+                        ,isInfinite: isInfinite+                        ,toString: toString+                        ,fst: fst+                        ,snd: snd+                        ,identity: identity+                        ,always: always+                        ,flip: flip+                        ,curry: curry+                        ,uncurry: uncurry+                        ,LT: LT+                        ,EQ: EQ+                        ,GT: GT};+   return _elm.Basics.values;+};+Elm.Char = Elm.Char || {};+Elm.Char.make = function (_elm) {+   "use strict";+   _elm.Char = _elm.Char || {};+   if (_elm.Char.values)+   return _elm.Char.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Char",+   $Basics = Elm.Basics.make(_elm),+   $Native$Char = Elm.Native.Char.make(_elm);+   var fromCode = $Native$Char.fromCode;+   var toCode = $Native$Char.toCode;+   var toLocaleLower = $Native$Char.toLocaleLower;+   var toLocaleUpper = $Native$Char.toLocaleUpper;+   var toLower = $Native$Char.toLower;+   var toUpper = $Native$Char.toUpper;+   var isBetween = F3(function (low,+   high,+   $char) {+      return function () {+         var code = toCode($char);+         return _U.cmp(code,+         toCode(low)) > -1 && _U.cmp(code,+         toCode(high)) < 1;+      }();+   });+   var isUpper = A2(isBetween,+   _U.chr("A"),+   _U.chr("Z"));+   var isLower = A2(isBetween,+   _U.chr("a"),+   _U.chr("z"));+   var isDigit = A2(isBetween,+   _U.chr("0"),+   _U.chr("9"));+   var isOctDigit = A2(isBetween,+   _U.chr("0"),+   _U.chr("7"));+   var isHexDigit = function ($char) {+      return isDigit($char) || (A3(isBetween,+      _U.chr("a"),+      _U.chr("f"),+      $char) || A3(isBetween,+      _U.chr("A"),+      _U.chr("F"),+      $char));+   };+   _elm.Char.values = {_op: _op+                      ,isUpper: isUpper+                      ,isLower: isLower+                      ,isDigit: isDigit+                      ,isOctDigit: isOctDigit+                      ,isHexDigit: isHexDigit+                      ,toUpper: toUpper+                      ,toLower: toLower+                      ,toLocaleUpper: toLocaleUpper+                      ,toLocaleLower: toLocaleLower+                      ,toCode: toCode+                      ,fromCode: fromCode};+   return _elm.Char.values;+};+Elm.Color = Elm.Color || {};+Elm.Color.make = function (_elm) {+   "use strict";+   _elm.Color = _elm.Color || {};+   if (_elm.Color.values)+   return _elm.Color.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Color",+   $Basics = Elm.Basics.make(_elm);+   var Radial = F5(function (a,+   b,+   c,+   d,+   e) {+      return {ctor: "Radial"+             ,_0: a+             ,_1: b+             ,_2: c+             ,_3: d+             ,_4: e};+   });+   var radial = Radial;+   var Linear = F3(function (a,+   b,+   c) {+      return {ctor: "Linear"+             ,_0: a+             ,_1: b+             ,_2: c};+   });+   var linear = Linear;+   var fmod = F2(function (f,n) {+      return function () {+         var integer = $Basics.floor(f);+         return $Basics.toFloat(A2($Basics._op["%"],+         integer,+         n)) + f - $Basics.toFloat(integer);+      }();+   });+   var rgbToHsl = F3(function (red,+   green,+   blue) {+      return function () {+         var b = $Basics.toFloat(blue) / 255;+         var g = $Basics.toFloat(green) / 255;+         var r = $Basics.toFloat(red) / 255;+         var cMax = A2($Basics.max,+         A2($Basics.max,r,g),+         b);+         var cMin = A2($Basics.min,+         A2($Basics.min,r,g),+         b);+         var c = cMax - cMin;+         var lightness = (cMax + cMin) / 2;+         var saturation = _U.eq(lightness,+         0) ? 0 : c / (1 - $Basics.abs(2 * lightness - 1));+         var hue = $Basics.degrees(60) * (_U.eq(cMax,+         r) ? A2(fmod,+         (g - b) / c,+         6) : _U.eq(cMax,+         g) ? (b - r) / c + 2 : _U.eq(cMax,+         b) ? (r - g) / c + 4 : _U.badIf($moduleName,+         "between lines 150 and 152"));+         return {ctor: "_Tuple3"+                ,_0: hue+                ,_1: saturation+                ,_2: lightness};+      }();+   });+   var hslToRgb = F3(function (hue,+   saturation,+   lightness) {+      return function () {+         var hue$ = hue / $Basics.degrees(60);+         var chroma = (1 - $Basics.abs(2 * lightness - 1)) * saturation;+         var x = chroma * (1 - $Basics.abs(A2(fmod,+         hue$,+         2) - 1));+         var $ = _U.cmp(hue$,+         0) < 0 ? {ctor: "_Tuple3"+                  ,_0: 0+                  ,_1: 0+                  ,_2: 0} : _U.cmp(hue$,+         1) < 0 ? {ctor: "_Tuple3"+                  ,_0: chroma+                  ,_1: x+                  ,_2: 0} : _U.cmp(hue$,+         2) < 0 ? {ctor: "_Tuple3"+                  ,_0: x+                  ,_1: chroma+                  ,_2: 0} : _U.cmp(hue$,+         3) < 0 ? {ctor: "_Tuple3"+                  ,_0: 0+                  ,_1: chroma+                  ,_2: x} : _U.cmp(hue$,+         4) < 0 ? {ctor: "_Tuple3"+                  ,_0: 0+                  ,_1: x+                  ,_2: chroma} : _U.cmp(hue$,+         5) < 0 ? {ctor: "_Tuple3"+                  ,_0: x+                  ,_1: 0+                  ,_2: chroma} : _U.cmp(hue$,+         6) < 0 ? {ctor: "_Tuple3"+                  ,_0: chroma+                  ,_1: 0+                  ,_2: x} : {ctor: "_Tuple3"+                            ,_0: 0+                            ,_1: 0+                            ,_2: 0},+         r = $._0,+         g = $._1,+         b = $._2;+         var m = lightness - chroma / 2;+         return {ctor: "_Tuple3"+                ,_0: r + m+                ,_1: g + m+                ,_2: b + m};+      }();+   });+   var toRgb = function (color) {+      return function () {+         switch (color.ctor)+         {case "HSLA":+            return function () {+                 var $ = A3(hslToRgb,+                 color._0,+                 color._1,+                 color._2),+                 r = $._0,+                 g = $._1,+                 b = $._2;+                 return {_: {}+                        ,alpha: color._3+                        ,blue: $Basics.round(255 * b)+                        ,green: $Basics.round(255 * g)+                        ,red: $Basics.round(255 * r)};+              }();+            case "RGBA": return {_: {}+                                ,alpha: color._3+                                ,blue: color._2+                                ,green: color._1+                                ,red: color._0};}+         _U.badCase($moduleName,+         "between lines 124 and 132");+      }();+   };+   var toHsl = function (color) {+      return function () {+         switch (color.ctor)+         {case "HSLA": return {_: {}+                              ,alpha: color._3+                              ,hue: color._0+                              ,lightness: color._2+                              ,saturation: color._1};+            case "RGBA":+            return function () {+                 var $ = A3(rgbToHsl,+                 color._0,+                 color._1,+                 color._2),+                 h = $._0,+                 s = $._1,+                 l = $._2;+                 return {_: {}+                        ,alpha: color._3+                        ,hue: h+                        ,lightness: l+                        ,saturation: s};+              }();}+         _U.badCase($moduleName,+         "between lines 114 and 121");+      }();+   };+   var HSLA = F4(function (a,+   b,+   c,+   d) {+      return {ctor: "HSLA"+             ,_0: a+             ,_1: b+             ,_2: c+             ,_3: d};+   });+   var hsla = F4(function (hue,+   saturation,+   lightness,+   alpha) {+      return A4(HSLA,+      hue - $Basics.turns($Basics.toFloat($Basics.floor(hue / (2 * $Basics.pi)))),+      saturation,+      lightness,+      alpha);+   });+   var hsl = F3(function (hue,+   saturation,+   lightness) {+      return A4(hsla,+      hue,+      saturation,+      lightness,+      1);+   });+   var complement = function (color) {+      return function () {+         switch (color.ctor)+         {case "HSLA": return A4(hsla,+              color._0 + $Basics.degrees(180),+              color._1,+              color._2,+              color._3);+            case "RGBA":+            return function () {+                 var $ = A3(rgbToHsl,+                 color._0,+                 color._1,+                 color._2),+                 h = $._0,+                 s = $._1,+                 l = $._2;+                 return A4(hsla,+                 h + $Basics.degrees(180),+                 s,+                 l,+                 color._3);+              }();}+         _U.badCase($moduleName,+         "between lines 105 and 111");+      }();+   };+   var grayscale = function (p) {+      return A4(HSLA,0,0,1 - p,1);+   };+   var greyscale = function (p) {+      return A4(HSLA,0,0,1 - p,1);+   };+   var RGBA = F4(function (a,+   b,+   c,+   d) {+      return {ctor: "RGBA"+             ,_0: a+             ,_1: b+             ,_2: c+             ,_3: d};+   });+   var rgba = RGBA;+   var rgb = F3(function (r,g,b) {+      return A4(RGBA,r,g,b,1);+   });+   var lightRed = A4(RGBA,+   239,+   41,+   41,+   1);+   var red = A4(RGBA,204,0,0,1);+   var darkRed = A4(RGBA,+   164,+   0,+   0,+   1);+   var lightOrange = A4(RGBA,+   252,+   175,+   62,+   1);+   var orange = A4(RGBA,+   245,+   121,+   0,+   1);+   var darkOrange = A4(RGBA,+   206,+   92,+   0,+   1);+   var lightYellow = A4(RGBA,+   255,+   233,+   79,+   1);+   var yellow = A4(RGBA,+   237,+   212,+   0,+   1);+   var darkYellow = A4(RGBA,+   196,+   160,+   0,+   1);+   var lightGreen = A4(RGBA,+   138,+   226,+   52,+   1);+   var green = A4(RGBA,+   115,+   210,+   22,+   1);+   var darkGreen = A4(RGBA,+   78,+   154,+   6,+   1);+   var lightBlue = A4(RGBA,+   114,+   159,+   207,+   1);+   var blue = A4(RGBA,+   52,+   101,+   164,+   1);+   var darkBlue = A4(RGBA,+   32,+   74,+   135,+   1);+   var lightPurple = A4(RGBA,+   173,+   127,+   168,+   1);+   var purple = A4(RGBA,+   117,+   80,+   123,+   1);+   var darkPurple = A4(RGBA,+   92,+   53,+   102,+   1);+   var lightBrown = A4(RGBA,+   233,+   185,+   110,+   1);+   var brown = A4(RGBA,+   193,+   125,+   17,+   1);+   var darkBrown = A4(RGBA,+   143,+   89,+   2,+   1);+   var black = A4(RGBA,0,0,0,1);+   var white = A4(RGBA,+   255,+   255,+   255,+   1);+   var lightGrey = A4(RGBA,+   238,+   238,+   236,+   1);+   var grey = A4(RGBA,+   211,+   215,+   207,+   1);+   var darkGrey = A4(RGBA,+   186,+   189,+   182,+   1);+   var lightGray = A4(RGBA,+   238,+   238,+   236,+   1);+   var gray = A4(RGBA,+   211,+   215,+   207,+   1);+   var darkGray = A4(RGBA,+   186,+   189,+   182,+   1);+   var lightCharcoal = A4(RGBA,+   136,+   138,+   133,+   1);+   var charcoal = A4(RGBA,+   85,+   87,+   83,+   1);+   var darkCharcoal = A4(RGBA,+   46,+   52,+   54,+   1);+   _elm.Color.values = {_op: _op+                       ,rgb: rgb+                       ,rgba: rgba+                       ,hsl: hsl+                       ,hsla: hsla+                       ,greyscale: greyscale+                       ,grayscale: grayscale+                       ,complement: complement+                       ,linear: linear+                       ,radial: radial+                       ,toRgb: toRgb+                       ,toHsl: toHsl+                       ,red: red+                       ,orange: orange+                       ,yellow: yellow+                       ,green: green+                       ,blue: blue+                       ,purple: purple+                       ,brown: brown+                       ,lightRed: lightRed+                       ,lightOrange: lightOrange+                       ,lightYellow: lightYellow+                       ,lightGreen: lightGreen+                       ,lightBlue: lightBlue+                       ,lightPurple: lightPurple+                       ,lightBrown: lightBrown+                       ,darkRed: darkRed+                       ,darkOrange: darkOrange+                       ,darkYellow: darkYellow+                       ,darkGreen: darkGreen+                       ,darkBlue: darkBlue+                       ,darkPurple: darkPurple+                       ,darkBrown: darkBrown+                       ,white: white+                       ,lightGrey: lightGrey+                       ,grey: grey+                       ,darkGrey: darkGrey+                       ,lightCharcoal: lightCharcoal+                       ,charcoal: charcoal+                       ,darkCharcoal: darkCharcoal+                       ,black: black+                       ,lightGray: lightGray+                       ,gray: gray+                       ,darkGray: darkGray};+   return _elm.Color.values;+};+Elm.Debug = Elm.Debug || {};+Elm.Debug.make = function (_elm) {+   "use strict";+   _elm.Debug = _elm.Debug || {};+   if (_elm.Debug.values)+   return _elm.Debug.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Debug",+   $Graphics$Collage = Elm.Graphics.Collage.make(_elm),+   $Native$Debug = Elm.Native.Debug.make(_elm);+   var trace = $Native$Debug.tracePath;+   var watchSummary = $Native$Debug.watchSummary;+   var watch = $Native$Debug.watch;+   var crash = $Native$Debug.crash;+   var log = $Native$Debug.log;+   _elm.Debug.values = {_op: _op+                       ,log: log+                       ,crash: crash+                       ,watch: watch+                       ,watchSummary: watchSummary+                       ,trace: trace};+   return _elm.Debug.values;+};+Elm.Dict = Elm.Dict || {};+Elm.Dict.make = function (_elm) {+   "use strict";+   _elm.Dict = _elm.Dict || {};+   if (_elm.Dict.values)+   return _elm.Dict.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Dict",+   $Basics = Elm.Basics.make(_elm),+   $List = Elm.List.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Debug = Elm.Native.Debug.make(_elm),+   $String = Elm.String.make(_elm);+   var foldr = F3(function (f,+   acc,+   t) {+      return function () {+         switch (t.ctor)+         {case "RBEmpty":+            switch (t._0.ctor)+              {case "LBlack": return acc;}+              break;+            case "RBNode": return A3(foldr,+              f,+              A3(f,+              t._1,+              t._2,+              A3(foldr,f,acc,t._4)),+              t._3);}+         _U.badCase($moduleName,+         "between lines 408 and 416");+      }();+   });+   var keys = function (dict) {+      return A3(foldr,+      F3(function (key,+      value,+      keyList) {+         return A2($List._op["::"],+         key,+         keyList);+      }),+      _L.fromArray([]),+      dict);+   };+   var values = function (dict) {+      return A3(foldr,+      F3(function (key,+      value,+      valueList) {+         return A2($List._op["::"],+         value,+         valueList);+      }),+      _L.fromArray([]),+      dict);+   };+   var toList = function (dict) {+      return A3(foldr,+      F3(function (key,value,list) {+         return A2($List._op["::"],+         {ctor: "_Tuple2"+         ,_0: key+         ,_1: value},+         list);+      }),+      _L.fromArray([]),+      dict);+   };+   var foldl = F3(function (f,+   acc,+   dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            switch (dict._0.ctor)+              {case "LBlack": return acc;}+              break;+            case "RBNode": return A3(foldl,+              f,+              A3(f,+              dict._1,+              dict._2,+              A3(foldl,f,acc,dict._3)),+              dict._4);}+         _U.badCase($moduleName,+         "between lines 397 and 405");+      }();+   });+   var isBBlack = function (dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            switch (dict._0.ctor)+              {case "LBBlack": return true;}+              break;+            case "RBNode":+            switch (dict._0.ctor)+              {case "BBlack": return true;}+              break;}+         return false;+      }();+   };+   var showFlag = function (f) {+      return function () {+         switch (f.ctor)+         {case "Insert": return "Insert";+            case "Remove": return "Remove";+            case "Same": return "Same";}+         _U.badCase($moduleName,+         "between lines 173 and 179");+      }();+   };+   var Same = {ctor: "Same"};+   var Remove = {ctor: "Remove"};+   var Insert = {ctor: "Insert"};+   var get = F2(function (targetKey,+   dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            switch (dict._0.ctor)+              {case "LBlack":+                 return $Maybe.Nothing;}+              break;+            case "RBNode":+            return function () {+                 var _v29 = A2($Basics.compare,+                 targetKey,+                 dict._1);+                 switch (_v29.ctor)+                 {case "EQ":+                    return $Maybe.Just(dict._2);+                    case "GT": return A2(get,+                      targetKey,+                      dict._4);+                    case "LT": return A2(get,+                      targetKey,+                      dict._3);}+                 _U.badCase($moduleName,+                 "between lines 129 and 135");+              }();}+         _U.badCase($moduleName,+         "between lines 124 and 135");+      }();+   });+   var member = F2(function (key,+   dict) {+      return function () {+         var _v30 = A2(get,key,dict);+         switch (_v30.ctor)+         {case "Just": return true;+            case "Nothing": return false;}+         _U.badCase($moduleName,+         "between lines 138 and 140");+      }();+   });+   var max = function (dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            return $Native$Debug.crash("(max Empty) is not defined");+            case "RBNode":+            switch (dict._4.ctor)+              {case "RBEmpty":+                 return {ctor: "_Tuple2"+                        ,_0: dict._1+                        ,_1: dict._2};}+              return max(dict._4);}+         _U.badCase($moduleName,+         "between lines 100 and 121");+      }();+   };+   var min = function (dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            switch (dict._0.ctor)+              {case "LBlack":+                 return $Native$Debug.crash("(min Empty) is not defined");}+              break;+            case "RBNode":+            switch (dict._3.ctor)+              {case "RBEmpty":+                 switch (dict._3._0.ctor)+                   {case "LBlack":+                      return {ctor: "_Tuple2"+                             ,_0: dict._1+                             ,_1: dict._2};}+                   break;}+              return min(dict._3);}+         _U.badCase($moduleName,+         "between lines 87 and 95");+      }();+   };+   var RBEmpty = function (a) {+      return {ctor: "RBEmpty"+             ,_0: a};+   };+   var RBNode = F5(function (a,+   b,+   c,+   d,+   e) {+      return {ctor: "RBNode"+             ,_0: a+             ,_1: b+             ,_2: c+             ,_3: d+             ,_4: e};+   });+   var showLColor = function (color) {+      return function () {+         switch (color.ctor)+         {case "LBBlack":+            return "LBBlack";+            case "LBlack": return "LBlack";}+         _U.badCase($moduleName,+         "between lines 70 and 72");+      }();+   };+   var LBBlack = {ctor: "LBBlack"};+   var LBlack = {ctor: "LBlack"};+   var empty = RBEmpty(LBlack);+   var map = F2(function (f,dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            switch (dict._0.ctor)+              {case "LBlack":+                 return RBEmpty(LBlack);}+              break;+            case "RBNode": return A5(RBNode,+              dict._0,+              dict._1,+              A2(f,dict._1,dict._2),+              A2(map,f,dict._3),+              A2(map,f,dict._4));}+         _U.badCase($moduleName,+         "between lines 385 and 394");+      }();+   });+   var showNColor = function (c) {+      return function () {+         switch (c.ctor)+         {case "BBlack": return "BBlack";+            case "Black": return "Black";+            case "NBlack": return "NBlack";+            case "Red": return "Red";}+         _U.badCase($moduleName,+         "between lines 56 and 60");+      }();+   };+   var reportRemBug = F4(function (msg,+   c,+   lgot,+   rgot) {+      return $Native$Debug.crash($String.concat(_L.fromArray(["Internal red-black tree invariant violated, expected "+                                                             ,msg+                                                             ," and got "+                                                             ,showNColor(c)+                                                             ,"/"+                                                             ,lgot+                                                             ,"/"+                                                             ,rgot+                                                             ,"\nPlease report this bug to <https://github.com/elm-lang/Elm/issues>"])));+   });+   var NBlack = {ctor: "NBlack"};+   var BBlack = {ctor: "BBlack"};+   var Black = {ctor: "Black"};+   var ensureBlackRoot = function (dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            switch (dict._0.ctor)+              {case "LBlack": return dict;}+              break;+            case "RBNode":+            switch (dict._0.ctor)+              {case "Black": return dict;+                 case "Red": return A5(RBNode,+                   Black,+                   dict._1,+                   dict._2,+                   dict._3,+                   dict._4);}+              break;}+         _U.badCase($moduleName,+         "between lines 145 and 157");+      }();+   };+   var blackish = function (t) {+      return function () {+         switch (t.ctor)+         {case "RBEmpty": return true;+            case "RBNode":+            return _U.eq(t._0,+              Black) || _U.eq(t._0,BBlack);}+         _U.badCase($moduleName,+         "between lines 330 and 332");+      }();+   };+   var blacken = function (t) {+      return function () {+         switch (t.ctor)+         {case "RBEmpty":+            return RBEmpty(LBlack);+            case "RBNode": return A5(RBNode,+              Black,+              t._1,+              t._2,+              t._3,+              t._4);}+         _U.badCase($moduleName,+         "between lines 369 and 371");+      }();+   };+   var Red = {ctor: "Red"};+   var moreBlack = function (color) {+      return function () {+         switch (color.ctor)+         {case "BBlack":+            return $Native$Debug.crash("Can\'t make a double black node more black!");+            case "Black": return BBlack;+            case "NBlack": return Red;+            case "Red": return Black;}+         _U.badCase($moduleName,+         "between lines 235 and 239");+      }();+   };+   var lessBlack = function (color) {+      return function () {+         switch (color.ctor)+         {case "BBlack": return Black;+            case "Black": return Red;+            case "NBlack":+            return $Native$Debug.crash("Can\'t make a negative black node less black!");+            case "Red": return NBlack;}+         _U.badCase($moduleName,+         "between lines 244 and 248");+      }();+   };+   var lessBlackTree = function (dict) {+      return function () {+         switch (dict.ctor)+         {case "RBEmpty":+            switch (dict._0.ctor)+              {case "LBBlack":+                 return RBEmpty(LBlack);}+              break;+            case "RBNode": return A5(RBNode,+              lessBlack(dict._0),+              dict._1,+              dict._2,+              dict._3,+              dict._4);}+         _U.badCase($moduleName,+         "between lines 253 and 255");+      }();+   };+   var redden = function (t) {+      return function () {+         switch (t.ctor)+         {case "RBEmpty":+            return $Native$Debug.crash("can\'t make a Leaf red");+            case "RBNode": return A5(RBNode,+              Red,+              t._1,+              t._2,+              t._3,+              t._4);}+         _U.badCase($moduleName,+         "between lines 377 and 382");+      }();+   };+   var balance_node = function (t) {+      return function () {+         var assemble = function (col) {+            return function (xk) {+               return function (xv) {+                  return function (yk) {+                     return function (yv) {+                        return function (zk) {+                           return function (zv) {+                              return function (a) {+                                 return function (b) {+                                    return function (c) {+                                       return function (d) {+                                          return A5(RBNode,+                                          lessBlack(col),+                                          yk,+                                          yv,+                                          A5(RBNode,Black,xk,xv,a,b),+                                          A5(RBNode,Black,zk,zv,c,d));+                                       };+                                    };+                                 };+                              };+                           };+                        };+                     };+                  };+               };+            };+         };+         return blackish(t) ? function () {+            switch (t.ctor)+            {case "RBNode":+               switch (t._3.ctor)+                 {case "RBNode":+                    switch (t._3._0.ctor)+                      {case "Red":+                         switch (t._3._3.ctor)+                           {case "RBNode":+                              switch (t._3._3._0.ctor)+                                {case "Red":+                                   return assemble(t._0)(t._3._3._1)(t._3._3._2)(t._3._1)(t._3._2)(t._1)(t._2)(t._3._3._3)(t._3._3._4)(t._3._4)(t._4);}+                                break;}+                           switch (t._3._4.ctor)+                           {case "RBNode":+                              switch (t._3._4._0.ctor)+                                {case "Red":+                                   return assemble(t._0)(t._3._1)(t._3._2)(t._3._4._1)(t._3._4._2)(t._1)(t._2)(t._3._3)(t._3._4._3)(t._3._4._4)(t._4);}+                                break;}+                           break;}+                      break;}+                 switch (t._4.ctor)+                 {case "RBNode":+                    switch (t._4._0.ctor)+                      {case "Red":+                         switch (t._4._3.ctor)+                           {case "RBNode":+                              switch (t._4._3._0.ctor)+                                {case "Red":+                                   return assemble(t._0)(t._1)(t._2)(t._4._3._1)(t._4._3._2)(t._4._1)(t._4._2)(t._3)(t._4._3._3)(t._4._3._4)(t._4._4);}+                                break;}+                           switch (t._4._4.ctor)+                           {case "RBNode":+                              switch (t._4._4._0.ctor)+                                {case "Red":+                                   return assemble(t._0)(t._1)(t._2)(t._4._1)(t._4._2)(t._4._4._1)(t._4._4._2)(t._3)(t._4._3)(t._4._4._3)(t._4._4._4);}+                                break;}+                           break;}+                      break;}+                 switch (t._0.ctor)+                 {case "BBlack":+                    switch (t._4.ctor)+                      {case "RBNode":+                         switch (t._4._0.ctor)+                           {case "NBlack":+                              switch (t._4._3.ctor)+                                {case "RBNode":+                                   switch (t._4._3._0.ctor)+                                     {case "Black":+                                        return function () {+                                             switch (t._4._4.ctor)+                                             {case "RBNode":+                                                switch (t._4._4._0.ctor)+                                                  {case "Black":+                                                     return A5(RBNode,+                                                       Black,+                                                       t._4._3._1,+                                                       t._4._3._2,+                                                       A5(RBNode,+                                                       Black,+                                                       t._1,+                                                       t._2,+                                                       t._3,+                                                       t._4._3._3),+                                                       A5(balance,+                                                       Black,+                                                       t._4._1,+                                                       t._4._2,+                                                       t._4._3._4,+                                                       redden(t._4._4)));}+                                                  break;}+                                             return t;+                                          }();}+                                     break;}+                                break;}+                           break;}+                      switch (t._3.ctor)+                      {case "RBNode":+                         switch (t._3._0.ctor)+                           {case "NBlack":+                              switch (t._3._4.ctor)+                                {case "RBNode":+                                   switch (t._3._4._0.ctor)+                                     {case "Black":+                                        return function () {+                                             switch (t._3._3.ctor)+                                             {case "RBNode":+                                                switch (t._3._3._0.ctor)+                                                  {case "Black":+                                                     return A5(RBNode,+                                                       Black,+                                                       t._3._4._1,+                                                       t._3._4._2,+                                                       A5(balance,+                                                       Black,+                                                       t._3._1,+                                                       t._3._2,+                                                       redden(t._3._3),+                                                       t._3._4._3),+                                                       A5(RBNode,+                                                       Black,+                                                       t._1,+                                                       t._2,+                                                       t._3._4._4,+                                                       t._4));}+                                                  break;}+                                             return t;+                                          }();}+                                     break;}+                                break;}+                           break;}+                      break;}+                 break;}+            return t;+         }() : t;+      }();+   };+   var balance = F5(function (c,+   k,+   v,+   l,+   r) {+      return balance_node(A5(RBNode,+      c,+      k,+      v,+      l,+      r));+   });+   var bubble = F5(function (c,+   k,+   v,+   l,+   r) {+      return isBBlack(l) || isBBlack(r) ? A5(balance,+      moreBlack(c),+      k,+      v,+      lessBlackTree(l),+      lessBlackTree(r)) : A5(RBNode,+      c,+      k,+      v,+      l,+      r);+   });+   var remove_max = F5(function (c,+   k,+   v,+   l,+   r) {+      return function () {+         switch (r.ctor)+         {case "RBEmpty": return A3(rem,+              c,+              l,+              r);+            case "RBNode": return A5(bubble,+              c,+              k,+              v,+              l,+              A5(remove_max,+              r._0,+              r._1,+              r._2,+              r._3,+              r._4));}+         _U.badCase($moduleName,+         "between lines 314 and 319");+      }();+   });+   var rem = F3(function (c,l,r) {+      return function () {+         var _v169 = {ctor: "_Tuple2"+                     ,_0: l+                     ,_1: r};+         switch (_v169.ctor)+         {case "_Tuple2":+            switch (_v169._0.ctor)+              {case "RBEmpty":+                 switch (_v169._1.ctor)+                   {case "RBEmpty":+                      return function () {+                           switch (c.ctor)+                           {case "Black":+                              return RBEmpty(LBBlack);+                              case "Red":+                              return RBEmpty(LBlack);}+                           _U.badCase($moduleName,+                           "between lines 273 and 277");+                        }();+                      case "RBNode":+                      return function () {+                           var _v191 = {ctor: "_Tuple3"+                                       ,_0: c+                                       ,_1: _v169._0._0+                                       ,_2: _v169._1._0};+                           switch (_v191.ctor)+                           {case "_Tuple3":+                              switch (_v191._0.ctor)+                                {case "Black":+                                   switch (_v191._1.ctor)+                                     {case "LBlack":+                                        switch (_v191._2.ctor)+                                          {case "Red": return A5(RBNode,+                                               Black,+                                               _v169._1._1,+                                               _v169._1._2,+                                               _v169._1._3,+                                               _v169._1._4);}+                                          break;}+                                     break;}+                                break;}+                           return A4(reportRemBug,+                           "Black/LBlack/Red",+                           c,+                           showLColor(_v169._0._0),+                           showNColor(_v169._1._0));+                        }();}+                   break;+                 case "RBNode":+                 switch (_v169._1.ctor)+                   {case "RBEmpty":+                      return function () {+                           var _v195 = {ctor: "_Tuple3"+                                       ,_0: c+                                       ,_1: _v169._0._0+                                       ,_2: _v169._1._0};+                           switch (_v195.ctor)+                           {case "_Tuple3":+                              switch (_v195._0.ctor)+                                {case "Black":+                                   switch (_v195._1.ctor)+                                     {case "Red":+                                        switch (_v195._2.ctor)+                                          {case "LBlack":+                                             return A5(RBNode,+                                               Black,+                                               _v169._0._1,+                                               _v169._0._2,+                                               _v169._0._3,+                                               _v169._0._4);}+                                          break;}+                                     break;}+                                break;}+                           return A4(reportRemBug,+                           "Black/Red/LBlack",+                           c,+                           showNColor(_v169._0._0),+                           showLColor(_v169._1._0));+                        }();+                      case "RBNode":+                      return function () {+                           var l$ = A5(remove_max,+                           _v169._0._0,+                           _v169._0._1,+                           _v169._0._2,+                           _v169._0._3,+                           _v169._0._4);+                           var r = A5(RBNode,+                           _v169._1._0,+                           _v169._1._1,+                           _v169._1._2,+                           _v169._1._3,+                           _v169._1._4);+                           var l = A5(RBNode,+                           _v169._0._0,+                           _v169._0._1,+                           _v169._0._2,+                           _v169._0._3,+                           _v169._0._4);+                           var $ = max(l),+                           k = $._0,+                           v = $._1;+                           return A5(bubble,c,k,v,l$,r);+                        }();}+                   break;}+              break;}+         _U.badCase($moduleName,+         "between lines 271 and 300");+      }();+   });+   var update = F3(function (k,+   alter,+   dict) {+      return function () {+         var up = function (dict) {+            return function () {+               switch (dict.ctor)+               {case "RBEmpty":+                  switch (dict._0.ctor)+                    {case "LBlack":+                       return function () {+                            var _v206 = alter($Maybe.Nothing);+                            switch (_v206.ctor)+                            {case "Just":+                               return {ctor: "_Tuple2"+                                      ,_0: Insert+                                      ,_1: A5(RBNode,+                                      Red,+                                      k,+                                      _v206._0,+                                      empty,+                                      empty)};+                               case "Nothing":+                               return {ctor: "_Tuple2"+                                      ,_0: Same+                                      ,_1: empty};}+                            _U.badCase($moduleName,+                            "between lines 185 and 189");+                         }();}+                    break;+                  case "RBNode":+                  return function () {+                       var _v208 = A2($Basics.compare,+                       k,+                       dict._1);+                       switch (_v208.ctor)+                       {case "EQ": return function () {+                               var _v209 = alter($Maybe.Just(dict._2));+                               switch (_v209.ctor)+                               {case "Just":+                                  return {ctor: "_Tuple2"+                                         ,_0: Same+                                         ,_1: A5(RBNode,+                                         dict._0,+                                         dict._1,+                                         _v209._0,+                                         dict._3,+                                         dict._4)};+                                  case "Nothing":+                                  return {ctor: "_Tuple2"+                                         ,_0: Remove+                                         ,_1: A3(rem,+                                         dict._0,+                                         dict._3,+                                         dict._4)};}+                               _U.badCase($moduleName,+                               "between lines 192 and 197");+                            }();+                          case "GT": return function () {+                               var $ = up(dict._4),+                               flag = $._0,+                               newRight = $._1;+                               return function () {+                                  switch (flag.ctor)+                                  {case "Insert":+                                     return {ctor: "_Tuple2"+                                            ,_0: Insert+                                            ,_1: A5(balance,+                                            dict._0,+                                            dict._1,+                                            dict._2,+                                            dict._3,+                                            newRight)};+                                     case "Remove":+                                     return {ctor: "_Tuple2"+                                            ,_0: Remove+                                            ,_1: A5(bubble,+                                            dict._0,+                                            dict._1,+                                            dict._2,+                                            dict._3,+                                            newRight)};+                                     case "Same":+                                     return {ctor: "_Tuple2"+                                            ,_0: Same+                                            ,_1: A5(RBNode,+                                            dict._0,+                                            dict._1,+                                            dict._2,+                                            dict._3,+                                            newRight)};}+                                  _U.badCase($moduleName,+                                  "between lines 206 and 211");+                               }();+                            }();+                          case "LT": return function () {+                               var $ = up(dict._3),+                               flag = $._0,+                               newLeft = $._1;+                               return function () {+                                  switch (flag.ctor)+                                  {case "Insert":+                                     return {ctor: "_Tuple2"+                                            ,_0: Insert+                                            ,_1: A5(balance,+                                            dict._0,+                                            dict._1,+                                            dict._2,+                                            newLeft,+                                            dict._4)};+                                     case "Remove":+                                     return {ctor: "_Tuple2"+                                            ,_0: Remove+                                            ,_1: A5(bubble,+                                            dict._0,+                                            dict._1,+                                            dict._2,+                                            newLeft,+                                            dict._4)};+                                     case "Same":+                                     return {ctor: "_Tuple2"+                                            ,_0: Same+                                            ,_1: A5(RBNode,+                                            dict._0,+                                            dict._1,+                                            dict._2,+                                            newLeft,+                                            dict._4)};}+                                  _U.badCase($moduleName,+                                  "between lines 199 and 204");+                               }();+                            }();}+                       _U.badCase($moduleName,+                       "between lines 190 and 211");+                    }();}+               _U.badCase($moduleName,+               "between lines 183 and 211");+            }();+         };+         var $ = up(dict),+         flag = $._0,+         updatedDict = $._1;+         return function () {+            switch (flag.ctor)+            {case "Insert":+               return ensureBlackRoot(updatedDict);+               case "Remove":+               return blacken(updatedDict);+               case "Same":+               return updatedDict;}+            _U.badCase($moduleName,+            "between lines 213 and 219");+         }();+      }();+   });+   var insert = F3(function (key,+   value,+   dict) {+      return A3(update,+      key,+      $Basics.always($Maybe.Just(value)),+      dict);+   });+   var singleton = F2(function (key,+   value) {+      return A3(insert,+      key,+      value,+      RBEmpty(LBlack));+   });+   var union = F2(function (t1,+   t2) {+      return A3(foldl,+      insert,+      t2,+      t1);+   });+   var fromList = function (assocs) {+      return A3($List.foldl,+      F2(function (_v214,dict) {+         return function () {+            switch (_v214.ctor)+            {case "_Tuple2":+               return A3(insert,+                 _v214._0,+                 _v214._1,+                 dict);}+            _U.badCase($moduleName,+            "on line 457, column 38 to 59");+         }();+      }),+      empty,+      assocs);+   };+   var filter = F2(function (predicate,+   dictionary) {+      return function () {+         var add = F3(function (key,+         value,+         dict) {+            return A2(predicate,+            key,+            value) ? A3(insert,+            key,+            value,+            dict) : dict;+         });+         return A3(foldl,+         add,+         empty,+         dictionary);+      }();+   });+   var intersect = F2(function (t1,+   t2) {+      return A2(filter,+      F2(function (k,_v218) {+         return function () {+            return A2(member,k,t2);+         }();+      }),+      t1);+   });+   var partition = F2(function (predicate,+   dict) {+      return function () {+         var add = F3(function (key,+         value,+         _v220) {+            return function () {+               switch (_v220.ctor)+               {case "_Tuple2":+                  return A2(predicate,+                    key,+                    value) ? {ctor: "_Tuple2"+                             ,_0: A3(insert,+                             key,+                             value,+                             _v220._0)+                             ,_1: _v220._1} : {ctor: "_Tuple2"+                                              ,_0: _v220._0+                                              ,_1: A3(insert,+                                              key,+                                              value,+                                              _v220._1)};}+               _U.badCase($moduleName,+               "between lines 478 and 480");+            }();+         });+         return A3(foldl,+         add,+         {ctor: "_Tuple2"+         ,_0: empty+         ,_1: empty},+         dict);+      }();+   });+   var remove = F2(function (key,+   dict) {+      return A3(update,+      key,+      $Basics.always($Maybe.Nothing),+      dict);+   });+   var diff = F2(function (t1,t2) {+      return A3(foldl,+      F3(function (k,v,t) {+         return A2(remove,k,t);+      }),+      t1,+      t2);+   });+   _elm.Dict.values = {_op: _op+                      ,empty: empty+                      ,singleton: singleton+                      ,insert: insert+                      ,update: update+                      ,get: get+                      ,remove: remove+                      ,member: member+                      ,filter: filter+                      ,partition: partition+                      ,foldl: foldl+                      ,foldr: foldr+                      ,map: map+                      ,union: union+                      ,intersect: intersect+                      ,diff: diff+                      ,keys: keys+                      ,values: values+                      ,toList: toList+                      ,fromList: fromList};+   return _elm.Dict.values;+};+Elm.Graphics = Elm.Graphics || {};+Elm.Graphics.Collage = Elm.Graphics.Collage || {};+Elm.Graphics.Collage.make = function (_elm) {+   "use strict";+   _elm.Graphics = _elm.Graphics || {};+   _elm.Graphics.Collage = _elm.Graphics.Collage || {};+   if (_elm.Graphics.Collage.values)+   return _elm.Graphics.Collage.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Graphics.Collage",+   $Basics = Elm.Basics.make(_elm),+   $Color = Elm.Color.make(_elm),+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $List = Elm.List.make(_elm),+   $Native$Graphics$Collage = Elm.Native.Graphics.Collage.make(_elm),+   $Text = Elm.Text.make(_elm),+   $Transform2D = Elm.Transform2D.make(_elm);+   var ngon = F2(function (n,r) {+      return function () {+         var m = $Basics.toFloat(n);+         var t = 2 * $Basics.pi / m;+         var f = function (i) {+            return {ctor: "_Tuple2"+                   ,_0: r * $Basics.cos(t * i)+                   ,_1: r * $Basics.sin(t * i)};+         };+         return A2($List.map,+         f,+         _L.range(0,m - 1));+      }();+   });+   var oval = F2(function (w,h) {+      return function () {+         var hh = h / 2;+         var hw = w / 2;+         var n = 50;+         var t = 2 * $Basics.pi / n;+         var f = function (i) {+            return {ctor: "_Tuple2"+                   ,_0: hw * $Basics.cos(t * i)+                   ,_1: hh * $Basics.sin(t * i)};+         };+         return A2($List.map,+         f,+         _L.range(0,n - 1));+      }();+   });+   var circle = function (r) {+      return A2(oval,2 * r,2 * r);+   };+   var rect = F2(function (w,h) {+      return function () {+         var hh = h / 2;+         var hw = w / 2;+         return _L.fromArray([{ctor: "_Tuple2"+                              ,_0: 0 - hw+                              ,_1: 0 - hh}+                             ,{ctor: "_Tuple2"+                              ,_0: 0 - hw+                              ,_1: hh}+                             ,{ctor: "_Tuple2",_0: hw,_1: hh}+                             ,{ctor: "_Tuple2"+                              ,_0: hw+                              ,_1: 0 - hh}]);+      }();+   });+   var square = function (n) {+      return A2(rect,n,n);+   };+   var polygon = function (points) {+      return points;+   };+   var segment = F2(function (p1,+   p2) {+      return _L.fromArray([p1,p2]);+   });+   var path = function (ps) {+      return ps;+   };+   var collage = $Native$Graphics$Collage.collage;+   var alpha = F2(function (a,f) {+      return _U.replace([["alpha"+                         ,a]],+      f);+   });+   var rotate = F2(function (t,f) {+      return _U.replace([["theta"+                         ,f.theta + t]],+      f);+   });+   var scale = F2(function (s,f) {+      return _U.replace([["scale"+                         ,f.scale * s]],+      f);+   });+   var moveY = F2(function (y,f) {+      return _U.replace([["y"+                         ,f.y + y]],+      f);+   });+   var moveX = F2(function (x,f) {+      return _U.replace([["x"+                         ,f.x + x]],+      f);+   });+   var move = F2(function (_v0,f) {+      return function () {+         switch (_v0.ctor)+         {case "_Tuple2":+            return _U.replace([["x"+                               ,f.x + _v0._0]+                              ,["y",f.y + _v0._1]],+              f);}+         _U.badCase($moduleName,+         "on line 226, column 7 to 35");+      }();+   });+   var form = function (f) {+      return {_: {}+             ,alpha: 1+             ,form: f+             ,scale: 1+             ,theta: 0+             ,x: 0+             ,y: 0};+   };+   var Fill = function (a) {+      return {ctor: "Fill",_0: a};+   };+   var Line = function (a) {+      return {ctor: "Line",_0: a};+   };+   var FGroup = F2(function (a,b) {+      return {ctor: "FGroup"+             ,_0: a+             ,_1: b};+   });+   var group = function (fs) {+      return form(A2(FGroup,+      $Transform2D.identity,+      fs));+   };+   var groupTransform = F2(function (matrix,+   fs) {+      return form(A2(FGroup,+      matrix,+      fs));+   });+   var FElement = function (a) {+      return {ctor: "FElement"+             ,_0: a};+   };+   var toForm = function (e) {+      return form(FElement(e));+   };+   var FImage = F4(function (a,+   b,+   c,+   d) {+      return {ctor: "FImage"+             ,_0: a+             ,_1: b+             ,_2: c+             ,_3: d};+   });+   var sprite = F4(function (w,+   h,+   pos,+   src) {+      return form(A4(FImage,+      w,+      h,+      pos,+      src));+   });+   var FText = function (a) {+      return {ctor: "FText",_0: a};+   };+   var text = function (t) {+      return form(FText(t));+   };+   var FOutlinedText = F2(function (a,+   b) {+      return {ctor: "FOutlinedText"+             ,_0: a+             ,_1: b};+   });+   var outlinedText = F2(function (ls,+   t) {+      return form(A2(FOutlinedText,+      ls,+      t));+   });+   var FShape = F2(function (a,b) {+      return {ctor: "FShape"+             ,_0: a+             ,_1: b};+   });+   var fill = F2(function (style,+   shape) {+      return form(A2(FShape,+      Fill(style),+      shape));+   });+   var outlined = F2(function (style,+   shape) {+      return form(A2(FShape,+      Line(style),+      shape));+   });+   var FPath = F2(function (a,b) {+      return {ctor: "FPath"+             ,_0: a+             ,_1: b};+   });+   var traced = F2(function (style,+   path) {+      return form(A2(FPath,+      style,+      path));+   });+   var LineStyle = F6(function (a,+   b,+   c,+   d,+   e,+   f) {+      return {_: {}+             ,cap: c+             ,color: a+             ,dashOffset: f+             ,dashing: e+             ,join: d+             ,width: b};+   });+   var Clipped = {ctor: "Clipped"};+   var Sharp = function (a) {+      return {ctor: "Sharp",_0: a};+   };+   var Smooth = {ctor: "Smooth"};+   var Padded = {ctor: "Padded"};+   var Round = {ctor: "Round"};+   var Flat = {ctor: "Flat"};+   var defaultLine = {_: {}+                     ,cap: Flat+                     ,color: $Color.black+                     ,dashOffset: 0+                     ,dashing: _L.fromArray([])+                     ,join: Sharp(10)+                     ,width: 1};+   var solid = function (clr) {+      return _U.replace([["color"+                         ,clr]],+      defaultLine);+   };+   var dashed = function (clr) {+      return _U.replace([["color"+                         ,clr]+                        ,["dashing"+                         ,_L.fromArray([8,4])]],+      defaultLine);+   };+   var dotted = function (clr) {+      return _U.replace([["color"+                         ,clr]+                        ,["dashing"+                         ,_L.fromArray([3,3])]],+      defaultLine);+   };+   var Grad = function (a) {+      return {ctor: "Grad",_0: a};+   };+   var gradient = F2(function (grad,+   shape) {+      return A2(fill,+      Grad(grad),+      shape);+   });+   var Texture = function (a) {+      return {ctor: "Texture"+             ,_0: a};+   };+   var textured = F2(function (src,+   shape) {+      return A2(fill,+      Texture(src),+      shape);+   });+   var Solid = function (a) {+      return {ctor: "Solid",_0: a};+   };+   var filled = F2(function (color,+   shape) {+      return A2(fill,+      Solid(color),+      shape);+   });+   var Form = F6(function (a,+   b,+   c,+   d,+   e,+   f) {+      return {_: {}+             ,alpha: e+             ,form: f+             ,scale: b+             ,theta: a+             ,x: c+             ,y: d};+   });+   _elm.Graphics.Collage.values = {_op: _op+                                  ,collage: collage+                                  ,toForm: toForm+                                  ,filled: filled+                                  ,textured: textured+                                  ,gradient: gradient+                                  ,outlined: outlined+                                  ,traced: traced+                                  ,text: text+                                  ,outlinedText: outlinedText+                                  ,move: move+                                  ,moveX: moveX+                                  ,moveY: moveY+                                  ,scale: scale+                                  ,rotate: rotate+                                  ,alpha: alpha+                                  ,group: group+                                  ,groupTransform: groupTransform+                                  ,rect: rect+                                  ,oval: oval+                                  ,square: square+                                  ,circle: circle+                                  ,ngon: ngon+                                  ,polygon: polygon+                                  ,segment: segment+                                  ,path: path+                                  ,solid: solid+                                  ,dashed: dashed+                                  ,dotted: dotted+                                  ,defaultLine: defaultLine+                                  ,Form: Form+                                  ,LineStyle: LineStyle+                                  ,Flat: Flat+                                  ,Round: Round+                                  ,Padded: Padded+                                  ,Smooth: Smooth+                                  ,Sharp: Sharp+                                  ,Clipped: Clipped};+   return _elm.Graphics.Collage.values;+};+Elm.Graphics = Elm.Graphics || {};+Elm.Graphics.Element = Elm.Graphics.Element || {};+Elm.Graphics.Element.make = function (_elm) {+   "use strict";+   _elm.Graphics = _elm.Graphics || {};+   _elm.Graphics.Element = _elm.Graphics.Element || {};+   if (_elm.Graphics.Element.values)+   return _elm.Graphics.Element.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Graphics.Element",+   $Basics = Elm.Basics.make(_elm),+   $Color = Elm.Color.make(_elm),+   $List = Elm.List.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Graphics$Element = Elm.Native.Graphics.Element.make(_elm),+   $Text = Elm.Text.make(_elm);+   var DOut = {ctor: "DOut"};+   var outward = DOut;+   var DIn = {ctor: "DIn"};+   var inward = DIn;+   var DRight = {ctor: "DRight"};+   var right = DRight;+   var DLeft = {ctor: "DLeft"};+   var left = DLeft;+   var DDown = {ctor: "DDown"};+   var down = DDown;+   var DUp = {ctor: "DUp"};+   var up = DUp;+   var Position = F4(function (a,+   b,+   c,+   d) {+      return {_: {}+             ,horizontal: a+             ,vertical: b+             ,x: c+             ,y: d};+   });+   var Relative = function (a) {+      return {ctor: "Relative"+             ,_0: a};+   };+   var relative = Relative;+   var Absolute = function (a) {+      return {ctor: "Absolute"+             ,_0: a};+   };+   var absolute = Absolute;+   var N = {ctor: "N"};+   var bottomLeftAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: N+             ,vertical: N+             ,x: x+             ,y: y};+   });+   var Z = {ctor: "Z"};+   var middle = {_: {}+                ,horizontal: Z+                ,vertical: Z+                ,x: Relative(0.5)+                ,y: Relative(0.5)};+   var midLeft = _U.replace([["horizontal"+                             ,N]+                            ,["x",Absolute(0)]],+   middle);+   var middleAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: Z+             ,vertical: Z+             ,x: x+             ,y: y};+   });+   var midLeftAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: N+             ,vertical: Z+             ,x: x+             ,y: y};+   });+   var midBottomAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: Z+             ,vertical: N+             ,x: x+             ,y: y};+   });+   var P = {ctor: "P"};+   var topLeft = {_: {}+                 ,horizontal: N+                 ,vertical: P+                 ,x: Absolute(0)+                 ,y: Absolute(0)};+   var bottomLeft = _U.replace([["vertical"+                                ,N]],+   topLeft);+   var topRight = _U.replace([["horizontal"+                              ,P]],+   topLeft);+   var bottomRight = _U.replace([["horizontal"+                                 ,P]],+   bottomLeft);+   var midRight = _U.replace([["horizontal"+                              ,P]],+   midLeft);+   var midTop = _U.replace([["vertical"+                            ,P]+                           ,["y",Absolute(0)]],+   middle);+   var midBottom = _U.replace([["vertical"+                               ,N]],+   midTop);+   var topLeftAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: N+             ,vertical: P+             ,x: x+             ,y: y};+   });+   var topRightAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: P+             ,vertical: P+             ,x: x+             ,y: y};+   });+   var bottomRightAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: P+             ,vertical: N+             ,x: x+             ,y: y};+   });+   var midRightAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: P+             ,vertical: Z+             ,x: x+             ,y: y};+   });+   var midTopAt = F2(function (x,+   y) {+      return {_: {}+             ,horizontal: Z+             ,vertical: P+             ,x: x+             ,y: y};+   });+   var justified = $Native$Graphics$Element.block("justify");+   var centered = $Native$Graphics$Element.block("center");+   var rightAligned = $Native$Graphics$Element.block("right");+   var leftAligned = $Native$Graphics$Element.block("left");+   var show = function (value) {+      return leftAligned($Text.monospace($Text.fromString($Basics.toString(value))));+   };+   var Tiled = {ctor: "Tiled"};+   var Cropped = function (a) {+      return {ctor: "Cropped"+             ,_0: a};+   };+   var Fitted = {ctor: "Fitted"};+   var Plain = {ctor: "Plain"};+   var Custom = {ctor: "Custom"};+   var RawHtml = {ctor: "RawHtml"};+   var Spacer = {ctor: "Spacer"};+   var Flow = F2(function (a,b) {+      return {ctor: "Flow"+             ,_0: a+             ,_1: b};+   });+   var Container = F2(function (a,+   b) {+      return {ctor: "Container"+             ,_0: a+             ,_1: b};+   });+   var Image = F4(function (a,+   b,+   c,+   d) {+      return {ctor: "Image"+             ,_0: a+             ,_1: b+             ,_2: c+             ,_3: d};+   });+   var newElement = $Native$Graphics$Element.newElement;+   var image = F3(function (w,+   h,+   src) {+      return A3(newElement,+      w,+      h,+      A4(Image,Plain,w,h,src));+   });+   var fittedImage = F3(function (w,+   h,+   src) {+      return A3(newElement,+      w,+      h,+      A4(Image,Fitted,w,h,src));+   });+   var croppedImage = F4(function (pos,+   w,+   h,+   src) {+      return A3(newElement,+      w,+      h,+      A4(Image,Cropped(pos),w,h,src));+   });+   var tiledImage = F3(function (w,+   h,+   src) {+      return A3(newElement,+      w,+      h,+      A4(Image,Tiled,w,h,src));+   });+   var container = F4(function (w,+   h,+   pos,+   e) {+      return A3(newElement,+      w,+      h,+      A2(Container,pos,e));+   });+   var spacer = F2(function (w,h) {+      return A3(newElement,+      w,+      h,+      Spacer);+   });+   var link = F2(function (href,+   e) {+      return function () {+         var p = e.props;+         return {_: {}+                ,element: e.element+                ,props: _U.replace([["href"+                                    ,href]],+                p)};+      }();+   });+   var tag = F2(function (name,e) {+      return function () {+         var p = e.props;+         return {_: {}+                ,element: e.element+                ,props: _U.replace([["tag"+                                    ,name]],+                p)};+      }();+   });+   var color = F2(function (c,e) {+      return function () {+         var p = e.props;+         return {_: {}+                ,element: e.element+                ,props: _U.replace([["color"+                                    ,$Maybe.Just(c)]],+                p)};+      }();+   });+   var opacity = F2(function (o,+   e) {+      return function () {+         var p = e.props;+         return {_: {}+                ,element: e.element+                ,props: _U.replace([["opacity"+                                    ,o]],+                p)};+      }();+   });+   var height = F2(function (nh,+   e) {+      return function () {+         var p = e.props;+         var props = function () {+            var _v0 = e.element;+            switch (_v0.ctor)+            {case "Image":+               return _U.replace([["width"+                                  ,$Basics.round($Basics.toFloat(_v0._1) / $Basics.toFloat(_v0._2) * $Basics.toFloat(nh))]],+                 p);}+            return p;+         }();+         return {_: {}+                ,element: e.element+                ,props: _U.replace([["height"+                                    ,nh]],+                p)};+      }();+   });+   var width = F2(function (nw,e) {+      return function () {+         var p = e.props;+         var props = function () {+            var _v5 = e.element;+            switch (_v5.ctor)+            {case "Image":+               return _U.replace([["height"+                                  ,$Basics.round($Basics.toFloat(_v5._2) / $Basics.toFloat(_v5._1) * $Basics.toFloat(nw))]],+                 p);+               case "RawHtml":+               return _U.replace([["height"+                                  ,$Basics.snd(A2($Native$Graphics$Element.htmlHeight,+                                  nw,+                                  e.element))]],+                 p);}+            return p;+         }();+         return {_: {}+                ,element: e.element+                ,props: _U.replace([["width"+                                    ,nw]],+                props)};+      }();+   });+   var size = F3(function (w,h,e) {+      return A2(height,+      h,+      A2(width,w,e));+   });+   var sizeOf = function (e) {+      return {ctor: "_Tuple2"+             ,_0: e.props.width+             ,_1: e.props.height};+   };+   var heightOf = function (e) {+      return e.props.height;+   };+   var widthOf = function (e) {+      return e.props.width;+   };+   var above = F2(function (hi,+   lo) {+      return A3(newElement,+      A2($Basics.max,+      widthOf(hi),+      widthOf(lo)),+      heightOf(hi) + heightOf(lo),+      A2(Flow,+      DDown,+      _L.fromArray([hi,lo])));+   });+   var below = F2(function (lo,+   hi) {+      return A3(newElement,+      A2($Basics.max,+      widthOf(hi),+      widthOf(lo)),+      heightOf(hi) + heightOf(lo),+      A2(Flow,+      DDown,+      _L.fromArray([hi,lo])));+   });+   var beside = F2(function (lft,+   rht) {+      return A3(newElement,+      widthOf(lft) + widthOf(rht),+      A2($Basics.max,+      heightOf(lft),+      heightOf(rht)),+      A2(Flow,+      right,+      _L.fromArray([lft,rht])));+   });+   var layers = function (es) {+      return function () {+         var hs = A2($List.map,+         heightOf,+         es);+         var ws = A2($List.map,+         widthOf,+         es);+         return A3(newElement,+         A2($Maybe.withDefault,+         0,+         $List.maximum(ws)),+         A2($Maybe.withDefault,+         0,+         $List.maximum(hs)),+         A2(Flow,DOut,es));+      }();+   };+   var empty = A2(spacer,0,0);+   var flow = F2(function (dir,+   es) {+      return function () {+         var newFlow = F2(function (w,+         h) {+            return A3(newElement,+            w,+            h,+            A2(Flow,dir,es));+         });+         var maxOrZero = function (list) {+            return A2($Maybe.withDefault,+            0,+            $List.maximum(list));+         };+         var hs = A2($List.map,+         heightOf,+         es);+         var ws = A2($List.map,+         widthOf,+         es);+         return _U.eq(es,+         _L.fromArray([])) ? empty : function () {+            switch (dir.ctor)+            {case "DDown":+               return A2(newFlow,+                 maxOrZero(ws),+                 $List.sum(hs));+               case "DIn": return A2(newFlow,+                 maxOrZero(ws),+                 maxOrZero(hs));+               case "DLeft": return A2(newFlow,+                 $List.sum(ws),+                 maxOrZero(hs));+               case "DOut": return A2(newFlow,+                 maxOrZero(ws),+                 maxOrZero(hs));+               case "DRight":+               return A2(newFlow,+                 $List.sum(ws),+                 maxOrZero(hs));+               case "DUp": return A2(newFlow,+                 maxOrZero(ws),+                 $List.sum(hs));}+            _U.badCase($moduleName,+            "between lines 362 and 373");+         }();+      }();+   });+   var Properties = F9(function (a,+   b,+   c,+   d,+   e,+   f,+   g,+   h,+   i) {+      return {_: {}+             ,click: i+             ,color: e+             ,height: c+             ,hover: h+             ,href: f+             ,id: a+             ,opacity: d+             ,tag: g+             ,width: b};+   });+   var Element = F2(function (a,+   b) {+      return {_: {}+             ,element: b+             ,props: a};+   });+   _elm.Graphics.Element.values = {_op: _op+                                  ,image: image+                                  ,fittedImage: fittedImage+                                  ,croppedImage: croppedImage+                                  ,tiledImage: tiledImage+                                  ,leftAligned: leftAligned+                                  ,rightAligned: rightAligned+                                  ,centered: centered+                                  ,justified: justified+                                  ,show: show+                                  ,width: width+                                  ,height: height+                                  ,size: size+                                  ,color: color+                                  ,opacity: opacity+                                  ,link: link+                                  ,tag: tag+                                  ,widthOf: widthOf+                                  ,heightOf: heightOf+                                  ,sizeOf: sizeOf+                                  ,flow: flow+                                  ,up: up+                                  ,down: down+                                  ,left: left+                                  ,right: right+                                  ,inward: inward+                                  ,outward: outward+                                  ,layers: layers+                                  ,above: above+                                  ,below: below+                                  ,beside: beside+                                  ,empty: empty+                                  ,spacer: spacer+                                  ,container: container+                                  ,middle: middle+                                  ,midTop: midTop+                                  ,midBottom: midBottom+                                  ,midLeft: midLeft+                                  ,midRight: midRight+                                  ,topLeft: topLeft+                                  ,topRight: topRight+                                  ,bottomLeft: bottomLeft+                                  ,bottomRight: bottomRight+                                  ,absolute: absolute+                                  ,relative: relative+                                  ,middleAt: middleAt+                                  ,midTopAt: midTopAt+                                  ,midBottomAt: midBottomAt+                                  ,midLeftAt: midLeftAt+                                  ,midRightAt: midRightAt+                                  ,topLeftAt: topLeftAt+                                  ,topRightAt: topRightAt+                                  ,bottomLeftAt: bottomLeftAt+                                  ,bottomRightAt: bottomRightAt+                                  ,Element: Element+                                  ,Position: Position};+   return _elm.Graphics.Element.values;+};+Elm.Graphics = Elm.Graphics || {};+Elm.Graphics.Input = Elm.Graphics.Input || {};+Elm.Graphics.Input.make = function (_elm) {+   "use strict";+   _elm.Graphics = _elm.Graphics || {};+   _elm.Graphics.Input = _elm.Graphics.Input || {};+   if (_elm.Graphics.Input.values)+   return _elm.Graphics.Input.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Graphics.Input",+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $Native$Graphics$Input = Elm.Native.Graphics.Input.make(_elm),+   $Signal = Elm.Signal.make(_elm);+   var clickable = $Native$Graphics$Input.clickable;+   var hoverable = $Native$Graphics$Input.hoverable;+   var dropDown = $Native$Graphics$Input.dropDown;+   var checkbox = $Native$Graphics$Input.checkbox;+   var customButton = $Native$Graphics$Input.customButton;+   var button = $Native$Graphics$Input.button;+   _elm.Graphics.Input.values = {_op: _op+                                ,button: button+                                ,customButton: customButton+                                ,checkbox: checkbox+                                ,dropDown: dropDown+                                ,hoverable: hoverable+                                ,clickable: clickable};+   return _elm.Graphics.Input.values;+};+Elm.Html = Elm.Html || {};+Elm.Html.make = function (_elm) {+   "use strict";+   _elm.Html = _elm.Html || {};+   if (_elm.Html.values)+   return _elm.Html.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Html",+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $VirtualDom = Elm.VirtualDom.make(_elm);+   var fromElement = $VirtualDom.fromElement;+   var toElement = $VirtualDom.toElement;+   var text = $VirtualDom.text;+   var node = $VirtualDom.node;+   var body = node("body");+   var section = node("section");+   var nav = node("nav");+   var article = node("article");+   var aside = node("aside");+   var h1 = node("h1");+   var h2 = node("h2");+   var h3 = node("h3");+   var h4 = node("h4");+   var h5 = node("h5");+   var h6 = node("h6");+   var header = node("header");+   var footer = node("footer");+   var address = node("address");+   var main$ = node("main");+   var p = node("p");+   var hr = node("hr");+   var pre = node("pre");+   var blockquote = node("blockquote");+   var ol = node("ol");+   var ul = node("ul");+   var li = node("li");+   var dl = node("dl");+   var dt = node("dt");+   var dd = node("dd");+   var figure = node("figure");+   var figcaption = node("figcaption");+   var div = node("div");+   var a = node("a");+   var em = node("em");+   var strong = node("strong");+   var small = node("small");+   var s = node("s");+   var cite = node("cite");+   var q = node("q");+   var dfn = node("dfn");+   var abbr = node("abbr");+   var time = node("time");+   var code = node("code");+   var $var = node("var");+   var samp = node("samp");+   var kbd = node("kbd");+   var sub = node("sub");+   var sup = node("sup");+   var i = node("i");+   var b = node("b");+   var u = node("u");+   var mark = node("mark");+   var ruby = node("ruby");+   var rt = node("rt");+   var rp = node("rp");+   var bdi = node("bdi");+   var bdo = node("bdo");+   var span = node("span");+   var br = node("br");+   var wbr = node("wbr");+   var ins = node("ins");+   var del = node("del");+   var img = node("img");+   var iframe = node("iframe");+   var embed = node("embed");+   var object = node("object");+   var param = node("param");+   var video = node("video");+   var audio = node("audio");+   var source = node("source");+   var track = node("track");+   var canvas = node("canvas");+   var svg = node("svg");+   var math = node("math");+   var table = node("table");+   var caption = node("caption");+   var colgroup = node("colgroup");+   var col = node("col");+   var tbody = node("tbody");+   var thead = node("thead");+   var tfoot = node("tfoot");+   var tr = node("tr");+   var td = node("td");+   var th = node("th");+   var form = node("form");+   var fieldset = node("fieldset");+   var legend = node("legend");+   var label = node("label");+   var input = node("input");+   var button = node("button");+   var select = node("select");+   var datalist = node("datalist");+   var optgroup = node("optgroup");+   var option = node("option");+   var textarea = node("textarea");+   var keygen = node("keygen");+   var output = node("output");+   var progress = node("progress");+   var meter = node("meter");+   var details = node("details");+   var summary = node("summary");+   var menuitem = node("menuitem");+   var menu = node("menu");+   _elm.Html.values = {_op: _op+                      ,node: node+                      ,text: text+                      ,toElement: toElement+                      ,fromElement: fromElement+                      ,body: body+                      ,section: section+                      ,nav: nav+                      ,article: article+                      ,aside: aside+                      ,h1: h1+                      ,h2: h2+                      ,h3: h3+                      ,h4: h4+                      ,h5: h5+                      ,h6: h6+                      ,header: header+                      ,footer: footer+                      ,address: address+                      ,main$: main$+                      ,p: p+                      ,hr: hr+                      ,pre: pre+                      ,blockquote: blockquote+                      ,ol: ol+                      ,ul: ul+                      ,li: li+                      ,dl: dl+                      ,dt: dt+                      ,dd: dd+                      ,figure: figure+                      ,figcaption: figcaption+                      ,div: div+                      ,a: a+                      ,em: em+                      ,strong: strong+                      ,small: small+                      ,s: s+                      ,cite: cite+                      ,q: q+                      ,dfn: dfn+                      ,abbr: abbr+                      ,time: time+                      ,code: code+                      ,$var: $var+                      ,samp: samp+                      ,kbd: kbd+                      ,sub: sub+                      ,sup: sup+                      ,i: i+                      ,b: b+                      ,u: u+                      ,mark: mark+                      ,ruby: ruby+                      ,rt: rt+                      ,rp: rp+                      ,bdi: bdi+                      ,bdo: bdo+                      ,span: span+                      ,br: br+                      ,wbr: wbr+                      ,ins: ins+                      ,del: del+                      ,img: img+                      ,iframe: iframe+                      ,embed: embed+                      ,object: object+                      ,param: param+                      ,video: video+                      ,audio: audio+                      ,source: source+                      ,track: track+                      ,canvas: canvas+                      ,svg: svg+                      ,math: math+                      ,table: table+                      ,caption: caption+                      ,colgroup: colgroup+                      ,col: col+                      ,tbody: tbody+                      ,thead: thead+                      ,tfoot: tfoot+                      ,tr: tr+                      ,td: td+                      ,th: th+                      ,form: form+                      ,fieldset: fieldset+                      ,legend: legend+                      ,label: label+                      ,input: input+                      ,button: button+                      ,select: select+                      ,datalist: datalist+                      ,optgroup: optgroup+                      ,option: option+                      ,textarea: textarea+                      ,keygen: keygen+                      ,output: output+                      ,progress: progress+                      ,meter: meter+                      ,details: details+                      ,summary: summary+                      ,menuitem: menuitem+                      ,menu: menu};+   return _elm.Html.values;+};+Elm.Html = Elm.Html || {};+Elm.Html.Attributes = Elm.Html.Attributes || {};+Elm.Html.Attributes.make = function (_elm) {+   "use strict";+   _elm.Html = _elm.Html || {};+   _elm.Html.Attributes = _elm.Html.Attributes || {};+   if (_elm.Html.Attributes.values)+   return _elm.Html.Attributes.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Html.Attributes",+   $Basics = Elm.Basics.make(_elm),+   $Html = Elm.Html.make(_elm),+   $Json$Encode = Elm.Json.Encode.make(_elm),+   $List = Elm.List.make(_elm),+   $String = Elm.String.make(_elm),+   $VirtualDom = Elm.VirtualDom.make(_elm);+   var attribute = $VirtualDom.attribute;+   var property = $VirtualDom.property;+   var stringProperty = F2(function (name,+   string) {+      return A2(property,+      name,+      $Json$Encode.string(string));+   });+   var $class = function (name) {+      return A2(stringProperty,+      "className",+      name);+   };+   var id = function (name) {+      return A2(stringProperty,+      "id",+      name);+   };+   var title = function (name) {+      return A2(stringProperty,+      "title",+      name);+   };+   var accesskey = function ($char) {+      return A2(stringProperty,+      "accesskey",+      $String.fromList(_L.fromArray([$char])));+   };+   var contextmenu = function (value) {+      return A2(stringProperty,+      "contextmenu",+      value);+   };+   var dir = function (value) {+      return A2(stringProperty,+      "dir",+      value);+   };+   var draggable = function (value) {+      return A2(stringProperty,+      "draggable",+      value);+   };+   var dropzone = function (value) {+      return A2(stringProperty,+      "dropzone",+      value);+   };+   var itemprop = function (value) {+      return A2(stringProperty,+      "itemprop",+      value);+   };+   var lang = function (value) {+      return A2(stringProperty,+      "lang",+      value);+   };+   var tabindex = function (n) {+      return A2(stringProperty,+      "tabIndex",+      $Basics.toString(n));+   };+   var charset = function (value) {+      return A2(stringProperty,+      "charset",+      value);+   };+   var content = function (value) {+      return A2(stringProperty,+      "content",+      value);+   };+   var httpEquiv = function (value) {+      return A2(stringProperty,+      "httpEquiv",+      value);+   };+   var language = function (value) {+      return A2(stringProperty,+      "language",+      value);+   };+   var src = function (value) {+      return A2(stringProperty,+      "src",+      value);+   };+   var height = function (value) {+      return A2(stringProperty,+      "height",+      $Basics.toString(value));+   };+   var width = function (value) {+      return A2(stringProperty,+      "width",+      $Basics.toString(value));+   };+   var alt = function (value) {+      return A2(stringProperty,+      "alt",+      value);+   };+   var preload = function (value) {+      return A2(stringProperty,+      "preload",+      value);+   };+   var poster = function (value) {+      return A2(stringProperty,+      "poster",+      value);+   };+   var kind = function (value) {+      return A2(stringProperty,+      "kind",+      value);+   };+   var srclang = function (value) {+      return A2(stringProperty,+      "srclang",+      value);+   };+   var sandbox = function (value) {+      return A2(stringProperty,+      "sandbox",+      value);+   };+   var srcdoc = function (value) {+      return A2(stringProperty,+      "srcdoc",+      value);+   };+   var type$ = function (value) {+      return A2(stringProperty,+      "type",+      value);+   };+   var value = function (value) {+      return A2(stringProperty,+      "value",+      value);+   };+   var placeholder = function (value) {+      return A2(stringProperty,+      "placeholder",+      value);+   };+   var accept = function (value) {+      return A2(stringProperty,+      "accept",+      value);+   };+   var acceptCharset = function (value) {+      return A2(stringProperty,+      "acceptCharset",+      value);+   };+   var action = function (value) {+      return A2(stringProperty,+      "action",+      value);+   };+   var autocomplete = function (bool) {+      return A2(stringProperty,+      "autocomplete",+      bool ? "on" : "off");+   };+   var autosave = function (value) {+      return A2(stringProperty,+      "autosave",+      value);+   };+   var enctype = function (value) {+      return A2(stringProperty,+      "enctype",+      value);+   };+   var formaction = function (value) {+      return A2(stringProperty,+      "formaction",+      value);+   };+   var list = function (value) {+      return A2(stringProperty,+      "list",+      value);+   };+   var minlength = function (n) {+      return A2(stringProperty,+      "minLength",+      $Basics.toString(n));+   };+   var maxlength = function (n) {+      return A2(stringProperty,+      "maxLength",+      $Basics.toString(n));+   };+   var method = function (value) {+      return A2(stringProperty,+      "method",+      value);+   };+   var name = function (value) {+      return A2(stringProperty,+      "name",+      value);+   };+   var pattern = function (value) {+      return A2(stringProperty,+      "pattern",+      value);+   };+   var size = function (n) {+      return A2(stringProperty,+      "size",+      $Basics.toString(n));+   };+   var $for = function (value) {+      return A2(stringProperty,+      "htmlFor",+      value);+   };+   var form = function (value) {+      return A2(stringProperty,+      "form",+      value);+   };+   var max = function (value) {+      return A2(stringProperty,+      "max",+      value);+   };+   var min = function (value) {+      return A2(stringProperty,+      "min",+      value);+   };+   var step = function (n) {+      return A2(stringProperty,+      "step",+      n);+   };+   var cols = function (n) {+      return A2(stringProperty,+      "cols",+      $Basics.toString(n));+   };+   var rows = function (n) {+      return A2(stringProperty,+      "rows",+      $Basics.toString(n));+   };+   var wrap = function (value) {+      return A2(stringProperty,+      "wrap",+      value);+   };+   var usemap = function (value) {+      return A2(stringProperty,+      "useMap",+      value);+   };+   var shape = function (value) {+      return A2(stringProperty,+      "shape",+      value);+   };+   var coords = function (value) {+      return A2(stringProperty,+      "coords",+      value);+   };+   var challenge = function (value) {+      return A2(stringProperty,+      "challenge",+      value);+   };+   var keytype = function (value) {+      return A2(stringProperty,+      "keytype",+      value);+   };+   var align = function (value) {+      return A2(stringProperty,+      "align",+      value);+   };+   var cite = function (value) {+      return A2(stringProperty,+      "cite",+      value);+   };+   var href = function (value) {+      return A2(stringProperty,+      "href",+      value);+   };+   var target = function (value) {+      return A2(stringProperty,+      "target",+      value);+   };+   var downloadAs = function (value) {+      return A2(stringProperty,+      "download",+      value);+   };+   var hreflang = function (value) {+      return A2(stringProperty,+      "hreflang",+      value);+   };+   var media = function (value) {+      return A2(stringProperty,+      "media",+      value);+   };+   var ping = function (value) {+      return A2(stringProperty,+      "ping",+      value);+   };+   var rel = function (value) {+      return A2(stringProperty,+      "rel",+      value);+   };+   var datetime = function (value) {+      return A2(stringProperty,+      "datetime",+      value);+   };+   var pubdate = function (value) {+      return A2(stringProperty,+      "pubdate",+      value);+   };+   var start = function (n) {+      return A2(stringProperty,+      "start",+      $Basics.toString(n));+   };+   var colspan = function (n) {+      return A2(stringProperty,+      "colSpan",+      $Basics.toString(n));+   };+   var headers = function (value) {+      return A2(stringProperty,+      "headers",+      value);+   };+   var rowspan = function (n) {+      return A2(stringProperty,+      "rowSpan",+      $Basics.toString(n));+   };+   var scope = function (value) {+      return A2(stringProperty,+      "scope",+      value);+   };+   var manifest = function (value) {+      return A2(stringProperty,+      "manifest",+      value);+   };+   var boolProperty = F2(function (name,+   bool) {+      return A2(property,+      name,+      $Json$Encode.bool(bool));+   });+   var hidden = function (bool) {+      return A2(boolProperty,+      "hidden",+      bool);+   };+   var contenteditable = function (bool) {+      return A2(boolProperty,+      "contentEditable",+      bool);+   };+   var spellcheck = function (bool) {+      return A2(boolProperty,+      "spellcheck",+      bool);+   };+   var async = function (bool) {+      return A2(boolProperty,+      "async",+      bool);+   };+   var defer = function (bool) {+      return A2(boolProperty,+      "defer",+      bool);+   };+   var scoped = function (bool) {+      return A2(boolProperty,+      "scoped",+      bool);+   };+   var autoplay = function (bool) {+      return A2(boolProperty,+      "autoplay",+      bool);+   };+   var controls = function (bool) {+      return A2(boolProperty,+      "controls",+      bool);+   };+   var loop = function (bool) {+      return A2(boolProperty,+      "loop",+      bool);+   };+   var $default = function (bool) {+      return A2(boolProperty,+      "default",+      bool);+   };+   var seamless = function (bool) {+      return A2(boolProperty,+      "seamless",+      bool);+   };+   var checked = function (bool) {+      return A2(boolProperty,+      "checked",+      bool);+   };+   var selected = function (bool) {+      return A2(boolProperty,+      "selected",+      bool);+   };+   var autofocus = function (bool) {+      return A2(boolProperty,+      "autofocus",+      bool);+   };+   var disabled = function (bool) {+      return A2(boolProperty,+      "disabled",+      bool);+   };+   var multiple = function (bool) {+      return A2(boolProperty,+      "multiple",+      bool);+   };+   var novalidate = function (bool) {+      return A2(boolProperty,+      "noValidate",+      bool);+   };+   var readonly = function (bool) {+      return A2(boolProperty,+      "readOnly",+      bool);+   };+   var required = function (bool) {+      return A2(boolProperty,+      "required",+      bool);+   };+   var ismap = function (value) {+      return A2(boolProperty,+      "isMap",+      value);+   };+   var download = function (bool) {+      return A2(boolProperty,+      "download",+      bool);+   };+   var reversed = function (bool) {+      return A2(boolProperty,+      "reversed",+      bool);+   };+   var classList = function (list) {+      return $class($String.join(" ")($List.map($Basics.fst)($List.filter($Basics.snd)(list))));+   };+   var style = function (props) {+      return property("style")($Json$Encode.object($List.map(function (_v0) {+         return function () {+            switch (_v0.ctor)+            {case "_Tuple2":+               return {ctor: "_Tuple2"+                      ,_0: _v0._0+                      ,_1: $Json$Encode.string(_v0._1)};}+            _U.badCase($moduleName,+            "on line 133, column 35 to 57");+         }();+      })(props)));+   };+   var key = function (k) {+      return A2(stringProperty,+      "key",+      k);+   };+   _elm.Html.Attributes.values = {_op: _op+                                 ,key: key+                                 ,style: style+                                 ,classList: classList+                                 ,property: property+                                 ,stringProperty: stringProperty+                                 ,boolProperty: boolProperty+                                 ,attribute: attribute+                                 ,$class: $class+                                 ,hidden: hidden+                                 ,id: id+                                 ,title: title+                                 ,accesskey: accesskey+                                 ,contenteditable: contenteditable+                                 ,contextmenu: contextmenu+                                 ,dir: dir+                                 ,draggable: draggable+                                 ,dropzone: dropzone+                                 ,itemprop: itemprop+                                 ,lang: lang+                                 ,spellcheck: spellcheck+                                 ,tabindex: tabindex+                                 ,async: async+                                 ,charset: charset+                                 ,content: content+                                 ,defer: defer+                                 ,httpEquiv: httpEquiv+                                 ,language: language+                                 ,scoped: scoped+                                 ,src: src+                                 ,height: height+                                 ,width: width+                                 ,alt: alt+                                 ,autoplay: autoplay+                                 ,controls: controls+                                 ,loop: loop+                                 ,preload: preload+                                 ,poster: poster+                                 ,$default: $default+                                 ,kind: kind+                                 ,srclang: srclang+                                 ,sandbox: sandbox+                                 ,seamless: seamless+                                 ,srcdoc: srcdoc+                                 ,type$: type$+                                 ,value: value+                                 ,checked: checked+                                 ,placeholder: placeholder+                                 ,selected: selected+                                 ,accept: accept+                                 ,acceptCharset: acceptCharset+                                 ,action: action+                                 ,autocomplete: autocomplete+                                 ,autofocus: autofocus+                                 ,autosave: autosave+                                 ,disabled: disabled+                                 ,enctype: enctype+                                 ,formaction: formaction+                                 ,list: list+                                 ,minlength: minlength+                                 ,maxlength: maxlength+                                 ,method: method+                                 ,multiple: multiple+                                 ,name: name+                                 ,novalidate: novalidate+                                 ,pattern: pattern+                                 ,readonly: readonly+                                 ,required: required+                                 ,size: size+                                 ,$for: $for+                                 ,form: form+                                 ,max: max+                                 ,min: min+                                 ,step: step+                                 ,cols: cols+                                 ,rows: rows+                                 ,wrap: wrap+                                 ,ismap: ismap+                                 ,usemap: usemap+                                 ,shape: shape+                                 ,coords: coords+                                 ,challenge: challenge+                                 ,keytype: keytype+                                 ,align: align+                                 ,cite: cite+                                 ,href: href+                                 ,target: target+                                 ,download: download+                                 ,downloadAs: downloadAs+                                 ,hreflang: hreflang+                                 ,media: media+                                 ,ping: ping+                                 ,rel: rel+                                 ,datetime: datetime+                                 ,pubdate: pubdate+                                 ,reversed: reversed+                                 ,start: start+                                 ,colspan: colspan+                                 ,headers: headers+                                 ,rowspan: rowspan+                                 ,scope: scope+                                 ,manifest: manifest};+   return _elm.Html.Attributes.values;+};+Elm.Json = Elm.Json || {};+Elm.Json.Decode = Elm.Json.Decode || {};+Elm.Json.Decode.make = function (_elm) {+   "use strict";+   _elm.Json = _elm.Json || {};+   _elm.Json.Decode = _elm.Json.Decode || {};+   if (_elm.Json.Decode.values)+   return _elm.Json.Decode.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Json.Decode",+   $Array = Elm.Array.make(_elm),+   $Dict = Elm.Dict.make(_elm),+   $Json$Encode = Elm.Json.Encode.make(_elm),+   $List = Elm.List.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Json = Elm.Native.Json.make(_elm),+   $Result = Elm.Result.make(_elm);+   var tuple8 = $Native$Json.decodeTuple8;+   var tuple7 = $Native$Json.decodeTuple7;+   var tuple6 = $Native$Json.decodeTuple6;+   var tuple5 = $Native$Json.decodeTuple5;+   var tuple4 = $Native$Json.decodeTuple4;+   var tuple3 = $Native$Json.decodeTuple3;+   var tuple2 = $Native$Json.decodeTuple2;+   var tuple1 = $Native$Json.decodeTuple1;+   var succeed = $Native$Json.succeed;+   var fail = $Native$Json.fail;+   var andThen = $Native$Json.andThen;+   var customDecoder = $Native$Json.customDecoder;+   var decodeValue = $Native$Json.runDecoderValue;+   var value = $Native$Json.decodeValue;+   var maybe = $Native$Json.decodeMaybe;+   var $null = $Native$Json.decodeNull;+   var array = $Native$Json.decodeArray;+   var list = $Native$Json.decodeList;+   var bool = $Native$Json.decodeBool;+   var $int = $Native$Json.decodeInt;+   var $float = $Native$Json.decodeFloat;+   var string = $Native$Json.decodeString;+   var oneOf = $Native$Json.oneOf;+   var keyValuePairs = $Native$Json.decodeKeyValuePairs;+   var object8 = $Native$Json.decodeObject8;+   var object7 = $Native$Json.decodeObject7;+   var object6 = $Native$Json.decodeObject6;+   var object5 = $Native$Json.decodeObject5;+   var object4 = $Native$Json.decodeObject4;+   var object3 = $Native$Json.decodeObject3;+   var object2 = $Native$Json.decodeObject2;+   var object1 = $Native$Json.decodeObject1;+   _op[":="] = $Native$Json.decodeField;+   var at = F2(function (fields,+   decoder) {+      return A3($List.foldr,+      F2(function (x,y) {+         return A2(_op[":="],x,y);+      }),+      decoder,+      fields);+   });+   var decodeString = $Native$Json.runDecoderString;+   var map = $Native$Json.decodeObject1;+   var dict = function (decoder) {+      return A2(map,+      $Dict.fromList,+      keyValuePairs(decoder));+   };+   var Decoder = {ctor: "Decoder"};+   _elm.Json.Decode.values = {_op: _op+                             ,Decoder: Decoder+                             ,map: map+                             ,decodeString: decodeString+                             ,at: at+                             ,object1: object1+                             ,object2: object2+                             ,object3: object3+                             ,object4: object4+                             ,object5: object5+                             ,object6: object6+                             ,object7: object7+                             ,object8: object8+                             ,keyValuePairs: keyValuePairs+                             ,dict: dict+                             ,oneOf: oneOf+                             ,string: string+                             ,$float: $float+                             ,$int: $int+                             ,bool: bool+                             ,list: list+                             ,array: array+                             ,$null: $null+                             ,maybe: maybe+                             ,value: value+                             ,decodeValue: decodeValue+                             ,customDecoder: customDecoder+                             ,andThen: andThen+                             ,fail: fail+                             ,succeed: succeed+                             ,tuple1: tuple1+                             ,tuple2: tuple2+                             ,tuple3: tuple3+                             ,tuple4: tuple4+                             ,tuple5: tuple5+                             ,tuple6: tuple6+                             ,tuple7: tuple7+                             ,tuple8: tuple8};+   return _elm.Json.Decode.values;+};+Elm.Json = Elm.Json || {};+Elm.Json.Encode = Elm.Json.Encode || {};+Elm.Json.Encode.make = function (_elm) {+   "use strict";+   _elm.Json = _elm.Json || {};+   _elm.Json.Encode = _elm.Json.Encode || {};+   if (_elm.Json.Encode.values)+   return _elm.Json.Encode.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Json.Encode",+   $Array = Elm.Array.make(_elm),+   $Native$Json = Elm.Native.Json.make(_elm);+   var list = $Native$Json.encodeList;+   var array = $Native$Json.encodeArray;+   var object = $Native$Json.encodeObject;+   var $null = $Native$Json.encodeNull;+   var bool = $Native$Json.identity;+   var $float = $Native$Json.identity;+   var $int = $Native$Json.identity;+   var string = $Native$Json.identity;+   var encode = $Native$Json.encode;+   var Value = {ctor: "Value"};+   _elm.Json.Encode.values = {_op: _op+                             ,Value: Value+                             ,encode: encode+                             ,string: string+                             ,$int: $int+                             ,$float: $float+                             ,bool: bool+                             ,$null: $null+                             ,object: object+                             ,array: array+                             ,list: list};+   return _elm.Json.Encode.values;+};+Elm.List = Elm.List || {};+Elm.List.make = function (_elm) {+   "use strict";+   _elm.List = _elm.List || {};+   if (_elm.List.values)+   return _elm.List.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "List",+   $Basics = Elm.Basics.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$List = Elm.Native.List.make(_elm);+   var sortWith = $Native$List.sortWith;+   var sortBy = $Native$List.sortBy;+   var sort = function (xs) {+      return A2(sortBy,+      $Basics.identity,+      xs);+   };+   var repeat = $Native$List.repeat;+   var drop = $Native$List.drop;+   var take = $Native$List.take;+   var map5 = $Native$List.map5;+   var map4 = $Native$List.map4;+   var map3 = $Native$List.map3;+   var map2 = $Native$List.map2;+   var any = $Native$List.any;+   var all = F2(function (pred,+   xs) {+      return $Basics.not(A2(any,+      function ($) {+         return $Basics.not(pred($));+      },+      xs));+   });+   var foldr = $Native$List.foldr;+   var foldl = $Native$List.foldl;+   var length = function (xs) {+      return A3(foldl,+      F2(function (_v0,i) {+         return function () {+            return i + 1;+         }();+      }),+      0,+      xs);+   };+   var sum = function (numbers) {+      return A3(foldl,+      F2(function (x,y) {+         return x + y;+      }),+      0,+      numbers);+   };+   var product = function (numbers) {+      return A3(foldl,+      F2(function (x,y) {+         return x * y;+      }),+      1,+      numbers);+   };+   var maximum = function (list) {+      return function () {+         switch (list.ctor)+         {case "::":+            return $Maybe.Just(A3(foldl,+              $Basics.max,+              list._0,+              list._1));}+         return $Maybe.Nothing;+      }();+   };+   var minimum = function (list) {+      return function () {+         switch (list.ctor)+         {case "::":+            return $Maybe.Just(A3(foldl,+              $Basics.min,+              list._0,+              list._1));}+         return $Maybe.Nothing;+      }();+   };+   var indexedMap = F2(function (f,+   xs) {+      return A3(map2,+      f,+      _L.range(0,length(xs) - 1),+      xs);+   });+   var member = F2(function (x,+   xs) {+      return A2(any,+      function (a) {+         return _U.eq(a,x);+      },+      xs);+   });+   var isEmpty = function (xs) {+      return function () {+         switch (xs.ctor)+         {case "[]": return true;}+         return false;+      }();+   };+   var tail = function (list) {+      return function () {+         switch (list.ctor)+         {case "::":+            return $Maybe.Just(list._1);+            case "[]":+            return $Maybe.Nothing;}+         _U.badCase($moduleName,+         "between lines 87 and 95");+      }();+   };+   var head = function (list) {+      return function () {+         switch (list.ctor)+         {case "::":+            return $Maybe.Just(list._0);+            case "[]":+            return $Maybe.Nothing;}+         _U.badCase($moduleName,+         "between lines 75 and 84");+      }();+   };+   _op["::"] = $Native$List.cons;+   var map = F2(function (f,xs) {+      return A3(foldr,+      F2(function (x,acc) {+         return A2(_op["::"],+         f(x),+         acc);+      }),+      _L.fromArray([]),+      xs);+   });+   var filter = F2(function (pred,+   xs) {+      return function () {+         var conditionalCons = F2(function (x,+         xs$) {+            return pred(x) ? A2(_op["::"],+            x,+            xs$) : xs$;+         });+         return A3(foldr,+         conditionalCons,+         _L.fromArray([]),+         xs);+      }();+   });+   var maybeCons = F3(function (f,+   mx,+   xs) {+      return function () {+         var _v15 = f(mx);+         switch (_v15.ctor)+         {case "Just":+            return A2(_op["::"],_v15._0,xs);+            case "Nothing": return xs;}+         _U.badCase($moduleName,+         "between lines 179 and 186");+      }();+   });+   var filterMap = F2(function (f,+   xs) {+      return A3(foldr,+      maybeCons(f),+      _L.fromArray([]),+      xs);+   });+   var reverse = function (list) {+      return A3(foldl,+      F2(function (x,y) {+         return A2(_op["::"],x,y);+      }),+      _L.fromArray([]),+      list);+   };+   var scanl = F3(function (f,+   b,+   xs) {+      return function () {+         var scan1 = F2(function (x,+         accAcc) {+            return function () {+               switch (accAcc.ctor)+               {case "::": return A2(_op["::"],+                    A2(f,x,accAcc._0),+                    accAcc);+                  case "[]":+                  return _L.fromArray([]);}+               _U.badCase($moduleName,+               "between lines 148 and 151");+            }();+         });+         return reverse(A3(foldl,+         scan1,+         _L.fromArray([b]),+         xs));+      }();+   });+   var append = F2(function (xs,+   ys) {+      return function () {+         switch (ys.ctor)+         {case "[]": return xs;}+         return A3(foldr,+         F2(function (x,y) {+            return A2(_op["::"],x,y);+         }),+         ys,+         xs);+      }();+   });+   var concat = function (lists) {+      return A3(foldr,+      append,+      _L.fromArray([]),+      lists);+   };+   var concatMap = F2(function (f,+   list) {+      return concat(A2(map,+      f,+      list));+   });+   var partition = F2(function (pred,+   list) {+      return function () {+         var step = F2(function (x,+         _v21) {+            return function () {+               switch (_v21.ctor)+               {case "_Tuple2":+                  return pred(x) ? {ctor: "_Tuple2"+                                   ,_0: A2(_op["::"],x,_v21._0)+                                   ,_1: _v21._1} : {ctor: "_Tuple2"+                                                   ,_0: _v21._0+                                                   ,_1: A2(_op["::"],+                                                   x,+                                                   _v21._1)};}+               _U.badCase($moduleName,+               "between lines 301 and 303");+            }();+         });+         return A3(foldr,+         step,+         {ctor: "_Tuple2"+         ,_0: _L.fromArray([])+         ,_1: _L.fromArray([])},+         list);+      }();+   });+   var unzip = function (pairs) {+      return function () {+         var step = F2(function (_v25,+         _v26) {+            return function () {+               switch (_v26.ctor)+               {case "_Tuple2":+                  return function () {+                       switch (_v25.ctor)+                       {case "_Tuple2":+                          return {ctor: "_Tuple2"+                                 ,_0: A2(_op["::"],+                                 _v25._0,+                                 _v26._0)+                                 ,_1: A2(_op["::"],+                                 _v25._1,+                                 _v26._1)};}+                       _U.badCase($moduleName,+                       "on line 339, column 12 to 28");+                    }();}+               _U.badCase($moduleName,+               "on line 339, column 12 to 28");+            }();+         });+         return A3(foldr,+         step,+         {ctor: "_Tuple2"+         ,_0: _L.fromArray([])+         ,_1: _L.fromArray([])},+         pairs);+      }();+   };+   var intersperse = F2(function (sep,+   xs) {+      return function () {+         switch (xs.ctor)+         {case "::": return function () {+                 var step = F2(function (x,+                 rest) {+                    return A2(_op["::"],+                    sep,+                    A2(_op["::"],x,rest));+                 });+                 var spersed = A3(foldr,+                 step,+                 _L.fromArray([]),+                 xs._1);+                 return A2(_op["::"],+                 xs._0,+                 spersed);+              }();+            case "[]":+            return _L.fromArray([]);}+         _U.badCase($moduleName,+         "between lines 350 and 361");+      }();+   });+   _elm.List.values = {_op: _op+                      ,isEmpty: isEmpty+                      ,length: length+                      ,reverse: reverse+                      ,member: member+                      ,head: head+                      ,tail: tail+                      ,filter: filter+                      ,take: take+                      ,drop: drop+                      ,repeat: repeat+                      ,append: append+                      ,concat: concat+                      ,intersperse: intersperse+                      ,partition: partition+                      ,unzip: unzip+                      ,map: map+                      ,map2: map2+                      ,map3: map3+                      ,map4: map4+                      ,map5: map5+                      ,filterMap: filterMap+                      ,concatMap: concatMap+                      ,indexedMap: indexedMap+                      ,foldr: foldr+                      ,foldl: foldl+                      ,sum: sum+                      ,product: product+                      ,maximum: maximum+                      ,minimum: minimum+                      ,all: all+                      ,any: any+                      ,scanl: scanl+                      ,sort: sort+                      ,sortBy: sortBy+                      ,sortWith: sortWith};+   return _elm.List.values;+};+Elm.Markdown = Elm.Markdown || {};+Elm.Markdown.make = function (_elm) {+   "use strict";+   _elm.Markdown = _elm.Markdown || {};+   if (_elm.Markdown.values)+   return _elm.Markdown.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Markdown",+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $Html = Elm.Html.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Markdown = Elm.Native.Markdown.make(_elm);+   var toElementWith = $Native$Markdown.toElementWith;+   var toHtmlWith = $Native$Markdown.toHtmlWith;+   var defaultOptions = {_: {}+                        ,githubFlavored: $Maybe.Just({_: {}+                                                     ,breaks: false+                                                     ,tables: false})+                        ,sanitize: false+                        ,smartypants: false};+   var Options = F3(function (a,+   b,+   c) {+      return {_: {}+             ,githubFlavored: a+             ,sanitize: b+             ,smartypants: c};+   });+   var toElement = function (string) {+      return A2($Native$Markdown.toElementWith,+      defaultOptions,+      string);+   };+   var toHtml = function (string) {+      return A2($Native$Markdown.toHtmlWith,+      defaultOptions,+      string);+   };+   _elm.Markdown.values = {_op: _op+                          ,toHtml: toHtml+                          ,toElement: toElement+                          ,Options: Options+                          ,defaultOptions: defaultOptions+                          ,toHtmlWith: toHtmlWith+                          ,toElementWith: toElementWith};+   return _elm.Markdown.values;+};+Elm.Maybe = Elm.Maybe || {};+Elm.Maybe.make = function (_elm) {+   "use strict";+   _elm.Maybe = _elm.Maybe || {};+   if (_elm.Maybe.values)+   return _elm.Maybe.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Maybe";+   var withDefault = F2(function ($default,+   maybe) {+      return function () {+         switch (maybe.ctor)+         {case "Just": return maybe._0;+            case "Nothing":+            return $default;}+         _U.badCase($moduleName,+         "between lines 45 and 56");+      }();+   });+   var Nothing = {ctor: "Nothing"};+   var oneOf = function (maybes) {+      return function () {+         switch (maybes.ctor)+         {case "::": return function () {+                 switch (maybes._0.ctor)+                 {case "Just": return maybes._0;+                    case "Nothing":+                    return oneOf(maybes._1);}+                 _U.badCase($moduleName,+                 "between lines 64 and 73");+              }();+            case "[]": return Nothing;}+         _U.badCase($moduleName,+         "between lines 59 and 73");+      }();+   };+   var andThen = F2(function (maybeValue,+   callback) {+      return function () {+         switch (maybeValue.ctor)+         {case "Just":+            return callback(maybeValue._0);+            case "Nothing": return Nothing;}+         _U.badCase($moduleName,+         "between lines 110 and 112");+      }();+   });+   var Just = function (a) {+      return {ctor: "Just",_0: a};+   };+   var map = F2(function (f,+   maybe) {+      return function () {+         switch (maybe.ctor)+         {case "Just":+            return Just(f(maybe._0));+            case "Nothing": return Nothing;}+         _U.badCase($moduleName,+         "between lines 76 and 107");+      }();+   });+   _elm.Maybe.values = {_op: _op+                       ,andThen: andThen+                       ,map: map+                       ,withDefault: withDefault+                       ,oneOf: oneOf+                       ,Just: Just+                       ,Nothing: Nothing};+   return _elm.Maybe.values;+};+Elm.Native.Array = {};+Elm.Native.Array.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Array = localRuntime.Native.Array || {};+	if (localRuntime.Native.Array.values)+	{+		return localRuntime.Native.Array.values;+	}+	if ('values' in Elm.Native.Array)+	{+		return localRuntime.Native.Array.values = Elm.Native.Array.values;+	}++	var List = Elm.Native.List.make(localRuntime);++	// A RRB-Tree has two distinct data types.+	// Leaf -> "height"  is always 0+	//         "table"   is an array of elements+	// Node -> "height"  is always greater than 0+	//         "table"   is an array of child nodes+	//         "lengths" is an array of accumulated lengths of the child nodes++	// M is the maximal table size. 32 seems fast. E is the allowed increase+	// of search steps when concatting to find an index. Lower values will+	// decrease balancing, but will increase search steps.+	var M = 32;+	var E = 2;++	// An empty array.+	var empty = {+		ctor: "_Array",+		height: 0,+		table: new Array()+	};+++	function get(i, array)+	{+		if (i < 0 || i >= length(array))+		{+			throw new Error(+				"Index " + i + " is out of range. Check the length of " ++				"your array first or use getMaybe or getWithDefault.");+		}+		return unsafeGet(i, array);+	}+++	function unsafeGet(i, array)+	{+		for (var x = array.height; x > 0; x--)+		{+			var slot = i >> (x * 5);+			while (array.lengths[slot] <= i)+			{+				slot++;+			}+			if (slot > 0)+			{+				i -= array.lengths[slot - 1];+			}+			array = array.table[slot];+		}+		return array.table[i];+	}+++	// Sets the value at the index i. Only the nodes leading to i will get+	// copied and updated.+	function set(i, item, array)+	{+		if (i < 0 || length(array) <= i)+		{+			return array;+		}+		return unsafeSet(i, item, array);+	}+++	function unsafeSet(i, item, array)+	{+		array = nodeCopy(array);++		if (array.height == 0)+		{+			array.table[i] = item;+		}+		else+		{+			var slot = getSlot(i, array);+			if (slot > 0)+			{+				i -= array.lengths[slot - 1];+			}+			array.table[slot] = unsafeSet(i, item, array.table[slot]);+		}+		return array;+	}+++	function initialize(len, f)+	{+		if (len == 0)+		{+			return empty;+		}+		var h = Math.floor( Math.log(len) / Math.log(M) );+		return initialize_(f, h, 0, len);+	}++	function initialize_(f, h, from, to)+	{+		if (h == 0)+		{+			var table = new Array((to - from) % (M + 1));+			for (var i = 0; i < table.length; i++)+			{+			  table[i] = f(from + i);+			}+			return {+				ctor: "_Array",+				height: 0,+				table: table+			};+		}++		var step = Math.pow(M, h);+		var table = new Array(Math.ceil((to - from) / step));+		var lengths = new Array(table.length);+		for (var i = 0; i < table.length; i++)+		{+			table[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));+			lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);+		}+		return {+			ctor: "_Array",+			height: h,+			table: table,+			lengths: lengths+		};+	}++	function fromList(list)+	{+		if (list == List.Nil)+		{+			return empty;+		}++		// Allocate M sized blocks (table) and write list elements to it.+		var table = new Array(M);+		var nodes = new Array();+		var i = 0;++		while (list.ctor !== '[]')+		{+			table[i] = list._0;+			list = list._1;+			i++;++			// table is full, so we can push a leaf containing it into the+			// next node.+			if (i == M)+			{+				var leaf = {+					ctor: "_Array",+					height: 0,+					table: table+				};+				fromListPush(leaf, nodes);+				table = new Array(M);+				i = 0;+			}+		}++		// Maybe there is something left on the table.+		if (i > 0)+		{+			var leaf = {+				ctor: "_Array",+				height: 0,+				table: table.splice(0,i)+			};+			fromListPush(leaf, nodes);+		}++		// Go through all of the nodes and eventually push them into higher nodes.+		for (var h = 0; h < nodes.length - 1; h++)+		{+			if (nodes[h].table.length > 0)+			{+				fromListPush(nodes[h], nodes);+			}+		}++		var head = nodes[nodes.length - 1];+		if (head.height > 0 && head.table.length == 1)+		{+			return head.table[0];+		}+		else+		{+			return head;+		}+	}++	// Push a node into a higher node as a child.+	function fromListPush(toPush, nodes)+	{+		var h = toPush.height;++		// Maybe the node on this height does not exist.+		if (nodes.length == h)+		{+			var node = {+				ctor: "_Array",+				height: h + 1,+				table: new Array(),+				lengths: new Array()+			};+			nodes.push(node);+		}++		nodes[h].table.push(toPush);+		var len = length(toPush);+		if (nodes[h].lengths.length > 0)+		{+			len += nodes[h].lengths[nodes[h].lengths.length - 1];+		}+		nodes[h].lengths.push(len);++		if (nodes[h].table.length == M)+		{+			fromListPush(nodes[h], nodes);+			nodes[h] = {+				ctor: "_Array",+				height: h + 1,+				table: new Array(),+				lengths: new Array()+			};+		}+	}++	// Pushes an item via push_ to the bottom right of a tree.+	function push(item, a)+	{+		var pushed = push_(item, a);+		if (pushed !== null)+		{+			return pushed;+		}++		var newTree = create(item, a.height);+		return siblise(a, newTree);+	}++	// Recursively tries to push an item to the bottom-right most+	// tree possible. If there is no space left for the item,+	// null will be returned.+	function push_(item, a)+	{+		// Handle resursion stop at leaf level.+		if (a.height == 0)+		{+			if (a.table.length < M)+			{+				var newA = {+					ctor: "_Array",+					height: 0,+					table: a.table.slice()+				};+				newA.table.push(item);+				return newA;+			}+			else+			{+			  return null;+			}+		}++		// Recursively push+		var pushed = push_(item, botRight(a));++		// There was space in the bottom right tree, so the slot will+		// be updated.+		if (pushed != null)+		{+			var newA = nodeCopy(a);+			newA.table[newA.table.length - 1] = pushed;+			newA.lengths[newA.lengths.length - 1]++;+			return newA;+		}++		// When there was no space left, check if there is space left+		// for a new slot with a tree which contains only the item+		// at the bottom.+		if (a.table.length < M)+		{+			var newSlot = create(item, a.height - 1);+			var newA = nodeCopy(a);+			newA.table.push(newSlot);+			newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));+			return newA;+		}+		else+		{+			return null;+		}+	}++	// Converts an array into a list of elements.+	function toList(a)+	{+		return toList_(List.Nil, a);+	}++	function toList_(list, a)+	{+		for (var i = a.table.length - 1; i >= 0; i--)+		{+			list =+				a.height == 0+					? List.Cons(a.table[i], list)+					: toList_(list, a.table[i]);+		}+		return list;+	}++	// Maps a function over the elements of an array.+	function map(f, a)+	{+		var newA = {+			ctor: "_Array",+			height: a.height,+			table: new Array(a.table.length)+		};+		if (a.height > 0)+		{+			newA.lengths = a.lengths;+		}+		for (var i = 0; i < a.table.length; i++)+		{+			newA.table[i] =+				a.height == 0+					? f(a.table[i])+					: map(f, a.table[i]);+		}+		return newA;+	}++	// Maps a function over the elements with their index as first argument.+	function indexedMap(f, a)+	{+		return indexedMap_(f, a, 0);+	}++	function indexedMap_(f, a, from)+	{+		var newA = {+			ctor: "_Array",+			height: a.height,+			table: new Array(a.table.length)+		};+		if (a.height > 0)+		{+			newA.lengths = a.lengths;+		}+		for (var i = 0; i < a.table.length; i++)+		{+			newA.table[i] =+				a.height == 0+					? A2(f, from + i, a.table[i])+					: indexedMap_(f, a.table[i], i == 0 ? 0 : a.lengths[i - 1]);+		}+		return newA;+	}++	function foldl(f, b, a)+	{+		if (a.height == 0)+		{+			for (var i = 0; i < a.table.length; i++)+			{+				b = A2(f, a.table[i], b);+			}+		}+		else+		{+			for (var i = 0; i < a.table.length; i++)+			{+				b = foldl(f, b, a.table[i]);+			}+		}+		return b;+	}++	function foldr(f, b, a)+	{+		if (a.height == 0)+		{+			for (var i = a.table.length; i--; )+			{+				b = A2(f, a.table[i], b);+			}+		}+		else+		{+			for (var i = a.table.length; i--; )+			{+				b = foldr(f, b, a.table[i]);+			}+		}+		return b;+	}++	// TODO: currently, it slices the right, then the left. This can be+	// optimized.+	function slice(from, to, a)+	{+		if (from < 0)+		{+			from += length(a);+		}+		if (to < 0)+		{+			to += length(a);+		}+		return sliceLeft(from, sliceRight(to, a));+	}++	function sliceRight(to, a)+	{+		if (to == length(a))+		{+			return a;+		}++		// Handle leaf level.+		if (a.height == 0)+		{+			var newA = { ctor:"_Array", height:0 };+			newA.table = a.table.slice(0, to);+			return newA;+		}++		// Slice the right recursively.+		var right = getSlot(to, a);+		var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);++		// Maybe the a node is not even needed, as sliced contains the whole slice.+		if (right == 0)+		{+			return sliced;+		}++		// Create new node.+		var newA = {+			ctor: "_Array",+			height: a.height,+			table: a.table.slice(0, right),+			lengths: a.lengths.slice(0, right)+		};+		if (sliced.table.length > 0)+		{+			newA.table[right] = sliced;+			newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);+		}+		return newA;+	}++	function sliceLeft(from, a)+	{+		if (from == 0)+		{+			return a;+		}++		// Handle leaf level.+		if (a.height == 0)+		{+			var newA = { ctor:"_Array", height:0 };+			newA.table = a.table.slice(from, a.table.length + 1);+			return newA;+		}++		// Slice the left recursively.+		var left = getSlot(from, a);+		var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);++		// Maybe the a node is not even needed, as sliced contains the whole slice.+		if (left == a.table.length - 1)+		{+			return sliced;+		}++		// Create new node.+		var newA = {+			ctor: "_Array",+			height: a.height,+			table: a.table.slice(left, a.table.length + 1),+			lengths: new Array(a.table.length - left)+		};+		newA.table[0] = sliced;+		var len = 0;+		for (var i = 0; i < newA.table.length; i++)+		{+			len += length(newA.table[i]);+			newA.lengths[i] = len;+		}++		return newA;+	}++	// Appends two trees.+	function append(a,b)+	{+		if (a.table.length === 0)+		{+			return b;+		}+		if (b.table.length === 0)+		{+			return a;+		}++		var c = append_(a, b);++		// Check if both nodes can be crunshed together.+		if (c[0].table.length + c[1].table.length <= M)+		{+			if (c[0].table.length === 0)+			{+				return c[1];+			}+			if (c[1].table.length === 0)+			{+				return c[0];+			}++			// Adjust .table and .lengths+			c[0].table = c[0].table.concat(c[1].table);+			if (c[0].height > 0)+			{+				var len = length(c[0]);+				for (var i = 0; i < c[1].lengths.length; i++)+				{+					c[1].lengths[i] += len;+				}+				c[0].lengths = c[0].lengths.concat(c[1].lengths);+			}++			return c[0];+		}++		if (c[0].height > 0)+		{+			var toRemove = calcToRemove(a, b);+			if (toRemove > E)+			{+				c = shuffle(c[0], c[1], toRemove);+			}+		}++		return siblise(c[0], c[1]);+	}++	// Returns an array of two nodes; right and left. One node _may_ be empty.+	function append_(a, b)+	{+		if (a.height === 0 && b.height === 0)+		{+			return [a, b];+		}++		if (a.height !== 1 || b.height !== 1)+		{+			if (a.height === b.height)+			{+				a = nodeCopy(a);+				b = nodeCopy(b);+				var appended = append_(botRight(a), botLeft(b));++				insertRight(a, appended[1]);+				insertLeft(b, appended[0]);+			}+			else if (a.height > b.height)+			{+				a = nodeCopy(a);+				var appended = append_(botRight(a), b);++				insertRight(a, appended[0]);+				b = parentise(appended[1], appended[1].height + 1);+			}+			else+			{+				b = nodeCopy(b);+				var appended = append_(a, botLeft(b));++				var left = appended[0].table.length === 0 ? 0 : 1;+				var right = left === 0 ? 1 : 0;+				insertLeft(b, appended[left]);+				a = parentise(appended[right], appended[right].height + 1);+			}+		}++		// Check if balancing is needed and return based on that.+		if (a.table.length === 0 || b.table.length === 0)+		{+			return [a,b];+		}++		var toRemove = calcToRemove(a, b);+		if (toRemove <= E)+		{+			return [a,b];+		}+		return shuffle(a, b, toRemove);+	}++	// Helperfunctions for append_. Replaces a child node at the side of the parent.+	function insertRight(parent, node)+	{+		var index = parent.table.length - 1;+		parent.table[index] = node;+		parent.lengths[index] = length(node)+		parent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;+	}++	function insertLeft(parent, node)+	{+		if (node.table.length > 0)+		{+			parent.table[0] = node;+			parent.lengths[0] = length(node);++			var len = length(parent.table[0]);+			for (var i = 1; i < parent.lengths.length; i++)+			{+				len += length(parent.table[i]);+				parent.lengths[i] = len;+			}+		}+		else+		{+			parent.table.shift();+			for (var i = 1; i < parent.lengths.length; i++)+			{+				parent.lengths[i] = parent.lengths[i] - parent.lengths[0];+			}+			parent.lengths.shift();+		}+	}++	// Returns the extra search steps for E. Refer to the paper.+	function calcToRemove(a, b)+	{+		var subLengths = 0;+		for (var i = 0; i < a.table.length; i++)+		{+			subLengths += a.table[i].table.length;+		}+		for (var i = 0; i < b.table.length; i++)+		{+			subLengths += b.table[i].table.length;+		}++		var toRemove = a.table.length + b.table.length+		return toRemove - (Math.floor((subLengths - 1) / M) + 1);+	}++	// get2, set2 and saveSlot are helpers for accessing elements over two arrays.+	function get2(a, b, index)+	{+		return index < a.length+			? a[index]+			: b[index - a.length];+	}++	function set2(a, b, index, value)+	{+		if (index < a.length)+		{+			a[index] = value;+		}+		else+		{+			b[index - a.length] = value;+		}+	}++	function saveSlot(a, b, index, slot)+	{+		set2(a.table, b.table, index, slot);++		var l = (index == 0 || index == a.lengths.length)+			? 0+			: get2(a.lengths, a.lengths, index - 1);++		set2(a.lengths, b.lengths, index, l + length(slot));+	}++	// Creates a node or leaf with a given length at their arrays for perfomance.+	// Is only used by shuffle.+	function createNode(h, length)+	{+		if (length < 0)+		{+			length = 0;+		}+		var a = {+			ctor: "_Array",+			height: h,+			table: new Array(length)+		};+		if (h > 0)+		{+			a.lengths = new Array(length);+		}+		return a;+	}++	// Returns an array of two balanced nodes.+	function shuffle(a, b, toRemove)+	{+		var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));+		var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));++		// Skip the slots with size M. More precise: copy the slot references+		// to the new node+		var read = 0;+		while (get2(a.table, b.table, read).table.length % M == 0)+		{+			set2(newA.table, newB.table, read, get2(a.table, b.table, read));+			set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));+			read++;+		}++		// Pulling items from left to right, caching in a slot before writing+		// it into the new nodes.+		var write = read;+		var slot = new createNode(a.height - 1, 0);+		var from = 0;++		// If the current slot is still containing data, then there will be at+		// least one more write, so we do not break this loop yet.+		while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)+		{+			// Find out the max possible items for copying.+			var source = get2(a.table, b.table, read);+			var to = Math.min(M - slot.table.length, source.table.length)++			// Copy and adjust size table.+			slot.table = slot.table.concat(source.table.slice(from, to));+			if (slot.height > 0)+			{+				var len = slot.lengths.length;+				for (var i = len; i < len + to - from; i++)+				{+					slot.lengths[i] = length(slot.table[i]);+					slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);+				}+			}++			from += to;++			// Only proceed to next slots[i] if the current one was+			// fully copied.+			if (source.table.length <= to)+			{+				read++; from = 0;+			}++			// Only create a new slot if the current one is filled up.+			if (slot.table.length == M)+			{+				saveSlot(newA, newB, write, slot);+				slot = createNode(a.height - 1,0);+				write++;+			}+		}++		// Cleanup after the loop. Copy the last slot into the new nodes.+		if (slot.table.length > 0)+		{+			saveSlot(newA, newB, write, slot);+			write++;+		}++		// Shift the untouched slots to the left+		while (read < a.table.length + b.table.length )+		{+			saveSlot(newA, newB, write, get2(a.table, b.table, read));+			read++;+			write++;+		}++		return [newA, newB];+	}++	// Navigation functions+	function botRight(a)+	{+		return a.table[a.table.length - 1];+	}+	function botLeft(a)+	{+		return a.table[0];+	}++	// Copies a node for updating. Note that you should not use this if+	// only updating only one of "table" or "lengths" for performance reasons.+	function nodeCopy(a)+	{+		var newA = {+			ctor: "_Array",+			height: a.height,+			table: a.table.slice()+		};+		if (a.height > 0)+		{+			newA.lengths = a.lengths.slice();+		}+		return newA;+	}++	// Returns how many items are in the tree.+	function length(array)+	{+		if (array.height == 0)+		{+			return array.table.length;+		}+		else+		{+			return array.lengths[array.lengths.length - 1];+		}+	}++	// Calculates in which slot of "table" the item probably is, then+	// find the exact slot via forward searching in  "lengths". Returns the index.+	function getSlot(i, a)+	{+		var slot = i >> (5 * a.height);+		while (a.lengths[slot] <= i)+		{+			slot++;+		}+		return slot;+	}++	// Recursively creates a tree with a given height containing+	// only the given item.+	function create(item, h)+	{+		if (h == 0)+		{+			return {+				ctor: "_Array",+				height: 0,+				table: [item]+			};+		}+		return {+			ctor: "_Array",+			height: h,+			table: [create(item, h - 1)],+			lengths: [1]+		};+	}++	// Recursively creates a tree that contains the given tree.+	function parentise(tree, h)+	{+		if (h == tree.height)+		{+			return tree;+		}++		return {+			ctor: "_Array",+			height: h,+			table: [parentise(tree, h - 1)],+			lengths: [length(tree)]+		};+	}++	// Emphasizes blood brotherhood beneath two trees.+	function siblise(a, b)+	{+		return {+			ctor: "_Array",+			height: a.height + 1,+			table: [a, b],+			lengths: [length(a), length(a) + length(b)]+		};+	}++	function toJSArray(a)+	{+		var jsArray = new Array(length(a));+		toJSArray_(jsArray, 0, a);+		return jsArray;+	}++	function toJSArray_(jsArray, i, a)+	{+		for (var t = 0; t < a.table.length; t++)+		{+			if (a.height == 0)+			{+				jsArray[i + t] = a.table[t];+			}+			else+			{+				var inc = t == 0 ? 0 : a.lengths[t - 1];+				toJSArray_(jsArray, i + inc, a.table[t]);+			}+		}+	}++	function fromJSArray(jsArray)+	{+		if (jsArray.length == 0)+		{+			return empty;+		}+		var h = Math.floor(Math.log(jsArray.length) / Math.log(M));+		return fromJSArray_(jsArray, h, 0, jsArray.length);+	}++	function fromJSArray_(jsArray, h, from, to)+	{+		if (h == 0)+		{+			return {+				ctor: "_Array",+				height: 0,+				table: jsArray.slice(from, to)+			};+		}++		var step = Math.pow(M, h);+		var table = new Array(Math.ceil((to - from) / step));+		var lengths = new Array(table.length);+		for (var i = 0; i < table.length; i++)+		{+			table[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));+			lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);+		}+		return {+			ctor: "_Array",+			height: h,+			table: table,+			lengths: lengths+		};+	}++	Elm.Native.Array.values = {+		empty: empty,+		fromList: fromList,+		toList: toList,+		initialize: F2(initialize),+		append: F2(append),+		push: F2(push),+		slice: F3(slice),+		get: F2(get),+		set: F3(set),+		map: F2(map),+		indexedMap: F2(indexedMap),+		foldl: F3(foldl),+		foldr: F3(foldr),+		length: length,++		toJSArray:toJSArray,+		fromJSArray:fromJSArray+	};++	return localRuntime.Native.Array.values = Elm.Native.Array.values;++}++Elm.Native.Basics = {};+Elm.Native.Basics.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Basics = localRuntime.Native.Basics || {};+	if (localRuntime.Native.Basics.values)+	{+		return localRuntime.Native.Basics.values;+	}++	var Utils = Elm.Native.Utils.make(localRuntime);++	function div(a, b)+	{+		return (a/b)|0;+	}+	function rem(a, b)+	{+		return a % b;+	}+	function mod(a, b)+	{+		if (b === 0)+		{+			throw new Error("Cannot perform mod 0. Division by zero error.");+		}+		var r = a % b;+		var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r+b) : -mod(-a,-b));++		return m === b ? 0 : m;+	}+	function logBase(base, n)+	{+		return Math.log(n) / Math.log(base);+	}+	function negate(n)+	{+		return -n;+	}+	function abs(n)+	{+		return n < 0 ? -n : n;+	}++	function min(a, b)+	{+		return Utils.cmp(a,b) < 0 ? a : b;+	}+	function max(a, b)+	{+		return Utils.cmp(a,b) > 0 ? a : b;+	}+	function clamp(lo, hi, n)+	{+		return Utils.cmp(n,lo) < 0 ? lo : Utils.cmp(n,hi) > 0 ? hi : n;+	}++	function xor(a, b)+	{+		return a !== b;+	}+	function not(b)+	{+		return !b;+	}+	function isInfinite(n)+	{+		return n === Infinity || n === -Infinity+	}++	function truncate(n)+	{+		return n|0;+	}++	function degrees(d)+	{+		return d * Math.PI / 180;+	}+	function turns(t)+	{+		return 2 * Math.PI * t;+	}+	function fromPolar(point)+	{+		var r = point._0;+		var t = point._1;+		return Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));+	}+	function toPolar(point)+	{+		var x = point._0;+		var y = point._1;+		return Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y,x));+	}++	return localRuntime.Native.Basics.values = {+		div: F2(div),+		rem: F2(rem),+		mod: F2(mod),++		pi: Math.PI,+		e: Math.E,+		cos: Math.cos,+		sin: Math.sin,+		tan: Math.tan,+		acos: Math.acos,+		asin: Math.asin,+		atan: Math.atan,+		atan2: F2(Math.atan2),++		degrees:  degrees,+		turns:  turns,+		fromPolar:  fromPolar,+		toPolar:  toPolar,++		sqrt: Math.sqrt,+		logBase: F2(logBase),+		negate: negate,+		abs: abs,+		min: F2(min),+		max: F2(max),+		clamp: F3(clamp),+		compare: Utils.compare,++		xor: F2(xor),+		not: not,++		truncate: truncate,+		ceiling: Math.ceil,+		floor: Math.floor,+		round: Math.round,+		toFloat: function(x) { return x; },+		isNaN: isNaN,+		isInfinite: isInfinite+	};+};++Elm.Native.Char = {};+Elm.Native.Char.make = function(localRuntime) {+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Char = localRuntime.Native.Char || {};+	if (localRuntime.Native.Char.values)+	{+		return localRuntime.Native.Char.values;+	}++	var Utils = Elm.Native.Utils.make(localRuntime);++	return localRuntime.Native.Char.values = {+		fromCode : function(c) { return Utils.chr(String.fromCharCode(c)); },+		toCode   : function(c) { return c.charCodeAt(0); },+		toUpper  : function(c) { return Utils.chr(c.toUpperCase()); },+		toLower  : function(c) { return Utils.chr(c.toLowerCase()); },+		toLocaleUpper : function(c) { return Utils.chr(c.toLocaleUpperCase()); },+		toLocaleLower : function(c) { return Utils.chr(c.toLocaleLowerCase()); },+	};+};++Elm.Native.Color = {};+Elm.Native.Color.make = function(localRuntime) {+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Color = localRuntime.Native.Color || {};+	if (localRuntime.Native.Color.values)+	{+		return localRuntime.Native.Color.values;+	}++	function toCss(c)+	{+		var format = '';+		var colors = '';+		if (c.ctor === 'RGBA')+		{+			format = 'rgb';+			colors = c._0 + ', ' + c._1 + ', ' + c._2;+		}+		else+		{+			format = 'hsl';+			colors = (c._0 * 180 / Math.PI) + ', ' ++					 (c._1 * 100) + '%, ' ++					 (c._2 * 100) + '%';+		}+		if (c._3 === 1)+		{+			return format + '(' + colors + ')';+		}+		else+		{+			return format + 'a(' + colors + ', ' + c._3 + ')';+		}+	}++	return localRuntime.Native.Color.values = {+		toCss: toCss+	};++};++Elm.Native.Debug = {};+Elm.Native.Debug.make = function(localRuntime) {+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Debug = localRuntime.Native.Debug || {};+	if (localRuntime.Native.Debug.values)+	{+		return localRuntime.Native.Debug.values;+	}++	var toString = Elm.Native.Show.make(localRuntime).toString;++	function log(tag, value)+	{+		var msg = tag + ': ' + toString(value);+		var process = process || {};+		if (process.stdout)+		{+			process.stdout.write(msg);+		}+		else+		{+			console.log(msg);+		}+		return value;+	}++	function crash(message)+	{+		throw new Error(message);+	}++	function tracePath(tag, form)+	{+		if (localRuntime.debug)+		{+			return localRuntime.debug.trace(tag, form);+		}+		return form;+	}++	function watch(tag, value)+	{+		if (localRuntime.debug)+		{+			localRuntime.debug.watch(tag, value);+		}+		return value;+	}++	function watchSummary(tag, summarize, value)+	{+		if (localRuntime.debug)+		{+			localRuntime.debug.watch(tag, summarize(value));+		}+		return value;+	}++	return localRuntime.Native.Debug.values = {+		crash: crash,+		tracePath: F2(tracePath),+		log: F2(log),+		watch: F2(watch),+		watchSummary:F3(watchSummary),+	};+};+++// setup+Elm.Native = Elm.Native || {};+Elm.Native.Graphics = Elm.Native.Graphics || {};+Elm.Native.Graphics.Collage = Elm.Native.Graphics.Collage || {};++// definition+Elm.Native.Graphics.Collage.make = function(localRuntime) {+	'use strict';++	// attempt to short-circuit+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Graphics = localRuntime.Native.Graphics || {};+	localRuntime.Native.Graphics.Collage = localRuntime.Native.Graphics.Collage || {};+	if ('values' in localRuntime.Native.Graphics.Collage)+	{+		return localRuntime.Native.Graphics.Collage.values;+	}++	// okay, we cannot short-ciruit, so now we define everything+	var Color = Elm.Native.Color.make(localRuntime);+	var List = Elm.Native.List.make(localRuntime);+	var NativeElement = Elm.Native.Graphics.Element.make(localRuntime);+	var Transform = Elm.Transform2D.make(localRuntime);+	var Utils = Elm.Native.Utils.make(localRuntime);++	function setStrokeStyle(ctx, style)+	{+		ctx.lineWidth = style.width;++		var cap = style.cap.ctor;+		ctx.lineCap = cap === 'Flat'+			? 'butt'+			: cap === 'Round'+				? 'round'+				: 'square';++		var join = style.join.ctor;+		ctx.lineJoin = join === 'Smooth'+			? 'round'+			: join === 'Sharp'+				? 'miter'+				: 'bevel';++		ctx.miterLimit = style.join._0 || 10;+		ctx.strokeStyle = Color.toCss(style.color);+	}++	function setFillStyle(ctx, style)+	{+		var sty = style.ctor;+		ctx.fillStyle = sty === 'Solid'+			? Color.toCss(style._0)+			: sty === 'Texture'+				? texture(redo, ctx, style._0)+				: gradient(ctx, style._0);+	}++	function trace(ctx, path)+	{+		var points = List.toArray(path);+		var i = points.length - 1;+		if (i <= 0)+		{+			return;+		}+		ctx.moveTo(points[i]._0, points[i]._1);+		while (i--)+		{+			ctx.lineTo(points[i]._0, points[i]._1);+		}+		if (path.closed)+		{+			i = points.length - 1;+			ctx.lineTo(points[i]._0, points[i]._1);+		}+	}++	function line(ctx,style,path)+	{+		(style.dashing.ctor === '[]')+			? trace(ctx, path)+			: customLineHelp(ctx, style, path);+		ctx.scale(1,-1);+		ctx.stroke();+	}++	function customLineHelp(ctx, style, path)+	{+		var points = List.toArray(path);+		if (path.closed)+		{+			points.push(points[0]);+		}+		var pattern = List.toArray(style.dashing);+		var i = points.length - 1;+		if (i <= 0)+		{+			return;+		}+		var x0 = points[i]._0, y0 = points[i]._1;+		var x1=0, y1=0, dx=0, dy=0, remaining=0, nx=0, ny=0;+		var pindex = 0, plen = pattern.length;+		var draw = true, segmentLength = pattern[0];+		ctx.moveTo(x0,y0);+		while (i--)+		{+			x1 = points[i]._0;+			y1 = points[i]._1;+			dx = x1 - x0;+			dy = y1 - y0;+			remaining = Math.sqrt(dx * dx + dy * dy);+			while (segmentLength <= remaining)+			{+				x0 += dx * segmentLength / remaining;+				y0 += dy * segmentLength / remaining;+				ctx[draw ? 'lineTo' : 'moveTo'](x0, y0);+				// update starting position+				dx = x1 - x0;+				dy = y1 - y0;+				remaining = Math.sqrt(dx * dx + dy * dy);+				// update pattern+				draw = !draw;+				pindex = (pindex + 1) % plen;+				segmentLength = pattern[pindex];+			}+			if (remaining > 0)+			{+				ctx[draw ? 'lineTo' : 'moveTo'](x1, y1);+				segmentLength -= remaining;+			}+			x0 = x1;+			y0 = y1;+		}+	}++	function drawLine(ctx, style, path)+	{+		setStrokeStyle(ctx, style);+		return line(ctx, style, path);+	}++	function texture(redo, ctx, src)+	{+		var img = new Image();+		img.src = src;+		img.onload = redo;+		return ctx.createPattern(img, 'repeat');+	}++	function gradient(ctx, grad)+	{+		var g;+		var stops = [];+		if (grad.ctor === 'Linear')+		{+			var p0 = grad._0, p1 = grad._1;+			g = ctx.createLinearGradient(p0._0, -p0._1, p1._0, -p1._1);+			stops = List.toArray(grad._2);+		}+		else+		{+			var p0 = grad._0, p2 = grad._2;+			g = ctx.createRadialGradient(p0._0, -p0._1, grad._1, p2._0, -p2._1, grad._3);+			stops = List.toArray(grad._4);+		}+		var len = stops.length;+		for (var i = 0; i < len; ++i)+		{+			var stop = stops[i];+			g.addColorStop(stop._0, Color.toCss(stop._1));+		}+		return g;+	}++	function drawShape(redo, ctx, style, path)+	{+		trace(ctx, path);+		setFillStyle(ctx, style);+		ctx.scale(1,-1);+		ctx.fill();+	}+++	// TEXT RENDERING++	function fillText(redo, ctx, text)+	{+		drawText(ctx, text, ctx.fillText);+	}++	function strokeText(redo, ctx, style, text)+	{+		setStrokeStyle(ctx, style);+		// Use native canvas API for dashes only for text for now+		// Degrades to non-dashed on IE 9 + 10+		if (style.dashing.ctor !== '[]' && ctx.setLineDash)+		{+			var pattern = List.toArray(style.dashing);+			ctx.setLineDash(pattern);+		}+		drawText(ctx, text, ctx.strokeText);+	}++	function drawText(ctx, text, canvasDrawFn)+	{+		var textChunks = chunkText(defaultContext, text);++		var totalWidth = 0;+		var maxHeight = 0;+		var numChunks = textChunks.length;++		ctx.scale(1,-1);++		for (var i = numChunks; i--; )+		{+			var chunk = textChunks[i];+			ctx.font = chunk.font;+			var metrics = ctx.measureText(chunk.text);+			chunk.width = metrics.width;+			totalWidth += chunk.width;+			if (chunk.height > maxHeight)+			{+				maxHeight = chunk.height;+			}+		}++		var x = -totalWidth / 2.0;+		for (var i = 0; i < numChunks; ++i)+		{+			var chunk = textChunks[i];+			ctx.font = chunk.font;+			ctx.fillStyle = chunk.color;+			canvasDrawFn.call(ctx, chunk.text, x, maxHeight / 2);+			x += chunk.width;+		}+	}++	function toFont(props)+	{+		return [+			props['font-style'],+			props['font-variant'],+			props['font-weight'],+			props['font-size'],+			props['font-family']+		].join(' ');+	}+++	// Convert the object returned by the text module+	// into something we can use for styling canvas text+	function chunkText(context, text)+	{+		var tag = text.ctor;+		if (tag === 'Text:Append')+		{+			var leftChunks = chunkText(context, text._0);+			var rightChunks = chunkText(context, text._1);+			return leftChunks.concat(rightChunks);+		}+		if (tag === 'Text:Text')+		{+			return [{+				text: text._0,+				color: context.color,+				height: context['font-size'].slice(0,-2) | 0,+				font: toFont(context)+			}];+		}+		if (tag === 'Text:Meta')+		{+			var newContext = freshContext(text._0, context);+			return chunkText(newContext, text._1);+		}+	}++	function freshContext(props, ctx)+	{+		return {+			'font-style': props['font-style'] || ctx['font-style'],+			'font-variant': props['font-variant'] || ctx['font-variant'],+			'font-weight': props['font-weight'] || ctx['font-weight'],+			'font-size': props['font-size'] || ctx['font-size'],+			'font-family': props['font-family'] || ctx['font-family'],+			'color': props['color'] || ctx['color']+		};+	}++	var defaultContext = {+		'font-style': 'normal',+		'font-variant': 'normal',+		'font-weight': 'normal',+		'font-size': '12px',+		'font-family': 'sans-serif',+		'color': 'black'+	};+++	// IMAGES++	function drawImage(redo, ctx, form)+	{+		var img = new Image();+		img.onload = redo;+		img.src = form._3;+		var w = form._0,+			h = form._1,+			pos = form._2,+			srcX = pos._0,+			srcY = pos._1,+			srcW = w,+			srcH = h,+			destX = -w/2,+			destY = -h/2,+			destW = w,+			destH = h;++		ctx.scale(1,-1);+		ctx.drawImage(img, srcX, srcY, srcW, srcH, destX, destY, destW, destH);+	}++	function renderForm(redo, ctx, form)+	{+		ctx.save();++		var x = form.x,+			y = form.y,+			theta = form.theta,+			scale = form.scale;++		if (x !== 0 || y !== 0)+		{+			ctx.translate(x, y);+		}+		if (theta !== 0)+		{+			ctx.rotate(theta);+		}+		if (scale !== 1)+		{+			ctx.scale(scale,scale);+		}+		if (form.alpha !== 1)+		{+			ctx.globalAlpha = ctx.globalAlpha * form.alpha;+		}++		ctx.beginPath();+		var f = form.form;+		switch (f.ctor)+		{+			case 'FPath':+				drawLine(ctx, f._0, f._1);+				break;++			case 'FImage':+				drawImage(redo, ctx, f);+				break;++			case 'FShape':+				if (f._0.ctor === 'Line')+				{+					f._1.closed = true;+					drawLine(ctx, f._0._0, f._1);+				}+				else+				{+					drawShape(redo, ctx, f._0._0, f._1);+				}+				break;++			case 'FText':+				fillText(redo, ctx, f._0);+				break;++			case 'FOutlinedText':+				strokeText(redo, ctx, f._0, f._1);+				break;+		}+		ctx.restore();+	}++	function formToMatrix(form)+	{+	   var scale = form.scale;+	   var matrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );++	   var theta = form.theta+	   if (theta !== 0)+	   {+		   matrix = A2( Transform.multiply, matrix, Transform.rotation(theta) );+	   }++	   return matrix;+	}++	function str(n)+	{+		if (n < 0.00001 && n > -0.00001)+		{+			return 0;+		}+		return n;+	}++	function makeTransform(w, h, form, matrices)+	{+		var props = form.form._0.props;+		var m = A6( Transform.matrix, 1, 0, 0, -1,+					(w - props.width ) / 2,+					(h - props.height) / 2 );+		var len = matrices.length;+		for (var i = 0; i < len; ++i)+		{+			m = A2( Transform.multiply, m, matrices[i] );+		}+		m = A2( Transform.multiply, m, formToMatrix(form) );++		return 'matrix(' ++			str( m[0]) + ', ' + str( m[3]) + ', ' ++			str(-m[1]) + ', ' + str(-m[4]) + ', ' ++			str( m[2]) + ', ' + str( m[5]) + ')';+	}++	function stepperHelp(list)+	{+		var arr = List.toArray(list);+		var i = 0;+		function peekNext()+		{+			return i < arr.length ? arr[i].form.ctor : '';+		}+		// assumes that there is a next element+		function next()+		{+			var out = arr[i];+			++i;+			return out;+		}+		return {+			peekNext: peekNext,+			next: next+		};+	}++	function formStepper(forms)+	{+		var ps = [stepperHelp(forms)];+		var matrices = [];+		var alphas = [];+		function peekNext()+		{+			var len = ps.length;+			var formType = '';+			for (var i = 0; i < len; ++i )+			{+				if (formType = ps[i].peekNext()) return formType;+			}+			return '';+		}+		// assumes that there is a next element+		function next(ctx)+		{+			while (!ps[0].peekNext())+			{+				ps.shift();+				matrices.pop();+				alphas.shift();+				if (ctx)+				{+					ctx.restore();+				}+			}+			var out = ps[0].next();+			var f = out.form;+			if (f.ctor === 'FGroup')+			{+				ps.unshift(stepperHelp(f._1));+				var m = A2(Transform.multiply, f._0, formToMatrix(out));+				ctx.save();+				ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);+				matrices.push(m);++				var alpha = (alphas[0] || 1) * out.alpha;+				alphas.unshift(alpha);+				ctx.globalAlpha = alpha;+			}+			return out;+		}+		function transforms()+		{+			return matrices;+		}+		function alpha()+		{+			return alphas[0] || 1;+		}+		return {+			peekNext: peekNext,+			next: next,+			transforms: transforms,+			alpha: alpha+		};+	}++	function makeCanvas(w,h)+	{+		var canvas = NativeElement.createNode('canvas');+		canvas.style.width  = w + 'px';+		canvas.style.height = h + 'px';+		canvas.style.display = "block";+		canvas.style.position = "absolute";+		var ratio = window.devicePixelRatio || 1;+		canvas.width  = w * ratio;+		canvas.height = h * ratio;+		return canvas;+	}++	function render(model)+	{+		var div = NativeElement.createNode('div');+		div.style.overflow = 'hidden';+		div.style.position = 'relative';+		update(div, model, model);+		return div;+	}++	function nodeStepper(w,h,div)+	{+		var kids = div.childNodes;+		var i = 0;+		var ratio = window.devicePixelRatio || 1;++		function transform(transforms, ctx)+		{+			ctx.translate( w / 2 * ratio, h / 2 * ratio );+			ctx.scale( ratio, -ratio );+			var len = transforms.length;+			for (var i = 0; i < len; ++i)+			{+				var m = transforms[i];+				ctx.save();+				ctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);+			}+			return ctx;+		}+		function nextContext(transforms)+		{+			while (i < kids.length)+			{+				var node = kids[i];+				if (node.getContext)+				{+					node.width = w * ratio;+					node.height = h * ratio;+					node.style.width = w + 'px';+					node.style.height = h + 'px';+					++i;+					return transform(transforms, node.getContext('2d'));+				}+				div.removeChild(node);+			}+			var canvas = makeCanvas(w,h);+			div.appendChild(canvas);+			// we have added a new node, so we must step our position+			++i;+			return transform(transforms, canvas.getContext('2d'));+		}+		function addElement(matrices, alpha, form)+		{+			var kid = kids[i];+			var elem = form.form._0;++			var node = (!kid || kid.getContext)+				? NativeElement.render(elem)+				: NativeElement.update(kid, kid.oldElement, elem);++			node.style.position = 'absolute';+			node.style.opacity = alpha * form.alpha * elem.props.opacity;+			NativeElement.addTransform(node.style, makeTransform(w, h, form, matrices));+			node.oldElement = elem;+			++i;+			if (!kid)+			{+				div.appendChild(node);+			}+			else+			{+				div.insertBefore(node, kid);+			}+		}+		function clearRest()+		{+			while (i < kids.length)+			{+				div.removeChild(kids[i]);+			}+		}+		return {+			nextContext: nextContext,+			addElement: addElement,+			clearRest: clearRest+		};+	}+++	function update(div, _, model)+	{+		var w = model.w;+		var h = model.h;++		var forms = formStepper(model.forms);+		var nodes = nodeStepper(w,h,div);+		var ctx = null;+		var formType = '';++		while (formType = forms.peekNext())+		{+			// make sure we have context if we need it+			if (ctx === null && formType !== 'FElement')+			{+				ctx = nodes.nextContext(forms.transforms());+				ctx.globalAlpha = forms.alpha();+			}++			var form = forms.next(ctx);+			// if it is FGroup, all updates are made within formStepper when next is called.+			if (formType === 'FElement')+			{+				// update or insert an element, get a new context+				nodes.addElement(forms.transforms(), forms.alpha(), form);+				ctx = null;+			}+			else if (formType !== 'FGroup')+			{+				renderForm(function() { update(div, model, model); }, ctx, form);+			}+		}+		nodes.clearRest();+		return div;+	}+++	function collage(w,h,forms)+	{+		return A3(NativeElement.newElement, w, h, {+			ctor: 'Custom',+			type: 'Collage',+			render: render,+			update: update,+			model: {w:w, h:h, forms:forms}+		});+	}++	return localRuntime.Native.Graphics.Collage.values = {+		collage: F3(collage)+	};++};+++// setup+Elm.Native = Elm.Native || {};+Elm.Native.Graphics = Elm.Native.Graphics || {};+Elm.Native.Graphics.Element = Elm.Native.Graphics.Element || {};++// definition+Elm.Native.Graphics.Element.make = function(localRuntime) {+	'use strict';++	// attempt to short-circuit+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Graphics = localRuntime.Native.Graphics || {};+	localRuntime.Native.Graphics.Element = localRuntime.Native.Graphics.Element || {};+	if ('values' in localRuntime.Native.Graphics.Element)+	{+		return localRuntime.Native.Graphics.Element.values;+	}++	var Color = Elm.Native.Color.make(localRuntime);+	var List = Elm.Native.List.make(localRuntime);+	var Maybe = Elm.Maybe.make(localRuntime);+	var Text = Elm.Native.Text.make(localRuntime);+	var Utils = Elm.Native.Utils.make(localRuntime);+++	// CREATION++	function createNode(elementType)+	{+		var node = document.createElement(elementType);+		node.style.padding = "0";+		node.style.margin = "0";+		return node;+	}+++	function newElement(width, height, elementPrim)+	{+		return {+			_: {},+			element: elementPrim,+			props: {+				_: {},+				id: Utils.guid(),+				width: width,+				height: height,+				opacity: 1,+				color: Maybe.Nothing,+				href: "",+				tag: "",+				hover: Utils.Tuple0,+				click: Utils.Tuple0+			}+		};+	}+++	// PROPERTIES++	function setProps(elem, node)+	{+		var props = elem.props;++		var element = elem.element;+		var width = props.width - (element.adjustWidth || 0);+		var height = props.height - (element.adjustHeight || 0);+		node.style.width  = (width |0) + 'px';+		node.style.height = (height|0) + 'px';++		if (props.opacity !== 1)+		{+			node.style.opacity = props.opacity;+		}++		if (props.color.ctor === 'Just')+		{+			node.style.backgroundColor = Color.toCss(props.color._0);+		}++		if (props.tag !== '')+		{+			node.id = props.tag;+		}++		if (props.hover.ctor !== '_Tuple0')+		{+			addHover(node, props.hover);+		}++		if (props.click.ctor !== '_Tuple0')+		{+			addClick(node, props.click);+		}++		if (props.href !== '')+		{+			var anchor = createNode('a');+			anchor.href = props.href;+			anchor.style.display = 'block';+			anchor.style.pointerEvents = 'auto';+			anchor.appendChild(node);+			node = anchor;+		}++		return node;+	}++	function addClick(e, handler)+	{+		e.style.pointerEvents = 'auto';+		e.elm_click_handler = handler;+		function trigger(ev)+		{+			e.elm_click_handler(Utils.Tuple0);+			ev.stopPropagation();+		}+		e.elm_click_trigger = trigger;+		e.addEventListener('click', trigger);+	}++	function removeClick(e, handler)+	{+		if (e.elm_click_trigger)+		{+			e.removeEventListener('click', e.elm_click_trigger);+			e.elm_click_trigger = null;+			e.elm_click_handler = null;+		}+	}++	function addHover(e, handler)+	{+		e.style.pointerEvents = 'auto';+		e.elm_hover_handler = handler;+		e.elm_hover_count = 0;++		function over(evt)+		{+			if (e.elm_hover_count++ > 0) return;+			e.elm_hover_handler(true);+			evt.stopPropagation();+		}+		function out(evt)+		{+			if (e.contains(evt.toElement || evt.relatedTarget)) return;+			e.elm_hover_count = 0;+			e.elm_hover_handler(false);+			evt.stopPropagation();+		}+		e.elm_hover_over = over;+		e.elm_hover_out = out;+		e.addEventListener('mouseover', over);+		e.addEventListener('mouseout', out);+	}++	function removeHover(e)+	{+		e.elm_hover_handler = null;+		if (e.elm_hover_over)+		{+			e.removeEventListener('mouseover', e.elm_hover_over);+			e.elm_hover_over = null;+		}+		if (e.elm_hover_out)+		{+			e.removeEventListener('mouseout', e.elm_hover_out);+			e.elm_hover_out = null;+		}+	}+++	// IMAGES++	function image(props, img)+	{+		switch (img._0.ctor)+		{+			case 'Plain':+				return plainImage(img._3);++			case 'Fitted':+				return fittedImage(props.width, props.height, img._3);++			case 'Cropped':+				return croppedImage(img,props.width,props.height,img._3);++			case 'Tiled':+				return tiledImage(img._3);+		}+	}++	function plainImage(src)+	{+		var img = createNode('img');+		img.src = src;+		img.name = src;+		img.style.display = "block";+		return img;+	}++	function tiledImage(src)+	{+		var div = createNode('div');+		div.style.backgroundImage = 'url(' + src + ')';+		return div;+	}++	function fittedImage(w, h, src)+	{+		var div = createNode('div');+		div.style.background = 'url(' + src + ') no-repeat center';+		div.style.webkitBackgroundSize = 'cover';+		div.style.MozBackgroundSize = 'cover';+		div.style.OBackgroundSize = 'cover';+		div.style.backgroundSize = 'cover';+		return div;+	}++	function croppedImage(elem, w, h, src)+	{+		var pos = elem._0._0;+		var e = createNode('div');+		e.style.overflow = "hidden";++		var img = createNode('img');+		img.onload = function() {+			var sw = w / elem._1, sh = h / elem._2;+			img.style.width = ((this.width * sw)|0) + 'px';+			img.style.height = ((this.height * sh)|0) + 'px';+			img.style.marginLeft = ((- pos._0 * sw)|0) + 'px';+			img.style.marginTop = ((- pos._1 * sh)|0) + 'px';+		};+		img.src = src;+		img.name = src;+		e.appendChild(img);+		return e;+	}+++	// FLOW++	function goOut(node)+	{+		node.style.position = 'absolute';+		return node;+	}+	function goDown(node)+	{+		return node;+	}+	function goRight(node)+	{+		node.style.styleFloat = 'left';+		node.style.cssFloat = 'left';+		return node;+	}++	var directionTable = {+		DUp    : goDown,+		DDown  : goDown,+		DLeft  : goRight,+		DRight : goRight,+		DIn    : goOut,+		DOut   : goOut+	};+	function needsReversal(dir)+	{+		return dir == 'DUp' || dir == 'DLeft' || dir == 'DIn';+	}++	function flow(dir,elist)+	{+		var array = List.toArray(elist);+		var container = createNode('div');+		var goDir = directionTable[dir];+		if (goDir == goOut)+		{+			container.style.pointerEvents = 'none';+		}+		if (needsReversal(dir))+		{+			array.reverse();+		}+		var len = array.length;+		for (var i = 0; i < len; ++i)+		{+			container.appendChild(goDir(render(array[i])));+		}+		return container;+	}+++	// CONTAINER++	function toPos(pos)+	{+		return pos.ctor === "Absolute"+			? pos._0 + "px"+			: (pos._0 * 100) + "%";+	}++	// must clear right, left, top, bottom, and transform+	// before calling this function+	function setPos(pos,elem,e)+	{+		var element = elem.element;+		var props = elem.props;+		var w = props.width + (element.adjustWidth ? element.adjustWidth : 0);+		var h = props.height + (element.adjustHeight ? element.adjustHeight : 0);++		e.style.position = 'absolute';+		e.style.margin = 'auto';+		var transform = '';++		switch (pos.horizontal.ctor)+		{+			case 'P':+				e.style.right = toPos(pos.x);+				e.style.removeProperty('left');+				break;++			case 'Z':+				transform = 'translateX(' + ((-w/2)|0) + 'px) ';++			case 'N':+				e.style.left = toPos(pos.x);+				e.style.removeProperty('right');+				break;+		}+		switch (pos.vertical.ctor)+		{+			case 'N':+				e.style.bottom = toPos(pos.y);+				e.style.removeProperty('top');+				break;++			case 'Z':+				transform += 'translateY(' + ((-h/2)|0) + 'px)';++			case 'P':+				e.style.top = toPos(pos.y);+				e.style.removeProperty('bottom');+				break;+		}+		if (transform !== '')+		{+			addTransform(e.style, transform);+		}+		return e;+	}++	function addTransform(style, transform)+	{+		style.transform       = transform;+		style.msTransform     = transform;+		style.MozTransform    = transform;+		style.webkitTransform = transform;+		style.OTransform      = transform;+	}++	function container(pos,elem)+	{+		var e = render(elem);+		setPos(pos, elem, e);+		var div = createNode('div');+		div.style.position = 'relative';+		div.style.overflow = 'hidden';+		div.appendChild(e);+		return div;+	}+++	function rawHtml(elem)+	{+		var html = elem.html;+		var guid = elem.guid;+		var align = elem.align;++		var div = createNode('div');+		div.innerHTML = html;+		div.style.visibility = "hidden";+		if (align)+		{+			div.style.textAlign = align;+		}+		div.style.visibility = 'visible';+		div.style.pointerEvents = 'auto';+		return div;+	}+++	// RENDER++	function render(elem)+	{+		return setProps(elem, makeElement(elem));+	}+	function makeElement(e)+	{+		var elem = e.element;+		switch(elem.ctor)+		{+			case 'Image':+				return image(e.props, elem);++			case 'Flow':+				return flow(elem._0.ctor, elem._1);++			case 'Container':+				return container(elem._0, elem._1);++			case 'Spacer':+				return createNode('div');++			case 'RawHtml':+				return rawHtml(elem);++			case 'Custom':+				return elem.render(elem.model);+		}+	}++	function updateAndReplace(node, curr, next)+	{+		var newNode = update(node, curr, next);+		if (newNode !== node)+		{+			node.parentNode.replaceChild(newNode, node);+		}+		return newNode;+	}+++	// UPDATE++	function update(node, curr, next)+	{+		var rootNode = node;+		if (node.tagName === 'A')+		{+			node = node.firstChild;+		}+		if (curr.props.id === next.props.id)+		{+			updateProps(node, curr, next);+			return rootNode;+		}+		if (curr.element.ctor !== next.element.ctor)+		{+			return render(next);+		}+		var nextE = next.element;+		var currE = curr.element;+		switch(nextE.ctor)+		{+			case "Spacer":+				updateProps(node, curr, next);+				return rootNode;++			case "RawHtml":+				if(currE.html.valueOf() !== nextE.html.valueOf())+				{+					node.innerHTML = nextE.html;+				}+				updateProps(node, curr, next);+				return rootNode;++			case "Image":+				if (nextE._0.ctor === 'Plain')+				{+					if (nextE._3 !== currE._3)+					{+						node.src = nextE._3;+					}+				}+				else if (!Utils.eq(nextE,currE)+					|| next.props.width !== curr.props.width+					|| next.props.height !== curr.props.height)+				{+					return render(next);+				}+				updateProps(node, curr, next);+				return rootNode;++			case "Flow":+				var arr = List.toArray(nextE._1);+				for (var i = arr.length; i--; )+				{+					arr[i] = arr[i].element.ctor;+				}+				if (nextE._0.ctor !== currE._0.ctor)+				{+					return render(next);+				}+				var nexts = List.toArray(nextE._1);+				var kids = node.childNodes;+				if (nexts.length !== kids.length)+				{+					return render(next);+				}+				var currs = List.toArray(currE._1);+				var dir = nextE._0.ctor;+				var goDir = directionTable[dir];+				var toReverse = needsReversal(dir);+				var len = kids.length;+				for (var i = len; i-- ;)+				{+					var subNode = kids[toReverse ? len - i - 1 : i];+					goDir(updateAndReplace(subNode, currs[i], nexts[i]));+				}+				updateProps(node, curr, next);+				return rootNode;++			case "Container":+				var subNode = node.firstChild;+				var newSubNode = updateAndReplace(subNode, currE._1, nextE._1);+				setPos(nextE._0, nextE._1, newSubNode);+				updateProps(node, curr, next);+				return rootNode;++			case "Custom":+				if (currE.type === nextE.type)+				{+					var updatedNode = nextE.update(node, currE.model, nextE.model);+					updateProps(updatedNode, curr, next);+					return updatedNode;+				}+				return render(next);+		}+	}++	function updateProps(node, curr, next)+	{+		var nextProps = next.props;+		var currProps = curr.props;++		var element = next.element;+		var width = nextProps.width - (element.adjustWidth || 0);+		var height = nextProps.height - (element.adjustHeight || 0);+		if (width !== currProps.width)+		{+			node.style.width = (width|0) + 'px';+		}+		if (height !== currProps.height)+		{+			node.style.height = (height|0) + 'px';+		}++		if (nextProps.opacity !== currProps.opacity)+		{+			node.style.opacity = nextProps.opacity;+		}++		var nextColor = nextProps.color.ctor === 'Just'+			? Color.toCss(nextProps.color._0)+			: '';+		if (node.style.backgroundColor !== nextColor)+		{+			node.style.backgroundColor = nextColor;+		}++		if (nextProps.tag !== currProps.tag)+		{+			node.id = nextProps.tag;+		}++		if (nextProps.href !== currProps.href)+		{+			if (currProps.href === '')+			{+				// add a surrounding href+				var anchor = createNode('a');+				anchor.href = nextProps.href;+				anchor.style.display = 'block';+				anchor.style.pointerEvents = 'auto';++				node.parentNode.replaceChild(anchor, node);+				anchor.appendChild(node);+			}+			else if (nextProps.href === '')+			{+				// remove the surrounding href+				var anchor = node.parentNode;+				anchor.parentNode.replaceChild(node, anchor);+			}+			else+			{+				// just update the link+				node.parentNode.href = nextProps.href;+			}+		}++		// update click and hover handlers+		var removed = false;++		// update hover handlers+		if (currProps.hover.ctor === '_Tuple0')+		{+			if (nextProps.hover.ctor !== '_Tuple0')+			{+				addHover(node, nextProps.hover);+			}+		}+		else+		{+			if (nextProps.hover.ctor === '_Tuple0')+			{+				removed = true;+				removeHover(node);+			}+			else+			{+				node.elm_hover_handler = nextProps.hover;+			}+		}++		// update click handlers+		if (currProps.click.ctor === '_Tuple0')+		{+			if (nextProps.click.ctor !== '_Tuple0')+			{+				addClick(node, nextProps.click);+			}+		}+		else+		{+			if (nextProps.click.ctor === '_Tuple0')+			{+				removed = true;+				removeClick(node);+			}+			else+			{+				node.elm_click_handler = nextProps.click;+			}+		}++		// stop capturing clicks if+		if (removed+			&& nextProps.hover.ctor === '_Tuple0'+			&& nextProps.click.ctor === '_Tuple0')+		{+			node.style.pointerEvents = 'none';+		}+	}+++	// TEXT++	function block(align)+	{+		return function(text)+		{+			var raw = {+				ctor :'RawHtml',+				html : Text.renderHtml(text),+				align: align+			};+			var pos = htmlHeight(0, raw);+			return newElement(pos._0, pos._1, raw);+		}+	}++	function markdown(text)+	{+		var raw = {+			ctor:'RawHtml',+			html: text,+			align: null+		};+		var pos = htmlHeight(0, raw);+		return newElement(pos._0, pos._1, raw);+	}++	function htmlHeight(width, rawHtml)+	{+		// create dummy node+		var temp = document.createElement('div');+		temp.innerHTML = rawHtml.html;+		if (width > 0)+		{+			temp.style.width = width + "px";+		}+		temp.style.visibility = "hidden";+		temp.style.styleFloat = "left";+		temp.style.cssFloat   = "left";++		document.body.appendChild(temp);++		// get dimensions+		var style = window.getComputedStyle(temp, null);+		var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);+		var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);+		document.body.removeChild(temp);+		return Utils.Tuple2(w,h);+	}+++	return localRuntime.Native.Graphics.Element.values = {+		render: render,+		update: update,+		updateAndReplace: updateAndReplace,++		createNode: createNode,+		newElement: F3(newElement),+		addTransform: addTransform,+		htmlHeight: F2(htmlHeight),+		guid: Utils.guid,++		block: block,+		markdown: markdown+	};++};++// setup+Elm.Native = Elm.Native || {};+Elm.Native.Graphics = Elm.Native.Graphics || {};+Elm.Native.Graphics.Input = Elm.Native.Graphics.Input || {};++// definition+Elm.Native.Graphics.Input.make = function(localRuntime) {+	'use strict';++	// attempt to short-circuit+	if ('values' in Elm.Native.Graphics.Input) {+		return Elm.Native.Graphics.Input.values;+	}++	var Color = Elm.Native.Color.make(localRuntime);+	var List = Elm.Native.List.make(localRuntime);+	var Signal = Elm.Native.Signal.make(localRuntime);+	var Text = Elm.Native.Text.make(localRuntime);+	var Utils = Elm.Native.Utils.make(localRuntime);++	var Element = Elm.Native.Graphics.Element.make(localRuntime);+++	function renderDropDown(model)+	{+		var drop = Element.createNode('select');+		drop.style.border = '0 solid';+		drop.style.pointerEvents = 'auto';+		drop.style.display = 'block';++		drop.elm_values = List.toArray(model.values);+		drop.elm_handler = model.handler;+		var values = drop.elm_values;++		for (var i = 0; i < values.length; ++i)+		{+			var option = Element.createNode('option');+			var name = values[i]._0;+			option.value = name;+			option.innerHTML = name;+			drop.appendChild(option);+		}+		drop.addEventListener('change', function() {+			Signal.sendMessage(drop.elm_handler(drop.elm_values[drop.selectedIndex]._1));+		});++		return drop;+	}++	function updateDropDown(node, oldModel, newModel)+	{+		node.elm_values = List.toArray(newModel.values);+		node.elm_handler = newModel.handler;++		var values = node.elm_values;+		var kids = node.childNodes;+		var kidsLength = kids.length;++		var i = 0;+		for (; i < kidsLength && i < values.length; ++i)+		{+			var option = kids[i];+			var name = values[i]._0;+			option.value = name;+			option.innerHTML = name;+		}+		for (; i < kidsLength; ++i)+		{+			node.removeChild(node.lastChild);+		}+		for (; i < values.length; ++i)+		{+			var option = Element.createNode('option');+			var name = values[i]._0;+			option.value = name;+			option.innerHTML = name;+			node.appendChild(option);+		}+		return node;+	}++	function dropDown(handler, values)+	{+		return A3(Element.newElement, 100, 24, {+			ctor: 'Custom',+			type: 'DropDown',+			render: renderDropDown,+			update: updateDropDown,+			model: {+				values: values,+				handler: handler+			}+		});+	}++	function renderButton(model)+	{+		var node = Element.createNode('button');+		node.style.display = 'block';+		node.style.pointerEvents = 'auto';+		node.elm_message = model.message;+		function click()+		{+			Signal.sendMessage(node.elm_message);+		}+		node.addEventListener('click', click);+		node.innerHTML = model.text;+		return node;+	}++	function updateButton(node, oldModel, newModel)+	{+		node.elm_message = newModel.message;+		var txt = newModel.text;+		if (oldModel.text !== txt)+		{+			node.innerHTML = txt;+		}+		return node;+	}++	function button(message, text)+	{+		return A3(Element.newElement, 100, 40, {+			ctor: 'Custom',+			type: 'Button',+			render: renderButton,+			update: updateButton,+			model: {+				message: message,+				text:text+			}+		});+	}++	function renderCustomButton(model)+	{+		var btn = Element.createNode('div');+		btn.style.pointerEvents = 'auto';+		btn.elm_message = model.message;++		btn.elm_up    = Element.render(model.up);+		btn.elm_hover = Element.render(model.hover);+		btn.elm_down  = Element.render(model.down);++		btn.elm_up.style.display = 'block';+		btn.elm_hover.style.display = 'none';+		btn.elm_down.style.display = 'none';++		btn.appendChild(btn.elm_up);+		btn.appendChild(btn.elm_hover);+		btn.appendChild(btn.elm_down);++		function swap(visibleNode, hiddenNode1, hiddenNode2)+		{+			visibleNode.style.display = 'block';+			hiddenNode1.style.display = 'none';+			hiddenNode2.style.display = 'none';+		}++		var overCount = 0;+		function over(e)+		{+			if (overCount++ > 0) return;+			swap(btn.elm_hover, btn.elm_down, btn.elm_up);+		}+		function out(e)+		{+			if (btn.contains(e.toElement || e.relatedTarget)) return;+			overCount = 0;+			swap(btn.elm_up, btn.elm_down, btn.elm_hover);+		}+		function up()+		{+			swap(btn.elm_hover, btn.elm_down, btn.elm_up);+			Signal.sendMessage(btn.elm_message);+		}+		function down()+		{+			swap(btn.elm_down, btn.elm_hover, btn.elm_up);+		}++		btn.addEventListener('mouseover', over);+		btn.addEventListener('mouseout' , out);+		btn.addEventListener('mousedown', down);+		btn.addEventListener('mouseup'  , up);++		return btn;+	}++	function updateCustomButton(node, oldModel, newModel)+	{+		node.elm_message = newModel.message;++		var kids = node.childNodes;+		var styleUp    = kids[0].style.display;+		var styleHover = kids[1].style.display;+		var styleDown  = kids[2].style.display;++		Element.updateAndReplace(kids[0], oldModel.up, newModel.up);+		Element.updateAndReplace(kids[1], oldModel.hover, newModel.hover);+		Element.updateAndReplace(kids[2], oldModel.down, newModel.down);++		var kids = node.childNodes;+		kids[0].style.display = styleUp;+		kids[1].style.display = styleHover;+		kids[2].style.display = styleDown;++		return node;+	}++	function max3(a,b,c)+	{+		var ab = a > b ? a : b;+		return ab > c ? ab : c;+	}++	function customButton(message, up, hover, down)+	{+		return A3(Element.newElement,+				  max3(up.props.width, hover.props.width, down.props.width),+				  max3(up.props.height, hover.props.height, down.props.height),+				  { ctor: 'Custom',+					type: 'CustomButton',+					render: renderCustomButton,+					update: updateCustomButton,+					model: {+						message: message,+						up: up,+						hover: hover,+						down: down+					}+				  });+	}++	function renderCheckbox(model)+	{+		var node = Element.createNode('input');+		node.type = 'checkbox';+		node.checked = model.checked;+		node.style.display = 'block';+		node.style.pointerEvents = 'auto';+		node.elm_handler = model.handler;+		function change()+		{+			Signal.sendMessage(node.elm_handler(node.checked));+		}+		node.addEventListener('change', change);+		return node;+	}++	function updateCheckbox(node, oldModel, newModel)+	{+		node.elm_handler = newModel.handler;+		node.checked = newModel.checked;+		return node;+	}++	function checkbox(handler, checked)+	{+		return A3(Element.newElement, 13, 13, {+			ctor: 'Custom',+			type: 'CheckBox',+			render: renderCheckbox,+			update: updateCheckbox,+			model: { handler:handler, checked:checked }+		});+	}++	function setRange(node, start, end, dir)+	{+		if (node.parentNode)+		{+			node.setSelectionRange(start, end, dir);+		}+		else+		{+			setTimeout(function(){node.setSelectionRange(start, end, dir);}, 0);+		}+	}++	function updateIfNeeded(css, attribute, latestAttribute)+	{+		if (css[attribute] !== latestAttribute)+		{+			css[attribute] = latestAttribute;+		}+	}+	function cssDimensions(dimensions)+	{+		return dimensions.top    + 'px ' ++			   dimensions.right  + 'px ' ++			   dimensions.bottom + 'px ' ++			   dimensions.left   + 'px';+	}+	function updateFieldStyle(css, style)+	{+		updateIfNeeded(css, 'padding', cssDimensions(style.padding));++		var outline = style.outline;+		updateIfNeeded(css, 'border-width', cssDimensions(outline.width));+		updateIfNeeded(css, 'border-color', Color.toCss(outline.color));+		updateIfNeeded(css, 'border-radius', outline.radius + 'px');++		var highlight = style.highlight;+		if (highlight.width === 0)+		{+			css.outline = 'none';+		}+		else+		{+			updateIfNeeded(css, 'outline-width', highlight.width + 'px');+			updateIfNeeded(css, 'outline-color', Color.toCss(highlight.color));+		}++		var textStyle = style.style;+		updateIfNeeded(css, 'color', Color.toCss(textStyle.color));+		if (textStyle.typeface.ctor !== '[]')+		{+			updateIfNeeded(css, 'font-family', Text.toTypefaces(textStyle.typeface));+		}+		if (textStyle.height.ctor !== "Nothing")+		{+			updateIfNeeded(css, 'font-size', textStyle.height._0 + 'px');+		}+		updateIfNeeded(css, 'font-weight', textStyle.bold ? 'bold' : 'normal');+		updateIfNeeded(css, 'font-style', textStyle.italic ? 'italic' : 'normal');+		if (textStyle.line.ctor !== 'Nothing')+		{+			updateIfNeeded(css, 'text-decoration', Text.toLine(textStyle.line._0));+		}+	}++	function renderField(model)+	{+		var field = Element.createNode('input');+		updateFieldStyle(field.style, model.style);+		field.style.borderStyle = 'solid';+		field.style.pointerEvents = 'auto';++		field.type = model.type;+		field.placeholder = model.placeHolder;+		field.value = model.content.string;++		field.elm_handler = model.handler;+		field.elm_old_value = field.value;++		function inputUpdate(event)+		{+			var curr = field.elm_old_value;+			var next = field.value;+			if (curr === next)+			{+				return;+			}++			var direction = field.selectionDirection === 'forward' ? 'Forward' : 'Backward';+			var start = field.selectionStart;+			var end = field.selectionEnd;+			field.value = field.elm_old_value;++			Signal.sendMessage(field.elm_handler({+				_:{},+				string: next,+				selection: {+					_:{},+					start: start,+					end: end,+					direction: { ctor: direction }+				}+			}));+		}++		field.addEventListener('input', inputUpdate);+		field.addEventListener('focus', function() {+			field.elm_hasFocus = true;+		});+		field.addEventListener('blur', function() {+			field.elm_hasFocus = false;+		});++		return field;+	}++	function updateField(field, oldModel, newModel)+	{+		if (oldModel.style !== newModel.style)+		{+			updateFieldStyle(field.style, newModel.style);+		}+		field.elm_handler = newModel.handler;++		field.type = newModel.type;+		field.placeholder = newModel.placeHolder;+		var value = newModel.content.string;+		field.value = value;+		field.elm_old_value = value;+		if (field.elm_hasFocus)+		{+			var selection = newModel.content.selection;+			var direction = selection.direction.ctor === 'Forward' ? 'forward' : 'backward';+			setRange(field, selection.start, selection.end, direction);+		}+		return field;+	}++	function mkField(type)+	{+		function field(style, handler, placeHolder, content)+		{+			var padding = style.padding;+			var outline = style.outline.width;+			var adjustWidth = padding.left + padding.right + outline.left + outline.right;+			var adjustHeight = padding.top + padding.bottom + outline.top + outline.bottom;+			return A3(Element.newElement, 200, 30, {+				ctor: 'Custom',+				type: type + 'Field',+				adjustWidth: adjustWidth,+				adjustHeight: adjustHeight,+				render: renderField,+				update: updateField,+				model: {+					handler:handler,+					placeHolder:placeHolder,+					content:content,+					style:style,+					type:type+				}+			});+		}+		return F4(field);+	}++	function hoverable(handler, elem)+	{+		function onHover(bool)+		{+			Signal.sendMessage(handler(bool));+		}+		var props = Utils.replace([['hover',onHover]], elem.props);+		return {+			props: props,+			element: elem.element+		};+	}++	function clickable(message, elem)+	{+		function onClick()+		{+			Signal.sendMessage(message);+		}+		var props = Utils.replace([['click',onClick]], elem.props);+		return {+			props: props,+			element: elem.element+		};+	}++	return Elm.Native.Graphics.Input.values = {+		button: F2(button),+		customButton: F4(customButton),+		checkbox: F2(checkbox),+		dropDown: F2(dropDown),+		field: mkField('text'),+		email: mkField('email'),+		password: mkField('password'),+		hoverable: F2(hoverable),+		clickable: F2(clickable)+	};++};++Elm.Native.Json = {};+Elm.Native.Json.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Json = localRuntime.Native.Json || {};+	if (localRuntime.Native.Json.values) {+		return localRuntime.Native.Json.values;+	}++	var ElmArray = Elm.Native.Array.make(localRuntime);+	var List = Elm.Native.List.make(localRuntime);+	var Maybe = Elm.Maybe.make(localRuntime);+	var Result = Elm.Result.make(localRuntime);+	var Utils = Elm.Native.Utils.make(localRuntime);+++	function crash(expected, actual) {+		throw new Error(+			'expecting ' + expected + ' but got ' + JSON.stringify(actual)+		);+	}+++	// PRIMITIVE VALUES++	function decodeNull(successValue) {+		return function(value) {+			if (value === null) {+				return successValue;+			}+			crash('null', value);+		};+	}+++	function decodeString(value) {+		if (typeof value === 'string' || value instanceof String) {+			return value;+		}+		crash('a String', value);+	}+++	function decodeFloat(value) {+		if (typeof value === 'number') {+			return value;+		}+		crash('a Float', value);+	}+++	function decodeInt(value) {+		if (typeof value === 'number' && (value|0) === value) {+			return value;+		}+		crash('an Int', value);+	}+++	function decodeBool(value) {+		if (typeof value === 'boolean') {+			return value;+		}+		crash('a Bool', value);+	}+++	// ARRAY++	function decodeArray(decoder) {+		return function(value) {+			if (value instanceof Array) {+				var len = value.length;+				var array = new Array(len);+				for (var i = len; i-- ; ) {+					array[i] = decoder(value[i]);+				}+				return ElmArray.fromJSArray(array);+			}+			crash('an Array', value);+		};+	}+++	// LIST++	function decodeList(decoder) {+		return function(value) {+			if (value instanceof Array) {+				var len = value.length;+				var list = List.Nil;+				for (var i = len; i-- ; ) {+					list = List.Cons( decoder(value[i]), list );+				}+				return list;+			}+			crash('a List', value);+		};+	}+++	// MAYBE++	function decodeMaybe(decoder) {+		return function(value) {+			try {+				return Maybe.Just(decoder(value));+			} catch(e) {+				return Maybe.Nothing;+			}+		};+	}+++	// FIELDS++	function decodeField(field, decoder) {+		return function(value) {+			var subValue = value[field];+			if (subValue !== undefined) {+				return decoder(subValue);+			}+			crash("an object with field '" + field + "'", value);+		};+	}+++	// OBJECTS++	function decodeKeyValuePairs(decoder) {+		return function(value) {+			var isObject =+				typeof value === 'object'+					&& value !== null+					&& !(value instanceof Array);++			if (isObject) {+				var keyValuePairs = List.Nil;+				for (var key in value) {+					var elmValue = decoder(value[key]);+					var pair = Utils.Tuple2(key, elmValue);+					keyValuePairs = List.Cons(pair, keyValuePairs);+				}+				return keyValuePairs;+			}++			crash("an object", value);+		};+	}++	function decodeObject1(f, d1) {+		return function(value) {+			return f(d1(value));+		};+	}++	function decodeObject2(f, d1, d2) {+		return function(value) {+			return A2( f, d1(value), d2(value) );+		};+	}++	function decodeObject3(f, d1, d2, d3) {+		return function(value) {+			return A3( f, d1(value), d2(value), d3(value) );+		};+	}++	function decodeObject4(f, d1, d2, d3, d4) {+		return function(value) {+			return A4( f, d1(value), d2(value), d3(value), d4(value) );+		};+	}++	function decodeObject5(f, d1, d2, d3, d4, d5) {+		return function(value) {+			return A5( f, d1(value), d2(value), d3(value), d4(value), d5(value) );+		};+	}++	function decodeObject6(f, d1, d2, d3, d4, d5, d6) {+		return function(value) {+			return A6( f,+				d1(value),+				d2(value),+				d3(value),+				d4(value),+				d5(value),+				d6(value)+			);+		};+	}++	function decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) {+		return function(value) {+			return A7( f,+				d1(value),+				d2(value),+				d3(value),+				d4(value),+				d5(value),+				d6(value),+				d7(value)+			);+		};+	}++	function decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) {+		return function(value) {+			return A8( f,+				d1(value),+				d2(value),+				d3(value),+				d4(value),+				d5(value),+				d6(value),+				d7(value),+				d8(value)+			);+		};+	}+++	// TUPLES++	function decodeTuple1(f, d1) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 1 ) {+				crash('a Tuple of length 1', value);+			}+			return f( d1(value[0]) );+		};+	}++	function decodeTuple2(f, d1, d2) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 2 ) {+				crash('a Tuple of length 2', value);+			}+			return A2( f, d1(value[0]), d2(value[1]) );+		};+	}++	function decodeTuple3(f, d1, d2, d3) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 3 ) {+				crash('a Tuple of length 3', value);+			}+			return A3( f, d1(value[0]), d2(value[1]), d3(value[2]) );+		};+	}+++	function decodeTuple4(f, d1, d2, d3, d4) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 4 ) {+				crash('a Tuple of length 4', value);+			}+			return A4( f, d1(value[0]), d2(value[1]), d3(value[2]), d4(value[3]) );+		};+	}+++	function decodeTuple5(f, d1, d2, d3, d4, d5) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 5 ) {+				crash('a Tuple of length 5', value);+			}+			return A5( f,+				d1(value[0]),+				d2(value[1]),+				d3(value[2]),+				d4(value[3]),+				d5(value[4])+			);+		};+	}+++	function decodeTuple6(f, d1, d2, d3, d4, d5, d6) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 6 ) {+				crash('a Tuple of length 6', value);+			}+			return A6( f,+				d1(value[0]),+				d2(value[1]),+				d3(value[2]),+				d4(value[3]),+				d5(value[4]),+				d6(value[5])+			);+		};+	}++	function decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 7 ) {+				crash('a Tuple of length 7', value);+			}+			return A7( f,+				d1(value[0]),+				d2(value[1]),+				d3(value[2]),+				d4(value[3]),+				d5(value[4]),+				d6(value[5]),+				d7(value[6])+			);+		};+	}+++	function decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) {+		return function(value) {+			if ( !(value instanceof Array) || value.length !== 8 ) {+				crash('a Tuple of length 8', value);+			}+			return A8( f,+				d1(value[0]),+				d2(value[1]),+				d3(value[2]),+				d4(value[3]),+				d5(value[4]),+				d6(value[5]),+				d7(value[6]),+				d8(value[7])+			);+		};+	}+++	// CUSTOM DECODERS++	function decodeValue(value) {+		return value;+	}++	function runDecoderValue(decoder, value) {+		try {+			return Result.Ok(decoder(value));+		} catch(e) {+			return Result.Err(e.message);+		}+	}++	function customDecoder(decoder, callback) {+		return function(value) {+			var result = callback(decoder(value));+			if (result.ctor === 'Err') {+				throw new Error('custom decoder failed: ' + result._0);+			}+			return result._0;+		}+	}++	function andThen(decode, callback) {+		return function(value) {+			var result = decode(value);+			return callback(result)(value);+		}+	}++	function fail(msg) {+		return function(value) {+			throw new Error(msg);+		}+	}++	function succeed(successValue) {+		return function(value) {+			return successValue;+		}+	}+++	// ONE OF MANY++	function oneOf(decoders) {+		return function(value) {+			var errors = [];+			var temp = decoders;+			while (temp.ctor !== '[]') {+				try {+					return temp._0(value);+				} catch(e) {+					errors.push(e.message);+				}+				temp = temp._1;+			}+			throw new Error('expecting one of the following:\n    ' + errors.join('\n    '));+		}+	}++	function get(decoder, value) {+		try {+			return Result.Ok(decoder(value));+		} catch(e) {+			return Result.Err(e.message);+		}+	}+++	// ENCODE / DECODE++	function runDecoderString(decoder, string) {+		try {+			return Result.Ok(decoder(JSON.parse(string)));+		} catch(e) {+			return Result.Err(e.message);+		}+	}++	function encode(indentLevel, value) {+		return JSON.stringify(value, null, indentLevel);+	}++	function identity(value) {+		return value;+	}++	function encodeObject(keyValuePairs) {+		var obj = {};+		while (keyValuePairs.ctor !== '[]') {+			var pair = keyValuePairs._0;+			obj[pair._0] = pair._1;+			keyValuePairs = keyValuePairs._1;+		}+		return obj;+	}++	return localRuntime.Native.Json.values = {+		encode: F2(encode),+		runDecoderString: F2(runDecoderString),+		runDecoderValue: F2(runDecoderValue),++		get: F2(get),+		oneOf: oneOf,++		decodeNull: decodeNull,+		decodeInt: decodeInt,+		decodeFloat: decodeFloat,+		decodeString: decodeString,+		decodeBool: decodeBool,++		decodeMaybe: decodeMaybe,++		decodeList: decodeList,+		decodeArray: decodeArray,++		decodeField: F2(decodeField),++		decodeObject1: F2(decodeObject1),+		decodeObject2: F3(decodeObject2),+		decodeObject3: F4(decodeObject3),+		decodeObject4: F5(decodeObject4),+		decodeObject5: F6(decodeObject5),+		decodeObject6: F7(decodeObject6),+		decodeObject7: F8(decodeObject7),+		decodeObject8: F9(decodeObject8),+		decodeKeyValuePairs: decodeKeyValuePairs,++		decodeTuple1: F2(decodeTuple1),+		decodeTuple2: F3(decodeTuple2),+		decodeTuple3: F4(decodeTuple3),+		decodeTuple4: F5(decodeTuple4),+		decodeTuple5: F6(decodeTuple5),+		decodeTuple6: F7(decodeTuple6),+		decodeTuple7: F8(decodeTuple7),+		decodeTuple8: F9(decodeTuple8),++		andThen: F2(andThen),+		decodeValue: decodeValue,+		customDecoder: F2(customDecoder),+		fail: fail,+		succeed: succeed,++		identity: identity,+		encodeNull: null,+		encodeArray: ElmArray.toJSArray,+		encodeList: List.toArray,+		encodeObject: encodeObject++	};++};++Elm.Native.List = {};+Elm.Native.List.make = function(localRuntime) {+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.List = localRuntime.Native.List || {};+	if (localRuntime.Native.List.values)+	{+		return localRuntime.Native.List.values;+	}+	if ('values' in Elm.Native.List)+	{+		return localRuntime.Native.List.values = Elm.Native.List.values;+	}++	var Utils = Elm.Native.Utils.make(localRuntime);++	var Nil = Utils.Nil;+	var Cons = Utils.Cons;++	function toArray(xs)+	{+		var out = [];+		while (xs.ctor !== '[]')+		{+			out.push(xs._0);+			xs = xs._1;+		}+		return out;+	}++	function fromArray(arr)+	{+		var out = Nil;+		for (var i = arr.length; i--; )+		{+			out = Cons(arr[i], out);+		}+		return out;+	}++	function range(lo,hi)+	{+		var lst = Nil;+		if (lo <= hi)+		{+			do { lst = Cons(hi,lst) } while (hi-->lo);+		}+		return lst+	}++	// f defined similarly for both foldl and foldr (NB: different from Haskell)+	// ie, foldl : (a -> b -> b) -> b -> [a] -> b+	function foldl(f, b, xs)+	{+		var acc = b;+		while (xs.ctor !== '[]')+		{+			acc = A2(f, xs._0, acc);+			xs = xs._1;+		}+		return acc;+	}++	function foldr(f, b, xs)+	{+		var arr = toArray(xs);+		var acc = b;+		for (var i = arr.length; i--; )+		{+			acc = A2(f, arr[i], acc);+		}+		return acc;+	}++	function any(pred, xs)+	{+		while (xs.ctor !== '[]')+		{+			if (pred(xs._0))+			{+				return true;+			}+			xs = xs._1;+		}+		return false;+	}++	function map2(f, xs, ys)+	{+		var arr = [];+		while (xs.ctor !== '[]' && ys.ctor !== '[]')+		{+			arr.push(A2(f, xs._0, ys._0));+			xs = xs._1;+			ys = ys._1;+		}+		return fromArray(arr);+	}++	function map3(f, xs, ys, zs)+	{+		var arr = [];+		while (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]')+		{+			arr.push(A3(f, xs._0, ys._0, zs._0));+			xs = xs._1;+			ys = ys._1;+			zs = zs._1;+		}+		return fromArray(arr);+	}++	function map4(f, ws, xs, ys, zs)+	{+		var arr = [];+		while (   ws.ctor !== '[]'+			   && xs.ctor !== '[]'+			   && ys.ctor !== '[]'+			   && zs.ctor !== '[]')+		{+			arr.push(A4(f, ws._0, xs._0, ys._0, zs._0));+			ws = ws._1;+			xs = xs._1;+			ys = ys._1;+			zs = zs._1;+		}+		return fromArray(arr);+	}++	function map5(f, vs, ws, xs, ys, zs)+	{+		var arr = [];+		while (   vs.ctor !== '[]'+			   && ws.ctor !== '[]'+			   && xs.ctor !== '[]'+			   && ys.ctor !== '[]'+			   && zs.ctor !== '[]')+		{+			arr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));+			vs = vs._1;+			ws = ws._1;+			xs = xs._1;+			ys = ys._1;+			zs = zs._1;+		}+		return fromArray(arr);+	}++	function sortBy(f, xs)+	{+		return fromArray(toArray(xs).sort(function(a,b){+			return Utils.cmp(f(a), f(b));+		}));+	}++	function sortWith(f, xs)+	{+		return fromArray(toArray(xs).sort(function(a,b){+			var ord = f(a)(b).ctor;+			return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;+		}));+	}++	function take(n, xs)+	{+		var arr = [];+		while (xs.ctor !== '[]' && n > 0)+		{+			arr.push(xs._0);+			xs = xs._1;+			--n;+		}+		return fromArray(arr);+	}++	function drop(n, xs)+	{+		while (xs.ctor !== '[]' && n > 0)+		{+			xs = xs._1;+			--n;+		}+		return xs;+	}++	function repeat(n, x)+	{+		var arr = [];+		var pattern = [x];+		while (n > 0)+		{+			if (n & 1)+			{+				arr = arr.concat(pattern);+			}+			n >>= 1, pattern = pattern.concat(pattern);+		}+		return fromArray(arr);+	}+++	Elm.Native.List.values = {+		Nil:Nil,+		Cons:Cons,+		cons:F2(Cons),+		toArray:toArray,+		fromArray:fromArray,+		range:range,++		foldl:F3(foldl),+		foldr:F3(foldr),++		any:F2(any),+		map2:F3(map2),+		map3:F4(map3),+		map4:F5(map4),+		map5:F6(map5),+		sortBy:F2(sortBy),+		sortWith:F2(sortWith),+		take:F2(take),+		drop:F2(drop),+		repeat:F2(repeat)+	};+	return localRuntime.Native.List.values = Elm.Native.List.values;++};+++// setup+Elm.Native = Elm.Native || {};+Elm.Native.Markdown = Elm.Native.Markdown || {};++// definition+Elm.Native.Markdown.make = function(localRuntime) {+    'use strict';++    // attempt to short-circuit+    if ('values' in Elm.Native.Markdown)+    {+        return Elm.Native.Markdown.values;+    }++    var Element = Elm.Native.Graphics.Element.make(localRuntime);++    /**+     * marked - a markdown parser+     * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)+     * https://github.com/chjj/marked+     */+    (function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g,"    ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[2]==="="?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"hr"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"blockquote_start"});cap=cap[0].replace(/^ *> ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\d+\.) +/,"");if(~item.indexOf("\n ")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp("^ {1,"+space+"}","gm"),""):item.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script"||cap[1]==="style",text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]="right"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]="center"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]="left"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:"paragraph",text:cap[1].charAt(cap[1].length-1)==="\n"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"text",text:cap[0]});continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};inline._inside=/(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;inline._href=/\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(this.smartypants(cap[0]));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"—").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"<pre><code>"+(escaped?code:escape(code,true))+"\n</code></pre>"}return'<pre><code class="'+this.options.langPrefix+escape(lang,true)+'">'+(escaped?code:escape(code,true))+"\n</code></pre>\n"};Renderer.prototype.blockquote=function(quote){return"<blockquote>\n"+quote+"</blockquote>\n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"<h"+level+' id="'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\w]+/g,"-")+'">'+text+"</h"+level+">\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"</"+type+">\n"};Renderer.prototype.listitem=function(text){return"<li>"+text+"</li>\n"};Renderer.prototype.paragraph=function(text){return"<p>"+text+"</p>\n"};Renderer.prototype.table=function(header,body){return"<table>\n"+"<thead>\n"+header+"</thead>\n"+"<tbody>\n"+body+"</tbody>\n"+"</table>\n"};Renderer.prototype.tablerow=function(content){return"<tr>\n"+content+"</tr>\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"</"+type+">\n"};Renderer.prototype.strong=function(text){return"<strong>"+text+"</strong>"};Renderer.prototype.em=function(text){return"<em>"+text+"</em>"};Renderer.prototype.codespan=function(text){return"<code>"+text+"</code>"};Renderer.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"};Renderer.prototype.del=function(text){return"<del>"+text+"</del>"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0){return""}}var out='<a href="'+href+'"';if(title){out+=' title="'+title+'"'}out+=">"+text+"</a>";return out};Renderer.prototype.image=function(href,title,text){var out='<img src="'+href+'" alt="'+text+'"';if(title){out+=' title="'+title+'"'}out+=this.options.xhtml?"/>":">";return out};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell="";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case"blockquote_start":{var body="";while(this.next().type!=="blockquote_end"){body+=this.tok()}return this.renderer.blockquote(body)}case"list_start":{var body="",ordered=this.token.ordered;while(this.next().type!=="list_end"){body+=this.tok()}return this.renderer.list(body,ordered)}case"list_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.token.type==="text"?this.parseText():this.tok()}return this.renderer.listitem(body)}case"loose_item_start":{var body="";while(this.next().type!=="list_item_end"){body+=this.tok()}return this.renderer.listitem(body)}case"html":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case"paragraph":{return this.renderer.paragraph(this.inline.output(this.token.text))}case"text":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt==="function"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!=="code"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+="\nPlease report this to https://github.com/chjj/marked.";if((opt||marked.defaults).silent){return"<p>An error occured:</p><pre>"+escape(e.message+"",true)+"</pre>"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}());++    marked.setOptions({+        highlight: function (code, lang) {+            if (typeof hljs !== 'undefined'+                && lang+                && hljs.listLanguages().indexOf(lang) >= 0)+            {+                return hljs.highlight(lang, code, true).value;+            }+            return code;+        }+    });++    function formatOptions(options) {+        var gfm = options.githubFlavored;+        if (gfm.ctor === 'Just')+        {+            return {+                gfm: true,+                tables: gfm.tables,+                breaks: gfm.breaks,+                sanitize: options.sanitize,+                smartypants: options.smartypants+            };+        }+        else+        {+            return {+                gfm: false,+                tables: false,+                breaks: false,+                sanitize: options.sanitize,+                smartypants: options.smartypants+            };+        }+    }++    function toHtmlWith(options, rawMarkdown) {+        var widget = {+            type: "Widget",++            init: function () {+                var html = marked(rawMarkdown, formatOptions(options));+                var div = document.createElement('div');+                div.innerHTML = html;+                return div;+            },++            update: function (previous, node) {+                var html = marked(rawMarkdown, formatOptions(options));+                node.innerHTML = html;+                return node;+            }+        };+        return widget;+    }++    function toElementWith(options, rawMarkdown) {+        return Element.markdown(marked(rawMarkdown, formatOptions(options)));+    }++    return Elm.Native.Markdown.values = {+        toHtmlWith: F2(toHtmlWith),+        toElementWith: F2(toElementWith)+    };+};+Elm.Native.Port = {};+Elm.Native.Port.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Port = localRuntime.Native.Port || {};+	if (localRuntime.Native.Port.values)+	{+		return localRuntime.Native.Port.values;+	}++	var NS;+	var Utils = Elm.Native.Utils.make(localRuntime);+++	// INBOUND++	function inbound(name, type, converter)+	{+		if (!localRuntime.argsTracker[name])+		{+			throw new Error(+				"Port Error:\n" ++				"No argument was given for the port named '" + name + "' with type:\n\n" ++				"    " + type.split('\n').join('\n        ') + "\n\n" ++				"You need to provide an initial value!\n\n" ++				"Find out more about ports here <http://elm-lang.org/learn/Ports.elm>"+			);+		}+		var arg = localRuntime.argsTracker[name];+		arg.used = true;++		return jsToElm(name, type, converter, arg.value);+	}+++	function inboundSignal(name, type, converter)+	{+		var initialValue = inbound(name, type, converter);++		if (!NS)+		{+			NS = Elm.Native.Signal.make(localRuntime);+		}+		var signal = NS.input('inbound-port-' + name, initialValue);++		function send(jsValue)+		{+			var elmValue = jsToElm(name, type, converter, jsValue);+			setTimeout(function() {+				localRuntime.notify(signal.id, elmValue);+			}, 0);+		}++		localRuntime.ports[name] = { send: send };++		return signal;+	}+++	function jsToElm(name, type, converter, value)+	{+		try+		{+			return converter(value);+		}+		catch(e)+		{+			throw new Error(+				"Port Error:\n" ++				"Regarding the port named '" + name + "' with type:\n\n" ++				"    " + type.split('\n').join('\n        ') + "\n\n" ++				"You just sent the value:\n\n" ++				"    " + JSON.stringify(arg.value) + "\n\n" ++				"but it cannot be converted to the necessary type.\n" ++				e.message+			);+		}+	}+++	// OUTBOUND++	function outbound(name, converter, elmValue)+	{+		localRuntime.ports[name] = converter(elmValue);+	}+++	function outboundSignal(name, converter, signal)+	{+		var subscribers = [];++		function subscribe(handler)+		{+			subscribers.push(handler);+		}+		function unsubscribe(handler)+		{+			subscribers.pop(subscribers.indexOf(handler));+		}++		function notify(elmValue)+		{+			var jsValue = converter(elmValue);+			var len = subscribers.length;+			for (var i = 0; i < len; ++i)+			{+				subscribers[i](jsValue);+			}+		}++		if (!NS)+		{+			NS = Elm.Native.Signal.make(localRuntime);+		}+		NS.output('outbound-port-' + name, notify, signal);++		localRuntime.ports[name] = {+			subscribe: subscribe,+			unsubscribe: unsubscribe+		};++		return signal;+	}+++	return localRuntime.Native.Port.values = {+		inbound: inbound,+		outbound: outbound,+		inboundSignal: inboundSignal,+		outboundSignal: outboundSignal+	};+};+++if (!Elm.fullscreen) {++	(function() {+		'use strict';++		var Display = {+			FULLSCREEN: 0,+			COMPONENT: 1,+			NONE: 2+		};++		Elm.fullscreen = function(module, args)+		{+			var container = document.createElement('div');+			document.body.appendChild(container);+			return init(Display.FULLSCREEN, container, module, args || {});+		};++		Elm.embed = function(module, container, args)+		{+			var tag = container.tagName;+			if (tag !== 'DIV')+			{+				throw new Error('Elm.node must be given a DIV, not a ' + tag + '.');+			}+			return init(Display.COMPONENT, container, module, args || {});+		};++		Elm.worker = function(module, args)+		{+			return init(Display.NONE, {}, module, args || {});+		};++		function init(display, container, module, args, moduleToReplace)+		{+			// defining state needed for an instance of the Elm RTS+			var inputs = [];++			/* OFFSET+			 * Elm's time traveling debugger lets you pause time. This means+			 * "now" may be shifted a bit into the past. By wrapping Date.now()+			 * we can manage this.+			 */+			var timer = {+				programStart: Date.now(),+				now: function()+				{+					return Date.now();+				}+			};++			var updateInProgress = false;+			function notify(id, v)+			{+				if (updateInProgress)+				{+					throw new Error(+						'The notify function has been called synchronously!\n' ++						'This can lead to frames being dropped.\n' ++						'Definitely report this to <https://github.com/elm-lang/Elm/issues>\n');+				}+				updateInProgress = true;+				var timestep = timer.now();+				for (var i = inputs.length; i--; )+				{+					inputs[i].notify(timestep, id, v);+				}+				updateInProgress = false;+			}+			function setTimeout(func, delay)+			{+				return window.setTimeout(func, delay);+			}++			var listeners = [];+			function addListener(relevantInputs, domNode, eventName, func)+			{+				domNode.addEventListener(eventName, func);+				var listener = {+					relevantInputs: relevantInputs,+					domNode: domNode,+					eventName: eventName,+					func: func+				};+				listeners.push(listener);+			}++			var argsTracker = {};+			for (var name in args)+			{+				argsTracker[name] = {+					value: args[name],+					used: false+				};+			}++			// create the actual RTS. Any impure modules will attach themselves to this+			// object. This permits many Elm programs to be embedded per document.+			var elm = {+				notify: notify,+				setTimeout: setTimeout,+				node: container,+				addListener: addListener,+				inputs: inputs,+				timer: timer,+				argsTracker: argsTracker,+				ports: {},++				isFullscreen: function() { return display === Display.FULLSCREEN; },+				isEmbed: function() { return display === Display.COMPONENT; },+				isWorker: function() { return display === Display.NONE; }+			};++			function swap(newModule)+			{+				removeListeners(listeners);+				var div = document.createElement('div');+				var newElm = init(display, div, newModule, args, elm);+				inputs = [];+				// elm.swap = newElm.swap;+				return newElm;+			}++			function dispose()+			{+				removeListeners(listeners);+				inputs = [];+			}++			var Module = {};+			try+			{+				Module = module.make(elm);+				checkInputs(elm);+			}+			catch (error)+			{+				if (typeof container.appendChild == 'undefined')+				{+					console.log(error.message);+				}+				else+				{+					container.appendChild(errorNode(error.message));+				}+				throw error;+			}++			if (display !== Display.NONE)+			{+				var graphicsNode = initGraphics(elm, Module);+			}++			var rootNode = { kids: inputs };+			trimDeadNodes(rootNode);+			inputs = rootNode.kids;+			filterListeners(inputs, listeners);++			if (typeof moduleToReplace !== 'undefined')+			{+				hotSwap(moduleToReplace, elm);++				// rerender scene if graphics are enabled.+				if (typeof graphicsNode !== 'undefined')+				{+					graphicsNode.notify(0, true, 0);+				}+			}++			return {+				swap: swap,+				ports: elm.ports,+				dispose: dispose+			};+		};++		function checkInputs(elm)+		{+			var argsTracker = elm.argsTracker;+			for (var name in argsTracker)+			{+				if (!argsTracker[name].used)+				{+					throw new Error(+						"Port Error:\nYou provided an argument named '" + name ++						"' but there is no corresponding port!\n\n" ++						"Maybe add a port '" + name + "' to your Elm module?\n" ++						"Maybe remove the '" + name + "' argument from your initialization code in JS?"+					);+				}+			}+		}++		function errorNode(message)+		{+			var code = document.createElement('code');++			var lines = message.split('\n');+			code.appendChild(document.createTextNode(lines[0]));+			code.appendChild(document.createElement('br'));+			code.appendChild(document.createElement('br'));+			for (var i = 1; i < lines.length; ++i)+			{+				code.appendChild(document.createTextNode('\u00A0 \u00A0 ' + lines[i].replace(/  /g, '\u00A0 ')));+				code.appendChild(document.createElement('br'));+			}+			code.appendChild(document.createElement('br'));+			code.appendChild(document.createTextNode("Open the developer console for more details."));+			return code;+		}+++		//// FILTER SIGNALS ////++		// TODO: move this code into the signal module and create a function+		// Signal.initializeGraph that actually instantiates everything.++		function filterListeners(inputs, listeners)+		{+			loop:+			for (var i = listeners.length; i--; )+			{+				var listener = listeners[i];+				for (var j = inputs.length; j--; )+				{+					if (listener.relevantInputs.indexOf(inputs[j].id) >= 0)+					{+						continue loop;+					}+				}+				listener.domNode.removeEventListener(listener.eventName, listener.func);+			}+		}++		function removeListeners(listeners)+		{+			for (var i = listeners.length; i--; )+			{+				var listener = listeners[i];+				listener.domNode.removeEventListener(listener.eventName, listener.func);+			}+		}+++		// returns a boolean representing whether the node is alive or not.+		function trimDeadNodes(node)+		{+			if (node.isOutput)+			{+				return true;+			}++			var liveKids = [];+			for (var i = node.kids.length; i--; )+			{+				var kid = node.kids[i];+				if (trimDeadNodes(kid))+				{+					liveKids.push(kid);+				}+			}+			node.kids = liveKids;++			return liveKids.length > 0;+		}+++		////  RENDERING  ////++		function initGraphics(elm, Module)+		{+			if (!('main' in Module))+			{+				throw new Error("'main' is missing! What do I display?!");+			}++			var signalGraph = Module.main;++			// make sure the signal graph is actually a signal & extract the visual model+			if (!('notify' in signalGraph))+			{+				signalGraph = Elm.Signal.make(elm).constant(signalGraph);+			}+			var initialScene = signalGraph.value;++			// Figure out what the render functions should be+			var render;+			var update;+			if (initialScene.props)+			{+				var Element = Elm.Native.Graphics.Element.make(elm);+				render = Element.render;+				update = Element.updateAndReplace;+			}+			else+			{+				var VirtualDom = Elm.Native.VirtualDom.make(elm);+				render = VirtualDom.render;+				update = VirtualDom.updateAndReplace;+			}++			// Add the initialScene to the DOM+			var container = elm.node;+			var node = render(initialScene);+			while (container.firstChild)+			{+				container.removeChild(container.firstChild);+			}+			container.appendChild(node);++			var _requestAnimationFrame =+				typeof requestAnimationFrame !== 'undefined'+					? requestAnimationFrame+					: function(cb) { setTimeout(cb, 1000/60); }+					;++			// domUpdate is called whenever the main Signal changes.+			//+			// domUpdate and drawCallback implement a small state machine in order+			// to schedule only 1 draw per animation frame. This enforces that+			// once draw has been called, it will not be called again until the+			// next frame.+			//+			// drawCallback is scheduled whenever+			// 1. The state transitions from PENDING_REQUEST to EXTRA_REQUEST, or+			// 2. The state transitions from NO_REQUEST to PENDING_REQUEST+			//+			// Invariants:+			// 1. In the NO_REQUEST state, there is never a scheduled drawCallback.+			// 2. In the PENDING_REQUEST and EXTRA_REQUEST states, there is always exactly 1+			//    scheduled drawCallback.+			var NO_REQUEST = 0;+			var PENDING_REQUEST = 1;+			var EXTRA_REQUEST = 2;+			var state = NO_REQUEST;+			var savedScene = initialScene;+			var scheduledScene = initialScene;++			function domUpdate(newScene)+			{+				scheduledScene = newScene;++				switch (state)+				{+					case NO_REQUEST:+						_requestAnimationFrame(drawCallback);+						state = PENDING_REQUEST;+						return;+					case PENDING_REQUEST:+						state = PENDING_REQUEST;+						return;+					case EXTRA_REQUEST:+						state = PENDING_REQUEST;+						return;+				}+			}++			function drawCallback()+			{+				switch (state)+				{+					case NO_REQUEST:+						// This state should not be possible. How can there be no+						// request, yet somehow we are actively fulfilling a+						// request?+						throw new Error(+							"Unexpected draw callback.\n" ++							"Please report this to <https://github.com/elm-lang/core/issues>."+						);++					case PENDING_REQUEST:+						// At this point, we do not *know* that another frame is+						// needed, but we make an extra request to rAF just in+						// case. It's possible to drop a frame if rAF is called+						// too late, so we just do it preemptively.+						_requestAnimationFrame(drawCallback);+						state = EXTRA_REQUEST;++						// There's also stuff we definitely need to draw.+						draw();+						return;++					case EXTRA_REQUEST:+						// Turns out the extra request was not needed, so we will+						// stop calling rAF. No reason to call it all the time if+						// no one needs it.+						state = NO_REQUEST;+						return;+				}+			}++			function draw()+			{+				update(elm.node.firstChild, savedScene, scheduledScene);+				if (elm.Native.Window)+				{+					elm.Native.Window.values.resizeIfNeeded();+				}+				savedScene = scheduledScene;+			}++			var renderer = Elm.Native.Signal.make(elm).output('main', domUpdate, signalGraph);++			// must check for resize after 'renderer' is created so+			// that changes show up.+			if (elm.Native.Window)+			{+				elm.Native.Window.values.resizeIfNeeded();+			}++			return renderer;+		}++		//// HOT SWAPPING ////++		// Returns boolean indicating if the swap was successful.+		// Requires that the two signal graphs have exactly the same+		// structure.+		function hotSwap(from, to)+		{+			function similar(nodeOld,nodeNew)+			{+				if (nodeOld.id !== nodeNew.id)+				{+					return false;+				}+				if (nodeOld.isOutput)+				{+					return nodeNew.isOutput;+				}+				return nodeOld.kids.length === nodeNew.kids.length;+			}+			function swap(nodeOld,nodeNew)+			{+				nodeNew.value = nodeOld.value;+				return true;+			}+			var canSwap = depthFirstTraversals(similar, from.inputs, to.inputs);+			if (canSwap)+			{+				depthFirstTraversals(swap, from.inputs, to.inputs);+			}+			from.node.parentNode.replaceChild(to.node, from.node);++			return canSwap;+		}++		// Returns false if the node operation f ever fails.+		function depthFirstTraversals(f, queueOld, queueNew)+		{+			if (queueOld.length !== queueNew.length)+			{+				return false;+			}+			queueOld = queueOld.slice(0);+			queueNew = queueNew.slice(0);++			var seen = [];+			while (queueOld.length > 0 && queueNew.length > 0)+			{+				var nodeOld = queueOld.pop();+				var nodeNew = queueNew.pop();+				if (seen.indexOf(nodeOld.id) < 0)+				{+					if (!f(nodeOld, nodeNew))+					{+						return false;+					}+					queueOld = queueOld.concat(nodeOld.kids || []);+					queueNew = queueNew.concat(nodeNew.kids || []);+					seen.push(nodeOld.id);+				}+			}+			return true;+		}+	}());++	function F2(fun)+	{+		function wrapper(a) { return function(b) { return fun(a,b) } }+		wrapper.arity = 2;+		wrapper.func = fun;+		return wrapper;+	}++	function F3(fun)+	{+		function wrapper(a) {+			return function(b) { return function(c) { return fun(a,b,c) }}+		}+		wrapper.arity = 3;+		wrapper.func = fun;+		return wrapper;+	}++	function F4(fun)+	{+		function wrapper(a) { return function(b) { return function(c) {+			return function(d) { return fun(a,b,c,d) }}}+		}+		wrapper.arity = 4;+		wrapper.func = fun;+		return wrapper;+	}++	function F5(fun)+	{+		function wrapper(a) { return function(b) { return function(c) {+			return function(d) { return function(e) { return fun(a,b,c,d,e) }}}}+		}+		wrapper.arity = 5;+		wrapper.func = fun;+		return wrapper;+	}++	function F6(fun)+	{+		function wrapper(a) { return function(b) { return function(c) {+			return function(d) { return function(e) { return function(f) {+			return fun(a,b,c,d,e,f) }}}}}+		}+		wrapper.arity = 6;+		wrapper.func = fun;+		return wrapper;+	}++	function F7(fun)+	{+		function wrapper(a) { return function(b) { return function(c) {+			return function(d) { return function(e) { return function(f) {+			return function(g) { return fun(a,b,c,d,e,f,g) }}}}}}+		}+		wrapper.arity = 7;+		wrapper.func = fun;+		return wrapper;+	}++	function F8(fun)+	{+		function wrapper(a) { return function(b) { return function(c) {+			return function(d) { return function(e) { return function(f) {+			return function(g) { return function(h) {+			return fun(a,b,c,d,e,f,g,h)}}}}}}}+		}+		wrapper.arity = 8;+		wrapper.func = fun;+		return wrapper;+	}++	function F9(fun)+	{+		function wrapper(a) { return function(b) { return function(c) {+			return function(d) { return function(e) { return function(f) {+			return function(g) { return function(h) { return function(i) {+			return fun(a,b,c,d,e,f,g,h,i) }}}}}}}}+		}+		wrapper.arity = 9;+		wrapper.func = fun;+		return wrapper;+	}++	function A2(fun,a,b)+	{+		return fun.arity === 2+			? fun.func(a,b)+			: fun(a)(b);+	}+	function A3(fun,a,b,c)+	{+		return fun.arity === 3+			? fun.func(a,b,c)+			: fun(a)(b)(c);+	}+	function A4(fun,a,b,c,d)+	{+		return fun.arity === 4+			? fun.func(a,b,c,d)+			: fun(a)(b)(c)(d);+	}+	function A5(fun,a,b,c,d,e)+	{+		return fun.arity === 5+			? fun.func(a,b,c,d,e)+			: fun(a)(b)(c)(d)(e);+	}+	function A6(fun,a,b,c,d,e,f)+	{+		return fun.arity === 6+			? fun.func(a,b,c,d,e,f)+			: fun(a)(b)(c)(d)(e)(f);+	}+	function A7(fun,a,b,c,d,e,f,g)+	{+		return fun.arity === 7+			? fun.func(a,b,c,d,e,f,g)+			: fun(a)(b)(c)(d)(e)(f)(g);+	}+	function A8(fun,a,b,c,d,e,f,g,h)+	{+		return fun.arity === 8+			? fun.func(a,b,c,d,e,f,g,h)+			: fun(a)(b)(c)(d)(e)(f)(g)(h);+	}+	function A9(fun,a,b,c,d,e,f,g,h,i)+	{+		return fun.arity === 9+			? fun.func(a,b,c,d,e,f,g,h,i)+			: fun(a)(b)(c)(d)(e)(f)(g)(h)(i);+	}+}++Elm.Native.Show = {};+Elm.Native.Show.make = function(localRuntime) {+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Show = localRuntime.Native.Show || {};+	if (localRuntime.Native.Show.values)+	{+		return localRuntime.Native.Show.values;+	}++	var _Array;+	var Dict;+	var List;+	var Utils = Elm.Native.Utils.make(localRuntime);++	var toString = function(v)+	{+		var type = typeof v;+		if (type === "function")+		{+			var name = v.func ? v.func.name : v.name;+			return '<function' + (name === '' ? '' : ': ') + name + '>';+		}+		else if (type === "boolean")+		{+			return v ? "True" : "False";+		}+		else if (type === "number")+		{+			return v + "";+		}+		else if ((v instanceof String) && v.isChar)+		{+			return "'" + addSlashes(v, true) + "'";+		}+		else if (type === "string")+		{+			return '"' + addSlashes(v, false) + '"';+		}+		else if (type === "object" && '_' in v && probablyPublic(v))+		{+			var output = [];+			for (var k in v._)+			{+				for (var i = v._[k].length; i--; )+				{+					output.push(k + " = " + toString(v._[k][i]));+				}+			}+			for (var k in v)+			{+				if (k === '_') continue;+				output.push(k + " = " + toString(v[k]));+			}+			if (output.length === 0)+			{+				return "{}";+			}+			return "{ " + output.join(", ") + " }";+		}+		else if (type === "object" && 'ctor' in v)+		{+			if (v.ctor.substring(0,6) === "_Tuple")+			{+				var output = [];+				for (var k in v)+				{+					if (k === 'ctor') continue;+					output.push(toString(v[k]));+				}+				return "(" + output.join(",") + ")";+			}+			else if (v.ctor === "_Array")+			{+				if (!_Array)+				{+					_Array = Elm.Array.make(localRuntime);+				}+				var list = _Array.toList(v);+				return "Array.fromList " + toString(list);+			}+			else if (v.ctor === "::")+			{+				var output = '[' + toString(v._0);+				v = v._1;+				while (v.ctor === "::")+				{+					output += "," + toString(v._0);+					v = v._1;+				}+				return output + ']';+			}+			else if (v.ctor === "[]")+			{+				return "[]";+			}+			else if (v.ctor === "RBNode" || v.ctor === "RBEmpty")+			{+				if (!Dict)+				{+					Dict = Elm.Dict.make(localRuntime);+				}+				if (!List)+				{+					List = Elm.List.make(localRuntime);+				}+				var list = Dict.toList(v);+				var name = "Dict";+				if (list.ctor === "::" && list._0._1.ctor === "_Tuple0")+				{+					name = "Set";+					list = A2(List.map, function(x){return x._0}, list);+				}+				return name + ".fromList " + toString(list);+			}+			else if (v.ctor.slice(0,5) === "Text:")+			{+				return '<text>'+			}+			else+			{+				var output = "";+				for (var i in v)+				{+					if (i === 'ctor') continue;+					var str = toString(v[i]);+					var parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0;+					output += ' ' + (parenless ? str : '(' + str + ')');+				}+				return v.ctor + output;+			}+		}+		if (type === 'object' && 'notify' in v && 'id' in v)+		{+			return 'initialValue' in v+				? '<Signal>'+				: '<Stream>';+		}+		return "<internal structure>";+	};++	function addSlashes(str, isChar)+	{+		var s = str.replace(/\\/g, '\\\\')+				  .replace(/\n/g, '\\n')+				  .replace(/\t/g, '\\t')+				  .replace(/\r/g, '\\r')+				  .replace(/\v/g, '\\v')+				  .replace(/\0/g, '\\0');+		if (isChar)+		{+			return s.replace(/\'/g, "\\'")+		}+		else+		{+			return s.replace(/\"/g, '\\"');+		}+	}++	function probablyPublic(v)+	{+		var keys = Object.keys(v);+		var len = keys.length;+		if (len === 3+			&& 'props' in v+			&& 'element' in v)+		{+			return false;+		}+		else if (len === 5+			&& 'horizontal' in v+			&& 'vertical' in v+			&& 'x' in v+			&& 'y' in v)+		{+			return false;+		}+		else if (len === 7+			&& 'theta' in v+			&& 'scale' in v+			&& 'x' in v+			&& 'y' in v+			&& 'alpha' in v+			&& 'form' in v)+		{+			return false;+		}+		return true;+	}++	return localRuntime.Native.Show.values = {+		toString: toString+	};+};++Elm.Native.Signal = {};+Elm.Native.Signal.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Signal = localRuntime.Native.Signal || {};+	if (localRuntime.Native.Signal.values)+	{+		return localRuntime.Native.Signal.values;+	}+++	var Task = Elm.Native.Task.make(localRuntime);+	var Utils = Elm.Native.Utils.make(localRuntime);+++	function broadcastToKids(node, timestamp, update)+	{+		var kids = node.kids;+		for (var i = kids.length; i--; )+		{+			kids[i].notify(timestamp, update, node.id);+		}+	}+++	// INPUT++	function input(name, base)+	{+		var node = {+			id: Utils.guid(),+			name: 'input-' + name,+			value: base,+			parents: [],+			kids: []+		};++		node.notify = function(timestamp, targetId, value) {+			var update = targetId === node.id;+			if (update)+			{+				node.value = value;+			}+			broadcastToKids(node, timestamp, update);+			return update;+		};++		localRuntime.inputs.push(node);++		return node;+	}++	function constant(value)+	{+		return input('constant', value);+	}+++	// MAILBOX++	function mailbox(base)+	{+		var signal = input('mailbox', base);++		function send(value) {+			return Task.asyncFunction(function(callback) {+				localRuntime.setTimeout(function() {+					localRuntime.notify(signal.id, value);+				}, 0);+				callback(Task.succeed(Utils.Tuple0));+			});+		}++		return {+			_: {},+			signal: signal,+			address: {+				ctor: 'Address',+				_0: send+			}+		};+	}++	function sendMessage(message)+	{+		Task.perform(message._0);+	}+++	// OUTPUT++	function output(name, handler, parent)+	{+		var node = {+			id: Utils.guid(),+			name: 'output-' + name,+			parents: [parent],+			isOutput: true+		};++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			if (parentUpdate)+			{+				handler(parent.value);+			}+		};++		parent.kids.push(node);++		return node;+	}+++	// MAP++	function mapMany(refreshValue, args)+	{+		var node = {+			id: Utils.guid(),+			name: 'map' + args.length,+			value: refreshValue(),+			parents: args,+			kids: []+		};++		var numberOfParents = args.length;+		var count = 0;+		var update = false;++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			++count;++			update = update || parentUpdate;++			if (count === numberOfParents)+			{+				if (update)+				{+					node.value = refreshValue();+				}+				broadcastToKids(node, timestamp, update);+				update = false;+				count = 0;+			}+		};++		for (var i = numberOfParents; i--; )+		{+			args[i].kids.push(node);+		}++		return node;+	}+++	function map(func, a)+	{+		function refreshValue()+		{+			return func(a.value);+		}+		return mapMany(refreshValue, [a]);+	}+++	function map2(func, a, b)+	{+		function refreshValue()+		{+			return A2( func, a.value, b.value );+		}+		return mapMany(refreshValue, [a,b]);+	}+++	function map3(func, a, b, c)+	{+		function refreshValue()+		{+			return A3( func, a.value, b.value, c.value );+		}+		return mapMany(refreshValue, [a,b,c]);+	}+++	function map4(func, a, b, c, d)+	{+		function refreshValue()+		{+			return A4( func, a.value, b.value, c.value, d.value );+		}+		return mapMany(refreshValue, [a,b,c,d]);+	}+++	function map5(func, a, b, c, d, e)+	{+		function refreshValue()+		{+			return A5( func, a.value, b.value, c.value, d.value, e.value );+		}+		return mapMany(refreshValue, [a,b,c,d,e]);+	}++++	// FOLD++	function foldp(update, state, signal)+	{+		var node = {+			id: Utils.guid(),+			name: 'foldp',+			parents: [signal],+			kids: [],+			value: state+		};++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			if (parentUpdate)+			{+				node.value = A2( update, signal.value, node.value );+			}+			broadcastToKids(node, timestamp, parentUpdate);+		};++		signal.kids.push(node);++		return node;+	}+++	// TIME++	function timestamp(signal)+	{+		var node = {+			id: Utils.guid(),+			name: 'timestamp',+			value: Utils.Tuple2(localRuntime.timer.programStart, signal.value),+			parents: [signal],+			kids: []+		};++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			if (parentUpdate)+			{+				node.value = Utils.Tuple2(timestamp, signal.value);+			}+			broadcastToKids(node, timestamp, parentUpdate);+		};++		signal.kids.push(node);++		return node;+	}+++	function delay(time, signal)+	{+		var delayed = input('delay-input-' + time, signal.value);++		function handler(value)+		{+			setTimeout(function() {+				localRuntime.notify(delayed.id, value);+			}, time);+		}++		output('delay-output-' + time, handler, signal);++		return delayed;+	}+++	// MERGING++	function genericMerge(tieBreaker, leftStream, rightStream)+	{+		var node = {+			id: Utils.guid(),+			name: 'merge',+			parents: [leftStream, rightStream],+			kids: []+		};++		var left = { touched: false, update: false, value: null };+		var right = { touched: false, update: false, value: null };++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			if (parentID === leftStream.id)+			{+				left.touched = true;+				left.update = parentUpdate;+				left.value = leftStream.value;+			}+			if (parentID === rightStream.id)+			{+				right.touched = true;+				right.update = parentUpdate;+				right.value = rightStream.value;+			}++			if (left.touched && right.touched)+			{+				var update = false;+				if (left.update && right.update)+				{+					node.value = A2(tieBreaker, left.value, right.value);+					update = true;+				}+				else if (left.update)+				{+					node.value = left.value;+					update = true;+				}+				else if (right.update)+				{+					node.value = right.value;+					update = true;+				}+				left.touched = false;+				right.touched = false;++				broadcastToKids(node, timestamp, update);+			}+		};++		leftStream.kids.push(node);+		rightStream.kids.push(node);++		return node;+	}+++	// FILTERING++	function filterMap(toMaybe, base, signal)+	{+		var maybe = toMaybe(signal.value);+		var node = {+			id: Utils.guid(),+			name: 'filterMap',+			value: maybe.ctor === 'Nothing' ? base : maybe._0,+			parents: [signal],+			kids: []+		};++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			var update = false;+			if (parentUpdate)+			{+				var maybe = toMaybe(signal.value);+				if (maybe.ctor === 'Just')+				{+					update = true;+					node.value = maybe._0;+				}+			}+			broadcastToKids(node, timestamp, update);+		};++		signal.kids.push(node);++		return node;+	}+++	// SAMPLING++	function sampleOn(ticker, signal)+	{+		var node = {+			id: Utils.guid(),+			name: 'sampleOn',+			value: signal.value,+			parents: [ticker, signal],+			kids: []+		};++		var signalTouch = false;+		var tickerTouch = false;+		var tickerUpdate = false;++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			if (parentID === ticker.id)+			{+				tickerTouch = true;+				tickerUpdate = parentUpdate;+			}+			if (parentID === signal.id)+			{+				signalTouch = true;+			}++			if (tickerTouch && signalTouch)+			{+				if (tickerUpdate)+				{+					node.value = signal.value;+				}+				tickerTouch = false;+				signalTouch = false;++				broadcastToKids(node, timestamp, tickerUpdate);+			}+		};++		ticker.kids.push(node);+		signal.kids.push(node);++		return node;+	}+++	// DROP REPEATS++	function dropRepeats(signal)+	{+		var node = {+			id: Utils.guid(),+			name: 'dropRepeats',+			value: signal.value,+			parents: [signal],+			kids: []+		};++		node.notify = function(timestamp, parentUpdate, parentID)+		{+			var update = false;+			if (parentUpdate && !Utils.eq(node.value, signal.value))+			{+				node.value = signal.value;+				update = true;+			}+			broadcastToKids(node, timestamp, update);+		};++		signal.kids.push(node);++		return node;+	}+++	return localRuntime.Native.Signal.values = {+		input: input,+		constant: constant,+		mailbox: mailbox,+		sendMessage: sendMessage,+		output: output,+		map: F2(map),+		map2: F3(map2),+		map3: F4(map3),+		map4: F5(map4),+		map5: F6(map5),+		foldp: F3(foldp),+		genericMerge: F3(genericMerge),+		filterMap: F3(filterMap),+		sampleOn: F2(sampleOn),+		dropRepeats: dropRepeats,+		timestamp: timestamp,+		delay: delay+	};+};++Elm.Native.Slider = {};+Elm.Native.Slider.make = function(localRuntime) {++    localRuntime.Native = localRuntime.Native || {};+    localRuntime.Native.Slider = localRuntime.Native.Slider || {};+    if (localRuntime.Native.Slider.values) {+        return localRuntime.Native.Slider.values;+    }++    var Element = Elm.Graphics.Element.make(localRuntime);+    var NativeElement = Elm.Native.Graphics.Element.make(localRuntime);+    var Signal = Elm.Native.Signal.make(localRuntime);++    function renderSlider(model) {+        var node = NativeElement.createNode('input');+        node.type = 'range';++        node.min = model.styling.min;+        node.max = model.styling.max;+        node.step = model.styling.step;+        node.value = model.styling.value;++        if (!model.styling.horizontal) {+            node.orient = "vertical"; // FF+            node.style.webkitAppearance = "slider-vertical"; // webkit+            node.style.writingMode = "bt-lr"; // ie+        }++        if (model.styling.disabled) {+            node.disabled = true;+        }++        node.style.display = 'block';+        node.style.pointerEvents = 'auto';+        node.elm_handler = model.handler;+        node.addEventListener('input', notifySlider);+        node.addEventListener('change', notifySlider);+        function notifySlider() {+            Signal.sendMessage(node.elm_handler(node.value));+        }+        return node;+    }++    function updateSlider(node, oldModel, newModel) {+        if (newModel.styling.disabled) {+            node.disabled = true;+        } else {+            node.disabled = false;+        }+        node.elm_handler = newModel.handler;+        node.min = newModel.styling.min;+        node.max = newModel.styling.max;+        node.step = newModel.styling.step;+        node.value = newModel.styling.value;++        return node;+    }++    function slider(handler, styling) {+        var width = styling.length;+        var height = 24;+        if (!styling.horizontal) {+            var temp = width;+            width = height;+            height = temp;+        }+        return A3(NativeElement.newElement, width, height, {+            ctor: 'Custom',+            type: 'Slider',+            render: renderSlider,+            update: updateSlider,+            model: { handler:handler, styling:styling }+        });+    }++    return localRuntime.Native.Slider.values = {+        slider: F2(slider)+    };+}++Elm.Native.String = {};+Elm.Native.String.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.String = localRuntime.Native.String || {};+	if (localRuntime.Native.String.values)+	{+		return localRuntime.Native.String.values;+	}+	if ('values' in Elm.Native.String)+	{+		return localRuntime.Native.String.values = Elm.Native.String.values;+	}+++	var Char = Elm.Char.make(localRuntime);+	var List = Elm.Native.List.make(localRuntime);+	var Maybe = Elm.Maybe.make(localRuntime);+	var Result = Elm.Result.make(localRuntime);+	var Utils = Elm.Native.Utils.make(localRuntime);++	function isEmpty(str)+	{+		return str.length === 0;+	}+	function cons(chr,str)+	{+		return chr + str;+	}+	function uncons(str)+	{+		var hd;+		return (hd = str[0])+			? Maybe.Just(Utils.Tuple2(Utils.chr(hd), str.slice(1)))+			: Maybe.Nothing;+	}+	function append(a,b)+	{+		return a + b;+	}+	function concat(strs)+	{+		return List.toArray(strs).join('');+	}+	function length(str)+	{+		return str.length;+	}+	function map(f,str)+	{+		var out = str.split('');+		for (var i = out.length; i--; )+		{+			out[i] = f(Utils.chr(out[i]));+		}+		return out.join('');+	}+	function filter(pred,str)+	{+		return str.split('').map(Utils.chr).filter(pred).join('');+	}+	function reverse(str)+	{+		return str.split('').reverse().join('');+	}+	function foldl(f,b,str)+	{+		var len = str.length;+		for (var i = 0; i < len; ++i)+		{+			b = A2(f, Utils.chr(str[i]), b);+		}+		return b;+	}+	function foldr(f,b,str)+	{+		for (var i = str.length; i--; )+		{+			b = A2(f, Utils.chr(str[i]), b);+		}+		return b;+	}++	function split(sep, str)+	{+		return List.fromArray(str.split(sep));+	}+	function join(sep, strs)+	{+		return List.toArray(strs).join(sep);+	}+	function repeat(n, str)+	{+		var result = '';+		while (n > 0)+		{+			if (n & 1)+			{+				result += str;+			}+			n >>= 1, str += str;+		}+		return result;+	}++	function slice(start, end, str)+	{+		return str.slice(start,end);+	}+	function left(n, str)+	{+		return n < 1 ? "" : str.slice(0,n);+	}+	function right(n, str)+	{+		return n < 1 ? "" : str.slice(-n);+	}+	function dropLeft(n, str)+	{+		return n < 1 ? str : str.slice(n);+	}+	function dropRight(n, str)+	{+		return n < 1 ? str : str.slice(0,-n);+	}++	function pad(n,chr,str)+	{+		var half = (n - str.length) / 2;+		return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);+	}+	function padRight(n,chr,str)+	{+		return str + repeat(n - str.length, chr);+	}+	function padLeft(n,chr,str)+	{+		return repeat(n - str.length, chr) + str;+	}++	function trim(str)+	{+		return str.trim();+	}+	function trimLeft(str)+	{+		return str.trimLeft();+	}+	function trimRight(str)+	{+		return str.trimRight();+	}++	function words(str)+	{+		return List.fromArray(str.trim().split(/\s+/g));+	}+	function lines(str)+	{+		return List.fromArray(str.split(/\r\n|\r|\n/g));+	}++	function toUpper(str)+	{+		return str.toUpperCase();+	}+	function toLower(str)+	{+		return str.toLowerCase();+	}++	function any(pred, str)+	{+		for (var i = str.length; i--; )+		{+			if (pred(Utils.chr(str[i])))+			{+				return true;+			}+		}+		return false;+	}+	function all(pred, str)+	{+		for (var i = str.length; i--; )+		{+			if (!pred(Utils.chr(str[i])))+			{+				return false;+			}+		}+		return true;+	}++	function contains(sub, str)+	{+		return str.indexOf(sub) > -1;+	}+	function startsWith(sub, str)+	{+		return str.indexOf(sub) === 0;+	}+	function endsWith(sub, str)+	{+		return str.length >= sub.length &&+			str.lastIndexOf(sub) === str.length - sub.length;+	}+	function indexes(sub, str)+	{+		var subLen = sub.length;+		var i = 0;+		var is = [];+		while ((i = str.indexOf(sub, i)) > -1)+		{+			is.push(i);+			i = i + subLen;+		}+		return List.fromArray(is);+	}++	function toInt(s)+	{+		var len = s.length;+		if (len === 0)+		{+			return Result.Err("could not convert string '" + s + "' to an Int" );+		}+		var start = 0;+		if (s[0] == '-')+		{+			if (len === 1)+			{+				return Result.Err("could not convert string '" + s + "' to an Int" );+			}+			start = 1;+		}+		for (var i = start; i < len; ++i)+		{+			if (!Char.isDigit(s[i]))+			{+				return Result.Err("could not convert string '" + s + "' to an Int" );+			}+		}+		return Result.Ok(parseInt(s, 10));+	}++	function toFloat(s)+	{+		var len = s.length;+		if (len === 0)+		{+			return Result.Err("could not convert string '" + s + "' to a Float" );+		}+		var start = 0;+		if (s[0] == '-')+		{+			if (len === 1)+			{+				return Result.Err("could not convert string '" + s + "' to a Float" );+			}+			start = 1;+		}+		var dotCount = 0;+		for (var i = start; i < len; ++i)+		{+			if (Char.isDigit(s[i]))+			{+				continue;+			}+			if (s[i] === '.')+			{+				dotCount += 1;+				if (dotCount <= 1)+				{+					continue;+				}+			}+			return Result.Err("could not convert string '" + s + "' to a Float" );+		}+		return Result.Ok(parseFloat(s));+	}++	function toList(str)+	{+		return List.fromArray(str.split('').map(Utils.chr));+	}+	function fromList(chars)+	{+		return List.toArray(chars).join('');+	}++	return Elm.Native.String.values = {+		isEmpty: isEmpty,+		cons: F2(cons),+		uncons: uncons,+		append: F2(append),+		concat: concat,+		length: length,+		map: F2(map),+		filter: F2(filter),+		reverse: reverse,+		foldl: F3(foldl),+		foldr: F3(foldr),++		split: F2(split),+		join: F2(join),+		repeat: F2(repeat),++		slice: F3(slice),+		left: F2(left),+		right: F2(right),+		dropLeft: F2(dropLeft),+		dropRight: F2(dropRight),++		pad: F3(pad),+		padLeft: F3(padLeft),+		padRight: F3(padRight),++		trim: trim,+		trimLeft: trimLeft,+		trimRight: trimRight,++		words: words,+		lines: lines,++		toUpper: toUpper,+		toLower: toLower,++		any: F2(any),+		all: F2(all),++		contains: F2(contains),+		startsWith: F2(startsWith),+		endsWith: F2(endsWith),+		indexes: F2(indexes),++		toInt: toInt,+		toFloat: toFloat,+		toList: toList,+		fromList: fromList+	};+};++Elm.Native.Task = {};+Elm.Native.Task.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Task = localRuntime.Native.Task || {};+	if (localRuntime.Native.Task.values)+	{+		return localRuntime.Native.Task.values;+	}++	var Result = Elm.Result.make(localRuntime);+	var Signal;+	var Utils = Elm.Native.Utils.make(localRuntime);+++	// CONSTRUCTORS++	function succeed(value)+	{+		return {+			tag: 'Succeed',+			value: value+		};+	}++	function fail(error)+	{+		return {+			tag: 'Fail',+			value: error+		};+	}++	function asyncFunction(func)+	{+		return {+			tag: 'Async',+			asyncFunction: func+		};+	}++	function andThen(task, callback)+	{+		return {+			tag: 'AndThen',+			task: task,+			callback: callback+		};+	}++	function catch_(task, callback)+	{+		return {+			tag: 'Catch',+			task: task,+			callback: callback+		};+	}+++	// RUNNER++	function perform(task) {+		runTask({ task: task }, function() {});+	}++	function performSignal(name, signal)+	{+		var workQueue = [];++		function onComplete()+		{+			workQueue.shift();++			setTimeout(function() {+				if (workQueue.length > 0)+				{+					runTask(workQueue[0], onComplete);+				}+			}, 0);+		}++		function register(task)+		{+			var root = { task: task };+			workQueue.push(root);+			if (workQueue.length === 1)+			{+				runTask(root, onComplete);+			}+		}++		if (!Signal)+		{+			Signal = Elm.Native.Signal.make(localRuntime);+		}+		Signal.output('perform-tasks-' + name, register, signal);++		register(signal.value);++		return signal;+	}++	function mark(status, task)+	{+		return { status: status, task: task };+	}++	function runTask(root, onComplete)+	{+		var result = mark('runnable', root.task);+		while (result.status === 'runnable')+		{+			result = stepTask(onComplete, root, result.task);+		}++		if (result.status === 'done')+		{+			root.task = result.task;+			onComplete();+		}++		if (result.status === 'blocked')+		{+			root.task = result.task;+		}+	}++	function stepTask(onComplete, root, task)+	{+		var tag = task.tag;++		if (tag === 'Succeed' || tag === 'Fail')+		{+			return mark('done', task);+		}++		if (tag === 'Async')+		{+			var placeHolder = {};+			var couldBeSync = true;+			var wasSync = false;++			task.asyncFunction(function(result) {+				placeHolder.tag = result.tag;+				placeHolder.value = result.value;+				if (couldBeSync)+				{+					wasSync = true;+				}+				else+				{+					runTask(root, onComplete);+				}+			});+			couldBeSync = false;+			return mark(wasSync ? 'done' : 'blocked', placeHolder);+		}++		if (tag === 'AndThen' || tag === 'Catch')+		{+			var result = mark('runnable', task.task);+			while (result.status === 'runnable')+			{+				result = stepTask(onComplete, root, result.task);+			}++			if (result.status === 'done')+			{+				var activeTask = result.task;+				var activeTag = activeTask.tag;++				var succeedChain = activeTag === 'Succeed' && tag === 'AndThen';+				var failChain = activeTag === 'Fail' && tag === 'Catch';++				return (succeedChain || failChain)+					? mark('runnable', task.callback(activeTask.value))+					: mark('runnable', activeTask);+			}+			if (result.status === 'blocked')+			{+				return mark('blocked', {+					tag: tag,+					task: result.task,+					callback: task.callback+				});+			}+		}+	}+++	// THREADS++	function sleep(time) {+		return asyncFunction(function(callback) {+			setTimeout(function() {+				callback(succeed(Utils.Tuple0));+			}, time);+		});+	}++	function spawn(task) {+		return asyncFunction(function(callback) {+			var id = setTimeout(function() {+				perform(task);+			}, 0);+			callback(succeed(id));+		});+	}+++	return localRuntime.Native.Task.values = {+		succeed: succeed,+		fail: fail,+		asyncFunction: asyncFunction,+		andThen: F2(andThen),+		catch_: F2(catch_),+		perform: perform,+		performSignal: performSignal,+		spawn: spawn,+		sleep: sleep+	};+};++Elm.Native.Text = {};+Elm.Native.Text.make = function(localRuntime) {+	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Text = localRuntime.Native.Text || {};+	if (localRuntime.Native.Text.values)+	{+		return localRuntime.Native.Text.values;+	}++	var toCss = Elm.Native.Color.make(localRuntime).toCss;+	var List = Elm.Native.List.make(localRuntime);+++	// CONSTRUCTORS++	function fromString(str)+	{+		return {+			ctor: 'Text:Text',+			_0: str+		};+	}++	function append(a, b)+	{+		return {+			ctor: 'Text:Append',+			_0: a,+			_1: b+		};+	}++	function addMeta(field, value, text)+	{+		var newProps = {};+		var newText = {+			ctor: 'Text:Meta',+			_0: newProps,+			_1: text+		};++		if (text.ctor === 'Text:Meta')+		{+			newText._1 = text._1;+			var props = text._0;+			for (var i = metaKeys.length; i--; )+			{+				var key = metaKeys[i];+				var val = props[key];+				if (val)+				{+					newProps[key] = val;+				}+			}+		}+		newProps[field] = value;+		return newText;+	}++	var metaKeys = [+		'font-size',+		'font-family',+		'font-style',+		'font-weight',+		'href',+		'text-decoration',+		'color'+	];+++	// conversions from Elm values to CSS++	function toTypefaces(list)+	{+		var typefaces = List.toArray(list);+		for (var i = typefaces.length; i--; )+		{+			var typeface = typefaces[i];+			if (typeface.indexOf(' ') > -1)+			{+				typefaces[i] = "'" + typeface + "'";+			}+		}+		return typefaces.join(',');+	}++	function toLine(line)+	{+		var ctor = line.ctor;+		return ctor === 'Under'+			? 'underline'+			: ctor === 'Over'+				? 'overline'+				: 'line-through';+	}++	// setting styles of Text++	function style(style, text)+	{+		var newText = addMeta('color', toCss(style.color), text);+		var props = newText._0;++		if (style.typeface.ctor !== '[]')+		{+			props['font-family'] = toTypefaces(style.typeface);+		}+		if (style.height.ctor !== "Nothing")+		{+			props['font-size'] = style.height._0 + 'px';+		}+		if (style.bold)+		{+			props['font-weight'] = 'bold';+		}+		if (style.italic)+		{+			props['font-style'] = 'italic';+		}+		if (style.line.ctor !== 'Nothing')+		{+			props['text-decoration'] = toLine(style.line._0);+		}+		return newText;+	}++	function height(px, text)+	{+		return addMeta('font-size', px + 'px', text);+	}++	function typeface(names, text)+	{+		return addMeta('font-family', toTypefaces(names), text);+	}++	function monospace(text)+	{+		return addMeta('font-family', 'monospace', text);+	}++	function italic(text)+	{+		return addMeta('font-style', 'italic', text);+	}++	function bold(text)+	{+		return addMeta('font-weight', 'bold', text);+	}++	function link(href, text)+	{+		return addMeta('href', href, text);+	}++	function line(line, text)+	{+		return addMeta('text-decoration', toLine(line), text);+	}++	function color(color, text)+	{+		return addMeta('color', toCss(color), text);;+	}+++	// RENDER++	function renderHtml(text)+	{+		var tag = text.ctor;+		if (tag === 'Text:Append')+		{+			return renderHtml(text._0) + renderHtml(text._1);+		}+		if (tag === 'Text:Text')+		{+			return properEscape(text._0);+		}+		if (tag === 'Text:Meta')+		{+			return renderMeta(text._0, renderHtml(text._1));+		}+	}++	function renderMeta(metas, string)+	{+		var href = metas['href'];+		if (href)+		{+			string = '<a href="' + href + '">' + string + '</a>';+		}+		var styles = '';+		for (var key in metas)+		{+			if (key === 'href')+			{+				continue;+			}+			styles += key + ':' + metas[key] + ';';+		}+		if (styles)+		{+			string = '<span style="' + styles + '">' + string + '</span>';+		}+		return string;+	}++	function properEscape(str)+	{+		if (str.length == 0)+		{+			return str;+		}+		str = str //.replace(/&/g,  "&#38;")+			.replace(/"/g,  '&#34;')+			.replace(/'/g,  "&#39;")+			.replace(/</g,  "&#60;")+			.replace(/>/g,  "&#62;");+		var arr = str.split('\n');+		for (var i = arr.length; i--; )+		{+			arr[i] = makeSpaces(arr[i]);+		}+		return arr.join('<br/>');+	}++	function makeSpaces(s)+	{+		if (s.length == 0)+		{+			return s;+		}+		var arr = s.split('');+		if (arr[0] == ' ')+		{+			arr[0] = "&nbsp;"+		}+		for (var i = arr.length; --i; )+		{+			if (arr[i][0] == ' ' && arr[i-1] == ' ')+			{+				arr[i-1] = arr[i-1] + arr[i];+				arr[i] = '';+			}+		}+		for (var i = arr.length; i--; )+		{+			if (arr[i].length > 1 && arr[i][0] == ' ')+			{+				var spaces = arr[i].split('');+				for (var j = spaces.length - 2; j >= 0; j -= 2)+				{+					spaces[j] = '&nbsp;';+				}+				arr[i] = spaces.join('');+			}+		}+		arr = arr.join('');+		if (arr[arr.length-1] === " ")+		{+			return arr.slice(0,-1) + '&nbsp;';+		}+		return arr;+	}+++	return localRuntime.Native.Text.values = {+		fromString: fromString,+		append: F2(append),++		height: F2(height),+		italic: italic,+		bold: bold,+		line: F2(line),+		monospace: monospace,+		typeface: F2(typeface),+		color: F2(color),+		link: F2(link),+		style: F2(style),++		toTypefaces: toTypefaces,+		toLine: toLine,+		renderHtml: renderHtml+	};+};++Elm.Native.Transform2D = {};+Elm.Native.Transform2D.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Transform2D = localRuntime.Native.Transform2D || {};+	if (localRuntime.Native.Transform2D.values)+	{+		return localRuntime.Native.Transform2D.values;+	}++	var A;+	if (typeof Float32Array === 'undefined')+	{+		A = function(arr)+		{+			this.length = arr.length;+			this[0] = arr[0];+			this[1] = arr[1];+			this[2] = arr[2];+			this[3] = arr[3];+			this[4] = arr[4];+			this[5] = arr[5];+		};+	}+	else+	{+		A = Float32Array;+	}++	// layout of matrix in an array is+	//+	//   | m11 m12 dx |+	//   | m21 m22 dy |+	//   |  0   0   1 |+	//+	//  new A([ m11, m12, dx, m21, m22, dy ])++	var identity = new A([1,0,0,0,1,0]);+	function matrix(m11, m12, m21, m22, dx, dy)+	{+		return new A([m11, m12, dx, m21, m22, dy]);+	}++	function rotation(t)+	{+		var c = Math.cos(t);+		var s = Math.sin(t);+		return new A([c, -s, 0, s, c, 0]);+	}++	function rotate(t,m)+	{+		var c = Math.cos(t);+		var s = Math.sin(t);+		var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];+		return new A([m11*c + m12*s, -m11*s + m12*c, m[2],+					  m21*c + m22*s, -m21*s + m22*c, m[5]]);+	}+	/*+	function move(xy,m) {+		var x = xy._0;+		var y = xy._1;+		var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];+		return new A([m11, m12, m11*x + m12*y + m[2],+					  m21, m22, m21*x + m22*y + m[5]]);+	}+	function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }+	function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }+	function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }+	function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }+	function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }++	function transform(m11, m21, m12, m22, mdx, mdy, n) {+		var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];+		return new A([m11*n11 + m12*n21,+					  m11*n12 + m12*n22,+					  m11*ndx + m12*ndy + mdx,+					  m21*n11 + m22*n21,+					  m21*n12 + m22*n22,+					  m21*ndx + m22*ndy + mdy]);+	}+	*/+	function multiply(m, n)+	{+		var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];+		var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];+		return new A([m11*n11 + m12*n21,+					  m11*n12 + m12*n22,+					  m11*ndx + m12*ndy + mdx,+					  m21*n11 + m22*n21,+					  m21*n12 + m22*n22,+					  m21*ndx + m22*ndy + mdy]);+	}++	return localRuntime.Native.Transform2D.values = {+		identity:identity,+		matrix:F6(matrix),+		rotation:rotation,+		multiply:F2(multiply)+		/*+		transform:F7(transform),+		rotate:F2(rotate),+		move:F2(move),+		scale:F2(scale),+		scaleX:F2(scaleX),+		scaleY:F2(scaleY),+		reflectX:reflectX,+		reflectY:reflectY+		*/+	};++};++Elm.Native = Elm.Native || {};+Elm.Native.Utils = {};+Elm.Native.Utils.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Utils = localRuntime.Native.Utils || {};+	if (localRuntime.Native.Utils.values)+	{+		return localRuntime.Native.Utils.values;+	}++	function eq(l,r)+	{+		var stack = [{'x': l, 'y': r}]+		while (stack.length > 0)+		{+			var front = stack.pop();+			var x = front.x;+			var y = front.y;+			if (x === y)+			{+				continue;+			}+			if (typeof x === "object")+			{+				var c = 0;+				for (var i in x)+				{+					++c;+					if (i in y)+					{+						if (i !== 'ctor')+						{+							stack.push({ 'x': x[i], 'y': y[i] });+						}+					}+					else+					{+						return false;+					}+				}+				if ('ctor' in x)+				{+					stack.push({'x': x.ctor, 'y': y.ctor});+				}+				if (c !== Object.keys(y).length)+				{+					return false;+				}+			}+			else if (typeof x === 'function')+			{+				throw new Error('Equality error: general function equality is ' ++								'undecidable, and therefore, unsupported');+			}+			else+			{+				return false;+			}+		}+		return true;+	}++	// code in Generate/JavaScript.hs depends on the particular+	// integer values assigned to LT, EQ, and GT+	var LT = -1, EQ = 0, GT = 1, ord = ['LT','EQ','GT'];++	function compare(x,y)+	{+		return {+			ctor: ord[cmp(x,y)+1]+		};+	}++	function cmp(x,y) {+		var ord;+		if (typeof x !== 'object')+		{+			return x === y ? EQ : x < y ? LT : GT;+		}+		else if (x.isChar)+		{+			var a = x.toString();+			var b = y.toString();+			return a === b+				? EQ+				: a < b+					? LT+					: GT;+		}+		else if (x.ctor === "::" || x.ctor === "[]")+		{+			while (true)+			{+				if (x.ctor === "[]" && y.ctor === "[]")+				{+					return EQ;+				}+				if (x.ctor !== y.ctor)+				{+					return x.ctor === '[]' ? LT : GT;+				}+				ord = cmp(x._0, y._0);+				if (ord !== EQ)+				{+					return ord;+				}+				x = x._1;+				y = y._1;+			}+		}+		else if (x.ctor.slice(0,6) === '_Tuple')+		{+			var n = x.ctor.slice(6) - 0;+			var err = 'cannot compare tuples with more than 6 elements.';+			if (n === 0) return EQ;+			if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;+			if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;+			if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;+			if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;+			if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;+			if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;+			if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }+			return EQ;+		}+		else+		{+			throw new Error('Comparison error: comparison is only defined on ints, ' ++							'floats, times, chars, strings, lists of comparable values, ' ++							'and tuples of comparable values.');+		}+	}+++	var Tuple0 = {+		ctor: "_Tuple0"+	};++	function Tuple2(x,y)+	{+		return {+			ctor: "_Tuple2",+			_0: x,+			_1: y+		};+	}++	function chr(c)+	{+		var x = new String(c);+		x.isChar = true;+		return x;+	}++	function txt(str)+	{+		var t = new String(str);+		t.text = true;+		return t;+	}++	var count = 0;+	function guid(_)+	{+		return count+++	}++	function copy(oldRecord)+	{+		var newRecord = {};+		for (var key in oldRecord)+		{+			var value = key === '_'+				? copy(oldRecord._)+				: oldRecord[key];+			newRecord[key] = value;+		}+		return newRecord;+	}++	function remove(key, oldRecord)+	{+		var record = copy(oldRecord);+		if (key in record._)+		{+			record[key] = record._[key][0];+			record._[key] = record._[key].slice(1);+			if (record._[key].length === 0)+			{+				delete record._[key];+			}+		}+		else+		{+			delete record[key];+		}+		return record;+	}++	function replace(keyValuePairs, oldRecord)+	{+		var record = copy(oldRecord);+		for (var i = keyValuePairs.length; i--; )+		{+			var pair = keyValuePairs[i];+			record[pair[0]] = pair[1];+		}+		return record;+	}++	function insert(key, value, oldRecord)+	{+		var newRecord = copy(oldRecord);+		if (key in newRecord)+		{+			var values = newRecord._[key];+			var copiedValues = values ? values.slice(0) : [];+			newRecord._[key] = [newRecord[key]].concat(copiedValues);+		}+		newRecord[key] = value;+		return newRecord;+	}++	function getXY(e)+	{+		var posx = 0;+		var posy = 0;+		if (e.pageX || e.pageY)+		{+			posx = e.pageX;+			posy = e.pageY;+		}+		else if (e.clientX || e.clientY)+		{+			posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;+			posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;+		}++		if (localRuntime.isEmbed())+		{+			var rect = localRuntime.node.getBoundingClientRect();+			var relx = rect.left + document.body.scrollLeft + document.documentElement.scrollLeft;+			var rely = rect.top + document.body.scrollTop + document.documentElement.scrollTop;+			// TODO: figure out if there is a way to avoid rounding here+			posx = posx - Math.round(relx) - localRuntime.node.clientLeft;+			posy = posy - Math.round(rely) - localRuntime.node.clientTop;+		}+		return Tuple2(posx, posy);+	}+++	//// LIST STUFF ////++	var Nil = { ctor:'[]' };++	function Cons(hd,tl)+	{+		return {+			ctor: "::",+			_0: hd,+			_1: tl+		};+	}++	function append(xs,ys)+	{+		// append Strings+		if (typeof xs === "string")+		{+			return xs + ys;+		}++		// append Text+		if (xs.ctor.slice(0,5) === 'Text:')+		{+			return {+				ctor: 'Text:Append',+				_0: xs,+				_1: ys+			};+		}++++		// append Lists+		if (xs.ctor === '[]')+		{+			return ys;+		}+		var root = Cons(xs._0, Nil);+		var curr = root;+		xs = xs._1;+		while (xs.ctor !== '[]')+		{+			curr._1 = Cons(xs._0, Nil);+			xs = xs._1;+			curr = curr._1;+		}+		curr._1 = ys;+		return root;+	}++	//// RUNTIME ERRORS ////++	function indent(lines)+	{+		return '\n' + lines.join('\n');+	}++	function badCase(moduleName, span)+	{+		var msg = indent([+			'Non-exhaustive pattern match in case-expression.',+			'Make sure your patterns cover every case!'+		]);+		throw new Error('Runtime error in module ' + moduleName + ' (' + span + ')' + msg);+	}++	function badIf(moduleName, span)+	{+		var msg = indent([+			'Non-exhaustive pattern match in multi-way-if expression.',+			'It is best to use \'otherwise\' as the last branch of multi-way-if.'+		]);+		throw new Error('Runtime error in module ' + moduleName + ' (' + span + ')' + msg);+	}+++	function badPort(expected, received)+	{+		var msg = indent([+			'Expecting ' + expected + ' but was given ',+			JSON.stringify(received)+		]);+		throw new Error('Runtime error when sending values through a port.' + msg);+	}+++	return localRuntime.Native.Utils.values = {+		eq: eq,+		cmp: cmp,+		compare: F2(compare),+		Tuple0: Tuple0,+		Tuple2: Tuple2,+		chr: chr,+		txt: txt,+		copy: copy,+		remove: remove,+		replace: replace,+		insert: insert,+		guid: guid,+		getXY: getXY,++		Nil: Nil,+		Cons: Cons,+		append: F2(append),++		badCase: badCase,+		badIf: badIf,+		badPort: badPort+	};+};++(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){+module.exports = createHash++function createHash(elem) {+    var attributes = elem.attributes+    var hash = {}++    if (attributes === null || attributes === undefined) {+        return hash+    }++    for (var i = 0; i < attributes.length; i++) {+        var attr = attributes[i]++        if (attr.name.substr(0,5) !== "data-") {+            continue+        }++        hash[attr.name.substr(5)] = attr.value+    }++    return hash+}++},{}],2:[function(require,module,exports){+var createStore = require("weakmap-shim/create-store")+var Individual = require("individual")++var createHash = require("./create-hash.js")++var hashStore = Individual("__DATA_SET_WEAKMAP@3", createStore())++module.exports = DataSet++function DataSet(elem) {+    var store = hashStore(elem)++    if (!store.hash) {+        store.hash = createHash(elem)+    }++    return store.hash+}++},{"./create-hash.js":1,"individual":3,"weakmap-shim/create-store":4}],3:[function(require,module,exports){+(function (global){+var root = typeof window !== 'undefined' ?+    window : typeof global !== 'undefined' ?+    global : {};++module.exports = Individual++function Individual(key, value) {+    if (root[key]) {+        return root[key]+    }++    Object.defineProperty(root, key, {+        value: value+        , configurable: true+    })++    return value+}++}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})+},{}],4:[function(require,module,exports){+var hiddenStore = require('./hidden-store.js');++module.exports = createStore;++function createStore() {+    var key = {};++    return function (obj) {+        if (typeof obj !== 'object' || obj === null) {+            throw new Error('Weakmap-shim: Key must be object')+        }++        var store = obj.valueOf(key);+        return store && store.identity === key ?+            store : hiddenStore(obj, key);+    };+}++},{"./hidden-store.js":5}],5:[function(require,module,exports){+module.exports = hiddenStore;++function hiddenStore(obj, key) {+    var store = { identity: key };+    var valueOf = obj.valueOf;++    Object.defineProperty(obj, "valueOf", {+        value: function (value) {+            return value !== key ?+                valueOf.apply(this, arguments) : store;+        },+        writable: true+    });++    return store;+}++},{}],6:[function(require,module,exports){+var DataSet = require("data-set")++module.exports = addEvent++function addEvent(target, type, handler) {+    var ds = DataSet(target)+    var events = ds[type]++    if (!events) {+        ds[type] = handler+    } else if (Array.isArray(events)) {+        if (events.indexOf(handler) === -1) {+            events.push(handler)+        }+    } else if (events !== handler) {+        ds[type] = [events, handler]+    }+}++},{"data-set":2}],7:[function(require,module,exports){+var globalDocument = require("global/document")+var DataSet = require("data-set")+var createStore = require("weakmap-shim/create-store")++var addEvent = require("./add-event.js")+var removeEvent = require("./remove-event.js")+var ProxyEvent = require("./proxy-event.js")++var HANDLER_STORE = createStore()++module.exports = DOMDelegator++function DOMDelegator(document) {+    document = document || globalDocument++    this.target = document.documentElement+    this.events = {}+    this.rawEventListeners = {}+    this.globalListeners = {}+}++DOMDelegator.prototype.addEventListener = addEvent+DOMDelegator.prototype.removeEventListener = removeEvent++DOMDelegator.prototype.allocateHandle =+    function allocateHandle(func) {+        var handle = new Handle()++        HANDLER_STORE(handle).func = func;++        return handle+    }++DOMDelegator.prototype.transformHandle =+    function transformHandle(handle, lambda) {+        var func = HANDLER_STORE(handle).func++        return this.allocateHandle(function (ev) {+            var result = lambda(ev)+            if (result) {+                func(result)+            }+        })+    }++DOMDelegator.prototype.addGlobalEventListener =+    function addGlobalEventListener(eventName, fn) {+        var listeners = this.globalListeners[eventName] || [];+        if (listeners.indexOf(fn) === -1) {+            listeners.push(fn)+        }++        this.globalListeners[eventName] = listeners;+    }++DOMDelegator.prototype.removeGlobalEventListener =+    function removeGlobalEventListener(eventName, fn) {+        var listeners = this.globalListeners[eventName] || [];++        var index = listeners.indexOf(fn)+        if (index !== -1) {+            listeners.splice(index, 1)+        }+    }++DOMDelegator.prototype.listenTo = function listenTo(eventName) {+    if (this.events[eventName]) {+        return+    }++    this.events[eventName] = true++    var listener = this.rawEventListeners[eventName]+    if (!listener) {+        listener = this.rawEventListeners[eventName] =+            createHandler(eventName, this)+    }++    this.target.addEventListener(eventName, listener, true)+}++DOMDelegator.prototype.unlistenTo = function unlistenTo(eventName) {+    if (!this.events[eventName]) {+        return+    }++    this.events[eventName] = false+    var listener = this.rawEventListeners[eventName]++    if (!listener) {+        throw new Error("dom-delegator#unlistenTo: cannot " ++            "unlisten to " + eventName)+    }++    this.target.removeEventListener(eventName, listener, true)+}++function createHandler(eventName, delegator) {+    var globalListeners = delegator.globalListeners;+    var delegatorTarget = delegator.target;++    return handler++    function handler(ev) {+        var globalHandlers = globalListeners[eventName] || []++        if (globalHandlers.length > 0) {+            var globalEvent = new ProxyEvent(ev);+            globalEvent.currentTarget = delegatorTarget;+            callListeners(globalHandlers, globalEvent)+        }++        findAndInvokeListeners(ev.target, ev, eventName)+    }+}++function findAndInvokeListeners(elem, ev, eventName) {+    var listener = getListener(elem, eventName)++    if (listener && listener.handlers.length > 0) {+        var listenerEvent = new ProxyEvent(ev);+        listenerEvent.currentTarget = listener.currentTarget+        callListeners(listener.handlers, listenerEvent)++        if (listenerEvent._bubbles) {+            var nextTarget = listener.currentTarget.parentNode+            findAndInvokeListeners(nextTarget, ev, eventName)+        }+    }+}++function getListener(target, type) {+    // terminate recursion if parent is `null`+    if (target === null) {+        return null+    }++    var ds = DataSet(target)+    // fetch list of handler fns for this event+    var handler = ds[type]+    var allHandler = ds.event++    if (!handler && !allHandler) {+        return getListener(target.parentNode, type)+    }++    var handlers = [].concat(handler || [], allHandler || [])+    return new Listener(target, handlers)+}++function callListeners(handlers, ev) {+    handlers.forEach(function (handler) {+        if (typeof handler === "function") {+            handler(ev)+        } else if (typeof handler.handleEvent === "function") {+            handler.handleEvent(ev)+        } else if (handler.type === "dom-delegator-handle") {+            HANDLER_STORE(handler).func(ev)+        } else {+            throw new Error("dom-delegator: unknown handler " ++                "found: " + JSON.stringify(handlers));+        }+    })+}++function Listener(target, handlers) {+    this.currentTarget = target+    this.handlers = handlers+}++function Handle() {+    this.type = "dom-delegator-handle"+}++},{"./add-event.js":6,"./proxy-event.js":15,"./remove-event.js":16,"data-set":2,"global/document":10,"weakmap-shim/create-store":13}],8:[function(require,module,exports){+var Individual = require("individual")+var cuid = require("cuid")+var globalDocument = require("global/document")++var DOMDelegator = require("./dom-delegator.js")++var delegatorCache = Individual("__DOM_DELEGATOR_CACHE@9", {+    delegators: {}+})+var commonEvents = [+    "blur", "change", "click",  "contextmenu", "dblclick",+    "error","focus", "focusin", "focusout", "input", "keydown",+    "keypress", "keyup", "load", "mousedown", "mouseup",+    "resize", "scroll", "select", "submit", "touchcancel",+    "touchend", "touchstart", "unload"+]++/*  Delegator is a thin wrapper around a singleton `DOMDelegator`+        instance.++    Only one DOMDelegator should exist because we do not want+        duplicate event listeners bound to the DOM.++    `Delegator` will also `listenTo()` all events unless +        every caller opts out of it+*/+module.exports = Delegator++function Delegator(opts) {+    opts = opts || {}+    var document = opts.document || globalDocument++    var cacheKey = document["__DOM_DELEGATOR_CACHE_TOKEN@9"]++    if (!cacheKey) {+        cacheKey =+            document["__DOM_DELEGATOR_CACHE_TOKEN@9"] = cuid()+    }++    var delegator = delegatorCache.delegators[cacheKey]++    if (!delegator) {+        delegator = delegatorCache.delegators[cacheKey] =+            new DOMDelegator(document)+    }++    if (opts.defaultEvents !== false) {+        for (var i = 0; i < commonEvents.length; i++) {+            delegator.listenTo(commonEvents[i])+        }+    }++    return delegator+}++++},{"./dom-delegator.js":7,"cuid":9,"global/document":10,"individual":11}],9:[function(require,module,exports){+/**+ * cuid.js+ * Collision-resistant UID generator for browsers and node.+ * Sequential for fast db lookups and recency sorting.+ * Safe for element IDs and server-side lookups.+ *+ * Extracted from CLCTR+ * + * Copyright (c) Eric Elliott 2012+ * MIT License+ */++/*global window, navigator, document, require, process, module */+(function (app) {+  'use strict';+  var namespace = 'cuid',+    c = 0,+    blockSize = 4,+    base = 36,+    discreteValues = Math.pow(base, blockSize),++    pad = function pad(num, size) {+      var s = "000000000" + num;+      return s.substr(s.length-size);+    },++    randomBlock = function randomBlock() {+      return pad((Math.random() *+            discreteValues << 0)+            .toString(base), blockSize);+    },++    safeCounter = function () {+      c = (c < discreteValues) ? c : 0;+      c++; // this is not subliminal+      return c - 1;+    },++    api = function cuid() {+      // Starting with a lowercase letter makes+      // it HTML element ID friendly.+      var letter = 'c', // hard-coded allows for sequential access++        // timestamp+        // warning: this exposes the exact date and time+        // that the uid was created.+        timestamp = (new Date().getTime()).toString(base),++        // Prevent same-machine collisions.+        counter,++        // A few chars to generate distinct ids for different+        // clients (so different computers are far less+        // likely to generate the same id)+        fingerprint = api.fingerprint(),++        // Grab some more chars from Math.random()+        random = randomBlock() + randomBlock();++        counter = pad(safeCounter().toString(base), blockSize);++      return  (letter + timestamp + counter + fingerprint + random);+    };++  api.slug = function slug() {+    var date = new Date().getTime().toString(36),+      counter,+      print = api.fingerprint().slice(0,1) ++        api.fingerprint().slice(-1),+      random = randomBlock().slice(-2);++      counter = safeCounter().toString(36).slice(-4);++    return date.slice(-2) + +      counter + print + random;+  };++  api.globalCount = function globalCount() {+    // We want to cache the results of this+    var cache = (function calc() {+        var i,+          count = 0;++        for (i in window) {+          count++;+        }++        return count;+      }());++    api.globalCount = function () { return cache; };+    return cache;+  };++  api.fingerprint = function browserPrint() {+    return pad((navigator.mimeTypes.length ++      navigator.userAgent.length).toString(36) ++      api.globalCount().toString(36), 4);+  };++  // don't change anything from here down.+  if (app.register) {+    app.register(namespace, api);+  } else if (typeof module !== 'undefined') {+    module.exports = api;+  } else {+    app[namespace] = api;+  }++}(this.applitude || this));++},{}],10:[function(require,module,exports){+(function (global){+var topLevel = typeof global !== 'undefined' ? global :+    typeof window !== 'undefined' ? window : {}+var minDoc = require('min-document');++if (typeof document !== 'undefined') {+    module.exports = document;+} else {+    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];++    if (!doccy) {+        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;+    }++    module.exports = doccy;+}++}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})+},{"min-document":40}],11:[function(require,module,exports){+module.exports=require(3)+},{}],12:[function(require,module,exports){+if (typeof Object.create === 'function') {+  // implementation from standard node.js 'util' module+  module.exports = function inherits(ctor, superCtor) {+    ctor.super_ = superCtor+    ctor.prototype = Object.create(superCtor.prototype, {+      constructor: {+        value: ctor,+        enumerable: false,+        writable: true,+        configurable: true+      }+    });+  };+} else {+  // old school shim for old browsers+  module.exports = function inherits(ctor, superCtor) {+    ctor.super_ = superCtor+    var TempCtor = function () {}+    TempCtor.prototype = superCtor.prototype+    ctor.prototype = new TempCtor()+    ctor.prototype.constructor = ctor+  }+}++},{}],13:[function(require,module,exports){+module.exports=require(4)+},{"./hidden-store.js":14}],14:[function(require,module,exports){+module.exports=require(5)+},{}],15:[function(require,module,exports){+var inherits = require("inherits")++var ALL_PROPS = [+    "altKey", "bubbles", "cancelable", "ctrlKey",+    "eventPhase", "metaKey", "relatedTarget", "shiftKey",+    "target", "timeStamp", "type", "view", "which"+]+var KEY_PROPS = ["char", "charCode", "key", "keyCode"]+var MOUSE_PROPS = [+    "button", "buttons", "clientX", "clientY", "layerX",+    "layerY", "offsetX", "offsetY", "pageX", "pageY",+    "screenX", "screenY", "toElement"+]++var rkeyEvent = /^key|input/+var rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/++module.exports = ProxyEvent++function ProxyEvent(ev) {+    if (!(this instanceof ProxyEvent)) {+        return new ProxyEvent(ev)+    }++    if (rkeyEvent.test(ev.type)) {+        return new KeyEvent(ev)+    } else if (rmouseEvent.test(ev.type)) {+        return new MouseEvent(ev)+    }++    for (var i = 0; i < ALL_PROPS.length; i++) {+        var propKey = ALL_PROPS[i]+        this[propKey] = ev[propKey]+    }++    this._rawEvent = ev+    this._bubbles = false;+}++ProxyEvent.prototype.preventDefault = function () {+    this._rawEvent.preventDefault()+}++ProxyEvent.prototype.startPropagation = function () {+    this._bubbles = true;+}++function MouseEvent(ev) {+    for (var i = 0; i < ALL_PROPS.length; i++) {+        var propKey = ALL_PROPS[i]+        this[propKey] = ev[propKey]+    }++    for (var j = 0; j < MOUSE_PROPS.length; j++) {+        var mousePropKey = MOUSE_PROPS[j]+        this[mousePropKey] = ev[mousePropKey]+    }++    this._rawEvent = ev+}++inherits(MouseEvent, ProxyEvent)++function KeyEvent(ev) {+    for (var i = 0; i < ALL_PROPS.length; i++) {+        var propKey = ALL_PROPS[i]+        this[propKey] = ev[propKey]+    }++    for (var j = 0; j < KEY_PROPS.length; j++) {+        var keyPropKey = KEY_PROPS[j]+        this[keyPropKey] = ev[keyPropKey]+    }++    this._rawEvent = ev+}++inherits(KeyEvent, ProxyEvent)++},{"inherits":12}],16:[function(require,module,exports){+var DataSet = require("data-set")++module.exports = removeEvent++function removeEvent(target, type, handler) {+    var ds = DataSet(target)+    var events = ds[type]++    if (!events) {+        return+    } else if (Array.isArray(events)) {+        var index = events.indexOf(handler)+        if (index !== -1) {+            events.splice(index, 1)+        }+    } else if (events === handler) {+        ds[type] = null+    }+}++},{"data-set":2}],17:[function(require,module,exports){+var isObject = require("is-object")+var isHook = require("vtree/is-vhook")++module.exports = applyProperties++function applyProperties(node, props, previous) {+    for (var propName in props) {+        var propValue = props[propName]++        if (propValue === undefined) {+            removeProperty(node, props, previous, propName);+        } else if (isHook(propValue)) {+            propValue.hook(node,+                propName,+                previous ? previous[propName] : undefined)+        } else {+            if (isObject(propValue)) {+                patchObject(node, props, previous, propName, propValue);+            } else if (propValue !== undefined) {+                node[propName] = propValue+            }+        }+    }+}++function removeProperty(node, props, previous, propName) {+    if (previous) {+        var previousValue = previous[propName]++        if (!isHook(previousValue)) {+            if (propName === "attributes") {+                for (var attrName in previousValue) {+                    node.removeAttribute(attrName)+                }+            } else if (propName === "style") {+                for (var i in previousValue) {+                    node.style[i] = ""+                }+            } else if (typeof previousValue === "string") {+                node[propName] = ""+            } else {+                node[propName] = null+            }+        }+    }+}++function patchObject(node, props, previous, propName, propValue) {+    var previousValue = previous ? previous[propName] : undefined++    // Set attributes+    if (propName === "attributes") {+        for (var attrName in propValue) {+            var attrValue = propValue[attrName]++            if (attrValue === undefined) {+                node.removeAttribute(attrName)+            } else {+                node.setAttribute(attrName, attrValue)+            }+        }++        return+    }++    if(previousValue && isObject(previousValue) &&+        getPrototype(previousValue) !== getPrototype(propValue)) {+        node[propName] = propValue+        return+    }++    if (!isObject(node[propName])) {+        node[propName] = {}+    }++    var replacer = propName === "style" ? "" : undefined++    for (var k in propValue) {+        var value = propValue[k]+        node[propName][k] = (value === undefined) ? replacer : value+    }+}++function getPrototype(value) {+    if (Object.getPrototypeOf) {+        return Object.getPrototypeOf(value)+    } else if (value.__proto__) {+        return value.__proto__+    } else if (value.constructor) {+        return value.constructor.prototype+    }+}++},{"is-object":21,"vtree/is-vhook":29}],18:[function(require,module,exports){+var document = require("global/document")++var applyProperties = require("./apply-properties")++var isVNode = require("vtree/is-vnode")+var isVText = require("vtree/is-vtext")+var isWidget = require("vtree/is-widget")+var handleThunk = require("vtree/handle-thunk")++module.exports = createElement++function createElement(vnode, opts) {+    var doc = opts ? opts.document || document : document+    var warn = opts ? opts.warn : null++    vnode = handleThunk(vnode).a++    if (isWidget(vnode)) {+        return vnode.init()+    } else if (isVText(vnode)) {+        return doc.createTextNode(vnode.text)+    } else if (!isVNode(vnode)) {+        if (warn) {+            warn("Item is not a valid virtual dom node", vnode)+        }+        return null+    }++    var node = (vnode.namespace === null) ?+        doc.createElement(vnode.tagName) :+        doc.createElementNS(vnode.namespace, vnode.tagName)++    var props = vnode.properties+    applyProperties(node, props)++    var children = vnode.children++    for (var i = 0; i < children.length; i++) {+        var childNode = createElement(children[i], opts)+        if (childNode) {+            node.appendChild(childNode)+        }+    }++    return node+}++},{"./apply-properties":17,"global/document":20,"vtree/handle-thunk":27,"vtree/is-vnode":30,"vtree/is-vtext":31,"vtree/is-widget":32}],19:[function(require,module,exports){+// Maps a virtual DOM tree onto a real DOM tree in an efficient manner.+// We don't want to read all of the DOM nodes in the tree so we use+// the in-order tree indexing to eliminate recursion down certain branches.+// We only recurse into a DOM node if we know that it contains a child of+// interest.++var noChild = {}++module.exports = domIndex++function domIndex(rootNode, tree, indices, nodes) {+    if (!indices || indices.length === 0) {+        return {}+    } else {+        indices.sort(ascending)+        return recurse(rootNode, tree, indices, nodes, 0)+    }+}++function recurse(rootNode, tree, indices, nodes, rootIndex) {+    nodes = nodes || {}+++    if (rootNode) {+        if (indexInRange(indices, rootIndex, rootIndex)) {+            nodes[rootIndex] = rootNode+        }++        var vChildren = tree.children++        if (vChildren) {++            var childNodes = rootNode.childNodes++            for (var i = 0; i < tree.children.length; i++) {+                rootIndex += 1++                var vChild = vChildren[i] || noChild+                var nextIndex = rootIndex + (vChild.count || 0)++                // skip recursion down the tree if there are no nodes down here+                if (indexInRange(indices, rootIndex, nextIndex)) {+                    recurse(childNodes[i], vChild, indices, nodes, rootIndex)+                }++                rootIndex = nextIndex+            }+        }+    }++    return nodes+}++// Binary search for an index in the interval [left, right]+function indexInRange(indices, left, right) {+    if (indices.length === 0) {+        return false+    }++    var minIndex = 0+    var maxIndex = indices.length - 1+    var currentIndex+    var currentItem++    while (minIndex <= maxIndex) {+        currentIndex = ((maxIndex + minIndex) / 2) >> 0+        currentItem = indices[currentIndex]++        if (minIndex === maxIndex) {+            return currentItem >= left && currentItem <= right+        } else if (currentItem < left) {+            minIndex = currentIndex + 1+        } else  if (currentItem > right) {+            maxIndex = currentIndex - 1+        } else {+            return true+        }+    }++    return false;+}++function ascending(a, b) {+    return a > b ? 1 : -1+}++},{}],20:[function(require,module,exports){+module.exports=require(10)+},{"min-document":40}],21:[function(require,module,exports){+module.exports = isObject++function isObject(x) {+    return typeof x === "object" && x !== null+}++},{}],22:[function(require,module,exports){+var nativeIsArray = Array.isArray+var toString = Object.prototype.toString++module.exports = nativeIsArray || isArray++function isArray(obj) {+    return toString.call(obj) === "[object Array]"+}++},{}],23:[function(require,module,exports){+var applyProperties = require("./apply-properties")++var isWidget = require("vtree/is-widget")+var VPatch = require("vtree/vpatch")++var render = require("./create-element")+var updateWidget = require("./update-widget")++module.exports = applyPatch++function applyPatch(vpatch, domNode, renderOptions) {+    var type = vpatch.type+    var vNode = vpatch.vNode+    var patch = vpatch.patch++    switch (type) {+        case VPatch.REMOVE:+            return removeNode(domNode, vNode)+        case VPatch.INSERT:+            return insertNode(domNode, patch, renderOptions)+        case VPatch.VTEXT:+            return stringPatch(domNode, vNode, patch, renderOptions)+        case VPatch.WIDGET:+            return widgetPatch(domNode, vNode, patch, renderOptions)+        case VPatch.VNODE:+            return vNodePatch(domNode, vNode, patch, renderOptions)+        case VPatch.ORDER:+            reorderChildren(domNode, patch)+            return domNode+        case VPatch.PROPS:+            applyProperties(domNode, patch, vNode.properties)+            return domNode+        case VPatch.THUNK:+            return replaceRoot(domNode,+                renderOptions.patch(domNode, patch, renderOptions))+        default:+            return domNode+    }+}++function removeNode(domNode, vNode) {+    var parentNode = domNode.parentNode++    if (parentNode) {+        parentNode.removeChild(domNode)+    }++    destroyWidget(domNode, vNode);++    return null+}++function insertNode(parentNode, vNode, renderOptions) {+    var newNode = render(vNode, renderOptions)++    if (parentNode) {+        parentNode.appendChild(newNode)+    }++    return parentNode+}++function stringPatch(domNode, leftVNode, vText, renderOptions) {+    var newNode++    if (domNode.nodeType === 3) {+        domNode.replaceData(0, domNode.length, vText.text)+        newNode = domNode+    } else {+        var parentNode = domNode.parentNode+        newNode = render(vText, renderOptions)++        if (parentNode) {+            parentNode.replaceChild(newNode, domNode)+        }+    }++    destroyWidget(domNode, leftVNode)++    return newNode+}++function widgetPatch(domNode, leftVNode, widget, renderOptions) {+    if (updateWidget(leftVNode, widget)) {+        return widget.update(leftVNode, domNode) || domNode+    }++    var parentNode = domNode.parentNode+    var newWidget = render(widget, renderOptions)++    if (parentNode) {+        parentNode.replaceChild(newWidget, domNode)+    }++    destroyWidget(domNode, leftVNode)++    return newWidget+}++function vNodePatch(domNode, leftVNode, vNode, renderOptions) {+    var parentNode = domNode.parentNode+    var newNode = render(vNode, renderOptions)++    if (parentNode) {+        parentNode.replaceChild(newNode, domNode)+    }++    destroyWidget(domNode, leftVNode)++    return newNode+}++function destroyWidget(domNode, w) {+    if (typeof w.destroy === "function" && isWidget(w)) {+        w.destroy(domNode)+    }+}++function reorderChildren(domNode, bIndex) {+    var children = []+    var childNodes = domNode.childNodes+    var len = childNodes.length+    var i+    var reverseIndex = bIndex.reverse++    for (i = 0; i < len; i++) {+        children.push(domNode.childNodes[i])+    }++    var insertOffset = 0+    var move+    var node+    var insertNode+    for (i = 0; i < len; i++) {+        move = bIndex[i]+        if (move !== undefined && move !== i) {+            // the element currently at this index will be moved later so increase the insert offset+            if (reverseIndex[i] > i) {+                insertOffset+++            }++            node = children[move]+            insertNode = childNodes[i + insertOffset] || null+            if (node !== insertNode) {+                domNode.insertBefore(node, insertNode)+            }++            // the moved element came from the front of the array so reduce the insert offset+            if (move < i) {+                insertOffset--+            }+        }++        // element at this index is scheduled to be removed so increase insert offset+        if (i in bIndex.removes) {+            insertOffset+++        }+    }+}++function replaceRoot(oldRoot, newRoot) {+    if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {+        console.log(oldRoot)+        oldRoot.parentNode.replaceChild(newRoot, oldRoot)+    }++    return newRoot;+}++},{"./apply-properties":17,"./create-element":18,"./update-widget":25,"vtree/is-widget":32,"vtree/vpatch":37}],24:[function(require,module,exports){+var document = require("global/document")+var isArray = require("x-is-array")++var domIndex = require("./dom-index")+var patchOp = require("./patch-op")+module.exports = patch++function patch(rootNode, patches) {+    return patchRecursive(rootNode, patches)+}++function patchRecursive(rootNode, patches, renderOptions) {+    var indices = patchIndices(patches)++    if (indices.length === 0) {+        return rootNode+    }++    var index = domIndex(rootNode, patches.a, indices)+    var ownerDocument = rootNode.ownerDocument++    if (!renderOptions) {+        renderOptions = { patch: patchRecursive }+        if (ownerDocument !== document) {+            renderOptions.document = ownerDocument+        }+    }++    for (var i = 0; i < indices.length; i++) {+        var nodeIndex = indices[i]+        rootNode = applyPatch(rootNode,+            index[nodeIndex],+            patches[nodeIndex],+            renderOptions)+    }++    return rootNode+}++function applyPatch(rootNode, domNode, patchList, renderOptions) {+    if (!domNode) {+        return rootNode+    }++    var newNode++    if (isArray(patchList)) {+        for (var i = 0; i < patchList.length; i++) {+            newNode = patchOp(patchList[i], domNode, renderOptions)++            if (domNode === rootNode) {+                rootNode = newNode+            }+        }+    } else {+        newNode = patchOp(patchList, domNode, renderOptions)++        if (domNode === rootNode) {+            rootNode = newNode+        }+    }++    return rootNode+}++function patchIndices(patches) {+    var indices = []++    for (var key in patches) {+        if (key !== "a") {+            indices.push(Number(key))+        }+    }++    return indices+}++},{"./dom-index":19,"./patch-op":23,"global/document":20,"x-is-array":22}],25:[function(require,module,exports){+var isWidget = require("vtree/is-widget")++module.exports = updateWidget++function updateWidget(a, b) {+    if (isWidget(a) && isWidget(b)) {+        if ("name" in a && "name" in b) {+            return a.id === b.id+        } else {+            return a.init === b.init+        }+    }++    return false+}++},{"vtree/is-widget":32}],26:[function(require,module,exports){+var isArray = require("x-is-array")+var isObject = require("is-object")++var VPatch = require("./vpatch")+var isVNode = require("./is-vnode")+var isVText = require("./is-vtext")+var isWidget = require("./is-widget")+var isThunk = require("./is-thunk")+var handleThunk = require("./handle-thunk")++module.exports = diff++function diff(a, b) {+    var patch = { a: a }+    walk(a, b, patch, 0)+    return patch+}++function walk(a, b, patch, index) {+    if (a === b) {+        if (isThunk(a) || isThunk(b)) {+            thunks(a, b, patch, index)+        } else {+            hooks(b, patch, index)+        }+        return+    }++    var apply = patch[index]++    if (b == null) {+        apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b))+        destroyWidgets(a, patch, index)+    } else if (isThunk(a) || isThunk(b)) {+        thunks(a, b, patch, index)+    } else if (isVNode(b)) {+        if (isVNode(a)) {+            if (a.tagName === b.tagName &&+                a.namespace === b.namespace &&+                a.key === b.key) {+                var propsPatch = diffProps(a.properties, b.properties, b.hooks)+                if (propsPatch) {+                    apply = appendPatch(apply,+                        new VPatch(VPatch.PROPS, a, propsPatch))+                }+                apply = diffChildren(a, b, patch, apply, index)+            } else {+                apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))+                destroyWidgets(a, patch, index)+            }+        } else {+            apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))+            destroyWidgets(a, patch, index)+        }+    } else if (isVText(b)) {+        if (!isVText(a)) {+            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))+            destroyWidgets(a, patch, index)+        } else if (a.text !== b.text) {+            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))+        }+    } else if (isWidget(b)) {+        apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b))++        if (!isWidget(a)) {+            destroyWidgets(a, patch, index)+        }+    }++    if (apply) {+        patch[index] = apply+    }+}++function diffProps(a, b, hooks) {+    var diff++    for (var aKey in a) {+        if (!(aKey in b)) {+            diff = diff || {}+            diff[aKey] = undefined+        }++        var aValue = a[aKey]+        var bValue = b[aKey]++        if (hooks && aKey in hooks) {+            diff = diff || {}+            diff[aKey] = bValue+        } else {+            if (isObject(aValue) && isObject(bValue)) {+                if (getPrototype(bValue) !== getPrototype(aValue)) {+                    diff = diff || {}+                    diff[aKey] = bValue+                } else {+                    var objectDiff = diffProps(aValue, bValue)+                    if (objectDiff) {+                        diff = diff || {}+                        diff[aKey] = objectDiff+                    }+                }+            } else if (aValue !== bValue) {+                diff = diff || {}+                diff[aKey] = bValue+            }+        }+    }++    for (var bKey in b) {+        if (!(bKey in a)) {+            diff = diff || {}+            diff[bKey] = b[bKey]+        }+    }++    return diff+}++function getPrototype(value) {+    if (Object.getPrototypeOf) {+        return Object.getPrototypeOf(value)+    } else if (value.__proto__) {+        return value.__proto__+    } else if (value.constructor) {+        return value.constructor.prototype+    }+}++function diffChildren(a, b, patch, apply, index) {+    var aChildren = a.children+    var bChildren = reorder(aChildren, b.children)++    var aLen = aChildren.length+    var bLen = bChildren.length+    var len = aLen > bLen ? aLen : bLen++    for (var i = 0; i < len; i++) {+        var leftNode = aChildren[i]+        var rightNode = bChildren[i]+        index += 1++        if (!leftNode) {+            if (rightNode) {+                // Excess nodes in b need to be added+                apply = appendPatch(apply,+                    new VPatch(VPatch.INSERT, null, rightNode))+            }+        } else if (!rightNode) {+            if (leftNode) {+                // Excess nodes in a need to be removed+                patch[index] = new VPatch(VPatch.REMOVE, leftNode, null)+                destroyWidgets(leftNode, patch, index)+            }+        } else {+            walk(leftNode, rightNode, patch, index)+        }++        if (isVNode(leftNode) && leftNode.count) {+            index += leftNode.count+        }+    }++    if (bChildren.moves) {+        // Reorder nodes last+        apply = appendPatch(apply, new VPatch(VPatch.ORDER, a, bChildren.moves))+    }++    return apply+}++// Patch records for all destroyed widgets must be added because we need+// a DOM node reference for the destroy function+function destroyWidgets(vNode, patch, index) {+    if (isWidget(vNode)) {+        if (typeof vNode.destroy === "function") {+            patch[index] = new VPatch(VPatch.REMOVE, vNode, null)+        }+    } else if (isVNode(vNode) && vNode.hasWidgets) {+        var children = vNode.children+        var len = children.length+        for (var i = 0; i < len; i++) {+            var child = children[i]+            index += 1++            destroyWidgets(child, patch, index)++            if (isVNode(child) && child.count) {+                index += child.count+            }+        }+    }+}++// Create a sub-patch for thunks+function thunks(a, b, patch, index) {+    var nodes = handleThunk(a, b);+    var thunkPatch = diff(nodes.a, nodes.b)+    if (hasPatches(thunkPatch)) {+        patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch)+    }+}++function hasPatches(patch) {+    for (var index in patch) {+        if (index !== "a") {+            return true;+        }+    }++    return false;+}++// Execute hooks when two nodes are identical+function hooks(vNode, patch, index) {+    if (isVNode(vNode)) {+        if (vNode.hooks) {+            patch[index] = new VPatch(VPatch.PROPS, vNode.hooks, vNode.hooks)+        }++        if (vNode.descendantHooks) {+            var children = vNode.children+            var len = children.length+            for (var i = 0; i < len; i++) {+                var child = children[i]+                index += 1++                hooks(child, patch, index)++                if (isVNode(child) && child.count) {+                    index += child.count+                }+            }+        }+    }+}++// List diff, naive left to right reordering+function reorder(aChildren, bChildren) {++    var bKeys = keyIndex(bChildren)++    if (!bKeys) {+        return bChildren+    }++    var aKeys = keyIndex(aChildren)++    if (!aKeys) {+        return bChildren+    }++    var bMatch = {}, aMatch = {}++    for (var key in bKeys) {+        bMatch[bKeys[key]] = aKeys[key]+    }++    for (var key in aKeys) {+        aMatch[aKeys[key]] = bKeys[key]+    }++    var aLen = aChildren.length+    var bLen = bChildren.length+    var len = aLen > bLen ? aLen : bLen+    var shuffle = []+    var freeIndex = 0+    var i = 0+    var moveIndex = 0+    var moves = {}+    var removes = moves.removes = {}+    var reverse = moves.reverse = {}+    var hasMoves = false++    while (freeIndex < len) {+        var move = aMatch[i]+        if (move !== undefined) {+            shuffle[i] = bChildren[move]+            if (move !== moveIndex) {+                moves[move] = moveIndex+                reverse[moveIndex] = move+                hasMoves = true+            }+            moveIndex+++        } else if (i in aMatch) {+            shuffle[i] = undefined+            removes[i] = moveIndex+++            hasMoves = true+        } else {+            while (bMatch[freeIndex] !== undefined) {+                freeIndex+++            }++            if (freeIndex < len) {+                var freeChild = bChildren[freeIndex]+                if (freeChild) {+                    shuffle[i] = freeChild+                    if (freeIndex !== moveIndex) {+                        hasMoves = true+                        moves[freeIndex] = moveIndex+                        reverse[moveIndex] = freeIndex+                    }+                    moveIndex+++                }+                freeIndex+++            }+        }+        i+++    }++    if (hasMoves) {+        shuffle.moves = moves+    }++    return shuffle+}++function keyIndex(children) {+    var i, keys++    for (i = 0; i < children.length; i++) {+        var child = children[i]++        if (child.key !== undefined) {+            keys = keys || {}+            keys[child.key] = i+        }+    }++    return keys+}++function appendPatch(apply, patch) {+    if (apply) {+        if (isArray(apply)) {+            apply.push(patch)+        } else {+            apply = [apply, patch]+        }++        return apply+    } else {+        return patch+    }+}++},{"./handle-thunk":27,"./is-thunk":28,"./is-vnode":30,"./is-vtext":31,"./is-widget":32,"./vpatch":37,"is-object":33,"x-is-array":34}],27:[function(require,module,exports){+var isVNode = require("./is-vnode")+var isVText = require("./is-vtext")+var isWidget = require("./is-widget")+var isThunk = require("./is-thunk")++module.exports = handleThunk++function handleThunk(a, b) {+    var renderedA = a+    var renderedB = b++    if (isThunk(b)) {+        renderedB = renderThunk(b, a)+    }++    if (isThunk(a)) {+        renderedA = renderThunk(a, null)+    }++    return {+        a: renderedA,+        b: renderedB+    }+}++function renderThunk(thunk, previous) {+    var renderedThunk = thunk.vnode++    if (!renderedThunk) {+        renderedThunk = thunk.vnode = thunk.render(previous)+    }++    if (!(isVNode(renderedThunk) ||+            isVText(renderedThunk) ||+            isWidget(renderedThunk))) {+        throw new Error("thunk did not return a valid node");+    }++    return renderedThunk+}++},{"./is-thunk":28,"./is-vnode":30,"./is-vtext":31,"./is-widget":32}],28:[function(require,module,exports){+module.exports = isThunk
+
+function isThunk(t) {
+    return t && t.type === "Thunk"
+}
++},{}],29:[function(require,module,exports){+module.exports = isHook++function isHook(hook) {+    return hook && typeof hook.hook === "function" &&+        !hook.hasOwnProperty("hook")+}++},{}],30:[function(require,module,exports){+var version = require("./version")++module.exports = isVirtualNode++function isVirtualNode(x) {+    return x && x.type === "VirtualNode" && x.version === version+}++},{"./version":35}],31:[function(require,module,exports){+var version = require("./version")++module.exports = isVirtualText++function isVirtualText(x) {+    return x && x.type === "VirtualText" && x.version === version+}++},{"./version":35}],32:[function(require,module,exports){+module.exports = isWidget++function isWidget(w) {+    return w && w.type === "Widget"+}++},{}],33:[function(require,module,exports){+module.exports=require(21)+},{}],34:[function(require,module,exports){+module.exports=require(22)+},{}],35:[function(require,module,exports){+module.exports = "1"++},{}],36:[function(require,module,exports){+var version = require("./version")+var isVNode = require("./is-vnode")+var isWidget = require("./is-widget")+var isVHook = require("./is-vhook")++module.exports = VirtualNode++var noProperties = {}+var noChildren = []++function VirtualNode(tagName, properties, children, key, namespace) {+    this.tagName = tagName+    this.properties = properties || noProperties+    this.children = children || noChildren+    this.key = key != null ? String(key) : undefined+    this.namespace = (typeof namespace === "string") ? namespace : null++    var count = (children && children.length) || 0+    var descendants = 0+    var hasWidgets = false+    var descendantHooks = false+    var hooks++    for (var propName in properties) {+        if (properties.hasOwnProperty(propName)) {+            var property = properties[propName]+            if (isVHook(property)) {+                if (!hooks) {+                    hooks = {}+                }++                hooks[propName] = property+            }+        }+    }++    for (var i = 0; i < count; i++) {+        var child = children[i]+        if (isVNode(child)) {+            descendants += child.count || 0++            if (!hasWidgets && child.hasWidgets) {+                hasWidgets = true+            }++            if (!descendantHooks && (child.hooks || child.descendantHooks)) {+                descendantHooks = true+            }+        } else if (!hasWidgets && isWidget(child)) {+            if (typeof child.destroy === "function") {+                hasWidgets = true+            }+        }+    }++    this.count = count + descendants+    this.hasWidgets = hasWidgets+    this.hooks = hooks+    this.descendantHooks = descendantHooks+}++VirtualNode.prototype.version = version+VirtualNode.prototype.type = "VirtualNode"++},{"./is-vhook":29,"./is-vnode":30,"./is-widget":32,"./version":35}],37:[function(require,module,exports){+var version = require("./version")++VirtualPatch.NONE = 0+VirtualPatch.VTEXT = 1+VirtualPatch.VNODE = 2+VirtualPatch.WIDGET = 3+VirtualPatch.PROPS = 4+VirtualPatch.ORDER = 5+VirtualPatch.INSERT = 6+VirtualPatch.REMOVE = 7+VirtualPatch.THUNK = 8++module.exports = VirtualPatch++function VirtualPatch(type, vNode, patch) {+    this.type = Number(type)+    this.vNode = vNode+    this.patch = patch+}++VirtualPatch.prototype.version = version+VirtualPatch.prototype.type = "VirtualPatch"++},{"./version":35}],38:[function(require,module,exports){+var version = require("./version")++module.exports = VirtualText++function VirtualText(text) {+    this.text = String(text)+}++VirtualText.prototype.version = version+VirtualText.prototype.type = "VirtualText"++},{"./version":35}],39:[function(require,module,exports){++var VNode = require('vtree/vnode');+var VText = require('vtree/vtext');+var diff = require('vtree/diff');+var patch = require('vdom/patch');+var createElement = require('vdom/create-element');+var DataSet = require("data-set");+var Delegator = require("dom-delegator");+var isHook = require("vtree/is-vhook");++Elm.Native.VirtualDom = {};+Elm.Native.VirtualDom.make = function(elm)+{+	elm.Native = elm.Native || {};+	elm.Native.VirtualDom = elm.Native.VirtualDom || {};+	if (elm.Native.VirtualDom.values)+	{+		return elm.Native.VirtualDom.values;+	}++	// This manages event listeners. Somehow...+	// Save a reference for use in on(...)+	var delegator = Delegator();++	var Element = Elm.Native.Graphics.Element.make(elm);+	var Json = Elm.Native.Json.make(elm);+	var List = Elm.Native.List.make(elm);+	var Signal = Elm.Native.Signal.make(elm);+	var Utils = Elm.Native.Utils.make(elm);++	var ATTRIBUTE_KEY = 'UniqueNameThatOthersAreVeryUnlikelyToUse';++	function listToProperties(list)+	{+		var object = {};+		while (list.ctor !== '[]')+		{+			var entry = list._0;+			if (entry.key === ATTRIBUTE_KEY)+			{+				object.attributes = object.attributes || {};+				object.attributes[entry.value.attrKey] = entry.value.attrValue;+			}+			else+			{+				object[entry.key] = entry.value;+			}+			list = list._1;+		}+		return object;+	}++	function node(name, propertyList, contents)+	{+		var props = listToProperties(propertyList);++		var key, namespace;+		// support keys+		if (props.key !== undefined)+		{+			key = props.key;+			props.key = undefined;+		}++		// support namespace+		if (props.namespace !== undefined)+		{+			namespace = props.namespace;+			props.namespace = undefined;+		}++		// ensure that setting text of an input does not move the cursor+		var useSoftSet =+			name === 'input'+			&& props.value !== undefined+			&& !isHook(props.value);++		if (useSoftSet)+		{+			props.value = SoftSetHook(props.value);+		}++		return new VNode(name, props, List.toArray(contents), key, namespace);+	}++	function property(key, value)+	{+		return {+			key: key,+			value: value+		};+	}++	function attribute(key, value)+	{+		return {+			key: ATTRIBUTE_KEY,+			value: {+				attrKey: key,+				attrValue: value+			}+		};+	}++	function on(name, decoder, createMessage)+	{+		// Ensure we're listening for this type of event+		delegator.listenTo(name);+		function eventHandler(event)+		{+			var value = A2(Json.runDecoderValue, decoder, event);+			if (value.ctor === 'Ok')+			{+				Signal.sendMessage(createMessage(value._0));+			}+		}+		return property(name, DataSetHook(eventHandler));+	}++	function DataSetHook(value)+	{+		if (!(this instanceof DataSetHook))+		{+			return new DataSetHook(value);+		}++		this.value = value;+	}++	DataSetHook.prototype.hook = function (node, propertyName) {+		var ds = DataSet(node);+		ds[propertyName] = this.value;+	};+++	function SoftSetHook(value)+	{+		if (!(this instanceof SoftSetHook))+		{+			return new SoftSetHook(value);+		}++		this.value = value;+	}++	SoftSetHook.prototype.hook = function (node, propertyName)+	{+		if (node[propertyName] !== this.value)+		{+			node[propertyName] = this.value;+		}+	};++	function text(string)+	{+		return new VText(string);+	}++	function fromElement(element)+	{+		return {+			type: "Widget",++			element: element,++			init: function () {+				return Element.render(element);+			},++			update: function (previous, node) {+				return Element.update(node, previous.element, element);+			}+		};+	}++	function toElement(width, height, html)+	{+		return A3(Element.newElement, width, height, {+			ctor: 'Custom',+			type: 'evancz/elm-html',+			render: render,+			update: update,+			model: html+		});+	}++	function render(model)+	{+		var element = Element.createNode('div');+		element.appendChild(createElement(model));+		return element;+	}++	function update(node, oldModel, newModel)+	{+		updateAndReplace(node.firstChild, oldModel, newModel);+		return node;+	}++	function updateAndReplace(node, oldModel, newModel)+	{+		var patches = diff(oldModel, newModel);+		var newNode = patch(node, patches);+		return newNode;+	}++	function lazyRef(fn, a)+	{+		function thunk()+		{+			return fn(a);+		}+		return new Thunk(fn, [a], thunk);+	}++	function lazyRef2(fn, a, b)+	{+		function thunk()+		{+			return A2(fn, a, b);+		}+		return new Thunk(fn, [a,b], thunk);+	}++	function lazyRef3(fn, a, b, c)+	{+		function thunk()+		{+			return A3(fn, a, b, c);+		}+		return new Thunk(fn, [a,b,c], thunk);+	}++	function Thunk(fn, args, thunk)+	{+		this.fn = fn;+		this.args = args;+		this.vnode = null;+		this.key = undefined;+		this.thunk = thunk;+	}++	Thunk.prototype.type = "Thunk";+	Thunk.prototype.update = updateThunk;+	Thunk.prototype.render = renderThunk;++	function shouldUpdate(current, previous)+	{+		if (current.fn !== previous.fn)+		{+			return true;+		}++		// if it's the same function, we know the number of args must match+		var cargs = current.args;+		var pargs = previous.args;++		for (var i = cargs.length; i--; )+		{+			if (cargs[i] !== pargs[i])+			{+				return true;+			}+		}++		return false;+	}++	function updateThunk(previous, domNode)+	{+		if (!shouldUpdate(this, previous))+		{+			this.vnode = previous.vnode;+			return;+		}++		if (!this.vnode)+		{+			this.vnode = this.thunk();+		}++		var patches = diff(previous.vnode, this.vnode);+		patch(domNode, patches);+	}++	function renderThunk()+	{+		return this.thunk();+	}++	return Elm.Native.VirtualDom.values = {+		node: F3(node),+		text: text,+		on: F3(on),++		property: F2(property),+		attribute: F2(attribute),++		lazy: F2(lazyRef),+		lazy2: F3(lazyRef2),+		lazy3: F4(lazyRef3),++		toElement: F3(toElement),+		fromElement: fromElement,++		render: createElement,+		updateAndReplace: updateAndReplace+	};+};++},{"data-set":2,"dom-delegator":8,"vdom/create-element":18,"vdom/patch":24,"vtree/diff":26,"vtree/is-vhook":29,"vtree/vnode":36,"vtree/vtext":38}],40:[function(require,module,exports){++},{}]},{},[39]);++Elm.Native = Elm.Native || {};+Elm.Native.Window = {};+Elm.Native.Window.make = function(localRuntime) {++	localRuntime.Native = localRuntime.Native || {};+	localRuntime.Native.Window = localRuntime.Native.Window || {};+	if (localRuntime.Native.Window.values)+	{+		return localRuntime.Native.Window.values;+	}++	var NS = Elm.Native.Signal.make(localRuntime);+	var Tuple2 = Elm.Native.Utils.make(localRuntime).Tuple2;+++	function getWidth()+	{+		return localRuntime.node.clientWidth;+	}+++	function getHeight()+	{+		if (localRuntime.isFullscreen())+		{+			return window.innerHeight;+		}+		return localRuntime.node.clientHeight;+	}+++	var dimensions = NS.input('Window.dimensions', Tuple2(getWidth(), getHeight()));+++	function resizeIfNeeded()+	{+		// Do not trigger event if the dimensions have not changed.+		// This should be most of the time.+		var w = getWidth();+		var h = getHeight();+		if (dimensions.value._0 === w && dimensions.value._1 === h)+		{+			return;+		}++		setTimeout(function () {+			// Check again to see if the dimensions have changed.+			// It is conceivable that the dimensions have changed+			// again while some other event was being processed.+			var w = getWidth();+			var h = getHeight();+			if (dimensions.value._0 === w && dimensions.value._1 === h)+			{+				return;+			}+			localRuntime.notify(dimensions.id, Tuple2(w,h));+		}, 0);+	}+++	localRuntime.addListener([dimensions.id], window, 'resize', resizeIfNeeded);+++	return localRuntime.Native.Window.values = {+		dimensions: dimensions,+		resizeIfNeeded: resizeIfNeeded+	};+};++Elm.Result = Elm.Result || {};+Elm.Result.make = function (_elm) {+   "use strict";+   _elm.Result = _elm.Result || {};+   if (_elm.Result.values)+   return _elm.Result.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Result",+   $Maybe = Elm.Maybe.make(_elm);+   var toMaybe = function (result) {+      return function () {+         switch (result.ctor)+         {case "Err":+            return $Maybe.Nothing;+            case "Ok":+            return $Maybe.Just(result._0);}+         _U.badCase($moduleName,+         "between lines 164 and 177");+      }();+   };+   var Err = function (a) {+      return {ctor: "Err",_0: a};+   };+   var andThen = F2(function (result,+   callback) {+      return function () {+         switch (result.ctor)+         {case "Err":+            return Err(result._0);+            case "Ok":+            return callback(result._0);}+         _U.badCase($moduleName,+         "between lines 126 and 145");+      }();+   });+   var Ok = function (a) {+      return {ctor: "Ok",_0: a};+   };+   var map = F2(function (func,+   ra) {+      return function () {+         switch (ra.ctor)+         {case "Err": return Err(ra._0);+            case "Ok":+            return Ok(func(ra._0));}+         _U.badCase($moduleName,+         "between lines 41 and 52");+      }();+   });+   var map2 = F3(function (func,+   ra,+   rb) {+      return function () {+         var _v9 = {ctor: "_Tuple2"+                   ,_0: ra+                   ,_1: rb};+         switch (_v9.ctor)+         {case "_Tuple2":+            switch (_v9._0.ctor)+              {case "Err":+                 return Err(_v9._0._0);+                 case "Ok": switch (_v9._1.ctor)+                   {case "Ok": return Ok(A2(func,+                        _v9._0._0,+                        _v9._1._0));}+                   break;}+              switch (_v9._1.ctor)+              {case "Err":+                 return Err(_v9._1._0);}+              break;}+         _U.badCase($moduleName,+         "between lines 55 and 58");+      }();+   });+   var map3 = F4(function (func,+   ra,+   rb,+   rc) {+      return function () {+         var _v16 = {ctor: "_Tuple3"+                    ,_0: ra+                    ,_1: rb+                    ,_2: rc};+         switch (_v16.ctor)+         {case "_Tuple3":+            switch (_v16._0.ctor)+              {case "Err":+                 return Err(_v16._0._0);+                 case "Ok": switch (_v16._1.ctor)+                   {case "Ok":+                      switch (_v16._2.ctor)+                        {case "Ok": return Ok(A3(func,+                             _v16._0._0,+                             _v16._1._0,+                             _v16._2._0));}+                        break;}+                   break;}+              switch (_v16._1.ctor)+              {case "Err":+                 return Err(_v16._1._0);}+              switch (_v16._2.ctor)+              {case "Err":+                 return Err(_v16._2._0);}+              break;}+         _U.badCase($moduleName,+         "between lines 63 and 67");+      }();+   });+   var map4 = F5(function (func,+   ra,+   rb,+   rc,+   rd) {+      return function () {+         var _v26 = {ctor: "_Tuple4"+                    ,_0: ra+                    ,_1: rb+                    ,_2: rc+                    ,_3: rd};+         switch (_v26.ctor)+         {case "_Tuple4":+            switch (_v26._0.ctor)+              {case "Err":+                 return Err(_v26._0._0);+                 case "Ok": switch (_v26._1.ctor)+                   {case "Ok":+                      switch (_v26._2.ctor)+                        {case "Ok":+                           switch (_v26._3.ctor)+                             {case "Ok": return Ok(A4(func,+                                  _v26._0._0,+                                  _v26._1._0,+                                  _v26._2._0,+                                  _v26._3._0));}+                             break;}+                        break;}+                   break;}+              switch (_v26._1.ctor)+              {case "Err":+                 return Err(_v26._1._0);}+              switch (_v26._2.ctor)+              {case "Err":+                 return Err(_v26._2._0);}+              switch (_v26._3.ctor)+              {case "Err":+                 return Err(_v26._3._0);}+              break;}+         _U.badCase($moduleName,+         "between lines 72 and 77");+      }();+   });+   var map5 = F6(function (func,+   ra,+   rb,+   rc,+   rd,+   re) {+      return function () {+         var _v39 = {ctor: "_Tuple5"+                    ,_0: ra+                    ,_1: rb+                    ,_2: rc+                    ,_3: rd+                    ,_4: re};+         switch (_v39.ctor)+         {case "_Tuple5":+            switch (_v39._0.ctor)+              {case "Err":+                 return Err(_v39._0._0);+                 case "Ok": switch (_v39._1.ctor)+                   {case "Ok":+                      switch (_v39._2.ctor)+                        {case "Ok":+                           switch (_v39._3.ctor)+                             {case "Ok":+                                switch (_v39._4.ctor)+                                  {case "Ok": return Ok(A5(func,+                                       _v39._0._0,+                                       _v39._1._0,+                                       _v39._2._0,+                                       _v39._3._0,+                                       _v39._4._0));}+                                  break;}+                             break;}+                        break;}+                   break;}+              switch (_v39._1.ctor)+              {case "Err":+                 return Err(_v39._1._0);}+              switch (_v39._2.ctor)+              {case "Err":+                 return Err(_v39._2._0);}+              switch (_v39._3.ctor)+              {case "Err":+                 return Err(_v39._3._0);}+              switch (_v39._4.ctor)+              {case "Err":+                 return Err(_v39._4._0);}+              break;}+         _U.badCase($moduleName,+         "between lines 82 and 123");+      }();+   });+   var formatError = F2(function (f,+   result) {+      return function () {+         switch (result.ctor)+         {case "Err":+            return Err(f(result._0));+            case "Ok":+            return Ok(result._0);}+         _U.badCase($moduleName,+         "between lines 148 and 161");+      }();+   });+   var fromMaybe = F2(function (err,+   maybe) {+      return function () {+         switch (maybe.ctor)+         {case "Just":+            return Ok(maybe._0);+            case "Nothing":+            return Err(err);}+         _U.badCase($moduleName,+         "between lines 180 and 182");+      }();+   });+   _elm.Result.values = {_op: _op+                        ,map: map+                        ,map2: map2+                        ,map3: map3+                        ,map4: map4+                        ,map5: map5+                        ,andThen: andThen+                        ,toMaybe: toMaybe+                        ,fromMaybe: fromMaybe+                        ,formatError: formatError+                        ,Ok: Ok+                        ,Err: Err};+   return _elm.Result.values;+};+Elm.SideBar = Elm.SideBar || {};+Elm.SideBar.make = function (_elm) {+   "use strict";+   _elm.SideBar = _elm.SideBar || {};+   if (_elm.SideBar.values)+   return _elm.SideBar.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "SideBar",+   $Basics = Elm.Basics.make(_elm),+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $Html = Elm.Html.make(_elm),+   $SideBar$Controls = Elm.SideBar.Controls.make(_elm),+   $SideBar$Model = Elm.SideBar.Model.make(_elm),+   $SideBar$Watches = Elm.SideBar.Watches.make(_elm),+   $Signal = Elm.Signal.make(_elm),+   $Window = Elm.Window.make(_elm);+   var showSwap = Elm.Native.Port.make(_elm).inbound("showSwap",+   "Bool",+   function (v) {+      return typeof v === "boolean" ? v : _U.badPort("a boolean (true or false)",+      v);+   });+   var watches = Elm.Native.Port.make(_elm).inboundSignal("watches",+   "List (String, String)",+   function (v) {+      return typeof v === "object" && v instanceof Array ? Elm.Native.List.make(_elm).fromArray(v.map(function (v) {+         return typeof v === "object" && v instanceof Array ? {ctor: "_Tuple2"+                                                              ,_0: typeof v[0] === "string" || typeof v[0] === "object" && v[0] instanceof String ? v[0] : _U.badPort("a string",+                                                              v[0])+                                                              ,_1: typeof v[1] === "string" || typeof v[1] === "object" && v[1] instanceof String ? v[1] : _U.badPort("a string",+                                                              v[1])} : _U.badPort("an array",+         v);+      })) : _U.badPort("an array",v);+   });+   var eventCounter = Elm.Native.Port.make(_elm).inboundSignal("eventCounter",+   "Int",+   function (v) {+      return typeof v === "number" ? v : _U.badPort("a number",+      v);+   });+   var scrubMailbox = $SideBar$Controls.scrubMailbox;+   var scrubTo = Elm.Native.Port.make(_elm).outboundSignal("scrubTo",+   function (v) {+      return v;+   },+   scrubMailbox.signal);+   var pausedInputMailbox = $SideBar$Controls.pausedInputMailbox;+   var pause = Elm.Native.Port.make(_elm).outboundSignal("pause",+   function (v) {+      return v;+   },+   pausedInputMailbox.signal);+   var restartMailbox = $SideBar$Controls.restartMailbox;+   var restart = Elm.Native.Port.make(_elm).outboundSignal("restart",+   function (v) {+      return v;+   },+   A2($Signal.map,+   $Basics.always(0),+   restartMailbox.signal));+   var permitSwapMailbox = $SideBar$Controls.permitSwapMailbox;+   var permitSwap = Elm.Native.Port.make(_elm).outboundSignal("permitSwap",+   function (v) {+      return v;+   },+   permitSwapMailbox.signal);+   var aggregateUpdates = $Signal.mergeMany(_L.fromArray([A2($Signal.map,+                                                         $Basics.always($SideBar$Model.Restart),+                                                         restartMailbox.signal)+                                                         ,A2($Signal.map,+                                                         $SideBar$Model.Pause,+                                                         pausedInputMailbox.signal)+                                                         ,A2($Signal.map,+                                                         $SideBar$Model.TotalEvents,+                                                         eventCounter)+                                                         ,A2($Signal.map,+                                                         $SideBar$Model.ScrubPosition,+                                                         scrubMailbox.signal)]));+   var scene = A3($Signal.foldp,+   $SideBar$Model.update,+   $SideBar$Model.startModel,+   aggregateUpdates);+   var view = F4(function (_v0,+   watches,+   permitSwap,+   state) {+      return function () {+         switch (_v0.ctor)+         {case "_Tuple2":+            return function () {+                 var watchView = A3($Html.toElement,+                 _v0._0,+                 _v0._1 - 150,+                 $SideBar$Watches.view(watches));+                 var controls = A4($SideBar$Controls.view,+                 {ctor: "_Tuple2"+                 ,_0: _v0._0+                 ,_1: _v0._1},+                 showSwap,+                 permitSwap,+                 state);+                 return A2($Graphics$Element.flow,+                 $Graphics$Element.down,+                 _L.fromArray([controls+                              ,watchView]));+              }();}+         _U.badCase($moduleName,+         "between lines 15 and 24");+      }();+   });+   var main = A5($Signal.map4,+   view,+   A2($Signal.map,+   function (_v4) {+      return function () {+         switch (_v4.ctor)+         {case "_Tuple2":+            return {ctor: "_Tuple2"+                   ,_0: $SideBar$Controls.panelWidth+                   ,_1: _v4._1};}+         _U.badCase($moduleName,+         "on line 32, column 29 to 51");+      }();+   },+   $Window.dimensions),+   watches,+   permitSwapMailbox.signal,+   scene);+   _elm.SideBar.values = {_op: _op+                         ,view: view+                         ,main: main+                         ,scene: scene+                         ,aggregateUpdates: aggregateUpdates+                         ,permitSwapMailbox: permitSwapMailbox+                         ,restartMailbox: restartMailbox+                         ,pausedInputMailbox: pausedInputMailbox+                         ,scrubMailbox: scrubMailbox};+   return _elm.SideBar.values;+};+Elm.SideBar = Elm.SideBar || {};+Elm.SideBar.Controls = Elm.SideBar.Controls || {};+Elm.SideBar.Controls.make = function (_elm) {+   "use strict";+   _elm.SideBar = _elm.SideBar || {};+   _elm.SideBar.Controls = _elm.SideBar.Controls || {};+   if (_elm.SideBar.Controls.values)+   return _elm.SideBar.Controls.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "SideBar.Controls",+   $Basics = Elm.Basics.make(_elm),+   $Color = Elm.Color.make(_elm),+   $Graphics$Collage = Elm.Graphics.Collage.make(_elm),+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $Graphics$Input = Elm.Graphics.Input.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $SideBar$Model = Elm.SideBar.Model.make(_elm),+   $Signal = Elm.Signal.make(_elm),+   $Slider = Elm.Slider.make(_elm),+   $Text = Elm.Text.make(_elm);+   var roundedSquare = F3(function (side,+   radius,+   toForm) {+      return function () {+         var formedCircle = toForm($Graphics$Collage.circle(radius));+         var shortSide = side - 2 * radius;+         var xRect = toForm(A2($Graphics$Collage.rect,+         side,+         shortSide));+         var yRect = toForm(A2($Graphics$Collage.rect,+         shortSide,+         side));+         var circleOffset = shortSide / 2;+         var tl = $Graphics$Collage.move({ctor: "_Tuple2"+                                         ,_0: 0 - circleOffset+                                         ,_1: circleOffset})(formedCircle);+         var tr = $Graphics$Collage.move({ctor: "_Tuple2"+                                         ,_0: circleOffset+                                         ,_1: circleOffset})(formedCircle);+         var bl = $Graphics$Collage.move({ctor: "_Tuple2"+                                         ,_0: 0 - circleOffset+                                         ,_1: 0 - circleOffset})(formedCircle);+         var br = $Graphics$Collage.move({ctor: "_Tuple2"+                                         ,_0: circleOffset+                                         ,_1: 0 - circleOffset})(formedCircle);+         return $Graphics$Collage.group(_L.fromArray([xRect+                                                     ,yRect+                                                     ,tl+                                                     ,tr+                                                     ,bl+                                                     ,br]));+      }();+   });+   var scrubMailbox = $Signal.mailbox(0);+   var scrubSlider = F2(function (_v0,+   state) {+      return function () {+         switch (_v0.ctor)+         {case "_Tuple2":+            return function () {+                 var sliderLength = _v0._0;+                 var sliderStyle = _U.replace([["length"+                                               ,sliderLength]+                                              ,["max"+                                               ,$Basics.toFloat(state.totalEvents)]+                                              ,["value"+                                               ,$Basics.toFloat(state.scrubPosition)]],+                 $Slider.defaultSlider);+                 return A3($Graphics$Element.container,+                 sliderLength,+                 20,+                 $Graphics$Element.middle)(A2($Slider.slider,+                 function (n) {+                    return A2($Signal.message,+                    scrubMailbox.address,+                    $Basics.round(n));+                 },+                 sliderStyle));+              }();}+         _U.badCase($moduleName,+         "between lines 140 and 150");+      }();+   });+   var permitSwapMailbox = $Signal.mailbox(true);+   var restartMailbox = $Signal.mailbox({ctor: "_Tuple0"});+   var pausedInputMailbox = $Signal.mailbox(false);+   var myButton = F2(function (message,+   name) {+      return function () {+         var img = function (state) {+            return A3($Graphics$Element.image,+            40,+            40,+            A2($Basics._op["++"],+            "/_reactor/debugger/",+            A2($Basics._op["++"],+            name,+            A2($Basics._op["++"],+            "-button-",+            A2($Basics._op["++"],+            state,+            ".png")))));+         };+         return A4($Graphics$Input.customButton,+         message,+         img("up"),+         img("hover"),+         img("down"));+      }();+   });+   var playButton = A2(myButton,+   A2($Signal.message,+   pausedInputMailbox.address,+   false),+   "play");+   var pauseButton = A2(myButton,+   A2($Signal.message,+   pausedInputMailbox.address,+   true),+   "pause");+   var restartButton = A2(myButton,+   A2($Signal.message,+   restartMailbox.address,+   {ctor: "_Tuple0"}),+   "restart");+   var textTypefaces = _L.fromArray(["Gotham"+                                    ,"Futura"+                                    ,"Lucida Grande"+                                    ,"sans-serif"]);+   var darkGrey = A3($Color.rgb,+   74,+   74,+   74);+   var lightGrey = A3($Color.rgb,+   228,+   228,+   228);+   var dataStyle = F3(function (typefaces,+   height,+   string) {+      return function () {+         var $default = $Text.defaultStyle;+         var myStyle = _U.replace([["typeface"+                                   ,typefaces]+                                  ,["color",lightGrey]+                                  ,["height"+                                   ,$Maybe.Just(height)]],+         $default);+         return A2($Text.style,+         myStyle,+         $Text.fromString(string));+      }();+   });+   var textStyle = function (string) {+      return A3(dataStyle,+      textTypefaces,+      12,+      string);+   };+   var blue = A3($Color.rgb,+   28,+   129,+   218);+   var swapButton = function (permitSwap) {+      return function () {+         var info = $Graphics$Element.leftAligned(textStyle("swap"));+         var radius = 4;+         var hsWidth = 25;+         var bgButton = A3(roundedSquare,+         hsWidth,+         radius,+         $Graphics$Collage.filled(lightGrey));+         var trueButton = _L.fromArray([bgButton+                                       ,A3(roundedSquare,+                                       22,+                                       radius,+                                       $Graphics$Collage.filled(blue))]);+         var falseButtonClick = trueButton;+         var trueButtonHover = _L.fromArray([bgButton+                                            ,A3(roundedSquare,+                                            22,+                                            radius,+                                            $Graphics$Collage.filled(blue))+                                            ,$Graphics$Collage.alpha(0.1)(A3(roundedSquare,+                                            22,+                                            radius,+                                            $Graphics$Collage.filled(darkGrey)))]);+         var falseButton = _L.fromArray([bgButton+                                        ,A3(roundedSquare,+                                        22,+                                        radius,+                                        $Graphics$Collage.filled(darkGrey))]);+         var trueButtonClick = falseButton;+         var falseButtonHover = _L.fromArray([bgButton+                                             ,A3(roundedSquare,+                                             22,+                                             radius,+                                             $Graphics$Collage.filled(darkGrey))+                                             ,$Graphics$Collage.alpha(0.1)(A3(roundedSquare,+                                             22,+                                             radius,+                                             $Graphics$Collage.filled(blue)))]);+         var button = function () {+            switch (permitSwap)+            {case false:+               return A4($Graphics$Input.customButton,+                 A2($Signal.message,+                 permitSwapMailbox.address,+                 true),+                 A3($Graphics$Collage.collage,+                 hsWidth,+                 hsWidth,+                 falseButton),+                 A3($Graphics$Collage.collage,+                 hsWidth,+                 hsWidth,+                 falseButtonHover),+                 A3($Graphics$Collage.collage,+                 hsWidth,+                 hsWidth,+                 falseButtonClick));+               case true:+               return A4($Graphics$Input.customButton,+                 A2($Signal.message,+                 permitSwapMailbox.address,+                 false),+                 A3($Graphics$Collage.collage,+                 hsWidth,+                 hsWidth,+                 trueButton),+                 A3($Graphics$Collage.collage,+                 hsWidth,+                 hsWidth,+                 trueButtonHover),+                 A3($Graphics$Collage.collage,+                 hsWidth,+                 hsWidth,+                 trueButtonClick));}+            _U.badCase($moduleName,+            "between lines 116 and 128");+         }();+         return A2($Graphics$Element.flow,+         $Graphics$Element.right,+         _L.fromArray([info+                      ,A2($Graphics$Element.spacer,+                      10,+                      1)+                      ,button]));+      }();+   };+   var panelWidth = 275;+   var textHeight = 20;+   var sliderMinMaxText = F2(function (w,+   state) {+      return function () {+         var sliderTotalEvents = A3($Graphics$Element.container,+         w,+         textHeight,+         $Graphics$Element.topRight)($Graphics$Element.rightAligned(textStyle($Basics.toString(state.totalEvents))));+         var sliderStartText = A3($Graphics$Element.container,+         w,+         textHeight,+         $Graphics$Element.topLeft)($Graphics$Element.leftAligned(textStyle("0")));+         return A2($Graphics$Element.flow,+         $Graphics$Element.outward,+         _L.fromArray([sliderStartText+                      ,sliderTotalEvents]));+      }();+   });+   var sideMargin = 2 * 20;+   var sliderEventText = F2(function (w,+   state) {+      return function () {+         var text$ = $Graphics$Element.centered(textStyle($Basics.toString(state.scrubPosition)));+         var yPos = $Graphics$Element.absolute($Basics.round(textHeight / 2));+         var totalEvents = $Basics.toFloat(state.totalEvents);+         var scrubPosition = $Basics.toFloat(state.scrubPosition);+         var textWidthOffset = 14;+         var midWidth = $Basics.toFloat(w) - sideMargin - textWidthOffset;+         var leftDistance = function () {+            switch (totalEvents)+            {case 0:+               return sideMargin / 2 + textWidthOffset / 2;}+            return scrubPosition / totalEvents * midWidth + sideMargin / 2 + textWidthOffset / 2;+         }();+         var xPos = $Graphics$Element.absolute($Basics.round(leftDistance));+         var textPosition = A2($Graphics$Element.middleAt,+         xPos,+         yPos);+         return A4($Graphics$Element.container,+         w,+         textHeight,+         textPosition,+         text$);+      }();+   });+   var buttonWidth = 40;+   var buttonHeight = 40;+   var view = F4(function (_v6,+   showSwap,+   permitSwap,+   state) {+      return function () {+         switch (_v6.ctor)+         {case "_Tuple2":+            return function () {+                 var bar = A2($Graphics$Element.opacity,+                 0.3,+                 A2($Graphics$Element.color,+                 lightGrey,+                 A2($Graphics$Element.spacer,+                 _v6._0,+                 1)));+                 var fittedSwapButton = showSwap ? A3($Graphics$Element.container,+                 _v6._0 - 2 * buttonWidth - sideMargin,+                 buttonHeight,+                 $Graphics$Element.middle)(swapButton(permitSwap)) : A2($Graphics$Element.spacer,+                 2 * buttonWidth,+                 1);+                 var buttons = A2($Graphics$Element.flow,+                 $Graphics$Element.right,+                 _L.fromArray([restartButton+                              ,fittedSwapButton+                              ,state.paused ? playButton : pauseButton]));+                 var buttonContainer = A4($Graphics$Element.container,+                 _v6._0,+                 buttonHeight,+                 $Graphics$Element.midTop,+                 buttons);+                 var buttonSliderSpaceHeight = 10;+                 var topSpacerHeight = 15;+                 var midWidth = _v6._0 - sideMargin;+                 var centeredSliderContainer = A3($Graphics$Element.container,+                 _v6._0,+                 24 + textHeight,+                 $Graphics$Element.midTop)(A2($Graphics$Element.flow,+                 $Graphics$Element.down,+                 _L.fromArray([A2(scrubSlider,+                              {ctor: "_Tuple2"+                              ,_0: midWidth+                              ,_1: _v6._1},+                              state)+                              ,A2(sliderMinMaxText,+                              midWidth,+                              state)])));+                 var slider = A3($Graphics$Element.container,+                 _v6._0,+                 24 + 2 * textHeight,+                 $Graphics$Element.midTop)(A2($Graphics$Element.flow,+                 $Graphics$Element.down,+                 _L.fromArray([A2(sliderEventText,+                              _v6._0,+                              state)+                              ,centeredSliderContainer])));+                 var controls = A2($Graphics$Element.flow,+                 $Graphics$Element.down,+                 _L.fromArray([A2($Graphics$Element.spacer,+                              midWidth,+                              topSpacerHeight)+                              ,buttonContainer+                              ,A2($Graphics$Element.spacer,+                              midWidth,+                              buttonSliderSpaceHeight)+                              ,slider+                              ,A2($Graphics$Element.spacer,+                              midWidth,+                              10)]));+                 return A2($Graphics$Element.flow,+                 $Graphics$Element.down,+                 _L.fromArray([controls,bar]));+              }();}+         _U.badCase($moduleName,+         "between lines 208 and 260");+      }();+   });+   _elm.SideBar.Controls.values = {_op: _op+                                  ,buttonHeight: buttonHeight+                                  ,buttonWidth: buttonWidth+                                  ,sideMargin: sideMargin+                                  ,textHeight: textHeight+                                  ,panelWidth: panelWidth+                                  ,blue: blue+                                  ,lightGrey: lightGrey+                                  ,darkGrey: darkGrey+                                  ,dataStyle: dataStyle+                                  ,textTypefaces: textTypefaces+                                  ,textStyle: textStyle+                                  ,myButton: myButton+                                  ,playButton: playButton+                                  ,pauseButton: pauseButton+                                  ,pausedInputMailbox: pausedInputMailbox+                                  ,restartButton: restartButton+                                  ,restartMailbox: restartMailbox+                                  ,swapButton: swapButton+                                  ,permitSwapMailbox: permitSwapMailbox+                                  ,scrubSlider: scrubSlider+                                  ,scrubMailbox: scrubMailbox+                                  ,sliderEventText: sliderEventText+                                  ,sliderMinMaxText: sliderMinMaxText+                                  ,view: view+                                  ,roundedSquare: roundedSquare};+   return _elm.SideBar.Controls.values;+};+Elm.SideBar = Elm.SideBar || {};+Elm.SideBar.Model = Elm.SideBar.Model || {};+Elm.SideBar.Model.make = function (_elm) {+   "use strict";+   _elm.SideBar = _elm.SideBar || {};+   _elm.SideBar.Model = _elm.SideBar.Model || {};+   if (_elm.SideBar.Model.values)+   return _elm.SideBar.Model.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "SideBar.Model";+   var update = F2(function (action,+   state) {+      return function () {+         switch (action.ctor)+         {case "Pause":+            return _U.replace([["paused"+                               ,action._0]+                              ,["totalEvents"+                               ,action._0 ? state.totalEvents : state.scrubPosition]],+              state);+            case "Restart":+            return _U.replace([["totalEvents"+                               ,0]+                              ,["scrubPosition",0]],+              state);+            case "ScrubPosition":+            return _U.replace([["scrubPosition"+                               ,action._0]+                              ,["paused",true]],+              state);+            case "TotalEvents":+            return _U.replace([["totalEvents"+                               ,action._0]+                              ,["scrubPosition",action._0]],+              state);}+         _U.badCase($moduleName,+         "between lines 28 and 52");+      }();+   });+   var startModel = {_: {}+                    ,paused: false+                    ,scrubPosition: 0+                    ,totalEvents: 0};+   var Model = F3(function (a,+   b,+   c) {+      return {_: {}+             ,paused: a+             ,scrubPosition: c+             ,totalEvents: b};+   });+   var ScrubPosition = function (a) {+      return {ctor: "ScrubPosition"+             ,_0: a};+   };+   var TotalEvents = function (a) {+      return {ctor: "TotalEvents"+             ,_0: a};+   };+   var Pause = function (a) {+      return {ctor: "Pause",_0: a};+   };+   var Restart = {ctor: "Restart"};+   _elm.SideBar.Model.values = {_op: _op+                               ,Restart: Restart+                               ,Pause: Pause+                               ,TotalEvents: TotalEvents+                               ,ScrubPosition: ScrubPosition+                               ,Model: Model+                               ,startModel: startModel+                               ,update: update};+   return _elm.SideBar.Model.values;+};+Elm.SideBar = Elm.SideBar || {};+Elm.SideBar.Watches = Elm.SideBar.Watches || {};+Elm.SideBar.Watches.make = function (_elm) {+   "use strict";+   _elm.SideBar = _elm.SideBar || {};+   _elm.SideBar.Watches = _elm.SideBar.Watches || {};+   if (_elm.SideBar.Watches.values)+   return _elm.SideBar.Watches.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "SideBar.Watches",+   $Basics = Elm.Basics.make(_elm),+   $Html = Elm.Html.make(_elm),+   $Html$Attributes = Elm.Html.Attributes.make(_elm),+   $List = Elm.List.make(_elm),+   $Markdown = Elm.Markdown.make(_elm);+   var noWatches = $Markdown.toHtml("\n\n### <span style=\"font-family: Gotham, Futura, \'Lucida Grande\', sans-serif; font-size: 12pt; color: rgb(170,170,170)\"> You don\'t have any watches! </span>\n\n<span style=\"color: rgb(170,170,170)\">\n<span style=\"font-family: Gotham, Futura, \'Lucida Grande\', sans-serif; font-size: 10pt; color: rgb(170,170,170)\">\nUse [<span style=\"text-decoration:underline; color: rgb(170,170,170)\">Debug.watch</span>](http://package.elm-lang.org/packages/elm-lang/core/latest/Debug#watch)\nto show any value. <br>\n`watch : String -> a -> a`</span>\n\n<span style=\"font-family: Gotham, Futura, \'Lucida Grande\', sans-serif; font-size: 10pt; color: rgb(170,170,170)\">\nUse [<span style=\"text-decoration:underline; color: rgb(170,170,170)\">Debug.watchSummary</span>](http://package.elm-lang.org/packages/elm-lang/core/latest/Debug#watchSummary) to show a <br>\nsummary or subvalue of any value. </span><br>\n\n");+   var valueAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"+                                                                            ,_0: "margin"+                                                                            ,_1: "0 0 0 10px"}]))]);+   var viewValue = function (value) {+      return A2($Html.pre,+      valueAttributes,+      _L.fromArray([$Html.text(value)]));+   };+   var nameAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"+                                                                           ,_0: "margin"+                                                                           ,_1: "20px 0 10px"}+                                                                          ,{ctor: "_Tuple2"+                                                                           ,_0: "font-weight"+                                                                           ,_1: "bold"}+                                                                          ,{ctor: "_Tuple2"+                                                                           ,_0: "font-family"+                                                                           ,_1: "Gotham, Futura, \'Lucida Grande\', sans-serif"}]))]);+   var viewName = function (name) {+      return A2($Html.div,+      nameAttributes,+      _L.fromArray([$Html.text(name)]));+   };+   var watchAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"+                                                                            ,_0: "color"+                                                                            ,_1: "rgb(228, 228, 228)"}]))]);+   var viewWatch = function (_v0) {+      return function () {+         switch (_v0.ctor)+         {case "_Tuple2":+            return A2($Html.div,+              watchAttributes,+              _L.fromArray([viewName(_v0._0)+                           ,viewValue(_v0._1)]));}+         _U.badCase($moduleName,+         "on line 32, column 3 to 55");+      }();+   };+   var viewAttributes = _L.fromArray([$Html$Attributes.style(_L.fromArray([{ctor: "_Tuple2"+                                                                           ,_0: "overflow-y"+                                                                           ,_1: "auto"}+                                                                          ,{ctor: "_Tuple2"+                                                                           ,_0: "overflow-x"+                                                                           ,_1: "hidden"}+                                                                          ,{ctor: "_Tuple2"+                                                                           ,_0: "height"+                                                                           ,_1: "100%"}+                                                                          ,{ctor: "_Tuple2"+                                                                           ,_0: "padding"+                                                                           ,_1: "0 20px"}]))]);+   var view = function (watches) {+      return $Html.div(viewAttributes)(function () {+         switch (watches.ctor)+         {case "[]":+            return _L.fromArray([noWatches]);}+         return A2($List.map,+         viewWatch,+         watches);+      }());+   };+   _elm.SideBar.Watches.values = {_op: _op+                                 ,view: view+                                 ,viewAttributes: viewAttributes+                                 ,viewWatch: viewWatch+                                 ,watchAttributes: watchAttributes+                                 ,viewName: viewName+                                 ,nameAttributes: nameAttributes+                                 ,viewValue: viewValue+                                 ,valueAttributes: valueAttributes+                                 ,noWatches: noWatches};+   return _elm.SideBar.Watches.values;+};+Elm.Signal = Elm.Signal || {};+Elm.Signal.make = function (_elm) {+   "use strict";+   _elm.Signal = _elm.Signal || {};+   if (_elm.Signal.values)+   return _elm.Signal.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Signal",+   $Basics = Elm.Basics.make(_elm),+   $Debug = Elm.Debug.make(_elm),+   $List = Elm.List.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Signal = Elm.Native.Signal.make(_elm),+   $Task = Elm.Task.make(_elm);+   var send = F2(function (_v0,+   value) {+      return function () {+         switch (_v0.ctor)+         {case "Address":+            return A2($Task.onError,+              _v0._0(value),+              function (_v3) {+                 return function () {+                    return $Task.succeed({ctor: "_Tuple0"});+                 }();+              });}+         _U.badCase($moduleName,+         "between lines 370 and 371");+      }();+   });+   var Message = function (a) {+      return {ctor: "Message"+             ,_0: a};+   };+   var message = F2(function (_v5,+   value) {+      return function () {+         switch (_v5.ctor)+         {case "Address":+            return Message(_v5._0(value));}+         _U.badCase($moduleName,+         "on line 352, column 5 to 24");+      }();+   });+   var mailbox = $Native$Signal.mailbox;+   var Address = function (a) {+      return {ctor: "Address"+             ,_0: a};+   };+   var forwardTo = F2(function (_v8,+   f) {+      return function () {+         switch (_v8.ctor)+         {case "Address":+            return Address(function (x) {+                 return _v8._0(f(x));+              });}+         _U.badCase($moduleName,+         "on line 339, column 5 to 29");+      }();+   });+   var Mailbox = F2(function (a,+   b) {+      return {_: {}+             ,address: a+             ,signal: b};+   });+   var sampleOn = $Native$Signal.sampleOn;+   var dropRepeats = $Native$Signal.dropRepeats;+   var filterMap = $Native$Signal.filterMap;+   var filter = F3(function (isOk,+   base,+   signal) {+      return A3(filterMap,+      function (value) {+         return isOk(value) ? $Maybe.Just(value) : $Maybe.Nothing;+      },+      base,+      signal);+   });+   var merge = F2(function (left,+   right) {+      return A3($Native$Signal.genericMerge,+      $Basics.always,+      left,+      right);+   });+   var mergeMany = function (signalList) {+      return function () {+         var _v11 = $List.reverse(signalList);+         switch (_v11.ctor)+         {case "::":+            return A3($List.foldl,+              merge,+              _v11._0,+              _v11._1);+            case "[]":+            return $Debug.crash("mergeMany was given an empty list!");}+         _U.badCase($moduleName,+         "between lines 177 and 197");+      }();+   };+   var foldp = $Native$Signal.foldp;+   var map5 = $Native$Signal.map5;+   var map4 = $Native$Signal.map4;+   var map3 = $Native$Signal.map3;+   var map2 = $Native$Signal.map2;+   _op["~"] = F2(function (funcs,+   args) {+      return A3(map2,+      F2(function (f,v) {+         return f(v);+      }),+      funcs,+      args);+   });+   var map = $Native$Signal.map;+   _op["<~"] = map;+   var constant = $Native$Signal.constant;+   var Signal = {ctor: "Signal"};+   _elm.Signal.values = {_op: _op+                        ,merge: merge+                        ,mergeMany: mergeMany+                        ,map: map+                        ,map2: map2+                        ,map3: map3+                        ,map4: map4+                        ,map5: map5+                        ,constant: constant+                        ,dropRepeats: dropRepeats+                        ,filter: filter+                        ,filterMap: filterMap+                        ,sampleOn: sampleOn+                        ,foldp: foldp+                        ,mailbox: mailbox+                        ,send: send+                        ,message: message+                        ,forwardTo: forwardTo+                        ,Mailbox: Mailbox};+   return _elm.Signal.values;+};+Elm.Slider = Elm.Slider || {};+Elm.Slider.make = function (_elm) {+   "use strict";+   _elm.Slider = _elm.Slider || {};+   if (_elm.Slider.values)+   return _elm.Slider.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Slider",+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $Native$Slider = Elm.Native.Slider.make(_elm),+   $Signal = Elm.Signal.make(_elm);+   var slider = $Native$Slider.slider;+   var defaultSlider = {_: {}+                       ,disabled: false+                       ,horizontal: true+                       ,length: 100+                       ,max: 100+                       ,min: 0+                       ,step: 1+                       ,value: 0};+   var SliderStyle = F7(function (a,+   b,+   c,+   d,+   e,+   f,+   g) {+      return {_: {}+             ,disabled: b+             ,horizontal: a+             ,length: c+             ,max: e+             ,min: d+             ,step: f+             ,value: g};+   });+   _elm.Slider.values = {_op: _op+                        ,SliderStyle: SliderStyle+                        ,defaultSlider: defaultSlider+                        ,slider: slider};+   return _elm.Slider.values;+};+Elm.String = Elm.String || {};+Elm.String.make = function (_elm) {+   "use strict";+   _elm.String = _elm.String || {};+   if (_elm.String.values)+   return _elm.String.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "String",+   $Maybe = Elm.Maybe.make(_elm),+   $Native$String = Elm.Native.String.make(_elm),+   $Result = Elm.Result.make(_elm);+   var fromList = $Native$String.fromList;+   var toList = $Native$String.toList;+   var toFloat = $Native$String.toFloat;+   var toInt = $Native$String.toInt;+   var indices = $Native$String.indexes;+   var indexes = $Native$String.indexes;+   var endsWith = $Native$String.endsWith;+   var startsWith = $Native$String.startsWith;+   var contains = $Native$String.contains;+   var all = $Native$String.all;+   var any = $Native$String.any;+   var toLower = $Native$String.toLower;+   var toUpper = $Native$String.toUpper;+   var lines = $Native$String.lines;+   var words = $Native$String.words;+   var trimRight = $Native$String.trimRight;+   var trimLeft = $Native$String.trimLeft;+   var trim = $Native$String.trim;+   var padRight = $Native$String.padRight;+   var padLeft = $Native$String.padLeft;+   var pad = $Native$String.pad;+   var dropRight = $Native$String.dropRight;+   var dropLeft = $Native$String.dropLeft;+   var right = $Native$String.right;+   var left = $Native$String.left;+   var slice = $Native$String.slice;+   var repeat = $Native$String.repeat;+   var join = $Native$String.join;+   var split = $Native$String.split;+   var foldr = $Native$String.foldr;+   var foldl = $Native$String.foldl;+   var reverse = $Native$String.reverse;+   var filter = $Native$String.filter;+   var map = $Native$String.map;+   var length = $Native$String.length;+   var concat = $Native$String.concat;+   var append = $Native$String.append;+   var uncons = $Native$String.uncons;+   var cons = $Native$String.cons;+   var fromChar = function ($char) {+      return A2(cons,$char,"");+   };+   var isEmpty = $Native$String.isEmpty;+   _elm.String.values = {_op: _op+                        ,isEmpty: isEmpty+                        ,length: length+                        ,reverse: reverse+                        ,repeat: repeat+                        ,cons: cons+                        ,uncons: uncons+                        ,fromChar: fromChar+                        ,append: append+                        ,concat: concat+                        ,split: split+                        ,join: join+                        ,words: words+                        ,lines: lines+                        ,slice: slice+                        ,left: left+                        ,right: right+                        ,dropLeft: dropLeft+                        ,dropRight: dropRight+                        ,contains: contains+                        ,startsWith: startsWith+                        ,endsWith: endsWith+                        ,indexes: indexes+                        ,indices: indices+                        ,toInt: toInt+                        ,toFloat: toFloat+                        ,toList: toList+                        ,fromList: fromList+                        ,toUpper: toUpper+                        ,toLower: toLower+                        ,pad: pad+                        ,padLeft: padLeft+                        ,padRight: padRight+                        ,trim: trim+                        ,trimLeft: trimLeft+                        ,trimRight: trimRight+                        ,map: map+                        ,filter: filter+                        ,foldl: foldl+                        ,foldr: foldr+                        ,any: any+                        ,all: all};+   return _elm.String.values;+};+Elm.Task = Elm.Task || {};+Elm.Task.make = function (_elm) {+   "use strict";+   _elm.Task = _elm.Task || {};+   if (_elm.Task.values)+   return _elm.Task.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Task",+   $List = Elm.List.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Task = Elm.Native.Task.make(_elm),+   $Result = Elm.Result.make(_elm);+   var sleep = $Native$Task.sleep;+   var spawn = $Native$Task.spawn;+   var ThreadID = function (a) {+      return {ctor: "ThreadID"+             ,_0: a};+   };+   var onError = $Native$Task.catch_;+   var andThen = $Native$Task.andThen;+   var fail = $Native$Task.fail;+   var mapError = F2(function (f,+   promise) {+      return A2(onError,+      promise,+      function (err) {+         return fail(f(err));+      });+   });+   var succeed = $Native$Task.succeed;+   var map = F2(function (func,+   promiseA) {+      return A2(andThen,+      promiseA,+      function (a) {+         return succeed(func(a));+      });+   });+   var map2 = F3(function (func,+   promiseA,+   promiseB) {+      return A2(andThen,+      promiseA,+      function (a) {+         return A2(andThen,+         promiseB,+         function (b) {+            return succeed(A2(func,a,b));+         });+      });+   });+   var map3 = F4(function (func,+   promiseA,+   promiseB,+   promiseC) {+      return A2(andThen,+      promiseA,+      function (a) {+         return A2(andThen,+         promiseB,+         function (b) {+            return A2(andThen,+            promiseC,+            function (c) {+               return succeed(A3(func,+               a,+               b,+               c));+            });+         });+      });+   });+   var map4 = F5(function (func,+   promiseA,+   promiseB,+   promiseC,+   promiseD) {+      return A2(andThen,+      promiseA,+      function (a) {+         return A2(andThen,+         promiseB,+         function (b) {+            return A2(andThen,+            promiseC,+            function (c) {+               return A2(andThen,+               promiseD,+               function (d) {+                  return succeed(A4(func,+                  a,+                  b,+                  c,+                  d));+               });+            });+         });+      });+   });+   var map5 = F6(function (func,+   promiseA,+   promiseB,+   promiseC,+   promiseD,+   promiseE) {+      return A2(andThen,+      promiseA,+      function (a) {+         return A2(andThen,+         promiseB,+         function (b) {+            return A2(andThen,+            promiseC,+            function (c) {+               return A2(andThen,+               promiseD,+               function (d) {+                  return A2(andThen,+                  promiseE,+                  function (e) {+                     return succeed(A5(func,+                     a,+                     b,+                     c,+                     d,+                     e));+                  });+               });+            });+         });+      });+   });+   var andMap = F2(function (promiseFunc,+   promiseValue) {+      return A2(andThen,+      promiseFunc,+      function (func) {+         return A2(andThen,+         promiseValue,+         function (value) {+            return succeed(func(value));+         });+      });+   });+   var sequence = function (promises) {+      return function () {+         switch (promises.ctor)+         {case "::": return A3(map2,+              F2(function (x,y) {+                 return A2($List._op["::"],+                 x,+                 y);+              }),+              promises._0,+              sequence(promises._1));+            case "[]":+            return succeed(_L.fromArray([]));}+         _U.badCase($moduleName,+         "between lines 101 and 106");+      }();+   };+   var toMaybe = function (task) {+      return A2(onError,+      A2(map,$Maybe.Just,task),+      function (_v3) {+         return function () {+            return succeed($Maybe.Nothing);+         }();+      });+   };+   var fromMaybe = F2(function ($default,+   maybe) {+      return function () {+         switch (maybe.ctor)+         {case "Just":+            return succeed(maybe._0);+            case "Nothing":+            return fail($default);}+         _U.badCase($moduleName,+         "between lines 139 and 141");+      }();+   });+   var toResult = function (task) {+      return A2(onError,+      A2(map,$Result.Ok,task),+      function (msg) {+         return succeed($Result.Err(msg));+      });+   };+   var fromResult = function (result) {+      return function () {+         switch (result.ctor)+         {case "Err":+            return fail(result._0);+            case "Ok":+            return succeed(result._0);}+         _U.badCase($moduleName,+         "between lines 151 and 153");+      }();+   };+   var Task = {ctor: "Task"};+   _elm.Task.values = {_op: _op+                      ,succeed: succeed+                      ,fail: fail+                      ,map: map+                      ,map2: map2+                      ,map3: map3+                      ,map4: map4+                      ,map5: map5+                      ,andMap: andMap+                      ,sequence: sequence+                      ,andThen: andThen+                      ,onError: onError+                      ,mapError: mapError+                      ,toMaybe: toMaybe+                      ,fromMaybe: fromMaybe+                      ,toResult: toResult+                      ,fromResult: fromResult+                      ,spawn: spawn+                      ,sleep: sleep};+   return _elm.Task.values;+};+Elm.Text = Elm.Text || {};+Elm.Text.make = function (_elm) {+   "use strict";+   _elm.Text = _elm.Text || {};+   if (_elm.Text.values)+   return _elm.Text.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Text",+   $Color = Elm.Color.make(_elm),+   $List = Elm.List.make(_elm),+   $Maybe = Elm.Maybe.make(_elm),+   $Native$Text = Elm.Native.Text.make(_elm);+   var line = $Native$Text.line;+   var italic = $Native$Text.italic;+   var bold = $Native$Text.bold;+   var color = $Native$Text.color;+   var height = $Native$Text.height;+   var link = $Native$Text.link;+   var monospace = $Native$Text.monospace;+   var typeface = $Native$Text.typeface;+   var style = $Native$Text.style;+   var append = $Native$Text.append;+   var fromString = $Native$Text.fromString;+   var empty = fromString("");+   var concat = function (texts) {+      return A3($List.foldr,+      append,+      empty,+      texts);+   };+   var join = F2(function (seperator,+   texts) {+      return concat(A2($List.intersperse,+      seperator,+      texts));+   });+   var defaultStyle = {_: {}+                      ,bold: false+                      ,color: $Color.black+                      ,height: $Maybe.Nothing+                      ,italic: false+                      ,line: $Maybe.Nothing+                      ,typeface: _L.fromArray([])};+   var Style = F6(function (a,+   b,+   c,+   d,+   e,+   f) {+      return {_: {}+             ,bold: d+             ,color: c+             ,height: b+             ,italic: e+             ,line: f+             ,typeface: a};+   });+   var Through = {ctor: "Through"};+   var Over = {ctor: "Over"};+   var Under = {ctor: "Under"};+   var Text = {ctor: "Text"};+   _elm.Text.values = {_op: _op+                      ,fromString: fromString+                      ,empty: empty+                      ,append: append+                      ,concat: concat+                      ,join: join+                      ,link: link+                      ,style: style+                      ,defaultStyle: defaultStyle+                      ,typeface: typeface+                      ,monospace: monospace+                      ,height: height+                      ,color: color+                      ,bold: bold+                      ,italic: italic+                      ,line: line+                      ,Style: Style+                      ,Under: Under+                      ,Over: Over+                      ,Through: Through};+   return _elm.Text.values;+};+Elm.Transform2D = Elm.Transform2D || {};+Elm.Transform2D.make = function (_elm) {+   "use strict";+   _elm.Transform2D = _elm.Transform2D || {};+   if (_elm.Transform2D.values)+   return _elm.Transform2D.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Transform2D",+   $Native$Transform2D = Elm.Native.Transform2D.make(_elm);+   var multiply = $Native$Transform2D.multiply;+   var rotation = $Native$Transform2D.rotation;+   var matrix = $Native$Transform2D.matrix;+   var translation = F2(function (x,+   y) {+      return A6(matrix,+      1,+      0,+      0,+      1,+      x,+      y);+   });+   var scale = function (s) {+      return A6(matrix,+      s,+      0,+      0,+      s,+      0,+      0);+   };+   var scaleX = function (x) {+      return A6(matrix,+      x,+      0,+      0,+      1,+      0,+      0);+   };+   var scaleY = function (y) {+      return A6(matrix,+      1,+      0,+      0,+      y,+      0,+      0);+   };+   var identity = $Native$Transform2D.identity;+   var Transform2D = {ctor: "Transform2D"};+   _elm.Transform2D.values = {_op: _op+                             ,identity: identity+                             ,matrix: matrix+                             ,multiply: multiply+                             ,rotation: rotation+                             ,translation: translation+                             ,scale: scale+                             ,scaleX: scaleX+                             ,scaleY: scaleY};+   return _elm.Transform2D.values;+};+Elm.VirtualDom = Elm.VirtualDom || {};+Elm.VirtualDom.make = function (_elm) {+   "use strict";+   _elm.VirtualDom = _elm.VirtualDom || {};+   if (_elm.VirtualDom.values)+   return _elm.VirtualDom.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "VirtualDom",+   $Graphics$Element = Elm.Graphics.Element.make(_elm),+   $Json$Decode = Elm.Json.Decode.make(_elm),+   $Native$VirtualDom = Elm.Native.VirtualDom.make(_elm),+   $Signal = Elm.Signal.make(_elm);+   var lazy3 = $Native$VirtualDom.lazy3;+   var lazy2 = $Native$VirtualDom.lazy2;+   var lazy = $Native$VirtualDom.lazy;+   var on = $Native$VirtualDom.on;+   var attribute = $Native$VirtualDom.attribute;+   var property = $Native$VirtualDom.property;+   var Property = {ctor: "Property"};+   var fromElement = $Native$VirtualDom.fromElement;+   var toElement = $Native$VirtualDom.toElement;+   var text = $Native$VirtualDom.text;+   var node = $Native$VirtualDom.node;+   var Node = {ctor: "Node"};+   _elm.VirtualDom.values = {_op: _op+                            ,Node: Node+                            ,node: node+                            ,text: text+                            ,toElement: toElement+                            ,fromElement: fromElement+                            ,Property: Property+                            ,property: property+                            ,attribute: attribute+                            ,on: on+                            ,lazy: lazy+                            ,lazy2: lazy2+                            ,lazy3: lazy3};+   return _elm.VirtualDom.values;+};+Elm.Window = Elm.Window || {};+Elm.Window.make = function (_elm) {+   "use strict";+   _elm.Window = _elm.Window || {};+   if (_elm.Window.values)+   return _elm.Window.values;+   var _op = {},+   _N = Elm.Native,+   _U = _N.Utils.make(_elm),+   _L = _N.List.make(_elm),+   $moduleName = "Window",+   $Basics = Elm.Basics.make(_elm),+   $Native$Window = Elm.Native.Window.make(_elm),+   $Signal = Elm.Signal.make(_elm);+   var dimensions = $Native$Window.dimensions;+   var width = A2($Signal.map,+   $Basics.fst,+   dimensions);+   var height = A2($Signal.map,+   $Basics.snd,+   dimensions);+   _elm.Window.values = {_op: _op+                        ,dimensions: dimensions+                        ,width: width+                        ,height: height};+   return _elm.Window.values;+};+(function() {+'use strict';++function assert(bool, msg) {+    if (!bool) {+        throw new Error("Assertion error: " + msg);+    }+}+++// SIDE BAR++var SIDE_BAR_ID = "elm-reactor-side-bar";+var SIDE_BAR_BODY_ID = "elm-reactor-side-bar-body";+var SIDE_BAR_WIDTH = 275;++var DARK_GREY = "#4A4A4A";+var LIGHT_GREY = "#E4E4E4";++function createSideBar() {+    var debuggingPanelExpanded = true;++    var sideBar = document.createElement("div");+    sideBar.id = SIDE_BAR_ID;++    var sideBarBody = document.createElement("div");+    sideBarBody.id = SIDE_BAR_BODY_ID;+    sideBarBody.style.overflow = "hidden";+    sideBarBody.style.height = "100%";++    // Create and style the panel+    sideBar.style.background = DARK_GREY;+    sideBar.style.width = SIDE_BAR_WIDTH + "px";+    sideBar.style.height = "100%";+    sideBar.style.position = "absolute";+    sideBar.style.top = "0px";+    sideBar.style.right = "0px";+    sideBar.style.transitionDuration = "0.3s";+    sideBar.style.opacity = 0.97;+    sideBar.style.zIndex = 1;++    // Prevent clicks from reaching the main elm instance under the panel+    sideBar.addEventListener("click", blockClicks);+    function blockClicks(e) {+        var event = e || window.event;+        event.cancelBubble = true;+        if (event.stopPropagation) {+            event.stopPropagation();+        }+    }++    // Create and style the button+    var tabWidth = 25;+    var sideBarTab = document.createElement("div");+    sideBarTab.id = "debugToggle";+    sideBarTab.style.position = "absolute";+    sideBarTab.style.width = tabWidth + "px";+    sideBarTab.style.height = "60px";+    sideBarTab.style.top = "50%";+    sideBarTab.style.left = "-" + tabWidth + "px";+    sideBarTab.style.borderTopLeftRadius = "3px";+    sideBarTab.style.borderBottomLeftRadius = "3px";+    sideBarTab.style.background = DARK_GREY;+++    // Wire the button+    sideBarTab.onclick = function() {+        var toolPanel = document.getElementById(SIDE_BAR_ID);+        if (debuggingPanelExpanded){+            toolPanel.style.width = "0px";+            debuggingPanelExpanded = false;+        } else {+            toolPanel.style.right = "0px";+            toolPanel.style.width = SIDE_BAR_WIDTH + "px";+            debuggingPanelExpanded = true;+        }+    };++    sideBar.appendChild(sideBarTab);+    sideBar.appendChild(sideBarBody);+    return sideBar;+}+++// ERROR MESSAGE++var ERROR_MESSAGE_ID = 'elm-reactor-error-message';++function initErrorMessage(message) {+    var node = document.createElement("pre");+    node.id = ERROR_MESSAGE_ID;+    node.innerHTML = message;+    node.style.zindex = 1;+    node.style.position = "absolute";+    node.style.top = "0";+    node.style.left = "0";+    node.style.color = DARK_GREY;+    node.style.backgroundColor = LIGHT_GREY;+    node.style.padding = "1em";+    node.style.margin = "1em";+    node.style.borderRadius = "10px";+    return node;+}+++// EVENT BLOCKER++var EVENT_BLOCKER_ID = 'elm-reactor-event-blocker'++var eventsToIgnore = [+    "click", "mousemove", "mouseup", "mousedown", "mouseclick", "keydown",+    "keypress", "keyup", "touchstart", "touchend", "touchcancel", "touchleave",+    "touchmove", "pointermove", "pointerdown", "pointerup", "pointerover",+    "pointerout", "pointerenter", "pointerleave", "pointercancel"+];++function ignore(e) {+    var event = e || window.event;+    if (event.stopPropagation) {+        event.stopPropagation();+    }+    if (event.cancelBubble !== null) {+        event.cancelBubble = true;+    }+    if (event.preventDefault) {+        event.preventDefault();+    }+    return false;+}++function initEventBlocker() {+    var node = document.createElement("div");+    node.id = EVENT_BLOCKER_ID;+    node.style.position = "absolute";+    node.style.top = "0px";+    node.style.left = "0px";+    node.style.width = "100%";+    node.style.height = "100%";++    for (var i = eventsToIgnore.length; i-- ;) {+        node.addEventListener(eventsToIgnore[i], ignore, true);+    }++    return node;+}++function addEventBlocker(node) {+    if (!document.getElementById(EVENT_BLOCKER_ID)) {+        node.appendChild(initEventBlocker());+    }+}++function removeEventBlocker() {+    var blocker = document.getElementById(EVENT_BLOCKER_ID);+    if (blocker)+    {+        blocker.parentNode.removeChild(blocker);+    }+}++++// CODE TO SET UP A MODULE FOR DEBUGGING++Elm.fullscreenDebug = function(moduleName, fileName) {+    var result = initModuleWithDebugState(moduleName);++    document.body.appendChild(createSideBar());++    var sideBar = Elm.embed(Elm.SideBar, document.getElementById(SIDE_BAR_BODY_ID), {+        eventCounter: 0,+        watches: [],+        showSwap: true+    });++    function updateWatches(index)+    {+        sideBar.ports.watches.send(watchesAt(index, result.debugState)); +    }++    sideBar.ports.scrubTo.subscribe(function(index) {+        jumpTo(index, result.debugState);+        updateWatches(index);+    });++    sideBar.ports.pause.subscribe(function(paused) {+        if (paused) {+            pause(result.debugState);+        } else {+            unpause(result.debugState);+            redoTraces(result.debugState);+        }+    });++    sideBar.ports.restart.subscribe(function() {+        restart(result.debugState);+        updateWatches(0);+    });++    sideBar.ports.permitSwap.subscribe(function(permitSwaps) {+        result.debugState.permitSwaps = permitSwaps;+    });++    result.debugState.onNotify = function(debugState) {+        sideBar.ports.eventCounter.send(debugState.index);+        updateWatches(debugState.index);+    };++    // handle swaps+    var updates = 'ws://' + window.location.host + '/socket?file=' + fileName+    var connection = new WebSocket(updates);+    connection.addEventListener('message', function(event) {+        if (result.debugState.permitSwaps)+        {+            result = swap(event.data, result.debugState, result.module.dispose);+            updateWatches(result.debugState.index);+        }+    });+    window.addEventListener("unload", function() {+        connection.close();+    });++    return result.module;+};+++function initModuleWithDebugState(moduleName) {+    var debugState;++    function make(localRuntime) {+        var result = initAndWrap(getModule(moduleName), localRuntime);+        debugState = result.debugState;+        return result.values;+    }++    return {+        module: Elm.fullscreen({ make: make }),+        debugState: debugState+    };+}++function getModule(moduleName)+{+    var elmModule = Elm;+    var names = moduleName.split('.');+    for (var i = 0; i < names.length; ++i)+    {+        elmModule = elmModule[names[i]];+    }+    return elmModule;+}+++// DEBUG STATE++function emptyDebugState()+{+    return {+        paused: false,+        pausedAtTime: 0,+        totalTimeLost: 0,++        index: 0,+        events: [],+        watches: [{}],+        snapshots: [],+        asyncCallbacks: [],++        initialSnapshot: [],+        initialAsyncCallbacks: [],+        signalGraphNodes: [],++        traces: {},+        traceCanvas: createCanvas(),++        permitSwaps: true,+        swapInProgress: false,++        onNotify: function() {},+        refreshScreen: function() {},+        node: null,+        notify: function() {}+    };+}++function restart(debugState)+{+    var running = !debugState.paused;+    if (running)+    {+        pause(debugState);+    }+    debugState.index = 0;+    debugState.events = [];+    debugState.watches = [debugState.watches[0]];++    var snap = debugState.initialSnapshot;+    debugState.snapshots = [snap];+    for (var i = snap.length; i--; )+    {+        debugState.signalGraphNodes[i].value = snap[i].value;+    }++    debugState.asyncCallbacks = debugState.initialAsyncCallbacks.map(function(thunk) {+        return {+            thunk: thunk,+            id: 0,+            executed: false+        };+    });++    debugState.traces = {};+    redoTraces(debugState);+    debugState.refreshScreen();++    if (running)+    {+        unpause(debugState);+    }+}++function pause(debugState)+{+    if (debugState.paused)+    {+        return;+    }+    debugState.paused = true;+    pauseAsyncCallbacks(debugState);+    debugState.pausedAtTime = Date.now();+    addEventBlocker(debugState.node);+}++function unpause(debugState)+{+    debugState.paused = false;++    // add delay due to the pause itself+    var pauseDelay = Date.now() - debugState.pausedAtTime;+    debugState.totalTimeLost += pauseDelay;++    // add delay if travelling to older event+    if (debugState.index < debugState.events.length - 1)+    {+        debugState.totalTimeLost = Date.now() - debugState.events[debugState.index].time;+    }++    // clear out future snapshots, events, and traces+    var nearestSnapshotIndex = Math.floor(debugState.index / EVENTS_PER_SAVE);+    debugState.snapshots = debugState.snapshots.slice(0, nearestSnapshotIndex + 1);+    debugState.events = debugState.events.slice(0, debugState.index);+    clearTracesAfter(debugState.index, debugState);+    clearWatchesAfter(debugState.index, debugState);++    unpauseAsyncCallbacks(debugState.asyncCallbacks);++    removeEventBlocker();+}++function jumpTo(index, debugState)+{+    if (!debugState.paused)+    {+        pause(debugState);+    }++    assert(+        0 <= index && index <= debugState.events.length,+        "Trying to step to non-existent event index " + index);++    var potentialIndex = indexOfSnapshotBefore(index);+    if (index < debugState.index || potentialIndex > debugState.index)+    {+        var snapshot = getNearestSnapshot(index, debugState.snapshots);++        for (var i = debugState.signalGraphNodes.length; i-- ; )+        {+            debugState.signalGraphNodes[i].value = snapshot[i].value;+        }++        debugState.index = potentialIndex;+    }++    while (debugState.index < index)+    {+        var event = debugState.events[debugState.index];+        debugState.notify(event.id, event.value);+        debugState.index += 1;+    }+    redoTraces(debugState);+}++function swap(rawJsonResponse, debugState, freeOldRuntime) {+    var error = document.getElementById(ERROR_MESSAGE_ID);+    if (error)+    {+        error.parentNode.removeChild(error);+    }++    var result = JSON.parse(rawJsonResponse);++    if (!result.code)+    {+        var msg = result.error || 'something went wrong with swap';+        document.body.appendChild(initErrorMessage(msg));+        return null;+    }+    // TODO: pause/unpause?+    pauseAsyncCallbacks(debugState);+    window.eval(result.code);++    // remove old nodes+    debugState.node.parentNode.removeChild(debugState.node);+    document.body.removeChild(debugState.traceCanvas);+    freeOldRuntime();++    var result = initModuleWithDebugState(result.name);+    transferState(debugState, result.debugState);+    return result;+}++function transferState(previousDebugState, debugState)+{+    debugState.swapInProgress = true;+    debugState.events = previousDebugState.events;+    debugState.onNotify = previousDebugState.onNotify;++    if (previousDebugState.paused)+    {+        debugState.paused = true;+        pauseAsyncCallbacks(debugState);+        debugState.pausedAtTime = previousDebugState.pausedAtTime;+        debugState.totalTimeLost = previousDebugState.totalTimeLost;+        addEventBlocker(debugState.node);+    }++    while (debugState.index < debugState.events.length)+    {+        var event = debugState.events[debugState.index];+        pushWatchFrame(debugState);+        debugState.notify(event.id, event.value);+        debugState.index += 1;+        snapshotIfNeeded(debugState);+    }+    redoTraces(debugState);+    debugState.swapInProgress = false;++    jumpTo(previousDebugState.index, debugState);+}+++// CALLBACKS++// TODO: is it weird that the callbacks array never shrinks?++function unpauseAsyncCallbacks(callbacks) {+    callbacks.forEach(function(callback) {+        if (!callback.executed) {+            callback.executed = true;+            callback.thunk();+        }+    });+}++function pauseAsyncCallbacks(debugState) {+    debugState.asyncCallbacks.forEach(function(callback) {+        if (!callback.executed) {+            clearTimeout(callback.id);+        }+    });+}++++// TRACES++function clearTracesAfter(index, debugState)+{+    var newTraces = {};+    for (var id in debugState.traces)+    {+        var trace = debugState.traces[id];+        for (var i = trace.length; i--; )+        {+            if (trace[i].index < index)+            {+                newTraces[id] = debugState.traces[id].slice(0, i + 1);+                break;+            }+        }+    }+    debugState.traces = newTraces;+}++function createCanvas() {+    var canvas = document.createElement('canvas');+    // TODO: make dimensions adjust based on screen size+    canvas.width = window.innerWidth;+    canvas.height = window.innerHeight;+    canvas.style.position = "absolute";+    canvas.style.top = "0";+    canvas.style.left = "0";+    canvas.style.pointerEvents = "none";+    return canvas;+}++function addTraces(debugState)+{+    var ctx = debugState.traceCanvas.getContext('2d');++    ctx.save();+    for (var id in debugState.traces)+    {+        var points = debugState.traces[id];+        if (points.length < 2)+        {+            continue;+        }+        var lastTracePoint = points[points.length - 1];+        if (lastTracePoint.index < debugState.index - 1)+        {+            continue;+        }+        ctx.beginPath();+        ctx.moveTo(lastTracePoint.x, lastTracePoint.y);+        var secondToLastTracePoint = points[points.length - 2];+        ctx.lineTo(secondToLastTracePoint.x, secondToLastTracePoint.y);++        ctx.lineWidth = 1;+        ctx.strokeStyle = "rgba(50, 50, 50, 0.4)";+        ctx.stroke();+    }+    ctx.restore();+}++function redoTraces(debugState) {+    var ctx = debugState.traceCanvas.getContext('2d');++    // TODO: be more clever about the size of the canvas on resize+    ctx.clearRect(0, 0, debugState.traceCanvas.width, debugState.traceCanvas.height);++    ctx.save();+    for (var id in debugState.traces)+    {+        var points = debugState.traces[id];+        var length = points.length;+        if (length < 2)+        {+            continue;+        }+        ctx.beginPath();+        ctx.lineWidth = 1;+        ctx.moveTo(points[0].x, points[0].y);+        var currentIndex = debugState.index;+        var traceIndex = points[0].index;+        for (var i = 1; traceIndex < currentIndex && i < length; ++i)+        {+            var point = points[i];+            ctx.lineTo(point.x, point.y);+            traceIndex = point.index;+        }+        ctx.strokeStyle = "rgba(50, 50, 50, 0.4)";+        ctx.stroke();++        for (; i < length; ++i)+        {+            var point = points[i];+            ctx.lineTo(point.x, point.y);+            traceIndex = point.index;+        }+        ctx.strokeStyle = "rgba(50, 50, 50, 0.2)";+        ctx.stroke();+    }+    ctx.restore();+}++function makeTraceRecorder(debugState, runtime)+{+    var List = Elm.List.make(runtime);+    var Transform = Elm.Transform2D.make(runtime);++    function crawlElement(element)+    {+        if (debugState.paused && !debugState.swapInProgress)+        {+            return;+        }++        var e = element.element;+        if (!e)+        {+            return;+        }+        if (e.ctor === 'Custom' && e.type === 'Collage')+        {+            var w = element.props.width;+            var h = element.props.height;+            var identity = A6( Transform.matrix, 1, 0, 0, -1, w/2, h/2 );+            return A2(List.map, crawlForm(identity), e.model.forms);+        }+    }++    function crawlForm(matrix)+    {+        return function(form) {+            if (form.form.ctor == "FGroup")+            {+                var scale = form.scale;+                var localMatrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );++                var theta = form.theta+                if (theta !== 0)+                {+                    localMatrix = A2( Transform.multiply, localMatrix, Transform.rotation(theta) );+                }++                var newMatrix = A2( Transform.multiply, matrix, localMatrix );+                A2(List.map, crawlForm(newMatrix), form.form._1);+            }++            var tag = form.trace;+            if (!tag)+            {+                return;+            }++            var x = matrix[0] * form.x + matrix[1] * form.y + matrix[2];+            var y = matrix[3] * form.x + matrix[4] * form.y + matrix[5];++            if ( !(tag in debugState.traces) )+            {+                debugState.traces[tag] = [{ index: debugState.index, x: x, y: y }];+                return;+            }                ++            var trace = debugState.traces[tag];+            var lastPoint = trace[trace.length - 1];+            if (lastPoint.x === x && lastPoint.y === y)+            {+                return;+            }+            trace.push({ index: debugState.index, x: x, y: y });+        }+    }++    return crawlElement;+}+++// SNAPSHOTS++var EVENTS_PER_SAVE = 100;++function snapshotIfNeeded(debugState)+{+    if (debugState.index % EVENTS_PER_SAVE === 0)+    {+        debugState.snapshots.push(createSnapshot(debugState.signalGraphNodes));+    }+}++function indexOfSnapshotBefore(index)+{+    return Math.floor(index / EVENTS_PER_SAVE) * EVENTS_PER_SAVE;+}++function getNearestSnapshot(i, snapshots)+{+    var snapshotIndex = Math.floor(i / EVENTS_PER_SAVE);+    assert(+        snapshotIndex < snapshots.length && snapshotIndex >= 0,+        "Trying to access non-existent snapshot (event " + i + ", snapshot " + snapshotIndex + ")");+    return snapshots[snapshotIndex];+}++function createSnapshot(signalGraphNodes)+{+    var nodeValues = [];++    signalGraphNodes.forEach(function(node) {+        nodeValues.push({ value: node.value, id: node.id });+    });++    return nodeValues;+}++function flattenSignalGraph(nodes)+{+    var nodesById = {};++    function addAllToDict(node) {+        nodesById[node.id] = node;+        node.kids.forEach(addAllToDict);+    }+    nodes.forEach(addAllToDict);++    var allNodes = Object.keys(nodesById).sort(compareNumbers).map(function(key) {+        return nodesById[key];+    });+    return allNodes;+}++function compareNumbers(a, b) {+    return a - b;+}+++// WRAP THE RUNTIME++function initAndWrap(elmModule, runtime)+{+    var debugState = emptyDebugState();++    // runtime is the prototype of wrappedRuntime+    // so we can access all runtime properties too+    var wrappedRuntime = Object.create(runtime);+    wrappedRuntime.notify = notifyWrapper;+    wrappedRuntime.setTimeout = setTimeoutWrapper;++    // make a copy of the wrappedRuntime+    var assignedPropTracker = Object.create(wrappedRuntime);+    var values = elmModule.make(assignedPropTracker);++    // make sure the signal graph is actually a signal & extract the visual model+    var Signal = Elm.Signal.make(assignedPropTracker);+    if ( !('notify' in values.main) )+    {+        values.main = Signal.constant(values.main);+    }+    A2(Signal.map, makeTraceRecorder(debugState, assignedPropTracker), values.main);++    debugState.refreshScreen = function() {+        var main = values.main+        for (var i = main.kids.length ; i-- ; )+        {+            main.kids[i].notify(runtime.timer.now(), true, main.id);+        }+    };++    // The main module stores imported modules onto the runtime.+    // To ensure only one instance of each module is created,+    // we assign them back on the original runtime object.+    Object.keys(assignedPropTracker).forEach(function(key) {+        runtime[key] = assignedPropTracker[key];+    });++    debugState.signalGraphNodes = flattenSignalGraph(wrappedRuntime.inputs);+    debugState.initialSnapshot = createSnapshot(debugState.signalGraphNodes);+    debugState.snapshots = [debugState.initialSnapshot];+    debugState.initialAsyncCallbacks = debugState.asyncCallbacks.map(function(callback) {+        return callback.thunk;+    });+    debugState.node = runtime.node;+    debugState.notify = runtime.notify;++    // Tracing stuff+    document.body.appendChild(debugState.traceCanvas);++    var replace = Elm.Native.Utils.make(assignedPropTracker).replace;++    runtime.timer.now = function() {+        if (debugState.paused || debugState.swapInProgress)+        {+            var event = debugState.events[debugState.index];+            return event.time;+        }+        return Date.now() - debugState.totalTimeLost;+    };++    runtime.debug = {};++    runtime.debug.trace = function(tag, form) {+        return replace([['trace', tag]], form);+    }++    runtime.debug.watch = function(tag, value) {+        if (debugState.paused && !debugState.swapInProgress)+        {+            return;+        }+        var index = debugState.index;+        var numWatches = debugState.watches.length - 1;+        assert(+            index === numWatches,+            'number of watch frames (' + numWatches + ') should match current index (' + index + ')');+        debugState.watches[debugState.index][tag] = value;+    }++    function notifyWrapper(id, value)+    {+        // Ignore all events that occur while the program is paused.+        if (debugState.paused)+        {+            return false;+        }++        // Record the event+        debugState.events.push({ id: id, value: value, time: runtime.timer.now() });+        debugState.index += 1;+        pushWatchFrame(debugState);++        var changed = runtime.notify(id, value);++        snapshotIfNeeded(debugState);+        debugState.onNotify(debugState);+        addTraces(debugState);++        return changed;+    }++    function setTimeoutWrapper(thunk, delay)+    {+        if (debugState.paused)+        {+            return 0;+        }++        var callback = {+            thunk: thunk,+            id: 0,+            executed: false+        };++        callback.id = setTimeout(function() {+            callback.executed = true;+            thunk();+        }, delay);++        debugState.asyncCallbacks.push(callback);+        return callback.id;+    }++    return {+        values: values,+        debugState: debugState+    };+}+++// WATCHES++function watchesAt(index, debugState)+{+    var watchSnapshot = [];+    var watches = debugState.watches[index];++    for (var name in watches)+    {+        var value = prettyPrint(watches[name], "  ");+        watchSnapshot.push([ name, value ]);+    }+    return watchSnapshot;+}++function pushWatchFrame(debugState)+{+    var length = debugState.watches.length;+    var oldFrame = length === 0 ? {} : debugState.watches[length - 1];+    var newFrame = {};+    for (var tag in oldFrame)+    {+        newFrame[tag] = oldFrame[tag];+    }+    debugState.watches.push(newFrame);+}++function clearWatchesAfter(index, debugState)+{+    debugState.watches = debugState.watches.slice(0, index + 1);+}++var prettyPrint = function() {++    var independentRuntime = {};+    var List;+    var ElmArray;+    var Dict;++    var toString = function(v, separator) {+        var type = typeof v;+        if (type === "function") {+            var name = v.func ? v.func.name : v.name;+            return '<function' + (name === '' ? '' : ': ') + name + '>';+        } else if (type === "boolean") {+            return v ? "True" : "False";+        } else if (type === "number") {+            return v.toFixed(2).replace(/\.0+$/g, '');+        } else if ((v instanceof String) && v.isChar) {+            return "'" + addSlashes(v) + "'";+        } else if (type === "string") {+            return '"' + addSlashes(v) + '"';+        } else if (type === "object" && '_' in v && probablyPublic(v)) {+            var output = [];+            for (var k in v._) {+                for (var i = v._[k].length; i--; ) {+                    output.push(k + " = " + toString(v._[k][i], separator));+                }+            }+            for (var k in v) {+                if (k === '_') continue;+                output.push(k + " = " + toString(v[k], separator));+            }+            if (output.length === 0) return "{}";+            var body = "\n" + output.join(",\n");+            return "{" + body.replace(/\n/g,"\n" + separator) + "\n}";+        } else if (type === "object" && 'ctor' in v) {+            if (v.ctor.substring(0,6) === "_Tuple") {+                var output = [];+                for (var k in v) {+                    if (k === 'ctor') continue;+                    output.push(toString(v[k], separator));+                }+                return "(" + output.join(", ") + ")";+            } else if (v.ctor === "_Array") {+                if (!ElmArray) {+                    ElmArray = Elm.Array.make(independentRuntime);+                }+                var list = ElmArray.toList(v);+                return "Array.fromList " + toString(list, separator);+            } else if (v.ctor === "::") {+                var output = '[\n' + toString(v._0, separator);+                v = v._1;+                while (v && v.ctor === "::") {+                    output += ",\n" + toString(v._0, separator);+                    v = v._1;+                }+                return output.replace(/\n/g,"\n" + separator) + "\n]";+            } else if (v.ctor === "[]") {+                return "[]";+            } else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {+                if (!Dict || !List) {+                    Dict = Elm.Dict.make(independentRuntime);+                    List = Elm.List.make(independentRuntime);+                }+                var list = Dict.toList(v);+                var name = "Dict";+                if (list.ctor === "::" && list._0._1.ctor === "_Tuple0") {+                    name = "Set";+                    list = A2(List.map, function(x){return x._0}, list);+                }+                return name + ".fromList " + toString(list, separator);+            } else {+                var output = "";+                for (var i in v) {+                    if (i === 'ctor') continue;+                    var str = toString(v[i], separator);+                    var parenless = str[0] === '{' ||+                                    str[0] === '<' ||+                                    str[0] === "[" ||+                                    str.indexOf(' ') < 0;+                    output += ' ' + (parenless ? str : "(" + str + ')');+                }+                return v.ctor + output;+            }+        }+        if (type === 'object' && 'notify' in v) return '<signal>';         return "<internal structure>";     }; 
assets/favicon.ico view

binary file changed (1150 → 103614 bytes)

backend/Main.hs view
@@ -23,6 +23,7 @@ import qualified Socket import qualified Utils import Paths_elm_reactor (version)+import qualified Elm.Compiler as Compiler import Elm.Utils ((|>))  @@ -43,8 +44,7 @@     &= versionArg [ explicit, name "version", name "v"                   , summary (Version.showVersion version)                   ]-    &= summary ("Elm Reactor " ++ Version.showVersion version ++-                ", (c) Evan Czaplicki 2011-2014")+    &= summary startupMessage   config :: BSC.ByteString -> Int -> Config Snap a@@ -72,6 +72,7 @@ startupMessage :: String startupMessage =   "Elm Reactor " ++ Version.showVersion version+  ++ " (Elm Platform " ++ Compiler.version ++ ")"   directoryConfig :: MonadSnap m => DirectoryConfig m
elm-reactor.cabal view
@@ -1,5 +1,5 @@ Name: elm-reactor-Version: 0.3+Version: 0.3.1  Synopsis:   Interactive development tool for Elm programs@@ -75,7 +75,7 @@     cmdargs,     containers >= 0.3,     directory >= 1.2,-    elm-compiler >= 0.14.1 && < 0.15,+    elm-compiler >= 0.15 && < 0.16,     filepath,     fsnotify >= 0.1.0.2,     HTTP,