From ecad8c55094b017b22b0d62b1a8de90d41655296 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 18 Sep 2016 13:08:17 -0500 Subject: [PATCH 01/33] code cleanup --- main.elm | 30 +++++++++++++++++++----------- map.elm | 30 +++++++++++++++++++----------- sprite.elm | 50 +++++++++++++++++++++++++++++--------------------- tiles.elm | 10 +++++----- 4 files changed, 72 insertions(+), 48 deletions(-) diff --git a/main.elm b/main.elm index d5d4b92..08cec3d 100644 --- a/main.elm +++ b/main.elm @@ -13,9 +13,6 @@ import AnimationFrame -- MODEL -{-| Model contains the x,y coordinates of the sprite - as well as the velocity and direction. --} type alias Model = { sprite : Sprite.Model , map : Map.Model @@ -25,7 +22,10 @@ type alias Model = initialModel : Keyboard.Model -> Model initialModel keyboard = - Model Sprite.init Map.init keyboard + { sprite = Sprite.init + , map = Map.init + , keyboard = keyboard + } @@ -35,6 +35,7 @@ initialModel keyboard = type Msg = Tick Time | KeyPress Keyboard.Msg + | KeyboardCmd Keyboard.Msg | Nothing @@ -50,17 +51,24 @@ update msg model = KeyPress key -> let - ( keyboard, _ ) = + ( keyboard', cmd ) = Keyboard.update key model.keyboard direction = - Keyboard.arrows keyboard + Keyboard.arrows keyboard' in - ( { model | keyboard = keyboard } + ( { model | keyboard = keyboard' } |> updateSprite (Sprite.Direction direction) - , Cmd.none + , Cmd.map KeyboardCmd cmd ) + KeyboardCmd msg -> + let + ( keyboard', cmd ) = + Keyboard.update msg model.keyboard + in + ( { model | keyboard = keyboard' }, Cmd.map KeyboardCmd cmd ) + Nothing -> ( model, Cmd.none ) @@ -77,8 +85,8 @@ updateSprite msg model = updateMap : Time -> Model -> Model updateMap dt model = let - ( x, y, vx, vy, map ) = - ( model.sprite.x, model.sprite.y, model.sprite.vx, model.sprite.vy, model.map ) + ( x, y, vx, vy ) = + ( model.sprite.x, model.sprite.y, model.sprite.vx, model.sprite.vy ) ( bottomWall, leftWall, rightWall, topWall ) = ( 0, 0, Map.width, Map.height ) @@ -100,7 +108,7 @@ updateMap dt model = Map.HorizontalScroll 0 in { model - | map = Map.update action map + | map = Map.update action model.map } diff --git a/map.elm b/map.elm index 5699a02..6a5e5b1 100644 --- a/map.elm +++ b/map.elm @@ -17,33 +17,41 @@ type alias Model = } +{-| We initialize the map to start in approxamitely the center +-} +init : Model +init = + { top = round -(overflowHeight / 2) + , left = round -(overflowWidth / 2) + } + + +{-| Width and height of the whole map +-} ( fullMapWidth, fullMapHeight ) = ( 288, 288 ) -{-| This is the width and height of - the visible portion of the map +{-| Width and height of the visible portion of the map -} ( width, height ) = ( 224, 224 ) ( halfWidth, halfHeight ) = ( width / 2, height / 2 ) -{-| overflow width and height are the - unseen dimensions of the map +{-| overflow width and height are the unseen dimensions of the map -} ( overflowWidth, overflowHeight ) = ( fullMapWidth - width, fullMapHeight - height ) -{-| We initialize the map to start in approxamitely the center --} -init : Model -init = - { top = round -(overflowHeight / 2) - , left = round -(overflowWidth / 2) - } -- Update +{-| Action: + VerticalScroll 3 = scroll up three pixels + VerticalScroll -3 = scroll down three pixels + HorizontalScroll 3 = scroll right three pixels + HorizontalScroll -3 = scroll left three pixels +-} type Action = VerticalScroll Int | HorizontalScroll Int diff --git a/sprite.elm b/sprite.elm index 902da41..4de6a81 100644 --- a/sprite.elm +++ b/sprite.elm @@ -30,8 +30,16 @@ type Orientation | Away +init : Model init = - Model Map.halfWidth Map.halfHeight 0 0 Left Toward 0 + { x = Map.halfWidth + , y = Map.halfHeight + , vx = 0 + , vy = 0 + , dir = Left + , orientation = Toward + , frame = 0 + } @@ -160,30 +168,10 @@ view { x, y, vx, vy, dir, orientation, frame } = [ beeImage ] -imgFromSpriteSheet : String -> ( Int, Int ) -> Html Msg -imgFromSpriteSheet spriteSheet ( x, y ) = - img - [ src "empty.png" - , style - [ ( "width", "32px" ) - , ( "height", "32px" ) - , ( "background-image", "url(" ++ spriteSheet ++ ")" ) - , ( "background-position" - , "-" ++ (toString x) ++ "px -" ++ (toString y) ++ "px" - ) - ] - ] - [] - - -- Bee Sprite -beeFromSpriteSheet = - imgFromSpriteSheet "bee.png" - - northWestBee1 = beeFromSpriteSheet ( 64, 0 ) @@ -214,3 +202,23 @@ southEastBee1 = southEastBee2 = beeFromSpriteSheet ( 32, 64 ) + + +beeFromSpriteSheet = + imgFromSpriteSheet "bee.png" + + +imgFromSpriteSheet : String -> ( Int, Int ) -> Html Msg +imgFromSpriteSheet spriteSheet ( x, y ) = + img + [ src "empty.png" + , style + [ ( "width", "32px" ) + , ( "height", "32px" ) + , ( "background-image", "url(" ++ spriteSheet ++ ")" ) + , ( "background-position" + , "-" ++ (toString x) ++ "px -" ++ (toString y) ++ "px" + ) + ] + ] + [] diff --git a/tiles.elm b/tiles.elm index cdafc80..920dff3 100644 --- a/tiles.elm +++ b/tiles.elm @@ -7,11 +7,6 @@ import Html.Attributes exposing (src, style) -- Path Sprite -tileFromSpriteSheet : ( Int, Int ) -> Html msg -tileFromSpriteSheet = - imgFromSpriteSheet "terrain.png" - - grass = tileFromSpriteSheet ( 0, 0 ) @@ -32,6 +27,11 @@ tPath = tileFromSpriteSheet ( 32, 32 ) +tileFromSpriteSheet : ( Int, Int ) -> Html msg +tileFromSpriteSheet = + imgFromSpriteSheet "terrain.png" + + imgFromSpriteSheet : String -> ( Int, Int ) -> Html msg imgFromSpriteSheet spriteSheet ( x, y ) = img From 0799e33742524b52fa1064b4338288f998f4ccf4 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Mon, 26 Sep 2016 08:47:31 -0700 Subject: [PATCH 02/33] WIP: adding mouse --- elm-package.json | 1 + index.html | 10485 ++++++++++++++++++++++++++++++++++++++++++++- main.elm | 167 +- sprite.elm | 10 +- 4 files changed, 10628 insertions(+), 35 deletions(-) diff --git a/elm-package.json b/elm-package.json index 1cc59e5..5f56a40 100644 --- a/elm-package.json +++ b/elm-package.json @@ -12,6 +12,7 @@ "elm-lang/core": "4.0.5 <= v < 5.0.0", "elm-lang/html": "1.1.0 <= v < 2.0.0", "elm-lang/keyboard": "1.0.0 <= v < 2.0.0", + "elm-lang/mouse": "1.0.0 <= v < 2.0.0", "elm-lang/window": "1.0.0 <= v < 2.0.0", "evancz/elm-markdown": "3.0.0 <= v < 4.0.0", "ohanhi/keyboard-extra": "1.1.0 <= v < 2.0.0" diff --git a/index.html b/index.html index 83d1b71..dbb84b2 100644 --- a/index.html +++ b/index.html @@ -1,30 +1,10469 @@ - - - Sample Elm RPG - - - - +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; +} - Fork me on GitHub +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); +} +//import Native.Utils // + +var _elm_lang$core$Native_Basics = function() { + +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 _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b; +} +function max(a, b) +{ + return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b; +} +function clamp(lo, hi, n) +{ + return _elm_lang$core$Native_Utils.cmp(n, lo) < 0 + ? lo + : _elm_lang$core$Native_Utils.cmp(n, hi) > 0 + ? hi + : n; +} + +var ord = ['LT', 'EQ', 'GT']; + +function compare(x, y) +{ + return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] }; +} + +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 _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); +} +function toPolar(point) +{ + var x = point._0; + var y = point._1; + return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x)); +} + +return { + 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: F2(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 +}; + +}();//import // + +var _elm_lang$core$Native_Utils = function() { + +// COMPARISONS + +function eq(x, y) +{ + var stack = []; + var isEqual = eqHelp(x, y, 0, stack); + var pair; + while (isEqual && (pair = stack.pop())) + { + isEqual = eqHelp(pair.x, pair.y, 0, stack); + } + return isEqual; +} + + +function eqHelp(x, y, depth, stack) +{ + if (depth > 100) + { + stack.push({ x: x, y: y }); + return true; + } + + if (x === y) + { + return true; + } + + if (typeof x !== 'object') + { + if (typeof x === 'function') + { + throw new Error( + 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.' + + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==' + + ' which describes why it is this way and what the better version will look like.' + ); + } + return false; + } + + if (x === null || y === null) + { + return false + } + + if (x instanceof Date) + { + return x.getTime() === y.getTime(); + } + + if (!('ctor' in x)) + { + for (var key in x) + { + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } + } + return true; + } + + // convert Dicts and Sets to lists + if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin') + { + x = _elm_lang$core$Dict$toList(x); + y = _elm_lang$core$Dict$toList(y); + } + if (x.ctor === 'Set_elm_builtin') + { + x = _elm_lang$core$Set$toList(x); + y = _elm_lang$core$Set$toList(y); + } + + // check if lists are equal without recursion + if (x.ctor === '::') + { + var a = x; + var b = y; + while (a.ctor === '::' && b.ctor === '::') + { + if (!eqHelp(a._0, b._0, depth + 1, stack)) + { + return false; + } + a = a._1; + b = b._1; + } + return a.ctor === b.ctor; + } + + // check if Arrays are equal + if (x.ctor === '_Array') + { + var xs = _elm_lang$core$Native_Array.toJSArray(x); + var ys = _elm_lang$core$Native_Array.toJSArray(y); + if (xs.length !== ys.length) + { + return false; + } + for (var i = 0; i < xs.length; i++) + { + if (!eqHelp(xs[i], ys[i], depth + 1, stack)) + { + return false; + } + } + return true; + } + + if (!eqHelp(x.ctor, y.ctor, depth + 1, stack)) + { + return false; + } + + for (var key in x) + { + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } + } + return true; +} + +// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on +// the particular integer values assigned to LT, EQ, and GT. + +var LT = -1, EQ = 0, GT = 1; + +function cmp(x, y) +{ + if (typeof x !== 'object') + { + return x === y ? EQ : x < y ? LT : GT; + } + + if (x instanceof String) + { + var a = x.valueOf(); + var b = y.valueOf(); + return a === b ? EQ : a < b ? LT : GT; + } + + if (x.ctor === '::' || x.ctor === '[]') + { + while (x.ctor === '::' && y.ctor === '::') + { + var ord = cmp(x._0, y._0); + if (ord !== EQ) + { + return ord; + } + x = x._1; + y = y._1; + } + return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT; + } + + if (x.ctor.slice(0, 6) === '_Tuple') + { + var ord; + 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; + } + + throw new Error( + 'Comparison error: comparison is only defined on ints, ' + + 'floats, times, chars, strings, lists of comparable values, ' + + 'and tuples of comparable values.' + ); +} + + +// COMMON VALUES + +var Tuple0 = { + ctor: '_Tuple0' +}; + +function Tuple2(x, y) +{ + return { + ctor: '_Tuple2', + _0: x, + _1: y + }; +} + +function chr(c) +{ + return new String(c); +} + + +// GUID + +var count = 0; +function guid(_) +{ + return count++; +} + + +// RECORDS + +function update(oldRecord, updatedFields) +{ + var newRecord = {}; + for (var key in oldRecord) + { + var value = (key in updatedFields) ? updatedFields[key] : oldRecord[key]; + newRecord[key] = value; + } + return newRecord; +} + + +//// 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 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; +} + + +// CRASHES + +function crash(moduleName, region) +{ + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; +} + +function crashCase(moduleName, region, value) +{ + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n' + + 'This was caused by the `case` expression ' + regionToString(region) + '.\n' + + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; +} + +function regionToString(region) +{ + if (region.start.line == region.end.line) + { + return 'on line ' + region.start.line; + } + return 'between lines ' + region.start.line + ' and ' + region.end.line; +} + + +// TO STRING + +function toString(v) +{ + var type = typeof v; + if (type === 'function') + { + var name = v.func ? v.func.name : v.name; + return ''; + } + + if (type === 'boolean') + { + return v ? 'True' : 'False'; + } + + if (type === 'number') + { + return v + ''; + } + + if (v instanceof String) + { + return '\'' + addSlashes(v, true) + '\''; + } + + if (type === 'string') + { + return '"' + addSlashes(v, false) + '"'; + } + + if (v === null) + { + return 'null'; + } + + if (type === 'object' && 'ctor' in v) + { + var ctorStarter = v.ctor.substring(0, 5); + + if (ctorStarter === '_Tupl') + { + var output = []; + for (var k in v) + { + if (k === 'ctor') continue; + output.push(toString(v[k])); + } + return '(' + output.join(',') + ')'; + } + + if (ctorStarter === '_Task') + { + return '' + } + + if (v.ctor === '_Array') + { + var list = _elm_lang$core$Array$toList(v); + return 'Array.fromList ' + toString(list); + } + + if (v.ctor === '') + { + return ''; + } + + if (v.ctor === '_Process') + { + return ''; + } + + if (v.ctor === '::') + { + var output = '[' + toString(v._0); + v = v._1; + while (v.ctor === '::') + { + output += ',' + toString(v._0); + v = v._1; + } + return output + ']'; + } + + if (v.ctor === '[]') + { + return '[]'; + } + + if (v.ctor === 'Set_elm_builtin') + { + return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v)); + } + + if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin') + { + return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v)); + } + + var output = ''; + for (var i in v) + { + if (i === 'ctor') continue; + var str = toString(v[i]); + var c0 = str[0]; + var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; + output += ' ' + (parenless ? str : '(' + str + ')'); + } + return v.ctor + output; + } + + if (type === 'object') + { + if (v instanceof Date) + { + return '<' + v.toString() + '>'; + } + + if (v.elm_web_socket) + { + return ''; + } + + var output = []; + for (var k in v) + { + output.push(k + ' = ' + toString(v[k])); + } + if (output.length === 0) + { + return '{}'; + } + return '{ ' + output.join(', ') + ' }'; + } + + return ''; +} + +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, '\\"'); + } +} + + +return { + eq: eq, + cmp: cmp, + Tuple0: Tuple0, + Tuple2: Tuple2, + chr: chr, + update: update, + guid: guid, + + append: F2(append), + + crash: crash, + crashCase: crashCase, + + toString: toString +}; + +}();var _elm_lang$core$Basics$uncurry = F2( + function (f, _p0) { + var _p1 = _p0; + return A2(f, _p1._0, _p1._1); + }); +var _elm_lang$core$Basics$curry = F3( + function (f, a, b) { + return f( + {ctor: '_Tuple2', _0: a, _1: b}); + }); +var _elm_lang$core$Basics$flip = F3( + function (f, b, a) { + return A2(f, a, b); + }); +var _elm_lang$core$Basics$snd = function (_p2) { + var _p3 = _p2; + return _p3._1; +}; +var _elm_lang$core$Basics$fst = function (_p4) { + var _p5 = _p4; + return _p5._0; +}; +var _elm_lang$core$Basics$always = F2( + function (a, _p6) { + return a; + }); +var _elm_lang$core$Basics$identity = function (x) { + return x; +}; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<|'] = F2( + function (f, x) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['|>'] = F2( + function (x, f) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>>'] = F3( + function (f, g, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<<'] = F3( + function (g, f, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append; +var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString; +var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite; +var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN; +var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat; +var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling; +var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor; +var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate; +var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round; +var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not; +var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and; +var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max; +var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min; +var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq; +var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e; +var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi; +var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp; +var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase; +var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs; +var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate; +var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt; +var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2; +var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan; +var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin; +var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos; +var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan; +var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin; +var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod; +var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add; +var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar; +var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar; +var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns; +var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees; +var _elm_lang$core$Basics$radians = function (t) { + return t; +}; +var _elm_lang$core$Basics$GT = {ctor: 'GT'}; +var _elm_lang$core$Basics$EQ = {ctor: 'EQ'}; +var _elm_lang$core$Basics$LT = {ctor: 'LT'}; +var _elm_lang$core$Basics$Never = function (a) { + return {ctor: 'Never', _0: a}; +}; +//import Native.Utils // + +var _elm_lang$core$Native_Debug = function() { + +function log(tag, value) +{ + var msg = tag + ': ' + _elm_lang$core$Native_Utils.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); +} + +return { + crash: crash, + log: F2(log) +}; + +}();var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; +var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; +var _elm_lang$core$Maybe$withDefault = F2( + function ($default, maybe) { + var _p0 = maybe; + if (_p0.ctor === 'Just') { + return _p0._0; + } else { + return $default; + } + }); +var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'}; +var _elm_lang$core$Maybe$oneOf = function (maybes) { + oneOf: + while (true) { + var _p1 = maybes; + if (_p1.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p3 = _p1._0; + var _p2 = _p3; + if (_p2.ctor === 'Nothing') { + var _v3 = _p1._1; + maybes = _v3; + continue oneOf; + } else { + return _p3; + } + } + } +}; +var _elm_lang$core$Maybe$andThen = F2( + function (maybeValue, callback) { + var _p4 = maybeValue; + if (_p4.ctor === 'Just') { + return callback(_p4._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$Just = function (a) { + return {ctor: 'Just', _0: a}; +}; +var _elm_lang$core$Maybe$map = F2( + function (f, maybe) { + var _p5 = maybe; + if (_p5.ctor === 'Just') { + return _elm_lang$core$Maybe$Just( + f(_p5._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map2 = F3( + function (func, ma, mb) { + var _p6 = {ctor: '_Tuple2', _0: ma, _1: mb}; + if (((_p6.ctor === '_Tuple2') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A2(func, _p6._0._0, _p6._1._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map3 = F4( + function (func, ma, mb, mc) { + var _p7 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc}; + if ((((_p7.ctor === '_Tuple3') && (_p7._0.ctor === 'Just')) && (_p7._1.ctor === 'Just')) && (_p7._2.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A3(func, _p7._0._0, _p7._1._0, _p7._2._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map4 = F5( + function (func, ma, mb, mc, md) { + var _p8 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md}; + if (((((_p8.ctor === '_Tuple4') && (_p8._0.ctor === 'Just')) && (_p8._1.ctor === 'Just')) && (_p8._2.ctor === 'Just')) && (_p8._3.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A4(func, _p8._0._0, _p8._1._0, _p8._2._0, _p8._3._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map5 = F6( + function (func, ma, mb, mc, md, me) { + var _p9 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me}; + if ((((((_p9.ctor === '_Tuple5') && (_p9._0.ctor === 'Just')) && (_p9._1.ctor === 'Just')) && (_p9._2.ctor === 'Just')) && (_p9._3.ctor === 'Just')) && (_p9._4.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A5(func, _p9._0._0, _p9._1._0, _p9._2._0, _p9._3._0, _p9._4._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +//import Native.Utils // + +var _elm_lang$core$Native_List = function() { + +var Nil = { ctor: '[]' }; + +function Cons(hd, tl) +{ + return { ctor: '::', _0: hd, _1: tl }; +} + +function fromArray(arr) +{ + var out = Nil; + for (var i = arr.length; i--; ) + { + out = Cons(arr[i], out); + } + return out; +} + +function toArray(xs) +{ + var out = []; + while (xs.ctor !== '[]') + { + out.push(xs._0); + xs = xs._1; + } + return out; +} + + +function range(lo, hi) +{ + var list = Nil; + if (lo <= hi) + { + do + { + list = Cons(hi, list); + } + while (hi-- > lo); + } + return list; +} + +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 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 _elm_lang$core$Native_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; + })); +} + +return { + Nil: Nil, + Cons: Cons, + cons: F2(Cons), + toArray: toArray, + fromArray: fromArray, + range: range, + + foldr: F3(foldr), + + map2: F3(map2), + map3: F4(map3), + map4: F5(map4), + map5: F6(map5), + sortBy: F2(sortBy), + sortWith: F2(sortWith) +}; + +}();var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith; +var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy; +var _elm_lang$core$List$sort = function (xs) { + return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs); +}; +var _elm_lang$core$List$drop = F2( + function (n, list) { + drop: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return list; + } else { + var _p0 = list; + if (_p0.ctor === '[]') { + return list; + } else { + var _v1 = n - 1, + _v2 = _p0._1; + n = _v1; + list = _v2; + continue drop; + } + } + } + }); +var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5; +var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4; +var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3; +var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2; +var _elm_lang$core$List$any = F2( + function (isOkay, list) { + any: + while (true) { + var _p1 = list; + if (_p1.ctor === '[]') { + return false; + } else { + if (isOkay(_p1._0)) { + return true; + } else { + var _v4 = isOkay, + _v5 = _p1._1; + isOkay = _v4; + list = _v5; + continue any; + } + } + } + }); +var _elm_lang$core$List$all = F2( + function (isOkay, list) { + return _elm_lang$core$Basics$not( + A2( + _elm_lang$core$List$any, + function (_p2) { + return _elm_lang$core$Basics$not( + isOkay(_p2)); + }, + list)); + }); +var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr; +var _elm_lang$core$List$foldl = F3( + function (func, acc, list) { + foldl: + while (true) { + var _p3 = list; + if (_p3.ctor === '[]') { + return acc; + } else { + var _v7 = func, + _v8 = A2(func, _p3._0, acc), + _v9 = _p3._1; + func = _v7; + acc = _v8; + list = _v9; + continue foldl; + } + } + }); +var _elm_lang$core$List$length = function (xs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p4, i) { + return i + 1; + }), + 0, + xs); +}; +var _elm_lang$core$List$sum = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x + y; + }), + 0, + numbers); +}; +var _elm_lang$core$List$product = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x * y; + }), + 1, + numbers); +}; +var _elm_lang$core$List$maximum = function (list) { + var _p5 = list; + if (_p5.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1)); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$minimum = function (list) { + var _p6 = list; + if (_p6.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1)); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$indexedMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$map2, + f, + _elm_lang$core$Native_List.range( + 0, + _elm_lang$core$List$length(xs) - 1), + xs); + }); +var _elm_lang$core$List$member = F2( + function (x, xs) { + return A2( + _elm_lang$core$List$any, + function (a) { + return _elm_lang$core$Native_Utils.eq(a, x); + }, + xs); + }); +var _elm_lang$core$List$isEmpty = function (xs) { + var _p7 = xs; + if (_p7.ctor === '[]') { + return true; + } else { + return false; + } +}; +var _elm_lang$core$List$tail = function (list) { + var _p8 = list; + if (_p8.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p8._1); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$head = function (list) { + var _p9 = list; + if (_p9.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p9._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {}; +_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons; +var _elm_lang$core$List$map = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, acc) { + return A2( + _elm_lang$core$List_ops['::'], + f(x), + acc); + }), + _elm_lang$core$Native_List.fromArray( + []), + xs); + }); +var _elm_lang$core$List$filter = F2( + function (pred, xs) { + var conditionalCons = F2( + function (x, xs$) { + return pred(x) ? A2(_elm_lang$core$List_ops['::'], x, xs$) : xs$; + }); + return A3( + _elm_lang$core$List$foldr, + conditionalCons, + _elm_lang$core$Native_List.fromArray( + []), + xs); + }); +var _elm_lang$core$List$maybeCons = F3( + function (f, mx, xs) { + var _p10 = f(mx); + if (_p10.ctor === 'Just') { + return A2(_elm_lang$core$List_ops['::'], _p10._0, xs); + } else { + return xs; + } + }); +var _elm_lang$core$List$filterMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$maybeCons(f), + _elm_lang$core$Native_List.fromArray( + []), + xs); + }); +var _elm_lang$core$List$reverse = function (list) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return A2(_elm_lang$core$List_ops['::'], x, y); + }), + _elm_lang$core$Native_List.fromArray( + []), + list); +}; +var _elm_lang$core$List$scanl = F3( + function (f, b, xs) { + var scan1 = F2( + function (x, accAcc) { + var _p11 = accAcc; + if (_p11.ctor === '::') { + return A2( + _elm_lang$core$List_ops['::'], + A2(f, x, _p11._0), + accAcc); + } else { + return _elm_lang$core$Native_List.fromArray( + []); + } + }); + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$foldl, + scan1, + _elm_lang$core$Native_List.fromArray( + [b]), + xs)); + }); +var _elm_lang$core$List$append = F2( + function (xs, ys) { + var _p12 = ys; + if (_p12.ctor === '[]') { + return xs; + } else { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, y) { + return A2(_elm_lang$core$List_ops['::'], x, y); + }), + ys, + xs); + } + }); +var _elm_lang$core$List$concat = function (lists) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$append, + _elm_lang$core$Native_List.fromArray( + []), + lists); +}; +var _elm_lang$core$List$concatMap = F2( + function (f, list) { + return _elm_lang$core$List$concat( + A2(_elm_lang$core$List$map, f, list)); + }); +var _elm_lang$core$List$partition = F2( + function (pred, list) { + var step = F2( + function (x, _p13) { + var _p14 = _p13; + var _p16 = _p14._0; + var _p15 = _p14._1; + return pred(x) ? { + ctor: '_Tuple2', + _0: A2(_elm_lang$core$List_ops['::'], x, _p16), + _1: _p15 + } : { + ctor: '_Tuple2', + _0: _p16, + _1: A2(_elm_lang$core$List_ops['::'], x, _p15) + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_List.fromArray( + []), + _1: _elm_lang$core$Native_List.fromArray( + []) + }, + list); + }); +var _elm_lang$core$List$unzip = function (pairs) { + var step = F2( + function (_p18, _p17) { + var _p19 = _p18; + var _p20 = _p17; + return { + ctor: '_Tuple2', + _0: A2(_elm_lang$core$List_ops['::'], _p19._0, _p20._0), + _1: A2(_elm_lang$core$List_ops['::'], _p19._1, _p20._1) + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_List.fromArray( + []), + _1: _elm_lang$core$Native_List.fromArray( + []) + }, + pairs); +}; +var _elm_lang$core$List$intersperse = F2( + function (sep, xs) { + var _p21 = xs; + if (_p21.ctor === '[]') { + return _elm_lang$core$Native_List.fromArray( + []); + } else { + var step = F2( + function (x, rest) { + return A2( + _elm_lang$core$List_ops['::'], + sep, + A2(_elm_lang$core$List_ops['::'], x, rest)); + }); + var spersed = A3( + _elm_lang$core$List$foldr, + step, + _elm_lang$core$Native_List.fromArray( + []), + _p21._1); + return A2(_elm_lang$core$List_ops['::'], _p21._0, spersed); + } + }); +var _elm_lang$core$List$takeReverse = F3( + function (n, list, taken) { + takeReverse: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return taken; + } else { + var _p22 = list; + if (_p22.ctor === '[]') { + return taken; + } else { + var _v23 = n - 1, + _v24 = _p22._1, + _v25 = A2(_elm_lang$core$List_ops['::'], _p22._0, taken); + n = _v23; + list = _v24; + taken = _v25; + continue takeReverse; + } + } + } + }); +var _elm_lang$core$List$takeTailRec = F2( + function (n, list) { + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$takeReverse, + n, + list, + _elm_lang$core$Native_List.fromArray( + []))); + }); +var _elm_lang$core$List$takeFast = F3( + function (ctr, n, list) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return _elm_lang$core$Native_List.fromArray( + []); + } else { + var _p23 = {ctor: '_Tuple2', _0: n, _1: list}; + _v26_5: + do { + _v26_1: + do { + if (_p23.ctor === '_Tuple2') { + if (_p23._1.ctor === '[]') { + return list; + } else { + if (_p23._1._1.ctor === '::') { + switch (_p23._0) { + case 1: + break _v26_1; + case 2: + return _elm_lang$core$Native_List.fromArray( + [_p23._1._0, _p23._1._1._0]); + case 3: + if (_p23._1._1._1.ctor === '::') { + return _elm_lang$core$Native_List.fromArray( + [_p23._1._0, _p23._1._1._0, _p23._1._1._1._0]); + } else { + break _v26_5; + } + default: + if ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) { + var _p28 = _p23._1._1._1._0; + var _p27 = _p23._1._1._0; + var _p26 = _p23._1._0; + var _p25 = _p23._1._1._1._1._0; + var _p24 = _p23._1._1._1._1._1; + return (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? A2( + _elm_lang$core$List_ops['::'], + _p26, + A2( + _elm_lang$core$List_ops['::'], + _p27, + A2( + _elm_lang$core$List_ops['::'], + _p28, + A2( + _elm_lang$core$List_ops['::'], + _p25, + A2(_elm_lang$core$List$takeTailRec, n - 4, _p24))))) : A2( + _elm_lang$core$List_ops['::'], + _p26, + A2( + _elm_lang$core$List_ops['::'], + _p27, + A2( + _elm_lang$core$List_ops['::'], + _p28, + A2( + _elm_lang$core$List_ops['::'], + _p25, + A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24))))); + } else { + break _v26_5; + } + } + } else { + if (_p23._0 === 1) { + break _v26_1; + } else { + break _v26_5; + } + } + } + } else { + break _v26_5; + } + } while(false); + return _elm_lang$core$Native_List.fromArray( + [_p23._1._0]); + } while(false); + return list; + } + }); +var _elm_lang$core$List$take = F2( + function (n, list) { + return A3(_elm_lang$core$List$takeFast, 0, n, list); + }); +var _elm_lang$core$List$repeatHelp = F3( + function (result, n, value) { + repeatHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return result; + } else { + var _v27 = A2(_elm_lang$core$List_ops['::'], value, result), + _v28 = n - 1, + _v29 = value; + result = _v27; + n = _v28; + value = _v29; + continue repeatHelp; + } + } + }); +var _elm_lang$core$List$repeat = F2( + function (n, value) { + return A3( + _elm_lang$core$List$repeatHelp, + _elm_lang$core$Native_List.fromArray( + []), + n, + value); + }); +var _elm_lang$core$Result$toMaybe = function (result) { + var _p0 = result; + if (_p0.ctor === 'Ok') { + return _elm_lang$core$Maybe$Just(_p0._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$Result$withDefault = F2( + function (def, result) { + var _p1 = result; + if (_p1.ctor === 'Ok') { + return _p1._0; + } else { + return def; + } + }); +var _elm_lang$core$Result$Err = function (a) { + return {ctor: 'Err', _0: a}; +}; +var _elm_lang$core$Result$andThen = F2( + function (result, callback) { + var _p2 = result; + if (_p2.ctor === 'Ok') { + return callback(_p2._0); + } else { + return _elm_lang$core$Result$Err(_p2._0); + } + }); +var _elm_lang$core$Result$Ok = function (a) { + return {ctor: 'Ok', _0: a}; +}; +var _elm_lang$core$Result$map = F2( + function (func, ra) { + var _p3 = ra; + if (_p3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + func(_p3._0)); + } else { + return _elm_lang$core$Result$Err(_p3._0); + } + }); +var _elm_lang$core$Result$map2 = F3( + function (func, ra, rb) { + var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; + if (_p4._0.ctor === 'Ok') { + if (_p4._1.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A2(func, _p4._0._0, _p4._1._0)); + } else { + return _elm_lang$core$Result$Err(_p4._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p4._0._0); + } + }); +var _elm_lang$core$Result$map3 = F4( + function (func, ra, rb, rc) { + var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; + if (_p5._0.ctor === 'Ok') { + if (_p5._1.ctor === 'Ok') { + if (_p5._2.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); + } else { + return _elm_lang$core$Result$Err(_p5._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p5._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p5._0._0); + } + }); +var _elm_lang$core$Result$map4 = F5( + function (func, ra, rb, rc, rd) { + var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; + if (_p6._0.ctor === 'Ok') { + if (_p6._1.ctor === 'Ok') { + if (_p6._2.ctor === 'Ok') { + if (_p6._3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); + } else { + return _elm_lang$core$Result$Err(_p6._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._0._0); + } + }); +var _elm_lang$core$Result$map5 = F6( + function (func, ra, rb, rc, rd, re) { + var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; + if (_p7._0.ctor === 'Ok') { + if (_p7._1.ctor === 'Ok') { + if (_p7._2.ctor === 'Ok') { + if (_p7._3.ctor === 'Ok') { + if (_p7._4.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); + } else { + return _elm_lang$core$Result$Err(_p7._4._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._0._0); + } + }); +var _elm_lang$core$Result$formatError = F2( + function (f, result) { + var _p8 = result; + if (_p8.ctor === 'Ok') { + return _elm_lang$core$Result$Ok(_p8._0); + } else { + return _elm_lang$core$Result$Err( + f(_p8._0)); + } + }); +var _elm_lang$core$Result$fromMaybe = F2( + function (err, maybe) { + var _p9 = maybe; + if (_p9.ctor === 'Just') { + return _elm_lang$core$Result$Ok(_p9._0); + } else { + return _elm_lang$core$Result$Err(err); + } + }); +//import // + +var _elm_lang$core$Native_Platform = function() { + + +// PROGRAMS + +function addPublicModule(object, name, main) +{ + var init = main ? makeEmbed(name, main) : mainIsUndefined(name); + + object['worker'] = function worker(flags) + { + return init(undefined, flags, false); + } + + object['embed'] = function embed(domNode, flags) + { + return init(domNode, flags, true); + } + + object['fullscreen'] = function fullscreen(flags) + { + return init(document.body, flags, true); + }; +} + + +// PROGRAM FAIL + +function mainIsUndefined(name) +{ + return function(domNode) + { + var message = 'Cannot initialize module `' + name + + '` because it has no `main` value!\nWhat should I show on screen?'; + domNode.innerHTML = errorHtml(message); + throw new Error(message); + }; +} + +function errorHtml(message) +{ + return '
' + + '

Oops! Something went wrong when starting your Elm program.

' + + '
' + message + '
' + + '
'; +} + + +// PROGRAM SUCCESS + +function makeEmbed(moduleName, main) +{ + return function embed(rootDomNode, flags, withRenderer) + { + try + { + var program = mainToProgram(moduleName, main); + if (!withRenderer) + { + program.renderer = dummyRenderer; + } + return makeEmbedHelp(moduleName, program, rootDomNode, flags); + } + catch (e) + { + rootDomNode.innerHTML = errorHtml(e.message); + throw e; + } + }; +} + +function dummyRenderer() +{ + return { update: function() {} }; +} + + +// MAIN TO PROGRAM + +function mainToProgram(moduleName, wrappedMain) +{ + var main = wrappedMain.main; + + if (typeof main.init === 'undefined') + { + var emptyBag = batch(_elm_lang$core$Native_List.Nil); + var noChange = _elm_lang$core$Native_Utils.Tuple2( + _elm_lang$core$Native_Utils.Tuple0, + emptyBag + ); + + return _elm_lang$virtual_dom$VirtualDom$programWithFlags({ + init: function() { return noChange; }, + view: function() { return main; }, + update: F2(function() { return noChange; }), + subscriptions: function () { return emptyBag; } + }); + } + + var flags = wrappedMain.flags; + var init = flags + ? initWithFlags(moduleName, main.init, flags) + : initWithoutFlags(moduleName, main.init); + + return _elm_lang$virtual_dom$VirtualDom$programWithFlags({ + init: init, + view: main.view, + update: main.update, + subscriptions: main.subscriptions, + }); +} + +function initWithoutFlags(moduleName, realInit) +{ + return function init(flags) + { + if (typeof flags !== 'undefined') + { + throw new Error( + 'You are giving module `' + moduleName + '` an argument in JavaScript.\n' + + 'This module does not take arguments though! You probably need to change the\n' + + 'initialization code to something like `Elm.' + moduleName + '.fullscreen()`' + ); + } + return realInit(); + }; +} + +function initWithFlags(moduleName, realInit, flagDecoder) +{ + return function init(flags) + { + var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); + if (result.ctor === 'Err') + { + throw new Error( + 'You are trying to initialize module `' + moduleName + '` with an unexpected argument.\n' + + 'When trying to convert it to a usable Elm value, I run into this problem:\n\n' + + result._0 + ); + } + return realInit(result._0); + }; +} + + +// SETUP RUNTIME SYSTEM + +function makeEmbedHelp(moduleName, program, rootDomNode, flags) +{ + var init = program.init; + var update = program.update; + var subscriptions = program.subscriptions; + var view = program.view; + var makeRenderer = program.renderer; + + // ambient state + var managers = {}; + var renderer; + + // init and update state in main process + var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var results = init(flags); + var model = results._0; + renderer = makeRenderer(rootDomNode, enqueue, view(model)); + var cmds = results._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); + + function onMessage(msg, model) + { + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var results = A2(update, msg, model); + model = results._0; + renderer.update(view(model)); + var cmds = results._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); + } + + var mainProcess = spawnLoop(initApp, onMessage); + + function enqueue(msg) + { + _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg); + } + + var ports = setupEffects(managers, enqueue); + + return ports ? { ports: ports } : {}; +} + + +// EFFECT MANAGERS + +var effectManagers = {}; + +function setupEffects(managers, callback) +{ + var ports; + + // setup all necessary effect managers + for (var key in effectManagers) + { + var manager = effectManagers[key]; + + if (manager.isForeign) + { + ports = ports || {}; + ports[key] = manager.tag === 'cmd' + ? setupOutgoingPort(key) + : setupIncomingPort(key, callback); + } + + managers[key] = makeManager(manager, callback); + } + + return ports; +} + +function makeManager(info, callback) +{ + var router = { + main: callback, + self: undefined + }; + + var tag = info.tag; + var onEffects = info.onEffects; + var onSelfMsg = info.onSelfMsg; + + function onMessage(msg, state) + { + if (msg.ctor === 'self') + { + return A3(onSelfMsg, router, msg._0, state); + } + + var fx = msg._0; + switch (tag) + { + case 'cmd': + return A3(onEffects, router, fx.cmds, state); + + case 'sub': + return A3(onEffects, router, fx.subs, state); + + case 'fx': + return A4(onEffects, router, fx.cmds, fx.subs, state); + } + } + + var process = spawnLoop(info.init, onMessage); + router.self = process; + return process; +} + +function sendToApp(router, msg) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + router.main(msg); + callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function sendToSelf(router, msg) +{ + return A2(_elm_lang$core$Native_Scheduler.send, router.self, { + ctor: 'self', + _0: msg + }); +} + + +// HELPER for STATEFUL LOOPS + +function spawnLoop(init, onMessage) +{ + var andThen = _elm_lang$core$Native_Scheduler.andThen; + + function loop(state) + { + var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) { + return onMessage(msg, state); + }); + return A2(andThen, handleMsg, loop); + } + + var task = A2(andThen, init, loop); + + return _elm_lang$core$Native_Scheduler.rawSpawn(task); +} + + +// BAGS + +function leaf(home) +{ + return function(value) + { + return { + type: 'leaf', + home: home, + value: value + }; + }; +} + +function batch(list) +{ + return { + type: 'node', + branches: list + }; +} + +function map(tagger, bag) +{ + return { + type: 'map', + tagger: tagger, + tree: bag + } +} + + +// PIPE BAGS INTO EFFECT MANAGERS + +function dispatchEffects(managers, cmdBag, subBag) +{ + var effectsDict = {}; + gatherEffects(true, cmdBag, effectsDict, null); + gatherEffects(false, subBag, effectsDict, null); + + for (var home in managers) + { + var fx = home in effectsDict + ? effectsDict[home] + : { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; + + _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx }); + } +} + +function gatherEffects(isCmd, bag, effectsDict, taggers) +{ + switch (bag.type) + { + case 'leaf': + var home = bag.home; + var effect = toEffect(isCmd, home, taggers, bag.value); + effectsDict[home] = insert(isCmd, effect, effectsDict[home]); + return; + + case 'node': + var list = bag.branches; + while (list.ctor !== '[]') + { + gatherEffects(isCmd, list._0, effectsDict, taggers); + list = list._1; + } + return; + + case 'map': + gatherEffects(isCmd, bag.tree, effectsDict, { + tagger: bag.tagger, + rest: taggers + }); + return; + } +} + +function toEffect(isCmd, home, taggers, value) +{ + function applyTaggers(x) + { + var temp = taggers; + while (temp) + { + x = temp.tagger(x); + temp = temp.rest; + } + return x; + } + + var map = isCmd + ? effectManagers[home].cmdMap + : effectManagers[home].subMap; + + return A2(map, applyTaggers, value) +} + +function insert(isCmd, newEffect, effects) +{ + effects = effects || { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; + if (isCmd) + { + effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds); + return effects; + } + effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs); + return effects; +} + + +// PORTS + +function checkPortName(name) +{ + if (name in effectManagers) + { + throw new Error('There can only be one port named `' + name + '`, but your program has multiple.'); + } +} + + +// OUTGOING PORTS + +function outgoingPort(name, converter) +{ + checkPortName(name); + effectManagers[name] = { + tag: 'cmd', + cmdMap: outgoingPortMap, + converter: converter, + isForeign: true + }; + return leaf(name); +} + +var outgoingPortMap = F2(function cmdMap(tagger, value) { + return value; +}); + +function setupOutgoingPort(name) +{ + var subs = []; + var converter = effectManagers[name].converter; + + // CREATE MANAGER + + var init = _elm_lang$core$Native_Scheduler.succeed(null); + + function onEffects(router, cmdList, state) + { + while (cmdList.ctor !== '[]') + { + var value = converter(cmdList._0); + for (var i = 0; i < subs.length; i++) + { + subs[i](value); + } + cmdList = cmdList._1; + } + return init; + } + + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); + + // PUBLIC API + + function subscribe(callback) + { + subs.push(callback); + } + + function unsubscribe(callback) + { + var index = subs.indexOf(callback); + if (index >= 0) + { + subs.splice(index, 1); + } + } + + return { + subscribe: subscribe, + unsubscribe: unsubscribe + }; +} + + +// INCOMING PORTS + +function incomingPort(name, converter) +{ + checkPortName(name); + effectManagers[name] = { + tag: 'sub', + subMap: incomingPortMap, + converter: converter, + isForeign: true + }; + return leaf(name); +} + +var incomingPortMap = F2(function subMap(tagger, finalTagger) +{ + return function(value) + { + return tagger(finalTagger(value)); + }; +}); + +function setupIncomingPort(name, callback) +{ + var sentBeforeInit = []; + var subs = _elm_lang$core$Native_List.Nil; + var converter = effectManagers[name].converter; + var currentOnEffects = preInitOnEffects; + var currentSend = preInitSend; + + // CREATE MANAGER + + var init = _elm_lang$core$Native_Scheduler.succeed(null); + + function preInitOnEffects(router, subList, state) + { + var postInitResult = postInitOnEffects(router, subList, state); + + for(var i = 0; i < sentBeforeInit.length; i++) + { + postInitSend(sentBeforeInit[i]); + } + + sentBeforeInit = null; // to release objects held in queue + currentSend = postInitSend; + currentOnEffects = postInitOnEffects; + return postInitResult; + } + + function postInitOnEffects(router, subList, state) + { + subs = subList; + return init; + } + + function onEffects(router, subList, state) + { + return currentOnEffects(router, subList, state); + } + + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); + + // PUBLIC API + + function preInitSend(value) + { + sentBeforeInit.push(value); + } + + function postInitSend(incomingValue) + { + var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue); + if (result.ctor === 'Err') + { + throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0); + } + + var value = result._0; + var temp = subs; + while (temp.ctor !== '[]') + { + callback(temp._0(value)); + temp = temp._1; + } + } + + function send(incomingValue) + { + currentSend(incomingValue); + } + + return { send: send }; +} + +return { + // routers + sendToApp: F2(sendToApp), + sendToSelf: F2(sendToSelf), + + // global setup + mainToProgram: mainToProgram, + effectManagers: effectManagers, + outgoingPort: outgoingPort, + incomingPort: incomingPort, + addPublicModule: addPublicModule, + + // effect bags + leaf: leaf, + batch: batch, + map: F2(map) +}; + +}(); +//import Native.Utils // + +var _elm_lang$core$Native_Scheduler = function() { + +var MAX_STEPS = 10000; + + +// TASKS + +function succeed(value) +{ + return { + ctor: '_Task_succeed', + value: value + }; +} + +function fail(error) +{ + return { + ctor: '_Task_fail', + value: error + }; +} + +function nativeBinding(callback) +{ + return { + ctor: '_Task_nativeBinding', + callback: callback, + cancel: null + }; +} + +function andThen(task, callback) +{ + return { + ctor: '_Task_andThen', + task: task, + callback: callback + }; +} + +function onError(task, callback) +{ + return { + ctor: '_Task_onError', + task: task, + callback: callback + }; +} + +function receive(callback) +{ + return { + ctor: '_Task_receive', + callback: callback + }; +} + + +// PROCESSES + +function rawSpawn(task) +{ + var process = { + ctor: '_Process', + id: _elm_lang$core$Native_Utils.guid(), + root: task, + stack: null, + mailbox: [] + }; + + enqueue(process); + + return process; +} + +function spawn(task) +{ + return nativeBinding(function(callback) { + var process = rawSpawn(task); + callback(succeed(process)); + }); +} + +function rawSend(process, msg) +{ + process.mailbox.push(msg); + enqueue(process); +} + +function send(process, msg) +{ + return nativeBinding(function(callback) { + rawSend(process, msg); + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function kill(process) +{ + return nativeBinding(function(callback) { + var root = process.root; + if (root.ctor === '_Task_nativeBinding' && root.cancel) + { + root.cancel(); + } + + process.root = null; + + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function sleep(time) +{ + return nativeBinding(function(callback) { + var id = setTimeout(function() { + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }, time); + + return function() { clearTimeout(id); }; + }); +} + + +// STEP PROCESSES + +function step(numSteps, process) +{ + while (numSteps < MAX_STEPS) + { + var ctor = process.root.ctor; + + if (ctor === '_Task_succeed') + { + while (process.stack && process.stack.ctor === '_Task_onError') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_fail') + { + while (process.stack && process.stack.ctor === '_Task_andThen') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_andThen') + { + process.stack = { + ctor: '_Task_andThen', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_onError') + { + process.stack = { + ctor: '_Task_onError', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_nativeBinding') + { + process.root.cancel = process.root.callback(function(newRoot) { + process.root = newRoot; + enqueue(process); + }); + + break; + } + + if (ctor === '_Task_receive') + { + var mailbox = process.mailbox; + if (mailbox.length === 0) + { + break; + } + + process.root = process.root.callback(mailbox.shift()); + ++numSteps; + continue; + } + + throw new Error(ctor); + } + + if (numSteps < MAX_STEPS) + { + return numSteps + 1; + } + enqueue(process); + + return numSteps; +} + + +// WORK QUEUE + +var working = false; +var workQueue = []; + +function enqueue(process) +{ + workQueue.push(process); + + if (!working) + { + setTimeout(work, 0); + working = true; + } +} + +function work() +{ + var numSteps = 0; + var process; + while (numSteps < MAX_STEPS && (process = workQueue.shift())) + { + if (process.root) + { + numSteps = step(numSteps, process); + } + } + if (!process) + { + working = false; + return; + } + setTimeout(work, 0); +} + + +return { + succeed: succeed, + fail: fail, + nativeBinding: nativeBinding, + andThen: F2(andThen), + onError: F2(onError), + receive: receive, + + spawn: spawn, + kill: kill, + sleep: sleep, + send: F2(send), + + rawSpawn: rawSpawn, + rawSend: rawSend +}; + +}();var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; +var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; +var _elm_lang$core$Platform$Program = {ctor: 'Program'}; +var _elm_lang$core$Platform$Task = {ctor: 'Task'}; +var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; +var _elm_lang$core$Platform$Router = {ctor: 'Router'}; +var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( + _elm_lang$core$Native_List.fromArray( + [])); +var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; +_elm_lang$core$Platform_Cmd_ops['!'] = F2( + function (model, commands) { + return { + ctor: '_Tuple2', + _0: model, + _1: _elm_lang$core$Platform_Cmd$batch(commands) + }; + }); +var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; +var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( + _elm_lang$core$Native_List.fromArray( + [])); +var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; +var _elm_lang$animation_frame$Native_AnimationFrame = function() +{ + +var hasStartTime = + window.performance && + window.performance.timing && + window.performance.timing.navigationStart; + +var navStart = hasStartTime + ? window.performance.timing.navigationStart + : Date.now(); + +var rAF = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) +{ + var id = requestAnimationFrame(function(time) { + var timeNow = time + ? (time > navStart ? time : time + navStart) + : Date.now(); + + callback(_elm_lang$core$Native_Scheduler.succeed(timeNow)); + }); + + return function() { + cancelAnimationFrame(id); + }; +}); + +return { + rAF: rAF +}; + +}(); +var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; +var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; +var _elm_lang$core$Task$spawnCmd = F2( + function (router, _p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Task$andThen, + _p1._0, + _elm_lang$core$Platform$sendToApp(router))); + }); +var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; +var _elm_lang$core$Task$mapError = F2( + function (f, task) { + return A2( + _elm_lang$core$Task$onError, + task, + function (err) { + return _elm_lang$core$Task$fail( + f(err)); + }); + }); +var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Task$map = F2( + function (func, taskA) { + return A2( + _elm_lang$core$Task$andThen, + taskA, + function (a) { + return _elm_lang$core$Task$succeed( + func(a)); + }); + }); +var _elm_lang$core$Task$map2 = F3( + function (func, taskA, taskB) { + return A2( + _elm_lang$core$Task$andThen, + taskA, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + taskB, + function (b) { + return _elm_lang$core$Task$succeed( + A2(func, a, b)); + }); + }); + }); +var _elm_lang$core$Task$map3 = F4( + function (func, taskA, taskB, taskC) { + return A2( + _elm_lang$core$Task$andThen, + taskA, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + taskB, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + taskC, + function (c) { + return _elm_lang$core$Task$succeed( + A3(func, a, b, c)); + }); + }); + }); + }); +var _elm_lang$core$Task$map4 = F5( + function (func, taskA, taskB, taskC, taskD) { + return A2( + _elm_lang$core$Task$andThen, + taskA, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + taskB, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + taskC, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + taskD, + function (d) { + return _elm_lang$core$Task$succeed( + A4(func, a, b, c, d)); + }); + }); + }); + }); + }); +var _elm_lang$core$Task$map5 = F6( + function (func, taskA, taskB, taskC, taskD, taskE) { + return A2( + _elm_lang$core$Task$andThen, + taskA, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + taskB, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + taskC, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + taskD, + function (d) { + return A2( + _elm_lang$core$Task$andThen, + taskE, + function (e) { + return _elm_lang$core$Task$succeed( + A5(func, a, b, c, d, e)); + }); + }); + }); + }); + }); + }); +var _elm_lang$core$Task$andMap = F2( + function (taskFunc, taskValue) { + return A2( + _elm_lang$core$Task$andThen, + taskFunc, + function (func) { + return A2( + _elm_lang$core$Task$andThen, + taskValue, + function (value) { + return _elm_lang$core$Task$succeed( + func(value)); + }); + }); + }); +var _elm_lang$core$Task$sequence = function (tasks) { + var _p2 = tasks; + if (_p2.ctor === '[]') { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Native_List.fromArray( + [])); + } else { + return A3( + _elm_lang$core$Task$map2, + F2( + function (x, y) { + return A2(_elm_lang$core$List_ops['::'], x, y); + }), + _p2._0, + _elm_lang$core$Task$sequence(_p2._1)); + } +}; +var _elm_lang$core$Task$onEffects = F3( + function (router, commands, state) { + return A2( + _elm_lang$core$Task$map, + function (_p3) { + return {ctor: '_Tuple0'}; + }, + _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + _elm_lang$core$Task$spawnCmd(router), + commands))); + }); +var _elm_lang$core$Task$toMaybe = function (task) { + return A2( + _elm_lang$core$Task$onError, + A2(_elm_lang$core$Task$map, _elm_lang$core$Maybe$Just, task), + function (_p4) { + return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); + }); +}; +var _elm_lang$core$Task$fromMaybe = F2( + function ($default, maybe) { + var _p5 = maybe; + if (_p5.ctor === 'Just') { + return _elm_lang$core$Task$succeed(_p5._0); + } else { + return _elm_lang$core$Task$fail($default); + } + }); +var _elm_lang$core$Task$toResult = function (task) { + return A2( + _elm_lang$core$Task$onError, + A2(_elm_lang$core$Task$map, _elm_lang$core$Result$Ok, task), + function (msg) { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Result$Err(msg)); + }); +}; +var _elm_lang$core$Task$fromResult = function (result) { + var _p6 = result; + if (_p6.ctor === 'Ok') { + return _elm_lang$core$Task$succeed(_p6._0); + } else { + return _elm_lang$core$Task$fail(_p6._0); + } +}; +var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); +var _elm_lang$core$Task$onSelfMsg = F3( + function (_p9, _p8, _p7) { + return _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); + }); +var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); +var _elm_lang$core$Task$T = function (a) { + return {ctor: 'T', _0: a}; +}; +var _elm_lang$core$Task$perform = F3( + function (onFail, onSuccess, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$T( + A2( + _elm_lang$core$Task$onError, + A2(_elm_lang$core$Task$map, onSuccess, task), + function (x) { + return _elm_lang$core$Task$succeed( + onFail(x)); + }))); + }); +var _elm_lang$core$Task$cmdMap = F2( + function (tagger, _p10) { + var _p11 = _p10; + return _elm_lang$core$Task$T( + A2(_elm_lang$core$Task$map, tagger, _p11._0)); + }); +_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; +//import Maybe, Native.List, Native.Utils, Result // + +var _elm_lang$core$Native_String = function() { + +function isEmpty(str) +{ + return str.length === 0; +} +function cons(chr, str) +{ + return chr + str; +} +function uncons(str) +{ + var hd = str[0]; + if (hd) + { + return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1))); + } + return _elm_lang$core$Maybe$Nothing; +} +function append(a, b) +{ + return a + b; +} +function concat(strs) +{ + return _elm_lang$core$Native_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(_elm_lang$core$Native_Utils.chr(out[i])); + } + return out.join(''); +} +function filter(pred, str) +{ + return str.split('').map(_elm_lang$core$Native_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, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; +} +function foldr(f, b, str) +{ + for (var i = str.length; i--; ) + { + b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; +} +function split(sep, str) +{ + return _elm_lang$core$Native_List.fromArray(str.split(sep)); +} +function join(sep, strs) +{ + return _elm_lang$core$Native_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.replace(/^\s+/, ''); +} +function trimRight(str) +{ + return str.replace(/\s+$/, ''); +} + +function words(str) +{ + return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g)); +} +function lines(str) +{ + return _elm_lang$core$Native_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(_elm_lang$core$Native_Utils.chr(str[i]))) + { + return true; + } + } + return false; +} +function all(pred, str) +{ + for (var i = str.length; i--; ) + { + if (!pred(_elm_lang$core$Native_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; + + if (subLen < 1) + { + return _elm_lang$core$Native_List.Nil; + } + + var i = 0; + var is = []; + + while ((i = str.indexOf(sub, i)) > -1) + { + is.push(i); + i = i + subLen; + } + + return _elm_lang$core$Native_List.fromArray(is); +} + +function toInt(s) +{ + var len = s.length; + if (len === 0) + { + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); + } + var start = 0; + if (s[0] === '-') + { + if (len === 1) + { + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); + } + start = 1; + } + for (var i = start; i < len; ++i) + { + var c = s[i]; + if (c < '0' || '9' < c) + { + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); + } + } + return _elm_lang$core$Result$Ok(parseInt(s, 10)); +} + +function toFloat(s) +{ + var len = s.length; + if (len === 0) + { + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); + } + var start = 0; + if (s[0] === '-') + { + if (len === 1) + { + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); + } + start = 1; + } + var dotCount = 0; + for (var i = start; i < len; ++i) + { + var c = s[i]; + if ('0' <= c && c <= '9') + { + continue; + } + if (c === '.') + { + dotCount += 1; + if (dotCount <= 1) + { + continue; + } + } + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); + } + return _elm_lang$core$Result$Ok(parseFloat(s)); +} + +function toList(str) +{ + return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr)); +} +function fromList(chars) +{ + return _elm_lang$core$Native_List.toArray(chars).join(''); +} + +return { + 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 +}; + +}(); +//import Native.Utils // + +var _elm_lang$core$Native_Char = function() { + +return { + fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); }, + toCode: function(c) { return c.charCodeAt(0); }, + toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); }, + toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); }, + toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); }, + toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); } +}; + +}();var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode; +var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode; +var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower; +var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper; +var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower; +var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper; +var _elm_lang$core$Char$isBetween = F3( + function (low, high, $char) { + var code = _elm_lang$core$Char$toCode($char); + return (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(high)) < 1); + }); +var _elm_lang$core$Char$isUpper = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('Z')); +var _elm_lang$core$Char$isLower = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('z')); +var _elm_lang$core$Char$isDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('9')); +var _elm_lang$core$Char$isOctDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('7')); +var _elm_lang$core$Char$isHexDigit = function ($char) { + return _elm_lang$core$Char$isDigit($char) || (A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('f'), + $char) || A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('F'), + $char)); +}; +var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; +var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; +var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; +var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; +var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; +var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; +var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; +var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; +var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; +var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; +var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; +var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; +var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; +var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; +var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; +var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; +var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; +var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; +var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; +var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; +var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; +var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; +var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; +var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; +var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; +var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; +var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; +var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; +var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; +var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; +var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; +var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; +var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; +var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; +var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; +var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; +var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; +var _elm_lang$core$String$fromChar = function ($char) { + return A2(_elm_lang$core$String$cons, $char, ''); +}; +var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; +var _elm_lang$core$Dict$foldr = F3( + function (f, acc, t) { + foldr: + while (true) { + var _p0 = t; + if (_p0.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v1 = f, + _v2 = A3( + f, + _p0._1, + _p0._2, + A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), + _v3 = _p0._3; + f = _v1; + acc = _v2; + t = _v3; + continue foldr; + } + } + }); +var _elm_lang$core$Dict$keys = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, keyList) { + return A2(_elm_lang$core$List_ops['::'], key, keyList); + }), + _elm_lang$core$Native_List.fromArray( + []), + dict); +}; +var _elm_lang$core$Dict$values = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, valueList) { + return A2(_elm_lang$core$List_ops['::'], value, valueList); + }), + _elm_lang$core$Native_List.fromArray( + []), + dict); +}; +var _elm_lang$core$Dict$toList = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, list) { + return A2( + _elm_lang$core$List_ops['::'], + {ctor: '_Tuple2', _0: key, _1: value}, + list); + }), + _elm_lang$core$Native_List.fromArray( + []), + dict); +}; +var _elm_lang$core$Dict$foldl = F3( + function (f, acc, dict) { + foldl: + while (true) { + var _p1 = dict; + if (_p1.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v5 = f, + _v6 = A3( + f, + _p1._1, + _p1._2, + A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), + _v7 = _p1._4; + f = _v5; + acc = _v6; + dict = _v7; + continue foldl; + } + } + }); +var _elm_lang$core$Dict$merge = F6( + function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { + var stepState = F3( + function (rKey, rValue, _p2) { + stepState: + while (true) { + var _p3 = _p2; + var _p9 = _p3._1; + var _p8 = _p3._0; + var _p4 = _p8; + if (_p4.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + var _p7 = _p4._1; + var _p6 = _p4._0._1; + var _p5 = _p4._0._0; + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { + var _v10 = rKey, + _v11 = rValue, + _v12 = { + ctor: '_Tuple2', + _0: _p7, + _1: A3(leftStep, _p5, _p6, _p9) + }; + rKey = _v10; + rValue = _v11; + _p2 = _v12; + continue stepState; + } else { + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + return { + ctor: '_Tuple2', + _0: _p7, + _1: A4(bothStep, _p5, _p6, rValue, _p9) + }; + } + } + } + } + }); + var _p10 = A3( + _elm_lang$core$Dict$foldl, + stepState, + { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$toList(leftDict), + _1: initialResult + }, + rightDict); + var leftovers = _p10._0; + var intermediateResult = _p10._1; + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p11, result) { + var _p12 = _p11; + return A3(leftStep, _p12._0, _p12._1, result); + }), + intermediateResult, + leftovers); + }); +var _elm_lang$core$Dict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Debug.crash( + _elm_lang$core$String$concat( + _elm_lang$core$Native_List.fromArray( + [ + 'Internal red-black tree invariant violated, expected ', + msg, + ' and got ', + _elm_lang$core$Basics$toString(c), + '/', + lgot, + '/', + rgot, + '\nPlease report this bug to ' + ]))); + }); +var _elm_lang$core$Dict$isBBlack = function (dict) { + var _p13 = dict; + _v14_2: + do { + if (_p13.ctor === 'RBNode_elm_builtin') { + if (_p13._0.ctor === 'BBlack') { + return true; + } else { + break _v14_2; + } + } else { + if (_p13._0.ctor === 'LBBlack') { + return true; + } else { + break _v14_2; + } + } + } while(false); + return false; +}; +var _elm_lang$core$Dict$sizeHelp = F2( + function (n, dict) { + sizeHelp: + while (true) { + var _p14 = dict; + if (_p14.ctor === 'RBEmpty_elm_builtin') { + return n; + } else { + var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), + _v17 = _p14._3; + n = _v16; + dict = _v17; + continue sizeHelp; + } + } + }); +var _elm_lang$core$Dict$size = function (dict) { + return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); +}; +var _elm_lang$core$Dict$get = F2( + function (targetKey, dict) { + get: + while (true) { + var _p15 = dict; + if (_p15.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); + switch (_p16.ctor) { + case 'LT': + var _v20 = targetKey, + _v21 = _p15._3; + targetKey = _v20; + dict = _v21; + continue get; + case 'EQ': + return _elm_lang$core$Maybe$Just(_p15._2); + default: + var _v22 = targetKey, + _v23 = _p15._4; + targetKey = _v22; + dict = _v23; + continue get; + } + } + } + }); +var _elm_lang$core$Dict$member = F2( + function (key, dict) { + var _p17 = A2(_elm_lang$core$Dict$get, key, dict); + if (_p17.ctor === 'Just') { + return true; + } else { + return false; + } + }); +var _elm_lang$core$Dict$maxWithDefault = F3( + function (k, v, r) { + maxWithDefault: + while (true) { + var _p18 = r; + if (_p18.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: k, _1: v}; + } else { + var _v26 = _p18._1, + _v27 = _p18._2, + _v28 = _p18._4; + k = _v26; + v = _v27; + r = _v28; + continue maxWithDefault; + } + } + }); +var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; +var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; +var _elm_lang$core$Dict$Black = {ctor: 'Black'}; +var _elm_lang$core$Dict$blackish = function (t) { + var _p19 = t; + if (_p19.ctor === 'RBNode_elm_builtin') { + var _p20 = _p19._0; + return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); + } else { + return true; + } +}; +var _elm_lang$core$Dict$Red = {ctor: 'Red'}; +var _elm_lang$core$Dict$moreBlack = function (color) { + var _p21 = color; + switch (_p21.ctor) { + case 'Black': + return _elm_lang$core$Dict$BBlack; + case 'Red': + return _elm_lang$core$Dict$Black; + case 'NBlack': + return _elm_lang$core$Dict$Red; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); + } +}; +var _elm_lang$core$Dict$lessBlack = function (color) { + var _p22 = color; + switch (_p22.ctor) { + case 'BBlack': + return _elm_lang$core$Dict$Black; + case 'Black': + return _elm_lang$core$Dict$Red; + case 'Red': + return _elm_lang$core$Dict$NBlack; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + } +}; +var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; +var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; +var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { + return {ctor: 'RBEmpty_elm_builtin', _0: a}; +}; +var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); +var _elm_lang$core$Dict$isEmpty = function (dict) { + return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); +}; +var _elm_lang$core$Dict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; + }); +var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { + var _p23 = dict; + if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } else { + return dict; + } +}; +var _elm_lang$core$Dict$lessBlackTree = function (dict) { + var _p24 = dict; + if (_p24.ctor === 'RBNode_elm_builtin') { + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(_p24._0), + _p24._1, + _p24._2, + _p24._3, + _p24._4); + } else { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } +}; +var _elm_lang$core$Dict$balancedTree = 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( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(col), + yk, + yv, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; +}; +var _elm_lang$core$Dict$blacken = function (t) { + var _p25 = t; + if (_p25.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); + } +}; +var _elm_lang$core$Dict$redden = function (t) { + var _p26 = t; + if (_p26.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); + } +}; +var _elm_lang$core$Dict$balanceHelp = function (tree) { + var _p27 = tree; + _v36_6: + do { + _v36_5: + do { + _v36_4: + do { + _v36_3: + do { + _v36_2: + do { + _v36_1: + do { + _v36_0: + do { + if (_p27.ctor === 'RBNode_elm_builtin') { + if (_p27._3.ctor === 'RBNode_elm_builtin') { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._3._0.ctor) { + case 'Red': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + } + } + case 'NBlack': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + } + } + default: + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + } + case 'NBlack': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } + case 'NBlack': + if (_p27._0.ctor === 'BBlack') { + if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + default: + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + default: + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + switch (_p27._3._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._4._3._1, + _p27._4._3._2, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._4._1, + _p27._4._2, + _p27._4._3._4, + _elm_lang$core$Dict$redden(_p27._4._4))); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._3._4._1, + _p27._3._4._2, + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._3._1, + _p27._3._2, + _elm_lang$core$Dict$redden(_p27._3._3), + _p27._3._4._3), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); + } while(false); + return tree; +}; +var _elm_lang$core$Dict$balance = F5( + function (c, k, v, l, r) { + var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; + }); +var _elm_lang$core$Dict$bubble = F5( + function (c, k, v, l, r) { + return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$moreBlack(c), + k, + v, + _elm_lang$core$Dict$lessBlackTree(l), + _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _elm_lang$core$Dict$removeMax = F5( + function (c, k, v, l, r) { + var _p28 = r; + if (_p28.ctor === 'RBEmpty_elm_builtin') { + return A3(_elm_lang$core$Dict$rem, c, l, r); + } else { + return A5( + _elm_lang$core$Dict$bubble, + c, + k, + v, + l, + A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + } + }); +var _elm_lang$core$Dict$rem = F3( + function (c, l, r) { + var _p29 = {ctor: '_Tuple2', _0: l, _1: r}; + if (_p29._0.ctor === 'RBEmpty_elm_builtin') { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p30 = c; + switch (_p30.ctor) { + case 'Red': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + case 'Black': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); + default: + return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p33 = _p29._1._0; + var _p32 = _p29._0._0; + var _p31 = {ctor: '_Tuple3', _0: c, _1: _p32, _2: _p33}; + if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/LBlack/Red', + c, + _elm_lang$core$Basics$toString(_p32), + _elm_lang$core$Basics$toString(_p33)); + } + } + } else { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p36 = _p29._1._0; + var _p35 = _p29._0._0; + var _p34 = {ctor: '_Tuple3', _0: c, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/Red/LBlack', + c, + _elm_lang$core$Basics$toString(_p35), + _elm_lang$core$Basics$toString(_p36)); + } + } else { + var _p40 = _p29._0._2; + var _p39 = _p29._0._4; + var _p38 = _p29._0._1; + var l$ = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); + var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); + var k = _p37._0; + var v = _p37._1; + return A5(_elm_lang$core$Dict$bubble, c, k, v, l$, r); + } + } + }); +var _elm_lang$core$Dict$map = F2( + function (f, dict) { + var _p41 = dict; + if (_p41.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + var _p42 = _p41._1; + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _p41._0, + _p42, + A2(f, _p42, _p41._2), + A2(_elm_lang$core$Dict$map, f, _p41._3), + A2(_elm_lang$core$Dict$map, f, _p41._4)); + } + }); +var _elm_lang$core$Dict$Same = {ctor: 'Same'}; +var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; +var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; +var _elm_lang$core$Dict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p43 = dict; + if (_p43.ctor === 'RBEmpty_elm_builtin') { + var _p44 = alter(_elm_lang$core$Maybe$Nothing); + if (_p44.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) + }; + } + } else { + var _p55 = _p43._2; + var _p54 = _p43._4; + var _p53 = _p43._3; + var _p52 = _p43._1; + var _p51 = _p43._0; + var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); + switch (_p45.ctor) { + case 'EQ': + var _p46 = alter( + _elm_lang$core$Maybe$Just(_p55)); + if (_p46.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) + }; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) + }; + } + case 'LT': + var _p47 = up(_p53); + var flag = _p47._0; + var newLeft = _p47._1; + var _p48 = flag; + switch (_p48.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) + }; + } + default: + var _p49 = up(_p54); + var flag = _p49._0; + var newRight = _p49._1; + var _p50 = flag; + switch (_p50.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) + }; + } + } + } + }; + var _p56 = up(dict); + var flag = _p56._0; + var updatedDict = _p56._1; + var _p57 = flag; + switch (_p57.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); + default: + return _elm_lang$core$Dict$blacken(updatedDict); + } + }); +var _elm_lang$core$Dict$insert = F3( + function (key, value, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _elm_lang$core$Dict$singleton = F2( + function (key, value) { + return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); + }); +var _elm_lang$core$Dict$union = F2( + function (t1, t2) { + return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); + }); +var _elm_lang$core$Dict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; + }); + return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); + }); +var _elm_lang$core$Dict$intersect = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p58) { + return A2(_elm_lang$core$Dict$member, k, t2); + }), + t1); + }); +var _elm_lang$core$Dict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p59) { + var _p60 = _p59; + var _p62 = _p60._1; + var _p61 = _p60._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), + _1: _p62 + } : { + ctor: '_Tuple2', + _0: _p61, + _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) + }; + }); + return A3( + _elm_lang$core$Dict$foldl, + add, + {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, + dict); + }); +var _elm_lang$core$Dict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); + }), + _elm_lang$core$Dict$empty, + assocs); +}; +var _elm_lang$core$Dict$remove = F2( + function (key, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _elm_lang$core$Dict$diff = F2( + function (t1, t2) { + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, v, t) { + return A2(_elm_lang$core$Dict$remove, k, t); + }), + t1, + t2); + }); +//import Native.Scheduler // + +var _elm_lang$core$Native_Time = function() { + +var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) +{ + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); +}); + +function setInterval_(interval, task) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var id = setInterval(function() { + _elm_lang$core$Native_Scheduler.rawSpawn(task); + }, interval); + + return function() { clearInterval(id); }; + }); +} + +return { + now: now, + setInterval_: F2(setInterval_) +}; + +}();var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; +var _elm_lang$core$Time$spawnHelp = F3( + function (router, intervals, processes) { + var _p0 = intervals; + if (_p0.ctor === '[]') { + return _elm_lang$core$Task$succeed(processes); + } else { + var _p1 = _p0._0; + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Time$setInterval, + _p1, + A2(_elm_lang$core$Platform$sendToSelf, router, _p1))), + function (id) { + return A3( + _elm_lang$core$Time$spawnHelp, + router, + _p0._1, + A3(_elm_lang$core$Dict$insert, _p1, id, processes)); + }); + } + }); +var _elm_lang$core$Time$addMySub = F2( + function (_p2, state) { + var _p3 = _p2; + var _p6 = _p3._1; + var _p5 = _p3._0; + var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); + if (_p4.ctor === 'Nothing') { + return A3( + _elm_lang$core$Dict$insert, + _p5, + _elm_lang$core$Native_List.fromArray( + [_p6]), + state); + } else { + return A3( + _elm_lang$core$Dict$insert, + _p5, + A2(_elm_lang$core$List_ops['::'], _p6, _p4._0), + state); + } + }); +var _elm_lang$core$Time$inMilliseconds = function (t) { + return t; +}; +var _elm_lang$core$Time$millisecond = 1; +var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; +var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; +var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; +var _elm_lang$core$Time$inHours = function (t) { + return t / _elm_lang$core$Time$hour; +}; +var _elm_lang$core$Time$inMinutes = function (t) { + return t / _elm_lang$core$Time$minute; +}; +var _elm_lang$core$Time$inSeconds = function (t) { + return t / _elm_lang$core$Time$second; +}; +var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; +var _elm_lang$core$Time$onSelfMsg = F3( + function (router, interval, state) { + var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); + if (_p7.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Time$now, + function (time) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(time)); + }, + _p7._0)), + function (_p8) { + return _elm_lang$core$Task$succeed(state); + }); + }); + } + }); +var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); +var _elm_lang$core$Time$State = F2( + function (a, b) { + return {taggers: a, processes: b}; + }); +var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); +var _elm_lang$core$Time$onEffects = F3( + function (router, subs, _p9) { + var _p10 = _p9; + var rightStep = F3( + function (_p12, id, _p11) { + var _p13 = _p11; + return { + ctor: '_Tuple3', + _0: _p13._0, + _1: _p13._1, + _2: A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Native_Scheduler.kill(id), + function (_p14) { + return _p13._2; + }) + }; + }); + var bothStep = F4( + function (interval, taggers, id, _p15) { + var _p16 = _p15; + return { + ctor: '_Tuple3', + _0: _p16._0, + _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), + _2: _p16._2 + }; + }); + var leftStep = F3( + function (interval, taggers, _p17) { + var _p18 = _p17; + return { + ctor: '_Tuple3', + _0: A2(_elm_lang$core$List_ops['::'], interval, _p18._0), + _1: _p18._1, + _2: _p18._2 + }; + }); + var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); + var _p19 = A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + newTaggers, + _p10.processes, + { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_List.fromArray( + []), + _1: _elm_lang$core$Dict$empty, + _2: _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}) + }); + var spawnList = _p19._0; + var existingDict = _p19._1; + var killTask = _p19._2; + return A2( + _elm_lang$core$Task$andThen, + killTask, + function (_p20) { + return A2( + _elm_lang$core$Task$andThen, + A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict), + function (newProcesses) { + return _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); + }); + }); + }); +var _elm_lang$core$Time$Every = F2( + function (a, b) { + return {ctor: 'Every', _0: a, _1: b}; + }); +var _elm_lang$core$Time$every = F2( + function (interval, tagger) { + return _elm_lang$core$Time$subscription( + A2(_elm_lang$core$Time$Every, interval, tagger)); + }); +var _elm_lang$core$Time$subMap = F2( + function (f, _p21) { + var _p22 = _p21; + return A2( + _elm_lang$core$Time$Every, + _p22._0, + function (_p23) { + return f( + _p22._1(_p23)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; +var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; +var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; +var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; +var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.rAF; +var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame'); +var _elm_lang$animation_frame$AnimationFrame$State = F3( + function (a, b, c) { + return {subs: a, request: b, oldTime: c}; + }); +var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + _elm_lang$core$Native_List.fromArray( + []), + _elm_lang$core$Maybe$Nothing, + 0)); +var _elm_lang$animation_frame$AnimationFrame$onEffects = F3( + function (router, subs, _p0) { + var _p1 = _p0; + var _p5 = _p1.request; + var _p4 = _p1.oldTime; + var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs}; + if (_p2._0.ctor === 'Nothing') { + if (_p2._1.ctor === '[]') { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + _elm_lang$core$Native_List.fromArray( + []), + _elm_lang$core$Maybe$Nothing, + _p4)); + } else { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$animation_frame$AnimationFrame$rAF, + _elm_lang$core$Platform$sendToSelf(router))), + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Time$now, + function (time) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + subs, + _elm_lang$core$Maybe$Just(pid), + time)); + }); + }); + } + } else { + if (_p2._1.ctor === '[]') { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Process$kill(_p2._0._0), + function (_p3) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + _elm_lang$core$Native_List.fromArray( + []), + _elm_lang$core$Maybe$Nothing, + _p4)); + }); + } else { + return _elm_lang$core$Task$succeed( + A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4)); + } + } + }); +var _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3( + function (router, newTime, _p6) { + var _p7 = _p6; + var _p10 = _p7.subs; + var diff = newTime - _p7.oldTime; + var send = function (sub) { + var _p8 = sub; + if (_p8.ctor === 'Time') { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(newTime)); + } else { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(diff)); + } + }; + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$animation_frame$AnimationFrame$rAF, + _elm_lang$core$Platform$sendToSelf(router))), + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p10)), + function (_p9) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + _p10, + _elm_lang$core$Maybe$Just(pid), + newTime)); + }); + }); + }); +var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) { + return {ctor: 'Diff', _0: a}; +}; +var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Diff(tagger)); +}; +var _elm_lang$animation_frame$AnimationFrame$Time = function (a) { + return {ctor: 'Time', _0: a}; +}; +var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Time(tagger)); +}; +var _elm_lang$animation_frame$AnimationFrame$subMap = F2( + function (func, sub) { + var _p11 = sub; + if (_p11.ctor === 'Time') { + return _elm_lang$animation_frame$AnimationFrame$Time( + function (_p12) { + return func( + _p11._0(_p12)); + }); + } else { + return _elm_lang$animation_frame$AnimationFrame$Diff( + function (_p13) { + return func( + _p11._0(_p13)); + }); + } + }); +_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap}; +//import Native.List // + +var _elm_lang$core$Native_Array = function() { + +// 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: [] +}; + + +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.ctor === '[]') + { + return empty; + } + + // Allocate M sized blocks (table) and write list elements to it. + var table = new Array(M); + var nodes = []; + 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: [], + lengths: [] + }; + 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: [], + lengths: [] + }; + } +} + +// 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_(_elm_lang$core$Native_List.Nil, a); +} + +function toList_(list, a) +{ + for (var i = a.table.length - 1; i >= 0; i--) + { + list = + a.height === 0 + ? _elm_lang$core$Native_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 ? from : from + 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 + }; +} + +return { + 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 +}; + +}();var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; +var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; +var _elm_lang$core$Array$isEmpty = function (array) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$Array$length(array), + 0); +}; +var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; +var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; +var _elm_lang$core$Array$get = F2( + function (i, array) { + return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( + i, + _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; + }); +var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; +var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; +var _elm_lang$core$Array$filter = F2( + function (isOkay, arr) { + var update = F2( + function (x, xs) { + return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; + }); + return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); + }); +var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; +var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; +var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; +var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; +var _elm_lang$core$Array$toIndexedList = function (array) { + return A3( + _elm_lang$core$List$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + _elm_lang$core$Native_List.range( + 0, + _elm_lang$core$Native_Array.length(array) - 1), + _elm_lang$core$Native_Array.toList(array)); +}; +var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; +var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; +var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; +var _elm_lang$core$Array$repeat = F2( + function (n, e) { + return A2( + _elm_lang$core$Array$initialize, + n, + _elm_lang$core$Basics$always(e)); + }); +var _elm_lang$core$Array$Array = {ctor: 'Array'}; +//import Maybe, Native.Array, Native.List, Native.Utils, Result // + +var _elm_lang$core$Native_Json = function() { + + +// CORE DECODERS + +function succeed(msg) +{ + return { + ctor: '', + tag: 'succeed', + msg: msg + }; +} + +function fail(msg) +{ + return { + ctor: '', + tag: 'fail', + msg: msg + }; +} + +function decodePrimitive(tag) +{ + return { + ctor: '', + tag: tag + }; +} + +function decodeContainer(tag, decoder) +{ + return { + ctor: '', + tag: tag, + decoder: decoder + }; +} + +function decodeNull(value) +{ + return { + ctor: '', + tag: 'null', + value: value + }; +} + +function decodeField(field, decoder) +{ + return { + ctor: '', + tag: 'field', + field: field, + decoder: decoder + }; +} + +function decodeKeyValuePairs(decoder) +{ + return { + ctor: '', + tag: 'key-value', + decoder: decoder + }; +} + +function decodeObject(f, decoders) +{ + return { + ctor: '', + tag: 'map-many', + func: f, + decoders: decoders + }; +} + +function decodeTuple(f, decoders) +{ + return { + ctor: '', + tag: 'tuple', + func: f, + decoders: decoders + }; +} + +function andThen(decoder, callback) +{ + return { + ctor: '', + tag: 'andThen', + decoder: decoder, + callback: callback + }; +} + +function customAndThen(decoder, callback) +{ + return { + ctor: '', + tag: 'customAndThen', + decoder: decoder, + callback: callback + }; +} + +function oneOf(decoders) +{ + return { + ctor: '', + tag: 'oneOf', + decoders: decoders + }; +} + + +// DECODING OBJECTS + +function decodeObject1(f, d1) +{ + return decodeObject(f, [d1]); +} + +function decodeObject2(f, d1, d2) +{ + return decodeObject(f, [d1, d2]); +} + +function decodeObject3(f, d1, d2, d3) +{ + return decodeObject(f, [d1, d2, d3]); +} + +function decodeObject4(f, d1, d2, d3, d4) +{ + return decodeObject(f, [d1, d2, d3, d4]); +} + +function decodeObject5(f, d1, d2, d3, d4, d5) +{ + return decodeObject(f, [d1, d2, d3, d4, d5]); +} + +function decodeObject6(f, d1, d2, d3, d4, d5, d6) +{ + return decodeObject(f, [d1, d2, d3, d4, d5, d6]); +} + +function decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) +{ + return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7]); +} + +function decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) +{ + return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7, d8]); +} + + +// DECODING TUPLES + +function decodeTuple1(f, d1) +{ + return decodeTuple(f, [d1]); +} + +function decodeTuple2(f, d1, d2) +{ + return decodeTuple(f, [d1, d2]); +} + +function decodeTuple3(f, d1, d2, d3) +{ + return decodeTuple(f, [d1, d2, d3]); +} + +function decodeTuple4(f, d1, d2, d3, d4) +{ + return decodeTuple(f, [d1, d2, d3, d4]); +} + +function decodeTuple5(f, d1, d2, d3, d4, d5) +{ + return decodeTuple(f, [d1, d2, d3, d4, d5]); +} + +function decodeTuple6(f, d1, d2, d3, d4, d5, d6) +{ + return decodeTuple(f, [d1, d2, d3, d4, d5, d6]); +} + +function decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) +{ + return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7]); +} + +function decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) +{ + return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7, d8]); +} + + +// DECODE HELPERS + +function ok(value) +{ + return { tag: 'ok', value: value }; +} + +function badPrimitive(type, value) +{ + return { tag: 'primitive', type: type, value: value }; +} + +function badIndex(index, nestedProblems) +{ + return { tag: 'index', index: index, rest: nestedProblems }; +} + +function badField(field, nestedProblems) +{ + return { tag: 'field', field: field, rest: nestedProblems }; +} + +function badOneOf(problems) +{ + return { tag: 'oneOf', problems: problems }; +} + +function badCustom(msg) +{ + return { tag: 'custom', msg: msg }; +} + +function bad(msg) +{ + return { tag: 'fail', msg: msg }; +} + +function badToString(problem) +{ + var context = '_'; + while (problem) + { + switch (problem.tag) + { + case 'primitive': + return 'Expecting ' + problem.type + + (context === '_' ? '' : ' at ' + context) + + ' but instead got: ' + jsToString(problem.value); + + case 'index': + context += '[' + problem.index + ']'; + problem = problem.rest; + break; + + case 'field': + context += '.' + problem.field; + problem = problem.rest; + break; + + case 'oneOf': + var problems = problem.problems; + for (var i = 0; i < problems.length; i++) + { + problems[i] = badToString(problems[i]); + } + return 'I ran into the following problems' + + (context === '_' ? '' : ' at ' + context) + + ':\n\n' + problems.join('\n'); + + case 'custom': + return 'A `customDecoder` failed' + + (context === '_' ? '' : ' at ' + context) + + ' with the message: ' + problem.msg; + + case 'fail': + return 'I ran into a `fail` decoder' + + (context === '_' ? '' : ' at ' + context) + + ': ' + problem.msg; + } + } +} + +function jsToString(value) +{ + return value === undefined + ? 'undefined' + : JSON.stringify(value); +} + + +// DECODE + +function runOnString(decoder, string) +{ + var json; + try + { + json = JSON.parse(string); + } + catch (e) + { + return _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message); + } + return run(decoder, json); +} + +function run(decoder, value) +{ + var result = runHelp(decoder, value); + return (result.tag === 'ok') + ? _elm_lang$core$Result$Ok(result.value) + : _elm_lang$core$Result$Err(badToString(result)); +} + +function runHelp(decoder, value) +{ + switch (decoder.tag) + { + case 'bool': + return (typeof value === 'boolean') + ? ok(value) + : badPrimitive('a Bool', value); + + case 'int': + if (typeof value !== 'number') { + return badPrimitive('an Int', value); + } + + if (-2147483647 < value && value < 2147483647 && (value | 0) === value) { + return ok(value); + } + + if (isFinite(value) && !(value % 1)) { + return ok(value); + } + + return badPrimitive('an Int', value); + + case 'float': + return (typeof value === 'number') + ? ok(value) + : badPrimitive('a Float', value); + + case 'string': + return (typeof value === 'string') + ? ok(value) + : (value instanceof String) + ? ok(value + '') + : badPrimitive('a String', value); + + case 'null': + return (value === null) + ? ok(decoder.value) + : badPrimitive('null', value); + + case 'value': + return ok(value); + + case 'list': + if (!(value instanceof Array)) + { + return badPrimitive('a List', value); + } + + var list = _elm_lang$core$Native_List.Nil; + for (var i = value.length; i--; ) + { + var result = runHelp(decoder.decoder, value[i]); + if (result.tag !== 'ok') + { + return badIndex(i, result) + } + list = _elm_lang$core$Native_List.Cons(result.value, list); + } + return ok(list); + + case 'array': + if (!(value instanceof Array)) + { + return badPrimitive('an Array', value); + } + + var len = value.length; + var array = new Array(len); + for (var i = len; i--; ) + { + var result = runHelp(decoder.decoder, value[i]); + if (result.tag !== 'ok') + { + return badIndex(i, result); + } + array[i] = result.value; + } + return ok(_elm_lang$core$Native_Array.fromJSArray(array)); + + case 'maybe': + var result = runHelp(decoder.decoder, value); + return (result.tag === 'ok') + ? ok(_elm_lang$core$Maybe$Just(result.value)) + : ok(_elm_lang$core$Maybe$Nothing); + + case 'field': + var field = decoder.field; + if (typeof value !== 'object' || value === null || !(field in value)) + { + return badPrimitive('an object with a field named `' + field + '`', value); + } + + var result = runHelp(decoder.decoder, value[field]); + return (result.tag === 'ok') + ? result + : badField(field, result); + + case 'key-value': + if (typeof value !== 'object' || value === null || value instanceof Array) + { + return badPrimitive('an object', value); + } + + var keyValuePairs = _elm_lang$core$Native_List.Nil; + for (var key in value) + { + var result = runHelp(decoder.decoder, value[key]); + if (result.tag !== 'ok') + { + return badField(key, result); + } + var pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value); + keyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs); + } + return ok(keyValuePairs); + + case 'map-many': + var answer = decoder.func; + var decoders = decoder.decoders; + for (var i = 0; i < decoders.length; i++) + { + var result = runHelp(decoders[i], value); + if (result.tag !== 'ok') + { + return result; + } + answer = answer(result.value); + } + return ok(answer); + + case 'tuple': + var decoders = decoder.decoders; + var len = decoders.length; + + if ( !(value instanceof Array) || value.length !== len ) + { + return badPrimitive('a Tuple with ' + len + ' entries', value); + } + + var answer = decoder.func; + for (var i = 0; i < len; i++) + { + var result = runHelp(decoders[i], value[i]); + if (result.tag !== 'ok') + { + return badIndex(i, result); + } + answer = answer(result.value); + } + return ok(answer); + + case 'customAndThen': + var result = runHelp(decoder.decoder, value); + if (result.tag !== 'ok') + { + return result; + } + var realResult = decoder.callback(result.value); + if (realResult.ctor === 'Err') + { + return badCustom(realResult._0); + } + return ok(realResult._0); + + case 'andThen': + var result = runHelp(decoder.decoder, value); + return (result.tag !== 'ok') + ? result + : runHelp(decoder.callback(result.value), value); + + case 'oneOf': + var errors = []; + var temp = decoder.decoders; + while (temp.ctor !== '[]') + { + var result = runHelp(temp._0, value); + + if (result.tag === 'ok') + { + return result; + } + + errors.push(result); + + temp = temp._1; + } + return badOneOf(errors); + + case 'fail': + return bad(decoder.msg); + + case 'succeed': + return ok(decoder.msg); + } +} + + +// EQUALITY + +function equality(a, b) +{ + if (a === b) + { + return true; + } + + if (a.tag !== b.tag) + { + return false; + } + + switch (a.tag) + { + case 'succeed': + case 'fail': + return a.msg === b.msg; + + case 'bool': + case 'int': + case 'float': + case 'string': + case 'value': + return true; + + case 'null': + return a.value === b.value; + + case 'list': + case 'array': + case 'maybe': + case 'key-value': + return equality(a.decoder, b.decoder); + + case 'field': + return a.field === b.field && equality(a.decoder, b.decoder); + + case 'map-many': + case 'tuple': + if (a.func !== b.func) + { + return false; + } + return listEquality(a.decoders, b.decoders); + + case 'andThen': + case 'customAndThen': + return a.callback === b.callback && equality(a.decoder, b.decoder); + + case 'oneOf': + return listEquality(a.decoders, b.decoders); + } +} + +function listEquality(aDecoders, bDecoders) +{ + var len = aDecoders.length; + if (len !== bDecoders.length) + { + return false; + } + for (var i = 0; i < len; i++) + { + if (!equality(aDecoders[i], bDecoders[i])) + { + return false; + } + } + return true; +} + + +// ENCODE + +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 { + encode: F2(encode), + runOnString: F2(runOnString), + run: F2(run), + + decodeNull: decodeNull, + decodePrimitive: decodePrimitive, + decodeContainer: F2(decodeContainer), + + 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), + customAndThen: F2(customAndThen), + fail: fail, + succeed: succeed, + oneOf: oneOf, + + identity: identity, + encodeNull: null, + encodeArray: _elm_lang$core$Native_Array.toJSArray, + encodeList: _elm_lang$core$Native_List.toArray, + encodeObject: encodeObject, + + equality: equality +}; + +}(); +var _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList; +var _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray; +var _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject; +var _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull; +var _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode; +var _elm_lang$core$Json_Encode$Value = {ctor: 'Value'}; +var _elm_lang$core$Json_Decode$tuple8 = _elm_lang$core$Native_Json.decodeTuple8; +var _elm_lang$core$Json_Decode$tuple7 = _elm_lang$core$Native_Json.decodeTuple7; +var _elm_lang$core$Json_Decode$tuple6 = _elm_lang$core$Native_Json.decodeTuple6; +var _elm_lang$core$Json_Decode$tuple5 = _elm_lang$core$Native_Json.decodeTuple5; +var _elm_lang$core$Json_Decode$tuple4 = _elm_lang$core$Native_Json.decodeTuple4; +var _elm_lang$core$Json_Decode$tuple3 = _elm_lang$core$Native_Json.decodeTuple3; +var _elm_lang$core$Json_Decode$tuple2 = _elm_lang$core$Native_Json.decodeTuple2; +var _elm_lang$core$Json_Decode$tuple1 = _elm_lang$core$Native_Json.decodeTuple1; +var _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed; +var _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail; +var _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen; +var _elm_lang$core$Json_Decode$customDecoder = _elm_lang$core$Native_Json.customAndThen; +var _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run; +var _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value'); +var _elm_lang$core$Json_Decode$maybe = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder); +}; +var _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull; +var _elm_lang$core$Json_Decode$array = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder); +}; +var _elm_lang$core$Json_Decode$list = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder); +}; +var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool'); +var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int'); +var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float'); +var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string'); +var _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf; +var _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs; +var _elm_lang$core$Json_Decode$object8 = _elm_lang$core$Native_Json.decodeObject8; +var _elm_lang$core$Json_Decode$object7 = _elm_lang$core$Native_Json.decodeObject7; +var _elm_lang$core$Json_Decode$object6 = _elm_lang$core$Native_Json.decodeObject6; +var _elm_lang$core$Json_Decode$object5 = _elm_lang$core$Native_Json.decodeObject5; +var _elm_lang$core$Json_Decode$object4 = _elm_lang$core$Native_Json.decodeObject4; +var _elm_lang$core$Json_Decode$object3 = _elm_lang$core$Native_Json.decodeObject3; +var _elm_lang$core$Json_Decode$object2 = _elm_lang$core$Native_Json.decodeObject2; +var _elm_lang$core$Json_Decode$object1 = _elm_lang$core$Native_Json.decodeObject1; +var _elm_lang$core$Json_Decode_ops = _elm_lang$core$Json_Decode_ops || {}; +_elm_lang$core$Json_Decode_ops[':='] = _elm_lang$core$Native_Json.decodeField; +var _elm_lang$core$Json_Decode$at = F2( + function (fields, decoder) { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, y) { + return A2(_elm_lang$core$Json_Decode_ops[':='], x, y); + }), + decoder, + fields); + }); +var _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString; +var _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.decodeObject1; +var _elm_lang$core$Json_Decode$dict = function (decoder) { + return A2( + _elm_lang$core$Json_Decode$map, + _elm_lang$core$Dict$fromList, + _elm_lang$core$Json_Decode$keyValuePairs(decoder)); +}; +var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'}; +var _elm_lang$core$Set$foldr = F3( + function (f, b, _p0) { + var _p1 = _p0; + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (k, _p2, b) { + return A2(f, k, b); + }), + b, + _p1._0); + }); +var _elm_lang$core$Set$foldl = F3( + function (f, b, _p3) { + var _p4 = _p3; + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, _p5, b) { + return A2(f, k, b); + }), + b, + _p4._0); + }); +var _elm_lang$core$Set$toList = function (_p6) { + var _p7 = _p6; + return _elm_lang$core$Dict$keys(_p7._0); +}; +var _elm_lang$core$Set$size = function (_p8) { + var _p9 = _p8; + return _elm_lang$core$Dict$size(_p9._0); +}; +var _elm_lang$core$Set$member = F2( + function (k, _p10) { + var _p11 = _p10; + return A2(_elm_lang$core$Dict$member, k, _p11._0); + }); +var _elm_lang$core$Set$isEmpty = function (_p12) { + var _p13 = _p12; + return _elm_lang$core$Dict$isEmpty(_p13._0); +}; +var _elm_lang$core$Set$Set_elm_builtin = function (a) { + return {ctor: 'Set_elm_builtin', _0: a}; +}; +var _elm_lang$core$Set$empty = _elm_lang$core$Set$Set_elm_builtin(_elm_lang$core$Dict$empty); +var _elm_lang$core$Set$singleton = function (k) { + return _elm_lang$core$Set$Set_elm_builtin( + A2( + _elm_lang$core$Dict$singleton, + k, + {ctor: '_Tuple0'})); +}; +var _elm_lang$core$Set$insert = F2( + function (k, _p14) { + var _p15 = _p14; + return _elm_lang$core$Set$Set_elm_builtin( + A3( + _elm_lang$core$Dict$insert, + k, + {ctor: '_Tuple0'}, + _p15._0)); + }); +var _elm_lang$core$Set$fromList = function (xs) { + return A3(_elm_lang$core$List$foldl, _elm_lang$core$Set$insert, _elm_lang$core$Set$empty, xs); +}; +var _elm_lang$core$Set$map = F2( + function (f, s) { + return _elm_lang$core$Set$fromList( + A2( + _elm_lang$core$List$map, + f, + _elm_lang$core$Set$toList(s))); + }); +var _elm_lang$core$Set$remove = F2( + function (k, _p16) { + var _p17 = _p16; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$remove, k, _p17._0)); + }); +var _elm_lang$core$Set$union = F2( + function (_p19, _p18) { + var _p20 = _p19; + var _p21 = _p18; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$union, _p20._0, _p21._0)); + }); +var _elm_lang$core$Set$intersect = F2( + function (_p23, _p22) { + var _p24 = _p23; + var _p25 = _p22; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$intersect, _p24._0, _p25._0)); + }); +var _elm_lang$core$Set$diff = F2( + function (_p27, _p26) { + var _p28 = _p27; + var _p29 = _p26; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$diff, _p28._0, _p29._0)); + }); +var _elm_lang$core$Set$filter = F2( + function (p, _p30) { + var _p31 = _p30; + return _elm_lang$core$Set$Set_elm_builtin( + A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p32) { + return p(k); + }), + _p31._0)); + }); +var _elm_lang$core$Set$partition = F2( + function (p, _p33) { + var _p34 = _p33; + var _p35 = A2( + _elm_lang$core$Dict$partition, + F2( + function (k, _p36) { + return p(k); + }), + _p34._0); + var p1 = _p35._0; + var p2 = _p35._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Set$Set_elm_builtin(p1), + _1: _elm_lang$core$Set$Set_elm_builtin(p2) + }; + }); +var _elm_lang$dom$Native_Dom = function() { + +function on(node) +{ + return function(eventName, decoder, toTask) + { + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + + function performTask(event) + { + var result = A2(_elm_lang$core$Json_Decode$decodeValue, decoder, event); + if (result.ctor === 'Ok') + { + _elm_lang$core$Native_Scheduler.rawSpawn(toTask(result._0)); + } + } + + node.addEventListener(eventName, performTask); + + return function() + { + node.removeEventListener(eventName, performTask); + }; + }); + }; +} + +var rAF = typeof requestAnimationFrame !== 'undefined' + ? requestAnimationFrame + : function(callback) { callback(); }; + +function withNode(id, doStuff) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + rAF(function() + { + var node = document.getElementById(id); + if (node === null) + { + callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NotFound', _0: id })); + return; + } + callback(_elm_lang$core$Native_Scheduler.succeed(doStuff(node))); + }); + }); +} + + +// FOCUS + +function focus(id) +{ + return withNode(id, function(node) { + node.focus(); + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function blur(id) +{ + return withNode(id, function(node) { + node.blur(); + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + + +// SCROLLING + +function getScrollTop(id) +{ + return withNode(id, function(node) { + return node.scrollTop; + }); +} + +function setScrollTop(id, desiredScrollTop) +{ + return withNode(id, function(node) { + node.scrollTop = desiredScrollTop; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function toBottom(id) +{ + return withNode(id, function(node) { + node.scrollTop = node.scrollHeight; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function getScrollLeft(id) +{ + return withNode(id, function(node) { + return node.scrollLeft; + }); +} + +function setScrollLeft(id, desiredScrollLeft) +{ + return withNode(id, function(node) { + node.scrollLeft = desiredScrollLeft; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function toRight(id) +{ + return withNode(id, function(node) { + node.scrollLeft = node.scrollWidth; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + + +// SIZE + +function width(options, id) +{ + return withNode(id, function(node) { + switch (options.ctor) + { + case 'Content': + return node.scrollWidth; + case 'VisibleContent': + return node.clientWidth; + case 'VisibleContentWithBorders': + return node.offsetWidth; + case 'VisibleContentWithBordersAndMargins': + var rect = node.getBoundingClientRect(); + return rect.right - rect.left; + } + }); +} + +function height(options, id) +{ + return withNode(id, function(node) { + switch (options.ctor) + { + case 'Content': + return node.scrollHeight; + case 'VisibleContent': + return node.clientHeight; + case 'VisibleContentWithBorders': + return node.offsetHeight; + case 'VisibleContentWithBordersAndMargins': + var rect = node.getBoundingClientRect(); + return rect.bottom - rect.top; + } + }); +} + +return { + onDocument: F3(on(document)), + onWindow: F3(on(window)), + + focus: focus, + blur: blur, + + getScrollTop: getScrollTop, + setScrollTop: F2(setScrollTop), + getScrollLeft: getScrollLeft, + setScrollLeft: F2(setScrollLeft), + toBottom: toBottom, + toRight: toRight, + + height: F2(height), + width: F2(width) +}; + +}(); +var _elm_lang$dom$Dom_LowLevel$onWindow = _elm_lang$dom$Native_Dom.onWindow; +var _elm_lang$dom$Dom_LowLevel$onDocument = _elm_lang$dom$Native_Dom.onDocument; +//import Native.Json // + +var _elm_lang$virtual_dom$Native_VirtualDom = function() { + +var STYLE_KEY = 'STYLE'; +var EVENT_KEY = 'EVENT'; +var ATTR_KEY = 'ATTR'; +var ATTR_NS_KEY = 'ATTR_NS'; + + + +//////////// VIRTUAL DOM NODES //////////// + + +function text(string) +{ + return { + type: 'text', + text: string + }; +} + + +function node(tag) +{ + return F2(function(factList, kidList) { + return nodeHelp(tag, factList, kidList); + }); +} + + +function nodeHelp(tag, factList, kidList) +{ + var organized = organizeFacts(factList); + var namespace = organized.namespace; + var facts = organized.facts; + + var children = []; + var descendantsCount = 0; + while (kidList.ctor !== '[]') + { + var kid = kidList._0; + descendantsCount += (kid.descendantsCount || 0); + children.push(kid); + kidList = kidList._1; + } + descendantsCount += children.length; + + return { + type: 'node', + tag: tag, + facts: facts, + children: children, + namespace: namespace, + descendantsCount: descendantsCount + }; +} + + +function keyedNode(tag, factList, kidList) +{ + var organized = organizeFacts(factList); + var namespace = organized.namespace; + var facts = organized.facts; + + var children = []; + var descendantsCount = 0; + while (kidList.ctor !== '[]') + { + var kid = kidList._0; + descendantsCount += (kid._1.descendantsCount || 0); + children.push(kid); + kidList = kidList._1; + } + descendantsCount += children.length; + + return { + type: 'keyed-node', + tag: tag, + facts: facts, + children: children, + namespace: namespace, + descendantsCount: descendantsCount + }; +} + + +function custom(factList, model, impl) +{ + var facts = organizeFacts(factList).facts; + + return { + type: 'custom', + facts: facts, + model: model, + impl: impl + }; +} + + +function map(tagger, node) +{ + return { + type: 'tagger', + tagger: tagger, + node: node, + descendantsCount: 1 + (node.descendantsCount || 0) + }; +} + + +function thunk(func, args, thunk) +{ + return { + type: 'thunk', + func: func, + args: args, + thunk: thunk, + node: undefined + }; +} + +function lazy(fn, a) +{ + return thunk(fn, [a], function() { + return fn(a); + }); +} + +function lazy2(fn, a, b) +{ + return thunk(fn, [a,b], function() { + return A2(fn, a, b); + }); +} + +function lazy3(fn, a, b, c) +{ + return thunk(fn, [a,b,c], function() { + return A3(fn, a, b, c); + }); +} + + + +// FACTS + + +function organizeFacts(factList) +{ + var namespace, facts = {}; + + while (factList.ctor !== '[]') + { + var entry = factList._0; + var key = entry.key; + + if (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY) + { + var subFacts = facts[key] || {}; + subFacts[entry.realKey] = entry.value; + facts[key] = subFacts; + } + else if (key === STYLE_KEY) + { + var styles = facts[key] || {}; + var styleList = entry.value; + while (styleList.ctor !== '[]') + { + var style = styleList._0; + styles[style._0] = style._1; + styleList = styleList._1; + } + facts[key] = styles; + } + else if (key === 'namespace') + { + namespace = entry.value; + } + else + { + facts[key] = entry.value; + } + factList = factList._1; + } + + return { + facts: facts, + namespace: namespace + }; +} + + + +//////////// PROPERTIES AND ATTRIBUTES //////////// + + +function style(value) +{ + return { + key: STYLE_KEY, + value: value + }; +} + + +function property(key, value) +{ + return { + key: key, + value: value + }; +} + + +function attribute(key, value) +{ + return { + key: ATTR_KEY, + realKey: key, + value: value + }; +} + + +function attributeNS(namespace, key, value) +{ + return { + key: ATTR_NS_KEY, + realKey: key, + value: { + value: value, + namespace: namespace + } + }; +} + + +function on(name, options, decoder) +{ + return { + key: EVENT_KEY, + realKey: name, + value: { + options: options, + decoder: decoder + } + }; +} + + +function equalEvents(a, b) +{ + if (!a.options === b.options) + { + if (a.stopPropagation !== b.stopPropagation || a.preventDefault !== b.preventDefault) + { + return false; + } + } + return _elm_lang$core$Native_Json.equality(a.decoder, b.decoder); +} + + + +//////////// RENDERER //////////// + + +function renderer(parent, tagger, initialVirtualNode) +{ + var eventNode = { tagger: tagger, parent: undefined }; + + var domNode = render(initialVirtualNode, eventNode); + parent.appendChild(domNode); + + var state = 'NO_REQUEST'; + var currentVirtualNode = initialVirtualNode; + var nextVirtualNode = initialVirtualNode; + + function registerVirtualNode(vNode) + { + if (state === 'NO_REQUEST') + { + rAF(updateIfNeeded); + } + state = 'PENDING_REQUEST'; + nextVirtualNode = vNode; + } + + function updateIfNeeded() + { + switch (state) + { + case 'NO_REQUEST': + throw new Error( + 'Unexpected draw callback.\n' + + 'Please report this to .' + ); + + case 'PENDING_REQUEST': + rAF(updateIfNeeded); + state = 'EXTRA_REQUEST'; + + var patches = diff(currentVirtualNode, nextVirtualNode); + domNode = applyPatches(domNode, currentVirtualNode, patches, eventNode); + currentVirtualNode = nextVirtualNode; + + return; + + case 'EXTRA_REQUEST': + state = 'NO_REQUEST'; + return; + } + } + + return { update: registerVirtualNode }; +} + + +var rAF = + typeof requestAnimationFrame !== 'undefined' + ? requestAnimationFrame + : function(cb) { setTimeout(cb, 1000 / 60); }; + + + +//////////// RENDER //////////// + + +function render(vNode, eventNode) +{ + switch (vNode.type) + { + case 'thunk': + if (!vNode.node) + { + vNode.node = vNode.thunk(); + } + return render(vNode.node, eventNode); + + case 'tagger': + var subNode = vNode.node; + var tagger = vNode.tagger; + + while (subNode.type === 'tagger') + { + typeof tagger !== 'object' + ? tagger = [tagger, subNode.tagger] + : tagger.push(subNode.tagger); + + subNode = subNode.node; + } + + var subEventRoot = { + tagger: tagger, + parent: eventNode + }; + + var domNode = render(subNode, subEventRoot); + domNode.elm_event_node_ref = subEventRoot; + return domNode; + + case 'text': + return document.createTextNode(vNode.text); + + case 'node': + var domNode = vNode.namespace + ? document.createElementNS(vNode.namespace, vNode.tag) + : document.createElement(vNode.tag); + + applyFacts(domNode, eventNode, vNode.facts); + + var children = vNode.children; + + for (var i = 0; i < children.length; i++) + { + domNode.appendChild(render(children[i], eventNode)); + } + + return domNode; + + case 'keyed-node': + var domNode = vNode.namespace + ? document.createElementNS(vNode.namespace, vNode.tag) + : document.createElement(vNode.tag); + + applyFacts(domNode, eventNode, vNode.facts); + + var children = vNode.children; + + for (var i = 0; i < children.length; i++) + { + domNode.appendChild(render(children[i]._1, eventNode)); + } + + return domNode; + + case 'custom': + var domNode = vNode.impl.render(vNode.model); + applyFacts(domNode, eventNode, vNode.facts); + return domNode; + } +} + + + +//////////// APPLY FACTS //////////// + + +function applyFacts(domNode, eventNode, facts) +{ + for (var key in facts) + { + var value = facts[key]; + + switch (key) + { + case STYLE_KEY: + applyStyles(domNode, value); + break; + + case EVENT_KEY: + applyEvents(domNode, eventNode, value); + break; + + case ATTR_KEY: + applyAttrs(domNode, value); + break; + + case ATTR_NS_KEY: + applyAttrsNS(domNode, value); + break; + + case 'value': + if (domNode[key] !== value) + { + domNode[key] = value; + } + break; + + default: + domNode[key] = value; + break; + } + } +} + +function applyStyles(domNode, styles) +{ + var domNodeStyle = domNode.style; + + for (var key in styles) + { + domNodeStyle[key] = styles[key]; + } +} + +function applyEvents(domNode, eventNode, events) +{ + var allHandlers = domNode.elm_handlers || {}; + + for (var key in events) + { + var handler = allHandlers[key]; + var value = events[key]; + + if (typeof value === 'undefined') + { + domNode.removeEventListener(key, handler); + allHandlers[key] = undefined; + } + else if (typeof handler === 'undefined') + { + var handler = makeEventHandler(eventNode, value); + domNode.addEventListener(key, handler); + allHandlers[key] = handler; + } + else + { + handler.info = value; + } + } + + domNode.elm_handlers = allHandlers; +} + +function makeEventHandler(eventNode, info) +{ + function eventHandler(event) + { + var info = eventHandler.info; + + var value = A2(_elm_lang$core$Native_Json.run, info.decoder, event); + + if (value.ctor === 'Ok') + { + var options = info.options; + if (options.stopPropagation) + { + event.stopPropagation(); + } + if (options.preventDefault) + { + event.preventDefault(); + } + + var message = value._0; + + var currentEventNode = eventNode; + while (currentEventNode) + { + var tagger = currentEventNode.tagger; + if (typeof tagger === 'function') + { + message = tagger(message); + } + else + { + for (var i = tagger.length; i--; ) + { + message = tagger[i](message); + } + } + currentEventNode = currentEventNode.parent; + } + } + }; + + eventHandler.info = info; + + return eventHandler; +} + +function applyAttrs(domNode, attrs) +{ + for (var key in attrs) + { + var value = attrs[key]; + if (typeof value === 'undefined') + { + domNode.removeAttribute(key); + } + else + { + domNode.setAttribute(key, value); + } + } +} + +function applyAttrsNS(domNode, nsAttrs) +{ + for (var key in nsAttrs) + { + var pair = nsAttrs[key]; + var namespace = pair.namespace; + var value = pair.value; + + if (typeof value === 'undefined') + { + domNode.removeAttributeNS(namespace, key); + } + else + { + domNode.setAttributeNS(namespace, key, value); + } + } +} + + + +//////////// DIFF //////////// + + +function diff(a, b) +{ + var patches = []; + diffHelp(a, b, patches, 0); + return patches; +} + + +function makePatch(type, index, data) +{ + return { + index: index, + type: type, + data: data, + domNode: undefined, + eventNode: undefined + }; +} + + +function diffHelp(a, b, patches, index) +{ + if (a === b) + { + return; + } + + var aType = a.type; + var bType = b.type; + + // Bail if you run into different types of nodes. Implies that the + // structure has changed significantly and it's not worth a diff. + if (aType !== bType) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + // Now we know that both nodes are the same type. + switch (bType) + { + case 'thunk': + var aArgs = a.args; + var bArgs = b.args; + var i = aArgs.length; + var same = a.func === b.func && i === bArgs.length; + while (same && i--) + { + same = aArgs[i] === bArgs[i]; + } + if (same) + { + b.node = a.node; + return; + } + b.node = b.thunk(); + var subPatches = []; + diffHelp(a.node, b.node, subPatches, 0); + if (subPatches.length > 0) + { + patches.push(makePatch('p-thunk', index, subPatches)); + } + return; + + case 'tagger': + // gather nested taggers + var aTaggers = a.tagger; + var bTaggers = b.tagger; + var nesting = false; + + var aSubNode = a.node; + while (aSubNode.type === 'tagger') + { + nesting = true; + + typeof aTaggers !== 'object' + ? aTaggers = [aTaggers, aSubNode.tagger] + : aTaggers.push(aSubNode.tagger); + + aSubNode = aSubNode.node; + } + + var bSubNode = b.node; + while (bSubNode.type === 'tagger') + { + nesting = true; + + typeof bTaggers !== 'object' + ? bTaggers = [bTaggers, bSubNode.tagger] + : bTaggers.push(bSubNode.tagger); + + bSubNode = bSubNode.node; + } + + // Just bail if different numbers of taggers. This implies the + // structure of the virtual DOM has changed. + if (nesting && aTaggers.length !== bTaggers.length) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + // check if taggers are "the same" + if (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers) + { + patches.push(makePatch('p-tagger', index, bTaggers)); + } + + // diff everything below the taggers + diffHelp(aSubNode, bSubNode, patches, index + 1); + return; + + case 'text': + if (a.text !== b.text) + { + patches.push(makePatch('p-text', index, b.text)); + return; + } + + return; + + case 'node': + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (a.tag !== b.tag || a.namespace !== b.namespace) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + diffChildren(a, b, patches, index); + return; + + case 'keyed-node': + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (a.tag !== b.tag || a.namespace !== b.namespace) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + diffKeyedChildren(a, b, patches, index); + return; + + case 'custom': + if (a.impl !== b.impl) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + var patch = b.impl.diff(a,b); + if (patch) + { + patches.push(makePatch('p-custom', index, patch)); + return; + } + + return; + } +} + + +// assumes the incoming arrays are the same length +function pairwiseRefEqual(as, bs) +{ + for (var i = 0; i < as.length; i++) + { + if (as[i] !== bs[i]) + { + return false; + } + } + + return true; +} + + +// TODO Instead of creating a new diff object, it's possible to just test if +// there *is* a diff. During the actual patch, do the diff again and make the +// modifications directly. This way, there's no new allocations. Worth it? +function diffFacts(a, b, category) +{ + var diff; + + // look for changes and removals + for (var aKey in a) + { + if (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY) + { + var subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey); + if (subDiff) + { + diff = diff || {}; + diff[aKey] = subDiff; + } + continue; + } + + // remove if not in the new facts + if (!(aKey in b)) + { + diff = diff || {}; + diff[aKey] = + (typeof category === 'undefined') + ? (typeof a[aKey] === 'string' ? '' : null) + : + (category === STYLE_KEY) + ? '' + : + (category === EVENT_KEY || category === ATTR_KEY) + ? undefined + : + { namespace: a[aKey].namespace, value: undefined }; + + continue; + } + + var aValue = a[aKey]; + var bValue = b[aKey]; + + // reference equal, so don't worry about it + if (aValue === bValue && aKey !== 'value' + || category === EVENT_KEY && equalEvents(aValue, bValue)) + { + continue; + } + + diff = diff || {}; + diff[aKey] = bValue; + } + + // add new stuff + for (var bKey in b) + { + if (!(bKey in a)) + { + diff = diff || {}; + diff[bKey] = b[bKey]; + } + } + + return diff; +} + + +function diffChildren(aParent, bParent, patches, rootIndex) +{ + var aChildren = aParent.children; + var bChildren = bParent.children; + + var aLen = aChildren.length; + var bLen = bChildren.length; + + // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS + + if (aLen > bLen) + { + patches.push(makePatch('p-remove-last', rootIndex, aLen - bLen)); + } + else if (aLen < bLen) + { + patches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen))); + } + + // PAIRWISE DIFF EVERYTHING ELSE + + var index = rootIndex; + var minLen = aLen < bLen ? aLen : bLen; + for (var i = 0; i < minLen; i++) + { + index++; + var aChild = aChildren[i]; + diffHelp(aChild, bChildren[i], patches, index); + index += aChild.descendantsCount || 0; + } +} + + + +//////////// KEYED DIFF //////////// + + +function diffKeyedChildren(aParent, bParent, patches, rootIndex) +{ + var localPatches = []; + + var changes = {}; // Dict String Entry + var inserts = []; // Array { index : Int, entry : Entry } + // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } + + var aChildren = aParent.children; + var bChildren = bParent.children; + var aLen = aChildren.length; + var bLen = bChildren.length; + var aIndex = 0; + var bIndex = 0; + + var index = rootIndex; + + while (aIndex < aLen && bIndex < bLen) + { + var a = aChildren[aIndex]; + var b = bChildren[bIndex]; + + var aKey = a._0; + var bKey = b._0; + var aNode = a._1; + var bNode = b._1; + + // check if keys match + + if (aKey === bKey) + { + index++; + diffHelp(aNode, bNode, localPatches, index); + index += aNode.descendantsCount || 0; + + aIndex++; + bIndex++; + continue; + } + + // look ahead 1 to detect insertions and removals. + + var aLookAhead = aIndex + 1 < aLen; + var bLookAhead = bIndex + 1 < bLen; + + if (aLookAhead) + { + var aNext = aChildren[aIndex + 1]; + var aNextKey = aNext._0; + var aNextNode = aNext._1; + var oldMatch = bKey === aNextKey; + } + + if (bLookAhead) + { + var bNext = bChildren[bIndex + 1]; + var bNextKey = bNext._0; + var bNextNode = bNext._1; + var newMatch = aKey === bNextKey; + } + + + // swap a and b + if (aLookAhead && bLookAhead && newMatch && oldMatch) + { + index++; + diffHelp(aNode, bNextNode, localPatches, index); + insertNode(changes, localPatches, aKey, bNode, bIndex, inserts); + index += aNode.descendantsCount || 0; + + index++; + removeNode(changes, localPatches, aKey, aNextNode, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 2; + continue; + } + + // insert b + if (bLookAhead && newMatch) + { + index++; + insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); + diffHelp(aNode, bNextNode, localPatches, index); + index += aNode.descendantsCount || 0; + + aIndex += 1; + bIndex += 2; + continue; + } + + // remove a + if (aLookAhead && oldMatch) + { + index++; + removeNode(changes, localPatches, aKey, aNode, index); + index += aNode.descendantsCount || 0; + + index++; + diffHelp(aNextNode, bNode, localPatches, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 1; + continue; + } + + // remove a, insert b + if (aLookAhead && bLookAhead && aNextKey === bNextKey) + { + index++; + removeNode(changes, localPatches, aKey, aNode, index); + insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); + index += aNode.descendantsCount || 0; + + index++; + diffHelp(aNextNode, bNextNode, localPatches, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 2; + continue; + } + + break; + } + + // eat up any remaining nodes with removeNode and insertNode + + while (aIndex < aLen) + { + index++; + var a = aChildren[aIndex]; + var aNode = a._1; + removeNode(changes, localPatches, a._0, aNode, index); + index += aNode.descendantsCount || 0; + aIndex++; + } + + var endInserts; + while (bIndex < bLen) + { + endInserts = endInserts || []; + var b = bChildren[bIndex]; + insertNode(changes, localPatches, b._0, b._1, undefined, endInserts); + bIndex++; + } + + if (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined') + { + patches.push(makePatch('p-reorder', rootIndex, { + patches: localPatches, + inserts: inserts, + endInserts: endInserts + })); + } +} + + + +//////////// CHANGES FROM KEYED DIFF //////////// + + +var POSTFIX = '_elmW6BL'; + + +function insertNode(changes, localPatches, key, vnode, bIndex, inserts) +{ + var entry = changes[key]; + + // never seen this key before + if (typeof entry === 'undefined') + { + entry = { + tag: 'insert', + vnode: vnode, + index: bIndex, + data: undefined + }; + + inserts.push({ index: bIndex, entry: entry }); + changes[key] = entry; + + return; + } + + // this key was removed earlier, a match! + if (entry.tag === 'remove') + { + inserts.push({ index: bIndex, entry: entry }); + + entry.tag = 'move'; + var subPatches = []; + diffHelp(entry.vnode, vnode, subPatches, entry.index); + entry.index = bIndex; + entry.data.data = { + patches: subPatches, + entry: entry + }; + + return; + } + + // this key has already been inserted or moved, a duplicate! + insertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts); +} + + +function removeNode(changes, localPatches, key, vnode, index) +{ + var entry = changes[key]; + + // never seen this key before + if (typeof entry === 'undefined') + { + var patch = makePatch('p-remove', index, undefined); + localPatches.push(patch); + + changes[key] = { + tag: 'remove', + vnode: vnode, + index: index, + data: patch + }; + + return; + } + + // this key was inserted earlier, a match! + if (entry.tag === 'insert') + { + entry.tag = 'move'; + var subPatches = []; + diffHelp(vnode, entry.vnode, subPatches, index); + + var patch = makePatch('p-remove', index, { + patches: subPatches, + entry: entry + }); + localPatches.push(patch); + + return; + } + + // this key has already been removed or moved, a duplicate! + removeNode(changes, localPatches, key + POSTFIX, vnode, index); +} + + + +//////////// ADD DOM NODES //////////// +// +// Each DOM node has an "index" assigned in order of traversal. It is important +// to minimize our crawl over the actual DOM, so these indexes (along with the +// descendantsCount of virtual nodes) let us skip touching entire subtrees of +// the DOM if we know there are no patches there. + + +function addDomNodes(domNode, vNode, patches, eventNode) +{ + addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode); +} + + +// assumes `patches` is non-empty and indexes increase monotonically. +function addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode) +{ + var patch = patches[i]; + var index = patch.index; + + while (index === low) + { + var patchType = patch.type; + + if (patchType === 'p-thunk') + { + addDomNodes(domNode, vNode.node, patch.data, eventNode); + } + else if (patchType === 'p-reorder') + { + patch.domNode = domNode; + patch.eventNode = eventNode; + + var subPatches = patch.data.patches; + if (subPatches.length > 0) + { + addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + else if (patchType === 'p-remove') + { + patch.domNode = domNode; + patch.eventNode = eventNode; + + var data = patch.data; + if (typeof data !== 'undefined') + { + data.entry.data = domNode; + var subPatches = data.patches; + if (subPatches.length > 0) + { + addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + } + else + { + patch.domNode = domNode; + patch.eventNode = eventNode; + } + + i++; + + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + + switch (vNode.type) + { + case 'tagger': + var subNode = vNode.node; + + while (subNode.type === "tagger") + { + subNode = subNode.node; + } + + return addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); + + case 'node': + var vChildren = vNode.children; + var childNodes = domNode.childNodes; + for (var j = 0; j < vChildren.length; j++) + { + low++; + var vChild = vChildren[j]; + var nextLow = low + (vChild.descendantsCount || 0); + if (low <= index && index <= nextLow) + { + i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + low = nextLow; + } + return i; + + case 'keyed-node': + var vChildren = vNode.children; + var childNodes = domNode.childNodes; + for (var j = 0; j < vChildren.length; j++) + { + low++; + var vChild = vChildren[j]._1; + var nextLow = low + (vChild.descendantsCount || 0); + if (low <= index && index <= nextLow) + { + i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + low = nextLow; + } + return i; + + case 'text': + case 'thunk': + throw new Error('should never traverse `text` or `thunk` nodes like this'); + } +} + + + +//////////// APPLY PATCHES //////////// + + +function applyPatches(rootDomNode, oldVirtualNode, patches, eventNode) +{ + if (patches.length === 0) + { + return rootDomNode; + } + + addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); + return applyPatchesHelp(rootDomNode, patches); +} + +function applyPatchesHelp(rootDomNode, patches) +{ + for (var i = 0; i < patches.length; i++) + { + var patch = patches[i]; + var localDomNode = patch.domNode + var newNode = applyPatch(localDomNode, patch); + if (localDomNode === rootDomNode) + { + rootDomNode = newNode; + } + } + return rootDomNode; +} + +function applyPatch(domNode, patch) +{ + switch (patch.type) + { + case 'p-redraw': + return applyPatchRedraw(domNode, patch.data, patch.eventNode); + + case 'p-facts': + applyFacts(domNode, patch.eventNode, patch.data); + return domNode; + + case 'p-text': + domNode.replaceData(0, domNode.length, patch.data); + return domNode; + + case 'p-thunk': + return applyPatchesHelp(domNode, patch.data); + + case 'p-tagger': + domNode.elm_event_node_ref.tagger = patch.data; + return domNode; + + case 'p-remove-last': + var i = patch.data; + while (i--) + { + domNode.removeChild(domNode.lastChild); + } + return domNode; + + case 'p-append': + var newNodes = patch.data; + for (var i = 0; i < newNodes.length; i++) + { + domNode.appendChild(render(newNodes[i], patch.eventNode)); + } + return domNode; + + case 'p-remove': + var data = patch.data; + if (typeof data === 'undefined') + { + domNode.parentNode.removeChild(domNode); + return domNode; + } + var entry = data.entry; + if (typeof entry.index !== 'undefined') + { + domNode.parentNode.removeChild(domNode); + } + entry.data = applyPatchesHelp(domNode, data.patches); + return domNode; + + case 'p-reorder': + return applyPatchReorder(domNode, patch); + + case 'p-custom': + var impl = patch.data; + return impl.applyPatch(domNode, impl.data); + + default: + throw new Error('Ran into an unknown patch!'); + } +} + + +function applyPatchRedraw(domNode, vNode, eventNode) +{ + var parentNode = domNode.parentNode; + var newNode = render(vNode, eventNode); + + if (typeof newNode.elm_event_node_ref === 'undefined') + { + newNode.elm_event_node_ref = domNode.elm_event_node_ref; + } + + if (parentNode && newNode !== domNode) + { + parentNode.replaceChild(newNode, domNode); + } + return newNode; +} + + +function applyPatchReorder(domNode, patch) +{ + var data = patch.data; + + // remove end inserts + var frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch); + + // removals + domNode = applyPatchesHelp(domNode, data.patches); + + // inserts + var inserts = data.inserts; + for (var i = 0; i < inserts.length; i++) + { + var insert = inserts[i]; + var entry = insert.entry; + var node = entry.tag === 'move' + ? entry.data + : render(entry.vnode, patch.eventNode); + domNode.insertBefore(node, domNode.childNodes[insert.index]); + } + + // add end inserts + if (typeof frag !== 'undefined') + { + domNode.appendChild(frag); + } + + return domNode; +} + + +function applyPatchReorderEndInsertsHelp(endInserts, patch) +{ + if (typeof endInserts === 'undefined') + { + return; + } + + var frag = document.createDocumentFragment(); + for (var i = 0; i < endInserts.length; i++) + { + var insert = endInserts[i]; + var entry = insert.entry; + frag.appendChild(entry.tag === 'move' + ? entry.data + : render(entry.vnode, patch.eventNode) + ); + } + return frag; +} + + + +//////////// PROGRAMS //////////// + + +function programWithFlags(details) +{ + return { + init: details.init, + update: details.update, + subscriptions: details.subscriptions, + view: details.view, + renderer: renderer + }; +} + + +return { + node: node, + text: text, + + custom: custom, + + map: F2(map), + + on: F3(on), + style: style, + property: F2(property), + attribute: F2(attribute), + attributeNS: F3(attributeNS), + + lazy: F2(lazy), + lazy2: F3(lazy2), + lazy3: F4(lazy3), + keyedNode: F3(keyedNode), + + programWithFlags: programWithFlags +}; + +}();var _elm_lang$virtual_dom$VirtualDom$programWithFlags = _elm_lang$virtual_dom$Native_VirtualDom.programWithFlags; +var _elm_lang$virtual_dom$VirtualDom$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode; +var _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3; +var _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2; +var _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy; +var _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false}; +var _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on; +var _elm_lang$virtual_dom$VirtualDom$on = F2( + function (eventName, decoder) { + return A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder); + }); +var _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style; +var _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS; +var _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute; +var _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property; +var _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map; +var _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text; +var _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node; +var _elm_lang$virtual_dom$VirtualDom$Options = F2( + function (a, b) { + return {stopPropagation: a, preventDefault: b}; + }); +var _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'}; +var _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'}; +var _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text; +var _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node; +var _elm_lang$html$Html$body = _elm_lang$html$Html$node('body'); +var _elm_lang$html$Html$section = _elm_lang$html$Html$node('section'); +var _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav'); +var _elm_lang$html$Html$article = _elm_lang$html$Html$node('article'); +var _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside'); +var _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1'); +var _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2'); +var _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3'); +var _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4'); +var _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5'); +var _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6'); +var _elm_lang$html$Html$header = _elm_lang$html$Html$node('header'); +var _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer'); +var _elm_lang$html$Html$address = _elm_lang$html$Html$node('address'); +var _elm_lang$html$Html$main$ = _elm_lang$html$Html$node('main'); +var _elm_lang$html$Html$p = _elm_lang$html$Html$node('p'); +var _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr'); +var _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre'); +var _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote'); +var _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol'); +var _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul'); +var _elm_lang$html$Html$li = _elm_lang$html$Html$node('li'); +var _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl'); +var _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt'); +var _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd'); +var _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure'); +var _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption'); +var _elm_lang$html$Html$div = _elm_lang$html$Html$node('div'); +var _elm_lang$html$Html$a = _elm_lang$html$Html$node('a'); +var _elm_lang$html$Html$em = _elm_lang$html$Html$node('em'); +var _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong'); +var _elm_lang$html$Html$small = _elm_lang$html$Html$node('small'); +var _elm_lang$html$Html$s = _elm_lang$html$Html$node('s'); +var _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite'); +var _elm_lang$html$Html$q = _elm_lang$html$Html$node('q'); +var _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn'); +var _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr'); +var _elm_lang$html$Html$time = _elm_lang$html$Html$node('time'); +var _elm_lang$html$Html$code = _elm_lang$html$Html$node('code'); +var _elm_lang$html$Html$var = _elm_lang$html$Html$node('var'); +var _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp'); +var _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd'); +var _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub'); +var _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup'); +var _elm_lang$html$Html$i = _elm_lang$html$Html$node('i'); +var _elm_lang$html$Html$b = _elm_lang$html$Html$node('b'); +var _elm_lang$html$Html$u = _elm_lang$html$Html$node('u'); +var _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark'); +var _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby'); +var _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt'); +var _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp'); +var _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi'); +var _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo'); +var _elm_lang$html$Html$span = _elm_lang$html$Html$node('span'); +var _elm_lang$html$Html$br = _elm_lang$html$Html$node('br'); +var _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr'); +var _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins'); +var _elm_lang$html$Html$del = _elm_lang$html$Html$node('del'); +var _elm_lang$html$Html$img = _elm_lang$html$Html$node('img'); +var _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe'); +var _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed'); +var _elm_lang$html$Html$object = _elm_lang$html$Html$node('object'); +var _elm_lang$html$Html$param = _elm_lang$html$Html$node('param'); +var _elm_lang$html$Html$video = _elm_lang$html$Html$node('video'); +var _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio'); +var _elm_lang$html$Html$source = _elm_lang$html$Html$node('source'); +var _elm_lang$html$Html$track = _elm_lang$html$Html$node('track'); +var _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas'); +var _elm_lang$html$Html$svg = _elm_lang$html$Html$node('svg'); +var _elm_lang$html$Html$math = _elm_lang$html$Html$node('math'); +var _elm_lang$html$Html$table = _elm_lang$html$Html$node('table'); +var _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption'); +var _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup'); +var _elm_lang$html$Html$col = _elm_lang$html$Html$node('col'); +var _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody'); +var _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead'); +var _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot'); +var _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr'); +var _elm_lang$html$Html$td = _elm_lang$html$Html$node('td'); +var _elm_lang$html$Html$th = _elm_lang$html$Html$node('th'); +var _elm_lang$html$Html$form = _elm_lang$html$Html$node('form'); +var _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset'); +var _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend'); +var _elm_lang$html$Html$label = _elm_lang$html$Html$node('label'); +var _elm_lang$html$Html$input = _elm_lang$html$Html$node('input'); +var _elm_lang$html$Html$button = _elm_lang$html$Html$node('button'); +var _elm_lang$html$Html$select = _elm_lang$html$Html$node('select'); +var _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist'); +var _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup'); +var _elm_lang$html$Html$option = _elm_lang$html$Html$node('option'); +var _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea'); +var _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen'); +var _elm_lang$html$Html$output = _elm_lang$html$Html$node('output'); +var _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress'); +var _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter'); +var _elm_lang$html$Html$details = _elm_lang$html$Html$node('details'); +var _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary'); +var _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem'); +var _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu'); +var _elm_lang$html$Html_App$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags; +var _elm_lang$html$Html_App$program = function (app) { + return _elm_lang$html$Html_App$programWithFlags( + _elm_lang$core$Native_Utils.update( + app, + { + init: function (_p0) { + return app.init; + } + })); +}; +var _elm_lang$html$Html_App$beginnerProgram = function (_p1) { + var _p2 = _p1; + return _elm_lang$html$Html_App$programWithFlags( + { + init: function (_p3) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _p2.model, + _elm_lang$core$Native_List.fromArray( + [])); + }, + update: F2( + function (msg, model) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + A2(_p2.update, msg, model), + _elm_lang$core$Native_List.fromArray( + [])); + }), + view: _p2.view, + subscriptions: function (_p4) { + return _elm_lang$core$Platform_Sub$none; + } + }); +}; +var _elm_lang$html$Html_App$map = _elm_lang$virtual_dom$VirtualDom$map; +var _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute; +var _elm_lang$html$Html_Attributes$contextmenu = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value); +}; +var _elm_lang$html$Html_Attributes$draggable = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'draggable', value); +}; +var _elm_lang$html$Html_Attributes$list = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'list', value); +}; +var _elm_lang$html$Html_Attributes$maxlength = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'maxlength', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$datetime = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'datetime', value); +}; +var _elm_lang$html$Html_Attributes$pubdate = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'pubdate', value); +}; +var _elm_lang$html$Html_Attributes$colspan = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'colspan', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$rowspan = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'rowspan', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property; +var _elm_lang$html$Html_Attributes$stringProperty = F2( + function (name, string) { + return A2( + _elm_lang$html$Html_Attributes$property, + name, + _elm_lang$core$Json_Encode$string(string)); + }); +var _elm_lang$html$Html_Attributes$class = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name); +}; +var _elm_lang$html$Html_Attributes$id = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name); +}; +var _elm_lang$html$Html_Attributes$title = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name); +}; +var _elm_lang$html$Html_Attributes$accesskey = function ($char) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'accessKey', + _elm_lang$core$String$fromChar($char)); +}; +var _elm_lang$html$Html_Attributes$dir = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value); +}; +var _elm_lang$html$Html_Attributes$dropzone = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value); +}; +var _elm_lang$html$Html_Attributes$itemprop = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'itemprop', value); +}; +var _elm_lang$html$Html_Attributes$lang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value); +}; +var _elm_lang$html$Html_Attributes$tabindex = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'tabIndex', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$charset = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'charset', value); +}; +var _elm_lang$html$Html_Attributes$content = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value); +}; +var _elm_lang$html$Html_Attributes$httpEquiv = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value); +}; +var _elm_lang$html$Html_Attributes$language = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value); +}; +var _elm_lang$html$Html_Attributes$src = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value); +}; +var _elm_lang$html$Html_Attributes$height = function (value) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'height', + _elm_lang$core$Basics$toString(value)); +}; +var _elm_lang$html$Html_Attributes$width = function (value) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'width', + _elm_lang$core$Basics$toString(value)); +}; +var _elm_lang$html$Html_Attributes$alt = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value); +}; +var _elm_lang$html$Html_Attributes$preload = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value); +}; +var _elm_lang$html$Html_Attributes$poster = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value); +}; +var _elm_lang$html$Html_Attributes$kind = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value); +}; +var _elm_lang$html$Html_Attributes$srclang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value); +}; +var _elm_lang$html$Html_Attributes$sandbox = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value); +}; +var _elm_lang$html$Html_Attributes$srcdoc = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value); +}; +var _elm_lang$html$Html_Attributes$type$ = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value); +}; +var _elm_lang$html$Html_Attributes$value = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value); +}; +var _elm_lang$html$Html_Attributes$defaultValue = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value); +}; +var _elm_lang$html$Html_Attributes$placeholder = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value); +}; +var _elm_lang$html$Html_Attributes$accept = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value); +}; +var _elm_lang$html$Html_Attributes$acceptCharset = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value); +}; +var _elm_lang$html$Html_Attributes$action = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value); +}; +var _elm_lang$html$Html_Attributes$autocomplete = function (bool) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'autocomplete', + bool ? 'on' : 'off'); +}; +var _elm_lang$html$Html_Attributes$autosave = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'autosave', value); +}; +var _elm_lang$html$Html_Attributes$enctype = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value); +}; +var _elm_lang$html$Html_Attributes$formaction = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'formAction', value); +}; +var _elm_lang$html$Html_Attributes$minlength = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'minLength', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$method = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value); +}; +var _elm_lang$html$Html_Attributes$name = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value); +}; +var _elm_lang$html$Html_Attributes$pattern = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value); +}; +var _elm_lang$html$Html_Attributes$size = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'size', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$for = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value); +}; +var _elm_lang$html$Html_Attributes$form = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'form', value); +}; +var _elm_lang$html$Html_Attributes$max = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value); +}; +var _elm_lang$html$Html_Attributes$min = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value); +}; +var _elm_lang$html$Html_Attributes$step = function (n) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n); +}; +var _elm_lang$html$Html_Attributes$cols = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'cols', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$rows = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'rows', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$wrap = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value); +}; +var _elm_lang$html$Html_Attributes$usemap = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value); +}; +var _elm_lang$html$Html_Attributes$shape = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value); +}; +var _elm_lang$html$Html_Attributes$coords = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value); +}; +var _elm_lang$html$Html_Attributes$challenge = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'challenge', value); +}; +var _elm_lang$html$Html_Attributes$keytype = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value); +}; +var _elm_lang$html$Html_Attributes$align = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value); +}; +var _elm_lang$html$Html_Attributes$cite = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value); +}; +var _elm_lang$html$Html_Attributes$href = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value); +}; +var _elm_lang$html$Html_Attributes$target = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value); +}; +var _elm_lang$html$Html_Attributes$downloadAs = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value); +}; +var _elm_lang$html$Html_Attributes$hreflang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value); +}; +var _elm_lang$html$Html_Attributes$media = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'media', value); +}; +var _elm_lang$html$Html_Attributes$ping = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value); +}; +var _elm_lang$html$Html_Attributes$rel = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'rel', value); +}; +var _elm_lang$html$Html_Attributes$start = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'start', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$headers = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value); +}; +var _elm_lang$html$Html_Attributes$scope = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value); +}; +var _elm_lang$html$Html_Attributes$manifest = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'manifest', value); +}; +var _elm_lang$html$Html_Attributes$boolProperty = F2( + function (name, bool) { + return A2( + _elm_lang$html$Html_Attributes$property, + name, + _elm_lang$core$Json_Encode$bool(bool)); + }); +var _elm_lang$html$Html_Attributes$hidden = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool); +}; +var _elm_lang$html$Html_Attributes$contenteditable = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool); +}; +var _elm_lang$html$Html_Attributes$spellcheck = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool); +}; +var _elm_lang$html$Html_Attributes$async = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool); +}; +var _elm_lang$html$Html_Attributes$defer = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool); +}; +var _elm_lang$html$Html_Attributes$scoped = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool); +}; +var _elm_lang$html$Html_Attributes$autoplay = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool); +}; +var _elm_lang$html$Html_Attributes$controls = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool); +}; +var _elm_lang$html$Html_Attributes$loop = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool); +}; +var _elm_lang$html$Html_Attributes$default = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool); +}; +var _elm_lang$html$Html_Attributes$seamless = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool); +}; +var _elm_lang$html$Html_Attributes$checked = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool); +}; +var _elm_lang$html$Html_Attributes$selected = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool); +}; +var _elm_lang$html$Html_Attributes$autofocus = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool); +}; +var _elm_lang$html$Html_Attributes$disabled = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool); +}; +var _elm_lang$html$Html_Attributes$multiple = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool); +}; +var _elm_lang$html$Html_Attributes$novalidate = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool); +}; +var _elm_lang$html$Html_Attributes$readonly = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool); +}; +var _elm_lang$html$Html_Attributes$required = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool); +}; +var _elm_lang$html$Html_Attributes$ismap = function (value) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value); +}; +var _elm_lang$html$Html_Attributes$download = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool); +}; +var _elm_lang$html$Html_Attributes$reversed = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool); +}; +var _elm_lang$html$Html_Attributes$classList = function (list) { + return _elm_lang$html$Html_Attributes$class( + A2( + _elm_lang$core$String$join, + ' ', + A2( + _elm_lang$core$List$map, + _elm_lang$core$Basics$fst, + A2(_elm_lang$core$List$filter, _elm_lang$core$Basics$snd, list)))); +}; +var _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style; +var _elm_lang$keyboard$Keyboard$onSelfMsg = F3( + function (router, _p0, state) { + var _p1 = _p0; + var _p2 = A2(_elm_lang$core$Dict$get, _p1.category, state); + if (_p2.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var send = function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(_p1.keyCode)); + }; + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p2._0.taggers)), + function (_p3) { + return _elm_lang$core$Task$succeed(state); + }); + } + }); +var _elm_lang$keyboard$Keyboard_ops = _elm_lang$keyboard$Keyboard_ops || {}; +_elm_lang$keyboard$Keyboard_ops['&>'] = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Task$andThen, + t1, + function (_p4) { + return t2; + }); + }); +var _elm_lang$keyboard$Keyboard$init = _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty); +var _elm_lang$keyboard$Keyboard$categorizeHelpHelp = F2( + function (value, maybeValues) { + var _p5 = maybeValues; + if (_p5.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Just( + _elm_lang$core$Native_List.fromArray( + [value])); + } else { + return _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$List_ops['::'], value, _p5._0)); + } + }); +var _elm_lang$keyboard$Keyboard$categorizeHelp = F2( + function (subs, subDict) { + categorizeHelp: + while (true) { + var _p6 = subs; + if (_p6.ctor === '[]') { + return subDict; + } else { + var _v4 = _p6._1, + _v5 = A3( + _elm_lang$core$Dict$update, + _p6._0._0, + _elm_lang$keyboard$Keyboard$categorizeHelpHelp(_p6._0._1), + subDict); + subs = _v4; + subDict = _v5; + continue categorizeHelp; + } + } + }); +var _elm_lang$keyboard$Keyboard$categorize = function (subs) { + return A2(_elm_lang$keyboard$Keyboard$categorizeHelp, subs, _elm_lang$core$Dict$empty); +}; +var _elm_lang$keyboard$Keyboard$keyCode = A2(_elm_lang$core$Json_Decode_ops[':='], 'keyCode', _elm_lang$core$Json_Decode$int); +var _elm_lang$keyboard$Keyboard$subscription = _elm_lang$core$Native_Platform.leaf('Keyboard'); +var _elm_lang$keyboard$Keyboard$Watcher = F2( + function (a, b) { + return {taggers: a, pid: b}; + }); +var _elm_lang$keyboard$Keyboard$Msg = F2( + function (a, b) { + return {category: a, keyCode: b}; + }); +var _elm_lang$keyboard$Keyboard$onEffects = F3( + function (router, newSubs, oldState) { + var rightStep = F3( + function (category, taggers, task) { + return A2( + _elm_lang$core$Task$andThen, + task, + function (state) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Process$spawn( + A3( + _elm_lang$dom$Dom_LowLevel$onDocument, + category, + _elm_lang$keyboard$Keyboard$keyCode, + function (_p7) { + return A2( + _elm_lang$core$Platform$sendToSelf, + router, + A2(_elm_lang$keyboard$Keyboard$Msg, category, _p7)); + })), + function (pid) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$keyboard$Keyboard$Watcher, taggers, pid), + state)); + }); + }); + }); + var bothStep = F4( + function (category, _p8, taggers, task) { + var _p9 = _p8; + return A2( + _elm_lang$core$Task$andThen, + task, + function (state) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$keyboard$Keyboard$Watcher, taggers, _p9.pid), + state)); + }); + }); + var leftStep = F3( + function (category, _p10, task) { + var _p11 = _p10; + return A2( + _elm_lang$keyboard$Keyboard_ops['&>'], + _elm_lang$core$Process$kill(_p11.pid), + task); + }); + return A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + oldState, + _elm_lang$keyboard$Keyboard$categorize(newSubs), + _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty)); + }); +var _elm_lang$keyboard$Keyboard$MySub = F2( + function (a, b) { + return {ctor: 'MySub', _0: a, _1: b}; + }); +var _elm_lang$keyboard$Keyboard$presses = function (tagger) { + return _elm_lang$keyboard$Keyboard$subscription( + A2(_elm_lang$keyboard$Keyboard$MySub, 'keypress', tagger)); +}; +var _elm_lang$keyboard$Keyboard$downs = function (tagger) { + return _elm_lang$keyboard$Keyboard$subscription( + A2(_elm_lang$keyboard$Keyboard$MySub, 'keydown', tagger)); +}; +var _elm_lang$keyboard$Keyboard$ups = function (tagger) { + return _elm_lang$keyboard$Keyboard$subscription( + A2(_elm_lang$keyboard$Keyboard$MySub, 'keyup', tagger)); +}; +var _elm_lang$keyboard$Keyboard$subMap = F2( + function (func, _p12) { + var _p13 = _p12; + return A2( + _elm_lang$keyboard$Keyboard$MySub, + _p13._0, + function (_p14) { + return func( + _p13._1(_p14)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Keyboard'] = {pkg: 'elm-lang/keyboard', init: _elm_lang$keyboard$Keyboard$init, onEffects: _elm_lang$keyboard$Keyboard$onEffects, onSelfMsg: _elm_lang$keyboard$Keyboard$onSelfMsg, tag: 'sub', subMap: _elm_lang$keyboard$Keyboard$subMap}; +var _elm_lang$mouse$Mouse$onSelfMsg = F3( + function (router, _p0, state) { + var _p1 = _p0; + var _p2 = A2(_elm_lang$core$Dict$get, _p1.category, state); + if (_p2.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var send = function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(_p1.position)); + }; + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p2._0.taggers)), + function (_p3) { + return _elm_lang$core$Task$succeed(state); + }); + } + }); +var _elm_lang$mouse$Mouse_ops = _elm_lang$mouse$Mouse_ops || {}; +_elm_lang$mouse$Mouse_ops['&>'] = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Task$andThen, + t1, + function (_p4) { + return t2; + }); + }); +var _elm_lang$mouse$Mouse$init = _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty); +var _elm_lang$mouse$Mouse$categorizeHelpHelp = F2( + function (value, maybeValues) { + var _p5 = maybeValues; + if (_p5.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Just( + _elm_lang$core$Native_List.fromArray( + [value])); + } else { + return _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$List_ops['::'], value, _p5._0)); + } + }); +var _elm_lang$mouse$Mouse$categorizeHelp = F2( + function (subs, subDict) { + categorizeHelp: + while (true) { + var _p6 = subs; + if (_p6.ctor === '[]') { + return subDict; + } else { + var _v4 = _p6._1, + _v5 = A3( + _elm_lang$core$Dict$update, + _p6._0._0, + _elm_lang$mouse$Mouse$categorizeHelpHelp(_p6._0._1), + subDict); + subs = _v4; + subDict = _v5; + continue categorizeHelp; + } + } + }); +var _elm_lang$mouse$Mouse$categorize = function (subs) { + return A2(_elm_lang$mouse$Mouse$categorizeHelp, subs, _elm_lang$core$Dict$empty); +}; +var _elm_lang$mouse$Mouse$subscription = _elm_lang$core$Native_Platform.leaf('Mouse'); +var _elm_lang$mouse$Mouse$Position = F2( + function (a, b) { + return {x: a, y: b}; + }); +var _elm_lang$mouse$Mouse$position = A3( + _elm_lang$core$Json_Decode$object2, + _elm_lang$mouse$Mouse$Position, + A2(_elm_lang$core$Json_Decode_ops[':='], 'pageX', _elm_lang$core$Json_Decode$int), + A2(_elm_lang$core$Json_Decode_ops[':='], 'pageY', _elm_lang$core$Json_Decode$int)); +var _elm_lang$mouse$Mouse$Watcher = F2( + function (a, b) { + return {taggers: a, pid: b}; + }); +var _elm_lang$mouse$Mouse$Msg = F2( + function (a, b) { + return {category: a, position: b}; + }); +var _elm_lang$mouse$Mouse$onEffects = F3( + function (router, newSubs, oldState) { + var rightStep = F3( + function (category, taggers, task) { + return A2( + _elm_lang$core$Task$andThen, + task, + function (state) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Process$spawn( + A3( + _elm_lang$dom$Dom_LowLevel$onDocument, + category, + _elm_lang$mouse$Mouse$position, + function (_p7) { + return A2( + _elm_lang$core$Platform$sendToSelf, + router, + A2(_elm_lang$mouse$Mouse$Msg, category, _p7)); + })), + function (pid) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$mouse$Mouse$Watcher, taggers, pid), + state)); + }); + }); + }); + var bothStep = F4( + function (category, _p8, taggers, task) { + var _p9 = _p8; + return A2( + _elm_lang$core$Task$andThen, + task, + function (state) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$mouse$Mouse$Watcher, taggers, _p9.pid), + state)); + }); + }); + var leftStep = F3( + function (category, _p10, task) { + var _p11 = _p10; + return A2( + _elm_lang$mouse$Mouse_ops['&>'], + _elm_lang$core$Process$kill(_p11.pid), + task); + }); + return A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + oldState, + _elm_lang$mouse$Mouse$categorize(newSubs), + _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty)); + }); +var _elm_lang$mouse$Mouse$MySub = F2( + function (a, b) { + return {ctor: 'MySub', _0: a, _1: b}; + }); +var _elm_lang$mouse$Mouse$clicks = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'click', tagger)); +}; +var _elm_lang$mouse$Mouse$moves = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mousemove', tagger)); +}; +var _elm_lang$mouse$Mouse$downs = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mousedown', tagger)); +}; +var _elm_lang$mouse$Mouse$ups = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mouseup', tagger)); +}; +var _elm_lang$mouse$Mouse$subMap = F2( + function (func, _p12) { + var _p13 = _p12; + return A2( + _elm_lang$mouse$Mouse$MySub, + _p13._0, + function (_p14) { + return func( + _p13._1(_p14)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Mouse'] = {pkg: 'elm-lang/mouse', init: _elm_lang$mouse$Mouse$init, onEffects: _elm_lang$mouse$Mouse$onEffects, onSelfMsg: _elm_lang$mouse$Mouse$onSelfMsg, tag: 'sub', subMap: _elm_lang$mouse$Mouse$subMap}; +var _elm_lang$window$Native_Window = function() +{ + +var size = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + callback(_elm_lang$core$Native_Scheduler.succeed({ + width: window.innerWidth, + height: window.innerHeight + })); +}); + +return { + size: size +}; + +}();var _elm_lang$window$Window_ops = _elm_lang$window$Window_ops || {}; +_elm_lang$window$Window_ops['&>'] = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Task$andThen, + t1, + function (_p0) { + return t2; + }); + }); +var _elm_lang$window$Window$onSelfMsg = F3( + function (router, dimensions, state) { + var _p1 = state; + if (_p1.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var send = function (_p2) { + var _p3 = _p2; + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p3._0(dimensions)); + }; + return A2( + _elm_lang$window$Window_ops['&>'], + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p1._0.subs)), + _elm_lang$core$Task$succeed(state)); + } + }); +var _elm_lang$window$Window$init = _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); +var _elm_lang$window$Window$size = _elm_lang$window$Native_Window.size; +var _elm_lang$window$Window$width = A2( + _elm_lang$core$Task$map, + function (_) { + return _.width; + }, + _elm_lang$window$Window$size); +var _elm_lang$window$Window$height = A2( + _elm_lang$core$Task$map, + function (_) { + return _.height; + }, + _elm_lang$window$Window$size); +var _elm_lang$window$Window$onEffects = F3( + function (router, newSubs, oldState) { + var _p4 = {ctor: '_Tuple2', _0: oldState, _1: newSubs}; + if (_p4._0.ctor === 'Nothing') { + if (_p4._1.ctor === '[]') { + return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); + } else { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Process$spawn( + A3( + _elm_lang$dom$Dom_LowLevel$onWindow, + 'resize', + _elm_lang$core$Json_Decode$succeed( + {ctor: '_Tuple0'}), + function (_p5) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$window$Window$size, + _elm_lang$core$Platform$sendToSelf(router)); + })), + function (pid) { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Maybe$Just( + {subs: newSubs, pid: pid})); + }); + } + } else { + if (_p4._1.ctor === '[]') { + return A2( + _elm_lang$window$Window_ops['&>'], + _elm_lang$core$Process$kill(_p4._0._0.pid), + _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing)); + } else { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Maybe$Just( + {subs: newSubs, pid: _p4._0._0.pid})); + } + } + }); +var _elm_lang$window$Window$subscription = _elm_lang$core$Native_Platform.leaf('Window'); +var _elm_lang$window$Window$Size = F2( + function (a, b) { + return {width: a, height: b}; + }); +var _elm_lang$window$Window$MySub = function (a) { + return {ctor: 'MySub', _0: a}; +}; +var _elm_lang$window$Window$resizes = function (tagger) { + return _elm_lang$window$Window$subscription( + _elm_lang$window$Window$MySub(tagger)); +}; +var _elm_lang$window$Window$subMap = F2( + function (func, _p6) { + var _p7 = _p6; + return _elm_lang$window$Window$MySub( + function (_p8) { + return func( + _p7._0(_p8)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Window'] = {pkg: 'elm-lang/window', init: _elm_lang$window$Window$init, onEffects: _elm_lang$window$Window$onEffects, onSelfMsg: _elm_lang$window$Window$onSelfMsg, tag: 'sub', subMap: _elm_lang$window$Window$subMap}; +var _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt = function (bool) { + return bool ? 1 : 0; +}; +var _ohanhi$keyboard_extra$Keyboard_Arrows$determineArrows = function (keys) { + var toInt = function (key) { + return _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt( + A2(_elm_lang$core$Set$member, key, keys)); + }; + var x = toInt(39) - toInt(37); + var y = toInt(38) - toInt(40); + return {x: x, y: y}; +}; +var _ohanhi$keyboard_extra$Keyboard_Arrows$determineWasd = function (keys) { + var toInt = function (key) { + return _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt( + A2(_elm_lang$core$Set$member, key, keys)); + }; + var x = toInt(68) - toInt(65); + var y = toInt(87) - toInt(83); + return {x: x, y: y}; +}; +var _ohanhi$keyboard_extra$Keyboard_Arrows$init = {x: 0, y: 0}; +var _ohanhi$keyboard_extra$Keyboard_Arrows$Arrows = F2( + function (a, b) { + return {x: a, y: b}; + }); +var _ohanhi$keyboard_extra$Keyboard_Extra$wasd = function (model) { + return _ohanhi$keyboard_extra$Keyboard_Arrows$determineWasd(model.keysDown); +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$arrows = function (model) { + return _ohanhi$keyboard_extra$Keyboard_Arrows$determineArrows(model.keysDown); +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$update = F2( + function (msg, model) { + var _p0 = msg; + if (_p0.ctor === 'Down') { + var keysDown = A2(_elm_lang$core$Set$insert, _p0._0, model.keysDown); + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + {keysDown: keysDown}), + _elm_lang$core$Native_List.fromArray( + [])); + } else { + var keysDown = A2(_elm_lang$core$Set$remove, _p0._0, model.keysDown); + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + {keysDown: keysDown}), + _elm_lang$core$Native_List.fromArray( + [])); + } + }); +var _ohanhi$keyboard_extra$Keyboard_Extra$Model = function (a) { + return {keysDown: a}; +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$init = { + ctor: '_Tuple2', + _0: _ohanhi$keyboard_extra$Keyboard_Extra$Model(_elm_lang$core$Set$empty), + _1: _elm_lang$core$Platform_Cmd$none +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Up = function (a) { + return {ctor: 'Up', _0: a}; +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Down = function (a) { + return {ctor: 'Down', _0: a}; +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$subscriptions = _elm_lang$core$Platform_Sub$batch( + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$keyboard$Keyboard$downs(_ohanhi$keyboard_extra$Keyboard_Extra$Down), + _elm_lang$keyboard$Keyboard$ups(_ohanhi$keyboard_extra$Keyboard_Extra$Up) + ])); +var _ohanhi$keyboard_extra$Keyboard_Extra$NoDirection = {ctor: 'NoDirection'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$NorthWest = {ctor: 'NorthWest'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$West = {ctor: 'West'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$SouthWest = {ctor: 'SouthWest'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$South = {ctor: 'South'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$SouthEast = {ctor: 'SouthEast'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$East = {ctor: 'East'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$NorthEast = {ctor: 'NorthEast'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$North = {ctor: 'North'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir = function (_p1) { + var _p2 = _p1; + var _p3 = {ctor: '_Tuple2', _0: _p2.x, _1: _p2.y}; + _v2_8: + do { + if (_p3.ctor === '_Tuple2') { + switch (_p3._0) { + case 1: + switch (_p3._1) { + case 1: + return _ohanhi$keyboard_extra$Keyboard_Extra$NorthEast; + case 0: + return _ohanhi$keyboard_extra$Keyboard_Extra$East; + case -1: + return _ohanhi$keyboard_extra$Keyboard_Extra$SouthEast; + default: + break _v2_8; + } + case 0: + switch (_p3._1) { + case 1: + return _ohanhi$keyboard_extra$Keyboard_Extra$North; + case -1: + return _ohanhi$keyboard_extra$Keyboard_Extra$South; + default: + break _v2_8; + } + case -1: + switch (_p3._1) { + case -1: + return _ohanhi$keyboard_extra$Keyboard_Extra$SouthWest; + case 0: + return _ohanhi$keyboard_extra$Keyboard_Extra$West; + case 1: + return _ohanhi$keyboard_extra$Keyboard_Extra$NorthWest; + default: + break _v2_8; + } + default: + break _v2_8; + } + } else { + break _v2_8; + } + } while(false); + return _ohanhi$keyboard_extra$Keyboard_Extra$NoDirection; +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$arrowsDirection = function (_p4) { + return _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir( + _ohanhi$keyboard_extra$Keyboard_Extra$arrows(_p4)); +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$wasdDirection = function (_p5) { + return _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir( + _ohanhi$keyboard_extra$Keyboard_Extra$wasd(_p5)); +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Other = {ctor: 'Other'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Altgr = {ctor: 'Altgr'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Meta = {ctor: 'Meta'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Quote = {ctor: 'Quote'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CloseBracket = {ctor: 'CloseBracket'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$BackSlash = {ctor: 'BackSlash'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$OpenBracket = {ctor: 'OpenBracket'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$BackQuote = {ctor: 'BackQuote'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Slash = {ctor: 'Slash'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Period = {ctor: 'Period'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Minus = {ctor: 'Minus'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Comma = {ctor: 'Comma'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeUp = {ctor: 'VolumeUp'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeDown = {ctor: 'VolumeDown'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeMute = {ctor: 'VolumeMute'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Tilde = {ctor: 'Tilde'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CloseCurlyBracket = {ctor: 'CloseCurlyBracket'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$OpenCurlyBracket = {ctor: 'OpenCurlyBracket'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$HyphenMinus = {ctor: 'HyphenMinus'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Pipe = {ctor: 'Pipe'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Plus = {ctor: 'Plus'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Asterisk = {ctor: 'Asterisk'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CloseParen = {ctor: 'CloseParen'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$OpenParen = {ctor: 'OpenParen'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Underscore = {ctor: 'Underscore'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Ampersand = {ctor: 'Ampersand'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Percent = {ctor: 'Percent'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Dollar = {ctor: 'Dollar'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Hash = {ctor: 'Hash'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$DoubleQuote = {ctor: 'DoubleQuote'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Exclamation = {ctor: 'Exclamation'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Circumflex = {ctor: 'Circumflex'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$ScrollLock = {ctor: 'ScrollLock'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$NumLock = {ctor: 'NumLock'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F24 = {ctor: 'F24'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F23 = {ctor: 'F23'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F22 = {ctor: 'F22'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F21 = {ctor: 'F21'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F20 = {ctor: 'F20'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F19 = {ctor: 'F19'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F18 = {ctor: 'F18'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F17 = {ctor: 'F17'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F16 = {ctor: 'F16'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F15 = {ctor: 'F15'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F14 = {ctor: 'F14'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F13 = {ctor: 'F13'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F12 = {ctor: 'F12'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F11 = {ctor: 'F11'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F10 = {ctor: 'F10'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F9 = {ctor: 'F9'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F8 = {ctor: 'F8'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F7 = {ctor: 'F7'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F6 = {ctor: 'F6'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F5 = {ctor: 'F5'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F4 = {ctor: 'F4'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F3 = {ctor: 'F3'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F2 = {ctor: 'F2'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$F1 = {ctor: 'F1'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Divide = {ctor: 'Divide'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Decimal = {ctor: 'Decimal'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Subtract = {ctor: 'Subtract'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Separator = {ctor: 'Separator'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Add = {ctor: 'Add'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Multiply = {ctor: 'Multiply'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad9 = {ctor: 'Numpad9'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad8 = {ctor: 'Numpad8'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad7 = {ctor: 'Numpad7'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad6 = {ctor: 'Numpad6'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad5 = {ctor: 'Numpad5'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad4 = {ctor: 'Numpad4'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad3 = {ctor: 'Numpad3'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad2 = {ctor: 'Numpad2'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad1 = {ctor: 'Numpad1'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad0 = {ctor: 'Numpad0'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Sleep = {ctor: 'Sleep'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$ContextMenu = {ctor: 'ContextMenu'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Super = {ctor: 'Super'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharZ = {ctor: 'CharZ'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharY = {ctor: 'CharY'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharX = {ctor: 'CharX'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharW = {ctor: 'CharW'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharV = {ctor: 'CharV'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharU = {ctor: 'CharU'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharT = {ctor: 'CharT'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharS = {ctor: 'CharS'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharR = {ctor: 'CharR'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharQ = {ctor: 'CharQ'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharP = {ctor: 'CharP'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharO = {ctor: 'CharO'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharN = {ctor: 'CharN'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharM = {ctor: 'CharM'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharL = {ctor: 'CharL'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharK = {ctor: 'CharK'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharJ = {ctor: 'CharJ'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharI = {ctor: 'CharI'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharH = {ctor: 'CharH'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharG = {ctor: 'CharG'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharF = {ctor: 'CharF'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharE = {ctor: 'CharE'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharD = {ctor: 'CharD'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharC = {ctor: 'CharC'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharB = {ctor: 'CharB'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CharA = {ctor: 'CharA'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$At = {ctor: 'At'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$QuestionMark = {ctor: 'QuestionMark'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$GreaterThan = {ctor: 'GreaterThan'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Equals = {ctor: 'Equals'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$LessThan = {ctor: 'LessThan'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon = {ctor: 'Semicolon'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Colon = {ctor: 'Colon'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number9 = {ctor: 'Number9'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number8 = {ctor: 'Number8'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number7 = {ctor: 'Number7'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number6 = {ctor: 'Number6'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number5 = {ctor: 'Number5'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number4 = {ctor: 'Number4'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number3 = {ctor: 'Number3'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number2 = {ctor: 'Number2'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number1 = {ctor: 'Number1'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Number0 = {ctor: 'Number0'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Delete = {ctor: 'Delete'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Insert = {ctor: 'Insert'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$PrintScreen = {ctor: 'PrintScreen'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Execute = {ctor: 'Execute'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Print = {ctor: 'Print'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Select = {ctor: 'Select'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowDown = {ctor: 'ArrowDown'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowRight = {ctor: 'ArrowRight'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowUp = {ctor: 'ArrowUp'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowLeft = {ctor: 'ArrowLeft'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Home = {ctor: 'Home'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$End = {ctor: 'End'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$PageDown = {ctor: 'PageDown'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$PageUp = {ctor: 'PageUp'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Space = {ctor: 'Space'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$ModeChange = {ctor: 'ModeChange'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Accept = {ctor: 'Accept'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$NonConvert = {ctor: 'NonConvert'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Convert = {ctor: 'Convert'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Escape = {ctor: 'Escape'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$CapsLock = {ctor: 'CapsLock'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Pause = {ctor: 'Pause'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Alt = {ctor: 'Alt'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Control = {ctor: 'Control'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Shift = {ctor: 'Shift'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Enter = {ctor: 'Enter'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Clear = {ctor: 'Clear'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Tab = {ctor: 'Tab'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$BackSpace = {ctor: 'BackSpace'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Help = {ctor: 'Help'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$Cancel = {ctor: 'Cancel'}; +var _ohanhi$keyboard_extra$Keyboard_Extra$codeBook = _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 3, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Cancel}, + {ctor: '_Tuple2', _0: 6, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Help}, + {ctor: '_Tuple2', _0: 8, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackSpace}, + {ctor: '_Tuple2', _0: 9, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Tab}, + {ctor: '_Tuple2', _0: 12, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Clear}, + {ctor: '_Tuple2', _0: 13, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Enter}, + {ctor: '_Tuple2', _0: 16, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Shift}, + {ctor: '_Tuple2', _0: 17, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Control}, + {ctor: '_Tuple2', _0: 18, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Alt}, + {ctor: '_Tuple2', _0: 19, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Pause}, + {ctor: '_Tuple2', _0: 20, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CapsLock}, + {ctor: '_Tuple2', _0: 27, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Escape}, + {ctor: '_Tuple2', _0: 28, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Convert}, + {ctor: '_Tuple2', _0: 29, _1: _ohanhi$keyboard_extra$Keyboard_Extra$NonConvert}, + {ctor: '_Tuple2', _0: 30, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Accept}, + {ctor: '_Tuple2', _0: 31, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ModeChange}, + {ctor: '_Tuple2', _0: 32, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Space}, + {ctor: '_Tuple2', _0: 33, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PageUp}, + {ctor: '_Tuple2', _0: 34, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PageDown}, + {ctor: '_Tuple2', _0: 35, _1: _ohanhi$keyboard_extra$Keyboard_Extra$End}, + {ctor: '_Tuple2', _0: 36, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Home}, + {ctor: '_Tuple2', _0: 37, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowLeft}, + {ctor: '_Tuple2', _0: 38, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowUp}, + {ctor: '_Tuple2', _0: 39, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowRight}, + {ctor: '_Tuple2', _0: 40, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowDown}, + {ctor: '_Tuple2', _0: 41, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Select}, + {ctor: '_Tuple2', _0: 42, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Print}, + {ctor: '_Tuple2', _0: 43, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Execute}, + {ctor: '_Tuple2', _0: 44, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PrintScreen}, + {ctor: '_Tuple2', _0: 45, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Insert}, + {ctor: '_Tuple2', _0: 46, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Delete}, + {ctor: '_Tuple2', _0: 48, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number0}, + {ctor: '_Tuple2', _0: 49, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number1}, + {ctor: '_Tuple2', _0: 50, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number2}, + {ctor: '_Tuple2', _0: 51, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number3}, + {ctor: '_Tuple2', _0: 52, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number4}, + {ctor: '_Tuple2', _0: 53, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number5}, + {ctor: '_Tuple2', _0: 54, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number6}, + {ctor: '_Tuple2', _0: 55, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number7}, + {ctor: '_Tuple2', _0: 56, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number8}, + {ctor: '_Tuple2', _0: 57, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number9}, + {ctor: '_Tuple2', _0: 58, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Colon}, + {ctor: '_Tuple2', _0: 59, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon}, + {ctor: '_Tuple2', _0: 60, _1: _ohanhi$keyboard_extra$Keyboard_Extra$LessThan}, + {ctor: '_Tuple2', _0: 61, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Equals}, + {ctor: '_Tuple2', _0: 62, _1: _ohanhi$keyboard_extra$Keyboard_Extra$GreaterThan}, + {ctor: '_Tuple2', _0: 63, _1: _ohanhi$keyboard_extra$Keyboard_Extra$QuestionMark}, + {ctor: '_Tuple2', _0: 64, _1: _ohanhi$keyboard_extra$Keyboard_Extra$At}, + {ctor: '_Tuple2', _0: 65, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharA}, + {ctor: '_Tuple2', _0: 66, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharB}, + {ctor: '_Tuple2', _0: 67, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharC}, + {ctor: '_Tuple2', _0: 68, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharD}, + {ctor: '_Tuple2', _0: 69, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharE}, + {ctor: '_Tuple2', _0: 70, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharF}, + {ctor: '_Tuple2', _0: 71, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharG}, + {ctor: '_Tuple2', _0: 72, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharH}, + {ctor: '_Tuple2', _0: 73, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharI}, + {ctor: '_Tuple2', _0: 74, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharJ}, + {ctor: '_Tuple2', _0: 75, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharK}, + {ctor: '_Tuple2', _0: 76, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharL}, + {ctor: '_Tuple2', _0: 77, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharM}, + {ctor: '_Tuple2', _0: 78, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharN}, + {ctor: '_Tuple2', _0: 79, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharO}, + {ctor: '_Tuple2', _0: 80, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharP}, + {ctor: '_Tuple2', _0: 81, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharQ}, + {ctor: '_Tuple2', _0: 82, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharR}, + {ctor: '_Tuple2', _0: 83, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharS}, + {ctor: '_Tuple2', _0: 84, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharT}, + {ctor: '_Tuple2', _0: 85, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharU}, + {ctor: '_Tuple2', _0: 86, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharV}, + {ctor: '_Tuple2', _0: 87, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharW}, + {ctor: '_Tuple2', _0: 88, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharX}, + {ctor: '_Tuple2', _0: 89, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharY}, + {ctor: '_Tuple2', _0: 90, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharZ}, + {ctor: '_Tuple2', _0: 91, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Super}, + {ctor: '_Tuple2', _0: 93, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ContextMenu}, + {ctor: '_Tuple2', _0: 95, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Sleep}, + {ctor: '_Tuple2', _0: 96, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad0}, + {ctor: '_Tuple2', _0: 97, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad1}, + {ctor: '_Tuple2', _0: 98, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad2}, + {ctor: '_Tuple2', _0: 99, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad3}, + {ctor: '_Tuple2', _0: 100, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad4}, + {ctor: '_Tuple2', _0: 101, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad5}, + {ctor: '_Tuple2', _0: 102, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad6}, + {ctor: '_Tuple2', _0: 103, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad7}, + {ctor: '_Tuple2', _0: 104, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad8}, + {ctor: '_Tuple2', _0: 105, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad9}, + {ctor: '_Tuple2', _0: 106, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Multiply}, + {ctor: '_Tuple2', _0: 107, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Add}, + {ctor: '_Tuple2', _0: 108, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Separator}, + {ctor: '_Tuple2', _0: 109, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Subtract}, + {ctor: '_Tuple2', _0: 110, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Decimal}, + {ctor: '_Tuple2', _0: 111, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Divide}, + {ctor: '_Tuple2', _0: 112, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F1}, + {ctor: '_Tuple2', _0: 113, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F2}, + {ctor: '_Tuple2', _0: 114, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F3}, + {ctor: '_Tuple2', _0: 115, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F4}, + {ctor: '_Tuple2', _0: 116, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F5}, + {ctor: '_Tuple2', _0: 117, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F6}, + {ctor: '_Tuple2', _0: 118, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F7}, + {ctor: '_Tuple2', _0: 119, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F8}, + {ctor: '_Tuple2', _0: 120, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F9}, + {ctor: '_Tuple2', _0: 121, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F10}, + {ctor: '_Tuple2', _0: 122, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F11}, + {ctor: '_Tuple2', _0: 123, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F12}, + {ctor: '_Tuple2', _0: 124, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F13}, + {ctor: '_Tuple2', _0: 125, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F14}, + {ctor: '_Tuple2', _0: 126, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F15}, + {ctor: '_Tuple2', _0: 127, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F16}, + {ctor: '_Tuple2', _0: 128, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F17}, + {ctor: '_Tuple2', _0: 129, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F18}, + {ctor: '_Tuple2', _0: 130, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F19}, + {ctor: '_Tuple2', _0: 131, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F20}, + {ctor: '_Tuple2', _0: 132, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F21}, + {ctor: '_Tuple2', _0: 133, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F22}, + {ctor: '_Tuple2', _0: 134, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F23}, + {ctor: '_Tuple2', _0: 135, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F24}, + {ctor: '_Tuple2', _0: 144, _1: _ohanhi$keyboard_extra$Keyboard_Extra$NumLock}, + {ctor: '_Tuple2', _0: 145, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ScrollLock}, + {ctor: '_Tuple2', _0: 160, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Circumflex}, + {ctor: '_Tuple2', _0: 161, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Exclamation}, + {ctor: '_Tuple2', _0: 162, _1: _ohanhi$keyboard_extra$Keyboard_Extra$DoubleQuote}, + {ctor: '_Tuple2', _0: 163, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Hash}, + {ctor: '_Tuple2', _0: 164, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Dollar}, + {ctor: '_Tuple2', _0: 165, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Percent}, + {ctor: '_Tuple2', _0: 166, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Ampersand}, + {ctor: '_Tuple2', _0: 167, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Underscore}, + {ctor: '_Tuple2', _0: 168, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenParen}, + {ctor: '_Tuple2', _0: 169, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseParen}, + {ctor: '_Tuple2', _0: 170, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Asterisk}, + {ctor: '_Tuple2', _0: 171, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Plus}, + {ctor: '_Tuple2', _0: 172, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Pipe}, + {ctor: '_Tuple2', _0: 173, _1: _ohanhi$keyboard_extra$Keyboard_Extra$HyphenMinus}, + {ctor: '_Tuple2', _0: 174, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenCurlyBracket}, + {ctor: '_Tuple2', _0: 175, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseCurlyBracket}, + {ctor: '_Tuple2', _0: 176, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Tilde}, + {ctor: '_Tuple2', _0: 181, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeMute}, + {ctor: '_Tuple2', _0: 182, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeDown}, + {ctor: '_Tuple2', _0: 183, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeUp}, + {ctor: '_Tuple2', _0: 186, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon}, + {ctor: '_Tuple2', _0: 187, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Equals}, + {ctor: '_Tuple2', _0: 188, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Comma}, + {ctor: '_Tuple2', _0: 189, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Minus}, + {ctor: '_Tuple2', _0: 190, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Period}, + {ctor: '_Tuple2', _0: 191, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Slash}, + {ctor: '_Tuple2', _0: 192, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackQuote}, + {ctor: '_Tuple2', _0: 219, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenBracket}, + {ctor: '_Tuple2', _0: 220, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackSlash}, + {ctor: '_Tuple2', _0: 221, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseBracket}, + {ctor: '_Tuple2', _0: 222, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Quote}, + {ctor: '_Tuple2', _0: 224, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Meta}, + {ctor: '_Tuple2', _0: 225, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Altgr} + ]); +var _ohanhi$keyboard_extra$Keyboard_Extra$toCode = function (key) { + return A2( + _elm_lang$core$Maybe$withDefault, + 0, + _elm_lang$core$List$head( + A2( + _elm_lang$core$List$map, + _elm_lang$core$Basics$fst, + A2( + _elm_lang$core$List$filter, + function (_p6) { + return A2( + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + }), + key, + _elm_lang$core$Basics$snd(_p6)); + }, + _ohanhi$keyboard_extra$Keyboard_Extra$codeBook)))); +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$isPressed = F2( + function (key, model) { + return A2( + _elm_lang$core$Set$member, + _ohanhi$keyboard_extra$Keyboard_Extra$toCode(key), + model.keysDown); + }); +var _ohanhi$keyboard_extra$Keyboard_Extra$codeDict = _elm_lang$core$Dict$fromList(_ohanhi$keyboard_extra$Keyboard_Extra$codeBook); +var _ohanhi$keyboard_extra$Keyboard_Extra$fromCode = function (code) { + return A2( + _elm_lang$core$Maybe$withDefault, + _ohanhi$keyboard_extra$Keyboard_Extra$Other, + A2(_elm_lang$core$Dict$get, code, _ohanhi$keyboard_extra$Keyboard_Extra$codeDict)); +}; +var _ohanhi$keyboard_extra$Keyboard_Extra$pressedDown = function (model) { + return A2( + _elm_lang$core$List$map, + _ohanhi$keyboard_extra$Keyboard_Extra$fromCode, + _elm_lang$core$Set$toList(model.keysDown)); +}; +var _user$project$Tiles$imgFromSpriteSheet = F2( + function (spriteSheet, _p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$src('empty.png'), + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 'width', _1: '32px'}, + {ctor: '_Tuple2', _0: 'height', _1: '32px'}, + { + ctor: '_Tuple2', + _0: 'background-image', + _1: A2( + _elm_lang$core$Basics_ops['++'], + 'url(', + A2(_elm_lang$core$Basics_ops['++'], spriteSheet, ')')) + }, + { + ctor: '_Tuple2', + _0: 'background-position', + _1: A2( + _elm_lang$core$Basics_ops['++'], + '-', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0), + A2( + _elm_lang$core$Basics_ops['++'], + 'px -', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1), + 'px')))) + } + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [])); + }); +var _user$project$Tiles$tileFromSpriteSheet = _user$project$Tiles$imgFromSpriteSheet('terrain.png'); +var _user$project$Tiles$tPath = _user$project$Tiles$tileFromSpriteSheet( + {ctor: '_Tuple2', _0: 32, _1: 32}); +var _user$project$Tiles$horzPath = _user$project$Tiles$tileFromSpriteSheet( + {ctor: '_Tuple2', _0: 0, _1: 32}); +var _user$project$Tiles$crossPath = _user$project$Tiles$tileFromSpriteSheet( + {ctor: '_Tuple2', _0: 64, _1: 0}); +var _user$project$Tiles$vertPath = _user$project$Tiles$tileFromSpriteSheet( + {ctor: '_Tuple2', _0: 32, _1: 0}); +var _user$project$Tiles$grass = _user$project$Tiles$tileFromSpriteSheet( + {ctor: '_Tuple2', _0: 0, _1: 0}); +var _user$project$Map$column = function (divs) { + return A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + []), + divs); +}; +var _user$project$Map$row = function (divs) { + return A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 'height', _1: '32px'} + ])) + ]), + divs); +}; +var _user$project$Map$_p0 = {ctor: '_Tuple2', _0: 224, _1: 224}; +var _user$project$Map$width = _user$project$Map$_p0._0; +var _user$project$Map$height = _user$project$Map$_p0._1; +var _user$project$Map$_p1 = {ctor: '_Tuple2', _0: _user$project$Map$width / 2, _1: _user$project$Map$height / 2}; +var _user$project$Map$halfWidth = _user$project$Map$_p1._0; +var _user$project$Map$halfHeight = _user$project$Map$_p1._1; +var _user$project$Map$_p2 = {ctor: '_Tuple2', _0: 288, _1: 288}; +var _user$project$Map$fullMapWidth = _user$project$Map$_p2._0; +var _user$project$Map$fullMapHeight = _user$project$Map$_p2._1; +var _user$project$Map$_p3 = {ctor: '_Tuple2', _0: _user$project$Map$fullMapWidth - _user$project$Map$width, _1: _user$project$Map$fullMapHeight - _user$project$Map$height}; +var _user$project$Map$overflowWidth = _user$project$Map$_p3._0; +var _user$project$Map$overflowHeight = _user$project$Map$_p3._1; +var _user$project$Map$update = F2( + function (action, model) { + var _p4 = action; + if (_p4.ctor === 'VerticalScroll') { + return _elm_lang$core$Native_Utils.update( + model, + { + top: A3(_elm_lang$core$Basics$clamp, 0 - _user$project$Map$overflowHeight, 0, model.top + _p4._0) + }); + } else { + return _elm_lang$core$Native_Utils.update( + model, + { + left: A3(_elm_lang$core$Basics$clamp, 0 - _user$project$Map$overflowWidth, 0, model.left - _p4._0) + }); + } + }); +var _user$project$Map$fullMap = function (model) { + return A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Map$fullMapWidth), + 'px') + }, + { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Map$fullMapHeight), + 'px') + }, + {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, + { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(model.top), + 'px') + }, + { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(model.left), + 'px') + } + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [ + _user$project$Map$column( + _elm_lang$core$Native_List.fromArray( + [ + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$crossPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), + _user$project$Map$row( + _elm_lang$core$Native_List.fromArray( + [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])) + ])) + ])); +}; +var _user$project$Map$view = function (model) { + return A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Map$width), + 'px') + }, + { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Map$height), + 'px') + }, + {ctor: '_Tuple2', _0: 'overflow', _1: 'hidden'}, + {ctor: '_Tuple2', _0: 'border', _1: '2px solid black'} + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [ + _user$project$Map$fullMap(model) + ])); +}; +var _user$project$Map$init = { + top: _elm_lang$core$Basics$round(0 - (_user$project$Map$overflowHeight / 2)), + left: _elm_lang$core$Basics$round(0 - (_user$project$Map$overflowWidth / 2)) +}; +var _user$project$Map$Model = F2( + function (a, b) { + return {top: a, left: b}; + }); +var _user$project$Map$HorizontalScroll = function (a) { + return {ctor: 'HorizontalScroll', _0: a}; +}; +var _user$project$Map$VerticalScroll = function (a) { + return {ctor: 'VerticalScroll', _0: a}; +}; +var _user$project$Sprite$imgFromSpriteSheet = F2( + function (spriteSheet, _p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$src('empty.png'), + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 'width', _1: '32px'}, + {ctor: '_Tuple2', _0: 'height', _1: '32px'}, + { + ctor: '_Tuple2', + _0: 'background-image', + _1: A2( + _elm_lang$core$Basics_ops['++'], + 'url(', + A2(_elm_lang$core$Basics_ops['++'], spriteSheet, ')')) + }, + { + ctor: '_Tuple2', + _0: 'background-position', + _1: A2( + _elm_lang$core$Basics_ops['++'], + '-', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0), + A2( + _elm_lang$core$Basics_ops['++'], + 'px -', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1), + 'px')))) + } + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [])); + }); +var _user$project$Sprite$beeFromSpriteSheet = _user$project$Sprite$imgFromSpriteSheet('bee.png'); +var _user$project$Sprite$southEastBee2 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 32, _1: 64}); +var _user$project$Sprite$southEastBee1 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 0, _1: 64}); +var _user$project$Sprite$southWestBee2 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 64, _1: 32}); +var _user$project$Sprite$southWestBee1 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 32, _1: 32}); +var _user$project$Sprite$northEastBee2 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 32, _1: 0}); +var _user$project$Sprite$northEastBee1 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 0, _1: 0}); +var _user$project$Sprite$northWestBee2 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 0, _1: 32}); +var _user$project$Sprite$northWestBee1 = _user$project$Sprite$beeFromSpriteSheet( + {ctor: '_Tuple2', _0: 64, _1: 0}); +var _user$project$Sprite$view = function (_p2) { + var _p3 = _p2; + var beeImage = function () { + var _p4 = {ctor: '_Tuple3', _0: _p3.dir, _1: _p3.orientation, _2: _p3.frame}; + _v2_8: + do { + if (_p4._0.ctor === 'Left') { + if (_p4._1.ctor === 'Toward') { + switch (_p4._2) { + case 0: + return _user$project$Sprite$southWestBee1; + case 1: + return _user$project$Sprite$southWestBee2; + default: + break _v2_8; + } + } else { + switch (_p4._2) { + case 0: + return _user$project$Sprite$northWestBee1; + case 1: + return _user$project$Sprite$northWestBee2; + default: + break _v2_8; + } + } + } else { + if (_p4._1.ctor === 'Toward') { + switch (_p4._2) { + case 0: + return _user$project$Sprite$southEastBee1; + case 1: + return _user$project$Sprite$southEastBee2; + default: + break _v2_8; + } + } else { + switch (_p4._2) { + case 0: + return _user$project$Sprite$northEastBee1; + case 1: + return _user$project$Sprite$northEastBee2; + default: + break _v2_8; + } + } + } + } while(false); + return _user$project$Sprite$southWestBee1; + }(); + return A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 'width', _1: '32px'}, + {ctor: '_Tuple2', _0: 'height', _1: '32px'}, + {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, + { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + '-', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p3.y), + 'px')) + }, + { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p3.x), + 'px') + } + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [beeImage])); +}; +var _user$project$Sprite$updateFrame = function (model) { + return _elm_lang$core$Native_Utils.update( + model, + { + frame: A2(_elm_lang$core$Basics_ops['%'], model.frame + 1, 2) + }); +}; +var _user$project$Sprite$updatePosition = F2( + function (dt, _p5) { + var _p6 = _p5; + return _elm_lang$core$Native_Utils.update( + _p6, + { + x: A3(_elm_lang$core$Basics$clamp, 0, _user$project$Map$width - 32, _p6.x + (dt * _p6.vx)), + y: A3(_elm_lang$core$Basics$clamp, 32, _user$project$Map$height, _p6.y + (dt * _p6.vy)) + }); + }); +var _user$project$Sprite$newVelocity = F2( + function (_p7, model) { + var _p8 = _p7; + var _p10 = _p8.y; + var _p9 = _p8.x; + var scale = 0.2; + var newVel = function (n) { + return (_elm_lang$core$Native_Utils.eq(_p9, 0) || _elm_lang$core$Native_Utils.eq(_p10, 0)) ? (scale * n) : ((scale * n) / _elm_lang$core$Basics$sqrt(2)); + }; + return _elm_lang$core$Native_Utils.update( + model, + { + vx: newVel(_p9), + vy: newVel(_p10) + }); + }); +var _user$project$Sprite$Model = F7( + function (a, b, c, d, e, f, g) { + return {x: a, y: b, vx: c, vy: d, dir: e, orientation: f, frame: g}; + }); +var _user$project$Sprite$Right = {ctor: 'Right'}; +var _user$project$Sprite$Left = {ctor: 'Left'}; +var _user$project$Sprite$Away = {ctor: 'Away'}; +var _user$project$Sprite$Toward = {ctor: 'Toward'}; +var _user$project$Sprite$init = {x: _user$project$Map$halfWidth, y: _user$project$Map$halfHeight, vx: 0, vy: 0, dir: _user$project$Sprite$Left, orientation: _user$project$Sprite$Toward, frame: 0}; +var _user$project$Sprite$setDirection = F2( + function (_p11, model) { + var _p12 = _p11; + var _p14 = _p12.y; + var _p13 = _p12.x; + return _elm_lang$core$Native_Utils.update( + model, + { + orientation: (_elm_lang$core$Native_Utils.cmp(_p14, 0) < 0) ? _user$project$Sprite$Toward : ((_elm_lang$core$Native_Utils.cmp(_p14, 0) > 0) ? _user$project$Sprite$Away : model.orientation), + dir: (_elm_lang$core$Native_Utils.cmp(_p13, 0) > 0) ? _user$project$Sprite$Right : ((_elm_lang$core$Native_Utils.cmp(_p13, 0) < 0) ? _user$project$Sprite$Left : model.dir) + }); + }); +var _user$project$Sprite$update = F2( + function (msg, model) { + var _p15 = msg; + switch (_p15.ctor) { + case 'Nothing': + return model; + case 'Direction': + var _p16 = _p15._0; + return A2( + _user$project$Sprite$setDirection, + _p16, + A2(_user$project$Sprite$newVelocity, _p16, model)); + default: + return _user$project$Sprite$updateFrame( + A2(_user$project$Sprite$updatePosition, _p15._0, model)); + } + }); +var _user$project$Sprite$Nothing = {ctor: 'Nothing'}; +var _user$project$Sprite$Direction = function (a) { + return {ctor: 'Direction', _0: a}; +}; +var _user$project$Sprite$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Main$updateMap = F2( + function (dt, model) { + var _p0 = {ctor: '_Tuple4', _0: 0, _1: 0, _2: _user$project$Map$width, _3: _user$project$Map$height}; + var bottomWall = _p0._0; + var leftWall = _p0._1; + var rightWall = _p0._2; + var topWall = _p0._3; + var _p1 = {ctor: '_Tuple4', _0: model.sprite.x, _1: model.sprite.y, _2: model.sprite.vx, _3: model.sprite.vy}; + var x = _p1._0; + var y = _p1._1; + var vx = _p1._2; + var vy = _p1._3; + var _p2 = { + ctor: '_Tuple4', + _0: _elm_lang$core$Native_Utils.cmp(vy, 0) > 0, + _1: _elm_lang$core$Native_Utils.cmp(vy, 0) < 0, + _2: _elm_lang$core$Native_Utils.cmp(vx, 0) > 0, + _3: _elm_lang$core$Native_Utils.cmp(vx, 0) < 0 + }; + var movingUp = _p2._0; + var movingDown = _p2._1; + var movingRight = _p2._2; + var movingLeft = _p2._3; + var action = (_elm_lang$core$Native_Utils.eq(x, leftWall) && movingLeft) ? _user$project$Map$HorizontalScroll( + _elm_lang$core$Basics$round(dt * vx)) : ((_elm_lang$core$Native_Utils.eq(x + 32, rightWall) && movingRight) ? _user$project$Map$HorizontalScroll( + _elm_lang$core$Basics$round(dt * vx)) : ((_elm_lang$core$Native_Utils.eq(y, topWall) && movingUp) ? _user$project$Map$VerticalScroll( + _elm_lang$core$Basics$round(dt * vy)) : ((_elm_lang$core$Native_Utils.eq(y - 32, bottomWall) && movingDown) ? _user$project$Map$VerticalScroll( + _elm_lang$core$Basics$round(dt * vy)) : _user$project$Map$HorizontalScroll(0)))); + return _elm_lang$core$Native_Utils.update( + model, + { + map: A2(_user$project$Map$update, action, model.map) + }); + }); +var _user$project$Main$updateSprite = F2( + function (msg, model) { + var sprite$ = A2(_user$project$Sprite$update, msg, model.sprite); + return _elm_lang$core$Native_Utils.update( + model, + {sprite: sprite$}); + }); +var _user$project$Main$dirToMouse = function (model) { + var minDiff = function (diff) { + return (_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$Basics$abs(diff), + 10) < 0) ? 0 : diff; + }; + var yMap = function (y) { + return _elm_lang$core$Basics$abs( + y - ((_elm_lang$core$Basics$toFloat(model.windowHeight) / 2) + (_user$project$Map$height / 2))); + }; + var xMap = function (x) { + return x + ((_elm_lang$core$Basics$toFloat(model.windowWidth) / 2) - (_user$project$Map$width / 2)); + }; + var _p3 = { + ctor: '_Tuple2', + _0: xMap(model.sprite.x), + _1: yMap(model.sprite.y) + }; + var mapBeeX = _p3._0; + var mapBeeY = _p3._1; + var _p4 = A2( + _elm_lang$core$Debug$log, + 'mapped bee (x,y)', + {ctor: '_Tuple2', _0: mapBeeX, _1: mapBeeY}); + var xDiff = minDiff(model.mousePos.x - mapBeeX); + var yDiff = minDiff(mapBeeY - model.mousePos.y); + var _p5 = A2( + _elm_lang$core$Debug$log, + 'diff (x,y)', + {ctor: '_Tuple2', _0: xDiff, _1: yDiff}); + var distance = _elm_lang$core$Basics$sqrt( + Math.pow(xDiff, 2) + Math.pow(yDiff, 2)); + var dirX = _elm_lang$core$Native_Utils.eq(distance, 0) ? 0 : (xDiff / distance); + var dirY = _elm_lang$core$Native_Utils.eq(distance, 0) ? 0 : (yDiff / distance); + var direction = {x: dirX, y: dirY}; + var _p6 = A2(_elm_lang$core$Debug$log, 'direction', direction); + var _p7 = A2(_elm_lang$core$Debug$log, 'pos', model.mousePos); + return A2( + _user$project$Main$updateSprite, + _user$project$Sprite$Direction(direction), + model); +}; +var _user$project$Main$initialModel = function (keyboard) { + return { + sprite: _user$project$Sprite$init, + map: _user$project$Map$init, + keyboard: keyboard, + windowWidth: _user$project$Map$width, + windowHeight: _user$project$Map$height, + mouseDown: false, + mousePos: {x: 0, y: 0} + }; +}; +var _user$project$Main$Model = F7( + function (a, b, c, d, e, f, g) { + return {sprite: a, map: b, keyboard: c, windowWidth: d, windowHeight: e, mouseDown: f, mousePos: g}; + }); +var _user$project$Main$Nothing = {ctor: 'Nothing'}; +var _user$project$Main$view = function (model) { + var bee = A2( + _elm_lang$html$Html_App$map, + function (_p8) { + return _user$project$Main$Nothing; + }, + _user$project$Sprite$view(model.sprite)); + var inner = A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 'margin-left', _1: 'auto'}, + {ctor: '_Tuple2', _0: 'margin-right', _1: 'auto'}, + { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Map$width), + 'px') + } + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [ + A2( + _elm_lang$html$Html_App$map, + function (_p9) { + return _user$project$Main$Nothing; + }, + _user$project$Map$view(model.map)), + bee + ])); + var middle = A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 'display', _1: 'table-cell'}, + {ctor: '_Tuple2', _0: 'vertical-align', _1: 'middle'} + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [inner])); + var outer = A2( + _elm_lang$html$Html$div, + _elm_lang$core$Native_List.fromArray( + [ + _elm_lang$html$Html_Attributes$style( + _elm_lang$core$Native_List.fromArray( + [ + {ctor: '_Tuple2', _0: 'display', _1: 'table'}, + {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + {ctor: '_Tuple2', _0: 'height', _1: '100%'}, + {ctor: '_Tuple2', _0: 'width', _1: '100%'} + ])) + ]), + _elm_lang$core$Native_List.fromArray( + [middle])); + return outer; +}; +var _user$project$Main$WindowResize = function (a) { + return {ctor: 'WindowResize', _0: a}; +}; +var _user$project$Main$windowResize = function (size) { + return _user$project$Main$WindowResize( + {width: size.width, height: size.height}); +}; +var _user$project$Main$initialWindowSize = A3( + _elm_lang$core$Task$perform, + function (_p10) { + return _user$project$Main$Nothing; + }, + _user$project$Main$windowResize, + _elm_lang$window$Window$size); +var _user$project$Main$MouseMove = function (a) { + return {ctor: 'MouseMove', _0: a}; +}; +var _user$project$Main$MouseUp = function (a) { + return {ctor: 'MouseUp', _0: a}; +}; +var _user$project$Main$MouseDown = function (a) { + return {ctor: 'MouseDown', _0: a}; +}; +var _user$project$Main$KeyboardCmd = function (a) { + return {ctor: 'KeyboardCmd', _0: a}; +}; +var _user$project$Main$update = F2( + function (msg, model) { + var _p11 = msg; + switch (_p11.ctor) { + case 'Tick': + var _p12 = _p11._0; + return { + ctor: '_Tuple2', + _0: A2( + _user$project$Main$updateSprite, + _user$project$Sprite$Tick(_p12), + A2(_user$project$Main$updateMap, _p12, model)), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'WindowResize': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {windowWidth: _p11._0.width, windowHeight: _p11._0.height}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'KeyPress': + var _p13 = A2(_ohanhi$keyboard_extra$Keyboard_Extra$update, _p11._0, model.keyboard); + var keyboard$ = _p13._0; + var cmd = _p13._1; + var direction = _ohanhi$keyboard_extra$Keyboard_Extra$arrows(keyboard$); + var direction$ = { + x: _elm_lang$core$Basics$toFloat(direction.x), + y: _elm_lang$core$Basics$toFloat(direction.y) + }; + return { + ctor: '_Tuple2', + _0: A2( + _user$project$Main$updateSprite, + _user$project$Sprite$Direction(direction$), + _elm_lang$core$Native_Utils.update( + model, + {keyboard: keyboard$})), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$KeyboardCmd, cmd) + }; + case 'KeyboardCmd': + var _p14 = A2(_ohanhi$keyboard_extra$Keyboard_Extra$update, _p11._0, model.keyboard); + var keyboard$ = _p14._0; + var cmd = _p14._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {keyboard: keyboard$}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$KeyboardCmd, cmd) + }; + case 'MouseUp': + var model$ = _elm_lang$core$Native_Utils.update( + model, + {mouseDown: false}); + var direction = {x: 0, y: 0}; + var _p15 = A2(_elm_lang$core$Debug$log, 'MOUSE-UP', ''); + return { + ctor: '_Tuple2', + _0: A2( + _user$project$Main$updateSprite, + _user$project$Sprite$Direction(direction), + model$), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'MouseDown': + var _p17 = _p11._0; + var pos$ = { + x: _elm_lang$core$Basics$toFloat(_p17.x), + y: _elm_lang$core$Basics$toFloat(_p17.y) + }; + var _p16 = A2(_elm_lang$core$Debug$log, 'MOUSE-DOWN', ''); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {mouseDown: true, mousePos: pos$}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'MouseMove': + var _p18 = _p11._0; + var model$ = _elm_lang$core$Native_Utils.update( + model, + { + mousePos: { + x: _elm_lang$core$Basics$toFloat(_p18.x), + y: _elm_lang$core$Basics$toFloat(_p18.y) + } + }); + return { + ctor: '_Tuple2', + _0: _user$project$Main$dirToMouse(model$), + _1: _elm_lang$core$Platform_Cmd$none + }; + default: + return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; + } + }); +var _user$project$Main$KeyPress = function (a) { + return {ctor: 'KeyPress', _0: a}; +}; +var _user$project$Main$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Main$subs = _elm_lang$core$Platform_Sub$batch( + _elm_lang$core$Native_List.fromArray( + [ + A2(_elm_lang$core$Platform_Sub$map, _user$project$Main$KeyPress, _ohanhi$keyboard_extra$Keyboard_Extra$subscriptions), + _elm_lang$animation_frame$AnimationFrame$diffs(_user$project$Main$Tick), + _elm_lang$mouse$Mouse$downs(_user$project$Main$MouseDown), + _elm_lang$mouse$Mouse$ups(_user$project$Main$MouseUp), + _elm_lang$mouse$Mouse$moves(_user$project$Main$MouseMove), + _elm_lang$window$Window$resizes(_user$project$Main$windowResize) + ])); +var _user$project$Main$main = { + main: function () { + var _p19 = _ohanhi$keyboard_extra$Keyboard_Extra$init; + var initialKeyboard = _p19._0; + var keyboardCmd = _p19._1; + return _elm_lang$html$Html_App$program( + { + init: { + ctor: '_Tuple2', + _0: _user$project$Main$initialModel(initialKeyboard), + _1: _elm_lang$core$Platform_Cmd$batch( + _elm_lang$core$Native_List.fromArray( + [ + A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$KeyPress, keyboardCmd), + _user$project$Main$initialWindowSize + ])) + }, + update: _user$project$Main$update, + subscriptions: _elm_lang$core$Basics$always(_user$project$Main$subs), + view: _user$project$Main$view + }); + }() +}; +var Elm = {}; +Elm['Main'] = Elm['Main'] || {}; +_elm_lang$core$Native_Platform.addPublicModule(Elm['Main'], 'Main', typeof _user$project$Main$main === 'undefined' ? null : _user$project$Main$main); + +if (typeof define === "function" && define['amd']) +{ + define([], function() { return Elm; }); + return; +} + +if (typeof module === "object") +{ + module['exports'] = Elm; + return; +} + +var globalElm = this['Elm']; +if (typeof globalElm === "undefined") +{ + this['Elm'] = Elm; + return; +} + +for (var publicModule in Elm) +{ + if (publicModule in globalElm) + { + throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.'); + } + globalElm[publicModule] = Elm[publicModule]; +} + +}).call(this); + \ No newline at end of file diff --git a/main.elm b/main.elm index 08cec3d..95fdf09 100644 --- a/main.elm +++ b/main.elm @@ -7,6 +7,9 @@ import Html.Attributes exposing (style) import Html.App exposing (program) import Sprite exposing (..) import Map +import Task +import Mouse +import Window import AnimationFrame @@ -17,6 +20,10 @@ type alias Model = { sprite : Sprite.Model , map : Map.Model , keyboard : Keyboard.Model + , windowWidth : Int + , windowHeight : Int + , mouseDown : Bool + , mousePos : { x : Float, y : Float } } @@ -25,6 +32,10 @@ initialModel keyboard = { sprite = Sprite.init , map = Map.init , keyboard = keyboard + , windowWidth = Map.width + , windowHeight = Map.height + , mouseDown = False + , mousePos = { x = 0, y = 0 } } @@ -36,6 +47,10 @@ type Msg = Tick Time | KeyPress Keyboard.Msg | KeyboardCmd Keyboard.Msg + | MouseDown Mouse.Position + | MouseUp Mouse.Position + | MouseMove Mouse.Position + | WindowResize Window.Size | Nothing @@ -43,11 +58,23 @@ update : Msg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of Tick timeDelta -> - ( model - |> updateMap timeDelta - |> updateSprite (Sprite.Tick timeDelta) - , Cmd.none - ) + let + model' = + model + |> updateMap timeDelta + |> updateSprite (Sprite.Tick timeDelta) + + model'' = + if model.mouseDown then + model + |> dirToMouse + else + model' + in + ( model'', Cmd.none ) + + WindowResize { width, height } -> + ( { model | windowWidth = width, windowHeight = height }, Cmd.none ) KeyPress key -> let @@ -56,9 +83,12 @@ update msg model = direction = Keyboard.arrows keyboard' + + direction' = + { x = toFloat direction.x, y = toFloat direction.y } in ( { model | keyboard = keyboard' } - |> updateSprite (Sprite.Direction direction) + |> updateSprite (Sprite.Direction direction') , Cmd.map KeyboardCmd cmd ) @@ -69,10 +99,112 @@ update msg model = in ( { model | keyboard = keyboard' }, Cmd.map KeyboardCmd cmd ) + MouseUp _ -> + let + _ = + Debug.log "MOUSE-UP" "" + + direction = + { x = 0, y = 0 } + + model' = + { model | mouseDown = False } + in + ( model' |> updateSprite (Sprite.Direction direction), Cmd.none ) + + MouseDown pos -> + let + _ = + Debug.log "MOUSE-DOWN" "" + + pos' = + { x = toFloat pos.x, y = toFloat pos.y } + in + ( { model | mouseDown = True, mousePos = pos' }, Cmd.none ) + + MouseMove pos -> + -- if model.mouseDown == False then + -- ( model, Cmd.none ) + -- else + let + model' = + { model | mousePos = { x = toFloat pos.x, y = toFloat pos.y } } + + model'' = + model' |> dirToMouse + + _ = + Debug.log "vel (vx, vy)" ( model''.sprite.vx, model''.sprite.vy ) + in + ( model'', Cmd.none ) + Nothing -> ( model, Cmd.none ) +{-| updates sprite direction so it is moving towards the mouse +-- if the mouse is down +-} +dirToMouse : Model -> Model +dirToMouse model = + let + -- _ = + -- Debug.log "window (w,h)" ( model.windowWidth, model.windowHeight ) + _ = + Debug.log "pos" model.mousePos + + -- convert map coordinates to screen coordingates + xMap x = + x + ((toFloat model.windowWidth) / 2 - Map.width / 2) + + yMap y = + abs <| y - ((toFloat model.windowHeight) / 2 + Map.height / 2) + + ( mapBeeX, mapBeeY ) = + ( xMap model.sprite.x, yMap model.sprite.y ) + + _ = + Debug.log "mapped bee (x,y)" ( mapBeeX, mapBeeY ) + + minDiff diff = + if (abs diff) < 10 then + 0 + else + diff + + xDiff = + minDiff <| model.mousePos.x - mapBeeX + + yDiff = + minDiff <| mapBeeY - model.mousePos.y + + _ = + Debug.log "diff (x,y)" ( xDiff, yDiff ) + + distance = + sqrt (xDiff ^ 2 + yDiff ^ 2) + + dirX = + if distance == 0 then + 0 + else + xDiff / distance + + dirY = + if distance == 0 then + 0 + else + yDiff / distance + + direction = + { x = dirX, y = dirY } + + _ = + Debug.log "direction" direction + in + model |> updateSprite (Sprite.Direction direction) + + updateSprite : Sprite.Msg -> Model -> Model updateSprite msg model = let @@ -167,6 +299,10 @@ subs = Sub.batch [ Sub.map KeyPress Keyboard.subscriptions , AnimationFrame.diffs Tick + , Mouse.downs MouseDown + , Mouse.ups MouseUp + , Mouse.moves MouseMove + , Window.resizes windowResize ] @@ -183,9 +319,26 @@ main = program { init = ( (initialModel initialKeyboard) - , Cmd.map KeyPress keyboardCmd + , Cmd.batch + [ Cmd.map KeyPress keyboardCmd + , initialWindowSize + ] ) , update = update , subscriptions = always subs , view = view } + + + +-- HELPERS + + +initialWindowSize : Cmd Msg +initialWindowSize = + Task.perform (\_ -> Nothing) windowResize Window.size + + +windowResize : { width : Int, height : Int } -> Msg +windowResize size = + WindowResize { width = size.width, height = size.height } diff --git a/sprite.elm b/sprite.elm index 4de6a81..9ee4e3b 100644 --- a/sprite.elm +++ b/sprite.elm @@ -48,7 +48,7 @@ init = type Msg = Tick Time - | Direction { x : Int, y : Int } + | Direction { x : Float, y : Float } | Nothing @@ -69,7 +69,7 @@ update msg model = |> updateFrame -newVelocity : { x : Int, y : Int } -> Model -> Model +newVelocity : { x : Float, y : Float } -> Model -> Model newVelocity { x, y } model = let scale = @@ -77,9 +77,9 @@ newVelocity { x, y } model = newVel n = if x == 0 || y == 0 then - scale * toFloat n + scale * n else - scale * toFloat n / sqrt 2 + scale * n / sqrt 2 in { model | vx = newVel x @@ -87,7 +87,7 @@ newVelocity { x, y } model = } -setDirection : { x : Int, y : Int } -> Model -> Model +setDirection : { x : Float, y : Float } -> Model -> Model setDirection { x, y } model = { model | orientation = From 48e170c5fc38136663ce3fe4bf6fd1814f1f3791 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sat, 22 Apr 2017 19:33:25 -0700 Subject: [PATCH 03/33] starting from scratch --- bee.js | 10061 ------------------------------------------- bee.png | Bin 1647 -> 0 bytes bin/build | 3 - elm-package.json | 21 - empty.png | Bin 506 -> 0 bytes index.html | 10469 --------------------------------------------- main.elm | 344 -- map.elm | 119 - sprite.elm | 224 - terrain.png | Bin 3337 -> 0 bytes tiles.elm | 48 - 11 files changed, 21289 deletions(-) delete mode 100644 bee.js delete mode 100644 bee.png delete mode 100755 bin/build delete mode 100644 elm-package.json delete mode 100644 empty.png delete mode 100644 index.html delete mode 100644 main.elm delete mode 100644 map.elm delete mode 100644 sprite.elm delete mode 100644 terrain.png delete mode 100644 tiles.elm diff --git a/bee.js b/bee.js deleted file mode 100644 index f8ecfbc..0000000 --- a/bee.js +++ /dev/null @@ -1,10061 +0,0 @@ - -(function() { -'use strict'; - -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); -} - -//import Native.Utils // - -var _elm_lang$core$Native_Basics = function() { - -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 _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b; -} -function max(a, b) -{ - return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b; -} -function clamp(lo, hi, n) -{ - return _elm_lang$core$Native_Utils.cmp(n, lo) < 0 - ? lo - : _elm_lang$core$Native_Utils.cmp(n, hi) > 0 - ? hi - : n; -} - -var ord = ['LT', 'EQ', 'GT']; - -function compare(x, y) -{ - return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] }; -} - -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 _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); -} -function toPolar(point) -{ - var x = point._0; - var y = point._1; - return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x)); -} - -return { - 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: F2(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 -}; - -}(); -//import // - -var _elm_lang$core$Native_Utils = function() { - -// COMPARISONS - -function eq(x, y) -{ - var stack = []; - var isEqual = eqHelp(x, y, 0, stack); - var pair; - while (isEqual && (pair = stack.pop())) - { - isEqual = eqHelp(pair.x, pair.y, 0, stack); - } - return isEqual; -} - - -function eqHelp(x, y, depth, stack) -{ - if (depth > 100) - { - stack.push({ x: x, y: y }); - return true; - } - - if (x === y) - { - return true; - } - - if (typeof x !== 'object') - { - if (typeof x === 'function') - { - throw new Error( - 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.' - + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==' - + ' which describes why it is this way and what the better version will look like.' - ); - } - return false; - } - - if (x === null || y === null) - { - return false - } - - if (x instanceof Date) - { - return x.getTime() === y.getTime(); - } - - if (!('ctor' in x)) - { - for (var key in x) - { - if (!eqHelp(x[key], y[key], depth + 1, stack)) - { - return false; - } - } - return true; - } - - // convert Dicts and Sets to lists - if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin') - { - x = _elm_lang$core$Dict$toList(x); - y = _elm_lang$core$Dict$toList(y); - } - if (x.ctor === 'Set_elm_builtin') - { - x = _elm_lang$core$Set$toList(x); - y = _elm_lang$core$Set$toList(y); - } - - // check if lists are equal without recursion - if (x.ctor === '::') - { - var a = x; - var b = y; - while (a.ctor === '::' && b.ctor === '::') - { - if (!eqHelp(a._0, b._0, depth + 1, stack)) - { - return false; - } - a = a._1; - b = b._1; - } - return a.ctor === b.ctor; - } - - // check if Arrays are equal - if (x.ctor === '_Array') - { - var xs = _elm_lang$core$Native_Array.toJSArray(x); - var ys = _elm_lang$core$Native_Array.toJSArray(y); - if (xs.length !== ys.length) - { - return false; - } - for (var i = 0; i < xs.length; i++) - { - if (!eqHelp(xs[i], ys[i], depth + 1, stack)) - { - return false; - } - } - return true; - } - - if (!eqHelp(x.ctor, y.ctor, depth + 1, stack)) - { - return false; - } - - for (var key in x) - { - if (!eqHelp(x[key], y[key], depth + 1, stack)) - { - return false; - } - } - return true; -} - -// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on -// the particular integer values assigned to LT, EQ, and GT. - -var LT = -1, EQ = 0, GT = 1; - -function cmp(x, y) -{ - if (typeof x !== 'object') - { - return x === y ? EQ : x < y ? LT : GT; - } - - if (x instanceof String) - { - var a = x.valueOf(); - var b = y.valueOf(); - return a === b ? EQ : a < b ? LT : GT; - } - - if (x.ctor === '::' || x.ctor === '[]') - { - while (x.ctor === '::' && y.ctor === '::') - { - var ord = cmp(x._0, y._0); - if (ord !== EQ) - { - return ord; - } - x = x._1; - y = y._1; - } - return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT; - } - - if (x.ctor.slice(0, 6) === '_Tuple') - { - var ord; - 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; - } - - throw new Error( - 'Comparison error: comparison is only defined on ints, ' - + 'floats, times, chars, strings, lists of comparable values, ' - + 'and tuples of comparable values.' - ); -} - - -// COMMON VALUES - -var Tuple0 = { - ctor: '_Tuple0' -}; - -function Tuple2(x, y) -{ - return { - ctor: '_Tuple2', - _0: x, - _1: y - }; -} - -function chr(c) -{ - return new String(c); -} - - -// GUID - -var count = 0; -function guid(_) -{ - return count++; -} - - -// RECORDS - -function update(oldRecord, updatedFields) -{ - var newRecord = {}; - for (var key in oldRecord) - { - var value = (key in updatedFields) ? updatedFields[key] : oldRecord[key]; - newRecord[key] = value; - } - return newRecord; -} - - -//// 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 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; -} - - -// CRASHES - -function crash(moduleName, region) -{ - return function(message) { - throw new Error( - 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n' - + 'The message provided by the code author is:\n\n ' - + message - ); - }; -} - -function crashCase(moduleName, region, value) -{ - return function(message) { - throw new Error( - 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n' - + 'This was caused by the `case` expression ' + regionToString(region) + '.\n' - + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n' - + 'The message provided by the code author is:\n\n ' - + message - ); - }; -} - -function regionToString(region) -{ - if (region.start.line == region.end.line) - { - return 'on line ' + region.start.line; - } - return 'between lines ' + region.start.line + ' and ' + region.end.line; -} - - -// TO STRING - -function toString(v) -{ - var type = typeof v; - if (type === 'function') - { - var name = v.func ? v.func.name : v.name; - return ''; - } - - if (type === 'boolean') - { - return v ? 'True' : 'False'; - } - - if (type === 'number') - { - return v + ''; - } - - if (v instanceof String) - { - return '\'' + addSlashes(v, true) + '\''; - } - - if (type === 'string') - { - return '"' + addSlashes(v, false) + '"'; - } - - if (v === null) - { - return 'null'; - } - - if (type === 'object' && 'ctor' in v) - { - var ctorStarter = v.ctor.substring(0, 5); - - if (ctorStarter === '_Tupl') - { - var output = []; - for (var k in v) - { - if (k === 'ctor') continue; - output.push(toString(v[k])); - } - return '(' + output.join(',') + ')'; - } - - if (ctorStarter === '_Task') - { - return '' - } - - if (v.ctor === '_Array') - { - var list = _elm_lang$core$Array$toList(v); - return 'Array.fromList ' + toString(list); - } - - if (v.ctor === '') - { - return ''; - } - - if (v.ctor === '_Process') - { - return ''; - } - - if (v.ctor === '::') - { - var output = '[' + toString(v._0); - v = v._1; - while (v.ctor === '::') - { - output += ',' + toString(v._0); - v = v._1; - } - return output + ']'; - } - - if (v.ctor === '[]') - { - return '[]'; - } - - if (v.ctor === 'Set_elm_builtin') - { - return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v)); - } - - if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin') - { - return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v)); - } - - var output = ''; - for (var i in v) - { - if (i === 'ctor') continue; - var str = toString(v[i]); - var c0 = str[0]; - var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; - output += ' ' + (parenless ? str : '(' + str + ')'); - } - return v.ctor + output; - } - - if (type === 'object') - { - if (v instanceof Date) - { - return '<' + v.toString() + '>'; - } - - if (v.elm_web_socket) - { - return ''; - } - - var output = []; - for (var k in v) - { - output.push(k + ' = ' + toString(v[k])); - } - if (output.length === 0) - { - return '{}'; - } - return '{ ' + output.join(', ') + ' }'; - } - - return ''; -} - -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, '\\"'); - } -} - - -return { - eq: eq, - cmp: cmp, - Tuple0: Tuple0, - Tuple2: Tuple2, - chr: chr, - update: update, - guid: guid, - - append: F2(append), - - crash: crash, - crashCase: crashCase, - - toString: toString -}; - -}(); -var _elm_lang$core$Basics$uncurry = F2( - function (f, _p0) { - var _p1 = _p0; - return A2(f, _p1._0, _p1._1); - }); -var _elm_lang$core$Basics$curry = F3( - function (f, a, b) { - return f( - {ctor: '_Tuple2', _0: a, _1: b}); - }); -var _elm_lang$core$Basics$flip = F3( - function (f, b, a) { - return A2(f, a, b); - }); -var _elm_lang$core$Basics$snd = function (_p2) { - var _p3 = _p2; - return _p3._1; -}; -var _elm_lang$core$Basics$fst = function (_p4) { - var _p5 = _p4; - return _p5._0; -}; -var _elm_lang$core$Basics$always = F2( - function (a, _p6) { - return a; - }); -var _elm_lang$core$Basics$identity = function (x) { - return x; -}; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<|'] = F2( - function (f, x) { - return f(x); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['|>'] = F2( - function (x, f) { - return f(x); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>>'] = F3( - function (f, g, x) { - return g( - f(x)); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<<'] = F3( - function (g, f, x) { - return g( - f(x)); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append; -var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString; -var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite; -var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN; -var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat; -var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling; -var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor; -var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate; -var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round; -var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not; -var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and; -var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max; -var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min; -var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq; -var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e; -var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi; -var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp; -var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase; -var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs; -var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate; -var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt; -var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2; -var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan; -var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin; -var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos; -var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan; -var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin; -var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod; -var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add; -var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar; -var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar; -var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns; -var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees; -var _elm_lang$core$Basics$radians = function (t) { - return t; -}; -var _elm_lang$core$Basics$GT = {ctor: 'GT'}; -var _elm_lang$core$Basics$EQ = {ctor: 'EQ'}; -var _elm_lang$core$Basics$LT = {ctor: 'LT'}; -var _elm_lang$core$Basics$Never = function (a) { - return {ctor: 'Never', _0: a}; -}; - -//import Native.Utils // - -var _elm_lang$core$Native_Debug = function() { - -function log(tag, value) -{ - var msg = tag + ': ' + _elm_lang$core$Native_Utils.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); -} - -return { - crash: crash, - log: F2(log) -}; - -}(); -var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; -var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; - -var _elm_lang$core$Maybe$withDefault = F2( - function ($default, maybe) { - var _p0 = maybe; - if (_p0.ctor === 'Just') { - return _p0._0; - } else { - return $default; - } - }); -var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'}; -var _elm_lang$core$Maybe$oneOf = function (maybes) { - oneOf: - while (true) { - var _p1 = maybes; - if (_p1.ctor === '[]') { - return _elm_lang$core$Maybe$Nothing; - } else { - var _p3 = _p1._0; - var _p2 = _p3; - if (_p2.ctor === 'Nothing') { - var _v3 = _p1._1; - maybes = _v3; - continue oneOf; - } else { - return _p3; - } - } - } -}; -var _elm_lang$core$Maybe$andThen = F2( - function (maybeValue, callback) { - var _p4 = maybeValue; - if (_p4.ctor === 'Just') { - return callback(_p4._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$Just = function (a) { - return {ctor: 'Just', _0: a}; -}; -var _elm_lang$core$Maybe$map = F2( - function (f, maybe) { - var _p5 = maybe; - if (_p5.ctor === 'Just') { - return _elm_lang$core$Maybe$Just( - f(_p5._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map2 = F3( - function (func, ma, mb) { - var _p6 = {ctor: '_Tuple2', _0: ma, _1: mb}; - if (((_p6.ctor === '_Tuple2') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A2(func, _p6._0._0, _p6._1._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map3 = F4( - function (func, ma, mb, mc) { - var _p7 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc}; - if ((((_p7.ctor === '_Tuple3') && (_p7._0.ctor === 'Just')) && (_p7._1.ctor === 'Just')) && (_p7._2.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A3(func, _p7._0._0, _p7._1._0, _p7._2._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map4 = F5( - function (func, ma, mb, mc, md) { - var _p8 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md}; - if (((((_p8.ctor === '_Tuple4') && (_p8._0.ctor === 'Just')) && (_p8._1.ctor === 'Just')) && (_p8._2.ctor === 'Just')) && (_p8._3.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A4(func, _p8._0._0, _p8._1._0, _p8._2._0, _p8._3._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); -var _elm_lang$core$Maybe$map5 = F6( - function (func, ma, mb, mc, md, me) { - var _p9 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me}; - if ((((((_p9.ctor === '_Tuple5') && (_p9._0.ctor === 'Just')) && (_p9._1.ctor === 'Just')) && (_p9._2.ctor === 'Just')) && (_p9._3.ctor === 'Just')) && (_p9._4.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A5(func, _p9._0._0, _p9._1._0, _p9._2._0, _p9._3._0, _p9._4._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } - }); - -//import Native.Utils // - -var _elm_lang$core$Native_List = function() { - -var Nil = { ctor: '[]' }; - -function Cons(hd, tl) -{ - return { ctor: '::', _0: hd, _1: tl }; -} - -function fromArray(arr) -{ - var out = Nil; - for (var i = arr.length; i--; ) - { - out = Cons(arr[i], out); - } - return out; -} - -function toArray(xs) -{ - var out = []; - while (xs.ctor !== '[]') - { - out.push(xs._0); - xs = xs._1; - } - return out; -} - - -function range(lo, hi) -{ - var list = Nil; - if (lo <= hi) - { - do - { - list = Cons(hi, list); - } - while (hi-- > lo); - } - return list; -} - -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 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 _elm_lang$core$Native_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; - })); -} - -return { - Nil: Nil, - Cons: Cons, - cons: F2(Cons), - toArray: toArray, - fromArray: fromArray, - range: range, - - foldr: F3(foldr), - - map2: F3(map2), - map3: F4(map3), - map4: F5(map4), - map5: F6(map5), - sortBy: F2(sortBy), - sortWith: F2(sortWith) -}; - -}(); -var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith; -var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy; -var _elm_lang$core$List$sort = function (xs) { - return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs); -}; -var _elm_lang$core$List$drop = F2( - function (n, list) { - drop: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return list; - } else { - var _p0 = list; - if (_p0.ctor === '[]') { - return list; - } else { - var _v1 = n - 1, - _v2 = _p0._1; - n = _v1; - list = _v2; - continue drop; - } - } - } - }); -var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5; -var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4; -var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3; -var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2; -var _elm_lang$core$List$any = F2( - function (isOkay, list) { - any: - while (true) { - var _p1 = list; - if (_p1.ctor === '[]') { - return false; - } else { - if (isOkay(_p1._0)) { - return true; - } else { - var _v4 = isOkay, - _v5 = _p1._1; - isOkay = _v4; - list = _v5; - continue any; - } - } - } - }); -var _elm_lang$core$List$all = F2( - function (isOkay, list) { - return _elm_lang$core$Basics$not( - A2( - _elm_lang$core$List$any, - function (_p2) { - return _elm_lang$core$Basics$not( - isOkay(_p2)); - }, - list)); - }); -var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr; -var _elm_lang$core$List$foldl = F3( - function (func, acc, list) { - foldl: - while (true) { - var _p3 = list; - if (_p3.ctor === '[]') { - return acc; - } else { - var _v7 = func, - _v8 = A2(func, _p3._0, acc), - _v9 = _p3._1; - func = _v7; - acc = _v8; - list = _v9; - continue foldl; - } - } - }); -var _elm_lang$core$List$length = function (xs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p4, i) { - return i + 1; - }), - 0, - xs); -}; -var _elm_lang$core$List$sum = function (numbers) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return x + y; - }), - 0, - numbers); -}; -var _elm_lang$core$List$product = function (numbers) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return x * y; - }), - 1, - numbers); -}; -var _elm_lang$core$List$maximum = function (list) { - var _p5 = list; - if (_p5.ctor === '::') { - return _elm_lang$core$Maybe$Just( - A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1)); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$minimum = function (list) { - var _p6 = list; - if (_p6.ctor === '::') { - return _elm_lang$core$Maybe$Just( - A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1)); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$indexedMap = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$map2, - f, - _elm_lang$core$Native_List.range( - 0, - _elm_lang$core$List$length(xs) - 1), - xs); - }); -var _elm_lang$core$List$member = F2( - function (x, xs) { - return A2( - _elm_lang$core$List$any, - function (a) { - return _elm_lang$core$Native_Utils.eq(a, x); - }, - xs); - }); -var _elm_lang$core$List$isEmpty = function (xs) { - var _p7 = xs; - if (_p7.ctor === '[]') { - return true; - } else { - return false; - } -}; -var _elm_lang$core$List$tail = function (list) { - var _p8 = list; - if (_p8.ctor === '::') { - return _elm_lang$core$Maybe$Just(_p8._1); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$head = function (list) { - var _p9 = list; - if (_p9.ctor === '::') { - return _elm_lang$core$Maybe$Just(_p9._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {}; -_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons; -var _elm_lang$core$List$map = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, acc) { - return A2( - _elm_lang$core$List_ops['::'], - f(x), - acc); - }), - _elm_lang$core$Native_List.fromArray( - []), - xs); - }); -var _elm_lang$core$List$filter = F2( - function (pred, xs) { - var conditionalCons = F2( - function (x, xs$) { - return pred(x) ? A2(_elm_lang$core$List_ops['::'], x, xs$) : xs$; - }); - return A3( - _elm_lang$core$List$foldr, - conditionalCons, - _elm_lang$core$Native_List.fromArray( - []), - xs); - }); -var _elm_lang$core$List$maybeCons = F3( - function (f, mx, xs) { - var _p10 = f(mx); - if (_p10.ctor === 'Just') { - return A2(_elm_lang$core$List_ops['::'], _p10._0, xs); - } else { - return xs; - } - }); -var _elm_lang$core$List$filterMap = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$foldr, - _elm_lang$core$List$maybeCons(f), - _elm_lang$core$Native_List.fromArray( - []), - xs); - }); -var _elm_lang$core$List$reverse = function (list) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return A2(_elm_lang$core$List_ops['::'], x, y); - }), - _elm_lang$core$Native_List.fromArray( - []), - list); -}; -var _elm_lang$core$List$scanl = F3( - function (f, b, xs) { - var scan1 = F2( - function (x, accAcc) { - var _p11 = accAcc; - if (_p11.ctor === '::') { - return A2( - _elm_lang$core$List_ops['::'], - A2(f, x, _p11._0), - accAcc); - } else { - return _elm_lang$core$Native_List.fromArray( - []); - } - }); - return _elm_lang$core$List$reverse( - A3( - _elm_lang$core$List$foldl, - scan1, - _elm_lang$core$Native_List.fromArray( - [b]), - xs)); - }); -var _elm_lang$core$List$append = F2( - function (xs, ys) { - var _p12 = ys; - if (_p12.ctor === '[]') { - return xs; - } else { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, y) { - return A2(_elm_lang$core$List_ops['::'], x, y); - }), - ys, - xs); - } - }); -var _elm_lang$core$List$concat = function (lists) { - return A3( - _elm_lang$core$List$foldr, - _elm_lang$core$List$append, - _elm_lang$core$Native_List.fromArray( - []), - lists); -}; -var _elm_lang$core$List$concatMap = F2( - function (f, list) { - return _elm_lang$core$List$concat( - A2(_elm_lang$core$List$map, f, list)); - }); -var _elm_lang$core$List$partition = F2( - function (pred, list) { - var step = F2( - function (x, _p13) { - var _p14 = _p13; - var _p16 = _p14._0; - var _p15 = _p14._1; - return pred(x) ? { - ctor: '_Tuple2', - _0: A2(_elm_lang$core$List_ops['::'], x, _p16), - _1: _p15 - } : { - ctor: '_Tuple2', - _0: _p16, - _1: A2(_elm_lang$core$List_ops['::'], x, _p15) - }; - }); - return A3( - _elm_lang$core$List$foldr, - step, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_List.fromArray( - []), - _1: _elm_lang$core$Native_List.fromArray( - []) - }, - list); - }); -var _elm_lang$core$List$unzip = function (pairs) { - var step = F2( - function (_p18, _p17) { - var _p19 = _p18; - var _p20 = _p17; - return { - ctor: '_Tuple2', - _0: A2(_elm_lang$core$List_ops['::'], _p19._0, _p20._0), - _1: A2(_elm_lang$core$List_ops['::'], _p19._1, _p20._1) - }; - }); - return A3( - _elm_lang$core$List$foldr, - step, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_List.fromArray( - []), - _1: _elm_lang$core$Native_List.fromArray( - []) - }, - pairs); -}; -var _elm_lang$core$List$intersperse = F2( - function (sep, xs) { - var _p21 = xs; - if (_p21.ctor === '[]') { - return _elm_lang$core$Native_List.fromArray( - []); - } else { - var step = F2( - function (x, rest) { - return A2( - _elm_lang$core$List_ops['::'], - sep, - A2(_elm_lang$core$List_ops['::'], x, rest)); - }); - var spersed = A3( - _elm_lang$core$List$foldr, - step, - _elm_lang$core$Native_List.fromArray( - []), - _p21._1); - return A2(_elm_lang$core$List_ops['::'], _p21._0, spersed); - } - }); -var _elm_lang$core$List$takeReverse = F3( - function (n, list, taken) { - takeReverse: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return taken; - } else { - var _p22 = list; - if (_p22.ctor === '[]') { - return taken; - } else { - var _v23 = n - 1, - _v24 = _p22._1, - _v25 = A2(_elm_lang$core$List_ops['::'], _p22._0, taken); - n = _v23; - list = _v24; - taken = _v25; - continue takeReverse; - } - } - } - }); -var _elm_lang$core$List$takeTailRec = F2( - function (n, list) { - return _elm_lang$core$List$reverse( - A3( - _elm_lang$core$List$takeReverse, - n, - list, - _elm_lang$core$Native_List.fromArray( - []))); - }); -var _elm_lang$core$List$takeFast = F3( - function (ctr, n, list) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return _elm_lang$core$Native_List.fromArray( - []); - } else { - var _p23 = {ctor: '_Tuple2', _0: n, _1: list}; - _v26_5: - do { - _v26_1: - do { - if (_p23.ctor === '_Tuple2') { - if (_p23._1.ctor === '[]') { - return list; - } else { - if (_p23._1._1.ctor === '::') { - switch (_p23._0) { - case 1: - break _v26_1; - case 2: - return _elm_lang$core$Native_List.fromArray( - [_p23._1._0, _p23._1._1._0]); - case 3: - if (_p23._1._1._1.ctor === '::') { - return _elm_lang$core$Native_List.fromArray( - [_p23._1._0, _p23._1._1._0, _p23._1._1._1._0]); - } else { - break _v26_5; - } - default: - if ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) { - var _p28 = _p23._1._1._1._0; - var _p27 = _p23._1._1._0; - var _p26 = _p23._1._0; - var _p25 = _p23._1._1._1._1._0; - var _p24 = _p23._1._1._1._1._1; - return (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? A2( - _elm_lang$core$List_ops['::'], - _p26, - A2( - _elm_lang$core$List_ops['::'], - _p27, - A2( - _elm_lang$core$List_ops['::'], - _p28, - A2( - _elm_lang$core$List_ops['::'], - _p25, - A2(_elm_lang$core$List$takeTailRec, n - 4, _p24))))) : A2( - _elm_lang$core$List_ops['::'], - _p26, - A2( - _elm_lang$core$List_ops['::'], - _p27, - A2( - _elm_lang$core$List_ops['::'], - _p28, - A2( - _elm_lang$core$List_ops['::'], - _p25, - A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24))))); - } else { - break _v26_5; - } - } - } else { - if (_p23._0 === 1) { - break _v26_1; - } else { - break _v26_5; - } - } - } - } else { - break _v26_5; - } - } while(false); - return _elm_lang$core$Native_List.fromArray( - [_p23._1._0]); - } while(false); - return list; - } - }); -var _elm_lang$core$List$take = F2( - function (n, list) { - return A3(_elm_lang$core$List$takeFast, 0, n, list); - }); -var _elm_lang$core$List$repeatHelp = F3( - function (result, n, value) { - repeatHelp: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return result; - } else { - var _v27 = A2(_elm_lang$core$List_ops['::'], value, result), - _v28 = n - 1, - _v29 = value; - result = _v27; - n = _v28; - value = _v29; - continue repeatHelp; - } - } - }); -var _elm_lang$core$List$repeat = F2( - function (n, value) { - return A3( - _elm_lang$core$List$repeatHelp, - _elm_lang$core$Native_List.fromArray( - []), - n, - value); - }); - -var _elm_lang$core$Result$toMaybe = function (result) { - var _p0 = result; - if (_p0.ctor === 'Ok') { - return _elm_lang$core$Maybe$Just(_p0._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$Result$withDefault = F2( - function (def, result) { - var _p1 = result; - if (_p1.ctor === 'Ok') { - return _p1._0; - } else { - return def; - } - }); -var _elm_lang$core$Result$Err = function (a) { - return {ctor: 'Err', _0: a}; -}; -var _elm_lang$core$Result$andThen = F2( - function (result, callback) { - var _p2 = result; - if (_p2.ctor === 'Ok') { - return callback(_p2._0); - } else { - return _elm_lang$core$Result$Err(_p2._0); - } - }); -var _elm_lang$core$Result$Ok = function (a) { - return {ctor: 'Ok', _0: a}; -}; -var _elm_lang$core$Result$map = F2( - function (func, ra) { - var _p3 = ra; - if (_p3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - func(_p3._0)); - } else { - return _elm_lang$core$Result$Err(_p3._0); - } - }); -var _elm_lang$core$Result$map2 = F3( - function (func, ra, rb) { - var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; - if (_p4._0.ctor === 'Ok') { - if (_p4._1.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A2(func, _p4._0._0, _p4._1._0)); - } else { - return _elm_lang$core$Result$Err(_p4._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p4._0._0); - } - }); -var _elm_lang$core$Result$map3 = F4( - function (func, ra, rb, rc) { - var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; - if (_p5._0.ctor === 'Ok') { - if (_p5._1.ctor === 'Ok') { - if (_p5._2.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); - } else { - return _elm_lang$core$Result$Err(_p5._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._0._0); - } - }); -var _elm_lang$core$Result$map4 = F5( - function (func, ra, rb, rc, rd) { - var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; - if (_p6._0.ctor === 'Ok') { - if (_p6._1.ctor === 'Ok') { - if (_p6._2.ctor === 'Ok') { - if (_p6._3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); - } else { - return _elm_lang$core$Result$Err(_p6._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._0._0); - } - }); -var _elm_lang$core$Result$map5 = F6( - function (func, ra, rb, rc, rd, re) { - var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; - if (_p7._0.ctor === 'Ok') { - if (_p7._1.ctor === 'Ok') { - if (_p7._2.ctor === 'Ok') { - if (_p7._3.ctor === 'Ok') { - if (_p7._4.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); - } else { - return _elm_lang$core$Result$Err(_p7._4._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._0._0); - } - }); -var _elm_lang$core$Result$formatError = F2( - function (f, result) { - var _p8 = result; - if (_p8.ctor === 'Ok') { - return _elm_lang$core$Result$Ok(_p8._0); - } else { - return _elm_lang$core$Result$Err( - f(_p8._0)); - } - }); -var _elm_lang$core$Result$fromMaybe = F2( - function (err, maybe) { - var _p9 = maybe; - if (_p9.ctor === 'Just') { - return _elm_lang$core$Result$Ok(_p9._0); - } else { - return _elm_lang$core$Result$Err(err); - } - }); - -//import // - -var _elm_lang$core$Native_Platform = function() { - - -// PROGRAMS - -function addPublicModule(object, name, main) -{ - var init = main ? makeEmbed(name, main) : mainIsUndefined(name); - - object['worker'] = function worker(flags) - { - return init(undefined, flags, false); - } - - object['embed'] = function embed(domNode, flags) - { - return init(domNode, flags, true); - } - - object['fullscreen'] = function fullscreen(flags) - { - return init(document.body, flags, true); - }; -} - - -// PROGRAM FAIL - -function mainIsUndefined(name) -{ - return function(domNode) - { - var message = 'Cannot initialize module `' + name + - '` because it has no `main` value!\nWhat should I show on screen?'; - domNode.innerHTML = errorHtml(message); - throw new Error(message); - }; -} - -function errorHtml(message) -{ - return '
' - + '

Oops! Something went wrong when starting your Elm program.

' - + '
' + message + '
' - + '
'; -} - - -// PROGRAM SUCCESS - -function makeEmbed(moduleName, main) -{ - return function embed(rootDomNode, flags, withRenderer) - { - try - { - var program = mainToProgram(moduleName, main); - if (!withRenderer) - { - program.renderer = dummyRenderer; - } - return makeEmbedHelp(moduleName, program, rootDomNode, flags); - } - catch (e) - { - rootDomNode.innerHTML = errorHtml(e.message); - throw e; - } - }; -} - -function dummyRenderer() -{ - return { update: function() {} }; -} - - -// MAIN TO PROGRAM - -function mainToProgram(moduleName, wrappedMain) -{ - var main = wrappedMain.main; - - if (typeof main.init === 'undefined') - { - var emptyBag = batch(_elm_lang$core$Native_List.Nil); - var noChange = _elm_lang$core$Native_Utils.Tuple2( - _elm_lang$core$Native_Utils.Tuple0, - emptyBag - ); - - return _elm_lang$virtual_dom$VirtualDom$programWithFlags({ - init: function() { return noChange; }, - view: function() { return main; }, - update: F2(function() { return noChange; }), - subscriptions: function () { return emptyBag; } - }); - } - - var flags = wrappedMain.flags; - var init = flags - ? initWithFlags(moduleName, main.init, flags) - : initWithoutFlags(moduleName, main.init); - - return _elm_lang$virtual_dom$VirtualDom$programWithFlags({ - init: init, - view: main.view, - update: main.update, - subscriptions: main.subscriptions, - }); -} - -function initWithoutFlags(moduleName, realInit) -{ - return function init(flags) - { - if (typeof flags !== 'undefined') - { - throw new Error( - 'You are giving module `' + moduleName + '` an argument in JavaScript.\n' - + 'This module does not take arguments though! You probably need to change the\n' - + 'initialization code to something like `Elm.' + moduleName + '.fullscreen()`' - ); - } - return realInit(); - }; -} - -function initWithFlags(moduleName, realInit, flagDecoder) -{ - return function init(flags) - { - var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); - if (result.ctor === 'Err') - { - throw new Error( - 'You are trying to initialize module `' + moduleName + '` with an unexpected argument.\n' - + 'When trying to convert it to a usable Elm value, I run into this problem:\n\n' - + result._0 - ); - } - return realInit(result._0); - }; -} - - -// SETUP RUNTIME SYSTEM - -function makeEmbedHelp(moduleName, program, rootDomNode, flags) -{ - var init = program.init; - var update = program.update; - var subscriptions = program.subscriptions; - var view = program.view; - var makeRenderer = program.renderer; - - // ambient state - var managers = {}; - var renderer; - - // init and update state in main process - var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - var results = init(flags); - var model = results._0; - renderer = makeRenderer(rootDomNode, enqueue, view(model)); - var cmds = results._1; - var subs = subscriptions(model); - dispatchEffects(managers, cmds, subs); - callback(_elm_lang$core$Native_Scheduler.succeed(model)); - }); - - function onMessage(msg, model) - { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - var results = A2(update, msg, model); - model = results._0; - renderer.update(view(model)); - var cmds = results._1; - var subs = subscriptions(model); - dispatchEffects(managers, cmds, subs); - callback(_elm_lang$core$Native_Scheduler.succeed(model)); - }); - } - - var mainProcess = spawnLoop(initApp, onMessage); - - function enqueue(msg) - { - _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg); - } - - var ports = setupEffects(managers, enqueue); - - return ports ? { ports: ports } : {}; -} - - -// EFFECT MANAGERS - -var effectManagers = {}; - -function setupEffects(managers, callback) -{ - var ports; - - // setup all necessary effect managers - for (var key in effectManagers) - { - var manager = effectManagers[key]; - - if (manager.isForeign) - { - ports = ports || {}; - ports[key] = manager.tag === 'cmd' - ? setupOutgoingPort(key) - : setupIncomingPort(key, callback); - } - - managers[key] = makeManager(manager, callback); - } - - return ports; -} - -function makeManager(info, callback) -{ - var router = { - main: callback, - self: undefined - }; - - var tag = info.tag; - var onEffects = info.onEffects; - var onSelfMsg = info.onSelfMsg; - - function onMessage(msg, state) - { - if (msg.ctor === 'self') - { - return A3(onSelfMsg, router, msg._0, state); - } - - var fx = msg._0; - switch (tag) - { - case 'cmd': - return A3(onEffects, router, fx.cmds, state); - - case 'sub': - return A3(onEffects, router, fx.subs, state); - - case 'fx': - return A4(onEffects, router, fx.cmds, fx.subs, state); - } - } - - var process = spawnLoop(info.init, onMessage); - router.self = process; - return process; -} - -function sendToApp(router, msg) -{ - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) - { - router.main(msg); - callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function sendToSelf(router, msg) -{ - return A2(_elm_lang$core$Native_Scheduler.send, router.self, { - ctor: 'self', - _0: msg - }); -} - - -// HELPER for STATEFUL LOOPS - -function spawnLoop(init, onMessage) -{ - var andThen = _elm_lang$core$Native_Scheduler.andThen; - - function loop(state) - { - var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) { - return onMessage(msg, state); - }); - return A2(andThen, handleMsg, loop); - } - - var task = A2(andThen, init, loop); - - return _elm_lang$core$Native_Scheduler.rawSpawn(task); -} - - -// BAGS - -function leaf(home) -{ - return function(value) - { - return { - type: 'leaf', - home: home, - value: value - }; - }; -} - -function batch(list) -{ - return { - type: 'node', - branches: list - }; -} - -function map(tagger, bag) -{ - return { - type: 'map', - tagger: tagger, - tree: bag - } -} - - -// PIPE BAGS INTO EFFECT MANAGERS - -function dispatchEffects(managers, cmdBag, subBag) -{ - var effectsDict = {}; - gatherEffects(true, cmdBag, effectsDict, null); - gatherEffects(false, subBag, effectsDict, null); - - for (var home in managers) - { - var fx = home in effectsDict - ? effectsDict[home] - : { - cmds: _elm_lang$core$Native_List.Nil, - subs: _elm_lang$core$Native_List.Nil - }; - - _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx }); - } -} - -function gatherEffects(isCmd, bag, effectsDict, taggers) -{ - switch (bag.type) - { - case 'leaf': - var home = bag.home; - var effect = toEffect(isCmd, home, taggers, bag.value); - effectsDict[home] = insert(isCmd, effect, effectsDict[home]); - return; - - case 'node': - var list = bag.branches; - while (list.ctor !== '[]') - { - gatherEffects(isCmd, list._0, effectsDict, taggers); - list = list._1; - } - return; - - case 'map': - gatherEffects(isCmd, bag.tree, effectsDict, { - tagger: bag.tagger, - rest: taggers - }); - return; - } -} - -function toEffect(isCmd, home, taggers, value) -{ - function applyTaggers(x) - { - var temp = taggers; - while (temp) - { - x = temp.tagger(x); - temp = temp.rest; - } - return x; - } - - var map = isCmd - ? effectManagers[home].cmdMap - : effectManagers[home].subMap; - - return A2(map, applyTaggers, value) -} - -function insert(isCmd, newEffect, effects) -{ - effects = effects || { - cmds: _elm_lang$core$Native_List.Nil, - subs: _elm_lang$core$Native_List.Nil - }; - if (isCmd) - { - effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds); - return effects; - } - effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs); - return effects; -} - - -// PORTS - -function checkPortName(name) -{ - if (name in effectManagers) - { - throw new Error('There can only be one port named `' + name + '`, but your program has multiple.'); - } -} - - -// OUTGOING PORTS - -function outgoingPort(name, converter) -{ - checkPortName(name); - effectManagers[name] = { - tag: 'cmd', - cmdMap: outgoingPortMap, - converter: converter, - isForeign: true - }; - return leaf(name); -} - -var outgoingPortMap = F2(function cmdMap(tagger, value) { - return value; -}); - -function setupOutgoingPort(name) -{ - var subs = []; - var converter = effectManagers[name].converter; - - // CREATE MANAGER - - var init = _elm_lang$core$Native_Scheduler.succeed(null); - - function onEffects(router, cmdList, state) - { - while (cmdList.ctor !== '[]') - { - var value = converter(cmdList._0); - for (var i = 0; i < subs.length; i++) - { - subs[i](value); - } - cmdList = cmdList._1; - } - return init; - } - - effectManagers[name].init = init; - effectManagers[name].onEffects = F3(onEffects); - - // PUBLIC API - - function subscribe(callback) - { - subs.push(callback); - } - - function unsubscribe(callback) - { - var index = subs.indexOf(callback); - if (index >= 0) - { - subs.splice(index, 1); - } - } - - return { - subscribe: subscribe, - unsubscribe: unsubscribe - }; -} - - -// INCOMING PORTS - -function incomingPort(name, converter) -{ - checkPortName(name); - effectManagers[name] = { - tag: 'sub', - subMap: incomingPortMap, - converter: converter, - isForeign: true - }; - return leaf(name); -} - -var incomingPortMap = F2(function subMap(tagger, finalTagger) -{ - return function(value) - { - return tagger(finalTagger(value)); - }; -}); - -function setupIncomingPort(name, callback) -{ - var sentBeforeInit = []; - var subs = _elm_lang$core$Native_List.Nil; - var converter = effectManagers[name].converter; - var currentOnEffects = preInitOnEffects; - var currentSend = preInitSend; - - // CREATE MANAGER - - var init = _elm_lang$core$Native_Scheduler.succeed(null); - - function preInitOnEffects(router, subList, state) - { - var postInitResult = postInitOnEffects(router, subList, state); - - for(var i = 0; i < sentBeforeInit.length; i++) - { - postInitSend(sentBeforeInit[i]); - } - - sentBeforeInit = null; // to release objects held in queue - currentSend = postInitSend; - currentOnEffects = postInitOnEffects; - return postInitResult; - } - - function postInitOnEffects(router, subList, state) - { - subs = subList; - return init; - } - - function onEffects(router, subList, state) - { - return currentOnEffects(router, subList, state); - } - - effectManagers[name].init = init; - effectManagers[name].onEffects = F3(onEffects); - - // PUBLIC API - - function preInitSend(value) - { - sentBeforeInit.push(value); - } - - function postInitSend(incomingValue) - { - var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue); - if (result.ctor === 'Err') - { - throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0); - } - - var value = result._0; - var temp = subs; - while (temp.ctor !== '[]') - { - callback(temp._0(value)); - temp = temp._1; - } - } - - function send(incomingValue) - { - currentSend(incomingValue); - } - - return { send: send }; -} - -return { - // routers - sendToApp: F2(sendToApp), - sendToSelf: F2(sendToSelf), - - // global setup - mainToProgram: mainToProgram, - effectManagers: effectManagers, - outgoingPort: outgoingPort, - incomingPort: incomingPort, - addPublicModule: addPublicModule, - - // effect bags - leaf: leaf, - batch: batch, - map: F2(map) -}; - -}(); - -//import Native.Utils // - -var _elm_lang$core$Native_Scheduler = function() { - -var MAX_STEPS = 10000; - - -// TASKS - -function succeed(value) -{ - return { - ctor: '_Task_succeed', - value: value - }; -} - -function fail(error) -{ - return { - ctor: '_Task_fail', - value: error - }; -} - -function nativeBinding(callback) -{ - return { - ctor: '_Task_nativeBinding', - callback: callback, - cancel: null - }; -} - -function andThen(task, callback) -{ - return { - ctor: '_Task_andThen', - task: task, - callback: callback - }; -} - -function onError(task, callback) -{ - return { - ctor: '_Task_onError', - task: task, - callback: callback - }; -} - -function receive(callback) -{ - return { - ctor: '_Task_receive', - callback: callback - }; -} - - -// PROCESSES - -function rawSpawn(task) -{ - var process = { - ctor: '_Process', - id: _elm_lang$core$Native_Utils.guid(), - root: task, - stack: null, - mailbox: [] - }; - - enqueue(process); - - return process; -} - -function spawn(task) -{ - return nativeBinding(function(callback) { - var process = rawSpawn(task); - callback(succeed(process)); - }); -} - -function rawSend(process, msg) -{ - process.mailbox.push(msg); - enqueue(process); -} - -function send(process, msg) -{ - return nativeBinding(function(callback) { - rawSend(process, msg); - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function kill(process) -{ - return nativeBinding(function(callback) { - var root = process.root; - if (root.ctor === '_Task_nativeBinding' && root.cancel) - { - root.cancel(); - } - - process.root = null; - - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function sleep(time) -{ - return nativeBinding(function(callback) { - var id = setTimeout(function() { - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }, time); - - return function() { clearTimeout(id); }; - }); -} - - -// STEP PROCESSES - -function step(numSteps, process) -{ - while (numSteps < MAX_STEPS) - { - var ctor = process.root.ctor; - - if (ctor === '_Task_succeed') - { - while (process.stack && process.stack.ctor === '_Task_onError') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; - } - - if (ctor === '_Task_fail') - { - while (process.stack && process.stack.ctor === '_Task_andThen') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; - } - - if (ctor === '_Task_andThen') - { - process.stack = { - ctor: '_Task_andThen', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } - - if (ctor === '_Task_onError') - { - process.stack = { - ctor: '_Task_onError', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } - - if (ctor === '_Task_nativeBinding') - { - process.root.cancel = process.root.callback(function(newRoot) { - process.root = newRoot; - enqueue(process); - }); - - break; - } - - if (ctor === '_Task_receive') - { - var mailbox = process.mailbox; - if (mailbox.length === 0) - { - break; - } - - process.root = process.root.callback(mailbox.shift()); - ++numSteps; - continue; - } - - throw new Error(ctor); - } - - if (numSteps < MAX_STEPS) - { - return numSteps + 1; - } - enqueue(process); - - return numSteps; -} - - -// WORK QUEUE - -var working = false; -var workQueue = []; - -function enqueue(process) -{ - workQueue.push(process); - - if (!working) - { - setTimeout(work, 0); - working = true; - } -} - -function work() -{ - var numSteps = 0; - var process; - while (numSteps < MAX_STEPS && (process = workQueue.shift())) - { - if (process.root) - { - numSteps = step(numSteps, process); - } - } - if (!process) - { - working = false; - return; - } - setTimeout(work, 0); -} - - -return { - succeed: succeed, - fail: fail, - nativeBinding: nativeBinding, - andThen: F2(andThen), - onError: F2(onError), - receive: receive, - - spawn: spawn, - kill: kill, - sleep: sleep, - send: F2(send), - - rawSpawn: rawSpawn, - rawSend: rawSend -}; - -}(); -var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; -var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; -var _elm_lang$core$Platform$Program = {ctor: 'Program'}; -var _elm_lang$core$Platform$Task = {ctor: 'Task'}; -var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; -var _elm_lang$core$Platform$Router = {ctor: 'Router'}; - -var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( - _elm_lang$core$Native_List.fromArray( - [])); -var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; -_elm_lang$core$Platform_Cmd_ops['!'] = F2( - function (model, commands) { - return { - ctor: '_Tuple2', - _0: model, - _1: _elm_lang$core$Platform_Cmd$batch(commands) - }; - }); -var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; - -var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( - _elm_lang$core$Native_List.fromArray( - [])); -var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; - -var _elm_lang$animation_frame$Native_AnimationFrame = function() -{ - -var hasStartTime = - window.performance && - window.performance.timing && - window.performance.timing.navigationStart; - -var navStart = hasStartTime - ? window.performance.timing.navigationStart - : Date.now(); - -var rAF = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) -{ - var id = requestAnimationFrame(function(time) { - var timeNow = time - ? (time > navStart ? time : time + navStart) - : Date.now(); - - callback(_elm_lang$core$Native_Scheduler.succeed(timeNow)); - }); - - return function() { - cancelAnimationFrame(id); - }; -}); - -return { - rAF: rAF -}; - -}(); - -var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; -var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; -var _elm_lang$core$Task$spawnCmd = F2( - function (router, _p0) { - var _p1 = _p0; - return _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Task$andThen, - _p1._0, - _elm_lang$core$Platform$sendToApp(router))); - }); -var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; -var _elm_lang$core$Task$mapError = F2( - function (f, task) { - return A2( - _elm_lang$core$Task$onError, - task, - function (err) { - return _elm_lang$core$Task$fail( - f(err)); - }); - }); -var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Task$map = F2( - function (func, taskA) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return _elm_lang$core$Task$succeed( - func(a)); - }); - }); -var _elm_lang$core$Task$map2 = F3( - function (func, taskA, taskB) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return _elm_lang$core$Task$succeed( - A2(func, a, b)); - }); - }); - }); -var _elm_lang$core$Task$map3 = F4( - function (func, taskA, taskB, taskC) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - taskC, - function (c) { - return _elm_lang$core$Task$succeed( - A3(func, a, b, c)); - }); - }); - }); - }); -var _elm_lang$core$Task$map4 = F5( - function (func, taskA, taskB, taskC, taskD) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - taskC, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - taskD, - function (d) { - return _elm_lang$core$Task$succeed( - A4(func, a, b, c, d)); - }); - }); - }); - }); - }); -var _elm_lang$core$Task$map5 = F6( - function (func, taskA, taskB, taskC, taskD, taskE) { - return A2( - _elm_lang$core$Task$andThen, - taskA, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - taskB, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - taskC, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - taskD, - function (d) { - return A2( - _elm_lang$core$Task$andThen, - taskE, - function (e) { - return _elm_lang$core$Task$succeed( - A5(func, a, b, c, d, e)); - }); - }); - }); - }); - }); - }); -var _elm_lang$core$Task$andMap = F2( - function (taskFunc, taskValue) { - return A2( - _elm_lang$core$Task$andThen, - taskFunc, - function (func) { - return A2( - _elm_lang$core$Task$andThen, - taskValue, - function (value) { - return _elm_lang$core$Task$succeed( - func(value)); - }); - }); - }); -var _elm_lang$core$Task$sequence = function (tasks) { - var _p2 = tasks; - if (_p2.ctor === '[]') { - return _elm_lang$core$Task$succeed( - _elm_lang$core$Native_List.fromArray( - [])); - } else { - return A3( - _elm_lang$core$Task$map2, - F2( - function (x, y) { - return A2(_elm_lang$core$List_ops['::'], x, y); - }), - _p2._0, - _elm_lang$core$Task$sequence(_p2._1)); - } -}; -var _elm_lang$core$Task$onEffects = F3( - function (router, commands, state) { - return A2( - _elm_lang$core$Task$map, - function (_p3) { - return {ctor: '_Tuple0'}; - }, - _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - _elm_lang$core$Task$spawnCmd(router), - commands))); - }); -var _elm_lang$core$Task$toMaybe = function (task) { - return A2( - _elm_lang$core$Task$onError, - A2(_elm_lang$core$Task$map, _elm_lang$core$Maybe$Just, task), - function (_p4) { - return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); - }); -}; -var _elm_lang$core$Task$fromMaybe = F2( - function ($default, maybe) { - var _p5 = maybe; - if (_p5.ctor === 'Just') { - return _elm_lang$core$Task$succeed(_p5._0); - } else { - return _elm_lang$core$Task$fail($default); - } - }); -var _elm_lang$core$Task$toResult = function (task) { - return A2( - _elm_lang$core$Task$onError, - A2(_elm_lang$core$Task$map, _elm_lang$core$Result$Ok, task), - function (msg) { - return _elm_lang$core$Task$succeed( - _elm_lang$core$Result$Err(msg)); - }); -}; -var _elm_lang$core$Task$fromResult = function (result) { - var _p6 = result; - if (_p6.ctor === 'Ok') { - return _elm_lang$core$Task$succeed(_p6._0); - } else { - return _elm_lang$core$Task$fail(_p6._0); - } -}; -var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); -var _elm_lang$core$Task$onSelfMsg = F3( - function (_p9, _p8, _p7) { - return _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); - }); -var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); -var _elm_lang$core$Task$T = function (a) { - return {ctor: 'T', _0: a}; -}; -var _elm_lang$core$Task$perform = F3( - function (onFail, onSuccess, task) { - return _elm_lang$core$Task$command( - _elm_lang$core$Task$T( - A2( - _elm_lang$core$Task$onError, - A2(_elm_lang$core$Task$map, onSuccess, task), - function (x) { - return _elm_lang$core$Task$succeed( - onFail(x)); - }))); - }); -var _elm_lang$core$Task$cmdMap = F2( - function (tagger, _p10) { - var _p11 = _p10; - return _elm_lang$core$Task$T( - A2(_elm_lang$core$Task$map, tagger, _p11._0)); - }); -_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; - -//import Maybe, Native.List, Native.Utils, Result // - -var _elm_lang$core$Native_String = function() { - -function isEmpty(str) -{ - return str.length === 0; -} -function cons(chr, str) -{ - return chr + str; -} -function uncons(str) -{ - var hd = str[0]; - if (hd) - { - return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1))); - } - return _elm_lang$core$Maybe$Nothing; -} -function append(a, b) -{ - return a + b; -} -function concat(strs) -{ - return _elm_lang$core$Native_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(_elm_lang$core$Native_Utils.chr(out[i])); - } - return out.join(''); -} -function filter(pred, str) -{ - return str.split('').map(_elm_lang$core$Native_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, _elm_lang$core$Native_Utils.chr(str[i]), b); - } - return b; -} -function foldr(f, b, str) -{ - for (var i = str.length; i--; ) - { - b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); - } - return b; -} -function split(sep, str) -{ - return _elm_lang$core$Native_List.fromArray(str.split(sep)); -} -function join(sep, strs) -{ - return _elm_lang$core$Native_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.replace(/^\s+/, ''); -} -function trimRight(str) -{ - return str.replace(/\s+$/, ''); -} - -function words(str) -{ - return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g)); -} -function lines(str) -{ - return _elm_lang$core$Native_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(_elm_lang$core$Native_Utils.chr(str[i]))) - { - return true; - } - } - return false; -} -function all(pred, str) -{ - for (var i = str.length; i--; ) - { - if (!pred(_elm_lang$core$Native_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; - - if (subLen < 1) - { - return _elm_lang$core$Native_List.Nil; - } - - var i = 0; - var is = []; - - while ((i = str.indexOf(sub, i)) > -1) - { - is.push(i); - i = i + subLen; - } - - return _elm_lang$core$Native_List.fromArray(is); -} - -function toInt(s) -{ - var len = s.length; - if (len === 0) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); - } - var start = 0; - if (s[0] === '-') - { - if (len === 1) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); - } - start = 1; - } - for (var i = start; i < len; ++i) - { - var c = s[i]; - if (c < '0' || '9' < c) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int" ); - } - } - return _elm_lang$core$Result$Ok(parseInt(s, 10)); -} - -function toFloat(s) -{ - var len = s.length; - if (len === 0) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); - } - var start = 0; - if (s[0] === '-') - { - if (len === 1) - { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); - } - start = 1; - } - var dotCount = 0; - for (var i = start; i < len; ++i) - { - var c = s[i]; - if ('0' <= c && c <= '9') - { - continue; - } - if (c === '.') - { - dotCount += 1; - if (dotCount <= 1) - { - continue; - } - } - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float" ); - } - return _elm_lang$core$Result$Ok(parseFloat(s)); -} - -function toList(str) -{ - return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr)); -} -function fromList(chars) -{ - return _elm_lang$core$Native_List.toArray(chars).join(''); -} - -return { - 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 -}; - -}(); - -//import Native.Utils // - -var _elm_lang$core$Native_Char = function() { - -return { - fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); }, - toCode: function(c) { return c.charCodeAt(0); }, - toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); }, - toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); }, - toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); }, - toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); } -}; - -}(); -var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode; -var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode; -var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower; -var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper; -var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower; -var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper; -var _elm_lang$core$Char$isBetween = F3( - function (low, high, $char) { - var code = _elm_lang$core$Char$toCode($char); - return (_elm_lang$core$Native_Utils.cmp( - code, - _elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp( - code, - _elm_lang$core$Char$toCode(high)) < 1); - }); -var _elm_lang$core$Char$isUpper = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('A'), - _elm_lang$core$Native_Utils.chr('Z')); -var _elm_lang$core$Char$isLower = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('a'), - _elm_lang$core$Native_Utils.chr('z')); -var _elm_lang$core$Char$isDigit = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('0'), - _elm_lang$core$Native_Utils.chr('9')); -var _elm_lang$core$Char$isOctDigit = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('0'), - _elm_lang$core$Native_Utils.chr('7')); -var _elm_lang$core$Char$isHexDigit = function ($char) { - return _elm_lang$core$Char$isDigit($char) || (A3( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('a'), - _elm_lang$core$Native_Utils.chr('f'), - $char) || A3( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('A'), - _elm_lang$core$Native_Utils.chr('F'), - $char)); -}; - -var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; -var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; -var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; -var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; -var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; -var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; -var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; -var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; -var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; -var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; -var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; -var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; -var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; -var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; -var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; -var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; -var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; -var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; -var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; -var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; -var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; -var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; -var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; -var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; -var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; -var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; -var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; -var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; -var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; -var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; -var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; -var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; -var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; -var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; -var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; -var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; -var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; -var _elm_lang$core$String$fromChar = function ($char) { - return A2(_elm_lang$core$String$cons, $char, ''); -}; -var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; - -var _elm_lang$core$Dict$foldr = F3( - function (f, acc, t) { - foldr: - while (true) { - var _p0 = t; - if (_p0.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v1 = f, - _v2 = A3( - f, - _p0._1, - _p0._2, - A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), - _v3 = _p0._3; - f = _v1; - acc = _v2; - t = _v3; - continue foldr; - } - } - }); -var _elm_lang$core$Dict$keys = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, keyList) { - return A2(_elm_lang$core$List_ops['::'], key, keyList); - }), - _elm_lang$core$Native_List.fromArray( - []), - dict); -}; -var _elm_lang$core$Dict$values = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, valueList) { - return A2(_elm_lang$core$List_ops['::'], value, valueList); - }), - _elm_lang$core$Native_List.fromArray( - []), - dict); -}; -var _elm_lang$core$Dict$toList = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, list) { - return A2( - _elm_lang$core$List_ops['::'], - {ctor: '_Tuple2', _0: key, _1: value}, - list); - }), - _elm_lang$core$Native_List.fromArray( - []), - dict); -}; -var _elm_lang$core$Dict$foldl = F3( - function (f, acc, dict) { - foldl: - while (true) { - var _p1 = dict; - if (_p1.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v5 = f, - _v6 = A3( - f, - _p1._1, - _p1._2, - A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), - _v7 = _p1._4; - f = _v5; - acc = _v6; - dict = _v7; - continue foldl; - } - } - }); -var _elm_lang$core$Dict$merge = F6( - function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { - var stepState = F3( - function (rKey, rValue, _p2) { - stepState: - while (true) { - var _p3 = _p2; - var _p9 = _p3._1; - var _p8 = _p3._0; - var _p4 = _p8; - if (_p4.ctor === '[]') { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - var _p7 = _p4._1; - var _p6 = _p4._0._1; - var _p5 = _p4._0._0; - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { - var _v10 = rKey, - _v11 = rValue, - _v12 = { - ctor: '_Tuple2', - _0: _p7, - _1: A3(leftStep, _p5, _p6, _p9) - }; - rKey = _v10; - rValue = _v11; - _p2 = _v12; - continue stepState; - } else { - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - return { - ctor: '_Tuple2', - _0: _p7, - _1: A4(bothStep, _p5, _p6, rValue, _p9) - }; - } - } - } - } - }); - var _p10 = A3( - _elm_lang$core$Dict$foldl, - stepState, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$toList(leftDict), - _1: initialResult - }, - rightDict); - var leftovers = _p10._0; - var intermediateResult = _p10._1; - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p11, result) { - var _p12 = _p11; - return A3(leftStep, _p12._0, _p12._1, result); - }), - intermediateResult, - leftovers); - }); -var _elm_lang$core$Dict$reportRemBug = F4( - function (msg, c, lgot, rgot) { - return _elm_lang$core$Native_Debug.crash( - _elm_lang$core$String$concat( - _elm_lang$core$Native_List.fromArray( - [ - 'Internal red-black tree invariant violated, expected ', - msg, - ' and got ', - _elm_lang$core$Basics$toString(c), - '/', - lgot, - '/', - rgot, - '\nPlease report this bug to ' - ]))); - }); -var _elm_lang$core$Dict$isBBlack = function (dict) { - var _p13 = dict; - _v14_2: - do { - if (_p13.ctor === 'RBNode_elm_builtin') { - if (_p13._0.ctor === 'BBlack') { - return true; - } else { - break _v14_2; - } - } else { - if (_p13._0.ctor === 'LBBlack') { - return true; - } else { - break _v14_2; - } - } - } while(false); - return false; -}; -var _elm_lang$core$Dict$sizeHelp = F2( - function (n, dict) { - sizeHelp: - while (true) { - var _p14 = dict; - if (_p14.ctor === 'RBEmpty_elm_builtin') { - return n; - } else { - var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), - _v17 = _p14._3; - n = _v16; - dict = _v17; - continue sizeHelp; - } - } - }); -var _elm_lang$core$Dict$size = function (dict) { - return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); -}; -var _elm_lang$core$Dict$get = F2( - function (targetKey, dict) { - get: - while (true) { - var _p15 = dict; - if (_p15.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Maybe$Nothing; - } else { - var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); - switch (_p16.ctor) { - case 'LT': - var _v20 = targetKey, - _v21 = _p15._3; - targetKey = _v20; - dict = _v21; - continue get; - case 'EQ': - return _elm_lang$core$Maybe$Just(_p15._2); - default: - var _v22 = targetKey, - _v23 = _p15._4; - targetKey = _v22; - dict = _v23; - continue get; - } - } - } - }); -var _elm_lang$core$Dict$member = F2( - function (key, dict) { - var _p17 = A2(_elm_lang$core$Dict$get, key, dict); - if (_p17.ctor === 'Just') { - return true; - } else { - return false; - } - }); -var _elm_lang$core$Dict$maxWithDefault = F3( - function (k, v, r) { - maxWithDefault: - while (true) { - var _p18 = r; - if (_p18.ctor === 'RBEmpty_elm_builtin') { - return {ctor: '_Tuple2', _0: k, _1: v}; - } else { - var _v26 = _p18._1, - _v27 = _p18._2, - _v28 = _p18._4; - k = _v26; - v = _v27; - r = _v28; - continue maxWithDefault; - } - } - }); -var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; -var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; -var _elm_lang$core$Dict$Black = {ctor: 'Black'}; -var _elm_lang$core$Dict$blackish = function (t) { - var _p19 = t; - if (_p19.ctor === 'RBNode_elm_builtin') { - var _p20 = _p19._0; - return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); - } else { - return true; - } -}; -var _elm_lang$core$Dict$Red = {ctor: 'Red'}; -var _elm_lang$core$Dict$moreBlack = function (color) { - var _p21 = color; - switch (_p21.ctor) { - case 'Black': - return _elm_lang$core$Dict$BBlack; - case 'Red': - return _elm_lang$core$Dict$Black; - case 'NBlack': - return _elm_lang$core$Dict$Red; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); - } -}; -var _elm_lang$core$Dict$lessBlack = function (color) { - var _p22 = color; - switch (_p22.ctor) { - case 'BBlack': - return _elm_lang$core$Dict$Black; - case 'Black': - return _elm_lang$core$Dict$Red; - case 'Red': - return _elm_lang$core$Dict$NBlack; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); - } -}; -var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; -var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; -var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { - return {ctor: 'RBEmpty_elm_builtin', _0: a}; -}; -var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); -var _elm_lang$core$Dict$isEmpty = function (dict) { - return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); -}; -var _elm_lang$core$Dict$RBNode_elm_builtin = F5( - function (a, b, c, d, e) { - return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; - }); -var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { - var _p23 = dict; - if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); - } else { - return dict; - } -}; -var _elm_lang$core$Dict$lessBlackTree = function (dict) { - var _p24 = dict; - if (_p24.ctor === 'RBNode_elm_builtin') { - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(_p24._0), - _p24._1, - _p24._2, - _p24._3, - _p24._4); - } else { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } -}; -var _elm_lang$core$Dict$balancedTree = 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( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(col), - yk, - yv, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; -}; -var _elm_lang$core$Dict$blacken = function (t) { - var _p25 = t; - if (_p25.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); - } -}; -var _elm_lang$core$Dict$redden = function (t) { - var _p26 = t; - if (_p26.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); - } -}; -var _elm_lang$core$Dict$balanceHelp = function (tree) { - var _p27 = tree; - _v36_6: - do { - _v36_5: - do { - _v36_4: - do { - _v36_3: - do { - _v36_2: - do { - _v36_1: - do { - _v36_0: - do { - if (_p27.ctor === 'RBNode_elm_builtin') { - if (_p27._3.ctor === 'RBNode_elm_builtin') { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._3._0.ctor) { - case 'Red': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - } - } - case 'NBlack': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - } - } - default: - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - } - case 'NBlack': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } - case 'NBlack': - if (_p27._0.ctor === 'BBlack') { - if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - default: - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - default: - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - switch (_p27._3._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._4._3._1, - _p27._4._3._2, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._4._1, - _p27._4._2, - _p27._4._3._4, - _elm_lang$core$Dict$redden(_p27._4._4))); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._3._4._1, - _p27._3._4._2, - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._3._1, - _p27._3._2, - _elm_lang$core$Dict$redden(_p27._3._3), - _p27._3._4._3), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); - } while(false); - return tree; -}; -var _elm_lang$core$Dict$balance = F5( - function (c, k, v, l, r) { - var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; - }); -var _elm_lang$core$Dict$bubble = F5( - function (c, k, v, l, r) { - return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$moreBlack(c), - k, - v, - _elm_lang$core$Dict$lessBlackTree(l), - _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - }); -var _elm_lang$core$Dict$removeMax = F5( - function (c, k, v, l, r) { - var _p28 = r; - if (_p28.ctor === 'RBEmpty_elm_builtin') { - return A3(_elm_lang$core$Dict$rem, c, l, r); - } else { - return A5( - _elm_lang$core$Dict$bubble, - c, - k, - v, - l, - A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); - } - }); -var _elm_lang$core$Dict$rem = F3( - function (c, l, r) { - var _p29 = {ctor: '_Tuple2', _0: l, _1: r}; - if (_p29._0.ctor === 'RBEmpty_elm_builtin') { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p30 = c; - switch (_p30.ctor) { - case 'Red': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - case 'Black': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); - default: - return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); - } - } else { - var _p33 = _p29._1._0; - var _p32 = _p29._0._0; - var _p31 = {ctor: '_Tuple3', _0: c, _1: _p32, _2: _p33}; - if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/LBlack/Red', - c, - _elm_lang$core$Basics$toString(_p32), - _elm_lang$core$Basics$toString(_p33)); - } - } - } else { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p36 = _p29._1._0; - var _p35 = _p29._0._0; - var _p34 = {ctor: '_Tuple3', _0: c, _1: _p35, _2: _p36}; - if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/Red/LBlack', - c, - _elm_lang$core$Basics$toString(_p35), - _elm_lang$core$Basics$toString(_p36)); - } - } else { - var _p40 = _p29._0._2; - var _p39 = _p29._0._4; - var _p38 = _p29._0._1; - var l$ = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); - var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); - var k = _p37._0; - var v = _p37._1; - return A5(_elm_lang$core$Dict$bubble, c, k, v, l$, r); - } - } - }); -var _elm_lang$core$Dict$map = F2( - function (f, dict) { - var _p41 = dict; - if (_p41.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - var _p42 = _p41._1; - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _p41._0, - _p42, - A2(f, _p42, _p41._2), - A2(_elm_lang$core$Dict$map, f, _p41._3), - A2(_elm_lang$core$Dict$map, f, _p41._4)); - } - }); -var _elm_lang$core$Dict$Same = {ctor: 'Same'}; -var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; -var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; -var _elm_lang$core$Dict$update = F3( - function (k, alter, dict) { - var up = function (dict) { - var _p43 = dict; - if (_p43.ctor === 'RBEmpty_elm_builtin') { - var _p44 = alter(_elm_lang$core$Maybe$Nothing); - if (_p44.ctor === 'Nothing') { - return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) - }; - } - } else { - var _p55 = _p43._2; - var _p54 = _p43._4; - var _p53 = _p43._3; - var _p52 = _p43._1; - var _p51 = _p43._0; - var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); - switch (_p45.ctor) { - case 'EQ': - var _p46 = alter( - _elm_lang$core$Maybe$Just(_p55)); - if (_p46.ctor === 'Nothing') { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) - }; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) - }; - } - case 'LT': - var _p47 = up(_p53); - var flag = _p47._0; - var newLeft = _p47._1; - var _p48 = flag; - switch (_p48.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) - }; - } - default: - var _p49 = up(_p54); - var flag = _p49._0; - var newRight = _p49._1; - var _p50 = flag; - switch (_p50.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) - }; - } - } - } - }; - var _p56 = up(dict); - var flag = _p56._0; - var updatedDict = _p56._1; - var _p57 = flag; - switch (_p57.ctor) { - case 'Same': - return updatedDict; - case 'Insert': - return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); - default: - return _elm_lang$core$Dict$blacken(updatedDict); - } - }); -var _elm_lang$core$Dict$insert = F3( - function (key, value, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always( - _elm_lang$core$Maybe$Just(value)), - dict); - }); -var _elm_lang$core$Dict$singleton = F2( - function (key, value) { - return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); - }); -var _elm_lang$core$Dict$union = F2( - function (t1, t2) { - return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); - }); -var _elm_lang$core$Dict$filter = F2( - function (predicate, dictionary) { - var add = F3( - function (key, value, dict) { - return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; - }); - return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); - }); -var _elm_lang$core$Dict$intersect = F2( - function (t1, t2) { - return A2( - _elm_lang$core$Dict$filter, - F2( - function (k, _p58) { - return A2(_elm_lang$core$Dict$member, k, t2); - }), - t1); - }); -var _elm_lang$core$Dict$partition = F2( - function (predicate, dict) { - var add = F3( - function (key, value, _p59) { - var _p60 = _p59; - var _p62 = _p60._1; - var _p61 = _p60._0; - return A2(predicate, key, value) ? { - ctor: '_Tuple2', - _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), - _1: _p62 - } : { - ctor: '_Tuple2', - _0: _p61, - _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) - }; - }); - return A3( - _elm_lang$core$Dict$foldl, - add, - {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, - dict); - }); -var _elm_lang$core$Dict$fromList = function (assocs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p63, dict) { - var _p64 = _p63; - return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); - }), - _elm_lang$core$Dict$empty, - assocs); -}; -var _elm_lang$core$Dict$remove = F2( - function (key, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), - dict); - }); -var _elm_lang$core$Dict$diff = F2( - function (t1, t2) { - return A3( - _elm_lang$core$Dict$foldl, - F3( - function (k, v, t) { - return A2(_elm_lang$core$Dict$remove, k, t); - }), - t1, - t2); - }); - -//import Native.Scheduler // - -var _elm_lang$core$Native_Time = function() { - -var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) -{ - callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); -}); - -function setInterval_(interval, task) -{ - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) - { - var id = setInterval(function() { - _elm_lang$core$Native_Scheduler.rawSpawn(task); - }, interval); - - return function() { clearInterval(id); }; - }); -} - -return { - now: now, - setInterval_: F2(setInterval_) -}; - -}(); -var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; -var _elm_lang$core$Time$spawnHelp = F3( - function (router, intervals, processes) { - var _p0 = intervals; - if (_p0.ctor === '[]') { - return _elm_lang$core$Task$succeed(processes); - } else { - var _p1 = _p0._0; - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Time$setInterval, - _p1, - A2(_elm_lang$core$Platform$sendToSelf, router, _p1))), - function (id) { - return A3( - _elm_lang$core$Time$spawnHelp, - router, - _p0._1, - A3(_elm_lang$core$Dict$insert, _p1, id, processes)); - }); - } - }); -var _elm_lang$core$Time$addMySub = F2( - function (_p2, state) { - var _p3 = _p2; - var _p6 = _p3._1; - var _p5 = _p3._0; - var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); - if (_p4.ctor === 'Nothing') { - return A3( - _elm_lang$core$Dict$insert, - _p5, - _elm_lang$core$Native_List.fromArray( - [_p6]), - state); - } else { - return A3( - _elm_lang$core$Dict$insert, - _p5, - A2(_elm_lang$core$List_ops['::'], _p6, _p4._0), - state); - } - }); -var _elm_lang$core$Time$inMilliseconds = function (t) { - return t; -}; -var _elm_lang$core$Time$millisecond = 1; -var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; -var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; -var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; -var _elm_lang$core$Time$inHours = function (t) { - return t / _elm_lang$core$Time$hour; -}; -var _elm_lang$core$Time$inMinutes = function (t) { - return t / _elm_lang$core$Time$minute; -}; -var _elm_lang$core$Time$inSeconds = function (t) { - return t / _elm_lang$core$Time$second; -}; -var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; -var _elm_lang$core$Time$onSelfMsg = F3( - function (router, interval, state) { - var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); - if (_p7.ctor === 'Nothing') { - return _elm_lang$core$Task$succeed(state); - } else { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Time$now, - function (time) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - function (tagger) { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - tagger(time)); - }, - _p7._0)), - function (_p8) { - return _elm_lang$core$Task$succeed(state); - }); - }); - } - }); -var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); -var _elm_lang$core$Time$State = F2( - function (a, b) { - return {taggers: a, processes: b}; - }); -var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); -var _elm_lang$core$Time$onEffects = F3( - function (router, subs, _p9) { - var _p10 = _p9; - var rightStep = F3( - function (_p12, id, _p11) { - var _p13 = _p11; - return { - ctor: '_Tuple3', - _0: _p13._0, - _1: _p13._1, - _2: A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Native_Scheduler.kill(id), - function (_p14) { - return _p13._2; - }) - }; - }); - var bothStep = F4( - function (interval, taggers, id, _p15) { - var _p16 = _p15; - return { - ctor: '_Tuple3', - _0: _p16._0, - _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), - _2: _p16._2 - }; - }); - var leftStep = F3( - function (interval, taggers, _p17) { - var _p18 = _p17; - return { - ctor: '_Tuple3', - _0: A2(_elm_lang$core$List_ops['::'], interval, _p18._0), - _1: _p18._1, - _2: _p18._2 - }; - }); - var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); - var _p19 = A6( - _elm_lang$core$Dict$merge, - leftStep, - bothStep, - rightStep, - newTaggers, - _p10.processes, - { - ctor: '_Tuple3', - _0: _elm_lang$core$Native_List.fromArray( - []), - _1: _elm_lang$core$Dict$empty, - _2: _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}) - }); - var spawnList = _p19._0; - var existingDict = _p19._1; - var killTask = _p19._2; - return A2( - _elm_lang$core$Task$andThen, - killTask, - function (_p20) { - return A2( - _elm_lang$core$Task$andThen, - A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict), - function (newProcesses) { - return _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); - }); - }); - }); -var _elm_lang$core$Time$Every = F2( - function (a, b) { - return {ctor: 'Every', _0: a, _1: b}; - }); -var _elm_lang$core$Time$every = F2( - function (interval, tagger) { - return _elm_lang$core$Time$subscription( - A2(_elm_lang$core$Time$Every, interval, tagger)); - }); -var _elm_lang$core$Time$subMap = F2( - function (f, _p21) { - var _p22 = _p21; - return A2( - _elm_lang$core$Time$Every, - _p22._0, - function (_p23) { - return f( - _p22._1(_p23)); - }); - }); -_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; - -var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; -var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; -var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; - -var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.rAF; -var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame'); -var _elm_lang$animation_frame$AnimationFrame$State = F3( - function (a, b, c) { - return {subs: a, request: b, oldTime: c}; - }); -var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _elm_lang$core$Native_List.fromArray( - []), - _elm_lang$core$Maybe$Nothing, - 0)); -var _elm_lang$animation_frame$AnimationFrame$onEffects = F3( - function (router, subs, _p0) { - var _p1 = _p0; - var _p5 = _p1.request; - var _p4 = _p1.oldTime; - var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs}; - if (_p2._0.ctor === 'Nothing') { - if (_p2._1.ctor === '[]') { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _elm_lang$core$Native_List.fromArray( - []), - _elm_lang$core$Maybe$Nothing, - _p4)); - } else { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$animation_frame$AnimationFrame$rAF, - _elm_lang$core$Platform$sendToSelf(router))), - function (pid) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Time$now, - function (time) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - subs, - _elm_lang$core$Maybe$Just(pid), - time)); - }); - }); - } - } else { - if (_p2._1.ctor === '[]') { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$kill(_p2._0._0), - function (_p3) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _elm_lang$core$Native_List.fromArray( - []), - _elm_lang$core$Maybe$Nothing, - _p4)); - }); - } else { - return _elm_lang$core$Task$succeed( - A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4)); - } - } - }); -var _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3( - function (router, newTime, _p6) { - var _p7 = _p6; - var _p10 = _p7.subs; - var diff = newTime - _p7.oldTime; - var send = function (sub) { - var _p8 = sub; - if (_p8.ctor === 'Time') { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - _p8._0(newTime)); - } else { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - _p8._0(diff)); - } - }; - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$animation_frame$AnimationFrame$rAF, - _elm_lang$core$Platform$sendToSelf(router))), - function (pid) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Task$sequence( - A2(_elm_lang$core$List$map, send, _p10)), - function (_p9) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _p10, - _elm_lang$core$Maybe$Just(pid), - newTime)); - }); - }); - }); -var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) { - return {ctor: 'Diff', _0: a}; -}; -var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) { - return _elm_lang$animation_frame$AnimationFrame$subscription( - _elm_lang$animation_frame$AnimationFrame$Diff(tagger)); -}; -var _elm_lang$animation_frame$AnimationFrame$Time = function (a) { - return {ctor: 'Time', _0: a}; -}; -var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) { - return _elm_lang$animation_frame$AnimationFrame$subscription( - _elm_lang$animation_frame$AnimationFrame$Time(tagger)); -}; -var _elm_lang$animation_frame$AnimationFrame$subMap = F2( - function (func, sub) { - var _p11 = sub; - if (_p11.ctor === 'Time') { - return _elm_lang$animation_frame$AnimationFrame$Time( - function (_p12) { - return func( - _p11._0(_p12)); - }); - } else { - return _elm_lang$animation_frame$AnimationFrame$Diff( - function (_p13) { - return func( - _p11._0(_p13)); - }); - } - }); -_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap}; - -//import Native.List // - -var _elm_lang$core$Native_Array = function() { - -// 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: [] -}; - - -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.ctor === '[]') - { - return empty; - } - - // Allocate M sized blocks (table) and write list elements to it. - var table = new Array(M); - var nodes = []; - 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: [], - lengths: [] - }; - 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: [], - lengths: [] - }; - } -} - -// 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_(_elm_lang$core$Native_List.Nil, a); -} - -function toList_(list, a) -{ - for (var i = a.table.length - 1; i >= 0; i--) - { - list = - a.height === 0 - ? _elm_lang$core$Native_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 ? from : from + 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 - }; -} - -return { - 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 -}; - -}(); -var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; -var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; -var _elm_lang$core$Array$isEmpty = function (array) { - return _elm_lang$core$Native_Utils.eq( - _elm_lang$core$Array$length(array), - 0); -}; -var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; -var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; -var _elm_lang$core$Array$get = F2( - function (i, array) { - return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( - i, - _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( - A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; - }); -var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; -var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; -var _elm_lang$core$Array$filter = F2( - function (isOkay, arr) { - var update = F2( - function (x, xs) { - return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; - }); - return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); - }); -var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; -var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; -var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; -var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; -var _elm_lang$core$Array$toIndexedList = function (array) { - return A3( - _elm_lang$core$List$map2, - F2( - function (v0, v1) { - return {ctor: '_Tuple2', _0: v0, _1: v1}; - }), - _elm_lang$core$Native_List.range( - 0, - _elm_lang$core$Native_Array.length(array) - 1), - _elm_lang$core$Native_Array.toList(array)); -}; -var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; -var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; -var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; -var _elm_lang$core$Array$repeat = F2( - function (n, e) { - return A2( - _elm_lang$core$Array$initialize, - n, - _elm_lang$core$Basics$always(e)); - }); -var _elm_lang$core$Array$Array = {ctor: 'Array'}; - -//import Maybe, Native.Array, Native.List, Native.Utils, Result // - -var _elm_lang$core$Native_Json = function() { - - -// CORE DECODERS - -function succeed(msg) -{ - return { - ctor: '', - tag: 'succeed', - msg: msg - }; -} - -function fail(msg) -{ - return { - ctor: '', - tag: 'fail', - msg: msg - }; -} - -function decodePrimitive(tag) -{ - return { - ctor: '', - tag: tag - }; -} - -function decodeContainer(tag, decoder) -{ - return { - ctor: '', - tag: tag, - decoder: decoder - }; -} - -function decodeNull(value) -{ - return { - ctor: '', - tag: 'null', - value: value - }; -} - -function decodeField(field, decoder) -{ - return { - ctor: '', - tag: 'field', - field: field, - decoder: decoder - }; -} - -function decodeKeyValuePairs(decoder) -{ - return { - ctor: '', - tag: 'key-value', - decoder: decoder - }; -} - -function decodeObject(f, decoders) -{ - return { - ctor: '', - tag: 'map-many', - func: f, - decoders: decoders - }; -} - -function decodeTuple(f, decoders) -{ - return { - ctor: '', - tag: 'tuple', - func: f, - decoders: decoders - }; -} - -function andThen(decoder, callback) -{ - return { - ctor: '', - tag: 'andThen', - decoder: decoder, - callback: callback - }; -} - -function customAndThen(decoder, callback) -{ - return { - ctor: '', - tag: 'customAndThen', - decoder: decoder, - callback: callback - }; -} - -function oneOf(decoders) -{ - return { - ctor: '', - tag: 'oneOf', - decoders: decoders - }; -} - - -// DECODING OBJECTS - -function decodeObject1(f, d1) -{ - return decodeObject(f, [d1]); -} - -function decodeObject2(f, d1, d2) -{ - return decodeObject(f, [d1, d2]); -} - -function decodeObject3(f, d1, d2, d3) -{ - return decodeObject(f, [d1, d2, d3]); -} - -function decodeObject4(f, d1, d2, d3, d4) -{ - return decodeObject(f, [d1, d2, d3, d4]); -} - -function decodeObject5(f, d1, d2, d3, d4, d5) -{ - return decodeObject(f, [d1, d2, d3, d4, d5]); -} - -function decodeObject6(f, d1, d2, d3, d4, d5, d6) -{ - return decodeObject(f, [d1, d2, d3, d4, d5, d6]); -} - -function decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) -{ - return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7]); -} - -function decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) -{ - return decodeObject(f, [d1, d2, d3, d4, d5, d6, d7, d8]); -} - - -// DECODING TUPLES - -function decodeTuple1(f, d1) -{ - return decodeTuple(f, [d1]); -} - -function decodeTuple2(f, d1, d2) -{ - return decodeTuple(f, [d1, d2]); -} - -function decodeTuple3(f, d1, d2, d3) -{ - return decodeTuple(f, [d1, d2, d3]); -} - -function decodeTuple4(f, d1, d2, d3, d4) -{ - return decodeTuple(f, [d1, d2, d3, d4]); -} - -function decodeTuple5(f, d1, d2, d3, d4, d5) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5]); -} - -function decodeTuple6(f, d1, d2, d3, d4, d5, d6) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5, d6]); -} - -function decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7]); -} - -function decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) -{ - return decodeTuple(f, [d1, d2, d3, d4, d5, d6, d7, d8]); -} - - -// DECODE HELPERS - -function ok(value) -{ - return { tag: 'ok', value: value }; -} - -function badPrimitive(type, value) -{ - return { tag: 'primitive', type: type, value: value }; -} - -function badIndex(index, nestedProblems) -{ - return { tag: 'index', index: index, rest: nestedProblems }; -} - -function badField(field, nestedProblems) -{ - return { tag: 'field', field: field, rest: nestedProblems }; -} - -function badOneOf(problems) -{ - return { tag: 'oneOf', problems: problems }; -} - -function badCustom(msg) -{ - return { tag: 'custom', msg: msg }; -} - -function bad(msg) -{ - return { tag: 'fail', msg: msg }; -} - -function badToString(problem) -{ - var context = '_'; - while (problem) - { - switch (problem.tag) - { - case 'primitive': - return 'Expecting ' + problem.type - + (context === '_' ? '' : ' at ' + context) - + ' but instead got: ' + jsToString(problem.value); - - case 'index': - context += '[' + problem.index + ']'; - problem = problem.rest; - break; - - case 'field': - context += '.' + problem.field; - problem = problem.rest; - break; - - case 'oneOf': - var problems = problem.problems; - for (var i = 0; i < problems.length; i++) - { - problems[i] = badToString(problems[i]); - } - return 'I ran into the following problems' - + (context === '_' ? '' : ' at ' + context) - + ':\n\n' + problems.join('\n'); - - case 'custom': - return 'A `customDecoder` failed' - + (context === '_' ? '' : ' at ' + context) - + ' with the message: ' + problem.msg; - - case 'fail': - return 'I ran into a `fail` decoder' - + (context === '_' ? '' : ' at ' + context) - + ': ' + problem.msg; - } - } -} - -function jsToString(value) -{ - return value === undefined - ? 'undefined' - : JSON.stringify(value); -} - - -// DECODE - -function runOnString(decoder, string) -{ - var json; - try - { - json = JSON.parse(string); - } - catch (e) - { - return _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message); - } - return run(decoder, json); -} - -function run(decoder, value) -{ - var result = runHelp(decoder, value); - return (result.tag === 'ok') - ? _elm_lang$core$Result$Ok(result.value) - : _elm_lang$core$Result$Err(badToString(result)); -} - -function runHelp(decoder, value) -{ - switch (decoder.tag) - { - case 'bool': - return (typeof value === 'boolean') - ? ok(value) - : badPrimitive('a Bool', value); - - case 'int': - if (typeof value !== 'number') { - return badPrimitive('an Int', value); - } - - if (-2147483647 < value && value < 2147483647 && (value | 0) === value) { - return ok(value); - } - - if (isFinite(value) && !(value % 1)) { - return ok(value); - } - - return badPrimitive('an Int', value); - - case 'float': - return (typeof value === 'number') - ? ok(value) - : badPrimitive('a Float', value); - - case 'string': - return (typeof value === 'string') - ? ok(value) - : (value instanceof String) - ? ok(value + '') - : badPrimitive('a String', value); - - case 'null': - return (value === null) - ? ok(decoder.value) - : badPrimitive('null', value); - - case 'value': - return ok(value); - - case 'list': - if (!(value instanceof Array)) - { - return badPrimitive('a List', value); - } - - var list = _elm_lang$core$Native_List.Nil; - for (var i = value.length; i--; ) - { - var result = runHelp(decoder.decoder, value[i]); - if (result.tag !== 'ok') - { - return badIndex(i, result) - } - list = _elm_lang$core$Native_List.Cons(result.value, list); - } - return ok(list); - - case 'array': - if (!(value instanceof Array)) - { - return badPrimitive('an Array', value); - } - - var len = value.length; - var array = new Array(len); - for (var i = len; i--; ) - { - var result = runHelp(decoder.decoder, value[i]); - if (result.tag !== 'ok') - { - return badIndex(i, result); - } - array[i] = result.value; - } - return ok(_elm_lang$core$Native_Array.fromJSArray(array)); - - case 'maybe': - var result = runHelp(decoder.decoder, value); - return (result.tag === 'ok') - ? ok(_elm_lang$core$Maybe$Just(result.value)) - : ok(_elm_lang$core$Maybe$Nothing); - - case 'field': - var field = decoder.field; - if (typeof value !== 'object' || value === null || !(field in value)) - { - return badPrimitive('an object with a field named `' + field + '`', value); - } - - var result = runHelp(decoder.decoder, value[field]); - return (result.tag === 'ok') - ? result - : badField(field, result); - - case 'key-value': - if (typeof value !== 'object' || value === null || value instanceof Array) - { - return badPrimitive('an object', value); - } - - var keyValuePairs = _elm_lang$core$Native_List.Nil; - for (var key in value) - { - var result = runHelp(decoder.decoder, value[key]); - if (result.tag !== 'ok') - { - return badField(key, result); - } - var pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value); - keyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs); - } - return ok(keyValuePairs); - - case 'map-many': - var answer = decoder.func; - var decoders = decoder.decoders; - for (var i = 0; i < decoders.length; i++) - { - var result = runHelp(decoders[i], value); - if (result.tag !== 'ok') - { - return result; - } - answer = answer(result.value); - } - return ok(answer); - - case 'tuple': - var decoders = decoder.decoders; - var len = decoders.length; - - if ( !(value instanceof Array) || value.length !== len ) - { - return badPrimitive('a Tuple with ' + len + ' entries', value); - } - - var answer = decoder.func; - for (var i = 0; i < len; i++) - { - var result = runHelp(decoders[i], value[i]); - if (result.tag !== 'ok') - { - return badIndex(i, result); - } - answer = answer(result.value); - } - return ok(answer); - - case 'customAndThen': - var result = runHelp(decoder.decoder, value); - if (result.tag !== 'ok') - { - return result; - } - var realResult = decoder.callback(result.value); - if (realResult.ctor === 'Err') - { - return badCustom(realResult._0); - } - return ok(realResult._0); - - case 'andThen': - var result = runHelp(decoder.decoder, value); - return (result.tag !== 'ok') - ? result - : runHelp(decoder.callback(result.value), value); - - case 'oneOf': - var errors = []; - var temp = decoder.decoders; - while (temp.ctor !== '[]') - { - var result = runHelp(temp._0, value); - - if (result.tag === 'ok') - { - return result; - } - - errors.push(result); - - temp = temp._1; - } - return badOneOf(errors); - - case 'fail': - return bad(decoder.msg); - - case 'succeed': - return ok(decoder.msg); - } -} - - -// EQUALITY - -function equality(a, b) -{ - if (a === b) - { - return true; - } - - if (a.tag !== b.tag) - { - return false; - } - - switch (a.tag) - { - case 'succeed': - case 'fail': - return a.msg === b.msg; - - case 'bool': - case 'int': - case 'float': - case 'string': - case 'value': - return true; - - case 'null': - return a.value === b.value; - - case 'list': - case 'array': - case 'maybe': - case 'key-value': - return equality(a.decoder, b.decoder); - - case 'field': - return a.field === b.field && equality(a.decoder, b.decoder); - - case 'map-many': - case 'tuple': - if (a.func !== b.func) - { - return false; - } - return listEquality(a.decoders, b.decoders); - - case 'andThen': - case 'customAndThen': - return a.callback === b.callback && equality(a.decoder, b.decoder); - - case 'oneOf': - return listEquality(a.decoders, b.decoders); - } -} - -function listEquality(aDecoders, bDecoders) -{ - var len = aDecoders.length; - if (len !== bDecoders.length) - { - return false; - } - for (var i = 0; i < len; i++) - { - if (!equality(aDecoders[i], bDecoders[i])) - { - return false; - } - } - return true; -} - - -// ENCODE - -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 { - encode: F2(encode), - runOnString: F2(runOnString), - run: F2(run), - - decodeNull: decodeNull, - decodePrimitive: decodePrimitive, - decodeContainer: F2(decodeContainer), - - 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), - customAndThen: F2(customAndThen), - fail: fail, - succeed: succeed, - oneOf: oneOf, - - identity: identity, - encodeNull: null, - encodeArray: _elm_lang$core$Native_Array.toJSArray, - encodeList: _elm_lang$core$Native_List.toArray, - encodeObject: encodeObject, - - equality: equality -}; - -}(); - -var _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList; -var _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray; -var _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject; -var _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull; -var _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity; -var _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode; -var _elm_lang$core$Json_Encode$Value = {ctor: 'Value'}; - -var _elm_lang$core$Json_Decode$tuple8 = _elm_lang$core$Native_Json.decodeTuple8; -var _elm_lang$core$Json_Decode$tuple7 = _elm_lang$core$Native_Json.decodeTuple7; -var _elm_lang$core$Json_Decode$tuple6 = _elm_lang$core$Native_Json.decodeTuple6; -var _elm_lang$core$Json_Decode$tuple5 = _elm_lang$core$Native_Json.decodeTuple5; -var _elm_lang$core$Json_Decode$tuple4 = _elm_lang$core$Native_Json.decodeTuple4; -var _elm_lang$core$Json_Decode$tuple3 = _elm_lang$core$Native_Json.decodeTuple3; -var _elm_lang$core$Json_Decode$tuple2 = _elm_lang$core$Native_Json.decodeTuple2; -var _elm_lang$core$Json_Decode$tuple1 = _elm_lang$core$Native_Json.decodeTuple1; -var _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed; -var _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail; -var _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen; -var _elm_lang$core$Json_Decode$customDecoder = _elm_lang$core$Native_Json.customAndThen; -var _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run; -var _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value'); -var _elm_lang$core$Json_Decode$maybe = function (decoder) { - return A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder); -}; -var _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull; -var _elm_lang$core$Json_Decode$array = function (decoder) { - return A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder); -}; -var _elm_lang$core$Json_Decode$list = function (decoder) { - return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder); -}; -var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool'); -var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int'); -var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float'); -var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string'); -var _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf; -var _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs; -var _elm_lang$core$Json_Decode$object8 = _elm_lang$core$Native_Json.decodeObject8; -var _elm_lang$core$Json_Decode$object7 = _elm_lang$core$Native_Json.decodeObject7; -var _elm_lang$core$Json_Decode$object6 = _elm_lang$core$Native_Json.decodeObject6; -var _elm_lang$core$Json_Decode$object5 = _elm_lang$core$Native_Json.decodeObject5; -var _elm_lang$core$Json_Decode$object4 = _elm_lang$core$Native_Json.decodeObject4; -var _elm_lang$core$Json_Decode$object3 = _elm_lang$core$Native_Json.decodeObject3; -var _elm_lang$core$Json_Decode$object2 = _elm_lang$core$Native_Json.decodeObject2; -var _elm_lang$core$Json_Decode$object1 = _elm_lang$core$Native_Json.decodeObject1; -var _elm_lang$core$Json_Decode_ops = _elm_lang$core$Json_Decode_ops || {}; -_elm_lang$core$Json_Decode_ops[':='] = _elm_lang$core$Native_Json.decodeField; -var _elm_lang$core$Json_Decode$at = F2( - function (fields, decoder) { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, y) { - return A2(_elm_lang$core$Json_Decode_ops[':='], x, y); - }), - decoder, - fields); - }); -var _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString; -var _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.decodeObject1; -var _elm_lang$core$Json_Decode$dict = function (decoder) { - return A2( - _elm_lang$core$Json_Decode$map, - _elm_lang$core$Dict$fromList, - _elm_lang$core$Json_Decode$keyValuePairs(decoder)); -}; -var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'}; - -var _elm_lang$core$Set$foldr = F3( - function (f, b, _p0) { - var _p1 = _p0; - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (k, _p2, b) { - return A2(f, k, b); - }), - b, - _p1._0); - }); -var _elm_lang$core$Set$foldl = F3( - function (f, b, _p3) { - var _p4 = _p3; - return A3( - _elm_lang$core$Dict$foldl, - F3( - function (k, _p5, b) { - return A2(f, k, b); - }), - b, - _p4._0); - }); -var _elm_lang$core$Set$toList = function (_p6) { - var _p7 = _p6; - return _elm_lang$core$Dict$keys(_p7._0); -}; -var _elm_lang$core$Set$size = function (_p8) { - var _p9 = _p8; - return _elm_lang$core$Dict$size(_p9._0); -}; -var _elm_lang$core$Set$member = F2( - function (k, _p10) { - var _p11 = _p10; - return A2(_elm_lang$core$Dict$member, k, _p11._0); - }); -var _elm_lang$core$Set$isEmpty = function (_p12) { - var _p13 = _p12; - return _elm_lang$core$Dict$isEmpty(_p13._0); -}; -var _elm_lang$core$Set$Set_elm_builtin = function (a) { - return {ctor: 'Set_elm_builtin', _0: a}; -}; -var _elm_lang$core$Set$empty = _elm_lang$core$Set$Set_elm_builtin(_elm_lang$core$Dict$empty); -var _elm_lang$core$Set$singleton = function (k) { - return _elm_lang$core$Set$Set_elm_builtin( - A2( - _elm_lang$core$Dict$singleton, - k, - {ctor: '_Tuple0'})); -}; -var _elm_lang$core$Set$insert = F2( - function (k, _p14) { - var _p15 = _p14; - return _elm_lang$core$Set$Set_elm_builtin( - A3( - _elm_lang$core$Dict$insert, - k, - {ctor: '_Tuple0'}, - _p15._0)); - }); -var _elm_lang$core$Set$fromList = function (xs) { - return A3(_elm_lang$core$List$foldl, _elm_lang$core$Set$insert, _elm_lang$core$Set$empty, xs); -}; -var _elm_lang$core$Set$map = F2( - function (f, s) { - return _elm_lang$core$Set$fromList( - A2( - _elm_lang$core$List$map, - f, - _elm_lang$core$Set$toList(s))); - }); -var _elm_lang$core$Set$remove = F2( - function (k, _p16) { - var _p17 = _p16; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$remove, k, _p17._0)); - }); -var _elm_lang$core$Set$union = F2( - function (_p19, _p18) { - var _p20 = _p19; - var _p21 = _p18; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$union, _p20._0, _p21._0)); - }); -var _elm_lang$core$Set$intersect = F2( - function (_p23, _p22) { - var _p24 = _p23; - var _p25 = _p22; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$intersect, _p24._0, _p25._0)); - }); -var _elm_lang$core$Set$diff = F2( - function (_p27, _p26) { - var _p28 = _p27; - var _p29 = _p26; - return _elm_lang$core$Set$Set_elm_builtin( - A2(_elm_lang$core$Dict$diff, _p28._0, _p29._0)); - }); -var _elm_lang$core$Set$filter = F2( - function (p, _p30) { - var _p31 = _p30; - return _elm_lang$core$Set$Set_elm_builtin( - A2( - _elm_lang$core$Dict$filter, - F2( - function (k, _p32) { - return p(k); - }), - _p31._0)); - }); -var _elm_lang$core$Set$partition = F2( - function (p, _p33) { - var _p34 = _p33; - var _p35 = A2( - _elm_lang$core$Dict$partition, - F2( - function (k, _p36) { - return p(k); - }), - _p34._0); - var p1 = _p35._0; - var p2 = _p35._1; - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Set$Set_elm_builtin(p1), - _1: _elm_lang$core$Set$Set_elm_builtin(p2) - }; - }); - -var _elm_lang$dom$Native_Dom = function() { - -function on(node) -{ - return function(eventName, decoder, toTask) - { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - - function performTask(event) - { - var result = A2(_elm_lang$core$Json_Decode$decodeValue, decoder, event); - if (result.ctor === 'Ok') - { - _elm_lang$core$Native_Scheduler.rawSpawn(toTask(result._0)); - } - } - - node.addEventListener(eventName, performTask); - - return function() - { - node.removeEventListener(eventName, performTask); - }; - }); - }; -} - -var rAF = typeof requestAnimationFrame !== 'undefined' - ? requestAnimationFrame - : function(callback) { callback(); }; - -function withNode(id, doStuff) -{ - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) - { - rAF(function() - { - var node = document.getElementById(id); - if (node === null) - { - callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NotFound', _0: id })); - return; - } - callback(_elm_lang$core$Native_Scheduler.succeed(doStuff(node))); - }); - }); -} - - -// FOCUS - -function focus(id) -{ - return withNode(id, function(node) { - node.focus(); - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function blur(id) -{ - return withNode(id, function(node) { - node.blur(); - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - - -// SCROLLING - -function getScrollTop(id) -{ - return withNode(id, function(node) { - return node.scrollTop; - }); -} - -function setScrollTop(id, desiredScrollTop) -{ - return withNode(id, function(node) { - node.scrollTop = desiredScrollTop; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function toBottom(id) -{ - return withNode(id, function(node) { - node.scrollTop = node.scrollHeight; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function getScrollLeft(id) -{ - return withNode(id, function(node) { - return node.scrollLeft; - }); -} - -function setScrollLeft(id, desiredScrollLeft) -{ - return withNode(id, function(node) { - node.scrollLeft = desiredScrollLeft; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - -function toRight(id) -{ - return withNode(id, function(node) { - node.scrollLeft = node.scrollWidth; - return _elm_lang$core$Native_Utils.Tuple0; - }); -} - - -// SIZE - -function width(options, id) -{ - return withNode(id, function(node) { - switch (options.ctor) - { - case 'Content': - return node.scrollWidth; - case 'VisibleContent': - return node.clientWidth; - case 'VisibleContentWithBorders': - return node.offsetWidth; - case 'VisibleContentWithBordersAndMargins': - var rect = node.getBoundingClientRect(); - return rect.right - rect.left; - } - }); -} - -function height(options, id) -{ - return withNode(id, function(node) { - switch (options.ctor) - { - case 'Content': - return node.scrollHeight; - case 'VisibleContent': - return node.clientHeight; - case 'VisibleContentWithBorders': - return node.offsetHeight; - case 'VisibleContentWithBordersAndMargins': - var rect = node.getBoundingClientRect(); - return rect.bottom - rect.top; - } - }); -} - -return { - onDocument: F3(on(document)), - onWindow: F3(on(window)), - - focus: focus, - blur: blur, - - getScrollTop: getScrollTop, - setScrollTop: F2(setScrollTop), - getScrollLeft: getScrollLeft, - setScrollLeft: F2(setScrollLeft), - toBottom: toBottom, - toRight: toRight, - - height: F2(height), - width: F2(width) -}; - -}(); - -var _elm_lang$dom$Dom_LowLevel$onWindow = _elm_lang$dom$Native_Dom.onWindow; -var _elm_lang$dom$Dom_LowLevel$onDocument = _elm_lang$dom$Native_Dom.onDocument; - -//import Native.Json // - -var _elm_lang$virtual_dom$Native_VirtualDom = function() { - -var STYLE_KEY = 'STYLE'; -var EVENT_KEY = 'EVENT'; -var ATTR_KEY = 'ATTR'; -var ATTR_NS_KEY = 'ATTR_NS'; - - - -//////////// VIRTUAL DOM NODES //////////// - - -function text(string) -{ - return { - type: 'text', - text: string - }; -} - - -function node(tag) -{ - return F2(function(factList, kidList) { - return nodeHelp(tag, factList, kidList); - }); -} - - -function nodeHelp(tag, factList, kidList) -{ - var organized = organizeFacts(factList); - var namespace = organized.namespace; - var facts = organized.facts; - - var children = []; - var descendantsCount = 0; - while (kidList.ctor !== '[]') - { - var kid = kidList._0; - descendantsCount += (kid.descendantsCount || 0); - children.push(kid); - kidList = kidList._1; - } - descendantsCount += children.length; - - return { - type: 'node', - tag: tag, - facts: facts, - children: children, - namespace: namespace, - descendantsCount: descendantsCount - }; -} - - -function keyedNode(tag, factList, kidList) -{ - var organized = organizeFacts(factList); - var namespace = organized.namespace; - var facts = organized.facts; - - var children = []; - var descendantsCount = 0; - while (kidList.ctor !== '[]') - { - var kid = kidList._0; - descendantsCount += (kid._1.descendantsCount || 0); - children.push(kid); - kidList = kidList._1; - } - descendantsCount += children.length; - - return { - type: 'keyed-node', - tag: tag, - facts: facts, - children: children, - namespace: namespace, - descendantsCount: descendantsCount - }; -} - - -function custom(factList, model, impl) -{ - var facts = organizeFacts(factList).facts; - - return { - type: 'custom', - facts: facts, - model: model, - impl: impl - }; -} - - -function map(tagger, node) -{ - return { - type: 'tagger', - tagger: tagger, - node: node, - descendantsCount: 1 + (node.descendantsCount || 0) - }; -} - - -function thunk(func, args, thunk) -{ - return { - type: 'thunk', - func: func, - args: args, - thunk: thunk, - node: undefined - }; -} - -function lazy(fn, a) -{ - return thunk(fn, [a], function() { - return fn(a); - }); -} - -function lazy2(fn, a, b) -{ - return thunk(fn, [a,b], function() { - return A2(fn, a, b); - }); -} - -function lazy3(fn, a, b, c) -{ - return thunk(fn, [a,b,c], function() { - return A3(fn, a, b, c); - }); -} - - - -// FACTS - - -function organizeFacts(factList) -{ - var namespace, facts = {}; - - while (factList.ctor !== '[]') - { - var entry = factList._0; - var key = entry.key; - - if (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY) - { - var subFacts = facts[key] || {}; - subFacts[entry.realKey] = entry.value; - facts[key] = subFacts; - } - else if (key === STYLE_KEY) - { - var styles = facts[key] || {}; - var styleList = entry.value; - while (styleList.ctor !== '[]') - { - var style = styleList._0; - styles[style._0] = style._1; - styleList = styleList._1; - } - facts[key] = styles; - } - else if (key === 'namespace') - { - namespace = entry.value; - } - else - { - facts[key] = entry.value; - } - factList = factList._1; - } - - return { - facts: facts, - namespace: namespace - }; -} - - - -//////////// PROPERTIES AND ATTRIBUTES //////////// - - -function style(value) -{ - return { - key: STYLE_KEY, - value: value - }; -} - - -function property(key, value) -{ - return { - key: key, - value: value - }; -} - - -function attribute(key, value) -{ - return { - key: ATTR_KEY, - realKey: key, - value: value - }; -} - - -function attributeNS(namespace, key, value) -{ - return { - key: ATTR_NS_KEY, - realKey: key, - value: { - value: value, - namespace: namespace - } - }; -} - - -function on(name, options, decoder) -{ - return { - key: EVENT_KEY, - realKey: name, - value: { - options: options, - decoder: decoder - } - }; -} - - -function equalEvents(a, b) -{ - if (!a.options === b.options) - { - if (a.stopPropagation !== b.stopPropagation || a.preventDefault !== b.preventDefault) - { - return false; - } - } - return _elm_lang$core$Native_Json.equality(a.decoder, b.decoder); -} - - - -//////////// RENDERER //////////// - - -function renderer(parent, tagger, initialVirtualNode) -{ - var eventNode = { tagger: tagger, parent: undefined }; - - var domNode = render(initialVirtualNode, eventNode); - parent.appendChild(domNode); - - var state = 'NO_REQUEST'; - var currentVirtualNode = initialVirtualNode; - var nextVirtualNode = initialVirtualNode; - - function registerVirtualNode(vNode) - { - if (state === 'NO_REQUEST') - { - rAF(updateIfNeeded); - } - state = 'PENDING_REQUEST'; - nextVirtualNode = vNode; - } - - function updateIfNeeded() - { - switch (state) - { - case 'NO_REQUEST': - throw new Error( - 'Unexpected draw callback.\n' + - 'Please report this to .' - ); - - case 'PENDING_REQUEST': - rAF(updateIfNeeded); - state = 'EXTRA_REQUEST'; - - var patches = diff(currentVirtualNode, nextVirtualNode); - domNode = applyPatches(domNode, currentVirtualNode, patches, eventNode); - currentVirtualNode = nextVirtualNode; - - return; - - case 'EXTRA_REQUEST': - state = 'NO_REQUEST'; - return; - } - } - - return { update: registerVirtualNode }; -} - - -var rAF = - typeof requestAnimationFrame !== 'undefined' - ? requestAnimationFrame - : function(cb) { setTimeout(cb, 1000 / 60); }; - - - -//////////// RENDER //////////// - - -function render(vNode, eventNode) -{ - switch (vNode.type) - { - case 'thunk': - if (!vNode.node) - { - vNode.node = vNode.thunk(); - } - return render(vNode.node, eventNode); - - case 'tagger': - var subNode = vNode.node; - var tagger = vNode.tagger; - - while (subNode.type === 'tagger') - { - typeof tagger !== 'object' - ? tagger = [tagger, subNode.tagger] - : tagger.push(subNode.tagger); - - subNode = subNode.node; - } - - var subEventRoot = { - tagger: tagger, - parent: eventNode - }; - - var domNode = render(subNode, subEventRoot); - domNode.elm_event_node_ref = subEventRoot; - return domNode; - - case 'text': - return document.createTextNode(vNode.text); - - case 'node': - var domNode = vNode.namespace - ? document.createElementNS(vNode.namespace, vNode.tag) - : document.createElement(vNode.tag); - - applyFacts(domNode, eventNode, vNode.facts); - - var children = vNode.children; - - for (var i = 0; i < children.length; i++) - { - domNode.appendChild(render(children[i], eventNode)); - } - - return domNode; - - case 'keyed-node': - var domNode = vNode.namespace - ? document.createElementNS(vNode.namespace, vNode.tag) - : document.createElement(vNode.tag); - - applyFacts(domNode, eventNode, vNode.facts); - - var children = vNode.children; - - for (var i = 0; i < children.length; i++) - { - domNode.appendChild(render(children[i]._1, eventNode)); - } - - return domNode; - - case 'custom': - var domNode = vNode.impl.render(vNode.model); - applyFacts(domNode, eventNode, vNode.facts); - return domNode; - } -} - - - -//////////// APPLY FACTS //////////// - - -function applyFacts(domNode, eventNode, facts) -{ - for (var key in facts) - { - var value = facts[key]; - - switch (key) - { - case STYLE_KEY: - applyStyles(domNode, value); - break; - - case EVENT_KEY: - applyEvents(domNode, eventNode, value); - break; - - case ATTR_KEY: - applyAttrs(domNode, value); - break; - - case ATTR_NS_KEY: - applyAttrsNS(domNode, value); - break; - - case 'value': - if (domNode[key] !== value) - { - domNode[key] = value; - } - break; - - default: - domNode[key] = value; - break; - } - } -} - -function applyStyles(domNode, styles) -{ - var domNodeStyle = domNode.style; - - for (var key in styles) - { - domNodeStyle[key] = styles[key]; - } -} - -function applyEvents(domNode, eventNode, events) -{ - var allHandlers = domNode.elm_handlers || {}; - - for (var key in events) - { - var handler = allHandlers[key]; - var value = events[key]; - - if (typeof value === 'undefined') - { - domNode.removeEventListener(key, handler); - allHandlers[key] = undefined; - } - else if (typeof handler === 'undefined') - { - var handler = makeEventHandler(eventNode, value); - domNode.addEventListener(key, handler); - allHandlers[key] = handler; - } - else - { - handler.info = value; - } - } - - domNode.elm_handlers = allHandlers; -} - -function makeEventHandler(eventNode, info) -{ - function eventHandler(event) - { - var info = eventHandler.info; - - var value = A2(_elm_lang$core$Native_Json.run, info.decoder, event); - - if (value.ctor === 'Ok') - { - var options = info.options; - if (options.stopPropagation) - { - event.stopPropagation(); - } - if (options.preventDefault) - { - event.preventDefault(); - } - - var message = value._0; - - var currentEventNode = eventNode; - while (currentEventNode) - { - var tagger = currentEventNode.tagger; - if (typeof tagger === 'function') - { - message = tagger(message); - } - else - { - for (var i = tagger.length; i--; ) - { - message = tagger[i](message); - } - } - currentEventNode = currentEventNode.parent; - } - } - }; - - eventHandler.info = info; - - return eventHandler; -} - -function applyAttrs(domNode, attrs) -{ - for (var key in attrs) - { - var value = attrs[key]; - if (typeof value === 'undefined') - { - domNode.removeAttribute(key); - } - else - { - domNode.setAttribute(key, value); - } - } -} - -function applyAttrsNS(domNode, nsAttrs) -{ - for (var key in nsAttrs) - { - var pair = nsAttrs[key]; - var namespace = pair.namespace; - var value = pair.value; - - if (typeof value === 'undefined') - { - domNode.removeAttributeNS(namespace, key); - } - else - { - domNode.setAttributeNS(namespace, key, value); - } - } -} - - - -//////////// DIFF //////////// - - -function diff(a, b) -{ - var patches = []; - diffHelp(a, b, patches, 0); - return patches; -} - - -function makePatch(type, index, data) -{ - return { - index: index, - type: type, - data: data, - domNode: undefined, - eventNode: undefined - }; -} - - -function diffHelp(a, b, patches, index) -{ - if (a === b) - { - return; - } - - var aType = a.type; - var bType = b.type; - - // Bail if you run into different types of nodes. Implies that the - // structure has changed significantly and it's not worth a diff. - if (aType !== bType) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - // Now we know that both nodes are the same type. - switch (bType) - { - case 'thunk': - var aArgs = a.args; - var bArgs = b.args; - var i = aArgs.length; - var same = a.func === b.func && i === bArgs.length; - while (same && i--) - { - same = aArgs[i] === bArgs[i]; - } - if (same) - { - b.node = a.node; - return; - } - b.node = b.thunk(); - var subPatches = []; - diffHelp(a.node, b.node, subPatches, 0); - if (subPatches.length > 0) - { - patches.push(makePatch('p-thunk', index, subPatches)); - } - return; - - case 'tagger': - // gather nested taggers - var aTaggers = a.tagger; - var bTaggers = b.tagger; - var nesting = false; - - var aSubNode = a.node; - while (aSubNode.type === 'tagger') - { - nesting = true; - - typeof aTaggers !== 'object' - ? aTaggers = [aTaggers, aSubNode.tagger] - : aTaggers.push(aSubNode.tagger); - - aSubNode = aSubNode.node; - } - - var bSubNode = b.node; - while (bSubNode.type === 'tagger') - { - nesting = true; - - typeof bTaggers !== 'object' - ? bTaggers = [bTaggers, bSubNode.tagger] - : bTaggers.push(bSubNode.tagger); - - bSubNode = bSubNode.node; - } - - // Just bail if different numbers of taggers. This implies the - // structure of the virtual DOM has changed. - if (nesting && aTaggers.length !== bTaggers.length) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - // check if taggers are "the same" - if (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers) - { - patches.push(makePatch('p-tagger', index, bTaggers)); - } - - // diff everything below the taggers - diffHelp(aSubNode, bSubNode, patches, index + 1); - return; - - case 'text': - if (a.text !== b.text) - { - patches.push(makePatch('p-text', index, b.text)); - return; - } - - return; - - case 'node': - // Bail if obvious indicators have changed. Implies more serious - // structural changes such that it's not worth it to diff. - if (a.tag !== b.tag || a.namespace !== b.namespace) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - var factsDiff = diffFacts(a.facts, b.facts); - - if (typeof factsDiff !== 'undefined') - { - patches.push(makePatch('p-facts', index, factsDiff)); - } - - diffChildren(a, b, patches, index); - return; - - case 'keyed-node': - // Bail if obvious indicators have changed. Implies more serious - // structural changes such that it's not worth it to diff. - if (a.tag !== b.tag || a.namespace !== b.namespace) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - var factsDiff = diffFacts(a.facts, b.facts); - - if (typeof factsDiff !== 'undefined') - { - patches.push(makePatch('p-facts', index, factsDiff)); - } - - diffKeyedChildren(a, b, patches, index); - return; - - case 'custom': - if (a.impl !== b.impl) - { - patches.push(makePatch('p-redraw', index, b)); - return; - } - - var factsDiff = diffFacts(a.facts, b.facts); - if (typeof factsDiff !== 'undefined') - { - patches.push(makePatch('p-facts', index, factsDiff)); - } - - var patch = b.impl.diff(a,b); - if (patch) - { - patches.push(makePatch('p-custom', index, patch)); - return; - } - - return; - } -} - - -// assumes the incoming arrays are the same length -function pairwiseRefEqual(as, bs) -{ - for (var i = 0; i < as.length; i++) - { - if (as[i] !== bs[i]) - { - return false; - } - } - - return true; -} - - -// TODO Instead of creating a new diff object, it's possible to just test if -// there *is* a diff. During the actual patch, do the diff again and make the -// modifications directly. This way, there's no new allocations. Worth it? -function diffFacts(a, b, category) -{ - var diff; - - // look for changes and removals - for (var aKey in a) - { - if (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY) - { - var subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey); - if (subDiff) - { - diff = diff || {}; - diff[aKey] = subDiff; - } - continue; - } - - // remove if not in the new facts - if (!(aKey in b)) - { - diff = diff || {}; - diff[aKey] = - (typeof category === 'undefined') - ? (typeof a[aKey] === 'string' ? '' : null) - : - (category === STYLE_KEY) - ? '' - : - (category === EVENT_KEY || category === ATTR_KEY) - ? undefined - : - { namespace: a[aKey].namespace, value: undefined }; - - continue; - } - - var aValue = a[aKey]; - var bValue = b[aKey]; - - // reference equal, so don't worry about it - if (aValue === bValue && aKey !== 'value' - || category === EVENT_KEY && equalEvents(aValue, bValue)) - { - continue; - } - - diff = diff || {}; - diff[aKey] = bValue; - } - - // add new stuff - for (var bKey in b) - { - if (!(bKey in a)) - { - diff = diff || {}; - diff[bKey] = b[bKey]; - } - } - - return diff; -} - - -function diffChildren(aParent, bParent, patches, rootIndex) -{ - var aChildren = aParent.children; - var bChildren = bParent.children; - - var aLen = aChildren.length; - var bLen = bChildren.length; - - // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS - - if (aLen > bLen) - { - patches.push(makePatch('p-remove-last', rootIndex, aLen - bLen)); - } - else if (aLen < bLen) - { - patches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen))); - } - - // PAIRWISE DIFF EVERYTHING ELSE - - var index = rootIndex; - var minLen = aLen < bLen ? aLen : bLen; - for (var i = 0; i < minLen; i++) - { - index++; - var aChild = aChildren[i]; - diffHelp(aChild, bChildren[i], patches, index); - index += aChild.descendantsCount || 0; - } -} - - - -//////////// KEYED DIFF //////////// - - -function diffKeyedChildren(aParent, bParent, patches, rootIndex) -{ - var localPatches = []; - - var changes = {}; // Dict String Entry - var inserts = []; // Array { index : Int, entry : Entry } - // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } - - var aChildren = aParent.children; - var bChildren = bParent.children; - var aLen = aChildren.length; - var bLen = bChildren.length; - var aIndex = 0; - var bIndex = 0; - - var index = rootIndex; - - while (aIndex < aLen && bIndex < bLen) - { - var a = aChildren[aIndex]; - var b = bChildren[bIndex]; - - var aKey = a._0; - var bKey = b._0; - var aNode = a._1; - var bNode = b._1; - - // check if keys match - - if (aKey === bKey) - { - index++; - diffHelp(aNode, bNode, localPatches, index); - index += aNode.descendantsCount || 0; - - aIndex++; - bIndex++; - continue; - } - - // look ahead 1 to detect insertions and removals. - - var aLookAhead = aIndex + 1 < aLen; - var bLookAhead = bIndex + 1 < bLen; - - if (aLookAhead) - { - var aNext = aChildren[aIndex + 1]; - var aNextKey = aNext._0; - var aNextNode = aNext._1; - var oldMatch = bKey === aNextKey; - } - - if (bLookAhead) - { - var bNext = bChildren[bIndex + 1]; - var bNextKey = bNext._0; - var bNextNode = bNext._1; - var newMatch = aKey === bNextKey; - } - - - // swap a and b - if (aLookAhead && bLookAhead && newMatch && oldMatch) - { - index++; - diffHelp(aNode, bNextNode, localPatches, index); - insertNode(changes, localPatches, aKey, bNode, bIndex, inserts); - index += aNode.descendantsCount || 0; - - index++; - removeNode(changes, localPatches, aKey, aNextNode, index); - index += aNextNode.descendantsCount || 0; - - aIndex += 2; - bIndex += 2; - continue; - } - - // insert b - if (bLookAhead && newMatch) - { - index++; - insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); - diffHelp(aNode, bNextNode, localPatches, index); - index += aNode.descendantsCount || 0; - - aIndex += 1; - bIndex += 2; - continue; - } - - // remove a - if (aLookAhead && oldMatch) - { - index++; - removeNode(changes, localPatches, aKey, aNode, index); - index += aNode.descendantsCount || 0; - - index++; - diffHelp(aNextNode, bNode, localPatches, index); - index += aNextNode.descendantsCount || 0; - - aIndex += 2; - bIndex += 1; - continue; - } - - // remove a, insert b - if (aLookAhead && bLookAhead && aNextKey === bNextKey) - { - index++; - removeNode(changes, localPatches, aKey, aNode, index); - insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); - index += aNode.descendantsCount || 0; - - index++; - diffHelp(aNextNode, bNextNode, localPatches, index); - index += aNextNode.descendantsCount || 0; - - aIndex += 2; - bIndex += 2; - continue; - } - - break; - } - - // eat up any remaining nodes with removeNode and insertNode - - while (aIndex < aLen) - { - index++; - var a = aChildren[aIndex]; - var aNode = a._1; - removeNode(changes, localPatches, a._0, aNode, index); - index += aNode.descendantsCount || 0; - aIndex++; - } - - var endInserts; - while (bIndex < bLen) - { - endInserts = endInserts || []; - var b = bChildren[bIndex]; - insertNode(changes, localPatches, b._0, b._1, undefined, endInserts); - bIndex++; - } - - if (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined') - { - patches.push(makePatch('p-reorder', rootIndex, { - patches: localPatches, - inserts: inserts, - endInserts: endInserts - })); - } -} - - - -//////////// CHANGES FROM KEYED DIFF //////////// - - -var POSTFIX = '_elmW6BL'; - - -function insertNode(changes, localPatches, key, vnode, bIndex, inserts) -{ - var entry = changes[key]; - - // never seen this key before - if (typeof entry === 'undefined') - { - entry = { - tag: 'insert', - vnode: vnode, - index: bIndex, - data: undefined - }; - - inserts.push({ index: bIndex, entry: entry }); - changes[key] = entry; - - return; - } - - // this key was removed earlier, a match! - if (entry.tag === 'remove') - { - inserts.push({ index: bIndex, entry: entry }); - - entry.tag = 'move'; - var subPatches = []; - diffHelp(entry.vnode, vnode, subPatches, entry.index); - entry.index = bIndex; - entry.data.data = { - patches: subPatches, - entry: entry - }; - - return; - } - - // this key has already been inserted or moved, a duplicate! - insertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts); -} - - -function removeNode(changes, localPatches, key, vnode, index) -{ - var entry = changes[key]; - - // never seen this key before - if (typeof entry === 'undefined') - { - var patch = makePatch('p-remove', index, undefined); - localPatches.push(patch); - - changes[key] = { - tag: 'remove', - vnode: vnode, - index: index, - data: patch - }; - - return; - } - - // this key was inserted earlier, a match! - if (entry.tag === 'insert') - { - entry.tag = 'move'; - var subPatches = []; - diffHelp(vnode, entry.vnode, subPatches, index); - - var patch = makePatch('p-remove', index, { - patches: subPatches, - entry: entry - }); - localPatches.push(patch); - - return; - } - - // this key has already been removed or moved, a duplicate! - removeNode(changes, localPatches, key + POSTFIX, vnode, index); -} - - - -//////////// ADD DOM NODES //////////// -// -// Each DOM node has an "index" assigned in order of traversal. It is important -// to minimize our crawl over the actual DOM, so these indexes (along with the -// descendantsCount of virtual nodes) let us skip touching entire subtrees of -// the DOM if we know there are no patches there. - - -function addDomNodes(domNode, vNode, patches, eventNode) -{ - addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode); -} - - -// assumes `patches` is non-empty and indexes increase monotonically. -function addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode) -{ - var patch = patches[i]; - var index = patch.index; - - while (index === low) - { - var patchType = patch.type; - - if (patchType === 'p-thunk') - { - addDomNodes(domNode, vNode.node, patch.data, eventNode); - } - else if (patchType === 'p-reorder') - { - patch.domNode = domNode; - patch.eventNode = eventNode; - - var subPatches = patch.data.patches; - if (subPatches.length > 0) - { - addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); - } - } - else if (patchType === 'p-remove') - { - patch.domNode = domNode; - patch.eventNode = eventNode; - - var data = patch.data; - if (typeof data !== 'undefined') - { - data.entry.data = domNode; - var subPatches = data.patches; - if (subPatches.length > 0) - { - addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); - } - } - } - else - { - patch.domNode = domNode; - patch.eventNode = eventNode; - } - - i++; - - if (!(patch = patches[i]) || (index = patch.index) > high) - { - return i; - } - } - - switch (vNode.type) - { - case 'tagger': - var subNode = vNode.node; - - while (subNode.type === "tagger") - { - subNode = subNode.node; - } - - return addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); - - case 'node': - var vChildren = vNode.children; - var childNodes = domNode.childNodes; - for (var j = 0; j < vChildren.length; j++) - { - low++; - var vChild = vChildren[j]; - var nextLow = low + (vChild.descendantsCount || 0); - if (low <= index && index <= nextLow) - { - i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); - if (!(patch = patches[i]) || (index = patch.index) > high) - { - return i; - } - } - low = nextLow; - } - return i; - - case 'keyed-node': - var vChildren = vNode.children; - var childNodes = domNode.childNodes; - for (var j = 0; j < vChildren.length; j++) - { - low++; - var vChild = vChildren[j]._1; - var nextLow = low + (vChild.descendantsCount || 0); - if (low <= index && index <= nextLow) - { - i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); - if (!(patch = patches[i]) || (index = patch.index) > high) - { - return i; - } - } - low = nextLow; - } - return i; - - case 'text': - case 'thunk': - throw new Error('should never traverse `text` or `thunk` nodes like this'); - } -} - - - -//////////// APPLY PATCHES //////////// - - -function applyPatches(rootDomNode, oldVirtualNode, patches, eventNode) -{ - if (patches.length === 0) - { - return rootDomNode; - } - - addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); - return applyPatchesHelp(rootDomNode, patches); -} - -function applyPatchesHelp(rootDomNode, patches) -{ - for (var i = 0; i < patches.length; i++) - { - var patch = patches[i]; - var localDomNode = patch.domNode - var newNode = applyPatch(localDomNode, patch); - if (localDomNode === rootDomNode) - { - rootDomNode = newNode; - } - } - return rootDomNode; -} - -function applyPatch(domNode, patch) -{ - switch (patch.type) - { - case 'p-redraw': - return applyPatchRedraw(domNode, patch.data, patch.eventNode); - - case 'p-facts': - applyFacts(domNode, patch.eventNode, patch.data); - return domNode; - - case 'p-text': - domNode.replaceData(0, domNode.length, patch.data); - return domNode; - - case 'p-thunk': - return applyPatchesHelp(domNode, patch.data); - - case 'p-tagger': - domNode.elm_event_node_ref.tagger = patch.data; - return domNode; - - case 'p-remove-last': - var i = patch.data; - while (i--) - { - domNode.removeChild(domNode.lastChild); - } - return domNode; - - case 'p-append': - var newNodes = patch.data; - for (var i = 0; i < newNodes.length; i++) - { - domNode.appendChild(render(newNodes[i], patch.eventNode)); - } - return domNode; - - case 'p-remove': - var data = patch.data; - if (typeof data === 'undefined') - { - domNode.parentNode.removeChild(domNode); - return domNode; - } - var entry = data.entry; - if (typeof entry.index !== 'undefined') - { - domNode.parentNode.removeChild(domNode); - } - entry.data = applyPatchesHelp(domNode, data.patches); - return domNode; - - case 'p-reorder': - return applyPatchReorder(domNode, patch); - - case 'p-custom': - var impl = patch.data; - return impl.applyPatch(domNode, impl.data); - - default: - throw new Error('Ran into an unknown patch!'); - } -} - - -function applyPatchRedraw(domNode, vNode, eventNode) -{ - var parentNode = domNode.parentNode; - var newNode = render(vNode, eventNode); - - if (typeof newNode.elm_event_node_ref === 'undefined') - { - newNode.elm_event_node_ref = domNode.elm_event_node_ref; - } - - if (parentNode && newNode !== domNode) - { - parentNode.replaceChild(newNode, domNode); - } - return newNode; -} - - -function applyPatchReorder(domNode, patch) -{ - var data = patch.data; - - // remove end inserts - var frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch); - - // removals - domNode = applyPatchesHelp(domNode, data.patches); - - // inserts - var inserts = data.inserts; - for (var i = 0; i < inserts.length; i++) - { - var insert = inserts[i]; - var entry = insert.entry; - var node = entry.tag === 'move' - ? entry.data - : render(entry.vnode, patch.eventNode); - domNode.insertBefore(node, domNode.childNodes[insert.index]); - } - - // add end inserts - if (typeof frag !== 'undefined') - { - domNode.appendChild(frag); - } - - return domNode; -} - - -function applyPatchReorderEndInsertsHelp(endInserts, patch) -{ - if (typeof endInserts === 'undefined') - { - return; - } - - var frag = document.createDocumentFragment(); - for (var i = 0; i < endInserts.length; i++) - { - var insert = endInserts[i]; - var entry = insert.entry; - frag.appendChild(entry.tag === 'move' - ? entry.data - : render(entry.vnode, patch.eventNode) - ); - } - return frag; -} - - - -//////////// PROGRAMS //////////// - - -function programWithFlags(details) -{ - return { - init: details.init, - update: details.update, - subscriptions: details.subscriptions, - view: details.view, - renderer: renderer - }; -} - - -return { - node: node, - text: text, - - custom: custom, - - map: F2(map), - - on: F3(on), - style: style, - property: F2(property), - attribute: F2(attribute), - attributeNS: F3(attributeNS), - - lazy: F2(lazy), - lazy2: F3(lazy2), - lazy3: F4(lazy3), - keyedNode: F3(keyedNode), - - programWithFlags: programWithFlags -}; - -}(); -var _elm_lang$virtual_dom$VirtualDom$programWithFlags = _elm_lang$virtual_dom$Native_VirtualDom.programWithFlags; -var _elm_lang$virtual_dom$VirtualDom$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode; -var _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3; -var _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2; -var _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy; -var _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false}; -var _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on; -var _elm_lang$virtual_dom$VirtualDom$on = F2( - function (eventName, decoder) { - return A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder); - }); -var _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style; -var _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS; -var _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute; -var _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property; -var _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map; -var _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text; -var _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node; -var _elm_lang$virtual_dom$VirtualDom$Options = F2( - function (a, b) { - return {stopPropagation: a, preventDefault: b}; - }); -var _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'}; -var _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'}; - -var _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text; -var _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node; -var _elm_lang$html$Html$body = _elm_lang$html$Html$node('body'); -var _elm_lang$html$Html$section = _elm_lang$html$Html$node('section'); -var _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav'); -var _elm_lang$html$Html$article = _elm_lang$html$Html$node('article'); -var _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside'); -var _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1'); -var _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2'); -var _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3'); -var _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4'); -var _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5'); -var _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6'); -var _elm_lang$html$Html$header = _elm_lang$html$Html$node('header'); -var _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer'); -var _elm_lang$html$Html$address = _elm_lang$html$Html$node('address'); -var _elm_lang$html$Html$main$ = _elm_lang$html$Html$node('main'); -var _elm_lang$html$Html$p = _elm_lang$html$Html$node('p'); -var _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr'); -var _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre'); -var _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote'); -var _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol'); -var _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul'); -var _elm_lang$html$Html$li = _elm_lang$html$Html$node('li'); -var _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl'); -var _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt'); -var _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd'); -var _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure'); -var _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption'); -var _elm_lang$html$Html$div = _elm_lang$html$Html$node('div'); -var _elm_lang$html$Html$a = _elm_lang$html$Html$node('a'); -var _elm_lang$html$Html$em = _elm_lang$html$Html$node('em'); -var _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong'); -var _elm_lang$html$Html$small = _elm_lang$html$Html$node('small'); -var _elm_lang$html$Html$s = _elm_lang$html$Html$node('s'); -var _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite'); -var _elm_lang$html$Html$q = _elm_lang$html$Html$node('q'); -var _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn'); -var _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr'); -var _elm_lang$html$Html$time = _elm_lang$html$Html$node('time'); -var _elm_lang$html$Html$code = _elm_lang$html$Html$node('code'); -var _elm_lang$html$Html$var = _elm_lang$html$Html$node('var'); -var _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp'); -var _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd'); -var _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub'); -var _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup'); -var _elm_lang$html$Html$i = _elm_lang$html$Html$node('i'); -var _elm_lang$html$Html$b = _elm_lang$html$Html$node('b'); -var _elm_lang$html$Html$u = _elm_lang$html$Html$node('u'); -var _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark'); -var _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby'); -var _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt'); -var _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp'); -var _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi'); -var _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo'); -var _elm_lang$html$Html$span = _elm_lang$html$Html$node('span'); -var _elm_lang$html$Html$br = _elm_lang$html$Html$node('br'); -var _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr'); -var _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins'); -var _elm_lang$html$Html$del = _elm_lang$html$Html$node('del'); -var _elm_lang$html$Html$img = _elm_lang$html$Html$node('img'); -var _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe'); -var _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed'); -var _elm_lang$html$Html$object = _elm_lang$html$Html$node('object'); -var _elm_lang$html$Html$param = _elm_lang$html$Html$node('param'); -var _elm_lang$html$Html$video = _elm_lang$html$Html$node('video'); -var _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio'); -var _elm_lang$html$Html$source = _elm_lang$html$Html$node('source'); -var _elm_lang$html$Html$track = _elm_lang$html$Html$node('track'); -var _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas'); -var _elm_lang$html$Html$svg = _elm_lang$html$Html$node('svg'); -var _elm_lang$html$Html$math = _elm_lang$html$Html$node('math'); -var _elm_lang$html$Html$table = _elm_lang$html$Html$node('table'); -var _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption'); -var _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup'); -var _elm_lang$html$Html$col = _elm_lang$html$Html$node('col'); -var _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody'); -var _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead'); -var _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot'); -var _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr'); -var _elm_lang$html$Html$td = _elm_lang$html$Html$node('td'); -var _elm_lang$html$Html$th = _elm_lang$html$Html$node('th'); -var _elm_lang$html$Html$form = _elm_lang$html$Html$node('form'); -var _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset'); -var _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend'); -var _elm_lang$html$Html$label = _elm_lang$html$Html$node('label'); -var _elm_lang$html$Html$input = _elm_lang$html$Html$node('input'); -var _elm_lang$html$Html$button = _elm_lang$html$Html$node('button'); -var _elm_lang$html$Html$select = _elm_lang$html$Html$node('select'); -var _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist'); -var _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup'); -var _elm_lang$html$Html$option = _elm_lang$html$Html$node('option'); -var _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea'); -var _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen'); -var _elm_lang$html$Html$output = _elm_lang$html$Html$node('output'); -var _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress'); -var _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter'); -var _elm_lang$html$Html$details = _elm_lang$html$Html$node('details'); -var _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary'); -var _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem'); -var _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu'); - -var _elm_lang$html$Html_App$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags; -var _elm_lang$html$Html_App$program = function (app) { - return _elm_lang$html$Html_App$programWithFlags( - _elm_lang$core$Native_Utils.update( - app, - { - init: function (_p0) { - return app.init; - } - })); -}; -var _elm_lang$html$Html_App$beginnerProgram = function (_p1) { - var _p2 = _p1; - return _elm_lang$html$Html_App$programWithFlags( - { - init: function (_p3) { - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _p2.model, - _elm_lang$core$Native_List.fromArray( - [])); - }, - update: F2( - function (msg, model) { - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - A2(_p2.update, msg, model), - _elm_lang$core$Native_List.fromArray( - [])); - }), - view: _p2.view, - subscriptions: function (_p4) { - return _elm_lang$core$Platform_Sub$none; - } - }); -}; -var _elm_lang$html$Html_App$map = _elm_lang$virtual_dom$VirtualDom$map; - -var _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute; -var _elm_lang$html$Html_Attributes$contextmenu = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value); -}; -var _elm_lang$html$Html_Attributes$draggable = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'draggable', value); -}; -var _elm_lang$html$Html_Attributes$list = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'list', value); -}; -var _elm_lang$html$Html_Attributes$maxlength = function (n) { - return A2( - _elm_lang$html$Html_Attributes$attribute, - 'maxlength', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$datetime = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'datetime', value); -}; -var _elm_lang$html$Html_Attributes$pubdate = function (value) { - return A2(_elm_lang$html$Html_Attributes$attribute, 'pubdate', value); -}; -var _elm_lang$html$Html_Attributes$colspan = function (n) { - return A2( - _elm_lang$html$Html_Attributes$attribute, - 'colspan', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$rowspan = function (n) { - return A2( - _elm_lang$html$Html_Attributes$attribute, - 'rowspan', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property; -var _elm_lang$html$Html_Attributes$stringProperty = F2( - function (name, string) { - return A2( - _elm_lang$html$Html_Attributes$property, - name, - _elm_lang$core$Json_Encode$string(string)); - }); -var _elm_lang$html$Html_Attributes$class = function (name) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name); -}; -var _elm_lang$html$Html_Attributes$id = function (name) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name); -}; -var _elm_lang$html$Html_Attributes$title = function (name) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name); -}; -var _elm_lang$html$Html_Attributes$accesskey = function ($char) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'accessKey', - _elm_lang$core$String$fromChar($char)); -}; -var _elm_lang$html$Html_Attributes$dir = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value); -}; -var _elm_lang$html$Html_Attributes$dropzone = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value); -}; -var _elm_lang$html$Html_Attributes$itemprop = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'itemprop', value); -}; -var _elm_lang$html$Html_Attributes$lang = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value); -}; -var _elm_lang$html$Html_Attributes$tabindex = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'tabIndex', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$charset = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'charset', value); -}; -var _elm_lang$html$Html_Attributes$content = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value); -}; -var _elm_lang$html$Html_Attributes$httpEquiv = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value); -}; -var _elm_lang$html$Html_Attributes$language = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value); -}; -var _elm_lang$html$Html_Attributes$src = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value); -}; -var _elm_lang$html$Html_Attributes$height = function (value) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'height', - _elm_lang$core$Basics$toString(value)); -}; -var _elm_lang$html$Html_Attributes$width = function (value) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'width', - _elm_lang$core$Basics$toString(value)); -}; -var _elm_lang$html$Html_Attributes$alt = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value); -}; -var _elm_lang$html$Html_Attributes$preload = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value); -}; -var _elm_lang$html$Html_Attributes$poster = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value); -}; -var _elm_lang$html$Html_Attributes$kind = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value); -}; -var _elm_lang$html$Html_Attributes$srclang = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value); -}; -var _elm_lang$html$Html_Attributes$sandbox = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value); -}; -var _elm_lang$html$Html_Attributes$srcdoc = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value); -}; -var _elm_lang$html$Html_Attributes$type$ = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value); -}; -var _elm_lang$html$Html_Attributes$value = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value); -}; -var _elm_lang$html$Html_Attributes$defaultValue = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value); -}; -var _elm_lang$html$Html_Attributes$placeholder = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value); -}; -var _elm_lang$html$Html_Attributes$accept = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value); -}; -var _elm_lang$html$Html_Attributes$acceptCharset = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value); -}; -var _elm_lang$html$Html_Attributes$action = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value); -}; -var _elm_lang$html$Html_Attributes$autocomplete = function (bool) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'autocomplete', - bool ? 'on' : 'off'); -}; -var _elm_lang$html$Html_Attributes$autosave = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'autosave', value); -}; -var _elm_lang$html$Html_Attributes$enctype = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value); -}; -var _elm_lang$html$Html_Attributes$formaction = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'formAction', value); -}; -var _elm_lang$html$Html_Attributes$minlength = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'minLength', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$method = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value); -}; -var _elm_lang$html$Html_Attributes$name = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value); -}; -var _elm_lang$html$Html_Attributes$pattern = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value); -}; -var _elm_lang$html$Html_Attributes$size = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'size', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$for = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value); -}; -var _elm_lang$html$Html_Attributes$form = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'form', value); -}; -var _elm_lang$html$Html_Attributes$max = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value); -}; -var _elm_lang$html$Html_Attributes$min = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value); -}; -var _elm_lang$html$Html_Attributes$step = function (n) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n); -}; -var _elm_lang$html$Html_Attributes$cols = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'cols', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$rows = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'rows', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$wrap = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value); -}; -var _elm_lang$html$Html_Attributes$usemap = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value); -}; -var _elm_lang$html$Html_Attributes$shape = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value); -}; -var _elm_lang$html$Html_Attributes$coords = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value); -}; -var _elm_lang$html$Html_Attributes$challenge = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'challenge', value); -}; -var _elm_lang$html$Html_Attributes$keytype = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value); -}; -var _elm_lang$html$Html_Attributes$align = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value); -}; -var _elm_lang$html$Html_Attributes$cite = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value); -}; -var _elm_lang$html$Html_Attributes$href = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value); -}; -var _elm_lang$html$Html_Attributes$target = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value); -}; -var _elm_lang$html$Html_Attributes$downloadAs = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value); -}; -var _elm_lang$html$Html_Attributes$hreflang = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value); -}; -var _elm_lang$html$Html_Attributes$media = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'media', value); -}; -var _elm_lang$html$Html_Attributes$ping = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value); -}; -var _elm_lang$html$Html_Attributes$rel = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'rel', value); -}; -var _elm_lang$html$Html_Attributes$start = function (n) { - return A2( - _elm_lang$html$Html_Attributes$stringProperty, - 'start', - _elm_lang$core$Basics$toString(n)); -}; -var _elm_lang$html$Html_Attributes$headers = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value); -}; -var _elm_lang$html$Html_Attributes$scope = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value); -}; -var _elm_lang$html$Html_Attributes$manifest = function (value) { - return A2(_elm_lang$html$Html_Attributes$stringProperty, 'manifest', value); -}; -var _elm_lang$html$Html_Attributes$boolProperty = F2( - function (name, bool) { - return A2( - _elm_lang$html$Html_Attributes$property, - name, - _elm_lang$core$Json_Encode$bool(bool)); - }); -var _elm_lang$html$Html_Attributes$hidden = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool); -}; -var _elm_lang$html$Html_Attributes$contenteditable = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool); -}; -var _elm_lang$html$Html_Attributes$spellcheck = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool); -}; -var _elm_lang$html$Html_Attributes$async = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool); -}; -var _elm_lang$html$Html_Attributes$defer = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool); -}; -var _elm_lang$html$Html_Attributes$scoped = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool); -}; -var _elm_lang$html$Html_Attributes$autoplay = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool); -}; -var _elm_lang$html$Html_Attributes$controls = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool); -}; -var _elm_lang$html$Html_Attributes$loop = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool); -}; -var _elm_lang$html$Html_Attributes$default = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool); -}; -var _elm_lang$html$Html_Attributes$seamless = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool); -}; -var _elm_lang$html$Html_Attributes$checked = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool); -}; -var _elm_lang$html$Html_Attributes$selected = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool); -}; -var _elm_lang$html$Html_Attributes$autofocus = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool); -}; -var _elm_lang$html$Html_Attributes$disabled = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool); -}; -var _elm_lang$html$Html_Attributes$multiple = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool); -}; -var _elm_lang$html$Html_Attributes$novalidate = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool); -}; -var _elm_lang$html$Html_Attributes$readonly = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool); -}; -var _elm_lang$html$Html_Attributes$required = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool); -}; -var _elm_lang$html$Html_Attributes$ismap = function (value) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value); -}; -var _elm_lang$html$Html_Attributes$download = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool); -}; -var _elm_lang$html$Html_Attributes$reversed = function (bool) { - return A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool); -}; -var _elm_lang$html$Html_Attributes$classList = function (list) { - return _elm_lang$html$Html_Attributes$class( - A2( - _elm_lang$core$String$join, - ' ', - A2( - _elm_lang$core$List$map, - _elm_lang$core$Basics$fst, - A2(_elm_lang$core$List$filter, _elm_lang$core$Basics$snd, list)))); -}; -var _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style; - -var _elm_lang$keyboard$Keyboard$onSelfMsg = F3( - function (router, _p0, state) { - var _p1 = _p0; - var _p2 = A2(_elm_lang$core$Dict$get, _p1.category, state); - if (_p2.ctor === 'Nothing') { - return _elm_lang$core$Task$succeed(state); - } else { - var send = function (tagger) { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - tagger(_p1.keyCode)); - }; - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Task$sequence( - A2(_elm_lang$core$List$map, send, _p2._0.taggers)), - function (_p3) { - return _elm_lang$core$Task$succeed(state); - }); - } - }); -var _elm_lang$keyboard$Keyboard_ops = _elm_lang$keyboard$Keyboard_ops || {}; -_elm_lang$keyboard$Keyboard_ops['&>'] = F2( - function (t1, t2) { - return A2( - _elm_lang$core$Task$andThen, - t1, - function (_p4) { - return t2; - }); - }); -var _elm_lang$keyboard$Keyboard$init = _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty); -var _elm_lang$keyboard$Keyboard$categorizeHelpHelp = F2( - function (value, maybeValues) { - var _p5 = maybeValues; - if (_p5.ctor === 'Nothing') { - return _elm_lang$core$Maybe$Just( - _elm_lang$core$Native_List.fromArray( - [value])); - } else { - return _elm_lang$core$Maybe$Just( - A2(_elm_lang$core$List_ops['::'], value, _p5._0)); - } - }); -var _elm_lang$keyboard$Keyboard$categorizeHelp = F2( - function (subs, subDict) { - categorizeHelp: - while (true) { - var _p6 = subs; - if (_p6.ctor === '[]') { - return subDict; - } else { - var _v4 = _p6._1, - _v5 = A3( - _elm_lang$core$Dict$update, - _p6._0._0, - _elm_lang$keyboard$Keyboard$categorizeHelpHelp(_p6._0._1), - subDict); - subs = _v4; - subDict = _v5; - continue categorizeHelp; - } - } - }); -var _elm_lang$keyboard$Keyboard$categorize = function (subs) { - return A2(_elm_lang$keyboard$Keyboard$categorizeHelp, subs, _elm_lang$core$Dict$empty); -}; -var _elm_lang$keyboard$Keyboard$keyCode = A2(_elm_lang$core$Json_Decode_ops[':='], 'keyCode', _elm_lang$core$Json_Decode$int); -var _elm_lang$keyboard$Keyboard$subscription = _elm_lang$core$Native_Platform.leaf('Keyboard'); -var _elm_lang$keyboard$Keyboard$Watcher = F2( - function (a, b) { - return {taggers: a, pid: b}; - }); -var _elm_lang$keyboard$Keyboard$Msg = F2( - function (a, b) { - return {category: a, keyCode: b}; - }); -var _elm_lang$keyboard$Keyboard$onEffects = F3( - function (router, newSubs, oldState) { - var rightStep = F3( - function (category, taggers, task) { - return A2( - _elm_lang$core$Task$andThen, - task, - function (state) { - return A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Process$spawn( - A3( - _elm_lang$dom$Dom_LowLevel$onDocument, - category, - _elm_lang$keyboard$Keyboard$keyCode, - function (_p7) { - return A2( - _elm_lang$core$Platform$sendToSelf, - router, - A2(_elm_lang$keyboard$Keyboard$Msg, category, _p7)); - })), - function (pid) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$core$Dict$insert, - category, - A2(_elm_lang$keyboard$Keyboard$Watcher, taggers, pid), - state)); - }); - }); - }); - var bothStep = F4( - function (category, _p8, taggers, task) { - var _p9 = _p8; - return A2( - _elm_lang$core$Task$andThen, - task, - function (state) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$core$Dict$insert, - category, - A2(_elm_lang$keyboard$Keyboard$Watcher, taggers, _p9.pid), - state)); - }); - }); - var leftStep = F3( - function (category, _p10, task) { - var _p11 = _p10; - return A2( - _elm_lang$keyboard$Keyboard_ops['&>'], - _elm_lang$core$Process$kill(_p11.pid), - task); - }); - return A6( - _elm_lang$core$Dict$merge, - leftStep, - bothStep, - rightStep, - oldState, - _elm_lang$keyboard$Keyboard$categorize(newSubs), - _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty)); - }); -var _elm_lang$keyboard$Keyboard$MySub = F2( - function (a, b) { - return {ctor: 'MySub', _0: a, _1: b}; - }); -var _elm_lang$keyboard$Keyboard$presses = function (tagger) { - return _elm_lang$keyboard$Keyboard$subscription( - A2(_elm_lang$keyboard$Keyboard$MySub, 'keypress', tagger)); -}; -var _elm_lang$keyboard$Keyboard$downs = function (tagger) { - return _elm_lang$keyboard$Keyboard$subscription( - A2(_elm_lang$keyboard$Keyboard$MySub, 'keydown', tagger)); -}; -var _elm_lang$keyboard$Keyboard$ups = function (tagger) { - return _elm_lang$keyboard$Keyboard$subscription( - A2(_elm_lang$keyboard$Keyboard$MySub, 'keyup', tagger)); -}; -var _elm_lang$keyboard$Keyboard$subMap = F2( - function (func, _p12) { - var _p13 = _p12; - return A2( - _elm_lang$keyboard$Keyboard$MySub, - _p13._0, - function (_p14) { - return func( - _p13._1(_p14)); - }); - }); -_elm_lang$core$Native_Platform.effectManagers['Keyboard'] = {pkg: 'elm-lang/keyboard', init: _elm_lang$keyboard$Keyboard$init, onEffects: _elm_lang$keyboard$Keyboard$onEffects, onSelfMsg: _elm_lang$keyboard$Keyboard$onSelfMsg, tag: 'sub', subMap: _elm_lang$keyboard$Keyboard$subMap}; - -var _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt = function (bool) { - return bool ? 1 : 0; -}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$determineArrows = function (keys) { - var toInt = function (key) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt( - A2(_elm_lang$core$Set$member, key, keys)); - }; - var x = toInt(39) - toInt(37); - var y = toInt(38) - toInt(40); - return {x: x, y: y}; -}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$determineWasd = function (keys) { - var toInt = function (key) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$boolToInt( - A2(_elm_lang$core$Set$member, key, keys)); - }; - var x = toInt(68) - toInt(65); - var y = toInt(87) - toInt(83); - return {x: x, y: y}; -}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$init = {x: 0, y: 0}; -var _ohanhi$keyboard_extra$Keyboard_Arrows$Arrows = F2( - function (a, b) { - return {x: a, y: b}; - }); - -var _ohanhi$keyboard_extra$Keyboard_Extra$wasd = function (model) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$determineWasd(model.keysDown); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$arrows = function (model) { - return _ohanhi$keyboard_extra$Keyboard_Arrows$determineArrows(model.keysDown); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$update = F2( - function (msg, model) { - var _p0 = msg; - if (_p0.ctor === 'Down') { - var keysDown = A2(_elm_lang$core$Set$insert, _p0._0, model.keysDown); - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _elm_lang$core$Native_Utils.update( - model, - {keysDown: keysDown}), - _elm_lang$core$Native_List.fromArray( - [])); - } else { - var keysDown = A2(_elm_lang$core$Set$remove, _p0._0, model.keysDown); - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _elm_lang$core$Native_Utils.update( - model, - {keysDown: keysDown}), - _elm_lang$core$Native_List.fromArray( - [])); - } - }); -var _ohanhi$keyboard_extra$Keyboard_Extra$Model = function (a) { - return {keysDown: a}; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$init = { - ctor: '_Tuple2', - _0: _ohanhi$keyboard_extra$Keyboard_Extra$Model(_elm_lang$core$Set$empty), - _1: _elm_lang$core$Platform_Cmd$none -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Up = function (a) { - return {ctor: 'Up', _0: a}; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Down = function (a) { - return {ctor: 'Down', _0: a}; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$subscriptions = _elm_lang$core$Platform_Sub$batch( - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$keyboard$Keyboard$downs(_ohanhi$keyboard_extra$Keyboard_Extra$Down), - _elm_lang$keyboard$Keyboard$ups(_ohanhi$keyboard_extra$Keyboard_Extra$Up) - ])); -var _ohanhi$keyboard_extra$Keyboard_Extra$NoDirection = {ctor: 'NoDirection'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NorthWest = {ctor: 'NorthWest'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$West = {ctor: 'West'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$SouthWest = {ctor: 'SouthWest'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$South = {ctor: 'South'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$SouthEast = {ctor: 'SouthEast'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$East = {ctor: 'East'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NorthEast = {ctor: 'NorthEast'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$North = {ctor: 'North'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir = function (_p1) { - var _p2 = _p1; - var _p3 = {ctor: '_Tuple2', _0: _p2.x, _1: _p2.y}; - _v2_8: - do { - if (_p3.ctor === '_Tuple2') { - switch (_p3._0) { - case 1: - switch (_p3._1) { - case 1: - return _ohanhi$keyboard_extra$Keyboard_Extra$NorthEast; - case 0: - return _ohanhi$keyboard_extra$Keyboard_Extra$East; - case -1: - return _ohanhi$keyboard_extra$Keyboard_Extra$SouthEast; - default: - break _v2_8; - } - case 0: - switch (_p3._1) { - case 1: - return _ohanhi$keyboard_extra$Keyboard_Extra$North; - case -1: - return _ohanhi$keyboard_extra$Keyboard_Extra$South; - default: - break _v2_8; - } - case -1: - switch (_p3._1) { - case -1: - return _ohanhi$keyboard_extra$Keyboard_Extra$SouthWest; - case 0: - return _ohanhi$keyboard_extra$Keyboard_Extra$West; - case 1: - return _ohanhi$keyboard_extra$Keyboard_Extra$NorthWest; - default: - break _v2_8; - } - default: - break _v2_8; - } - } else { - break _v2_8; - } - } while(false); - return _ohanhi$keyboard_extra$Keyboard_Extra$NoDirection; -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$arrowsDirection = function (_p4) { - return _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir( - _ohanhi$keyboard_extra$Keyboard_Extra$arrows(_p4)); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$wasdDirection = function (_p5) { - return _ohanhi$keyboard_extra$Keyboard_Extra$arrowsToDir( - _ohanhi$keyboard_extra$Keyboard_Extra$wasd(_p5)); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Other = {ctor: 'Other'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Altgr = {ctor: 'Altgr'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Meta = {ctor: 'Meta'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Quote = {ctor: 'Quote'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CloseBracket = {ctor: 'CloseBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$BackSlash = {ctor: 'BackSlash'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$OpenBracket = {ctor: 'OpenBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$BackQuote = {ctor: 'BackQuote'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Slash = {ctor: 'Slash'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Period = {ctor: 'Period'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Minus = {ctor: 'Minus'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Comma = {ctor: 'Comma'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeUp = {ctor: 'VolumeUp'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeDown = {ctor: 'VolumeDown'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$VolumeMute = {ctor: 'VolumeMute'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Tilde = {ctor: 'Tilde'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CloseCurlyBracket = {ctor: 'CloseCurlyBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$OpenCurlyBracket = {ctor: 'OpenCurlyBracket'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$HyphenMinus = {ctor: 'HyphenMinus'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Pipe = {ctor: 'Pipe'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Plus = {ctor: 'Plus'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Asterisk = {ctor: 'Asterisk'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CloseParen = {ctor: 'CloseParen'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$OpenParen = {ctor: 'OpenParen'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Underscore = {ctor: 'Underscore'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Ampersand = {ctor: 'Ampersand'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Percent = {ctor: 'Percent'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Dollar = {ctor: 'Dollar'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Hash = {ctor: 'Hash'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$DoubleQuote = {ctor: 'DoubleQuote'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Exclamation = {ctor: 'Exclamation'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Circumflex = {ctor: 'Circumflex'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ScrollLock = {ctor: 'ScrollLock'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NumLock = {ctor: 'NumLock'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F24 = {ctor: 'F24'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F23 = {ctor: 'F23'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F22 = {ctor: 'F22'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F21 = {ctor: 'F21'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F20 = {ctor: 'F20'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F19 = {ctor: 'F19'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F18 = {ctor: 'F18'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F17 = {ctor: 'F17'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F16 = {ctor: 'F16'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F15 = {ctor: 'F15'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F14 = {ctor: 'F14'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F13 = {ctor: 'F13'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F12 = {ctor: 'F12'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F11 = {ctor: 'F11'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F10 = {ctor: 'F10'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F9 = {ctor: 'F9'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F8 = {ctor: 'F8'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F7 = {ctor: 'F7'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F6 = {ctor: 'F6'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F5 = {ctor: 'F5'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F4 = {ctor: 'F4'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F3 = {ctor: 'F3'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F2 = {ctor: 'F2'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$F1 = {ctor: 'F1'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Divide = {ctor: 'Divide'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Decimal = {ctor: 'Decimal'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Subtract = {ctor: 'Subtract'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Separator = {ctor: 'Separator'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Add = {ctor: 'Add'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Multiply = {ctor: 'Multiply'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad9 = {ctor: 'Numpad9'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad8 = {ctor: 'Numpad8'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad7 = {ctor: 'Numpad7'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad6 = {ctor: 'Numpad6'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad5 = {ctor: 'Numpad5'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad4 = {ctor: 'Numpad4'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad3 = {ctor: 'Numpad3'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad2 = {ctor: 'Numpad2'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad1 = {ctor: 'Numpad1'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Numpad0 = {ctor: 'Numpad0'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Sleep = {ctor: 'Sleep'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ContextMenu = {ctor: 'ContextMenu'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Super = {ctor: 'Super'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharZ = {ctor: 'CharZ'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharY = {ctor: 'CharY'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharX = {ctor: 'CharX'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharW = {ctor: 'CharW'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharV = {ctor: 'CharV'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharU = {ctor: 'CharU'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharT = {ctor: 'CharT'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharS = {ctor: 'CharS'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharR = {ctor: 'CharR'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharQ = {ctor: 'CharQ'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharP = {ctor: 'CharP'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharO = {ctor: 'CharO'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharN = {ctor: 'CharN'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharM = {ctor: 'CharM'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharL = {ctor: 'CharL'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharK = {ctor: 'CharK'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharJ = {ctor: 'CharJ'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharI = {ctor: 'CharI'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharH = {ctor: 'CharH'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharG = {ctor: 'CharG'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharF = {ctor: 'CharF'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharE = {ctor: 'CharE'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharD = {ctor: 'CharD'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharC = {ctor: 'CharC'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharB = {ctor: 'CharB'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CharA = {ctor: 'CharA'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$At = {ctor: 'At'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$QuestionMark = {ctor: 'QuestionMark'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$GreaterThan = {ctor: 'GreaterThan'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Equals = {ctor: 'Equals'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$LessThan = {ctor: 'LessThan'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon = {ctor: 'Semicolon'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Colon = {ctor: 'Colon'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number9 = {ctor: 'Number9'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number8 = {ctor: 'Number8'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number7 = {ctor: 'Number7'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number6 = {ctor: 'Number6'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number5 = {ctor: 'Number5'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number4 = {ctor: 'Number4'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number3 = {ctor: 'Number3'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number2 = {ctor: 'Number2'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number1 = {ctor: 'Number1'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Number0 = {ctor: 'Number0'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Delete = {ctor: 'Delete'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Insert = {ctor: 'Insert'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$PrintScreen = {ctor: 'PrintScreen'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Execute = {ctor: 'Execute'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Print = {ctor: 'Print'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Select = {ctor: 'Select'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowDown = {ctor: 'ArrowDown'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowRight = {ctor: 'ArrowRight'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowUp = {ctor: 'ArrowUp'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ArrowLeft = {ctor: 'ArrowLeft'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Home = {ctor: 'Home'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$End = {ctor: 'End'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$PageDown = {ctor: 'PageDown'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$PageUp = {ctor: 'PageUp'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Space = {ctor: 'Space'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$ModeChange = {ctor: 'ModeChange'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Accept = {ctor: 'Accept'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$NonConvert = {ctor: 'NonConvert'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Convert = {ctor: 'Convert'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Escape = {ctor: 'Escape'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$CapsLock = {ctor: 'CapsLock'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Pause = {ctor: 'Pause'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Alt = {ctor: 'Alt'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Control = {ctor: 'Control'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Shift = {ctor: 'Shift'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Enter = {ctor: 'Enter'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Clear = {ctor: 'Clear'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Tab = {ctor: 'Tab'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$BackSpace = {ctor: 'BackSpace'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Help = {ctor: 'Help'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$Cancel = {ctor: 'Cancel'}; -var _ohanhi$keyboard_extra$Keyboard_Extra$codeBook = _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 3, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Cancel}, - {ctor: '_Tuple2', _0: 6, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Help}, - {ctor: '_Tuple2', _0: 8, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackSpace}, - {ctor: '_Tuple2', _0: 9, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Tab}, - {ctor: '_Tuple2', _0: 12, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Clear}, - {ctor: '_Tuple2', _0: 13, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Enter}, - {ctor: '_Tuple2', _0: 16, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Shift}, - {ctor: '_Tuple2', _0: 17, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Control}, - {ctor: '_Tuple2', _0: 18, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Alt}, - {ctor: '_Tuple2', _0: 19, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Pause}, - {ctor: '_Tuple2', _0: 20, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CapsLock}, - {ctor: '_Tuple2', _0: 27, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Escape}, - {ctor: '_Tuple2', _0: 28, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Convert}, - {ctor: '_Tuple2', _0: 29, _1: _ohanhi$keyboard_extra$Keyboard_Extra$NonConvert}, - {ctor: '_Tuple2', _0: 30, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Accept}, - {ctor: '_Tuple2', _0: 31, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ModeChange}, - {ctor: '_Tuple2', _0: 32, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Space}, - {ctor: '_Tuple2', _0: 33, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PageUp}, - {ctor: '_Tuple2', _0: 34, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PageDown}, - {ctor: '_Tuple2', _0: 35, _1: _ohanhi$keyboard_extra$Keyboard_Extra$End}, - {ctor: '_Tuple2', _0: 36, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Home}, - {ctor: '_Tuple2', _0: 37, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowLeft}, - {ctor: '_Tuple2', _0: 38, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowUp}, - {ctor: '_Tuple2', _0: 39, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowRight}, - {ctor: '_Tuple2', _0: 40, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ArrowDown}, - {ctor: '_Tuple2', _0: 41, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Select}, - {ctor: '_Tuple2', _0: 42, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Print}, - {ctor: '_Tuple2', _0: 43, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Execute}, - {ctor: '_Tuple2', _0: 44, _1: _ohanhi$keyboard_extra$Keyboard_Extra$PrintScreen}, - {ctor: '_Tuple2', _0: 45, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Insert}, - {ctor: '_Tuple2', _0: 46, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Delete}, - {ctor: '_Tuple2', _0: 48, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number0}, - {ctor: '_Tuple2', _0: 49, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number1}, - {ctor: '_Tuple2', _0: 50, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number2}, - {ctor: '_Tuple2', _0: 51, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number3}, - {ctor: '_Tuple2', _0: 52, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number4}, - {ctor: '_Tuple2', _0: 53, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number5}, - {ctor: '_Tuple2', _0: 54, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number6}, - {ctor: '_Tuple2', _0: 55, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number7}, - {ctor: '_Tuple2', _0: 56, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number8}, - {ctor: '_Tuple2', _0: 57, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Number9}, - {ctor: '_Tuple2', _0: 58, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Colon}, - {ctor: '_Tuple2', _0: 59, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon}, - {ctor: '_Tuple2', _0: 60, _1: _ohanhi$keyboard_extra$Keyboard_Extra$LessThan}, - {ctor: '_Tuple2', _0: 61, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Equals}, - {ctor: '_Tuple2', _0: 62, _1: _ohanhi$keyboard_extra$Keyboard_Extra$GreaterThan}, - {ctor: '_Tuple2', _0: 63, _1: _ohanhi$keyboard_extra$Keyboard_Extra$QuestionMark}, - {ctor: '_Tuple2', _0: 64, _1: _ohanhi$keyboard_extra$Keyboard_Extra$At}, - {ctor: '_Tuple2', _0: 65, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharA}, - {ctor: '_Tuple2', _0: 66, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharB}, - {ctor: '_Tuple2', _0: 67, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharC}, - {ctor: '_Tuple2', _0: 68, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharD}, - {ctor: '_Tuple2', _0: 69, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharE}, - {ctor: '_Tuple2', _0: 70, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharF}, - {ctor: '_Tuple2', _0: 71, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharG}, - {ctor: '_Tuple2', _0: 72, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharH}, - {ctor: '_Tuple2', _0: 73, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharI}, - {ctor: '_Tuple2', _0: 74, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharJ}, - {ctor: '_Tuple2', _0: 75, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharK}, - {ctor: '_Tuple2', _0: 76, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharL}, - {ctor: '_Tuple2', _0: 77, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharM}, - {ctor: '_Tuple2', _0: 78, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharN}, - {ctor: '_Tuple2', _0: 79, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharO}, - {ctor: '_Tuple2', _0: 80, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharP}, - {ctor: '_Tuple2', _0: 81, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharQ}, - {ctor: '_Tuple2', _0: 82, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharR}, - {ctor: '_Tuple2', _0: 83, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharS}, - {ctor: '_Tuple2', _0: 84, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharT}, - {ctor: '_Tuple2', _0: 85, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharU}, - {ctor: '_Tuple2', _0: 86, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharV}, - {ctor: '_Tuple2', _0: 87, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharW}, - {ctor: '_Tuple2', _0: 88, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharX}, - {ctor: '_Tuple2', _0: 89, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharY}, - {ctor: '_Tuple2', _0: 90, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CharZ}, - {ctor: '_Tuple2', _0: 91, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Super}, - {ctor: '_Tuple2', _0: 93, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ContextMenu}, - {ctor: '_Tuple2', _0: 95, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Sleep}, - {ctor: '_Tuple2', _0: 96, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad0}, - {ctor: '_Tuple2', _0: 97, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad1}, - {ctor: '_Tuple2', _0: 98, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad2}, - {ctor: '_Tuple2', _0: 99, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad3}, - {ctor: '_Tuple2', _0: 100, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad4}, - {ctor: '_Tuple2', _0: 101, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad5}, - {ctor: '_Tuple2', _0: 102, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad6}, - {ctor: '_Tuple2', _0: 103, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad7}, - {ctor: '_Tuple2', _0: 104, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad8}, - {ctor: '_Tuple2', _0: 105, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Numpad9}, - {ctor: '_Tuple2', _0: 106, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Multiply}, - {ctor: '_Tuple2', _0: 107, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Add}, - {ctor: '_Tuple2', _0: 108, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Separator}, - {ctor: '_Tuple2', _0: 109, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Subtract}, - {ctor: '_Tuple2', _0: 110, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Decimal}, - {ctor: '_Tuple2', _0: 111, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Divide}, - {ctor: '_Tuple2', _0: 112, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F1}, - {ctor: '_Tuple2', _0: 113, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F2}, - {ctor: '_Tuple2', _0: 114, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F3}, - {ctor: '_Tuple2', _0: 115, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F4}, - {ctor: '_Tuple2', _0: 116, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F5}, - {ctor: '_Tuple2', _0: 117, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F6}, - {ctor: '_Tuple2', _0: 118, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F7}, - {ctor: '_Tuple2', _0: 119, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F8}, - {ctor: '_Tuple2', _0: 120, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F9}, - {ctor: '_Tuple2', _0: 121, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F10}, - {ctor: '_Tuple2', _0: 122, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F11}, - {ctor: '_Tuple2', _0: 123, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F12}, - {ctor: '_Tuple2', _0: 124, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F13}, - {ctor: '_Tuple2', _0: 125, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F14}, - {ctor: '_Tuple2', _0: 126, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F15}, - {ctor: '_Tuple2', _0: 127, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F16}, - {ctor: '_Tuple2', _0: 128, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F17}, - {ctor: '_Tuple2', _0: 129, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F18}, - {ctor: '_Tuple2', _0: 130, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F19}, - {ctor: '_Tuple2', _0: 131, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F20}, - {ctor: '_Tuple2', _0: 132, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F21}, - {ctor: '_Tuple2', _0: 133, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F22}, - {ctor: '_Tuple2', _0: 134, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F23}, - {ctor: '_Tuple2', _0: 135, _1: _ohanhi$keyboard_extra$Keyboard_Extra$F24}, - {ctor: '_Tuple2', _0: 144, _1: _ohanhi$keyboard_extra$Keyboard_Extra$NumLock}, - {ctor: '_Tuple2', _0: 145, _1: _ohanhi$keyboard_extra$Keyboard_Extra$ScrollLock}, - {ctor: '_Tuple2', _0: 160, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Circumflex}, - {ctor: '_Tuple2', _0: 161, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Exclamation}, - {ctor: '_Tuple2', _0: 162, _1: _ohanhi$keyboard_extra$Keyboard_Extra$DoubleQuote}, - {ctor: '_Tuple2', _0: 163, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Hash}, - {ctor: '_Tuple2', _0: 164, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Dollar}, - {ctor: '_Tuple2', _0: 165, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Percent}, - {ctor: '_Tuple2', _0: 166, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Ampersand}, - {ctor: '_Tuple2', _0: 167, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Underscore}, - {ctor: '_Tuple2', _0: 168, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenParen}, - {ctor: '_Tuple2', _0: 169, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseParen}, - {ctor: '_Tuple2', _0: 170, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Asterisk}, - {ctor: '_Tuple2', _0: 171, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Plus}, - {ctor: '_Tuple2', _0: 172, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Pipe}, - {ctor: '_Tuple2', _0: 173, _1: _ohanhi$keyboard_extra$Keyboard_Extra$HyphenMinus}, - {ctor: '_Tuple2', _0: 174, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenCurlyBracket}, - {ctor: '_Tuple2', _0: 175, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseCurlyBracket}, - {ctor: '_Tuple2', _0: 176, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Tilde}, - {ctor: '_Tuple2', _0: 181, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeMute}, - {ctor: '_Tuple2', _0: 182, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeDown}, - {ctor: '_Tuple2', _0: 183, _1: _ohanhi$keyboard_extra$Keyboard_Extra$VolumeUp}, - {ctor: '_Tuple2', _0: 186, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Semicolon}, - {ctor: '_Tuple2', _0: 187, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Equals}, - {ctor: '_Tuple2', _0: 188, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Comma}, - {ctor: '_Tuple2', _0: 189, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Minus}, - {ctor: '_Tuple2', _0: 190, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Period}, - {ctor: '_Tuple2', _0: 191, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Slash}, - {ctor: '_Tuple2', _0: 192, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackQuote}, - {ctor: '_Tuple2', _0: 219, _1: _ohanhi$keyboard_extra$Keyboard_Extra$OpenBracket}, - {ctor: '_Tuple2', _0: 220, _1: _ohanhi$keyboard_extra$Keyboard_Extra$BackSlash}, - {ctor: '_Tuple2', _0: 221, _1: _ohanhi$keyboard_extra$Keyboard_Extra$CloseBracket}, - {ctor: '_Tuple2', _0: 222, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Quote}, - {ctor: '_Tuple2', _0: 224, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Meta}, - {ctor: '_Tuple2', _0: 225, _1: _ohanhi$keyboard_extra$Keyboard_Extra$Altgr} - ]); -var _ohanhi$keyboard_extra$Keyboard_Extra$toCode = function (key) { - return A2( - _elm_lang$core$Maybe$withDefault, - 0, - _elm_lang$core$List$head( - A2( - _elm_lang$core$List$map, - _elm_lang$core$Basics$fst, - A2( - _elm_lang$core$List$filter, - function (_p6) { - return A2( - F2( - function (x, y) { - return _elm_lang$core$Native_Utils.eq(x, y); - }), - key, - _elm_lang$core$Basics$snd(_p6)); - }, - _ohanhi$keyboard_extra$Keyboard_Extra$codeBook)))); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$isPressed = F2( - function (key, model) { - return A2( - _elm_lang$core$Set$member, - _ohanhi$keyboard_extra$Keyboard_Extra$toCode(key), - model.keysDown); - }); -var _ohanhi$keyboard_extra$Keyboard_Extra$codeDict = _elm_lang$core$Dict$fromList(_ohanhi$keyboard_extra$Keyboard_Extra$codeBook); -var _ohanhi$keyboard_extra$Keyboard_Extra$fromCode = function (code) { - return A2( - _elm_lang$core$Maybe$withDefault, - _ohanhi$keyboard_extra$Keyboard_Extra$Other, - A2(_elm_lang$core$Dict$get, code, _ohanhi$keyboard_extra$Keyboard_Extra$codeDict)); -}; -var _ohanhi$keyboard_extra$Keyboard_Extra$pressedDown = function (model) { - return A2( - _elm_lang$core$List$map, - _ohanhi$keyboard_extra$Keyboard_Extra$fromCode, - _elm_lang$core$Set$toList(model.keysDown)); -}; - -var _user$project$Tiles$imgFromSpriteSheet = F2( - function (spriteSheet, _p0) { - var _p1 = _p0; - return A2( - _elm_lang$html$Html$img, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$src('empty.png'), - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'width', _1: '32px'}, - {ctor: '_Tuple2', _0: 'height', _1: '32px'}, - { - ctor: '_Tuple2', - _0: 'background-image', - _1: A2( - _elm_lang$core$Basics_ops['++'], - 'url(', - A2(_elm_lang$core$Basics_ops['++'], spriteSheet, ')')) - }, - { - ctor: '_Tuple2', - _0: 'background-position', - _1: A2( - _elm_lang$core$Basics_ops['++'], - '-', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._0), - A2( - _elm_lang$core$Basics_ops['++'], - 'px -', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._1), - 'px')))) - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [])); - }); -var _user$project$Tiles$tileFromSpriteSheet = _user$project$Tiles$imgFromSpriteSheet('terrain.png'); -var _user$project$Tiles$grass = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 0}); -var _user$project$Tiles$vertPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 0}); -var _user$project$Tiles$crossPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 64, _1: 0}); -var _user$project$Tiles$horzPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 32}); -var _user$project$Tiles$tPath = _user$project$Tiles$tileFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 32}); - -var _user$project$Map$column = function (divs) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - []), - divs); -}; -var _user$project$Map$row = function (divs) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'height', _1: '32px'} - ])) - ]), - divs); -}; -var _user$project$Map$_p0 = {ctor: '_Tuple2', _0: 224, _1: 224}; -var _user$project$Map$width = _user$project$Map$_p0._0; -var _user$project$Map$height = _user$project$Map$_p0._1; -var _user$project$Map$_p1 = {ctor: '_Tuple2', _0: _user$project$Map$width / 2, _1: _user$project$Map$height / 2}; -var _user$project$Map$halfWidth = _user$project$Map$_p1._0; -var _user$project$Map$halfHeight = _user$project$Map$_p1._1; -var _user$project$Map$_p2 = {ctor: '_Tuple2', _0: 288, _1: 288}; -var _user$project$Map$fullMapWidth = _user$project$Map$_p2._0; -var _user$project$Map$fullMapHeight = _user$project$Map$_p2._1; -var _user$project$Map$_p3 = {ctor: '_Tuple2', _0: _user$project$Map$fullMapWidth - _user$project$Map$width, _1: _user$project$Map$fullMapHeight - _user$project$Map$height}; -var _user$project$Map$overflowWidth = _user$project$Map$_p3._0; -var _user$project$Map$overflowHeight = _user$project$Map$_p3._1; -var _user$project$Map$init = { - top: _elm_lang$core$Basics$round(0 - (_user$project$Map$overflowHeight / 2)), - left: _elm_lang$core$Basics$round(0 - (_user$project$Map$overflowWidth / 2)) -}; -var _user$project$Map$update = F2( - function (action, model) { - var _p4 = action; - if (_p4.ctor === 'VerticalScroll') { - return _elm_lang$core$Native_Utils.update( - model, - { - top: A3(_elm_lang$core$Basics$clamp, 0 - _user$project$Map$overflowHeight, 0, model.top + _p4._0) - }); - } else { - return _elm_lang$core$Native_Utils.update( - model, - { - left: A3(_elm_lang$core$Basics$clamp, 0 - _user$project$Map$overflowWidth, 0, model.left - _p4._0) - }); - } - }); -var _user$project$Map$fullMap = function (model) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - { - ctor: '_Tuple2', - _0: 'width', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$fullMapWidth), - 'px') - }, - { - ctor: '_Tuple2', - _0: 'height', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$fullMapHeight), - 'px') - }, - {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, - { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(model.top), - 'px') - }, - { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(model.left), - 'px') - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [ - _user$project$Map$column( - _elm_lang$core$Native_List.fromArray( - [ - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath, _user$project$Tiles$crossPath, _user$project$Tiles$horzPath, _user$project$Tiles$horzPath])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])), - _user$project$Map$row( - _elm_lang$core$Native_List.fromArray( - [_user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$grass, _user$project$Tiles$vertPath, _user$project$Tiles$grass, _user$project$Tiles$grass])) - ])) - ])); -}; -var _user$project$Map$view = function (model) { - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - { - ctor: '_Tuple2', - _0: 'width', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$width), - 'px') - }, - { - ctor: '_Tuple2', - _0: 'height', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$height), - 'px') - }, - {ctor: '_Tuple2', _0: 'overflow', _1: 'hidden'}, - {ctor: '_Tuple2', _0: 'border', _1: '2px solid black'} - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [ - _user$project$Map$fullMap(model) - ])); -}; -var _user$project$Map$Model = F2( - function (a, b) { - return {top: a, left: b}; - }); -var _user$project$Map$HorizontalScroll = function (a) { - return {ctor: 'HorizontalScroll', _0: a}; -}; -var _user$project$Map$VerticalScroll = function (a) { - return {ctor: 'VerticalScroll', _0: a}; -}; - -var _user$project$Sprite$imgFromSpriteSheet = F2( - function (spriteSheet, _p0) { - var _p1 = _p0; - return A2( - _elm_lang$html$Html$img, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$src('empty.png'), - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'width', _1: '32px'}, - {ctor: '_Tuple2', _0: 'height', _1: '32px'}, - { - ctor: '_Tuple2', - _0: 'background-image', - _1: A2( - _elm_lang$core$Basics_ops['++'], - 'url(', - A2(_elm_lang$core$Basics_ops['++'], spriteSheet, ')')) - }, - { - ctor: '_Tuple2', - _0: 'background-position', - _1: A2( - _elm_lang$core$Basics_ops['++'], - '-', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._0), - A2( - _elm_lang$core$Basics_ops['++'], - 'px -', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p1._1), - 'px')))) - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [])); - }); -var _user$project$Sprite$beeFromSpriteSheet = _user$project$Sprite$imgFromSpriteSheet('bee.png'); -var _user$project$Sprite$northWestBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 64, _1: 0}); -var _user$project$Sprite$northWestBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 32}); -var _user$project$Sprite$northEastBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 0}); -var _user$project$Sprite$northEastBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 0}); -var _user$project$Sprite$southWestBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 32}); -var _user$project$Sprite$southWestBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 64, _1: 32}); -var _user$project$Sprite$southEastBee1 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 0, _1: 64}); -var _user$project$Sprite$southEastBee2 = _user$project$Sprite$beeFromSpriteSheet( - {ctor: '_Tuple2', _0: 32, _1: 64}); -var _user$project$Sprite$view = function (_p2) { - var _p3 = _p2; - var beeImage = function () { - var _p4 = {ctor: '_Tuple3', _0: _p3.dir, _1: _p3.orientation, _2: _p3.frame}; - _v2_8: - do { - if (_p4._0.ctor === 'Left') { - if (_p4._1.ctor === 'Toward') { - switch (_p4._2) { - case 0: - return _user$project$Sprite$southWestBee1; - case 1: - return _user$project$Sprite$southWestBee2; - default: - break _v2_8; - } - } else { - switch (_p4._2) { - case 0: - return _user$project$Sprite$northWestBee1; - case 1: - return _user$project$Sprite$northWestBee2; - default: - break _v2_8; - } - } - } else { - if (_p4._1.ctor === 'Toward') { - switch (_p4._2) { - case 0: - return _user$project$Sprite$southEastBee1; - case 1: - return _user$project$Sprite$southEastBee2; - default: - break _v2_8; - } - } else { - switch (_p4._2) { - case 0: - return _user$project$Sprite$northEastBee1; - case 1: - return _user$project$Sprite$northEastBee2; - default: - break _v2_8; - } - } - } - } while(false); - return _user$project$Sprite$southWestBee1; - }(); - return A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'width', _1: '32px'}, - {ctor: '_Tuple2', _0: 'height', _1: '32px'}, - {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, - { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - '-', - A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3.y), - 'px')) - }, - { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3.x), - 'px') - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [beeImage])); -}; -var _user$project$Sprite$updateFrame = function (model) { - return _elm_lang$core$Native_Utils.update( - model, - { - frame: A2(_elm_lang$core$Basics_ops['%'], model.frame + 1, 2) - }); -}; -var _user$project$Sprite$updatePosition = F2( - function (dt, _p5) { - var _p6 = _p5; - return _elm_lang$core$Native_Utils.update( - _p6, - { - x: A3(_elm_lang$core$Basics$clamp, 0, _user$project$Map$width - 32, _p6.x + (dt * _p6.vx)), - y: A3(_elm_lang$core$Basics$clamp, 32, _user$project$Map$height, _p6.y + (dt * _p6.vy)) - }); - }); -var _user$project$Sprite$newVelocity = F2( - function (_p7, model) { - var _p8 = _p7; - var _p10 = _p8.y; - var _p9 = _p8.x; - var scale = 0.2; - var newVel = function (n) { - return (_elm_lang$core$Native_Utils.eq(_p9, 0) || _elm_lang$core$Native_Utils.eq(_p10, 0)) ? (scale * _elm_lang$core$Basics$toFloat(n)) : ((scale * _elm_lang$core$Basics$toFloat(n)) / _elm_lang$core$Basics$sqrt(2)); - }; - return _elm_lang$core$Native_Utils.update( - model, - { - vx: newVel(_p9), - vy: newVel(_p10) - }); - }); -var _user$project$Sprite$Model = F7( - function (a, b, c, d, e, f, g) { - return {x: a, y: b, vx: c, vy: d, dir: e, orientation: f, frame: g}; - }); -var _user$project$Sprite$Right = {ctor: 'Right'}; -var _user$project$Sprite$Left = {ctor: 'Left'}; -var _user$project$Sprite$Away = {ctor: 'Away'}; -var _user$project$Sprite$Toward = {ctor: 'Toward'}; -var _user$project$Sprite$init = A7(_user$project$Sprite$Model, _user$project$Map$halfWidth, _user$project$Map$halfHeight, 0, 0, _user$project$Sprite$Left, _user$project$Sprite$Toward, 0); -var _user$project$Sprite$setDirection = F2( - function (_p11, model) { - var _p12 = _p11; - var _p14 = _p12.y; - var _p13 = _p12.x; - return _elm_lang$core$Native_Utils.update( - model, - { - orientation: (_elm_lang$core$Native_Utils.cmp(_p14, 0) < 0) ? _user$project$Sprite$Toward : ((_elm_lang$core$Native_Utils.cmp(_p14, 0) > 0) ? _user$project$Sprite$Away : model.orientation), - dir: (_elm_lang$core$Native_Utils.cmp(_p13, 0) > 0) ? _user$project$Sprite$Right : ((_elm_lang$core$Native_Utils.cmp(_p13, 0) < 0) ? _user$project$Sprite$Left : model.dir) - }); - }); -var _user$project$Sprite$update = F2( - function (msg, model) { - var _p15 = msg; - switch (_p15.ctor) { - case 'Nothing': - return model; - case 'Direction': - var _p16 = _p15._0; - return A2( - _user$project$Sprite$setDirection, - _p16, - A2(_user$project$Sprite$newVelocity, _p16, model)); - default: - return _user$project$Sprite$updateFrame( - A2(_user$project$Sprite$updatePosition, _p15._0, model)); - } - }); -var _user$project$Sprite$Nothing = {ctor: 'Nothing'}; -var _user$project$Sprite$Direction = function (a) { - return {ctor: 'Direction', _0: a}; -}; -var _user$project$Sprite$Tick = function (a) { - return {ctor: 'Tick', _0: a}; -}; - -var _user$project$Main$updateMap = F2( - function (dt, model) { - var _p0 = {ctor: '_Tuple4', _0: 0, _1: 0, _2: _user$project$Map$width, _3: _user$project$Map$height}; - var bottomWall = _p0._0; - var leftWall = _p0._1; - var rightWall = _p0._2; - var topWall = _p0._3; - var _p1 = {ctor: '_Tuple5', _0: model.sprite.x, _1: model.sprite.y, _2: model.sprite.vx, _3: model.sprite.vy, _4: model.map}; - var x = _p1._0; - var y = _p1._1; - var vx = _p1._2; - var vy = _p1._3; - var map = _p1._4; - var _p2 = { - ctor: '_Tuple4', - _0: _elm_lang$core$Native_Utils.cmp(vy, 0) > 0, - _1: _elm_lang$core$Native_Utils.cmp(vy, 0) < 0, - _2: _elm_lang$core$Native_Utils.cmp(vx, 0) > 0, - _3: _elm_lang$core$Native_Utils.cmp(vx, 0) < 0 - }; - var movingUp = _p2._0; - var movingDown = _p2._1; - var movingRight = _p2._2; - var movingLeft = _p2._3; - var action = (_elm_lang$core$Native_Utils.eq(x, leftWall) && movingLeft) ? _user$project$Map$HorizontalScroll( - _elm_lang$core$Basics$round(dt * vx)) : ((_elm_lang$core$Native_Utils.eq(x + 32, rightWall) && movingRight) ? _user$project$Map$HorizontalScroll( - _elm_lang$core$Basics$round(dt * vx)) : ((_elm_lang$core$Native_Utils.eq(y, topWall) && movingUp) ? _user$project$Map$VerticalScroll( - _elm_lang$core$Basics$round(dt * vy)) : ((_elm_lang$core$Native_Utils.eq(y - 32, bottomWall) && movingDown) ? _user$project$Map$VerticalScroll( - _elm_lang$core$Basics$round(dt * vy)) : _user$project$Map$HorizontalScroll(0)))); - return _elm_lang$core$Native_Utils.update( - model, - { - map: A2(_user$project$Map$update, action, map) - }); - }); -var _user$project$Main$updateSprite = F2( - function (msg, model) { - var sprite$ = A2(_user$project$Sprite$update, msg, model.sprite); - return _elm_lang$core$Native_Utils.update( - model, - {sprite: sprite$}); - }); -var _user$project$Main$update = F2( - function (msg, model) { - var _p3 = msg; - switch (_p3.ctor) { - case 'Tick': - var _p4 = _p3._0; - return { - ctor: '_Tuple2', - _0: A2( - _user$project$Main$updateSprite, - _user$project$Sprite$Tick(_p4), - A2(_user$project$Main$updateMap, _p4, model)), - _1: _elm_lang$core$Platform_Cmd$none - }; - case 'KeyPress': - var _p5 = A2(_ohanhi$keyboard_extra$Keyboard_Extra$update, _p3._0, model.keyboard); - var keyboard = _p5._0; - var direction = _ohanhi$keyboard_extra$Keyboard_Extra$arrows(keyboard); - return { - ctor: '_Tuple2', - _0: A2( - _user$project$Main$updateSprite, - _user$project$Sprite$Direction(direction), - _elm_lang$core$Native_Utils.update( - model, - {keyboard: keyboard})), - _1: _elm_lang$core$Platform_Cmd$none - }; - default: - return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; - } - }); -var _user$project$Main$Model = F3( - function (a, b, c) { - return {sprite: a, map: b, keyboard: c}; - }); -var _user$project$Main$initialModel = function (keyboard) { - return A3(_user$project$Main$Model, _user$project$Sprite$init, _user$project$Map$init, keyboard); -}; -var _user$project$Main$Nothing = {ctor: 'Nothing'}; -var _user$project$Main$view = function (model) { - var bee = A2( - _elm_lang$html$Html_App$map, - function (_p6) { - return _user$project$Main$Nothing; - }, - _user$project$Sprite$view(model.sprite)); - var inner = A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'margin-left', _1: 'auto'}, - {ctor: '_Tuple2', _0: 'margin-right', _1: 'auto'}, - { - ctor: '_Tuple2', - _0: 'width', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Map$width), - 'px') - } - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [ - A2( - _elm_lang$html$Html_App$map, - function (_p7) { - return _user$project$Main$Nothing; - }, - _user$project$Map$view(model.map)), - bee - ])); - var middle = A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'display', _1: 'table-cell'}, - {ctor: '_Tuple2', _0: 'vertical-align', _1: 'middle'} - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [inner])); - var outer = A2( - _elm_lang$html$Html$div, - _elm_lang$core$Native_List.fromArray( - [ - _elm_lang$html$Html_Attributes$style( - _elm_lang$core$Native_List.fromArray( - [ - {ctor: '_Tuple2', _0: 'display', _1: 'table'}, - {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - {ctor: '_Tuple2', _0: 'height', _1: '100%'}, - {ctor: '_Tuple2', _0: 'width', _1: '100%'} - ])) - ]), - _elm_lang$core$Native_List.fromArray( - [middle])); - return outer; -}; -var _user$project$Main$KeyPress = function (a) { - return {ctor: 'KeyPress', _0: a}; -}; -var _user$project$Main$Tick = function (a) { - return {ctor: 'Tick', _0: a}; -}; -var _user$project$Main$subs = _elm_lang$core$Platform_Sub$batch( - _elm_lang$core$Native_List.fromArray( - [ - A2(_elm_lang$core$Platform_Sub$map, _user$project$Main$KeyPress, _ohanhi$keyboard_extra$Keyboard_Extra$subscriptions), - _elm_lang$animation_frame$AnimationFrame$diffs(_user$project$Main$Tick) - ])); -var _user$project$Main$main = { - main: function () { - var _p8 = _ohanhi$keyboard_extra$Keyboard_Extra$init; - var initialKeyboard = _p8._0; - var keyboardCmd = _p8._1; - return _elm_lang$html$Html_App$program( - { - init: { - ctor: '_Tuple2', - _0: _user$project$Main$initialModel(initialKeyboard), - _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$KeyPress, keyboardCmd) - }, - update: _user$project$Main$update, - subscriptions: _elm_lang$core$Basics$always(_user$project$Main$subs), - view: _user$project$Main$view - }); - }() -}; - -var Elm = {}; -Elm['Main'] = Elm['Main'] || {}; -_elm_lang$core$Native_Platform.addPublicModule(Elm['Main'], 'Main', typeof _user$project$Main$main === 'undefined' ? null : _user$project$Main$main); - -if (typeof define === "function" && define['amd']) -{ - define([], function() { return Elm; }); - return; -} - -if (typeof module === "object") -{ - module['exports'] = Elm; - return; -} - -var globalElm = this['Elm']; -if (typeof globalElm === "undefined") -{ - this['Elm'] = Elm; - return; -} - -for (var publicModule in Elm) -{ - if (publicModule in globalElm) - { - throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.'); - } - globalElm[publicModule] = Elm[publicModule]; -} - -}).call(this); - diff --git a/bee.png b/bee.png deleted file mode 100644 index 6c0e8febdc3e84d42f81dbe2482b7202667ff896..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647 zcmV-#29WuQP)Ib2c2y0JAwo!e8Tp90yuLS6g*UAL zaFg3N9%MV8+Znv(*6za1#17xO)G+RV4?#lWs|XhjFvWI&Ajlioh`XG($|(qMwzmBv zdw%EY@cM^?e@XMGPkh&V0VkCFU}FFRtZlcm^_2_8f492P(T1Xpp{IqwcfGeQ@udRf zjcrTP&`5~Yjdu2N^P(YC$Ghh@=g(XGb|=WamzIA^$w$uM)oBb+-B1)^Y1u}E>P81R z=sZ|Vd{gqhrXW;O^?$KM0P^?u-ee~;ud*}U$HUk8W-Gb~D)PltT}c3%hQuhKg6w_0 zoHZAI1tkH<2b_~^M0#$mAtA9u0Ia;v?E>MHm$LL@6agrL7+%l-u)ZhuNGWTuuK^gz z7d=cD_O|%&yS=~ZmI;c{*dH?%+J*L*U^=aY`@kin`y?OpK13OKyv>Zm72i|@%E>4y z1FVG6^PEvA&3pZ zS&7LK+%)G?e8iQ_$b93AB8bnQ|B49Un+t&1(k{L?8TqnzfXeAHp=i-kr2aFeV37MH3pb^|Jd`B zt-~nZUw9yPcQ)JEYDXu3(AO^DD_7EnQP42)KH1HY_!!=Af*&gVXdm1Wd|g|0&TBml z#m=Yba2@b<-J)b80va~L$H1&w7{Wf~-D5p|DDe>= z_6E~z0OC^-yo>>=`gon^Q6dJOVeE-EEAi}L+zXMADk50nXSi8?&<-*oFvT|-gjMzN zlzee_h-rPi@0EB}@AvT}zy`na<7jcfv#pO;t;8Yi?d=~Kuf$;ju(sVA6Tv0*x#D9Q zqSNAFoAfC0P$MrZQ?C*QbTuy9epld{caQcnRN~5&YXyOa!s1kFRQ`c{-Gd__m9{ zAfE}_)W^H5KQISF=V1WMz0cnx@tF9*Ka_VRMYsN-oyS>-@6;0uzt&X|IM|Dxh@B5T z*v7!GeOZdi6JyPELgP##Kr=!04x9-3%~-fu>dRp8wRy z0*u)t*WXV~1juUeb!Vfn1xi81dVCfk`WRqyN{}yet-qfd0aQnr#1KLJHeIZ|o(2&b zHl5dr@afSUy!C!&n2dZ`R1EMl-}tqNfU=r*dZrjPUnl8__~J&q(D=y(5Wlfp>~QFl z^e8@%zj!vU$6p+@BlbytNg@D=kVQf0-SuT9Ne) z^(+_6^_Y5gkLUW47z4i+5daOx8c(ocEk4;zZ&pX|ZnCQ5nE1)3q0|#qhxWv>N!bPO zeIbS-U@bm1(>i(|nrNLR5TY? zJ7}z;_Cp9*-oaA z0eHL#e`!IylV-MD0Jzuy=wAVRBGi8a=*9rv>j3gCz>+h3I##eS?__HpKzM;i0Pcp% zC|)xvRaPzJ<)&>)TFY+el5aZ522gw%Q&VRe@y#>Kll_!9V#t_tn2KaXVW%mvS}2h{ z+ttaAv@ONNv_J?^+*VsIs|SVj5#u;y zAGwB(&RjnoS4PZ#*u+Pn-2BgH#+{B(Y&9(?bUL=Qkbl{%;UvR3HB$+#HtR405QM<> R^Zf^(aBjb-KJ3;nzX414ie>-+ diff --git a/index.html b/index.html deleted file mode 100644 index dbb84b2..0000000 --- a/index.html +++ /dev/null @@ -1,10469 +0,0 @@ - -Main \ No newline at end of file diff --git a/main.elm b/main.elm deleted file mode 100644 index 95fdf09..0000000 --- a/main.elm +++ /dev/null @@ -1,344 +0,0 @@ -module Main exposing (..) - -import Keyboard.Extra as Keyboard -import Time exposing (Time) -import Html exposing (Html, div) -import Html.Attributes exposing (style) -import Html.App exposing (program) -import Sprite exposing (..) -import Map -import Task -import Mouse -import Window -import AnimationFrame - - --- MODEL - - -type alias Model = - { sprite : Sprite.Model - , map : Map.Model - , keyboard : Keyboard.Model - , windowWidth : Int - , windowHeight : Int - , mouseDown : Bool - , mousePos : { x : Float, y : Float } - } - - -initialModel : Keyboard.Model -> Model -initialModel keyboard = - { sprite = Sprite.init - , map = Map.init - , keyboard = keyboard - , windowWidth = Map.width - , windowHeight = Map.height - , mouseDown = False - , mousePos = { x = 0, y = 0 } - } - - - --- UPDATE - - -type Msg - = Tick Time - | KeyPress Keyboard.Msg - | KeyboardCmd Keyboard.Msg - | MouseDown Mouse.Position - | MouseUp Mouse.Position - | MouseMove Mouse.Position - | WindowResize Window.Size - | Nothing - - -update : Msg -> Model -> ( Model, Cmd Msg ) -update msg model = - case msg of - Tick timeDelta -> - let - model' = - model - |> updateMap timeDelta - |> updateSprite (Sprite.Tick timeDelta) - - model'' = - if model.mouseDown then - model - |> dirToMouse - else - model' - in - ( model'', Cmd.none ) - - WindowResize { width, height } -> - ( { model | windowWidth = width, windowHeight = height }, Cmd.none ) - - KeyPress key -> - let - ( keyboard', cmd ) = - Keyboard.update key model.keyboard - - direction = - Keyboard.arrows keyboard' - - direction' = - { x = toFloat direction.x, y = toFloat direction.y } - in - ( { model | keyboard = keyboard' } - |> updateSprite (Sprite.Direction direction') - , Cmd.map KeyboardCmd cmd - ) - - KeyboardCmd msg -> - let - ( keyboard', cmd ) = - Keyboard.update msg model.keyboard - in - ( { model | keyboard = keyboard' }, Cmd.map KeyboardCmd cmd ) - - MouseUp _ -> - let - _ = - Debug.log "MOUSE-UP" "" - - direction = - { x = 0, y = 0 } - - model' = - { model | mouseDown = False } - in - ( model' |> updateSprite (Sprite.Direction direction), Cmd.none ) - - MouseDown pos -> - let - _ = - Debug.log "MOUSE-DOWN" "" - - pos' = - { x = toFloat pos.x, y = toFloat pos.y } - in - ( { model | mouseDown = True, mousePos = pos' }, Cmd.none ) - - MouseMove pos -> - -- if model.mouseDown == False then - -- ( model, Cmd.none ) - -- else - let - model' = - { model | mousePos = { x = toFloat pos.x, y = toFloat pos.y } } - - model'' = - model' |> dirToMouse - - _ = - Debug.log "vel (vx, vy)" ( model''.sprite.vx, model''.sprite.vy ) - in - ( model'', Cmd.none ) - - Nothing -> - ( model, Cmd.none ) - - -{-| updates sprite direction so it is moving towards the mouse --- if the mouse is down --} -dirToMouse : Model -> Model -dirToMouse model = - let - -- _ = - -- Debug.log "window (w,h)" ( model.windowWidth, model.windowHeight ) - _ = - Debug.log "pos" model.mousePos - - -- convert map coordinates to screen coordingates - xMap x = - x + ((toFloat model.windowWidth) / 2 - Map.width / 2) - - yMap y = - abs <| y - ((toFloat model.windowHeight) / 2 + Map.height / 2) - - ( mapBeeX, mapBeeY ) = - ( xMap model.sprite.x, yMap model.sprite.y ) - - _ = - Debug.log "mapped bee (x,y)" ( mapBeeX, mapBeeY ) - - minDiff diff = - if (abs diff) < 10 then - 0 - else - diff - - xDiff = - minDiff <| model.mousePos.x - mapBeeX - - yDiff = - minDiff <| mapBeeY - model.mousePos.y - - _ = - Debug.log "diff (x,y)" ( xDiff, yDiff ) - - distance = - sqrt (xDiff ^ 2 + yDiff ^ 2) - - dirX = - if distance == 0 then - 0 - else - xDiff / distance - - dirY = - if distance == 0 then - 0 - else - yDiff / distance - - direction = - { x = dirX, y = dirY } - - _ = - Debug.log "direction" direction - in - model |> updateSprite (Sprite.Direction direction) - - -updateSprite : Sprite.Msg -> Model -> Model -updateSprite msg model = - let - sprite' = - Sprite.update msg model.sprite - in - { model | sprite = sprite' } - - -updateMap : Time -> Model -> Model -updateMap dt model = - let - ( x, y, vx, vy ) = - ( model.sprite.x, model.sprite.y, model.sprite.vx, model.sprite.vy ) - - ( bottomWall, leftWall, rightWall, topWall ) = - ( 0, 0, Map.width, Map.height ) - - ( movingUp, movingDown, movingRight, movingLeft ) = - ( vy > 0, vy < 0, vx > 0, vx < 0 ) - - action : Map.Action - action = - if x == leftWall && movingLeft then - Map.HorizontalScroll (round (dt * vx)) - else if (x + 32) == rightWall && movingRight then - Map.HorizontalScroll (round (dt * vx)) - else if y == topWall && movingUp then - Map.VerticalScroll (round (dt * vy)) - else if (y - 32) == bottomWall && movingDown then - Map.VerticalScroll (round (dt * vy)) - else - Map.HorizontalScroll 0 - in - { model - | map = Map.update action model.map - } - - - --- VIEW - - -view : Model -> Html Msg -view model = - let - bee = - Html.App.map (\_ -> Nothing) (Sprite.view model.sprite) - - -- outer, middle, inner is for vertical & horizontal centering - outer = - div - [ style - [ ( "display", "table" ) - , ( "position", "absolute" ) - , ( "height", "100%" ) - , ( "width", "100%" ) - ] - ] - [ middle ] - - middle = - div - [ style - [ ( "display", "table-cell" ) - , ( "vertical-align", "middle" ) - ] - ] - [ inner ] - - inner = - div - [ style - [ ( "margin-left", "auto" ) - , ( "margin-right", "auto" ) - , ( "width", (toString Map.width) ++ "px" ) - ] - ] - [ Html.App.map (\_ -> Nothing) (Map.view model.map) - , bee - ] - in - outer - - - --- SUBSCRIPTIONS - - -subs : Sub Msg -subs = - Sub.batch - [ Sub.map KeyPress Keyboard.subscriptions - , AnimationFrame.diffs Tick - , Mouse.downs MouseDown - , Mouse.ups MouseUp - , Mouse.moves MouseMove - , Window.resizes windowResize - ] - - - --- MAIN - - -main : Program Never -main = - let - ( initialKeyboard, keyboardCmd ) = - Keyboard.init - in - program - { init = - ( (initialModel initialKeyboard) - , Cmd.batch - [ Cmd.map KeyPress keyboardCmd - , initialWindowSize - ] - ) - , update = update - , subscriptions = always subs - , view = view - } - - - --- HELPERS - - -initialWindowSize : Cmd Msg -initialWindowSize = - Task.perform (\_ -> Nothing) windowResize Window.size - - -windowResize : { width : Int, height : Int } -> Msg -windowResize size = - WindowResize { width = size.width, height = size.height } diff --git a/map.elm b/map.elm deleted file mode 100644 index 6a5e5b1..0000000 --- a/map.elm +++ /dev/null @@ -1,119 +0,0 @@ -module Map exposing (..) - -import Html exposing (Html, div) -import Html.Attributes exposing (style) -import Tiles exposing (..) - - --- Model - - -{-| Model contains the offsets of the full map. --- We only see a part of the map at a time. --} -type alias Model = - { top : Int - , left : Int - } - - -{-| We initialize the map to start in approxamitely the center --} -init : Model -init = - { top = round -(overflowHeight / 2) - , left = round -(overflowWidth / 2) - } - - -{-| Width and height of the whole map --} -( fullMapWidth, fullMapHeight ) = - ( 288, 288 ) -{-| Width and height of the visible portion of the map --} -( width, height ) = - ( 224, 224 ) -( halfWidth, halfHeight ) = - ( width / 2, height / 2 ) -{-| overflow width and height are the unseen dimensions of the map --} -( overflowWidth, overflowHeight ) = - ( fullMapWidth - width, fullMapHeight - height ) - - - --- Update - - -{-| Action: - VerticalScroll 3 = scroll up three pixels - VerticalScroll -3 = scroll down three pixels - HorizontalScroll 3 = scroll right three pixels - HorizontalScroll -3 = scroll left three pixels --} -type Action - = VerticalScroll Int - | HorizontalScroll Int - - -update : Action -> Model -> Model -update action model = - case action of - VerticalScroll i -> - { model | top = clamp -overflowHeight 0 (model.top + i) } - - HorizontalScroll i -> - { model | left = clamp -overflowWidth 0 (model.left - i) } - - - --- View - - -view : Model -> Html msg -view model = - div - [ style - [ ( "width", (toString width) ++ "px" ) - , ( "height", (toString height) ++ "px" ) - , ( "overflow", "hidden" ) - , ( "border", "2px solid black" ) - ] - ] - [ fullMap model ] - - -fullMap : Model -> Html msg -fullMap model = - div - [ style - [ ( "width", (toString fullMapWidth) ++ "px" ) - , ( "height", (toString fullMapHeight) ++ "px" ) - , ( "position", "relative" ) - , ( "top", (toString model.top) ++ "px" ) - , ( "left", (toString model.left) ++ "px" ) - ] - ] - [ column - [ (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ horzPath, horzPath, horzPath, horzPath, horzPath, horzPath, crossPath, horzPath, horzPath ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - , (row [ grass, grass, grass, grass, grass, grass, vertPath, grass, grass ]) - ] - ] - - -row : List (Html msg) -> Html msg -row divs = - div [ style [ ( "height", "32px" ) ] ] divs - - -column : List (Html msg) -> Html msg -column divs = - div [] divs diff --git a/sprite.elm b/sprite.elm deleted file mode 100644 index 9ee4e3b..0000000 --- a/sprite.elm +++ /dev/null @@ -1,224 +0,0 @@ -module Sprite exposing (..) - -import Html exposing (Html, div, img) -import Html.Attributes exposing (src, style) -import Time exposing (Time) -import Map - - --- MODEL - - -type alias Model = - { x : Float - , y : Float - , vx : Float - , vy : Float - , dir : Direction - , orientation : Orientation - , frame : Int - } - - -type Direction - = Left - | Right - - -type Orientation - = Toward - | Away - - -init : Model -init = - { x = Map.halfWidth - , y = Map.halfHeight - , vx = 0 - , vy = 0 - , dir = Left - , orientation = Toward - , frame = 0 - } - - - --- UPDATE - - -type Msg - = Tick Time - | Direction { x : Float, y : Float } - | Nothing - - -update : Msg -> Model -> Model -update msg model = - case msg of - Nothing -> - model - - Direction direction -> - model - |> newVelocity direction - |> setDirection direction - - Tick timeDelta -> - model - |> updatePosition timeDelta - |> updateFrame - - -newVelocity : { x : Float, y : Float } -> Model -> Model -newVelocity { x, y } model = - let - scale = - 0.2 - - newVel n = - if x == 0 || y == 0 then - scale * n - else - scale * n / sqrt 2 - in - { model - | vx = newVel x - , vy = newVel y - } - - -setDirection : { x : Float, y : Float } -> Model -> Model -setDirection { x, y } model = - { model - | orientation = - if y < 0 then - Toward - else if y > 0 then - Away - else - model.orientation - , dir = - if x > 0 then - Right - else if x < 0 then - Left - else - model.dir - } - - -updatePosition : Time -> Model -> Model -updatePosition dt ({ x, y, vx, vy } as model) = - { model - | x = clamp 0 (Map.width - 32) (x + dt * vx) - , y = clamp 32 Map.height (y + dt * vy) - } - - -updateFrame : Model -> Model -updateFrame model = - { model | frame = (model.frame + 1) % 2 } - - - --- VIEW - - -view : Model -> Html Msg -view { x, y, vx, vy, dir, orientation, frame } = - let - beeImage = - case ( dir, orientation, frame ) of - ( Left, Toward, 0 ) -> - southWestBee1 - - ( Left, Toward, 1 ) -> - southWestBee2 - - ( Left, Away, 0 ) -> - northWestBee1 - - ( Left, Away, 1 ) -> - northWestBee2 - - ( Right, Toward, 0 ) -> - southEastBee1 - - ( Right, Toward, 1 ) -> - southEastBee2 - - ( Right, Away, 0 ) -> - northEastBee1 - - ( Right, Away, 1 ) -> - northEastBee2 - - ( _, _, _ ) -> - southWestBee1 - in - div - [ style - [ ( "width", "32px" ) - , ( "height", "32px" ) - , ( "position", "relative" ) - , ( "top", "-" ++ (toString y) ++ "px" ) - , ( "left", (toString x) ++ "px" ) - ] - ] - [ beeImage ] - - - --- Bee Sprite - - -northWestBee1 = - beeFromSpriteSheet ( 64, 0 ) - - -northWestBee2 = - beeFromSpriteSheet ( 0, 32 ) - - -northEastBee1 = - beeFromSpriteSheet ( 0, 0 ) - - -northEastBee2 = - beeFromSpriteSheet ( 32, 0 ) - - -southWestBee1 = - beeFromSpriteSheet ( 32, 32 ) - - -southWestBee2 = - beeFromSpriteSheet ( 64, 32 ) - - -southEastBee1 = - beeFromSpriteSheet ( 0, 64 ) - - -southEastBee2 = - beeFromSpriteSheet ( 32, 64 ) - - -beeFromSpriteSheet = - imgFromSpriteSheet "bee.png" - - -imgFromSpriteSheet : String -> ( Int, Int ) -> Html Msg -imgFromSpriteSheet spriteSheet ( x, y ) = - img - [ src "empty.png" - , style - [ ( "width", "32px" ) - , ( "height", "32px" ) - , ( "background-image", "url(" ++ spriteSheet ++ ")" ) - , ( "background-position" - , "-" ++ (toString x) ++ "px -" ++ (toString y) ++ "px" - ) - ] - ] - [] diff --git a/terrain.png b/terrain.png deleted file mode 100644 index 693213db570c60f401d7a0fd7050a2742385a66a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3337 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 TrLKus00000NkvXXu0mjfre37X diff --git a/tiles.elm b/tiles.elm deleted file mode 100644 index 920dff3..0000000 --- a/tiles.elm +++ /dev/null @@ -1,48 +0,0 @@ -module Tiles exposing (..) - -import Html exposing (Html, div, img) -import Html.Attributes exposing (src, style) - - --- Path Sprite - - -grass = - tileFromSpriteSheet ( 0, 0 ) - - -vertPath = - tileFromSpriteSheet ( 32, 0 ) - - -crossPath = - tileFromSpriteSheet ( 64, 0 ) - - -horzPath = - tileFromSpriteSheet ( 0, 32 ) - - -tPath = - tileFromSpriteSheet ( 32, 32 ) - - -tileFromSpriteSheet : ( Int, Int ) -> Html msg -tileFromSpriteSheet = - imgFromSpriteSheet "terrain.png" - - -imgFromSpriteSheet : String -> ( Int, Int ) -> Html msg -imgFromSpriteSheet spriteSheet ( x, y ) = - img - [ src "empty.png" - , style - [ ( "width", "32px" ) - , ( "height", "32px" ) - , ( "background-image", "url(" ++ spriteSheet ++ ")" ) - , ( "background-position" - , "-" ++ (toString x) ++ "px -" ++ (toString y) ++ "px" - ) - ] - ] - [] From 12e87c1cf1857c043dd8dfdfd3324139777ac508 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 23 Apr 2017 12:14:55 -0700 Subject: [PATCH 04/33] initial commit. Mouse movement, madre and padre with sound --- Main.elm | 254 ++ audio/madre.mov | Bin 0 -> 10048 bytes audio/padre.m4a | Bin 0 -> 26895 bytes elm-package.json | 18 + elm.js | 9774 +++++++++++++++++++++++++++++++++++++++++++++ imgs/bee-left.png | Bin 0 -> 120984 bytes imgs/mama-bee.png | Bin 0 -> 157030 bytes imgs/papa-bee.png | Bin 0 -> 138697 bytes index.html | 20 + 9 files changed, 10066 insertions(+) create mode 100644 Main.elm create mode 100644 audio/madre.mov create mode 100644 audio/padre.m4a create mode 100644 elm-package.json create mode 100644 elm.js create mode 100644 imgs/bee-left.png create mode 100644 imgs/mama-bee.png create mode 100644 imgs/papa-bee.png create mode 100644 index.html diff --git a/Main.elm b/Main.elm new file mode 100644 index 0000000..3d4f116 --- /dev/null +++ b/Main.elm @@ -0,0 +1,254 @@ +port module Main exposing (..) + +import Html exposing (Html, div, img) +import Html.Attributes exposing (src, height, width, style) +import Html.Events exposing (onClick) +import Mouse +import Time exposing (Time) +import Animation exposing (..) + + +-- MODEL + + +type alias Model = + { x : Int + , y : Int + , animX : Animation + , animY : Animation + , mouse : MouseStatus + , time : Time + } + + +type MouseStatus + = Down Mouse.Position + | Up + + +init : Model +init = + { x = 0 + , y = 0 + , animX = animation 0 + , animY = animation 0 + , mouse = Up + , time = 0 + } + + + +-- UPDATE + + +type Msg + = Move Mouse.Position + | MouseDown Mouse.Position + | MouseUp Mouse.Position + | Tick Time + | PlayAudio String + + +beeVelocity = + (0.5) + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + PlayAudio file -> + ( model, playAudio file ) + + MouseUp _ -> + ( { model | mouse = Up }, Cmd.none ) + + MouseDown position -> + let + animX = + animation model.time + |> from (toFloat model.x) + |> to (toFloat position.x) + |> speed beeVelocity + + animY = + animation model.time + |> from (toFloat model.y) + |> to (toFloat position.y) + |> speed beeVelocity + in + ( { model + | mouse = Down position + , animX = animX + , animY = animY + } + , Cmd.none + ) + + Move position -> + case model.mouse of + Up -> + ( model, Cmd.none ) + + Down _ -> + let + animX = + model.animX |> retarget model.time (toFloat position.x) + + animY = + model.animY |> retarget model.time (toFloat position.y) + in + ( { model + | mouse = Down position + , animX = animX + , animY = animY + } + , Cmd.none + ) + + Tick time -> + let + newX = + animate time model.animX + + newY = + animate time model.animY + in + ( { model | x = round newX, y = round newY, time = time }, Cmd.none ) + + + +-- VIEW + + +view : Model -> Html Msg +view model = + div + [ style + [ ( "user-select", "none" ) + ] + ] + [ viewMamaBee + , viewPapaBee + , viewPlayerBee model + ] + + +viewPlayerBee model = + img + [ src beeLeft + , height <| scaleBee beeHeight + , width <| scaleBee beeWidth + , style + [ ( "position", "relative" ) + , ( "left", (toString model.x) ++ "px" ) + , ( "top", (toString model.y) ++ "px" ) + ] + ] + [] + + +mamaPosition = + { x = 100 + , y = 100 + } + + +papaPosition = + { x = 500 + , y = 100 + } + + +viewMamaBee : Html Msg +viewMamaBee = + div + [ style + [ ( "user-select", "none" ) + ] + , onClick (PlayAudio "audio/madre.mov") + ] + [ img + [ src mamaBee + , height <| scaleBee beeHeight + , width <| scaleBee beeWidth + , style + [ ( "position", "relative" ) + , ( "left", (toString mamaPosition.x) ++ "px" ) + , ( "top", (toString mamaPosition.y) ++ "px" ) + ] + ] + [] + ] + + +viewPapaBee : Html Msg +viewPapaBee = + div + [ style + [ ( "user-select", "none" ) + ] + , onClick (PlayAudio "audio/padre.m4a") + ] + [ img + [ src papaBee + , height <| scaleBee beeHeight + , width <| scaleBee beeWidth + , style + [ ( "position", "relative" ) + , ( "left", (toString papaPosition.x) ++ "px" ) + , ( "top", (toString papaPosition.y) ++ "px" ) + ] + ] + [] + ] + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + case model.mouse of + Up -> + Sub.batch + [ Mouse.downs MouseDown + , Time.every (Time.millisecond * 1) Tick + ] + + Down _ -> + Sub.batch + [ Mouse.moves Move + , Mouse.ups MouseUp + , Time.every (Time.millisecond * 1) Tick + ] + + + +-- PORTS + + +port playAudio : String -> Cmd msg + + + +-- BEE + + +( beeLeft, beeHeight, beeWidth ) = + ( "imgs/bee-left.png", 456, 640 ) +( mamaBee, papaBee ) = + ( "imgs/mama-bee.png", "imgs/papa-bee.png" ) + + +scaleBee : Float -> Int +scaleBee dimension = + dimension / 8 |> round + + + +-- MAIN + + +main = + Html.program { init = ( init, Cmd.none ), view = view, update = update, subscriptions = subscriptions } diff --git a/audio/madre.mov b/audio/madre.mov new file mode 100644 index 0000000000000000000000000000000000000000..e2456257dab704f2b4a956db39eac7a47b67171e GIT binary patch literal 10048 zcmbuFcUTi$x99@`0-+bBO9@DqUIdZeJ4Cwl-XVZA3BC6sMUc=TfFNB&dIu>|lrDnw zCQU(@oA`d;{mwnl`RktbWHM{^UVE+i?X~x0GJ8NE5QQDg-@_Be$OuBozxKF(jyAR+ z5X-5njU^1Y((Sso8i5nw9*9R|AXQ**%8t7!JqPI}g98?-d?Y(G&dIsVgeS~rSA%7? zw~vY6x_stt`N|J3W6m%VA0X6tZzyQq@vvFT%)7ukz|Z4|igF7$o0O_~Hyaee|Hlvi zuGx*Usb)z}C|Si<^>*Zwj*vrV;JPHQ_WAAgp5OW{jd*))VeX3vSYWJXwQ*<|Q=A+8mpj0o$>atqLqg=sTZ zSz6}jOL#v4qk({c5fJ#xfoOCrSjC;*?zjixaC1JtUE{MV_`vYOPh{H}F%lELwChz> zkK07~7;9=-5%I-2_bqikly6~Eo*lC)3m3stk^lB8?-MqyUS&l9uj*6-xHpUquQ@Q7iy8c_DMS4wqa#yKyBHZ4H# z@IrY7jw};25DUpLoPeJ2NlDCTs5t}MaVn*U-mPc*;c8`xZD6M{X=UJSj_UWO<*Bdj zD)M;6ua!x9dJlFVf)CY87xF(tHzR=a(ab27g7wuE*Q)m>mH>iuPI1=YPjvJS7RILH z$w!qgc7awegA(syiPxWRkw-w@Ret%4>+876yzI5i5~qM&_wl%@P5m$z2(Q@k&gD47 zqfJ@pjV0MjqGL}XusJ915uYCb-2OhhIlqw=d&izJ3&O-t4uc~w)}$?TUv?{Ir+Nu6 zag;7BJV67w3ygpWs5V6h2#_i-9~xCH^q6Tm=Y)qiFDnBn ztFA1p)K;Xh$xg!gE7@<~gUV8+$p`_5dv+tnS)ZjgC+CFOD}<#%&ZMkPzm<)Yah!Lv z_PAX=WR+s-)u3i^ZcY+=K$3fGrdC_*t8XtivtGP?IX6$&z&YTOo1IX+@906*=ua6} zgsl{zob-ZAfH#d%DcAArz>8F*D_6gr_}kD8UjD>6YlckB+pj z4F{!ZJR0bS!5|#WwJHB?vXy zA7J{T#d3Y*&-Dg)t*mFKm}(bNxsq&KJ9o(yix^Q=_3^<|S#-?L-A?H7#=(&OiI1s7 z!rrQl1~SVSgcH(JKOM{%t$dxk?U_#Ls>3kLRY{P+Vyps}e~Tqbm$m5oZroI->-F?i zEJa4AQ8)04KD`8Y1?tgzw`7x8V+=YbPGfI=R_9~XoZ6{&L-uC5Kp$&BiDgkjba-lM z1Har7;v`6^YEAV`dOcCuVQW{u5}AR}-REAW08P&{F;7k7gG!Jo{_3G|Ug;7HhL{$; zpiMzszR(DI-*-a&zzpfulS3qM&Fp+TAHPyFR(8>;RQZ+n$cBk7P8Kg)T~cS8FvIYh z*aaFW^zjEcp+BWg4YxDm<(n#>5=t07IZIC9m#9uFp=-!}+U7;~cVkyEF0>8Sh2$?C zzm3=fEV1|zg#$u@tn7t$#eS08`&HR}pKmvH)HGDsS3C92UwsWw9g|D?*{1Gy>#u$2 zP*3ogqlC{xewQ6zMvXKjCY_1Fn{U8=bu&oVM0-hQjHqndC2 z%nA+U7~KE|Z_-0+xYZCAEW4#enZDJf+EtiuouZ)tQ=_@M(|IHo=5(40TjDr2?u2Gg zsQ8!z$5?R4O-KHFF741y+0c(A)b&AOu9hvv2kY7gzzJxRo*{_w!ONUD<>uV}g>N}0 z_|UP1Q^=6%OeOI^&Kr~Y)k5C)nS>>A%%zx|Y*s1*3#wAxmVyQ9xDZfSwzdaVU60(@ zYaW=uT_J849FKmx4GoYR-{xrFaBkNA%YvgSja0!HBgL)3`W0?aH^@;*? z^%HM`Z2vYyVb{Cq&flLjZ0`Yz6pEFQFjjTFx*M@I7O!kV?r5BvX6=5%S!cbJR1K5( zVKy5g)-hgt&XEbJmGwhfFqM2|6P1nt>pX z#31I;eo!`b!|MehUdab9+6DC~rxlBo6ge!P3LbYl`#yKo2u+WI*XIq*&u-~5(Cedt zzP1*^!C20g>XsZ#c8M-#uUR3mU*SOP`a{7&{YyVN?%$_92_Fa|@7>c8cTK)%%^mp= z0V0K@X{+S^nZOmcj_9h}v1G71sUua4CMf!Z=jtX|=IIaZSTX9{QhQma&p;O3z^ z$hza4c#B-IhSqEq1muouAozuoIcXW_k{>!L8o-ol<%eDbvAbbswO1+e-p89Ep=PsfB+7WEl; z_CUsLszHTH5 zk6cfm6ND**T2pB`BqZqir!5WGjhSgU%|4T)^Y^893OQG6oG~ zuu}yBOZ(VXTjDW!Ce;X|fTS5?9|3KI4#8&)lUVv>a_V0gv^h7pho6)S!UWxTJ*V&J zk)-8_>K>HLe!}}^nCu-A$RR@tKPC@llo7ByU;JSutvIo(hb2cpUD)>B{alXmQIdl)>Y_iW)h2XHq?x~CEkqF=&bn@ z#2KVB)hx7JJDlxpXLR1__!EOB1gIvlzvr#sYH!x-Dv_(2;1qeZ3v5fh%6V1+TxoZ; zNh9I-joyys9ga+jMEjM|2uPSRdq#=^2jOED!F1YOf{xp-g{GqztKZ4yXgs-aGJ9AB zF)F`lZ2)`tj&eArB?ek0ysoxgTo>f!j2uIXof))7+QC^PERy!mqdOpEAHwd?W%&Ec=sT&rJKZF)=vx#yA^x^nWl#|6t)GUq`fM)y`<85B7sWFkH2_$M z_b)dhU49VY*N{brw)GW!2ZN!X{(c)~TCf%ORyf2< zDszMTv6Ekh04P~MNN+qxe$P>iyBZ*yJT2`xaehmycN|~gMJ>V?GXrc}WK+Z^h85rG zkBNv)5?QJfItVQ;7k>YZ4npeNH-1zwcvpZHHo$#coc9N~oKPUq+{sgIMm7ksGb!7n zB3v`ELb)hk-Wcn#Fl{Mu^k-6kiM!V?PvLlC0Fo|ydXd8QL4J_25}l#OZy(_J`{DKp z9e7MGkZRk=%*MtDEJ_;B7DmUr>f3Y{Gwc=8+Vv5?uUL3 ziHh#CMK_%6dVODsJ>#4lDS7P7-lkexp0ofvJMmu|oFY$eITk=YuDA9VXL?avj~~;b zdW`SeZ~o%a&Vs6FM1u0AtZi?vd{Qtm@At0bM*{cwfiuE+2jxGgDWuya_Nfa*s6cP7 z!2?FXn33njcrbP4VgW2HGuN^W6)*+0(0S}fE-#UHYcKi}R}thAKfJI;9!xt1YxMJp zc>}*NQsuyW`SG?dW+C7XWpM~TWXwjp?06KGE6nlKyuI8K;V?$1~r9y zh(H9Fa4|is?HI^QaT}bMoy;&{aHVI2x#%yA=e+z%!{XL?Z0p zAXzi>VbrW7rW%lJ6+CKI2W24|;(W{S(OBu=*CQsQHJVPdFFwpvLvmKfE;&V=P3%H| zo3?t-ET2G><1b%lt{iIgri?TkX0i<#Nn?l@{C@}qo%5sW0KjyXnYeQa5zo2`S#*q# z#aFn`$KMvILWY0G>WjS{@uxiX{TN~gMs^LI(pNHRvU0h=#rn&%e4@qngDJC&%k0kt zOMNtg&3R}1^b_c4Io$UAcZT!w(^9pVfDfxAZ<)SdZS+!M+&^UOp=P7kA_GR?P;EH*O#w3&Z z?6;&hUrftqX)X@8TwViz3U`a-V2#wX@+57tPL?mxK(@7QaBz*aWp(udBLC4oM+SY< z1e98%f6a#zL>A?!r?}xd%+JcAZTeH(HU8a;WnspYD#W94X3bnp(Un z+1f0IRl&C{t!7Gj_d>Bsh6)SNKo5tTK?FlLCi?_Pgf4jR?35Y;iL`Sq zXQ@eqrTKj1EEckCUhHTcyHO^!dC@&J@nf-2LQ|$8F1d_rT`)WDl^q>F%VwdSPDfg??t%jWL{irmc!>zYNa z@(CTy4D}_R{VfQEC=xm5e19zK+c$$q6LemoESFu$Byf!+kDF#FvLODMxhfFz%v zdywR*HV_>@fM8uDi878)NDGo>ft39j&_J|is5=E6Y_n?AW!nzHEgYE%+lh|G+qn|D zFFTo+#4F6;M=03O>3iOm^Onj^te1e~E_-3+E~7>|aOI=5S6kbdY1Tn8Bz`vzM-z{R z1QT(~8_6nla+cY8^&_UqekTv)UaB8jug&x$ZGb*Bp!@BnnxtN7{Dvgb_febgeuko| z(WW)TRjVfXV4e)+qSr-K&z(no$>dLGi74goN+wVQ0J};zP^YoR#j68$5-jas;glqbNnTXF zRNFFP58sD>qHng$6r1@p!Y0kCRpL6tUW6Jq?!te2q;1dhvUJ9H0^bTjgCftyeL>H z{CU}MerwjDm=O?$6?p&0s5KOay^_e6l%JyS0p%m$QtmMeP(CgoRZ_onnn*zRJ(d=? z-s z&9{1};f27728hBp$M@ML{V*CR#=aAdzjkW2j{=Hj;XFqH?Go4hTx-dL4twJbf?2#G zE?r%N4xX~Zcr5&OB!Bvd+Y^lOe{ycqw6HM;cB438XKjGiLU2aJJv(Yp=AG6E2YpN# zkwy29mhpy>T20$`;G|WOk}O_si|1#&Z-c`xViuxWUEvJ9jmcM+0SV_Dt0l zu*3wz5j_uHki$qN?>m#AmgB;dgHcDstbdijeLKJ>$DHdx52qKRlBdH>?vjUBPosJkx|V%lTUse%wqE zE=YyyK;vCgatf!eVRT-^?l@n*sQC4|W7E?WA00Y=;=HdCTTl8D z1*QFDQfUu+@R`A$2n{4lg}NxPe>U2xMp|0YI6Vo+bNMj$F$=ye$|qKJ=MG-Vfs$iF z!n4$ZMePOOQir7Tw@*5RPtLuYy61v#D<1kOW~nDn^WP$gjDCekovi`CH;y{5^(XO4 zQZq|s>dT~xe~`|sQd3Lzt#~_?e|vX%J7pWXIYBNWO~CN%xi2fh@SZ;ba4Au<*qqmS zN;9%nP0%0|{UcA<1rNYCBorakf6(jQ4#-$7diX3rl zoVeRFsu3rWZyc6{Z_ce#=W!m#(wj9Lx?diwdhclLjW zr(cv*!;^}+*g;8Z=h& zobMH55hoKg*x(5IR#U7q`>Kh0iSyYjgAm~!Gl=dh^*_1>EU7aV7d`1C3oGYE(qF@? z$`33?n|UH=?)a-|{=v4B*vUcqY2KoiZLeEuWOz09G&pA&TV?8E^kuqb8lu*9)`Ywz zv*ZNJeVv?!^PA1kKsMkZ5E%EfcoY><<^{s;I1STo`%Ts{7n(&BoGA@8;ILg;)neg%l;W> zF@_`=VJ4~#-MC^l=^e@DRtN4Ls~Je7rtY+qpMLEt?0#nQds%(CvtA(V=w6GwUPkeG zqpo$(E;YSQ^=QM<`Rvh*srza9;q_-9IzW_MV|;bO8G61zn5Tdpt}D@)HL$N1b??dE zW5X1@9?wJvohc_-fs_bx*1i&2ZbVBi3ofwnG1G)*9}jM+qK=V zm-N(wj+O|)Him`Ou4Z-fnmstKS7rt?AtMC zr+)3Ub^ftx`tMavXB-5cJP}5%8Hc(Q`~^BN+pOf)ck|QF9@#!h&D0s&$7rvZViv%E zJ)|g3)vrLW7|yW zYjEmN*3#_YEUv+MHq5(Zo$J;VWH=Ka+4#Uj#ij@%#i-HDP+&FlDnCbLx+#p8;04d7HR*>HTJ00yVj{>Dl;F}nG76sQ)?CesBU4`wJ)2F1(#HrJu__@ad~}%2X3dOrNDkFNcl9svF^1`gB1Z3Y z?WAbewKZVGAz)%A4kyu%nv5S_L0OKR9cv6YJT@mO$HV)SV;8Wv$>W_Ujh0V8R<$3A z3%8MhKzI0E-Q9grZvwfv`a0O4UkRFJ4%Gf164FTlr@Xv9*DDqf|Ou z7jM|Vs!$%#ezD^JX^ScBYU5~$s$+Du`JdPaK+wLwE%_a6T)fbltAmS|x4Vy6Q3IR2Nh*uNdwpd4AcIC}qANB94W zBY8`hC8M&Xn~jStIxxiMAAfW7-zlr>pjS#P^ zhagHv3&ua-e>D=|_Ma4^Is}d?K_%w@ZdBf|znzCF`rCs0UpDM0-`40tl%Va==fL)_ uJ^C2uUwR+PE&!$fTTtymQ~!%?@_*6x|2HnG53EtS{3~cS2nh6ma{zrm;F$LX!CeW6PG`_c?&9l_ zq$v3pCJ>zKYGsDV(Lfzj7%L4kLWzl>XX*i2H$jTm@bXu^a5Vic-v1Xnz?AbFc>BNm z8DFMqp8SgGFnb9{jZ53nZ4N#u_NJo}St>^vH_?1sZ34{#zC*t+Wp$mYE;#&7aC-fo zhkn=U)ng|@Fk=usTk!81$3f6RZBl*9lfcy>vSx)%!?)tegm3YR0(bfWd%TUi!0wCz zCx2Y~^rgOnQs(>{y};Tjc>D}ht27%(4eoVL2INg2%6#pEBZKs{v89q&FGS*&*Ih`C zL}sFom(|_ZS9@Nk=wuX<(b#4iUD|N2WPI(=6I4q5XMa>Qq$E>k zvw1=%Ve(dAk3&vL4qaKA6I;=@L#M&LIXAE(-F(2H{rVsLu+UOfMzr|5syPE3@~PBX zR6x3(SpsGF=v?qFaa*5+whmcB=U%C5)f5ueY>Kb4jQ=^Pa~YByH%1nxu{7%8HOdFK z$V|9)A{6fX(R3#hjB-TLGv<`#N@Q3oa~h*Y-5e!b67b;<4K(`;0gbQKG5sb6#7-+E zKhPPfF_dCRM_;7D6bjSC7I3x|XE~S4n036qM){uC89CJCTkN74N*hpoK!9f7U;gV^ z2umx^#|&nA`LoA;la{)t{3R_*Ev7Nvqz<;3v8m=`lHyLa4_`s!| z=hhy3`cU{bNa>KmY+V^zA-w9|ZgGc}jAR-6@-2t5ai_Oc>t!dG@%wB!fF|mm6j>`G zXo`n>Q`NT;2-5ga*o7SlAbHp=^i=%l(EYESI6n2!D1q^9Ooh}FT6$(p9r9dcU2@K8 zYjC1y{QdH)^A`_o+=bV+?pIu{QkK{NZ^fZ03?e_(B3t1nyKup~l??XfZtCbbfb6@tGS zM>N_Q4~)z#=Iy;1OFSzp^$(`{LYw*?SmC(QaVg7K0J_qbWclZcdwpS z)bu;EZDP)iq63PxYP?V+Dgw)wZm(T#e3>$}&c z1-@XUxoX4Uu3sG0h+*WJI1QDaL@WJUh@s@f0n{@jr2VBZ4O8|fDaFeR!v1&F0iVm2 zV^RP&A=L7t(GsPubVgQ-YB5UQez=w=P@H$IOJKQcGXjF#Ec^W?;18WG|U2?A%8wFZNvh<1H9Q+1le zvVzq4o-S=iYBR`^`zHGpXaagn6zL$M8Fp)M?&z&+5vg^Xm53r(Bng3wvtpg5Ib|ZEmr>C74Js%X&QSM4mo5$L0xa zn~57*N>i@cakZK1WF_5v+MMU7ZMQca^Iy?IudV+pPx!z0&}eOe_b`!!^U`iwsDQMPxzPQe<*8@V^-Jfjurm_Z2jdb#)#{pd zZ;8H3_b`~=6ejbQkC25mgQT;plidbH!!IiO+mAl*na?T}Ct4cO_FQ*t%XBC~U0x+t zvs+X6xypt1=diX)`uRFfL_)V_)P2$aF{h0?ux-e09J7DryquZ`7WM9FZ`BAew1PBo z#O1Y0+%#qs3BeSf(Z9lpBfjgIaZ~;rr3>X0(ZA<(?0Y9gvN8v%EByS^q~o~r+v5(K zBMGEUOv;fTyttl;Gvque*Zz3+u|rZ++MD>Vn8Xl>sm*`Z0D2AmJ#Ti;=MeI0E7&oO z532iDrg!!&dczV;k}e#&ITEvnKJN3Tcz!CE9NE~kAt|_7>J&{QGh9eCz4DqpQE{;s zNyEntJ%1|Jj_msZH2r`>`+o_0RV(sQl5ZFw?vOsd#GzkznMTOs0jxjt^a}7L?;Kx% zBx}kh|BDcaNYXL&@lBB_R{idi{?zF0DrqygM3u^WJ;-np^oz6hUPLhA@+t$`b0oYe zVCKwhLHLzLWzE3JtM2zDKjLC;2_YTb`7Ak1=S%%L7N%;}Z^nPImazj_Tq`h3c;c#? zrf9wE-z2$eaxp+BKFLLxnnk!pss?2cQ2{9?x#nb^WlA!BRGPOTCvc`Bh$xxeRKWKx zO07kR$GT!wz1k55=b*nTiKVqnrqoO$`lWeqy)L}&smye%EE9dbxA~7WyV2y>SkYVE zp^oAB(h_}bV*I2$T>Sb}f04j>X|BBLM9^KCCJ!IM>cE&hvjQtUhVMS`*dlr>UX5`NKvn!BzB_~Il#(INaGaoe*I5(r?!%n!ZeprVqybTB>2oikX@|t zGQ>my7f30=`JQ>c-}AFk!=RH!xX^4O_~LIIo};p0P|98A-CXVc!X?ue&GAM$B3vBT zt=Y2*woZ4E5`@~FOimkRN}~L(?B^@s&|0~5qJoqgcGK;^sKLCmGQ;QU5gH`5zJNIl zuA`sz+a-w@fh1a!^0=-8A#dg<>_!%hBu8^bs)_&9Upd0=jDk?dl*v>F=#Dn6hcP zaN;j}AE*QXpa%F@_V?TxTyiyBDfF{(j9{6p6|a+C;Cj{5eUfFDgB(rf$SEmubuoO0 ztd>mT{7psitq%$WEn4iu_f;woM}5nBv0UcND|a~b*O|USgY%Sl3z{$TQ?hFT@uiNy zJASVUF25~JOk#{$iHU1}&2%1D`*-oKd04zI4Kd)wl^2>TG5*f_!C@AND@#viPeG); zoSEDwDXUWuwV&Ds4nJICd|LLbD2a_Kn*Yh8H`d;LocW8ac4>VmCprBQ*`tz?r{v%q zxNtQ3CstS=pJ1&++0>NB@lp8?-YxM-i4DPx`h+RJEMuaBw&ljH{0{l(sp09k9&wlzeBbnx z;6jOuIY@$21H&%@71c+HveGZ2pdQPOju{f4c3HQp!%~vQ1=bFrEV8Awbgg%<*s$JY z4gA^Mm`v~`J?SD#W`4`Rwuw(xj6jm34yKg?ScSobf-12n5xaf~#;vg1Eb z5L_oz_M<$f{7)UztN{;wlmH~`{~um@}ai-tqmXiY6c;<2c!_75^@Yaft9I0@0V zij2>p+yM}OtqmOtEu9*htiMh(I(fHRLfgf3gJRbYwdF030P6Dqi|RVrdG0h_3(-oQ zA)Jp-K?Xwxc|6`Jr{Q{8LIbk1DUwTv&d>6pi@ucOY!!WJljrrlK`WCYBRXp@p8S zCZ!Jym6LW|9g3SE6T}yv!jsNk@?6mq4%V!6>ME|9Wua4*qJNLn%q$*1-95e4^7Eui z?VkL}nxOfI2YBGK*?w`zrEdq+x4G3y4vtt>Q8kcVwD&3>pHsqe1+j$wH`IpRodZIN zH^1jgdK9UO$seBRXs}`Wbj|!p?hCS6y14nq?SUjcaMbdJ39q3}q;T$!|IRy~as3#N zE)6ngk24UCy8hISI(p5gsg+4!v;X|tqBi9E0{Ri15N)D-DMfwBCf*l0x#Mv6g?!KS z88{H?HTb0_7!^Gyx}?<2CKAqIA-VBfBJ@KIT~$1)pLP2YBOJ|^6WkBm`!4|-D~&Ho z{M2L`4h#xRN2LE zmE|-}6DEm`ehqhwm5kP3_(h#+OAr6)Pif^zRK2CBL}xtXzGV`~38M=g3NHWXiR(bI zsqypc1k)gv8fBz?#Tt&rZoL-tuFJ^vuX}6W5Gww1rzJs9RVPaWAF83J9;ZxNUKBF` zOaD&u)}#oYdni@rW(a0x3mLaiB=Aqy!QS1E1;Z*;3a>*k&KuMKH_*nT-291$qiHBa zDf6C^!7zlEFl5EumaUu#Ev>YXfM!9;=PeDB4IX{Ti%#U)r#{tvoQk3fhA8Ni_oDKp z(bnqWh%``I^AZTm?u;qSN!Ye#hmTe_vqtn&?nKPJp|vD)r1gmAk<`+F*dn+54Yy~H z9vGYv5`YLunw7eqn=!Wez}#w|-u!ra@JiBR5ZGQWkFs{=_7N?N66H!{N2-tLY2gy^wRDBN2 zN3CrEhJ56NEe2D&UaI8_2^t6Wm&H~YYG%WXqj*)l{Iu*10hKQXkP60 zb(VYQUBE_c|9>yt)5tMm&TjoQ{WP?^jpEV*DN~!k*LTz-N~Vs;)53gj<G|N5qy)|!&tr_XE#Db!n1j@-qYX`}A+`%0*< znYjz=81fwZn^35$My83^E%D+qb8eH6{(V%lm`q+MHG&&7o@pR6cU1w{1Rtm!vsb!% zU_GKZfHuE@35v?f8X$NykjPRU2a0kROGY7bGA8L?f?jbO_Ma1Tu29L5WtAxVs!m(M z6h|w8pO^!oCX?d%o-Gd7%nHk4;=6|Q{Oep8ti~jV#@KGq%RnQ82h!ZS6F%nF(^C(M`tbX?7#nV#FpH(B)Zyy-Q zsyo6YBb_g8&=N8;CDj#1y?vpLBVeZyXa;ABP%U38*u+TVC)fi!_2j#2wMa2ubY5h8 z+o;G`!InL-HeY!$?JEz;KQ-?Diw4JtKd%J38&RQV=$mo^LrAtqFJ)$$*af|}?&$I` zpc}&{G#JaJr!E?ICuP;GCnA`altthCbrFBxH$3$1@QU_*ZkK1b#wS?+7egs&9fncx z{dXf-cF%iU?__kF%lZF&_b~LuN8F3VIND#p=j&Q$hO!5!iZ|CLxge=*LmWRoK7t)A z?)}G{8Hv_-H=yL&hd2L|6Z8m|c{#1HaM9LU4g3DL5jIqByFTqNawd?g97eYE8U zug$RUY2c#o-?NZ~;9VTF`6CPS5Tig9!GNMi*J!+5VJYg$?_rhmkTo~TK(gMWELSZH z0pVthX_X0a0|SVQMC!8|R_o^{nz15SjI?5!krfHPMsTtlX`^>9C8go!4mIp@Q|gtS zDpdzj1uy8x`@+!ZF!GWIxYEMe3Y(B5u6zPLV>Wqld?;YftRFLC^jWP$E~y7OaXarWro3`j=;0#x zOXRMW(I~~=okSUFcktJnjkN*o#nZY&2haXa|JX*XGCwpi%e_SCEIrq=1XB;y&bTrl znK)8{Wj3pWv_>VrKSJ5LCbI!$_-w<-BOI^r4t$Vo+r4}ZdnBO5anJACH$C4r<8n+6 z_vVp!SbioAYe)&QaTD0|j^ObV`{_0~_}ov^>T`%;>)?1mC=X5DjL5^#t{vPb4IC^v(j)@_75r&n zMSf%`4#I8~^;{K7Cf}oz9)KB3GDoIW=4upeXR^!a?g!Aw2r(x-iy>hdmDn$hHpo0? zbi^5$=9#yfEzzXqgHs^@X3k;tjU33X|KWVDYA6*S32G&lPg0^4bvhLqisu= z&q;nn3zlWfiM+{OL*$czy#3S)!oFhx3^Pa{G7EN1l{FSIEfIRySqV38r?{W+X}BiB z>&x^ek$NH5{4wsSt%PibyR!~Um5fB)6R2jXpFlJC`OUBBBIqkxZYVAJWFy6ktiLRLQ%gFgT)P=`$KG*K4JHWAXj3%WH=T>NHqmw@O(0%0%K zt2Em5oSAMLCqp^+fss4w_~_v}LU(dfl75^=rToI93jlyA)9~*FG+Hn!Z^PdTKZz;x z#o@sEL~}1a#}9mbd>$Tea^E|``ldMIfUqZ9RacipHA|PZTsQexmgVGoM4h{2h1T=I zw(8(5e#3`u&xJsSIbIaM6B;EGG5kR8;4Vf$%_QRvL9>Zeq>@AbW_igxVz$XkRqV>h zz&6^)seJ8$@swNnodk}D3|I$IRKXW?4J6Hrz41k5<-#3UQn5aJ2K@1xu{ug3OslH< zf_X0Yx$jHMHwjPk$!ZxhlRcaSL34agpJ%C5oICOpWvI=B{$|R9U1l%qs5GjA5{8Gt z;6mdez1+wIcj+J(Gn(P6z2U%pXn7$5x;m6ob7l52w%odH=tg%Ugq_8VS%);>GU`~4xXcm54w_l5n*rqJ~hOOsVT z4<=ppBEo@%Mc&e+1m>#*Ba5P(dSVVF)%>TrT%bguEe%s6tZ-r`grE*& z49lS(b7>CUp7lqLZHWdAa1^A74TJ&tj7Oq0&oS9iRGdBkj+JaRHU~4F`y8iUhi{I- zqy$~?ATk~pEvKCgNO5463-wK`9s3~<6Q&-Ds+C4@ufQGU#6_hb5B(lgrD?OZJxbCO>yk7Y7Sz;y1-?f|pH!9wyBYvk6$? zGsnSEuvpnvl@eb|l*}%QwYp`1IKDv%3L_sx^QQc`Wc(3QBreuHr$(1M;zQYyunKC! z;n&|F%U7YYJ^JKeYYzaRi~nCZr64SA z&ponokTztz=JelgTp%2WsSRO$J%&cG+Q^E1`7+F(=yx#3*NP@>eXYTgTIZS z`b^fc>N=6s9Z#(d^c#$)tzrBnV$(<`v_&>`bUQBxqN_mh@qjXmUdq%rGA+zwvUGx7 zs_)6}uOSNR@d_qfPQeh^J>nC>(ZPa(*`HJmb|8fok%kFjO6q@=EFhK9D`-QXT(}!v z=_>eh=uJ7x6owG+wpezR?r)IMIC1=jSmhwJuUv$We1%Tz)ja9l7&4oN<+!H2)z>24 zKdmx~@7F(TxqSr-7R-^{#6}si!{3CXf4c0a%3DcZ0UJNp<7~OybK8)4lP{aW;=xzK z`c=HsIKlG>?YG!Z<4yPXcNTzK64PgoFD_p@(xa6R*p3FaC3=dL;zC;SH#o~V^4~9e zsIBgTd-qe2&K7+6vt%(W$iJ03{G@gdnt{qJLGN>bS125Hcv#8^dn2aYk)mlk8lqy$ zx5UN_NptE`xHV51eUJ0y8YasV>bu((3Zaz&0aMx=)Bm<1;0-qaF&2Ox%s(l9(@BKNwZF2J@ju63fqgAKD4!N#erNuJ__p zzT8Kx(N%ADQ1?aUS8+P04fU;E6djR{kuk@B^l8IJx6Nx`?;j`XFXw(+y_tPG zjnfV}cFo%4sTX1FfdR16sX`Mv>PB%Q>6Ld@Fs!2`n@E+=x-9toFDiG53zjm1`Fh8Z z)2P*3zxX@Y+ZU1xN%@luC3@UMo2iNgf?+lJ(UPEhdI}?VIp_*ajEHboK4eq!9y{-Y zO*WVY?`Gs*R>R8MAh#rIAIx#)vK%s{Qi}aawpiT|lt>$CuTCdhd9fjCj~rMVL=;|9 zm*~W)vs|XpdWh7tHw>(VlO`;?S~U3)ov(q2rO3l&nV{$gq12=M9+BSAft^vzHd<*Z z(V>}R{3g;{S1xq`bn@pdITF~y-#{=783MaUD)L%_7N6^xDRFJEgI+W8>O#=$z#G#V z&q}|*Yr2a`Y!U--;{pB<=^DJ`HpriB+N+krTea_m!?j_bV36ciJno2q*#fd>7b#)` z-ok}ug){}rp|fhdiC3ennB@p~l)Dft2}#t|qAx+-RhQ`XO~G|tT1-<~Mg@bu`atLF z^RH!bI42bCD=n$tknPx5+B&(Pv8DN|G_w{2#R0WKk`D)%RlUEbS@VaJOnv)@%huV; zJw(`=wg}=H2X?k$KqZ+jLFFXG*COd|kZtaz_iSyzK0U##H0} z7^oB6=YJ;_LAv4dxXR(0`V7kx!B1*Z&||I1hKGOr3xj!sG>Z&wKm8r@Hsqc%dFx!a zNkh==Z{OGB|CT7^?`NO?n7C|fef>Ix!LC`fmO#~}^? z!FYy4M$a-3!cvL4YH9FFbRq}dt%bD?j&se8K;y&^f+H-J&E zKIcfy5jR~8;EW{Vj(YmLc*yz%u;AOqWw{R(CBG2S?(?91EycVjcG>LA(!OwiRC&^E zLqiVCeaEg1H^6|QTC%`(&9=|^tGv%s<4I3S#EJ)quR%o~D|yXH@W(^BV|HTY%#>zC z^oHP*Pd@BvMX-23nF4D)2hrQ$_RznV<{NZH9z8m4U(1GFucF$)@e2?w&WyX%UlKh!S zjC1(X5#Qk`gCvN+BlYl-$2IEGiCwerV})5JnzhMyj{pFgrwz}lD{(Hgpxfi!*8_@E z=rh)sqlGYTara6`g!T3cdJ3uNz&he*F2HJ{_S$_1kxK$$5yp=P-rkv`}MJ}Od~b{H4` zE^bm4Zp~DTS@Pg*C^WF6Es}>;9(u0i&eo&@jepIdyug=eID6ax9ja9}Wb)c60Gn zRauhDHr&*QLb?J>V$8t$p@C2}kx_RUj@JR%06rFA3vu*Y2)-ymEN_=QJ4T55@y}g) zq@CP)R~79tjrny4#IbNlt7ZF>Mo{Q`LcSq^YIJLq)a7B8j#-L|ZU4YL{KX0Ym}h|u z0B#=4iWX_6C%-gdt88rss=4Cx%bEpnY2=SYbKcA#MW;oPg}e;>qiP>(Qcs2GE_Er< zAl;Y*w#kwfj3=ULMSa*sMxPelbgIGU3202i#jrG5>CDd*@VGn=kXO*nE>Y`XprKnC z23<2QCiGakRi~6svmw+mmQ!ZW&{I zl*59(1}4|kT*Mzrom=0k&kAP~K_m?2k<4gDn%h)u@Mz0}yCWM;$`3^yz~b`A6lX=) z00IcbCtBJXeVH11Ofq&lE*r!I8=>#;ZJ+m4r@RUfv80u+`C|Z!3ngE4ty{l|VEoi! zUGw`Mu4X$vLEW=XDl3oU7Gbg@JD9M`vn3&{b0?MGI{u&KJLhc_MY22|(g(hJ`+V{1 z#Fwp*2=$EV@ITU`t+q56leOzMPSbPYii#3+-L-0 zKW0O42c29@ZH>fXf~Fcq4QyytNP04d_U9$Cz#J!d!yZ1u1(E~#4(#g4G764ELJ!{6 zfFnN8NUCi*FxlPs!bdehq>bqw80jJ%uu}M&#t5=LZ@y#Iqh&E^kU3dTq}1Ty_6<_M zJJ_=ln#Y?}Lk>h_$?`Gh(22#5LGM^2DW_mTZeWUSn#{}5?6uUf2e{zoMQWn82Q&+j zwqQoLO=2vOWvh$n2Z$aH2EAgl+Na3ahFM!3RGA49Tc}FYk2WEA>u_;mqe$6dZsylE zURr5?eC2R+Mww@BEhaMnCNR(rGJx%PlS)?};{(PKAjH$Hv|E{`&zj-v2+`~51^}=^ zlw+)3h`4^+l0iTZ*V0r5A`)FQ_vr2QQoMDZL=DEZq!0E$e(xe>-Rx#-*3V~P!Rx$y=q%u~dWPXWHfPn96)lv+jZf`y@jejX)>h2%(yPYQ zy7MjzzBi=TF|qew47lRH&6!oxB~r2=#$6uMn+I2%?X2fsO9t1rh0RufAm&P^DI_c@Equ*#TJ86C&X=--s8 zSEh$b&QraueaMB*kW0VP@bit@@b*;A4MOTb)rlN)p|*?(&nMAamwN|IhU^n;L?w=N89p6zfwk&8zC%BVNR7o?f+=tBe~ySnQmeQ3I>aBgCUv-V|V2 zU>UF8H$8rHwGM_F{J%6eUAz9&loxHsxUt7O-8y192f#C{?mJNCW+DqWdiE zZU~CMefY#3fhP#*(1==N2i-isLp|uL`3f0_$95jGUzpIXMp~b`-c9gfb-9}U+uKxb zU6lTQ($CEMc4{B^m~A*@6>jPv)=2=PUi2c4-NAd}y>{3mv-kK+ekn5xIBclx`UsOJ z$F57D>PxdxQY3Cxku5{AbE=K4X|kSQs$tdDPB!WN_mrSNZK3N*HGzm#&#IOtWhWck z3sdj9=Qdq`NnZS0g<&h1O#p?r%*UIgD`=BD6_4nK;G9ANQi^wmFk%-rNB18`SUUuk z=0y+A!>nSi5r{qiVZSsV{dl>Lig4LIccP02obfh_NPFU;ANl)i_Vc*JgPh02%qFUF zAnPq^sLNi_&GY!Y^Mwn3vCe=de!M_l8ZANA-r=3#@qQ2{D; z5Y}xCuj2DwK!%1IBD=0FT2J*`TvSzXZQ@UKK)YI?ykq(Nw8Mv0SI$3F(9LnYzM07c zJY{O_x-BF8{%2=guMr2%S8IAmBCR8u*1W=p=bnF;J<7eHNm#OMz|u|}L{2&6xQq2W z(3lR^H+czvuc@e6ti(mumn9-WSY7Bsc)~EYu zm>|(XTPXYv)7|zURI0z~kAg4?5~v2+=d=uLO_J{|J?#m`W4NWjcn6eAmlSO!7%?=K z+sh-K)Nx$abUK4WJkkpxngaW|jWx73h|j3JTocv+vD+SjAy;V49C#{36q3P0pZ6m2 z)wpkFH9v2B{r2@jafN;Bjmi|3;^MC(-+Ciun6*A)lDmgJQwS^%*lvA0MG4fdu&J%( z4Y%P^eFCy1DG{1$k-l>6yO$)sEM(4FL{vEGpMR{F<`9Ckmsuy zRKarpGoDL9`HK@|k&-hlhk)=n=}ph_XbTizod#gvXf9v|fgZiPSGV|#i>nZ{5^db> zDb-4&1s_d2aP=^WND}+~N5x`T2!h=Gk%8@daafuP-$JWb1i<#;KceK-aUOz=4Ul7P z%3!SVZq>;SZ(66jc6=$JLUX(7=r2laElN^GP)Q+bnJw%Tl*+nIRqh4kSZ##&CHnGd zvAiAi4nc2Kn}0!QRJWykN`dTE@PZc(qga`0VMDzt7F6W;rrO6&i>$9{C-P4?D4S_p zkppsNGnoC`Rjv*{3qr=oZp;}cep-@(9r=somA7!0oEseusH{`^NPcPSkMe+txB!y#9N6K~36who zQC}y*>f)-sk~g@K_PLcT9X98DN7Nj#>GCi?*K01!bCp-m?lUAS48OVcO19aneIsw$V?UL^4F;!(Tp zT~OqmSd$f0RnCGoxmo*lg}zbD`MDkGZ2ZI!b`o+*Fx=qD2mj@K&5hPpT;m3LDB{n5 ztV6X^$~!GqR_1PHTD)17A4E1#LSFqc_^VSfm?HySc2A2cl8yL08vISjCf;J~LqN`* z4XnBWB9j-5dNPag!9waH^V)%3arJ2@+L@4T*Iw9q1ygRvzD`cIhC0eNJ~du#mW8JQ zbVk>mYqlu_Tt}32!PoW?UDMAgULAPsK_x1}TtDWFvdk9w@c7-m(w$UdwdK&2Uj_G_ zMst7p(7n?{Mw#{>-uhF2?ArB3PHtEFLI2D8DmigJDU~b}I{D(G8HK0A?a!)jr8LGp zdmoqgnj6NMJ_Yx^;s2xEPixmT^FN;B8!>H_?+V?omC*=}GOjAd$9zp;{PdBT4Rcb$ zNID^^T?-Zj?EQ-^4m>0!RedoN{<4`0IrsR(nKRu$wb)(Te=Q5jCpnK?^6XM3P5*Y43rMQ9Epljh>_IsTdhoC2kEj*rl_8 zn}}e#NjD?YWW_{78zC}!((2N|vdaa9*hFRg6%lxDwL#dRoY@PyDVf{kx5+&Q=)+Mr zMyY9WqUB9caht#wqbiSH;$YSjyYt~Q!QTsrot|&is+7!PRrDWc=gZqZj?3S~uM-RZjSXT#A zEWrcKu28*4?=M22>}y9NHaIfJm7=7SFcc#t&J0UaeEY1G9h~nUqMI(pm?G~6p&A31 z@jr8R^X|PGIPzdH!{{mbgk~M_dxafU1Wd<^U8!;$q_=rT8{u`uH&ukTMH28($g*b5 zo{<4v0neuUPK;W@5w$Vs9qMx^kD%?|->XfwJ7)#TAG*pPB{&Xkc+QHBuZ%FrJ{Ov+ zq$#7*lrKaKtj3F<@G3Sj+QG%Qcg^k@Z5J${KV95q;EN_>E@^(#KEC}eI%l0kQ5tdi zwD#Bcevxdh+p7(k2fzPJlmX6R_VuclAkHfj2`L2XLH^+XK zp$LS@$7`>B`1R0#>DJdzvH88~e`OO>_m6D%H_E#Z){16a!(kCTQ=aOR>TlzO0jNKK z^?ktd4&CdYG=E<}6qXo1&al$3E;a5vR?rn&d97@MMUV}?7+KjEPtG9vIcgPBLF#PI z_w|y$AdaJJD)O#DEM6TZI$V^nN)KRMXLI`}kxgWd%@5UG`9|!RjX8b0`l;_DZQs8= z7EA#ZT8NmQ>Tzeueg;(7~nuv?p@~GmMU)p5qtbzf9q{%Epz6B8wY9VcmusrlVS@Vk8gv}X93yw0Vb-I z%E47xFGZbz&WH9P@6=j2zmf*)vu$Z4ItYan6z0VSQI*@ib*1>k5&0eXaXPcb7t?VM zQK^G`_Qzt#B5vv1F~^+Da?UWX(w_l^lx~|vDUHLCr0?C;h!vx+j*Y>KL641|hmXV) zt-li?q79vRHo;EaMbN}>;HO#bLz7YD6vf)u85+l_tiq-0J}`Bp_!J4?p%E~U{9K7&}F4lm!A zdrZd7YLT?e{j0$s6P8Tj{{jIdMNlufLLz;0F0qi=zf9&2E$hjVJ@*B@q;mMsR zZsy0DjEx3aFRAPQajH-WU`tu(x^69?Ls!$wm?KnKkz|t*HYJA9;Pi~GZ>Q)KeQ0B0 z(aC824E?XiQzVAROP`yOg86g$|^G&ssOx z<-*s%UMj$={CY8=8M*6$usM{m8R|bFUy%Jf;@4i8!X%@DJ>qbxIJxYX+8<_vEK&Hg zJI108_*1dN7>+S&w>B0DUFQBu@!rdAtb`Tr;7@-)#AuIU)fnwz`_Fg{6w|i4(&QoQ zguN#0m-k|0ICVw?6L}MjUmh-uqWX%9pm0`OlY!+HQ~}l9XB2lETZJ#Tc3Cb&7QQma z4&q?!Wx)@qV{;&kydp7P$#w@)X??|2&je(UuR|JL|3XSj5M#*i&Pq5|VwYw&hxR-n zS{f)nJ?60eQ0Qb}XjiZ|s3Hw9Yq9Um6{3qSpOX1wSqPY~0gqRi$I`*Biz#v8n>ruo zxBtGX8ed%>Bn|obyvzEYr~SM4%Pt{J!vA@mWWB#cRzg<^SIx=!-&UUHyt9t;Yc;p} zkBw}pe`x0SPT9vgSMO;*NkdwnT_L8ZxH6p3%N<^D%H|lu+BzEh#EWeXN<)L}03-0v z;3J2;6#UuQqXM6l&tmP*n{Kk>_GUl7cM>m7pef#0C7G^3$lTzM%~IT>YE>+t(wZ=t zK|44}Bp5NZE&g;O{cR_o7M;?ed^7IG(j&?e=FPW>7Z8H)VUR@<7lLj)v4`TDk`|>v zKVO9xeH3Ps-uPRi&*&hP4W6kEqYV3{0&WAxC^UIX=v^OS*G()s>5@->21-?FsLkJ$hJHp%~C9<}io z7k|FE*z6o}+2wug9b8U-F(c;auFj|ASTUNW?H4VK+>othH94}++3NW=z|4A%=SReT zjqa-rryii9Q(L-WSBR+E(|?nG?(3>q4v%e%PY|3U=#%vT+QHZn1>trQZGV z+}w08sjQ?PI&1>B%gCz>F5P42{@E=6vOor>JPLk-vX=nhgmokGdBzw^#BJ(^3hMgsxxvvnKt$5#Y5j4n#A->YaQIk=)3ZRdx?Y2 z>ilMsAlduuk&|PeW}h|GlErD&l&F) z@G`_mk;fW?;1KzfJxRl!Xm{1MNtQOwH8O#R@Rwum9vr}GDva*XW@))^_~0At{m{9A zW{~ffnx~)dOIt?gChACw87 z3rza_HI{qEzf-~0q#f)h^m1+{Iquf4*jMLwde5#T#s3e6%l+#mpDy=)YJTNoRNYvj z=0O8{*x2)r1G21w*_whT#0y2_>Fr65U!Sza#{Smloo^fuM%Mth!=Sg^@AJu7rH;nZ zBTqWMQxO)(j24Th=S=V^CH#gP~xaBVVHM5If#V zrDXA9e44Wit-Wc2^toCQ<2taj>b$lGIY?z696%C=puet)!BR%q*G}z=p7$9WZv7rq zigo=A{3{ea1>Xv))eE3}iaZcH9XC3Z1#5+nM}G&!>JP=tROFrx2)hMhj%0JSwCiDm z--#23V}BC)D%nc}7zWuVkjd=oL9qTG907Bjiim(UI7^kpJiOCEvJu8k-dqRK2Gr2P zHh^EiBsS zngIv9g>uWI%;x=C;S{2D*a83?)c0DfZ(qMCp(AK>e$PFqPvz(~F^Fte+nk7F^LTOV z^?8q~?;(%{=_?drv!@}!v#qUO5t=4$ycT=huE?P^Bdc?XOob)g-FinfMjp)2ZHaoq zXtLW_V@26NsvjLxR;fxD+*G7zeM!WSem+-X02I=(8thWsf)PI)M5CK!u0!cl3@(9F zikP$}Lll#CUrUNV+aRpSe9mle=ChT6m)5k%xQh_8IE|kUypuEiyTMbRg|n>5dKq2H z7aXbo&nPH`qnc*pW%1>CgX*nCnS(x!!oC zEt@{mydk;n#S3xNq{bEH?f8G47l8i@<}0l@q2(LtftAvTXT1vqFI(FIwIR5nlu77H zTCD1V#Y0qu;IMZ*L}V2y=U&7^P2N|-Es3{3BuoI zl0rX=Sx>@#MBy{O;WTQI*Bo%6J-kWl?0+tdLG@d(A%UNhnxi|D{Y3O*mXrJNrrXEF zbB16Gr6S_#-!X)Bog;v6c#Cww ztSI72AkEyk7JU%q;*Cc3z=n*bLD`pQB<@ZkfP5ij4Emg#M2pVvIZZ?HE5bNUtvl%O zRl2M%vD8(|^I7t`s@I6*(@sA-F)*BZRV;+5Y;sNn#G3v~wku#S?_3#eY+p-rG|=?& z&f8NDQy4cET#rWTj}+}z9X$5l-(MQP^yeWWF8pBk;_A7+QeTY?g@&599sAo<`DxqR zi(p;eDpCkN=VBP$HDgG%q^~@4z`>(?nJ^zJ&~pURaa>96hH{a+izlLc&Ie(mTvUwt zi0irF#7$YG(J6g?B~8PSi%N~4LNj@vKZTtbJ%t==_nJZ|GfSe7adyb^#fZmIP}3|` z8jZ7@c^59ibiv6#YLR3u)c5+qn`iQlubu}@zt}v(2Aiwz^6pK-_sfm1;yX35YSlIx zRTYgFEn)6E9|*5RXMRqi=_`|ayeVIQ*H39MFh1@0QGdc|B{#>REb&pm-KTd^(>9WC zWwiQz9W~Pz-UP(NU$md(k^7|>Z_(RPoKOqQaX!odLLaw*qM;Y^Y*dyO8!k0o{}?*{ z(B@U>si;)x@YJ4_Oj*kBV^bu;(S;M$6C!!jpJ?>WGqknX6zcht`<(?5>Vo^W;#;a6 zz~7)fU)S1CJ_4SXdr4_2;`Ec4>|qz8U&Nqx{IFLSr68=du0U#SPbyoH?sjq$ak{uv z@Uf-ROOQw-xmq@Tc@ko4*Ut{s>Zr>}%{C8Jd|gcXJEi(QkC&b|X1ykhA!1=%$? zBHnq`;#_h=&L&JaDw(h=r-&PUPkv`7alMB^FMywcpcQ*uHu3e2BC@W?<#|$4iB{4W z!k`FAYKLdtlEg;*vCevbACQ-{R2)1g#`YfoFuEU zh4oa(hJ_ziC5;Apl;Dd3GE6GOAa-|j4iIbb_QvuL62WC}9`Ia_81yM!r|qf-y~o)sq_3lVYzU+UWFFe9ykFWwm880?37 zzt#ym^~`K;@hrtk#+Y=3O~VeUMxQZ7vSvYWViWY^;Sy-iTC{vv$sM|lP8nxf$BuW# zg(gbn7%7Tjr^Sf(nJDmetiOirS|E1?PYE+VLhVr^>IJjsE;Wiy*3jR4V%g+GXHAlE zpPCF~uR~Xz)Md4)$%Q!i-Pc3}e)5Ba4}DOJ;-B@+N-N@zWs{77nNmb!AEtMr z=QAn2p4g5C{f|voL0K{087iH3X-G+!5J(L*ggq)-4sHVp$R3l`a>u_P|M1~bLHpMs z&bb%9PQpy*FVgU9$WyoA8^SOu`_x z*djKi=O0E%GVqI5JXJp6Ecx+jCyTLNgiL|n$)}n=4SDcetJG37$=K^b9FDS9E~CIj z6mtuIiAZBL{Dsw3=eO%*;ZQZ;!fUiq6G0?bI2_r*tp)v}{vioe-yDI~J2y8)caJNE z?6c(af3mI*e-UO9?9jR4P}la!rHaI&Zf4~E`VDEAz!1J<@%2ddLHwM?j02LHP{a{ zOeoa<-m%LTk3fwspj;98mRg7FjO-uY6CGLLbJJ0NsXf*`mu)0XudR^-a$6u4RM9Ib zu*xlkyxY5h=T-(!9*tfU-OX5Y6~2-nF&UJK*~dn>ui?7W7aee>{6iqr=)5olY?sJGeSvf4mSKeiIeaBl-NJ(z_$0--;!z zvTo--_9v$Z<<`oT`RCZc8rx|uUSqxDjE}OmRL_ZboyzKo0A+Hwam}JdNpqdc5wx;c z`U51JXw_<@Oq4*;jLp%V^OOA?vHPADS~ckM#d1bkC1gmpWysCk594U$-4#9fSRh&(kib>$3V zb5u!H2CqcEEn93X=Ps3cmr|+8l%2b7bL3YIW^GBNctL6hELi+hK#67W0Wviaek;x# zxD{Fr-_}|`P}wrc4(XpP<6Rp0pm0@h@G*`Url@gq@$@J0;VFCErRkB-uY|JOH+fqJ zZb|F_CuCrM#n0fO;2ADNjS9S3kSiT(8;>jJcb}Q1&!3;p z&Yp&3GufnNPfP?aL9+9Qn4CPMvXET4EZJin!nd+4%P@l>*heaQp!m#^S5fPH+P4#A zY?IJ-EV3VE_GP}3O)ugG>l28HY4JUE*XxL^$?QYnJg@SU^feX&LhKn)qjZ|Qe)+3o zESoQ%-aUA~C(eCCmb|( zXE&>E`BxTR<%ie#&TYSVGd!vQqAU1#89tzyQ{AKaqHE+si+>!3EjqwcxdZA|JRBlv z@)gtK@uALl$uPga7J{FE1{*gDhwl`N?nv(h8@&EaPdT@vWw3f>OYJ7Juvyl|+NJ$H zQ-dmBQW1y28z*XBGT4Cm26Ey!H9Cb$=@7zk+k7T zORohPazkm60*2*ZbhuY{u|$kh#%2fj$P+h0BW5KM?eWHTq{FUwmn~w+0H(b_8(%;? zB@!>2PMNiY5LBs8_lo~3GS8!7eotuxLr6j3)h(Heg>*%N;tbw#6=?p^tlSJV#dGVQb#svXg z*MXjyP? zH(kXn$n*E3Hsg_K)uj zMfh7@yoEfG1m;Y-?*gx-*v!F1?ph7PSe{cSs+&9nw*8 zhYY12;NC@%JJft78BuuQqa@5n4;t0P?z&y4Bx_ZIp?weE!%{S+%|iO-c!@_g#jzO| z|DhvfaAK)9#dqRhZft46^uxEO-Ha*ZuM?PdCUX=cTh@IWhxSNJ&ox$hf2y>h+`IF0 zFSN#kX)mu?9y|y;QTJvks7r)Py8BoCSooW>xV>w3EbDU*S@WPXkvg$YR}b{;QHCRm^XPA9)K7D+ zG%>)012*k4G>;h}#B9~2w&2IV(0)oV;p`L9(@a;uQJjUagrSI7rq!;A zAf(c{8`2NY;{AsfI1om@?nJZ~?7(^&!u#PeZmC)T?=qrOiNqI!3wikgmnvnWxbhlJAB zv>G{1Kaz+WhO4Awi@CFk%z-=yIV6;>WcMdCe1TZ;9?NiJ)6`XUxV4{rs#j%K4si_O%# zL!u@2vP>V6`PHvvGAhT#HFhb0%0Y~*b7hLua_z_ud>;da>yypsl4rhlAdo>!cR$#u z8@zJPdu^loiy=rB8glOB^=}aBncp`fLdz$sjbOTCv?|#VNfd(Ru@6flLVt}lL`)YE zmX*BgI?}y^AL=iLGwBV%#q}8>Np~O=f>DmCwJE&z4<_DcWJuyQ8NF5>eJqLd0mZTI zj#x8y0!2U{KRv1Fl(}SoRdkJY{nm?o?!e%oK&W`1r@bVV`;sAVVk> z3M%ootGD;l!+o(K6@3@>^Ja2@Ymp==cuvY>Nw*X=f0E3#8;gx#GFnz0EtC>#;{&~M zZ=yQ*^0v+P)<*`o_}Goz`$e;kNmSbiV6D{No%ffSyev3?99k}0&M4bDqty*vIM9!( zPXmGyAUK{6PH_C?N6IdJP*gPKWGi2_HYk(c-)3q=yO#~GzmNRMc^&^pcit^Va1s)Q zn@tdA9;LjxDw3J;q(**Z7#ni50KC}aGc|Kb*dQ}xIVDg0RY3L^5A5V`7G16mxDq0) zP|2!!J9NIGCD(V!#Bz-&&}l9P%koJoV(ZfC$&7~-!ZDQ7I03Z;<8iw^aJbCaXaZqJ z5t@tpF3-L7C@uv(L2sQTg=QG*nmrYJam=WBh87wN%AWb{U3P4O+AzANBt!WemvL55 zt#XwB4}cTA<`Eo@0@QK?aRvc4uO&ntB)iL}yP}HHjUL!wd4&?N?3wR3P*hIxvC`H_ z;)P$tN!lZ({4P+6%!&81h+-x<0dwLhWkYGGMx=DNI2#5#Oq^L7X=-A>Ru%A(^{34V z{qJ{M_P2*P6Q{&4ku5UBWy|&I)kSPhH$+s}Zes&_L0XVusioPOI4^0&5c8Q&t;k8L z62obt#;?#+k%e47!nNQV{E{q%Y}&)kA8&`9>eXu8?M1bIgy<}`Ddn$DA>Qx&u$FVH z-yf(Ii99G3yX6|(U(Zf?@555eKZ6=pV9^m(H%55BXfp;4%;lIURX40zzcA$)%0H9$ z$S7XS-S%DM+lo=c@^n3!_O~>;aV+&3hYnQyST%BW!x$cQBwr&AQ>>}b*&%TwuWDUT z3EsfJs{(GCetZ1H>kxtcaT)kY@3i>AQ;lgewRpqQojn6bLU(=Jr$ROI(e|waW9ut} zB0G*B`b@h%tE0s1-h8#4AO-!@s#R zL#XRQQn|k^G>%cY74g-~GPHp`0{?oFs1#|7AHT-ibTgp`Q)e12Q=%qxa*5tH>{%e# zg2+e??`_*cdqph|$tCH-6x_Kb9G8c9)|2LSk)>p;CHDKyh=wLuNF0p*R-6f5fvJ_` zXWnpu&7JA7DK{|t*fUcJpL(W~Ct}Z+@nGcAw{VEW;{ zFCx7^j$$DWKM{2-1i@r$A@l=rW2-ks!ZlRcP30D>8hr8m!B~1xuF``Z57$7rh?CCg zwMij@I`0PwrL!Dh)?!TJ3mH+0We)^m=?}_RlM&aB>APx``RTl+;}r>ou~snsT4Lkb zs!w(Jx+7w(uiN9df>LKF?o2O|_OzWZE6-ld+1i;23Ajd8lL`OiH9~!i>o2}}l_It} z{7QsknA%Q3QD&;&p_hfH`woB`#cO@=B80G`I&k4gAzN^+^lod%Ksn8{N4UnF&6D7~ z?Ta!Q&XR0A6(Jz1zW40}^`vFOELexB+dnkimz@V6$E3-2E{uu1R#?0b%^cqf5Zy|U zI3C|Q7-}~+w9kgF^b%$)dT5Ox>g#~pGH>;Ws9|_?cVbvmxxUuFE1FiETn?Vm8XB5> z_B0X99P5x!W^nH66$#8j^UTs%c95Av@zT{J?D^6I_^;8NzYHJiuX`nzS6-Xj;tOYC z`2u}tz87KK5w4e_+MN-*6Y(u}cc;W4eprX&aL(TX6Q7pydxkPL9{yg| zc9Wv7eqS>B>dc0-d^akvrnWz1P;ezd^LxQbt~E;m4m`SrhN2oe78X9$Y)ue*OaAOS zuaT6=m2(s&SIU(h)hMH~yn|>cN2oY-intD*67zwSx7Fd-eOPo_sb*xwwFio#X@&li zzYn&8eeh{n$iiYBZm8EPM(!gr_lZIN7m4XN1t(coE7Xdp!6$O^&aU8uV;fqwAnL`I zwoGV~4hLfp>&)Vp?rhkoy=NTq%58?<16USKdc^ff{eU6W|MuXI$G6caeFpm!# zzX@kLJN<=H5IFJfdJC!O4Qa&$<&elj8Y!o_-O<|{kggQ6dZKLRe(_RPjrOON!sN}3 z9dF6m+4lXd(>3DSeJ@iNa#8d@A<*YOSMCdDIKHzbh`RtYP(W*c{m%01khBH=7e!l3 z$uZM*tvHeiRkyEXBjx1_Ztm5&GveE~$2+6{bdf^FapWOtioxcHcJ~;`UpgxXEdBn1 znfUcSc%7KwJMzb8H%w*Cd>}Vf^Rqu;MX#tCVb<(v_={e`XWzjz265+(i%^PIoAyG# zy6fgDx#ONAiWIW)w7bNUUk`6XkF{$Fp;_*l{=na0S3iXjCx7Fb5O8x05;jU(Bu*<~ z(x?)BgwD|C)J*>Yd?&0dB6Ye?uFPlH0O7#BM}xiBSdp|1Irlk-@57oOFSn}_0~AAw zZ$ko=-BQZc4KdTa(>KUglF#)^P?27vm zGZwKC+1yvEDOfO+g$3c(-H9>mR5`-}8eUuq4_Al32$OgrH2*aJu_X&}UDRK%H?bxI z%UU}gl-w9lZZes$@Zib0*H#8!9{ss?`Cduja2AhjWhU5IMnv%fRPyqcG%WKcLPt!J zq-&OYB8;a{iW}oF!tW4ZPH!9Kl4uBXp43cFVi+s`PS5LYb`iWuOqh&LwqO}z4Teq#=l7yD*7>w%m3P0X+?NrflfDqeAynDOUb-_w)^_8 zdf}DdahI(0$jqm*zbpe27J+avhSYAPb6$pXRssv}X>toD%%Q*8FKrJONLWSfPaSLz zEI!zYDVSljwvY-v{Yl>b%Sm%Ga&@!LhS}zF{iA(nr|4NLNn?m0eb0$M=p^$=<52$k zP1Vs&C*<^gZoiR5Kp&#z1g)xXV{H-y;sEU&`sVY;RadU&wNUbSj}JTcplb@^Zk)9} zhK^*1%4=35uXkh(Q8NgWJVwpsPVY%*$9cKI6Z3y;Pz|JRvIwONlU}RO=tz;HWU`9yqge_f^=)ek304Dc8VXtQ2Dwj zrhP;=@9d%|N<*i+B{B`g_U^}SS#US~+y^zT$_9&-CCX|qQB2LUiD+Q2nw~V)Ia$?A z)C;Jgx-ic_#Xo_COyQ_XS=fXl&wO%T?#I4PxS`Won}b^I$sJ+kL!~4dwVKIwiV7ko zUWlxhlF|(5>n!ghx`^o91$S# z;1upyI4ulaen3R1bKpQ12O54}xYOT04!O{&>*vRTo?ty^k{E9;&r#x-m|?x$=i`H=Sb`jXW1k%E(?iSGMYuI znGMJCL^-N5=U0`v9@b2{_GI0Uc@>eZ?N8BHE^#HD)DrVD*V`*V+@WNLRge4%WjtDY z@>x{!qgP@FuFYBArBR%gu~T}?b<8^C9P1Tft;Y%2ie}z$-Abhj+%u)mKR&`x_e6Uk zKRU!tUYoPDevQzDSI3LW$T1!(7nDNR7!93mA!2RMRbX!oER-?$P%g9ALI2oPD7cT5 zBjCfizpT^x@1h!?yj7mD22!$)%Sc!cNC?6UPq~e<4Jq3<@KCf01(XJ9f|~`w?$%wk zmL@tPAucH;PFwy_Vr&-RW`rY=YntbZLKt20b+p%)fvyNpb zTZU2zn);y7Pn39FPgeKYq)GZtlx29SS<0G{)#+@akkED%Sh1X2+7qjMZVG{7mw+pS z^t-0K$i|@kN1(ANndoUh#yj7+W>932R&Hnf#`sn4?Hy^&)K}ul8&` z*hk+aZ5h0;%ibMdSoZw$DUXF(X9mw5+3H_T!)l+F;atm}kU4X~b8npbA+Y^69K9me z`(5J5SwXJg!V^gua5qKu^gO-urC$6+TsU7#nD2e0b!UwzIc~3uLJUX{KVro9uEJO< z+wFshq^0d^$57V0 z#YUgMDFencW~T@C-!Zxe6`?E}VU)o*A>OgNIJ>6Z$HLTX1NujnU^^-oY2_ny5emt; z?{8?#Q748r?2_COh8D>YvM$ayM)LFYS3I}{bNP;lVG~Y|M_mS^J~zb$3e*o0F8sdc zl?p5tEm3Vnqx}QDfV`4(a&kSCnfG?lyeGcAg8^w9kyv)9j zy~i2sR?mkdF9G=qxA)fx+xst;h3s^IJKF?k<*&;vvOkF78yuagsnk=nTjuJ-(|l&K zOx#qPJC#55Xg=XuEz=hNx`mMrQ#xKZtNRcS-S`rJZfpKJ`=G{0?2tX%ZSf0eBMb%K z&He4Qs3(a%=2`OFI7-8UjpZ*E_mbYyYs>cRCo^$hKW~;@?vBcj4V(MZZxiZNB zrgCWW)s+Z!zg0JXNvfG}8C>g8dCtGvuP(W8q$Y872U_Je zGPoqALJ8d92FBvaSYj)ilm0^|&o+@snCraASE}R_%hZ_PSjjK=*M`e@Q%h#KEAYhd zVv5Vj_Gr5}Mp-5z{{(@NMtb-F3dJDZpjZ_bXcTooDUgKWBHn%5D{hg8#ns+a^o@Xs zkV~0((%6G+lPIn!+y^x?Epi^AJshKU(B^L6@r+?&2$z>DW7f?y4 zMAd7a2Cd+l#r0bOll^fn6`5q$l_CAKR}x9r!p4o(SGmL?621=km(p>N-fO9k;zKAb zchJ~p0S*mu(9;y{u3G%ko045LQudL$f{<{Uu*oGRP=8He8HDfdX^j^8; z!8rTumJCx!aMY#NuE{!Q&8M2haY+yDn7=+>l13_6sm^YyebxXR@b6;j^a=%(bY(}W z>_u-EnU5TvU+QdT5EMj~S_?tTc30RBn6mL_P*}YiySk4@&ng#8&p1vV4XH-RGMHrx5h6ES#J=CR11V@%ma*Wk;M}nyE#!^WCZK39!*&CmYEZ-ahbXlt@>pX^Qzt@5*SlBHU9YY>1#r3LHw7s zht-K&+R}H`Uz8j)r!iiiNlWb7^Gm;9X12+EKlW_&-PNKm<3|L>B2$JVvsFG{LM$cB zR)?#<_syxg@ACd)$N6W=%%5Bq&WX$<5dN(8m;T(8YY&JhT|=<&+r13`c3ksXvre7e zL%H>*?)q~-$Jo}t>HUms3T+t|cJFa~OwS&8*_;wEm!ZLd8b5KqrSYrV`3G0)p3Htd z)zWhMr|?U76~SPgw$Ji%Er$4Tu7Q~uJ1IXRxN5S!ZM=N(RYqd%<@tA1~d7&!8#i zM%X=5!t*KJA~{lJpUkNBR*{4m=8Ik>TZ~g!?3$vKo-hz?-cK;!aWbr9FMh<93u{C& zvx(%bLT)37mvrI_GN)RPhmG+msJwNdl~t{3D)Tl}Ho^qz*m^2Q2Nl(A-55V*#sMoN z%?1PoT?SmqKj5-A9^jylVu{9w0D)Qo`&}G}0a%CO(C{z)UmJk(e{JjhTkikO!5|Pg zB8=eb2bdkh{QkDd@ZW9zyEmZS|3QD7_+Rb(Tk_vxI{ylPIhZE^@8b%HA_4gS*Ksw2 zY&!oIRP@IC6aK9l8Weu`&Wrz$ZVUGr9sgHp z1pXhr5T4+1Xg{RGF0+Rd{6+qe8Dc}j-24IAD>N+h@5%m054r%no#wE!hxFfv2?hb{ zTKsbv0CvVB6d!uH%@`LKCkAi`z~nk{x6OI8ZeB=1TY5RJc9&6!@~Yn0p!Eo z$^n%C1`-0AcRv&WI@JG{?JuVRwyS?F|9k*-{#H7y$N}IsaQ(ai1Ospb0Guy|Er2%y zxDFr%KmmYU03`r&06YM2ST6=ZG5~u3;Q*QeJOvc$n$0rM5FB~7{3h=c6kG~uc zL1O>&`U5`mA73~${-sVI|Ijc%dL{=Dz=Z;UvD-t7dr*M9YjCi?hrEw&E>LMf~NNAdqD{2#O= BIxqkL literal 0 HcmV?d00001 diff --git a/elm-package.json b/elm-package.json new file mode 100644 index 0000000..06b086f --- /dev/null +++ b/elm-package.json @@ -0,0 +1,18 @@ +{ + "version": "1.0.0", + "summary": "helpful summary of your project, less than 80 characters", + "repository": "https://github.com/user/project.git", + "license": "BSD3", + "source-directories": [ + "." + ], + "exposed-modules": [], + "dependencies": { + "elm-lang/core": "5.1.1 <= v < 6.0.0", + "elm-lang/html": "2.0.0 <= v < 3.0.0", + "elm-lang/mouse": "1.0.1 <= v < 2.0.0", + "mgold/elm-animation": "1.0.5 <= v < 2.0.0", + "rtfeldman/elm-css": "8.2.0 <= v < 9.0.0" + }, + "elm-version": "0.18.0 <= v < 0.19.0" +} diff --git a/elm.js b/elm.js new file mode 100644 index 0000000..b7eac61 --- /dev/null +++ b/elm.js @@ -0,0 +1,9774 @@ + +(function() { +'use strict'; + +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); +} + +//import Native.List // + +var _elm_lang$core$Native_Array = function() { + +// 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: [] +}; + + +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.ctor === '[]') + { + return empty; + } + + // Allocate M sized blocks (table) and write list elements to it. + var table = new Array(M); + var nodes = []; + 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: [], + lengths: [] + }; + 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: [], + lengths: [] + }; + } +} + +// 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_(_elm_lang$core$Native_List.Nil, a); +} + +function toList_(list, a) +{ + for (var i = a.table.length - 1; i >= 0; i--) + { + list = + a.height === 0 + ? _elm_lang$core$Native_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 ? from : from + 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 + }; +} + +return { + 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 +}; + +}(); +//import Native.Utils // + +var _elm_lang$core$Native_Basics = function() { + +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 _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b; +} +function max(a, b) +{ + return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b; +} +function clamp(lo, hi, n) +{ + return _elm_lang$core$Native_Utils.cmp(n, lo) < 0 + ? lo + : _elm_lang$core$Native_Utils.cmp(n, hi) > 0 + ? hi + : n; +} + +var ord = ['LT', 'EQ', 'GT']; + +function compare(x, y) +{ + return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] }; +} + +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 _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); +} +function toPolar(point) +{ + var x = point._0; + var y = point._1; + return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x)); +} + +return { + 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: F2(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 +}; + +}(); +//import // + +var _elm_lang$core$Native_Utils = function() { + +// COMPARISONS + +function eq(x, y) +{ + var stack = []; + var isEqual = eqHelp(x, y, 0, stack); + var pair; + while (isEqual && (pair = stack.pop())) + { + isEqual = eqHelp(pair.x, pair.y, 0, stack); + } + return isEqual; +} + + +function eqHelp(x, y, depth, stack) +{ + if (depth > 100) + { + stack.push({ x: x, y: y }); + return true; + } + + if (x === y) + { + return true; + } + + if (typeof x !== 'object') + { + if (typeof x === 'function') + { + throw new Error( + 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.' + + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==' + + ' which describes why it is this way and what the better version will look like.' + ); + } + return false; + } + + if (x === null || y === null) + { + return false + } + + if (x instanceof Date) + { + return x.getTime() === y.getTime(); + } + + if (!('ctor' in x)) + { + for (var key in x) + { + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } + } + return true; + } + + // convert Dicts and Sets to lists + if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin') + { + x = _elm_lang$core$Dict$toList(x); + y = _elm_lang$core$Dict$toList(y); + } + if (x.ctor === 'Set_elm_builtin') + { + x = _elm_lang$core$Set$toList(x); + y = _elm_lang$core$Set$toList(y); + } + + // check if lists are equal without recursion + if (x.ctor === '::') + { + var a = x; + var b = y; + while (a.ctor === '::' && b.ctor === '::') + { + if (!eqHelp(a._0, b._0, depth + 1, stack)) + { + return false; + } + a = a._1; + b = b._1; + } + return a.ctor === b.ctor; + } + + // check if Arrays are equal + if (x.ctor === '_Array') + { + var xs = _elm_lang$core$Native_Array.toJSArray(x); + var ys = _elm_lang$core$Native_Array.toJSArray(y); + if (xs.length !== ys.length) + { + return false; + } + for (var i = 0; i < xs.length; i++) + { + if (!eqHelp(xs[i], ys[i], depth + 1, stack)) + { + return false; + } + } + return true; + } + + if (!eqHelp(x.ctor, y.ctor, depth + 1, stack)) + { + return false; + } + + for (var key in x) + { + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } + } + return true; +} + +// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on +// the particular integer values assigned to LT, EQ, and GT. + +var LT = -1, EQ = 0, GT = 1; + +function cmp(x, y) +{ + if (typeof x !== 'object') + { + return x === y ? EQ : x < y ? LT : GT; + } + + if (x instanceof String) + { + var a = x.valueOf(); + var b = y.valueOf(); + return a === b ? EQ : a < b ? LT : GT; + } + + if (x.ctor === '::' || x.ctor === '[]') + { + while (x.ctor === '::' && y.ctor === '::') + { + var ord = cmp(x._0, y._0); + if (ord !== EQ) + { + return ord; + } + x = x._1; + y = y._1; + } + return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT; + } + + if (x.ctor.slice(0, 6) === '_Tuple') + { + var ord; + 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; + } + + throw new Error( + 'Comparison error: comparison is only defined on ints, ' + + 'floats, times, chars, strings, lists of comparable values, ' + + 'and tuples of comparable values.' + ); +} + + +// COMMON VALUES + +var Tuple0 = { + ctor: '_Tuple0' +}; + +function Tuple2(x, y) +{ + return { + ctor: '_Tuple2', + _0: x, + _1: y + }; +} + +function chr(c) +{ + return new String(c); +} + + +// GUID + +var count = 0; +function guid(_) +{ + return count++; +} + + +// RECORDS + +function update(oldRecord, updatedFields) +{ + var newRecord = {}; + + for (var key in oldRecord) + { + newRecord[key] = oldRecord[key]; + } + + for (var key in updatedFields) + { + newRecord[key] = updatedFields[key]; + } + + return newRecord; +} + + +//// 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 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; +} + + +// CRASHES + +function crash(moduleName, region) +{ + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; +} + +function crashCase(moduleName, region, value) +{ + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n' + + 'This was caused by the `case` expression ' + regionToString(region) + '.\n' + + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; +} + +function regionToString(region) +{ + if (region.start.line == region.end.line) + { + return 'on line ' + region.start.line; + } + return 'between lines ' + region.start.line + ' and ' + region.end.line; +} + + +// TO STRING + +function toString(v) +{ + var type = typeof v; + if (type === 'function') + { + return ''; + } + + if (type === 'boolean') + { + return v ? 'True' : 'False'; + } + + if (type === 'number') + { + return v + ''; + } + + if (v instanceof String) + { + return '\'' + addSlashes(v, true) + '\''; + } + + if (type === 'string') + { + return '"' + addSlashes(v, false) + '"'; + } + + if (v === null) + { + return 'null'; + } + + if (type === 'object' && 'ctor' in v) + { + var ctorStarter = v.ctor.substring(0, 5); + + if (ctorStarter === '_Tupl') + { + var output = []; + for (var k in v) + { + if (k === 'ctor') continue; + output.push(toString(v[k])); + } + return '(' + output.join(',') + ')'; + } + + if (ctorStarter === '_Task') + { + return '' + } + + if (v.ctor === '_Array') + { + var list = _elm_lang$core$Array$toList(v); + return 'Array.fromList ' + toString(list); + } + + if (v.ctor === '') + { + return ''; + } + + if (v.ctor === '_Process') + { + return ''; + } + + if (v.ctor === '::') + { + var output = '[' + toString(v._0); + v = v._1; + while (v.ctor === '::') + { + output += ',' + toString(v._0); + v = v._1; + } + return output + ']'; + } + + if (v.ctor === '[]') + { + return '[]'; + } + + if (v.ctor === 'Set_elm_builtin') + { + return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v)); + } + + if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin') + { + return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v)); + } + + var output = ''; + for (var i in v) + { + if (i === 'ctor') continue; + var str = toString(v[i]); + var c0 = str[0]; + var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; + output += ' ' + (parenless ? str : '(' + str + ')'); + } + return v.ctor + output; + } + + if (type === 'object') + { + if (v instanceof Date) + { + return '<' + v.toString() + '>'; + } + + if (v.elm_web_socket) + { + return ''; + } + + var output = []; + for (var k in v) + { + output.push(k + ' = ' + toString(v[k])); + } + if (output.length === 0) + { + return '{}'; + } + return '{ ' + output.join(', ') + ' }'; + } + + return ''; +} + +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, '\\"'); + } +} + + +return { + eq: eq, + cmp: cmp, + Tuple0: Tuple0, + Tuple2: Tuple2, + chr: chr, + update: update, + guid: guid, + + append: F2(append), + + crash: crash, + crashCase: crashCase, + + toString: toString +}; + +}(); +var _elm_lang$core$Basics$never = function (_p0) { + never: + while (true) { + var _p1 = _p0; + var _v1 = _p1._0; + _p0 = _v1; + continue never; + } +}; +var _elm_lang$core$Basics$uncurry = F2( + function (f, _p2) { + var _p3 = _p2; + return A2(f, _p3._0, _p3._1); + }); +var _elm_lang$core$Basics$curry = F3( + function (f, a, b) { + return f( + {ctor: '_Tuple2', _0: a, _1: b}); + }); +var _elm_lang$core$Basics$flip = F3( + function (f, b, a) { + return A2(f, a, b); + }); +var _elm_lang$core$Basics$always = F2( + function (a, _p4) { + return a; + }); +var _elm_lang$core$Basics$identity = function (x) { + return x; +}; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<|'] = F2( + function (f, x) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['|>'] = F2( + function (x, f) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>>'] = F3( + function (f, g, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<<'] = F3( + function (g, f, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append; +var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString; +var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite; +var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN; +var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat; +var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling; +var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor; +var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate; +var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round; +var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not; +var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and; +var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max; +var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min; +var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq; +var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e; +var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi; +var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp; +var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase; +var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs; +var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate; +var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt; +var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2; +var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan; +var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin; +var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos; +var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan; +var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin; +var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod; +var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add; +var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar; +var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar; +var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns; +var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees; +var _elm_lang$core$Basics$radians = function (t) { + return t; +}; +var _elm_lang$core$Basics$GT = {ctor: 'GT'}; +var _elm_lang$core$Basics$EQ = {ctor: 'EQ'}; +var _elm_lang$core$Basics$LT = {ctor: 'LT'}; +var _elm_lang$core$Basics$JustOneMore = function (a) { + return {ctor: 'JustOneMore', _0: a}; +}; + +var _elm_lang$core$Maybe$withDefault = F2( + function ($default, maybe) { + var _p0 = maybe; + if (_p0.ctor === 'Just') { + return _p0._0; + } else { + return $default; + } + }); +var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'}; +var _elm_lang$core$Maybe$andThen = F2( + function (callback, maybeValue) { + var _p1 = maybeValue; + if (_p1.ctor === 'Just') { + return callback(_p1._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$Just = function (a) { + return {ctor: 'Just', _0: a}; +}; +var _elm_lang$core$Maybe$map = F2( + function (f, maybe) { + var _p2 = maybe; + if (_p2.ctor === 'Just') { + return _elm_lang$core$Maybe$Just( + f(_p2._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map2 = F3( + function (func, ma, mb) { + var _p3 = {ctor: '_Tuple2', _0: ma, _1: mb}; + if (((_p3.ctor === '_Tuple2') && (_p3._0.ctor === 'Just')) && (_p3._1.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A2(func, _p3._0._0, _p3._1._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map3 = F4( + function (func, ma, mb, mc) { + var _p4 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc}; + if ((((_p4.ctor === '_Tuple3') && (_p4._0.ctor === 'Just')) && (_p4._1.ctor === 'Just')) && (_p4._2.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A3(func, _p4._0._0, _p4._1._0, _p4._2._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map4 = F5( + function (func, ma, mb, mc, md) { + var _p5 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md}; + if (((((_p5.ctor === '_Tuple4') && (_p5._0.ctor === 'Just')) && (_p5._1.ctor === 'Just')) && (_p5._2.ctor === 'Just')) && (_p5._3.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A4(func, _p5._0._0, _p5._1._0, _p5._2._0, _p5._3._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map5 = F6( + function (func, ma, mb, mc, md, me) { + var _p6 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me}; + if ((((((_p6.ctor === '_Tuple5') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) && (_p6._2.ctor === 'Just')) && (_p6._3.ctor === 'Just')) && (_p6._4.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A5(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0, _p6._4._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); + +//import Native.Utils // + +var _elm_lang$core$Native_List = function() { + +var Nil = { ctor: '[]' }; + +function Cons(hd, tl) +{ + return { ctor: '::', _0: hd, _1: tl }; +} + +function fromArray(arr) +{ + var out = Nil; + for (var i = arr.length; i--; ) + { + out = Cons(arr[i], out); + } + return out; +} + +function toArray(xs) +{ + var out = []; + while (xs.ctor !== '[]') + { + out.push(xs._0); + xs = xs._1; + } + return out; +} + +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 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 _elm_lang$core$Native_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; + })); +} + +return { + Nil: Nil, + Cons: Cons, + cons: F2(Cons), + toArray: toArray, + fromArray: fromArray, + + foldr: F3(foldr), + + map2: F3(map2), + map3: F4(map3), + map4: F5(map4), + map5: F6(map5), + sortBy: F2(sortBy), + sortWith: F2(sortWith) +}; + +}(); +var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith; +var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy; +var _elm_lang$core$List$sort = function (xs) { + return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs); +}; +var _elm_lang$core$List$singleton = function (value) { + return { + ctor: '::', + _0: value, + _1: {ctor: '[]'} + }; +}; +var _elm_lang$core$List$drop = F2( + function (n, list) { + drop: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return list; + } else { + var _p0 = list; + if (_p0.ctor === '[]') { + return list; + } else { + var _v1 = n - 1, + _v2 = _p0._1; + n = _v1; + list = _v2; + continue drop; + } + } + } + }); +var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5; +var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4; +var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3; +var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2; +var _elm_lang$core$List$any = F2( + function (isOkay, list) { + any: + while (true) { + var _p1 = list; + if (_p1.ctor === '[]') { + return false; + } else { + if (isOkay(_p1._0)) { + return true; + } else { + var _v4 = isOkay, + _v5 = _p1._1; + isOkay = _v4; + list = _v5; + continue any; + } + } + } + }); +var _elm_lang$core$List$all = F2( + function (isOkay, list) { + return !A2( + _elm_lang$core$List$any, + function (_p2) { + return !isOkay(_p2); + }, + list); + }); +var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr; +var _elm_lang$core$List$foldl = F3( + function (func, acc, list) { + foldl: + while (true) { + var _p3 = list; + if (_p3.ctor === '[]') { + return acc; + } else { + var _v7 = func, + _v8 = A2(func, _p3._0, acc), + _v9 = _p3._1; + func = _v7; + acc = _v8; + list = _v9; + continue foldl; + } + } + }); +var _elm_lang$core$List$length = function (xs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p4, i) { + return i + 1; + }), + 0, + xs); +}; +var _elm_lang$core$List$sum = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x + y; + }), + 0, + numbers); +}; +var _elm_lang$core$List$product = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x * y; + }), + 1, + numbers); +}; +var _elm_lang$core$List$maximum = function (list) { + var _p5 = list; + if (_p5.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1)); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$minimum = function (list) { + var _p6 = list; + if (_p6.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1)); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$member = F2( + function (x, xs) { + return A2( + _elm_lang$core$List$any, + function (a) { + return _elm_lang$core$Native_Utils.eq(a, x); + }, + xs); + }); +var _elm_lang$core$List$isEmpty = function (xs) { + var _p7 = xs; + if (_p7.ctor === '[]') { + return true; + } else { + return false; + } +}; +var _elm_lang$core$List$tail = function (list) { + var _p8 = list; + if (_p8.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p8._1); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List$head = function (list) { + var _p9 = list; + if (_p9.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p9._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {}; +_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons; +var _elm_lang$core$List$map = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, acc) { + return { + ctor: '::', + _0: f(x), + _1: acc + }; + }), + {ctor: '[]'}, + xs); + }); +var _elm_lang$core$List$filter = F2( + function (pred, xs) { + var conditionalCons = F2( + function (front, back) { + return pred(front) ? {ctor: '::', _0: front, _1: back} : back; + }); + return A3( + _elm_lang$core$List$foldr, + conditionalCons, + {ctor: '[]'}, + xs); + }); +var _elm_lang$core$List$maybeCons = F3( + function (f, mx, xs) { + var _p10 = f(mx); + if (_p10.ctor === 'Just') { + return {ctor: '::', _0: _p10._0, _1: xs}; + } else { + return xs; + } + }); +var _elm_lang$core$List$filterMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$maybeCons(f), + {ctor: '[]'}, + xs); + }); +var _elm_lang$core$List$reverse = function (list) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + {ctor: '[]'}, + list); +}; +var _elm_lang$core$List$scanl = F3( + function (f, b, xs) { + var scan1 = F2( + function (x, accAcc) { + var _p11 = accAcc; + if (_p11.ctor === '::') { + return { + ctor: '::', + _0: A2(f, x, _p11._0), + _1: accAcc + }; + } else { + return {ctor: '[]'}; + } + }); + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$foldl, + scan1, + { + ctor: '::', + _0: b, + _1: {ctor: '[]'} + }, + xs)); + }); +var _elm_lang$core$List$append = F2( + function (xs, ys) { + var _p12 = ys; + if (_p12.ctor === '[]') { + return xs; + } else { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + ys, + xs); + } + }); +var _elm_lang$core$List$concat = function (lists) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$append, + {ctor: '[]'}, + lists); +}; +var _elm_lang$core$List$concatMap = F2( + function (f, list) { + return _elm_lang$core$List$concat( + A2(_elm_lang$core$List$map, f, list)); + }); +var _elm_lang$core$List$partition = F2( + function (pred, list) { + var step = F2( + function (x, _p13) { + var _p14 = _p13; + var _p16 = _p14._0; + var _p15 = _p14._1; + return pred(x) ? { + ctor: '_Tuple2', + _0: {ctor: '::', _0: x, _1: _p16}, + _1: _p15 + } : { + ctor: '_Tuple2', + _0: _p16, + _1: {ctor: '::', _0: x, _1: _p15} + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }, + list); + }); +var _elm_lang$core$List$unzip = function (pairs) { + var step = F2( + function (_p18, _p17) { + var _p19 = _p18; + var _p20 = _p17; + return { + ctor: '_Tuple2', + _0: {ctor: '::', _0: _p19._0, _1: _p20._0}, + _1: {ctor: '::', _0: _p19._1, _1: _p20._1} + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }, + pairs); +}; +var _elm_lang$core$List$intersperse = F2( + function (sep, xs) { + var _p21 = xs; + if (_p21.ctor === '[]') { + return {ctor: '[]'}; + } else { + var step = F2( + function (x, rest) { + return { + ctor: '::', + _0: sep, + _1: {ctor: '::', _0: x, _1: rest} + }; + }); + var spersed = A3( + _elm_lang$core$List$foldr, + step, + {ctor: '[]'}, + _p21._1); + return {ctor: '::', _0: _p21._0, _1: spersed}; + } + }); +var _elm_lang$core$List$takeReverse = F3( + function (n, list, taken) { + takeReverse: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return taken; + } else { + var _p22 = list; + if (_p22.ctor === '[]') { + return taken; + } else { + var _v23 = n - 1, + _v24 = _p22._1, + _v25 = {ctor: '::', _0: _p22._0, _1: taken}; + n = _v23; + list = _v24; + taken = _v25; + continue takeReverse; + } + } + } + }); +var _elm_lang$core$List$takeTailRec = F2( + function (n, list) { + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$takeReverse, + n, + list, + {ctor: '[]'})); + }); +var _elm_lang$core$List$takeFast = F3( + function (ctr, n, list) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return {ctor: '[]'}; + } else { + var _p23 = {ctor: '_Tuple2', _0: n, _1: list}; + _v26_5: + do { + _v26_1: + do { + if (_p23.ctor === '_Tuple2') { + if (_p23._1.ctor === '[]') { + return list; + } else { + if (_p23._1._1.ctor === '::') { + switch (_p23._0) { + case 1: + break _v26_1; + case 2: + return { + ctor: '::', + _0: _p23._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._0, + _1: {ctor: '[]'} + } + }; + case 3: + if (_p23._1._1._1.ctor === '::') { + return { + ctor: '::', + _0: _p23._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._1._0, + _1: {ctor: '[]'} + } + } + }; + } else { + break _v26_5; + } + default: + if ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) { + var _p28 = _p23._1._1._1._0; + var _p27 = _p23._1._1._0; + var _p26 = _p23._1._0; + var _p25 = _p23._1._1._1._1._0; + var _p24 = _p23._1._1._1._1._1; + return (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? { + ctor: '::', + _0: _p26, + _1: { + ctor: '::', + _0: _p27, + _1: { + ctor: '::', + _0: _p28, + _1: { + ctor: '::', + _0: _p25, + _1: A2(_elm_lang$core$List$takeTailRec, n - 4, _p24) + } + } + } + } : { + ctor: '::', + _0: _p26, + _1: { + ctor: '::', + _0: _p27, + _1: { + ctor: '::', + _0: _p28, + _1: { + ctor: '::', + _0: _p25, + _1: A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24) + } + } + } + }; + } else { + break _v26_5; + } + } + } else { + if (_p23._0 === 1) { + break _v26_1; + } else { + break _v26_5; + } + } + } + } else { + break _v26_5; + } + } while(false); + return { + ctor: '::', + _0: _p23._1._0, + _1: {ctor: '[]'} + }; + } while(false); + return list; + } + }); +var _elm_lang$core$List$take = F2( + function (n, list) { + return A3(_elm_lang$core$List$takeFast, 0, n, list); + }); +var _elm_lang$core$List$repeatHelp = F3( + function (result, n, value) { + repeatHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return result; + } else { + var _v27 = {ctor: '::', _0: value, _1: result}, + _v28 = n - 1, + _v29 = value; + result = _v27; + n = _v28; + value = _v29; + continue repeatHelp; + } + } + }); +var _elm_lang$core$List$repeat = F2( + function (n, value) { + return A3( + _elm_lang$core$List$repeatHelp, + {ctor: '[]'}, + n, + value); + }); +var _elm_lang$core$List$rangeHelp = F3( + function (lo, hi, list) { + rangeHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(lo, hi) < 1) { + var _v30 = lo, + _v31 = hi - 1, + _v32 = {ctor: '::', _0: hi, _1: list}; + lo = _v30; + hi = _v31; + list = _v32; + continue rangeHelp; + } else { + return list; + } + } + }); +var _elm_lang$core$List$range = F2( + function (lo, hi) { + return A3( + _elm_lang$core$List$rangeHelp, + lo, + hi, + {ctor: '[]'}); + }); +var _elm_lang$core$List$indexedMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$map2, + f, + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$List$length(xs) - 1), + xs); + }); + +var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; +var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; +var _elm_lang$core$Array$isEmpty = function (array) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$Array$length(array), + 0); +}; +var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; +var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; +var _elm_lang$core$Array$get = F2( + function (i, array) { + return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( + i, + _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; + }); +var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; +var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; +var _elm_lang$core$Array$filter = F2( + function (isOkay, arr) { + var update = F2( + function (x, xs) { + return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; + }); + return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); + }); +var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; +var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; +var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; +var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; +var _elm_lang$core$Array$toIndexedList = function (array) { + return A3( + _elm_lang$core$List$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$Native_Array.length(array) - 1), + _elm_lang$core$Native_Array.toList(array)); +}; +var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; +var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; +var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; +var _elm_lang$core$Array$repeat = F2( + function (n, e) { + return A2( + _elm_lang$core$Array$initialize, + n, + _elm_lang$core$Basics$always(e)); + }); +var _elm_lang$core$Array$Array = {ctor: 'Array'}; + +//import Native.Utils // + +var _elm_lang$core$Native_Char = function() { + +return { + fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); }, + toCode: function(c) { return c.charCodeAt(0); }, + toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); }, + toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); }, + toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); }, + toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); } +}; + +}(); +var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode; +var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode; +var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower; +var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper; +var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower; +var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper; +var _elm_lang$core$Char$isBetween = F3( + function (low, high, $char) { + var code = _elm_lang$core$Char$toCode($char); + return (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(high)) < 1); + }); +var _elm_lang$core$Char$isUpper = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('Z')); +var _elm_lang$core$Char$isLower = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('z')); +var _elm_lang$core$Char$isDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('9')); +var _elm_lang$core$Char$isOctDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('7')); +var _elm_lang$core$Char$isHexDigit = function ($char) { + return _elm_lang$core$Char$isDigit($char) || (A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('f'), + $char) || A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('F'), + $char)); +}; + +//import Native.Utils // + +var _elm_lang$core$Native_Scheduler = function() { + +var MAX_STEPS = 10000; + + +// TASKS + +function succeed(value) +{ + return { + ctor: '_Task_succeed', + value: value + }; +} + +function fail(error) +{ + return { + ctor: '_Task_fail', + value: error + }; +} + +function nativeBinding(callback) +{ + return { + ctor: '_Task_nativeBinding', + callback: callback, + cancel: null + }; +} + +function andThen(callback, task) +{ + return { + ctor: '_Task_andThen', + callback: callback, + task: task + }; +} + +function onError(callback, task) +{ + return { + ctor: '_Task_onError', + callback: callback, + task: task + }; +} + +function receive(callback) +{ + return { + ctor: '_Task_receive', + callback: callback + }; +} + + +// PROCESSES + +function rawSpawn(task) +{ + var process = { + ctor: '_Process', + id: _elm_lang$core$Native_Utils.guid(), + root: task, + stack: null, + mailbox: [] + }; + + enqueue(process); + + return process; +} + +function spawn(task) +{ + return nativeBinding(function(callback) { + var process = rawSpawn(task); + callback(succeed(process)); + }); +} + +function rawSend(process, msg) +{ + process.mailbox.push(msg); + enqueue(process); +} + +function send(process, msg) +{ + return nativeBinding(function(callback) { + rawSend(process, msg); + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function kill(process) +{ + return nativeBinding(function(callback) { + var root = process.root; + if (root.ctor === '_Task_nativeBinding' && root.cancel) + { + root.cancel(); + } + + process.root = null; + + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function sleep(time) +{ + return nativeBinding(function(callback) { + var id = setTimeout(function() { + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }, time); + + return function() { clearTimeout(id); }; + }); +} + + +// STEP PROCESSES + +function step(numSteps, process) +{ + while (numSteps < MAX_STEPS) + { + var ctor = process.root.ctor; + + if (ctor === '_Task_succeed') + { + while (process.stack && process.stack.ctor === '_Task_onError') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_fail') + { + while (process.stack && process.stack.ctor === '_Task_andThen') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_andThen') + { + process.stack = { + ctor: '_Task_andThen', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_onError') + { + process.stack = { + ctor: '_Task_onError', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_nativeBinding') + { + process.root.cancel = process.root.callback(function(newRoot) { + process.root = newRoot; + enqueue(process); + }); + + break; + } + + if (ctor === '_Task_receive') + { + var mailbox = process.mailbox; + if (mailbox.length === 0) + { + break; + } + + process.root = process.root.callback(mailbox.shift()); + ++numSteps; + continue; + } + + throw new Error(ctor); + } + + if (numSteps < MAX_STEPS) + { + return numSteps + 1; + } + enqueue(process); + + return numSteps; +} + + +// WORK QUEUE + +var working = false; +var workQueue = []; + +function enqueue(process) +{ + workQueue.push(process); + + if (!working) + { + setTimeout(work, 0); + working = true; + } +} + +function work() +{ + var numSteps = 0; + var process; + while (numSteps < MAX_STEPS && (process = workQueue.shift())) + { + if (process.root) + { + numSteps = step(numSteps, process); + } + } + if (!process) + { + working = false; + return; + } + setTimeout(work, 0); +} + + +return { + succeed: succeed, + fail: fail, + nativeBinding: nativeBinding, + andThen: F2(andThen), + onError: F2(onError), + receive: receive, + + spawn: spawn, + kill: kill, + sleep: sleep, + send: F2(send), + + rawSpawn: rawSpawn, + rawSend: rawSend +}; + +}(); +//import // + +var _elm_lang$core$Native_Platform = function() { + + +// PROGRAMS + +function program(impl) +{ + return function(flagDecoder) + { + return function(object, moduleName) + { + object['worker'] = function worker(flags) + { + if (typeof flags !== 'undefined') + { + throw new Error( + 'The `' + moduleName + '` module does not need flags.\n' + + 'Call ' + moduleName + '.worker() with no arguments and you should be all set!' + ); + } + + return initialize( + impl.init, + impl.update, + impl.subscriptions, + renderer + ); + }; + }; + }; +} + +function programWithFlags(impl) +{ + return function(flagDecoder) + { + return function(object, moduleName) + { + object['worker'] = function worker(flags) + { + if (typeof flagDecoder === 'undefined') + { + throw new Error( + 'Are you trying to sneak a Never value into Elm? Trickster!\n' + + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n' + + 'Use `program` instead if you do not want flags.' + ); + } + + var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); + if (result.ctor === 'Err') + { + throw new Error( + moduleName + '.worker(...) was called with an unexpected argument.\n' + + 'I tried to convert it to an Elm value, but ran into this problem:\n\n' + + result._0 + ); + } + + return initialize( + impl.init(result._0), + impl.update, + impl.subscriptions, + renderer + ); + }; + }; + }; +} + +function renderer(enqueue, _) +{ + return function(_) {}; +} + + +// HTML TO PROGRAM + +function htmlToProgram(vnode) +{ + var emptyBag = batch(_elm_lang$core$Native_List.Nil); + var noChange = _elm_lang$core$Native_Utils.Tuple2( + _elm_lang$core$Native_Utils.Tuple0, + emptyBag + ); + + return _elm_lang$virtual_dom$VirtualDom$program({ + init: noChange, + view: function(model) { return main; }, + update: F2(function(msg, model) { return noChange; }), + subscriptions: function (model) { return emptyBag; } + }); +} + + +// INITIALIZE A PROGRAM + +function initialize(init, update, subscriptions, renderer) +{ + // ambient state + var managers = {}; + var updateView; + + // init and update state in main process + var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var model = init._0; + updateView = renderer(enqueue, model); + var cmds = init._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); + + function onMessage(msg, model) + { + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var results = A2(update, msg, model); + model = results._0; + updateView(model); + var cmds = results._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); + } + + var mainProcess = spawnLoop(initApp, onMessage); + + function enqueue(msg) + { + _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg); + } + + var ports = setupEffects(managers, enqueue); + + return ports ? { ports: ports } : {}; +} + + +// EFFECT MANAGERS + +var effectManagers = {}; + +function setupEffects(managers, callback) +{ + var ports; + + // setup all necessary effect managers + for (var key in effectManagers) + { + var manager = effectManagers[key]; + + if (manager.isForeign) + { + ports = ports || {}; + ports[key] = manager.tag === 'cmd' + ? setupOutgoingPort(key) + : setupIncomingPort(key, callback); + } + + managers[key] = makeManager(manager, callback); + } + + return ports; +} + +function makeManager(info, callback) +{ + var router = { + main: callback, + self: undefined + }; + + var tag = info.tag; + var onEffects = info.onEffects; + var onSelfMsg = info.onSelfMsg; + + function onMessage(msg, state) + { + if (msg.ctor === 'self') + { + return A3(onSelfMsg, router, msg._0, state); + } + + var fx = msg._0; + switch (tag) + { + case 'cmd': + return A3(onEffects, router, fx.cmds, state); + + case 'sub': + return A3(onEffects, router, fx.subs, state); + + case 'fx': + return A4(onEffects, router, fx.cmds, fx.subs, state); + } + } + + var process = spawnLoop(info.init, onMessage); + router.self = process; + return process; +} + +function sendToApp(router, msg) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + router.main(msg); + callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + +function sendToSelf(router, msg) +{ + return A2(_elm_lang$core$Native_Scheduler.send, router.self, { + ctor: 'self', + _0: msg + }); +} + + +// HELPER for STATEFUL LOOPS + +function spawnLoop(init, onMessage) +{ + var andThen = _elm_lang$core$Native_Scheduler.andThen; + + function loop(state) + { + var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) { + return onMessage(msg, state); + }); + return A2(andThen, loop, handleMsg); + } + + var task = A2(andThen, loop, init); + + return _elm_lang$core$Native_Scheduler.rawSpawn(task); +} + + +// BAGS + +function leaf(home) +{ + return function(value) + { + return { + type: 'leaf', + home: home, + value: value + }; + }; +} + +function batch(list) +{ + return { + type: 'node', + branches: list + }; +} + +function map(tagger, bag) +{ + return { + type: 'map', + tagger: tagger, + tree: bag + } +} + + +// PIPE BAGS INTO EFFECT MANAGERS + +function dispatchEffects(managers, cmdBag, subBag) +{ + var effectsDict = {}; + gatherEffects(true, cmdBag, effectsDict, null); + gatherEffects(false, subBag, effectsDict, null); + + for (var home in managers) + { + var fx = home in effectsDict + ? effectsDict[home] + : { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; + + _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx }); + } +} + +function gatherEffects(isCmd, bag, effectsDict, taggers) +{ + switch (bag.type) + { + case 'leaf': + var home = bag.home; + var effect = toEffect(isCmd, home, taggers, bag.value); + effectsDict[home] = insert(isCmd, effect, effectsDict[home]); + return; + + case 'node': + var list = bag.branches; + while (list.ctor !== '[]') + { + gatherEffects(isCmd, list._0, effectsDict, taggers); + list = list._1; + } + return; + + case 'map': + gatherEffects(isCmd, bag.tree, effectsDict, { + tagger: bag.tagger, + rest: taggers + }); + return; + } +} + +function toEffect(isCmd, home, taggers, value) +{ + function applyTaggers(x) + { + var temp = taggers; + while (temp) + { + x = temp.tagger(x); + temp = temp.rest; + } + return x; + } + + var map = isCmd + ? effectManagers[home].cmdMap + : effectManagers[home].subMap; + + return A2(map, applyTaggers, value) +} + +function insert(isCmd, newEffect, effects) +{ + effects = effects || { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; + if (isCmd) + { + effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds); + return effects; + } + effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs); + return effects; +} + + +// PORTS + +function checkPortName(name) +{ + if (name in effectManagers) + { + throw new Error('There can only be one port named `' + name + '`, but your program has multiple.'); + } +} + + +// OUTGOING PORTS + +function outgoingPort(name, converter) +{ + checkPortName(name); + effectManagers[name] = { + tag: 'cmd', + cmdMap: outgoingPortMap, + converter: converter, + isForeign: true + }; + return leaf(name); +} + +var outgoingPortMap = F2(function cmdMap(tagger, value) { + return value; +}); + +function setupOutgoingPort(name) +{ + var subs = []; + var converter = effectManagers[name].converter; + + // CREATE MANAGER + + var init = _elm_lang$core$Native_Scheduler.succeed(null); + + function onEffects(router, cmdList, state) + { + while (cmdList.ctor !== '[]') + { + // grab a separate reference to subs in case unsubscribe is called + var currentSubs = subs; + var value = converter(cmdList._0); + for (var i = 0; i < currentSubs.length; i++) + { + currentSubs[i](value); + } + cmdList = cmdList._1; + } + return init; + } + + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); + + // PUBLIC API + + function subscribe(callback) + { + subs.push(callback); + } + + function unsubscribe(callback) + { + // copy subs into a new array in case unsubscribe is called within a + // subscribed callback + subs = subs.slice(); + var index = subs.indexOf(callback); + if (index >= 0) + { + subs.splice(index, 1); + } + } + + return { + subscribe: subscribe, + unsubscribe: unsubscribe + }; +} + + +// INCOMING PORTS + +function incomingPort(name, converter) +{ + checkPortName(name); + effectManagers[name] = { + tag: 'sub', + subMap: incomingPortMap, + converter: converter, + isForeign: true + }; + return leaf(name); +} + +var incomingPortMap = F2(function subMap(tagger, finalTagger) +{ + return function(value) + { + return tagger(finalTagger(value)); + }; +}); + +function setupIncomingPort(name, callback) +{ + var sentBeforeInit = []; + var subs = _elm_lang$core$Native_List.Nil; + var converter = effectManagers[name].converter; + var currentOnEffects = preInitOnEffects; + var currentSend = preInitSend; + + // CREATE MANAGER + + var init = _elm_lang$core$Native_Scheduler.succeed(null); + + function preInitOnEffects(router, subList, state) + { + var postInitResult = postInitOnEffects(router, subList, state); + + for(var i = 0; i < sentBeforeInit.length; i++) + { + postInitSend(sentBeforeInit[i]); + } + + sentBeforeInit = null; // to release objects held in queue + currentSend = postInitSend; + currentOnEffects = postInitOnEffects; + return postInitResult; + } + + function postInitOnEffects(router, subList, state) + { + subs = subList; + return init; + } + + function onEffects(router, subList, state) + { + return currentOnEffects(router, subList, state); + } + + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); + + // PUBLIC API + + function preInitSend(value) + { + sentBeforeInit.push(value); + } + + function postInitSend(value) + { + var temp = subs; + while (temp.ctor !== '[]') + { + callback(temp._0(value)); + temp = temp._1; + } + } + + function send(incomingValue) + { + var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue); + if (result.ctor === 'Err') + { + throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0); + } + + currentSend(result._0); + } + + return { send: send }; +} + +return { + // routers + sendToApp: F2(sendToApp), + sendToSelf: F2(sendToSelf), + + // global setup + effectManagers: effectManagers, + outgoingPort: outgoingPort, + incomingPort: incomingPort, + + htmlToProgram: htmlToProgram, + program: program, + programWithFlags: programWithFlags, + initialize: initialize, + + // effect bags + leaf: leaf, + batch: batch, + map: F2(map) +}; + +}(); + +var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; +_elm_lang$core$Platform_Cmd_ops['!'] = F2( + function (model, commands) { + return { + ctor: '_Tuple2', + _0: model, + _1: _elm_lang$core$Platform_Cmd$batch(commands) + }; + }); +var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; + +var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; + +var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; +var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; +var _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags; +var _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program; +var _elm_lang$core$Platform$Program = {ctor: 'Program'}; +var _elm_lang$core$Platform$Task = {ctor: 'Task'}; +var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; +var _elm_lang$core$Platform$Router = {ctor: 'Router'}; + +var _elm_lang$core$Result$toMaybe = function (result) { + var _p0 = result; + if (_p0.ctor === 'Ok') { + return _elm_lang$core$Maybe$Just(_p0._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } +}; +var _elm_lang$core$Result$withDefault = F2( + function (def, result) { + var _p1 = result; + if (_p1.ctor === 'Ok') { + return _p1._0; + } else { + return def; + } + }); +var _elm_lang$core$Result$Err = function (a) { + return {ctor: 'Err', _0: a}; +}; +var _elm_lang$core$Result$andThen = F2( + function (callback, result) { + var _p2 = result; + if (_p2.ctor === 'Ok') { + return callback(_p2._0); + } else { + return _elm_lang$core$Result$Err(_p2._0); + } + }); +var _elm_lang$core$Result$Ok = function (a) { + return {ctor: 'Ok', _0: a}; +}; +var _elm_lang$core$Result$map = F2( + function (func, ra) { + var _p3 = ra; + if (_p3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + func(_p3._0)); + } else { + return _elm_lang$core$Result$Err(_p3._0); + } + }); +var _elm_lang$core$Result$map2 = F3( + function (func, ra, rb) { + var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; + if (_p4._0.ctor === 'Ok') { + if (_p4._1.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A2(func, _p4._0._0, _p4._1._0)); + } else { + return _elm_lang$core$Result$Err(_p4._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p4._0._0); + } + }); +var _elm_lang$core$Result$map3 = F4( + function (func, ra, rb, rc) { + var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; + if (_p5._0.ctor === 'Ok') { + if (_p5._1.ctor === 'Ok') { + if (_p5._2.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); + } else { + return _elm_lang$core$Result$Err(_p5._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p5._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p5._0._0); + } + }); +var _elm_lang$core$Result$map4 = F5( + function (func, ra, rb, rc, rd) { + var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; + if (_p6._0.ctor === 'Ok') { + if (_p6._1.ctor === 'Ok') { + if (_p6._2.ctor === 'Ok') { + if (_p6._3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); + } else { + return _elm_lang$core$Result$Err(_p6._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._0._0); + } + }); +var _elm_lang$core$Result$map5 = F6( + function (func, ra, rb, rc, rd, re) { + var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; + if (_p7._0.ctor === 'Ok') { + if (_p7._1.ctor === 'Ok') { + if (_p7._2.ctor === 'Ok') { + if (_p7._3.ctor === 'Ok') { + if (_p7._4.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); + } else { + return _elm_lang$core$Result$Err(_p7._4._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._2._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._0._0); + } + }); +var _elm_lang$core$Result$mapError = F2( + function (f, result) { + var _p8 = result; + if (_p8.ctor === 'Ok') { + return _elm_lang$core$Result$Ok(_p8._0); + } else { + return _elm_lang$core$Result$Err( + f(_p8._0)); + } + }); +var _elm_lang$core$Result$fromMaybe = F2( + function (err, maybe) { + var _p9 = maybe; + if (_p9.ctor === 'Just') { + return _elm_lang$core$Result$Ok(_p9._0); + } else { + return _elm_lang$core$Result$Err(err); + } + }); + +var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; +var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; +var _elm_lang$core$Task$spawnCmd = F2( + function (router, _p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToApp(router), + _p1._0)); + }); +var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; +var _elm_lang$core$Task$mapError = F2( + function (convert, task) { + return A2( + _elm_lang$core$Task$onError, + function (_p2) { + return _elm_lang$core$Task$fail( + convert(_p2)); + }, + task); + }); +var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Task$map = F2( + function (func, taskA) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return _elm_lang$core$Task$succeed( + func(a)); + }, + taskA); + }); +var _elm_lang$core$Task$map2 = F3( + function (func, taskA, taskB) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return _elm_lang$core$Task$succeed( + A2(func, a, b)); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map3 = F4( + function (func, taskA, taskB, taskC) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return _elm_lang$core$Task$succeed( + A3(func, a, b, c)); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map4 = F5( + function (func, taskA, taskB, taskC, taskD) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return _elm_lang$core$Task$succeed( + A4(func, a, b, c, d)); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map5 = F6( + function (func, taskA, taskB, taskC, taskD, taskE) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return A2( + _elm_lang$core$Task$andThen, + function (e) { + return _elm_lang$core$Task$succeed( + A5(func, a, b, c, d, e)); + }, + taskE); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$sequence = function (tasks) { + var _p3 = tasks; + if (_p3.ctor === '[]') { + return _elm_lang$core$Task$succeed( + {ctor: '[]'}); + } else { + return A3( + _elm_lang$core$Task$map2, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + _p3._0, + _elm_lang$core$Task$sequence(_p3._1)); + } +}; +var _elm_lang$core$Task$onEffects = F3( + function (router, commands, state) { + return A2( + _elm_lang$core$Task$map, + function (_p4) { + return {ctor: '_Tuple0'}; + }, + _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + _elm_lang$core$Task$spawnCmd(router), + commands))); + }); +var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); +var _elm_lang$core$Task$onSelfMsg = F3( + function (_p7, _p6, _p5) { + return _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); + }); +var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); +var _elm_lang$core$Task$Perform = function (a) { + return {ctor: 'Perform', _0: a}; +}; +var _elm_lang$core$Task$perform = F2( + function (toMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, toMessage, task))); + }); +var _elm_lang$core$Task$attempt = F2( + function (resultToMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2( + _elm_lang$core$Task$onError, + function (_p8) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Err(_p8))); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p9) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Ok(_p9))); + }, + task)))); + }); +var _elm_lang$core$Task$cmdMap = F2( + function (tagger, _p10) { + var _p11 = _p10; + return _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, tagger, _p11._0)); + }); +_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; + +//import Native.Utils // + +var _elm_lang$core$Native_Debug = function() { + +function log(tag, value) +{ + var msg = tag + ': ' + _elm_lang$core$Native_Utils.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); +} + +return { + crash: crash, + log: F2(log) +}; + +}(); +//import Maybe, Native.List, Native.Utils, Result // + +var _elm_lang$core$Native_String = function() { + +function isEmpty(str) +{ + return str.length === 0; +} +function cons(chr, str) +{ + return chr + str; +} +function uncons(str) +{ + var hd = str[0]; + if (hd) + { + return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1))); + } + return _elm_lang$core$Maybe$Nothing; +} +function append(a, b) +{ + return a + b; +} +function concat(strs) +{ + return _elm_lang$core$Native_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(_elm_lang$core$Native_Utils.chr(out[i])); + } + return out.join(''); +} +function filter(pred, str) +{ + return str.split('').map(_elm_lang$core$Native_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, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; +} +function foldr(f, b, str) +{ + for (var i = str.length; i--; ) + { + b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; +} +function split(sep, str) +{ + return _elm_lang$core$Native_List.fromArray(str.split(sep)); +} +function join(sep, strs) +{ + return _elm_lang$core$Native_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.replace(/^\s+/, ''); +} +function trimRight(str) +{ + return str.replace(/\s+$/, ''); +} + +function words(str) +{ + return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g)); +} +function lines(str) +{ + return _elm_lang$core$Native_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(_elm_lang$core$Native_Utils.chr(str[i]))) + { + return true; + } + } + return false; +} +function all(pred, str) +{ + for (var i = str.length; i--; ) + { + if (!pred(_elm_lang$core$Native_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; + + if (subLen < 1) + { + return _elm_lang$core$Native_List.Nil; + } + + var i = 0; + var is = []; + + while ((i = str.indexOf(sub, i)) > -1) + { + is.push(i); + i = i + subLen; + } + + return _elm_lang$core$Native_List.fromArray(is); +} + + +function toInt(s) +{ + var len = s.length; + + // if empty + if (len === 0) + { + return intErr(s); + } + + // if hex + var c = s[0]; + if (c === '0' && s[1] === 'x') + { + for (var i = 2; i < len; ++i) + { + var c = s[i]; + if (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) + { + continue; + } + return intErr(s); + } + return _elm_lang$core$Result$Ok(parseInt(s, 16)); + } + + // is decimal + if (c > '9' || (c < '0' && c !== '-' && c !== '+')) + { + return intErr(s); + } + for (var i = 1; i < len; ++i) + { + var c = s[i]; + if (c < '0' || '9' < c) + { + return intErr(s); + } + } + + return _elm_lang$core$Result$Ok(parseInt(s, 10)); +} + +function intErr(s) +{ + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int"); +} + + +function toFloat(s) +{ + // check if it is a hex, octal, or binary number + if (s.length === 0 || /[\sxbo]/.test(s)) + { + return floatErr(s); + } + var n = +s; + // faster isNaN check + return n === n ? _elm_lang$core$Result$Ok(n) : floatErr(s); +} + +function floatErr(s) +{ + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float"); +} + + +function toList(str) +{ + return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr)); +} +function fromList(chars) +{ + return _elm_lang$core$Native_List.toArray(chars).join(''); +} + +return { + 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 +}; + +}(); + +var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; +var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; +var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; +var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; +var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; +var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; +var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; +var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; +var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; +var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; +var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; +var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; +var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; +var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; +var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; +var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; +var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; +var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; +var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; +var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; +var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; +var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; +var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; +var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; +var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; +var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; +var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; +var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; +var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; +var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; +var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; +var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; +var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; +var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; +var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; +var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; +var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; +var _elm_lang$core$String$fromChar = function ($char) { + return A2(_elm_lang$core$String$cons, $char, ''); +}; +var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; + +var _elm_lang$core$Dict$foldr = F3( + function (f, acc, t) { + foldr: + while (true) { + var _p0 = t; + if (_p0.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v1 = f, + _v2 = A3( + f, + _p0._1, + _p0._2, + A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), + _v3 = _p0._3; + f = _v1; + acc = _v2; + t = _v3; + continue foldr; + } + } + }); +var _elm_lang$core$Dict$keys = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, keyList) { + return {ctor: '::', _0: key, _1: keyList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$values = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, valueList) { + return {ctor: '::', _0: value, _1: valueList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$toList = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, list) { + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: key, _1: value}, + _1: list + }; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$foldl = F3( + function (f, acc, dict) { + foldl: + while (true) { + var _p1 = dict; + if (_p1.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v5 = f, + _v6 = A3( + f, + _p1._1, + _p1._2, + A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), + _v7 = _p1._4; + f = _v5; + acc = _v6; + dict = _v7; + continue foldl; + } + } + }); +var _elm_lang$core$Dict$merge = F6( + function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { + var stepState = F3( + function (rKey, rValue, _p2) { + stepState: + while (true) { + var _p3 = _p2; + var _p9 = _p3._1; + var _p8 = _p3._0; + var _p4 = _p8; + if (_p4.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + var _p7 = _p4._1; + var _p6 = _p4._0._1; + var _p5 = _p4._0._0; + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { + var _v10 = rKey, + _v11 = rValue, + _v12 = { + ctor: '_Tuple2', + _0: _p7, + _1: A3(leftStep, _p5, _p6, _p9) + }; + rKey = _v10; + rValue = _v11; + _p2 = _v12; + continue stepState; + } else { + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + return { + ctor: '_Tuple2', + _0: _p7, + _1: A4(bothStep, _p5, _p6, rValue, _p9) + }; + } + } + } + } + }); + var _p10 = A3( + _elm_lang$core$Dict$foldl, + stepState, + { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$toList(leftDict), + _1: initialResult + }, + rightDict); + var leftovers = _p10._0; + var intermediateResult = _p10._1; + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p11, result) { + var _p12 = _p11; + return A3(leftStep, _p12._0, _p12._1, result); + }), + intermediateResult, + leftovers); + }); +var _elm_lang$core$Dict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Debug.crash( + _elm_lang$core$String$concat( + { + ctor: '::', + _0: 'Internal red-black tree invariant violated, expected ', + _1: { + ctor: '::', + _0: msg, + _1: { + ctor: '::', + _0: ' and got ', + _1: { + ctor: '::', + _0: _elm_lang$core$Basics$toString(c), + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: lgot, + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: rgot, + _1: { + ctor: '::', + _0: '\nPlease report this bug to ', + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + })); + }); +var _elm_lang$core$Dict$isBBlack = function (dict) { + var _p13 = dict; + _v14_2: + do { + if (_p13.ctor === 'RBNode_elm_builtin') { + if (_p13._0.ctor === 'BBlack') { + return true; + } else { + break _v14_2; + } + } else { + if (_p13._0.ctor === 'LBBlack') { + return true; + } else { + break _v14_2; + } + } + } while(false); + return false; +}; +var _elm_lang$core$Dict$sizeHelp = F2( + function (n, dict) { + sizeHelp: + while (true) { + var _p14 = dict; + if (_p14.ctor === 'RBEmpty_elm_builtin') { + return n; + } else { + var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), + _v17 = _p14._3; + n = _v16; + dict = _v17; + continue sizeHelp; + } + } + }); +var _elm_lang$core$Dict$size = function (dict) { + return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); +}; +var _elm_lang$core$Dict$get = F2( + function (targetKey, dict) { + get: + while (true) { + var _p15 = dict; + if (_p15.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); + switch (_p16.ctor) { + case 'LT': + var _v20 = targetKey, + _v21 = _p15._3; + targetKey = _v20; + dict = _v21; + continue get; + case 'EQ': + return _elm_lang$core$Maybe$Just(_p15._2); + default: + var _v22 = targetKey, + _v23 = _p15._4; + targetKey = _v22; + dict = _v23; + continue get; + } + } + } + }); +var _elm_lang$core$Dict$member = F2( + function (key, dict) { + var _p17 = A2(_elm_lang$core$Dict$get, key, dict); + if (_p17.ctor === 'Just') { + return true; + } else { + return false; + } + }); +var _elm_lang$core$Dict$maxWithDefault = F3( + function (k, v, r) { + maxWithDefault: + while (true) { + var _p18 = r; + if (_p18.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: k, _1: v}; + } else { + var _v26 = _p18._1, + _v27 = _p18._2, + _v28 = _p18._4; + k = _v26; + v = _v27; + r = _v28; + continue maxWithDefault; + } + } + }); +var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; +var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; +var _elm_lang$core$Dict$Black = {ctor: 'Black'}; +var _elm_lang$core$Dict$blackish = function (t) { + var _p19 = t; + if (_p19.ctor === 'RBNode_elm_builtin') { + var _p20 = _p19._0; + return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); + } else { + return true; + } +}; +var _elm_lang$core$Dict$Red = {ctor: 'Red'}; +var _elm_lang$core$Dict$moreBlack = function (color) { + var _p21 = color; + switch (_p21.ctor) { + case 'Black': + return _elm_lang$core$Dict$BBlack; + case 'Red': + return _elm_lang$core$Dict$Black; + case 'NBlack': + return _elm_lang$core$Dict$Red; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); + } +}; +var _elm_lang$core$Dict$lessBlack = function (color) { + var _p22 = color; + switch (_p22.ctor) { + case 'BBlack': + return _elm_lang$core$Dict$Black; + case 'Black': + return _elm_lang$core$Dict$Red; + case 'Red': + return _elm_lang$core$Dict$NBlack; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + } +}; +var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; +var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; +var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { + return {ctor: 'RBEmpty_elm_builtin', _0: a}; +}; +var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); +var _elm_lang$core$Dict$isEmpty = function (dict) { + return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); +}; +var _elm_lang$core$Dict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; + }); +var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { + var _p23 = dict; + if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } else { + return dict; + } +}; +var _elm_lang$core$Dict$lessBlackTree = function (dict) { + var _p24 = dict; + if (_p24.ctor === 'RBNode_elm_builtin') { + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(_p24._0), + _p24._1, + _p24._2, + _p24._3, + _p24._4); + } else { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } +}; +var _elm_lang$core$Dict$balancedTree = 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( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(col), + yk, + yv, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; +}; +var _elm_lang$core$Dict$blacken = function (t) { + var _p25 = t; + if (_p25.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); + } +}; +var _elm_lang$core$Dict$redden = function (t) { + var _p26 = t; + if (_p26.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); + } +}; +var _elm_lang$core$Dict$balanceHelp = function (tree) { + var _p27 = tree; + _v36_6: + do { + _v36_5: + do { + _v36_4: + do { + _v36_3: + do { + _v36_2: + do { + _v36_1: + do { + _v36_0: + do { + if (_p27.ctor === 'RBNode_elm_builtin') { + if (_p27._3.ctor === 'RBNode_elm_builtin') { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._3._0.ctor) { + case 'Red': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + } + } + case 'NBlack': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + } + } + default: + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + } + case 'NBlack': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } + case 'NBlack': + if (_p27._0.ctor === 'BBlack') { + if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + default: + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + default: + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + switch (_p27._3._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._4._3._1, + _p27._4._3._2, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._4._1, + _p27._4._2, + _p27._4._3._4, + _elm_lang$core$Dict$redden(_p27._4._4))); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._3._4._1, + _p27._3._4._2, + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._3._1, + _p27._3._2, + _elm_lang$core$Dict$redden(_p27._3._3), + _p27._3._4._3), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); + } while(false); + return tree; +}; +var _elm_lang$core$Dict$balance = F5( + function (c, k, v, l, r) { + var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; + }); +var _elm_lang$core$Dict$bubble = F5( + function (c, k, v, l, r) { + return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$moreBlack(c), + k, + v, + _elm_lang$core$Dict$lessBlackTree(l), + _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _elm_lang$core$Dict$removeMax = F5( + function (c, k, v, l, r) { + var _p28 = r; + if (_p28.ctor === 'RBEmpty_elm_builtin') { + return A3(_elm_lang$core$Dict$rem, c, l, r); + } else { + return A5( + _elm_lang$core$Dict$bubble, + c, + k, + v, + l, + A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + } + }); +var _elm_lang$core$Dict$rem = F3( + function (color, left, right) { + var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; + if (_p29._0.ctor === 'RBEmpty_elm_builtin') { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p30 = color; + switch (_p30.ctor) { + case 'Red': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + case 'Black': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); + default: + return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p33 = _p29._1._0; + var _p32 = _p29._0._0; + var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; + if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/LBlack/Red', + color, + _elm_lang$core$Basics$toString(_p32), + _elm_lang$core$Basics$toString(_p33)); + } + } + } else { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p36 = _p29._1._0; + var _p35 = _p29._0._0; + var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/Red/LBlack', + color, + _elm_lang$core$Basics$toString(_p35), + _elm_lang$core$Basics$toString(_p36)); + } + } else { + var _p40 = _p29._0._2; + var _p39 = _p29._0._4; + var _p38 = _p29._0._1; + var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); + var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); + var k = _p37._0; + var v = _p37._1; + return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); + } + } + }); +var _elm_lang$core$Dict$map = F2( + function (f, dict) { + var _p41 = dict; + if (_p41.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + var _p42 = _p41._1; + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _p41._0, + _p42, + A2(f, _p42, _p41._2), + A2(_elm_lang$core$Dict$map, f, _p41._3), + A2(_elm_lang$core$Dict$map, f, _p41._4)); + } + }); +var _elm_lang$core$Dict$Same = {ctor: 'Same'}; +var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; +var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; +var _elm_lang$core$Dict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p43 = dict; + if (_p43.ctor === 'RBEmpty_elm_builtin') { + var _p44 = alter(_elm_lang$core$Maybe$Nothing); + if (_p44.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) + }; + } + } else { + var _p55 = _p43._2; + var _p54 = _p43._4; + var _p53 = _p43._3; + var _p52 = _p43._1; + var _p51 = _p43._0; + var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); + switch (_p45.ctor) { + case 'EQ': + var _p46 = alter( + _elm_lang$core$Maybe$Just(_p55)); + if (_p46.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) + }; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) + }; + } + case 'LT': + var _p47 = up(_p53); + var flag = _p47._0; + var newLeft = _p47._1; + var _p48 = flag; + switch (_p48.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) + }; + } + default: + var _p49 = up(_p54); + var flag = _p49._0; + var newRight = _p49._1; + var _p50 = flag; + switch (_p50.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) + }; + } + } + } + }; + var _p56 = up(dict); + var flag = _p56._0; + var updatedDict = _p56._1; + var _p57 = flag; + switch (_p57.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); + default: + return _elm_lang$core$Dict$blacken(updatedDict); + } + }); +var _elm_lang$core$Dict$insert = F3( + function (key, value, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _elm_lang$core$Dict$singleton = F2( + function (key, value) { + return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); + }); +var _elm_lang$core$Dict$union = F2( + function (t1, t2) { + return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); + }); +var _elm_lang$core$Dict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; + }); + return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); + }); +var _elm_lang$core$Dict$intersect = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p58) { + return A2(_elm_lang$core$Dict$member, k, t2); + }), + t1); + }); +var _elm_lang$core$Dict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p59) { + var _p60 = _p59; + var _p62 = _p60._1; + var _p61 = _p60._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), + _1: _p62 + } : { + ctor: '_Tuple2', + _0: _p61, + _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) + }; + }); + return A3( + _elm_lang$core$Dict$foldl, + add, + {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, + dict); + }); +var _elm_lang$core$Dict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); + }), + _elm_lang$core$Dict$empty, + assocs); +}; +var _elm_lang$core$Dict$remove = F2( + function (key, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _elm_lang$core$Dict$diff = F2( + function (t1, t2) { + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, v, t) { + return A2(_elm_lang$core$Dict$remove, k, t); + }), + t1, + t2); + }); + +//import Native.Scheduler // + +var _elm_lang$core$Native_Time = function() { + +var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) +{ + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); +}); + +function setInterval_(interval, task) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var id = setInterval(function() { + _elm_lang$core$Native_Scheduler.rawSpawn(task); + }, interval); + + return function() { clearInterval(id); }; + }); +} + +return { + now: now, + setInterval_: F2(setInterval_) +}; + +}(); +var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; +var _elm_lang$core$Time$spawnHelp = F3( + function (router, intervals, processes) { + var _p0 = intervals; + if (_p0.ctor === '[]') { + return _elm_lang$core$Task$succeed(processes); + } else { + var _p1 = _p0._0; + var spawnRest = function (id) { + return A3( + _elm_lang$core$Time$spawnHelp, + router, + _p0._1, + A3(_elm_lang$core$Dict$insert, _p1, id, processes)); + }; + var spawnTimer = _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Time$setInterval, + _p1, + A2(_elm_lang$core$Platform$sendToSelf, router, _p1))); + return A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer); + } + }); +var _elm_lang$core$Time$addMySub = F2( + function (_p2, state) { + var _p3 = _p2; + var _p6 = _p3._1; + var _p5 = _p3._0; + var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); + if (_p4.ctor === 'Nothing') { + return A3( + _elm_lang$core$Dict$insert, + _p5, + { + ctor: '::', + _0: _p6, + _1: {ctor: '[]'} + }, + state); + } else { + return A3( + _elm_lang$core$Dict$insert, + _p5, + {ctor: '::', _0: _p6, _1: _p4._0}, + state); + } + }); +var _elm_lang$core$Time$inMilliseconds = function (t) { + return t; +}; +var _elm_lang$core$Time$millisecond = 1; +var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; +var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; +var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; +var _elm_lang$core$Time$inHours = function (t) { + return t / _elm_lang$core$Time$hour; +}; +var _elm_lang$core$Time$inMinutes = function (t) { + return t / _elm_lang$core$Time$minute; +}; +var _elm_lang$core$Time$inSeconds = function (t) { + return t / _elm_lang$core$Time$second; +}; +var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; +var _elm_lang$core$Time$onSelfMsg = F3( + function (router, interval, state) { + var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); + if (_p7.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var tellTaggers = function (time) { + return _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(time)); + }, + _p7._0)); + }; + return A2( + _elm_lang$core$Task$andThen, + function (_p8) { + return _elm_lang$core$Task$succeed(state); + }, + A2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now)); + } + }); +var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); +var _elm_lang$core$Time$State = F2( + function (a, b) { + return {taggers: a, processes: b}; + }); +var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); +var _elm_lang$core$Time$onEffects = F3( + function (router, subs, _p9) { + var _p10 = _p9; + var rightStep = F3( + function (_p12, id, _p11) { + var _p13 = _p11; + return { + ctor: '_Tuple3', + _0: _p13._0, + _1: _p13._1, + _2: A2( + _elm_lang$core$Task$andThen, + function (_p14) { + return _p13._2; + }, + _elm_lang$core$Native_Scheduler.kill(id)) + }; + }); + var bothStep = F4( + function (interval, taggers, id, _p15) { + var _p16 = _p15; + return { + ctor: '_Tuple3', + _0: _p16._0, + _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), + _2: _p16._2 + }; + }); + var leftStep = F3( + function (interval, taggers, _p17) { + var _p18 = _p17; + return { + ctor: '_Tuple3', + _0: {ctor: '::', _0: interval, _1: _p18._0}, + _1: _p18._1, + _2: _p18._2 + }; + }); + var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); + var _p19 = A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + newTaggers, + _p10.processes, + { + ctor: '_Tuple3', + _0: {ctor: '[]'}, + _1: _elm_lang$core$Dict$empty, + _2: _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}) + }); + var spawnList = _p19._0; + var existingDict = _p19._1; + var killTask = _p19._2; + return A2( + _elm_lang$core$Task$andThen, + function (newProcesses) { + return _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p20) { + return A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict); + }, + killTask)); + }); +var _elm_lang$core$Time$Every = F2( + function (a, b) { + return {ctor: 'Every', _0: a, _1: b}; + }); +var _elm_lang$core$Time$every = F2( + function (interval, tagger) { + return _elm_lang$core$Time$subscription( + A2(_elm_lang$core$Time$Every, interval, tagger)); + }); +var _elm_lang$core$Time$subMap = F2( + function (f, _p21) { + var _p22 = _p21; + return A2( + _elm_lang$core$Time$Every, + _p22._0, + function (_p23) { + return f( + _p22._1(_p23)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; + +var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; +var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; + +//import Maybe, Native.Array, Native.List, Native.Utils, Result // + +var _elm_lang$core$Native_Json = function() { + + +// CORE DECODERS + +function succeed(msg) +{ + return { + ctor: '', + tag: 'succeed', + msg: msg + }; +} + +function fail(msg) +{ + return { + ctor: '', + tag: 'fail', + msg: msg + }; +} + +function decodePrimitive(tag) +{ + return { + ctor: '', + tag: tag + }; +} + +function decodeContainer(tag, decoder) +{ + return { + ctor: '', + tag: tag, + decoder: decoder + }; +} + +function decodeNull(value) +{ + return { + ctor: '', + tag: 'null', + value: value + }; +} + +function decodeField(field, decoder) +{ + return { + ctor: '', + tag: 'field', + field: field, + decoder: decoder + }; +} + +function decodeIndex(index, decoder) +{ + return { + ctor: '', + tag: 'index', + index: index, + decoder: decoder + }; +} + +function decodeKeyValuePairs(decoder) +{ + return { + ctor: '', + tag: 'key-value', + decoder: decoder + }; +} + +function mapMany(f, decoders) +{ + return { + ctor: '', + tag: 'map-many', + func: f, + decoders: decoders + }; +} + +function andThen(callback, decoder) +{ + return { + ctor: '', + tag: 'andThen', + decoder: decoder, + callback: callback + }; +} + +function oneOf(decoders) +{ + return { + ctor: '', + tag: 'oneOf', + decoders: decoders + }; +} + + +// DECODING OBJECTS + +function map1(f, d1) +{ + return mapMany(f, [d1]); +} + +function map2(f, d1, d2) +{ + return mapMany(f, [d1, d2]); +} + +function map3(f, d1, d2, d3) +{ + return mapMany(f, [d1, d2, d3]); +} + +function map4(f, d1, d2, d3, d4) +{ + return mapMany(f, [d1, d2, d3, d4]); +} + +function map5(f, d1, d2, d3, d4, d5) +{ + return mapMany(f, [d1, d2, d3, d4, d5]); +} + +function map6(f, d1, d2, d3, d4, d5, d6) +{ + return mapMany(f, [d1, d2, d3, d4, d5, d6]); +} + +function map7(f, d1, d2, d3, d4, d5, d6, d7) +{ + return mapMany(f, [d1, d2, d3, d4, d5, d6, d7]); +} + +function map8(f, d1, d2, d3, d4, d5, d6, d7, d8) +{ + return mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]); +} + + +// DECODE HELPERS + +function ok(value) +{ + return { tag: 'ok', value: value }; +} + +function badPrimitive(type, value) +{ + return { tag: 'primitive', type: type, value: value }; +} + +function badIndex(index, nestedProblems) +{ + return { tag: 'index', index: index, rest: nestedProblems }; +} + +function badField(field, nestedProblems) +{ + return { tag: 'field', field: field, rest: nestedProblems }; +} + +function badIndex(index, nestedProblems) +{ + return { tag: 'index', index: index, rest: nestedProblems }; +} + +function badOneOf(problems) +{ + return { tag: 'oneOf', problems: problems }; +} + +function bad(msg) +{ + return { tag: 'fail', msg: msg }; +} + +function badToString(problem) +{ + var context = '_'; + while (problem) + { + switch (problem.tag) + { + case 'primitive': + return 'Expecting ' + problem.type + + (context === '_' ? '' : ' at ' + context) + + ' but instead got: ' + jsToString(problem.value); + + case 'index': + context += '[' + problem.index + ']'; + problem = problem.rest; + break; + + case 'field': + context += '.' + problem.field; + problem = problem.rest; + break; + + case 'oneOf': + var problems = problem.problems; + for (var i = 0; i < problems.length; i++) + { + problems[i] = badToString(problems[i]); + } + return 'I ran into the following problems' + + (context === '_' ? '' : ' at ' + context) + + ':\n\n' + problems.join('\n'); + + case 'fail': + return 'I ran into a `fail` decoder' + + (context === '_' ? '' : ' at ' + context) + + ': ' + problem.msg; + } + } +} + +function jsToString(value) +{ + return value === undefined + ? 'undefined' + : JSON.stringify(value); +} + + +// DECODE + +function runOnString(decoder, string) +{ + var json; + try + { + json = JSON.parse(string); + } + catch (e) + { + return _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message); + } + return run(decoder, json); +} + +function run(decoder, value) +{ + var result = runHelp(decoder, value); + return (result.tag === 'ok') + ? _elm_lang$core$Result$Ok(result.value) + : _elm_lang$core$Result$Err(badToString(result)); +} + +function runHelp(decoder, value) +{ + switch (decoder.tag) + { + case 'bool': + return (typeof value === 'boolean') + ? ok(value) + : badPrimitive('a Bool', value); + + case 'int': + if (typeof value !== 'number') { + return badPrimitive('an Int', value); + } + + if (-2147483647 < value && value < 2147483647 && (value | 0) === value) { + return ok(value); + } + + if (isFinite(value) && !(value % 1)) { + return ok(value); + } + + return badPrimitive('an Int', value); + + case 'float': + return (typeof value === 'number') + ? ok(value) + : badPrimitive('a Float', value); + + case 'string': + return (typeof value === 'string') + ? ok(value) + : (value instanceof String) + ? ok(value + '') + : badPrimitive('a String', value); + + case 'null': + return (value === null) + ? ok(decoder.value) + : badPrimitive('null', value); + + case 'value': + return ok(value); + + case 'list': + if (!(value instanceof Array)) + { + return badPrimitive('a List', value); + } + + var list = _elm_lang$core$Native_List.Nil; + for (var i = value.length; i--; ) + { + var result = runHelp(decoder.decoder, value[i]); + if (result.tag !== 'ok') + { + return badIndex(i, result) + } + list = _elm_lang$core$Native_List.Cons(result.value, list); + } + return ok(list); + + case 'array': + if (!(value instanceof Array)) + { + return badPrimitive('an Array', value); + } + + var len = value.length; + var array = new Array(len); + for (var i = len; i--; ) + { + var result = runHelp(decoder.decoder, value[i]); + if (result.tag !== 'ok') + { + return badIndex(i, result); + } + array[i] = result.value; + } + return ok(_elm_lang$core$Native_Array.fromJSArray(array)); + + case 'maybe': + var result = runHelp(decoder.decoder, value); + return (result.tag === 'ok') + ? ok(_elm_lang$core$Maybe$Just(result.value)) + : ok(_elm_lang$core$Maybe$Nothing); + + case 'field': + var field = decoder.field; + if (typeof value !== 'object' || value === null || !(field in value)) + { + return badPrimitive('an object with a field named `' + field + '`', value); + } + + var result = runHelp(decoder.decoder, value[field]); + return (result.tag === 'ok') ? result : badField(field, result); + + case 'index': + var index = decoder.index; + if (!(value instanceof Array)) + { + return badPrimitive('an array', value); + } + if (index >= value.length) + { + return badPrimitive('a longer array. Need index ' + index + ' but there are only ' + value.length + ' entries', value); + } + + var result = runHelp(decoder.decoder, value[index]); + return (result.tag === 'ok') ? result : badIndex(index, result); + + case 'key-value': + if (typeof value !== 'object' || value === null || value instanceof Array) + { + return badPrimitive('an object', value); + } + + var keyValuePairs = _elm_lang$core$Native_List.Nil; + for (var key in value) + { + var result = runHelp(decoder.decoder, value[key]); + if (result.tag !== 'ok') + { + return badField(key, result); + } + var pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value); + keyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs); + } + return ok(keyValuePairs); + + case 'map-many': + var answer = decoder.func; + var decoders = decoder.decoders; + for (var i = 0; i < decoders.length; i++) + { + var result = runHelp(decoders[i], value); + if (result.tag !== 'ok') + { + return result; + } + answer = answer(result.value); + } + return ok(answer); + + case 'andThen': + var result = runHelp(decoder.decoder, value); + return (result.tag !== 'ok') + ? result + : runHelp(decoder.callback(result.value), value); + + case 'oneOf': + var errors = []; + var temp = decoder.decoders; + while (temp.ctor !== '[]') + { + var result = runHelp(temp._0, value); + + if (result.tag === 'ok') + { + return result; + } + + errors.push(result); + + temp = temp._1; + } + return badOneOf(errors); + + case 'fail': + return bad(decoder.msg); + + case 'succeed': + return ok(decoder.msg); + } +} + + +// EQUALITY + +function equality(a, b) +{ + if (a === b) + { + return true; + } + + if (a.tag !== b.tag) + { + return false; + } + + switch (a.tag) + { + case 'succeed': + case 'fail': + return a.msg === b.msg; + + case 'bool': + case 'int': + case 'float': + case 'string': + case 'value': + return true; + + case 'null': + return a.value === b.value; + + case 'list': + case 'array': + case 'maybe': + case 'key-value': + return equality(a.decoder, b.decoder); + + case 'field': + return a.field === b.field && equality(a.decoder, b.decoder); + + case 'index': + return a.index === b.index && equality(a.decoder, b.decoder); + + case 'map-many': + if (a.func !== b.func) + { + return false; + } + return listEquality(a.decoders, b.decoders); + + case 'andThen': + return a.callback === b.callback && equality(a.decoder, b.decoder); + + case 'oneOf': + return listEquality(a.decoders, b.decoders); + } +} + +function listEquality(aDecoders, bDecoders) +{ + var len = aDecoders.length; + if (len !== bDecoders.length) + { + return false; + } + for (var i = 0; i < len; i++) + { + if (!equality(aDecoders[i], bDecoders[i])) + { + return false; + } + } + return true; +} + + +// ENCODE + +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 { + encode: F2(encode), + runOnString: F2(runOnString), + run: F2(run), + + decodeNull: decodeNull, + decodePrimitive: decodePrimitive, + decodeContainer: F2(decodeContainer), + + decodeField: F2(decodeField), + decodeIndex: F2(decodeIndex), + + map1: F2(map1), + map2: F3(map2), + map3: F4(map3), + map4: F5(map4), + map5: F6(map5), + map6: F7(map6), + map7: F8(map7), + map8: F9(map8), + decodeKeyValuePairs: decodeKeyValuePairs, + + andThen: F2(andThen), + fail: fail, + succeed: succeed, + oneOf: oneOf, + + identity: identity, + encodeNull: null, + encodeArray: _elm_lang$core$Native_Array.toJSArray, + encodeList: _elm_lang$core$Native_List.toArray, + encodeObject: encodeObject, + + equality: equality +}; + +}(); + +var _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList; +var _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray; +var _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject; +var _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull; +var _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity; +var _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode; +var _elm_lang$core$Json_Encode$Value = {ctor: 'Value'}; + +var _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull; +var _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value'); +var _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen; +var _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail; +var _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed; +var _elm_lang$core$Json_Decode$lazy = function (thunk) { + return A2( + _elm_lang$core$Json_Decode$andThen, + thunk, + _elm_lang$core$Json_Decode$succeed( + {ctor: '_Tuple0'})); +}; +var _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run; +var _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString; +var _elm_lang$core$Json_Decode$map8 = _elm_lang$core$Native_Json.map8; +var _elm_lang$core$Json_Decode$map7 = _elm_lang$core$Native_Json.map7; +var _elm_lang$core$Json_Decode$map6 = _elm_lang$core$Native_Json.map6; +var _elm_lang$core$Json_Decode$map5 = _elm_lang$core$Native_Json.map5; +var _elm_lang$core$Json_Decode$map4 = _elm_lang$core$Native_Json.map4; +var _elm_lang$core$Json_Decode$map3 = _elm_lang$core$Native_Json.map3; +var _elm_lang$core$Json_Decode$map2 = _elm_lang$core$Native_Json.map2; +var _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.map1; +var _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf; +var _elm_lang$core$Json_Decode$maybe = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder); +}; +var _elm_lang$core$Json_Decode$index = _elm_lang$core$Native_Json.decodeIndex; +var _elm_lang$core$Json_Decode$field = _elm_lang$core$Native_Json.decodeField; +var _elm_lang$core$Json_Decode$at = F2( + function (fields, decoder) { + return A3(_elm_lang$core$List$foldr, _elm_lang$core$Json_Decode$field, decoder, fields); + }); +var _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs; +var _elm_lang$core$Json_Decode$dict = function (decoder) { + return A2( + _elm_lang$core$Json_Decode$map, + _elm_lang$core$Dict$fromList, + _elm_lang$core$Json_Decode$keyValuePairs(decoder)); +}; +var _elm_lang$core$Json_Decode$array = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder); +}; +var _elm_lang$core$Json_Decode$list = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder); +}; +var _elm_lang$core$Json_Decode$nullable = function (decoder) { + return _elm_lang$core$Json_Decode$oneOf( + { + ctor: '::', + _0: _elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing), + _1: { + ctor: '::', + _0: A2(_elm_lang$core$Json_Decode$map, _elm_lang$core$Maybe$Just, decoder), + _1: {ctor: '[]'} + } + }); +}; +var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float'); +var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int'); +var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool'); +var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string'); +var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'}; + +var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; +var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; +var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; + +var _elm_lang$core$Tuple$mapSecond = F2( + function (func, _p0) { + var _p1 = _p0; + return { + ctor: '_Tuple2', + _0: _p1._0, + _1: func(_p1._1) + }; + }); +var _elm_lang$core$Tuple$mapFirst = F2( + function (func, _p2) { + var _p3 = _p2; + return { + ctor: '_Tuple2', + _0: func(_p3._0), + _1: _p3._1 + }; + }); +var _elm_lang$core$Tuple$second = function (_p4) { + var _p5 = _p4; + return _p5._1; +}; +var _elm_lang$core$Tuple$first = function (_p6) { + var _p7 = _p6; + return _p7._0; +}; + +var _elm_lang$dom$Native_Dom = function() { + +var fakeNode = { + addEventListener: function() {}, + removeEventListener: function() {} +}; + +var onDocument = on(typeof document !== 'undefined' ? document : fakeNode); +var onWindow = on(typeof window !== 'undefined' ? window : fakeNode); + +function on(node) +{ + return function(eventName, decoder, toTask) + { + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + + function performTask(event) + { + var result = A2(_elm_lang$core$Json_Decode$decodeValue, decoder, event); + if (result.ctor === 'Ok') + { + _elm_lang$core$Native_Scheduler.rawSpawn(toTask(result._0)); + } + } + + node.addEventListener(eventName, performTask); + + return function() + { + node.removeEventListener(eventName, performTask); + }; + }); + }; +} + +var rAF = typeof requestAnimationFrame !== 'undefined' + ? requestAnimationFrame + : function(callback) { callback(); }; + +function withNode(id, doStuff) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + rAF(function() + { + var node = document.getElementById(id); + if (node === null) + { + callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NotFound', _0: id })); + return; + } + callback(_elm_lang$core$Native_Scheduler.succeed(doStuff(node))); + }); + }); +} + + +// FOCUS + +function focus(id) +{ + return withNode(id, function(node) { + node.focus(); + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function blur(id) +{ + return withNode(id, function(node) { + node.blur(); + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + + +// SCROLLING + +function getScrollTop(id) +{ + return withNode(id, function(node) { + return node.scrollTop; + }); +} + +function setScrollTop(id, desiredScrollTop) +{ + return withNode(id, function(node) { + node.scrollTop = desiredScrollTop; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function toBottom(id) +{ + return withNode(id, function(node) { + node.scrollTop = node.scrollHeight; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function getScrollLeft(id) +{ + return withNode(id, function(node) { + return node.scrollLeft; + }); +} + +function setScrollLeft(id, desiredScrollLeft) +{ + return withNode(id, function(node) { + node.scrollLeft = desiredScrollLeft; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + +function toRight(id) +{ + return withNode(id, function(node) { + node.scrollLeft = node.scrollWidth; + return _elm_lang$core$Native_Utils.Tuple0; + }); +} + + +// SIZE + +function width(options, id) +{ + return withNode(id, function(node) { + switch (options.ctor) + { + case 'Content': + return node.scrollWidth; + case 'VisibleContent': + return node.clientWidth; + case 'VisibleContentWithBorders': + return node.offsetWidth; + case 'VisibleContentWithBordersAndMargins': + var rect = node.getBoundingClientRect(); + return rect.right - rect.left; + } + }); +} + +function height(options, id) +{ + return withNode(id, function(node) { + switch (options.ctor) + { + case 'Content': + return node.scrollHeight; + case 'VisibleContent': + return node.clientHeight; + case 'VisibleContentWithBorders': + return node.offsetHeight; + case 'VisibleContentWithBordersAndMargins': + var rect = node.getBoundingClientRect(); + return rect.bottom - rect.top; + } + }); +} + +return { + onDocument: F3(onDocument), + onWindow: F3(onWindow), + + focus: focus, + blur: blur, + + getScrollTop: getScrollTop, + setScrollTop: F2(setScrollTop), + getScrollLeft: getScrollLeft, + setScrollLeft: F2(setScrollLeft), + toBottom: toBottom, + toRight: toRight, + + height: F2(height), + width: F2(width) +}; + +}(); + +var _elm_lang$dom$Dom_LowLevel$onWindow = _elm_lang$dom$Native_Dom.onWindow; +var _elm_lang$dom$Dom_LowLevel$onDocument = _elm_lang$dom$Native_Dom.onDocument; + +var _elm_lang$virtual_dom$VirtualDom_Debug$wrap; +var _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags; + +var _elm_lang$virtual_dom$Native_VirtualDom = function() { + +var STYLE_KEY = 'STYLE'; +var EVENT_KEY = 'EVENT'; +var ATTR_KEY = 'ATTR'; +var ATTR_NS_KEY = 'ATTR_NS'; + +var localDoc = typeof document !== 'undefined' ? document : {}; + + +//////////// VIRTUAL DOM NODES //////////// + + +function text(string) +{ + return { + type: 'text', + text: string + }; +} + + +function node(tag) +{ + return F2(function(factList, kidList) { + return nodeHelp(tag, factList, kidList); + }); +} + + +function nodeHelp(tag, factList, kidList) +{ + var organized = organizeFacts(factList); + var namespace = organized.namespace; + var facts = organized.facts; + + var children = []; + var descendantsCount = 0; + while (kidList.ctor !== '[]') + { + var kid = kidList._0; + descendantsCount += (kid.descendantsCount || 0); + children.push(kid); + kidList = kidList._1; + } + descendantsCount += children.length; + + return { + type: 'node', + tag: tag, + facts: facts, + children: children, + namespace: namespace, + descendantsCount: descendantsCount + }; +} + + +function keyedNode(tag, factList, kidList) +{ + var organized = organizeFacts(factList); + var namespace = organized.namespace; + var facts = organized.facts; + + var children = []; + var descendantsCount = 0; + while (kidList.ctor !== '[]') + { + var kid = kidList._0; + descendantsCount += (kid._1.descendantsCount || 0); + children.push(kid); + kidList = kidList._1; + } + descendantsCount += children.length; + + return { + type: 'keyed-node', + tag: tag, + facts: facts, + children: children, + namespace: namespace, + descendantsCount: descendantsCount + }; +} + + +function custom(factList, model, impl) +{ + var facts = organizeFacts(factList).facts; + + return { + type: 'custom', + facts: facts, + model: model, + impl: impl + }; +} + + +function map(tagger, node) +{ + return { + type: 'tagger', + tagger: tagger, + node: node, + descendantsCount: 1 + (node.descendantsCount || 0) + }; +} + + +function thunk(func, args, thunk) +{ + return { + type: 'thunk', + func: func, + args: args, + thunk: thunk, + node: undefined + }; +} + +function lazy(fn, a) +{ + return thunk(fn, [a], function() { + return fn(a); + }); +} + +function lazy2(fn, a, b) +{ + return thunk(fn, [a,b], function() { + return A2(fn, a, b); + }); +} + +function lazy3(fn, a, b, c) +{ + return thunk(fn, [a,b,c], function() { + return A3(fn, a, b, c); + }); +} + + + +// FACTS + + +function organizeFacts(factList) +{ + var namespace, facts = {}; + + while (factList.ctor !== '[]') + { + var entry = factList._0; + var key = entry.key; + + if (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY) + { + var subFacts = facts[key] || {}; + subFacts[entry.realKey] = entry.value; + facts[key] = subFacts; + } + else if (key === STYLE_KEY) + { + var styles = facts[key] || {}; + var styleList = entry.value; + while (styleList.ctor !== '[]') + { + var style = styleList._0; + styles[style._0] = style._1; + styleList = styleList._1; + } + facts[key] = styles; + } + else if (key === 'namespace') + { + namespace = entry.value; + } + else if (key === 'className') + { + var classes = facts[key]; + facts[key] = typeof classes === 'undefined' + ? entry.value + : classes + ' ' + entry.value; + } + else + { + facts[key] = entry.value; + } + factList = factList._1; + } + + return { + facts: facts, + namespace: namespace + }; +} + + + +//////////// PROPERTIES AND ATTRIBUTES //////////// + + +function style(value) +{ + return { + key: STYLE_KEY, + value: value + }; +} + + +function property(key, value) +{ + return { + key: key, + value: value + }; +} + + +function attribute(key, value) +{ + return { + key: ATTR_KEY, + realKey: key, + value: value + }; +} + + +function attributeNS(namespace, key, value) +{ + return { + key: ATTR_NS_KEY, + realKey: key, + value: { + value: value, + namespace: namespace + } + }; +} + + +function on(name, options, decoder) +{ + return { + key: EVENT_KEY, + realKey: name, + value: { + options: options, + decoder: decoder + } + }; +} + + +function equalEvents(a, b) +{ + if (a.options !== b.options) + { + if (a.options.stopPropagation !== b.options.stopPropagation || a.options.preventDefault !== b.options.preventDefault) + { + return false; + } + } + return _elm_lang$core$Native_Json.equality(a.decoder, b.decoder); +} + + +function mapProperty(func, property) +{ + if (property.key !== EVENT_KEY) + { + return property; + } + return on( + property.realKey, + property.value.options, + A2(_elm_lang$core$Json_Decode$map, func, property.value.decoder) + ); +} + + +//////////// RENDER //////////// + + +function render(vNode, eventNode) +{ + switch (vNode.type) + { + case 'thunk': + if (!vNode.node) + { + vNode.node = vNode.thunk(); + } + return render(vNode.node, eventNode); + + case 'tagger': + var subNode = vNode.node; + var tagger = vNode.tagger; + + while (subNode.type === 'tagger') + { + typeof tagger !== 'object' + ? tagger = [tagger, subNode.tagger] + : tagger.push(subNode.tagger); + + subNode = subNode.node; + } + + var subEventRoot = { tagger: tagger, parent: eventNode }; + var domNode = render(subNode, subEventRoot); + domNode.elm_event_node_ref = subEventRoot; + return domNode; + + case 'text': + return localDoc.createTextNode(vNode.text); + + case 'node': + var domNode = vNode.namespace + ? localDoc.createElementNS(vNode.namespace, vNode.tag) + : localDoc.createElement(vNode.tag); + + applyFacts(domNode, eventNode, vNode.facts); + + var children = vNode.children; + + for (var i = 0; i < children.length; i++) + { + domNode.appendChild(render(children[i], eventNode)); + } + + return domNode; + + case 'keyed-node': + var domNode = vNode.namespace + ? localDoc.createElementNS(vNode.namespace, vNode.tag) + : localDoc.createElement(vNode.tag); + + applyFacts(domNode, eventNode, vNode.facts); + + var children = vNode.children; + + for (var i = 0; i < children.length; i++) + { + domNode.appendChild(render(children[i]._1, eventNode)); + } + + return domNode; + + case 'custom': + var domNode = vNode.impl.render(vNode.model); + applyFacts(domNode, eventNode, vNode.facts); + return domNode; + } +} + + + +//////////// APPLY FACTS //////////// + + +function applyFacts(domNode, eventNode, facts) +{ + for (var key in facts) + { + var value = facts[key]; + + switch (key) + { + case STYLE_KEY: + applyStyles(domNode, value); + break; + + case EVENT_KEY: + applyEvents(domNode, eventNode, value); + break; + + case ATTR_KEY: + applyAttrs(domNode, value); + break; + + case ATTR_NS_KEY: + applyAttrsNS(domNode, value); + break; + + case 'value': + if (domNode[key] !== value) + { + domNode[key] = value; + } + break; + + default: + domNode[key] = value; + break; + } + } +} + +function applyStyles(domNode, styles) +{ + var domNodeStyle = domNode.style; + + for (var key in styles) + { + domNodeStyle[key] = styles[key]; + } +} + +function applyEvents(domNode, eventNode, events) +{ + var allHandlers = domNode.elm_handlers || {}; + + for (var key in events) + { + var handler = allHandlers[key]; + var value = events[key]; + + if (typeof value === 'undefined') + { + domNode.removeEventListener(key, handler); + allHandlers[key] = undefined; + } + else if (typeof handler === 'undefined') + { + var handler = makeEventHandler(eventNode, value); + domNode.addEventListener(key, handler); + allHandlers[key] = handler; + } + else + { + handler.info = value; + } + } + + domNode.elm_handlers = allHandlers; +} + +function makeEventHandler(eventNode, info) +{ + function eventHandler(event) + { + var info = eventHandler.info; + + var value = A2(_elm_lang$core$Native_Json.run, info.decoder, event); + + if (value.ctor === 'Ok') + { + var options = info.options; + if (options.stopPropagation) + { + event.stopPropagation(); + } + if (options.preventDefault) + { + event.preventDefault(); + } + + var message = value._0; + + var currentEventNode = eventNode; + while (currentEventNode) + { + var tagger = currentEventNode.tagger; + if (typeof tagger === 'function') + { + message = tagger(message); + } + else + { + for (var i = tagger.length; i--; ) + { + message = tagger[i](message); + } + } + currentEventNode = currentEventNode.parent; + } + } + }; + + eventHandler.info = info; + + return eventHandler; +} + +function applyAttrs(domNode, attrs) +{ + for (var key in attrs) + { + var value = attrs[key]; + if (typeof value === 'undefined') + { + domNode.removeAttribute(key); + } + else + { + domNode.setAttribute(key, value); + } + } +} + +function applyAttrsNS(domNode, nsAttrs) +{ + for (var key in nsAttrs) + { + var pair = nsAttrs[key]; + var namespace = pair.namespace; + var value = pair.value; + + if (typeof value === 'undefined') + { + domNode.removeAttributeNS(namespace, key); + } + else + { + domNode.setAttributeNS(namespace, key, value); + } + } +} + + + +//////////// DIFF //////////// + + +function diff(a, b) +{ + var patches = []; + diffHelp(a, b, patches, 0); + return patches; +} + + +function makePatch(type, index, data) +{ + return { + index: index, + type: type, + data: data, + domNode: undefined, + eventNode: undefined + }; +} + + +function diffHelp(a, b, patches, index) +{ + if (a === b) + { + return; + } + + var aType = a.type; + var bType = b.type; + + // Bail if you run into different types of nodes. Implies that the + // structure has changed significantly and it's not worth a diff. + if (aType !== bType) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + // Now we know that both nodes are the same type. + switch (bType) + { + case 'thunk': + var aArgs = a.args; + var bArgs = b.args; + var i = aArgs.length; + var same = a.func === b.func && i === bArgs.length; + while (same && i--) + { + same = aArgs[i] === bArgs[i]; + } + if (same) + { + b.node = a.node; + return; + } + b.node = b.thunk(); + var subPatches = []; + diffHelp(a.node, b.node, subPatches, 0); + if (subPatches.length > 0) + { + patches.push(makePatch('p-thunk', index, subPatches)); + } + return; + + case 'tagger': + // gather nested taggers + var aTaggers = a.tagger; + var bTaggers = b.tagger; + var nesting = false; + + var aSubNode = a.node; + while (aSubNode.type === 'tagger') + { + nesting = true; + + typeof aTaggers !== 'object' + ? aTaggers = [aTaggers, aSubNode.tagger] + : aTaggers.push(aSubNode.tagger); + + aSubNode = aSubNode.node; + } + + var bSubNode = b.node; + while (bSubNode.type === 'tagger') + { + nesting = true; + + typeof bTaggers !== 'object' + ? bTaggers = [bTaggers, bSubNode.tagger] + : bTaggers.push(bSubNode.tagger); + + bSubNode = bSubNode.node; + } + + // Just bail if different numbers of taggers. This implies the + // structure of the virtual DOM has changed. + if (nesting && aTaggers.length !== bTaggers.length) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + // check if taggers are "the same" + if (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers) + { + patches.push(makePatch('p-tagger', index, bTaggers)); + } + + // diff everything below the taggers + diffHelp(aSubNode, bSubNode, patches, index + 1); + return; + + case 'text': + if (a.text !== b.text) + { + patches.push(makePatch('p-text', index, b.text)); + return; + } + + return; + + case 'node': + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (a.tag !== b.tag || a.namespace !== b.namespace) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + diffChildren(a, b, patches, index); + return; + + case 'keyed-node': + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (a.tag !== b.tag || a.namespace !== b.namespace) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + diffKeyedChildren(a, b, patches, index); + return; + + case 'custom': + if (a.impl !== b.impl) + { + patches.push(makePatch('p-redraw', index, b)); + return; + } + + var factsDiff = diffFacts(a.facts, b.facts); + if (typeof factsDiff !== 'undefined') + { + patches.push(makePatch('p-facts', index, factsDiff)); + } + + var patch = b.impl.diff(a,b); + if (patch) + { + patches.push(makePatch('p-custom', index, patch)); + return; + } + + return; + } +} + + +// assumes the incoming arrays are the same length +function pairwiseRefEqual(as, bs) +{ + for (var i = 0; i < as.length; i++) + { + if (as[i] !== bs[i]) + { + return false; + } + } + + return true; +} + + +// TODO Instead of creating a new diff object, it's possible to just test if +// there *is* a diff. During the actual patch, do the diff again and make the +// modifications directly. This way, there's no new allocations. Worth it? +function diffFacts(a, b, category) +{ + var diff; + + // look for changes and removals + for (var aKey in a) + { + if (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY) + { + var subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey); + if (subDiff) + { + diff = diff || {}; + diff[aKey] = subDiff; + } + continue; + } + + // remove if not in the new facts + if (!(aKey in b)) + { + diff = diff || {}; + diff[aKey] = + (typeof category === 'undefined') + ? (typeof a[aKey] === 'string' ? '' : null) + : + (category === STYLE_KEY) + ? '' + : + (category === EVENT_KEY || category === ATTR_KEY) + ? undefined + : + { namespace: a[aKey].namespace, value: undefined }; + + continue; + } + + var aValue = a[aKey]; + var bValue = b[aKey]; + + // reference equal, so don't worry about it + if (aValue === bValue && aKey !== 'value' + || category === EVENT_KEY && equalEvents(aValue, bValue)) + { + continue; + } + + diff = diff || {}; + diff[aKey] = bValue; + } + + // add new stuff + for (var bKey in b) + { + if (!(bKey in a)) + { + diff = diff || {}; + diff[bKey] = b[bKey]; + } + } + + return diff; +} + + +function diffChildren(aParent, bParent, patches, rootIndex) +{ + var aChildren = aParent.children; + var bChildren = bParent.children; + + var aLen = aChildren.length; + var bLen = bChildren.length; + + // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS + + if (aLen > bLen) + { + patches.push(makePatch('p-remove-last', rootIndex, aLen - bLen)); + } + else if (aLen < bLen) + { + patches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen))); + } + + // PAIRWISE DIFF EVERYTHING ELSE + + var index = rootIndex; + var minLen = aLen < bLen ? aLen : bLen; + for (var i = 0; i < minLen; i++) + { + index++; + var aChild = aChildren[i]; + diffHelp(aChild, bChildren[i], patches, index); + index += aChild.descendantsCount || 0; + } +} + + + +//////////// KEYED DIFF //////////// + + +function diffKeyedChildren(aParent, bParent, patches, rootIndex) +{ + var localPatches = []; + + var changes = {}; // Dict String Entry + var inserts = []; // Array { index : Int, entry : Entry } + // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } + + var aChildren = aParent.children; + var bChildren = bParent.children; + var aLen = aChildren.length; + var bLen = bChildren.length; + var aIndex = 0; + var bIndex = 0; + + var index = rootIndex; + + while (aIndex < aLen && bIndex < bLen) + { + var a = aChildren[aIndex]; + var b = bChildren[bIndex]; + + var aKey = a._0; + var bKey = b._0; + var aNode = a._1; + var bNode = b._1; + + // check if keys match + + if (aKey === bKey) + { + index++; + diffHelp(aNode, bNode, localPatches, index); + index += aNode.descendantsCount || 0; + + aIndex++; + bIndex++; + continue; + } + + // look ahead 1 to detect insertions and removals. + + var aLookAhead = aIndex + 1 < aLen; + var bLookAhead = bIndex + 1 < bLen; + + if (aLookAhead) + { + var aNext = aChildren[aIndex + 1]; + var aNextKey = aNext._0; + var aNextNode = aNext._1; + var oldMatch = bKey === aNextKey; + } + + if (bLookAhead) + { + var bNext = bChildren[bIndex + 1]; + var bNextKey = bNext._0; + var bNextNode = bNext._1; + var newMatch = aKey === bNextKey; + } + + + // swap a and b + if (aLookAhead && bLookAhead && newMatch && oldMatch) + { + index++; + diffHelp(aNode, bNextNode, localPatches, index); + insertNode(changes, localPatches, aKey, bNode, bIndex, inserts); + index += aNode.descendantsCount || 0; + + index++; + removeNode(changes, localPatches, aKey, aNextNode, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 2; + continue; + } + + // insert b + if (bLookAhead && newMatch) + { + index++; + insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); + diffHelp(aNode, bNextNode, localPatches, index); + index += aNode.descendantsCount || 0; + + aIndex += 1; + bIndex += 2; + continue; + } + + // remove a + if (aLookAhead && oldMatch) + { + index++; + removeNode(changes, localPatches, aKey, aNode, index); + index += aNode.descendantsCount || 0; + + index++; + diffHelp(aNextNode, bNode, localPatches, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 1; + continue; + } + + // remove a, insert b + if (aLookAhead && bLookAhead && aNextKey === bNextKey) + { + index++; + removeNode(changes, localPatches, aKey, aNode, index); + insertNode(changes, localPatches, bKey, bNode, bIndex, inserts); + index += aNode.descendantsCount || 0; + + index++; + diffHelp(aNextNode, bNextNode, localPatches, index); + index += aNextNode.descendantsCount || 0; + + aIndex += 2; + bIndex += 2; + continue; + } + + break; + } + + // eat up any remaining nodes with removeNode and insertNode + + while (aIndex < aLen) + { + index++; + var a = aChildren[aIndex]; + var aNode = a._1; + removeNode(changes, localPatches, a._0, aNode, index); + index += aNode.descendantsCount || 0; + aIndex++; + } + + var endInserts; + while (bIndex < bLen) + { + endInserts = endInserts || []; + var b = bChildren[bIndex]; + insertNode(changes, localPatches, b._0, b._1, undefined, endInserts); + bIndex++; + } + + if (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined') + { + patches.push(makePatch('p-reorder', rootIndex, { + patches: localPatches, + inserts: inserts, + endInserts: endInserts + })); + } +} + + + +//////////// CHANGES FROM KEYED DIFF //////////// + + +var POSTFIX = '_elmW6BL'; + + +function insertNode(changes, localPatches, key, vnode, bIndex, inserts) +{ + var entry = changes[key]; + + // never seen this key before + if (typeof entry === 'undefined') + { + entry = { + tag: 'insert', + vnode: vnode, + index: bIndex, + data: undefined + }; + + inserts.push({ index: bIndex, entry: entry }); + changes[key] = entry; + + return; + } + + // this key was removed earlier, a match! + if (entry.tag === 'remove') + { + inserts.push({ index: bIndex, entry: entry }); + + entry.tag = 'move'; + var subPatches = []; + diffHelp(entry.vnode, vnode, subPatches, entry.index); + entry.index = bIndex; + entry.data.data = { + patches: subPatches, + entry: entry + }; + + return; + } + + // this key has already been inserted or moved, a duplicate! + insertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts); +} + + +function removeNode(changes, localPatches, key, vnode, index) +{ + var entry = changes[key]; + + // never seen this key before + if (typeof entry === 'undefined') + { + var patch = makePatch('p-remove', index, undefined); + localPatches.push(patch); + + changes[key] = { + tag: 'remove', + vnode: vnode, + index: index, + data: patch + }; + + return; + } + + // this key was inserted earlier, a match! + if (entry.tag === 'insert') + { + entry.tag = 'move'; + var subPatches = []; + diffHelp(vnode, entry.vnode, subPatches, index); + + var patch = makePatch('p-remove', index, { + patches: subPatches, + entry: entry + }); + localPatches.push(patch); + + return; + } + + // this key has already been removed or moved, a duplicate! + removeNode(changes, localPatches, key + POSTFIX, vnode, index); +} + + + +//////////// ADD DOM NODES //////////// +// +// Each DOM node has an "index" assigned in order of traversal. It is important +// to minimize our crawl over the actual DOM, so these indexes (along with the +// descendantsCount of virtual nodes) let us skip touching entire subtrees of +// the DOM if we know there are no patches there. + + +function addDomNodes(domNode, vNode, patches, eventNode) +{ + addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode); +} + + +// assumes `patches` is non-empty and indexes increase monotonically. +function addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode) +{ + var patch = patches[i]; + var index = patch.index; + + while (index === low) + { + var patchType = patch.type; + + if (patchType === 'p-thunk') + { + addDomNodes(domNode, vNode.node, patch.data, eventNode); + } + else if (patchType === 'p-reorder') + { + patch.domNode = domNode; + patch.eventNode = eventNode; + + var subPatches = patch.data.patches; + if (subPatches.length > 0) + { + addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + else if (patchType === 'p-remove') + { + patch.domNode = domNode; + patch.eventNode = eventNode; + + var data = patch.data; + if (typeof data !== 'undefined') + { + data.entry.data = domNode; + var subPatches = data.patches; + if (subPatches.length > 0) + { + addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + } + else + { + patch.domNode = domNode; + patch.eventNode = eventNode; + } + + i++; + + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + + switch (vNode.type) + { + case 'tagger': + var subNode = vNode.node; + + while (subNode.type === "tagger") + { + subNode = subNode.node; + } + + return addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); + + case 'node': + var vChildren = vNode.children; + var childNodes = domNode.childNodes; + for (var j = 0; j < vChildren.length; j++) + { + low++; + var vChild = vChildren[j]; + var nextLow = low + (vChild.descendantsCount || 0); + if (low <= index && index <= nextLow) + { + i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + low = nextLow; + } + return i; + + case 'keyed-node': + var vChildren = vNode.children; + var childNodes = domNode.childNodes; + for (var j = 0; j < vChildren.length; j++) + { + low++; + var vChild = vChildren[j]._1; + var nextLow = low + (vChild.descendantsCount || 0); + if (low <= index && index <= nextLow) + { + i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode); + if (!(patch = patches[i]) || (index = patch.index) > high) + { + return i; + } + } + low = nextLow; + } + return i; + + case 'text': + case 'thunk': + throw new Error('should never traverse `text` or `thunk` nodes like this'); + } +} + + + +//////////// APPLY PATCHES //////////// + + +function applyPatches(rootDomNode, oldVirtualNode, patches, eventNode) +{ + if (patches.length === 0) + { + return rootDomNode; + } + + addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); + return applyPatchesHelp(rootDomNode, patches); +} + +function applyPatchesHelp(rootDomNode, patches) +{ + for (var i = 0; i < patches.length; i++) + { + var patch = patches[i]; + var localDomNode = patch.domNode + var newNode = applyPatch(localDomNode, patch); + if (localDomNode === rootDomNode) + { + rootDomNode = newNode; + } + } + return rootDomNode; +} + +function applyPatch(domNode, patch) +{ + switch (patch.type) + { + case 'p-redraw': + return applyPatchRedraw(domNode, patch.data, patch.eventNode); + + case 'p-facts': + applyFacts(domNode, patch.eventNode, patch.data); + return domNode; + + case 'p-text': + domNode.replaceData(0, domNode.length, patch.data); + return domNode; + + case 'p-thunk': + return applyPatchesHelp(domNode, patch.data); + + case 'p-tagger': + if (typeof domNode.elm_event_node_ref !== 'undefined') + { + domNode.elm_event_node_ref.tagger = patch.data; + } + else + { + domNode.elm_event_node_ref = { tagger: patch.data, parent: patch.eventNode }; + } + return domNode; + + case 'p-remove-last': + var i = patch.data; + while (i--) + { + domNode.removeChild(domNode.lastChild); + } + return domNode; + + case 'p-append': + var newNodes = patch.data; + for (var i = 0; i < newNodes.length; i++) + { + domNode.appendChild(render(newNodes[i], patch.eventNode)); + } + return domNode; + + case 'p-remove': + var data = patch.data; + if (typeof data === 'undefined') + { + domNode.parentNode.removeChild(domNode); + return domNode; + } + var entry = data.entry; + if (typeof entry.index !== 'undefined') + { + domNode.parentNode.removeChild(domNode); + } + entry.data = applyPatchesHelp(domNode, data.patches); + return domNode; + + case 'p-reorder': + return applyPatchReorder(domNode, patch); + + case 'p-custom': + var impl = patch.data; + return impl.applyPatch(domNode, impl.data); + + default: + throw new Error('Ran into an unknown patch!'); + } +} + + +function applyPatchRedraw(domNode, vNode, eventNode) +{ + var parentNode = domNode.parentNode; + var newNode = render(vNode, eventNode); + + if (typeof newNode.elm_event_node_ref === 'undefined') + { + newNode.elm_event_node_ref = domNode.elm_event_node_ref; + } + + if (parentNode && newNode !== domNode) + { + parentNode.replaceChild(newNode, domNode); + } + return newNode; +} + + +function applyPatchReorder(domNode, patch) +{ + var data = patch.data; + + // remove end inserts + var frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch); + + // removals + domNode = applyPatchesHelp(domNode, data.patches); + + // inserts + var inserts = data.inserts; + for (var i = 0; i < inserts.length; i++) + { + var insert = inserts[i]; + var entry = insert.entry; + var node = entry.tag === 'move' + ? entry.data + : render(entry.vnode, patch.eventNode); + domNode.insertBefore(node, domNode.childNodes[insert.index]); + } + + // add end inserts + if (typeof frag !== 'undefined') + { + domNode.appendChild(frag); + } + + return domNode; +} + + +function applyPatchReorderEndInsertsHelp(endInserts, patch) +{ + if (typeof endInserts === 'undefined') + { + return; + } + + var frag = localDoc.createDocumentFragment(); + for (var i = 0; i < endInserts.length; i++) + { + var insert = endInserts[i]; + var entry = insert.entry; + frag.appendChild(entry.tag === 'move' + ? entry.data + : render(entry.vnode, patch.eventNode) + ); + } + return frag; +} + + +// PROGRAMS + +var program = makeProgram(checkNoFlags); +var programWithFlags = makeProgram(checkYesFlags); + +function makeProgram(flagChecker) +{ + return F2(function(debugWrap, impl) + { + return function(flagDecoder) + { + return function(object, moduleName, debugMetadata) + { + var checker = flagChecker(flagDecoder, moduleName); + if (typeof debugMetadata === 'undefined') + { + normalSetup(impl, object, moduleName, checker); + } + else + { + debugSetup(A2(debugWrap, debugMetadata, impl), object, moduleName, checker); + } + }; + }; + }); +} + +function staticProgram(vNode) +{ + var nothing = _elm_lang$core$Native_Utils.Tuple2( + _elm_lang$core$Native_Utils.Tuple0, + _elm_lang$core$Platform_Cmd$none + ); + return A2(program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, { + init: nothing, + view: function() { return vNode; }, + update: F2(function() { return nothing; }), + subscriptions: function() { return _elm_lang$core$Platform_Sub$none; } + })(); +} + + +// FLAG CHECKERS + +function checkNoFlags(flagDecoder, moduleName) +{ + return function(init, flags, domNode) + { + if (typeof flags === 'undefined') + { + return init; + } + + var errorMessage = + 'The `' + moduleName + '` module does not need flags.\n' + + 'Initialize it with no arguments and you should be all set!'; + + crash(errorMessage, domNode); + }; +} + +function checkYesFlags(flagDecoder, moduleName) +{ + return function(init, flags, domNode) + { + if (typeof flagDecoder === 'undefined') + { + var errorMessage = + 'Are you trying to sneak a Never value into Elm? Trickster!\n' + + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n' + + 'Use `program` instead if you do not want flags.' + + crash(errorMessage, domNode); + } + + var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); + if (result.ctor === 'Ok') + { + return init(result._0); + } + + var errorMessage = + 'Trying to initialize the `' + moduleName + '` module with an unexpected flag.\n' + + 'I tried to convert it to an Elm value, but ran into this problem:\n\n' + + result._0; + + crash(errorMessage, domNode); + }; +} + +function crash(errorMessage, domNode) +{ + if (domNode) + { + domNode.innerHTML = + '
' + + '

Oops! Something went wrong when starting your Elm program.

' + + '
' + errorMessage + '
' + + '
'; + } + + throw new Error(errorMessage); +} + + +// NORMAL SETUP + +function normalSetup(impl, object, moduleName, flagChecker) +{ + object['embed'] = function embed(node, flags) + { + while (node.lastChild) + { + node.removeChild(node.lastChild); + } + + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, node), + impl.update, + impl.subscriptions, + normalRenderer(node, impl.view) + ); + }; + + object['fullscreen'] = function fullscreen(flags) + { + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, document.body), + impl.update, + impl.subscriptions, + normalRenderer(document.body, impl.view) + ); + }; +} + +function normalRenderer(parentNode, view) +{ + return function(tagger, initialModel) + { + var eventNode = { tagger: tagger, parent: undefined }; + var initialVirtualNode = view(initialModel); + var domNode = render(initialVirtualNode, eventNode); + parentNode.appendChild(domNode); + return makeStepper(domNode, view, initialVirtualNode, eventNode); + }; +} + + +// STEPPER + +var rAF = + typeof requestAnimationFrame !== 'undefined' + ? requestAnimationFrame + : function(callback) { setTimeout(callback, 1000 / 60); }; + +function makeStepper(domNode, view, initialVirtualNode, eventNode) +{ + var state = 'NO_REQUEST'; + var currNode = initialVirtualNode; + var nextModel; + + function updateIfNeeded() + { + switch (state) + { + case 'NO_REQUEST': + throw new Error( + 'Unexpected draw callback.\n' + + 'Please report this to .' + ); + + case 'PENDING_REQUEST': + rAF(updateIfNeeded); + state = 'EXTRA_REQUEST'; + + var nextNode = view(nextModel); + var patches = diff(currNode, nextNode); + domNode = applyPatches(domNode, currNode, patches, eventNode); + currNode = nextNode; + + return; + + case 'EXTRA_REQUEST': + state = 'NO_REQUEST'; + return; + } + } + + return function stepper(model) + { + if (state === 'NO_REQUEST') + { + rAF(updateIfNeeded); + } + state = 'PENDING_REQUEST'; + nextModel = model; + }; +} + + +// DEBUG SETUP + +function debugSetup(impl, object, moduleName, flagChecker) +{ + object['fullscreen'] = function fullscreen(flags) + { + var popoutRef = { doc: undefined }; + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, document.body), + impl.update(scrollTask(popoutRef)), + impl.subscriptions, + debugRenderer(moduleName, document.body, popoutRef, impl.view, impl.viewIn, impl.viewOut) + ); + }; + + object['embed'] = function fullscreen(node, flags) + { + var popoutRef = { doc: undefined }; + return _elm_lang$core$Native_Platform.initialize( + flagChecker(impl.init, flags, node), + impl.update(scrollTask(popoutRef)), + impl.subscriptions, + debugRenderer(moduleName, node, popoutRef, impl.view, impl.viewIn, impl.viewOut) + ); + }; +} + +function scrollTask(popoutRef) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var doc = popoutRef.doc; + if (doc) + { + var msgs = doc.getElementsByClassName('debugger-sidebar-messages')[0]; + if (msgs) + { + msgs.scrollTop = msgs.scrollHeight; + } + } + callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); +} + + +function debugRenderer(moduleName, parentNode, popoutRef, view, viewIn, viewOut) +{ + return function(tagger, initialModel) + { + var appEventNode = { tagger: tagger, parent: undefined }; + var eventNode = { tagger: tagger, parent: undefined }; + + // make normal stepper + var appVirtualNode = view(initialModel); + var appNode = render(appVirtualNode, appEventNode); + parentNode.appendChild(appNode); + var appStepper = makeStepper(appNode, view, appVirtualNode, appEventNode); + + // make overlay stepper + var overVirtualNode = viewIn(initialModel)._1; + var overNode = render(overVirtualNode, eventNode); + parentNode.appendChild(overNode); + var wrappedViewIn = wrapViewIn(appEventNode, overNode, viewIn); + var overStepper = makeStepper(overNode, wrappedViewIn, overVirtualNode, eventNode); + + // make debugger stepper + var debugStepper = makeDebugStepper(initialModel, viewOut, eventNode, parentNode, moduleName, popoutRef); + + return function stepper(model) + { + appStepper(model); + overStepper(model); + debugStepper(model); + } + }; +} + +function makeDebugStepper(initialModel, view, eventNode, parentNode, moduleName, popoutRef) +{ + var curr; + var domNode; + + return function stepper(model) + { + if (!model.isDebuggerOpen) + { + return; + } + + if (!popoutRef.doc) + { + curr = view(model); + domNode = openDebugWindow(moduleName, popoutRef, curr, eventNode); + return; + } + + // switch to document of popout + localDoc = popoutRef.doc; + + var next = view(model); + var patches = diff(curr, next); + domNode = applyPatches(domNode, curr, patches, eventNode); + curr = next; + + // switch back to normal document + localDoc = document; + }; +} + +function openDebugWindow(moduleName, popoutRef, virtualNode, eventNode) +{ + var w = 900; + var h = 360; + var x = screen.width - w; + var y = screen.height - h; + var debugWindow = window.open('', '', 'width=' + w + ',height=' + h + ',left=' + x + ',top=' + y); + + // switch to window document + localDoc = debugWindow.document; + + popoutRef.doc = localDoc; + localDoc.title = 'Debugger - ' + moduleName; + localDoc.body.style.margin = '0'; + localDoc.body.style.padding = '0'; + var domNode = render(virtualNode, eventNode); + localDoc.body.appendChild(domNode); + + localDoc.addEventListener('keydown', function(event) { + if (event.metaKey && event.which === 82) + { + window.location.reload(); + } + if (event.which === 38) + { + eventNode.tagger({ ctor: 'Up' }); + event.preventDefault(); + } + if (event.which === 40) + { + eventNode.tagger({ ctor: 'Down' }); + event.preventDefault(); + } + }); + + function close() + { + popoutRef.doc = undefined; + debugWindow.close(); + } + window.addEventListener('unload', close); + debugWindow.addEventListener('unload', function() { + popoutRef.doc = undefined; + window.removeEventListener('unload', close); + eventNode.tagger({ ctor: 'Close' }); + }); + + // switch back to the normal document + localDoc = document; + + return domNode; +} + + +// BLOCK EVENTS + +function wrapViewIn(appEventNode, overlayNode, viewIn) +{ + var ignorer = makeIgnorer(overlayNode); + var blocking = 'Normal'; + var overflow; + + var normalTagger = appEventNode.tagger; + var blockTagger = function() {}; + + return function(model) + { + var tuple = viewIn(model); + var newBlocking = tuple._0.ctor; + appEventNode.tagger = newBlocking === 'Normal' ? normalTagger : blockTagger; + if (blocking !== newBlocking) + { + traverse('removeEventListener', ignorer, blocking); + traverse('addEventListener', ignorer, newBlocking); + + if (blocking === 'Normal') + { + overflow = document.body.style.overflow; + document.body.style.overflow = 'hidden'; + } + + if (newBlocking === 'Normal') + { + document.body.style.overflow = overflow; + } + + blocking = newBlocking; + } + return tuple._1; + } +} + +function traverse(verbEventListener, ignorer, blocking) +{ + switch(blocking) + { + case 'Normal': + return; + + case 'Pause': + return traverseHelp(verbEventListener, ignorer, mostEvents); + + case 'Message': + return traverseHelp(verbEventListener, ignorer, allEvents); + } +} + +function traverseHelp(verbEventListener, handler, eventNames) +{ + for (var i = 0; i < eventNames.length; i++) + { + document.body[verbEventListener](eventNames[i], handler, true); + } +} + +function makeIgnorer(overlayNode) +{ + return function(event) + { + if (event.type === 'keydown' && event.metaKey && event.which === 82) + { + return; + } + + var isScroll = event.type === 'scroll' || event.type === 'wheel'; + + var node = event.target; + while (node !== null) + { + if (node.className === 'elm-overlay-message-details' && isScroll) + { + return; + } + + if (node === overlayNode && !isScroll) + { + return; + } + node = node.parentNode; + } + + event.stopPropagation(); + event.preventDefault(); + } +} + +var mostEvents = [ + 'click', 'dblclick', 'mousemove', + 'mouseup', 'mousedown', 'mouseenter', 'mouseleave', + 'touchstart', 'touchend', 'touchcancel', 'touchmove', + 'pointerdown', 'pointerup', 'pointerover', 'pointerout', + 'pointerenter', 'pointerleave', 'pointermove', 'pointercancel', + 'dragstart', 'drag', 'dragend', 'dragenter', 'dragover', 'dragleave', 'drop', + 'keyup', 'keydown', 'keypress', + 'input', 'change', + 'focus', 'blur' +]; + +var allEvents = mostEvents.concat('wheel', 'scroll'); + + +return { + node: node, + text: text, + custom: custom, + map: F2(map), + + on: F3(on), + style: style, + property: F2(property), + attribute: F2(attribute), + attributeNS: F3(attributeNS), + mapProperty: F2(mapProperty), + + lazy: F2(lazy), + lazy2: F3(lazy2), + lazy3: F4(lazy3), + keyedNode: F3(keyedNode), + + program: program, + programWithFlags: programWithFlags, + staticProgram: staticProgram +}; + +}(); + +var _elm_lang$virtual_dom$VirtualDom$programWithFlags = function (impl) { + return A2(_elm_lang$virtual_dom$Native_VirtualDom.programWithFlags, _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags, impl); +}; +var _elm_lang$virtual_dom$VirtualDom$program = function (impl) { + return A2(_elm_lang$virtual_dom$Native_VirtualDom.program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, impl); +}; +var _elm_lang$virtual_dom$VirtualDom$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode; +var _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3; +var _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2; +var _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy; +var _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false}; +var _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on; +var _elm_lang$virtual_dom$VirtualDom$on = F2( + function (eventName, decoder) { + return A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder); + }); +var _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style; +var _elm_lang$virtual_dom$VirtualDom$mapProperty = _elm_lang$virtual_dom$Native_VirtualDom.mapProperty; +var _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS; +var _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute; +var _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property; +var _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map; +var _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text; +var _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node; +var _elm_lang$virtual_dom$VirtualDom$Options = F2( + function (a, b) { + return {stopPropagation: a, preventDefault: b}; + }); +var _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'}; +var _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'}; + +var _elm_lang$html$Html$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags; +var _elm_lang$html$Html$program = _elm_lang$virtual_dom$VirtualDom$program; +var _elm_lang$html$Html$beginnerProgram = function (_p0) { + var _p1 = _p0; + return _elm_lang$html$Html$program( + { + init: A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _p1.model, + {ctor: '[]'}), + update: F2( + function (msg, model) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + A2(_p1.update, msg, model), + {ctor: '[]'}); + }), + view: _p1.view, + subscriptions: function (_p2) { + return _elm_lang$core$Platform_Sub$none; + } + }); +}; +var _elm_lang$html$Html$map = _elm_lang$virtual_dom$VirtualDom$map; +var _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text; +var _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node; +var _elm_lang$html$Html$body = _elm_lang$html$Html$node('body'); +var _elm_lang$html$Html$section = _elm_lang$html$Html$node('section'); +var _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav'); +var _elm_lang$html$Html$article = _elm_lang$html$Html$node('article'); +var _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside'); +var _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1'); +var _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2'); +var _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3'); +var _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4'); +var _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5'); +var _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6'); +var _elm_lang$html$Html$header = _elm_lang$html$Html$node('header'); +var _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer'); +var _elm_lang$html$Html$address = _elm_lang$html$Html$node('address'); +var _elm_lang$html$Html$main_ = _elm_lang$html$Html$node('main'); +var _elm_lang$html$Html$p = _elm_lang$html$Html$node('p'); +var _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr'); +var _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre'); +var _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote'); +var _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol'); +var _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul'); +var _elm_lang$html$Html$li = _elm_lang$html$Html$node('li'); +var _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl'); +var _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt'); +var _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd'); +var _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure'); +var _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption'); +var _elm_lang$html$Html$div = _elm_lang$html$Html$node('div'); +var _elm_lang$html$Html$a = _elm_lang$html$Html$node('a'); +var _elm_lang$html$Html$em = _elm_lang$html$Html$node('em'); +var _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong'); +var _elm_lang$html$Html$small = _elm_lang$html$Html$node('small'); +var _elm_lang$html$Html$s = _elm_lang$html$Html$node('s'); +var _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite'); +var _elm_lang$html$Html$q = _elm_lang$html$Html$node('q'); +var _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn'); +var _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr'); +var _elm_lang$html$Html$time = _elm_lang$html$Html$node('time'); +var _elm_lang$html$Html$code = _elm_lang$html$Html$node('code'); +var _elm_lang$html$Html$var = _elm_lang$html$Html$node('var'); +var _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp'); +var _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd'); +var _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub'); +var _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup'); +var _elm_lang$html$Html$i = _elm_lang$html$Html$node('i'); +var _elm_lang$html$Html$b = _elm_lang$html$Html$node('b'); +var _elm_lang$html$Html$u = _elm_lang$html$Html$node('u'); +var _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark'); +var _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby'); +var _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt'); +var _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp'); +var _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi'); +var _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo'); +var _elm_lang$html$Html$span = _elm_lang$html$Html$node('span'); +var _elm_lang$html$Html$br = _elm_lang$html$Html$node('br'); +var _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr'); +var _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins'); +var _elm_lang$html$Html$del = _elm_lang$html$Html$node('del'); +var _elm_lang$html$Html$img = _elm_lang$html$Html$node('img'); +var _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe'); +var _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed'); +var _elm_lang$html$Html$object = _elm_lang$html$Html$node('object'); +var _elm_lang$html$Html$param = _elm_lang$html$Html$node('param'); +var _elm_lang$html$Html$video = _elm_lang$html$Html$node('video'); +var _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio'); +var _elm_lang$html$Html$source = _elm_lang$html$Html$node('source'); +var _elm_lang$html$Html$track = _elm_lang$html$Html$node('track'); +var _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas'); +var _elm_lang$html$Html$math = _elm_lang$html$Html$node('math'); +var _elm_lang$html$Html$table = _elm_lang$html$Html$node('table'); +var _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption'); +var _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup'); +var _elm_lang$html$Html$col = _elm_lang$html$Html$node('col'); +var _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody'); +var _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead'); +var _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot'); +var _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr'); +var _elm_lang$html$Html$td = _elm_lang$html$Html$node('td'); +var _elm_lang$html$Html$th = _elm_lang$html$Html$node('th'); +var _elm_lang$html$Html$form = _elm_lang$html$Html$node('form'); +var _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset'); +var _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend'); +var _elm_lang$html$Html$label = _elm_lang$html$Html$node('label'); +var _elm_lang$html$Html$input = _elm_lang$html$Html$node('input'); +var _elm_lang$html$Html$button = _elm_lang$html$Html$node('button'); +var _elm_lang$html$Html$select = _elm_lang$html$Html$node('select'); +var _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist'); +var _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup'); +var _elm_lang$html$Html$option = _elm_lang$html$Html$node('option'); +var _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea'); +var _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen'); +var _elm_lang$html$Html$output = _elm_lang$html$Html$node('output'); +var _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress'); +var _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter'); +var _elm_lang$html$Html$details = _elm_lang$html$Html$node('details'); +var _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary'); +var _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem'); +var _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu'); + +var _elm_lang$html$Html_Attributes$map = _elm_lang$virtual_dom$VirtualDom$mapProperty; +var _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute; +var _elm_lang$html$Html_Attributes$contextmenu = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value); +}; +var _elm_lang$html$Html_Attributes$draggable = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'draggable', value); +}; +var _elm_lang$html$Html_Attributes$itemprop = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'itemprop', value); +}; +var _elm_lang$html$Html_Attributes$tabindex = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'tabIndex', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$charset = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'charset', value); +}; +var _elm_lang$html$Html_Attributes$height = function (value) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'height', + _elm_lang$core$Basics$toString(value)); +}; +var _elm_lang$html$Html_Attributes$width = function (value) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'width', + _elm_lang$core$Basics$toString(value)); +}; +var _elm_lang$html$Html_Attributes$formaction = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'formAction', value); +}; +var _elm_lang$html$Html_Attributes$list = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'list', value); +}; +var _elm_lang$html$Html_Attributes$minlength = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'minLength', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$maxlength = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'maxlength', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$size = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'size', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$form = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'form', value); +}; +var _elm_lang$html$Html_Attributes$cols = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'cols', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$rows = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'rows', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$challenge = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'challenge', value); +}; +var _elm_lang$html$Html_Attributes$media = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'media', value); +}; +var _elm_lang$html$Html_Attributes$rel = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'rel', value); +}; +var _elm_lang$html$Html_Attributes$datetime = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'datetime', value); +}; +var _elm_lang$html$Html_Attributes$pubdate = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'pubdate', value); +}; +var _elm_lang$html$Html_Attributes$colspan = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'colspan', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$rowspan = function (n) { + return A2( + _elm_lang$html$Html_Attributes$attribute, + 'rowspan', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$manifest = function (value) { + return A2(_elm_lang$html$Html_Attributes$attribute, 'manifest', value); +}; +var _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property; +var _elm_lang$html$Html_Attributes$stringProperty = F2( + function (name, string) { + return A2( + _elm_lang$html$Html_Attributes$property, + name, + _elm_lang$core$Json_Encode$string(string)); + }); +var _elm_lang$html$Html_Attributes$class = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name); +}; +var _elm_lang$html$Html_Attributes$id = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name); +}; +var _elm_lang$html$Html_Attributes$title = function (name) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name); +}; +var _elm_lang$html$Html_Attributes$accesskey = function ($char) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'accessKey', + _elm_lang$core$String$fromChar($char)); +}; +var _elm_lang$html$Html_Attributes$dir = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value); +}; +var _elm_lang$html$Html_Attributes$dropzone = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value); +}; +var _elm_lang$html$Html_Attributes$lang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value); +}; +var _elm_lang$html$Html_Attributes$content = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value); +}; +var _elm_lang$html$Html_Attributes$httpEquiv = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value); +}; +var _elm_lang$html$Html_Attributes$language = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value); +}; +var _elm_lang$html$Html_Attributes$src = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value); +}; +var _elm_lang$html$Html_Attributes$alt = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value); +}; +var _elm_lang$html$Html_Attributes$preload = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value); +}; +var _elm_lang$html$Html_Attributes$poster = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value); +}; +var _elm_lang$html$Html_Attributes$kind = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value); +}; +var _elm_lang$html$Html_Attributes$srclang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value); +}; +var _elm_lang$html$Html_Attributes$sandbox = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value); +}; +var _elm_lang$html$Html_Attributes$srcdoc = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value); +}; +var _elm_lang$html$Html_Attributes$type_ = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value); +}; +var _elm_lang$html$Html_Attributes$value = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value); +}; +var _elm_lang$html$Html_Attributes$defaultValue = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value); +}; +var _elm_lang$html$Html_Attributes$placeholder = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value); +}; +var _elm_lang$html$Html_Attributes$accept = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value); +}; +var _elm_lang$html$Html_Attributes$acceptCharset = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value); +}; +var _elm_lang$html$Html_Attributes$action = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value); +}; +var _elm_lang$html$Html_Attributes$autocomplete = function (bool) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'autocomplete', + bool ? 'on' : 'off'); +}; +var _elm_lang$html$Html_Attributes$enctype = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value); +}; +var _elm_lang$html$Html_Attributes$method = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value); +}; +var _elm_lang$html$Html_Attributes$name = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value); +}; +var _elm_lang$html$Html_Attributes$pattern = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value); +}; +var _elm_lang$html$Html_Attributes$for = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value); +}; +var _elm_lang$html$Html_Attributes$max = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value); +}; +var _elm_lang$html$Html_Attributes$min = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value); +}; +var _elm_lang$html$Html_Attributes$step = function (n) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n); +}; +var _elm_lang$html$Html_Attributes$wrap = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value); +}; +var _elm_lang$html$Html_Attributes$usemap = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value); +}; +var _elm_lang$html$Html_Attributes$shape = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value); +}; +var _elm_lang$html$Html_Attributes$coords = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value); +}; +var _elm_lang$html$Html_Attributes$keytype = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value); +}; +var _elm_lang$html$Html_Attributes$align = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value); +}; +var _elm_lang$html$Html_Attributes$cite = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value); +}; +var _elm_lang$html$Html_Attributes$href = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value); +}; +var _elm_lang$html$Html_Attributes$target = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value); +}; +var _elm_lang$html$Html_Attributes$downloadAs = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value); +}; +var _elm_lang$html$Html_Attributes$hreflang = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value); +}; +var _elm_lang$html$Html_Attributes$ping = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value); +}; +var _elm_lang$html$Html_Attributes$start = function (n) { + return A2( + _elm_lang$html$Html_Attributes$stringProperty, + 'start', + _elm_lang$core$Basics$toString(n)); +}; +var _elm_lang$html$Html_Attributes$headers = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value); +}; +var _elm_lang$html$Html_Attributes$scope = function (value) { + return A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value); +}; +var _elm_lang$html$Html_Attributes$boolProperty = F2( + function (name, bool) { + return A2( + _elm_lang$html$Html_Attributes$property, + name, + _elm_lang$core$Json_Encode$bool(bool)); + }); +var _elm_lang$html$Html_Attributes$hidden = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool); +}; +var _elm_lang$html$Html_Attributes$contenteditable = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool); +}; +var _elm_lang$html$Html_Attributes$spellcheck = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool); +}; +var _elm_lang$html$Html_Attributes$async = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool); +}; +var _elm_lang$html$Html_Attributes$defer = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool); +}; +var _elm_lang$html$Html_Attributes$scoped = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool); +}; +var _elm_lang$html$Html_Attributes$autoplay = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool); +}; +var _elm_lang$html$Html_Attributes$controls = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool); +}; +var _elm_lang$html$Html_Attributes$loop = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool); +}; +var _elm_lang$html$Html_Attributes$default = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool); +}; +var _elm_lang$html$Html_Attributes$seamless = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool); +}; +var _elm_lang$html$Html_Attributes$checked = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool); +}; +var _elm_lang$html$Html_Attributes$selected = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool); +}; +var _elm_lang$html$Html_Attributes$autofocus = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool); +}; +var _elm_lang$html$Html_Attributes$disabled = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool); +}; +var _elm_lang$html$Html_Attributes$multiple = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool); +}; +var _elm_lang$html$Html_Attributes$novalidate = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool); +}; +var _elm_lang$html$Html_Attributes$readonly = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool); +}; +var _elm_lang$html$Html_Attributes$required = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool); +}; +var _elm_lang$html$Html_Attributes$ismap = function (value) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value); +}; +var _elm_lang$html$Html_Attributes$download = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool); +}; +var _elm_lang$html$Html_Attributes$reversed = function (bool) { + return A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool); +}; +var _elm_lang$html$Html_Attributes$classList = function (list) { + return _elm_lang$html$Html_Attributes$class( + A2( + _elm_lang$core$String$join, + ' ', + A2( + _elm_lang$core$List$map, + _elm_lang$core$Tuple$first, + A2(_elm_lang$core$List$filter, _elm_lang$core$Tuple$second, list)))); +}; +var _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style; + +var _elm_lang$html$Html_Events$keyCode = A2(_elm_lang$core$Json_Decode$field, 'keyCode', _elm_lang$core$Json_Decode$int); +var _elm_lang$html$Html_Events$targetChecked = A2( + _elm_lang$core$Json_Decode$at, + { + ctor: '::', + _0: 'target', + _1: { + ctor: '::', + _0: 'checked', + _1: {ctor: '[]'} + } + }, + _elm_lang$core$Json_Decode$bool); +var _elm_lang$html$Html_Events$targetValue = A2( + _elm_lang$core$Json_Decode$at, + { + ctor: '::', + _0: 'target', + _1: { + ctor: '::', + _0: 'value', + _1: {ctor: '[]'} + } + }, + _elm_lang$core$Json_Decode$string); +var _elm_lang$html$Html_Events$defaultOptions = _elm_lang$virtual_dom$VirtualDom$defaultOptions; +var _elm_lang$html$Html_Events$onWithOptions = _elm_lang$virtual_dom$VirtualDom$onWithOptions; +var _elm_lang$html$Html_Events$on = _elm_lang$virtual_dom$VirtualDom$on; +var _elm_lang$html$Html_Events$onFocus = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'focus', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onBlur = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'blur', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onSubmitOptions = _elm_lang$core$Native_Utils.update( + _elm_lang$html$Html_Events$defaultOptions, + {preventDefault: true}); +var _elm_lang$html$Html_Events$onSubmit = function (msg) { + return A3( + _elm_lang$html$Html_Events$onWithOptions, + 'submit', + _elm_lang$html$Html_Events$onSubmitOptions, + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onCheck = function (tagger) { + return A2( + _elm_lang$html$Html_Events$on, + 'change', + A2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetChecked)); +}; +var _elm_lang$html$Html_Events$onInput = function (tagger) { + return A2( + _elm_lang$html$Html_Events$on, + 'input', + A2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetValue)); +}; +var _elm_lang$html$Html_Events$onMouseOut = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseout', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseOver = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseover', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseLeave = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseleave', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseEnter = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseenter', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseUp = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mouseup', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onMouseDown = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'mousedown', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onDoubleClick = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'dblclick', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$onClick = function (msg) { + return A2( + _elm_lang$html$Html_Events$on, + 'click', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$html$Html_Events$Options = F2( + function (a, b) { + return {stopPropagation: a, preventDefault: b}; + }); + +var _elm_lang$mouse$Mouse_ops = _elm_lang$mouse$Mouse_ops || {}; +_elm_lang$mouse$Mouse_ops['&>'] = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Task$andThen, + function (_p0) { + return t2; + }, + t1); + }); +var _elm_lang$mouse$Mouse$onSelfMsg = F3( + function (router, _p1, state) { + var _p2 = _p1; + var _p3 = A2(_elm_lang$core$Dict$get, _p2.category, state); + if (_p3.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var send = function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(_p2.position)); + }; + return A2( + _elm_lang$mouse$Mouse_ops['&>'], + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p3._0.taggers)), + _elm_lang$core$Task$succeed(state)); + } + }); +var _elm_lang$mouse$Mouse$init = _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty); +var _elm_lang$mouse$Mouse$categorizeHelpHelp = F2( + function (value, maybeValues) { + var _p4 = maybeValues; + if (_p4.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Just( + { + ctor: '::', + _0: value, + _1: {ctor: '[]'} + }); + } else { + return _elm_lang$core$Maybe$Just( + {ctor: '::', _0: value, _1: _p4._0}); + } + }); +var _elm_lang$mouse$Mouse$categorizeHelp = F2( + function (subs, subDict) { + categorizeHelp: + while (true) { + var _p5 = subs; + if (_p5.ctor === '[]') { + return subDict; + } else { + var _v4 = _p5._1, + _v5 = A3( + _elm_lang$core$Dict$update, + _p5._0._0, + _elm_lang$mouse$Mouse$categorizeHelpHelp(_p5._0._1), + subDict); + subs = _v4; + subDict = _v5; + continue categorizeHelp; + } + } + }); +var _elm_lang$mouse$Mouse$categorize = function (subs) { + return A2(_elm_lang$mouse$Mouse$categorizeHelp, subs, _elm_lang$core$Dict$empty); +}; +var _elm_lang$mouse$Mouse$subscription = _elm_lang$core$Native_Platform.leaf('Mouse'); +var _elm_lang$mouse$Mouse$Position = F2( + function (a, b) { + return {x: a, y: b}; + }); +var _elm_lang$mouse$Mouse$position = A3( + _elm_lang$core$Json_Decode$map2, + _elm_lang$mouse$Mouse$Position, + A2(_elm_lang$core$Json_Decode$field, 'pageX', _elm_lang$core$Json_Decode$int), + A2(_elm_lang$core$Json_Decode$field, 'pageY', _elm_lang$core$Json_Decode$int)); +var _elm_lang$mouse$Mouse$Watcher = F2( + function (a, b) { + return {taggers: a, pid: b}; + }); +var _elm_lang$mouse$Mouse$Msg = F2( + function (a, b) { + return {category: a, position: b}; + }); +var _elm_lang$mouse$Mouse$onEffects = F3( + function (router, newSubs, oldState) { + var rightStep = F3( + function (category, taggers, task) { + var tracker = A3( + _elm_lang$dom$Dom_LowLevel$onDocument, + category, + _elm_lang$mouse$Mouse$position, + function (_p6) { + return A2( + _elm_lang$core$Platform$sendToSelf, + router, + A2(_elm_lang$mouse$Mouse$Msg, category, _p6)); + }); + return A2( + _elm_lang$core$Task$andThen, + function (state) { + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$mouse$Mouse$Watcher, taggers, pid), + state)); + }, + _elm_lang$core$Process$spawn(tracker)); + }, + task); + }); + var bothStep = F4( + function (category, _p7, taggers, task) { + var _p8 = _p7; + return A2( + _elm_lang$core$Task$andThen, + function (state) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$core$Dict$insert, + category, + A2(_elm_lang$mouse$Mouse$Watcher, taggers, _p8.pid), + state)); + }, + task); + }); + var leftStep = F3( + function (category, _p9, task) { + var _p10 = _p9; + return A2( + _elm_lang$mouse$Mouse_ops['&>'], + _elm_lang$core$Process$kill(_p10.pid), + task); + }); + return A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + oldState, + _elm_lang$mouse$Mouse$categorize(newSubs), + _elm_lang$core$Task$succeed(_elm_lang$core$Dict$empty)); + }); +var _elm_lang$mouse$Mouse$MySub = F2( + function (a, b) { + return {ctor: 'MySub', _0: a, _1: b}; + }); +var _elm_lang$mouse$Mouse$clicks = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'click', tagger)); +}; +var _elm_lang$mouse$Mouse$moves = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mousemove', tagger)); +}; +var _elm_lang$mouse$Mouse$downs = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mousedown', tagger)); +}; +var _elm_lang$mouse$Mouse$ups = function (tagger) { + return _elm_lang$mouse$Mouse$subscription( + A2(_elm_lang$mouse$Mouse$MySub, 'mouseup', tagger)); +}; +var _elm_lang$mouse$Mouse$subMap = F2( + function (func, _p11) { + var _p12 = _p11; + return A2( + _elm_lang$mouse$Mouse$MySub, + _p12._0, + function (_p13) { + return func( + _p12._1(_p13)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Mouse'] = {pkg: 'elm-lang/mouse', init: _elm_lang$mouse$Mouse$init, onEffects: _elm_lang$mouse$Mouse$onEffects, onSelfMsg: _elm_lang$mouse$Mouse$onSelfMsg, tag: 'sub', subMap: _elm_lang$mouse$Mouse$subMap}; + +var _mgold$elm_animation$Animation$isStatic = function (_p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Utils.eq(_p1._0.from, _p1._0.to); +}; +var _mgold$elm_animation$Animation$isScheduled = F2( + function (t, _p2) { + var _p3 = _p2; + return (_elm_lang$core$Native_Utils.cmp(t, _p3._0.start + _p3._0.delay) < 1) && (!_mgold$elm_animation$Animation$isStatic(_p3)); + }); +var _mgold$elm_animation$Animation$getTo = function (_p4) { + var _p5 = _p4; + return _p5._0.to; +}; +var _mgold$elm_animation$Animation$getFrom = function (_p6) { + var _p7 = _p6; + return _p7._0.from; +}; +var _mgold$elm_animation$Animation$getEase = function (_p8) { + var _p9 = _p8; + return _p9._0.ease; +}; +var _mgold$elm_animation$Animation$getDelay = function (_p10) { + var _p11 = _p10; + return _p11._0.delay; +}; +var _mgold$elm_animation$Animation$getStart = function (_p12) { + var _p13 = _p12; + return _p13._0.start; +}; +var _mgold$elm_animation$Animation$timeElapsed = F2( + function (t, _p14) { + var _p15 = _p14; + return A2(_elm_lang$core$Basics$max, 0, t - (_p15._0.start + _p15._0.delay)); + }); +var _mgold$elm_animation$Animation$defaultEase = function (x) { + return (1 - _elm_lang$core$Basics$cos(_elm_lang$core$Basics$pi * x)) / 2; +}; +var _mgold$elm_animation$Animation$spd = F3( + function (dos, from, to) { + var _p16 = dos; + if (_p16.ctor === 'Duration') { + return _elm_lang$core$Basics$abs(to - from) / _p16._0; + } else { + return _p16._0; + } + }); +var _mgold$elm_animation$Animation$getSpeed = function (_p17) { + var _p18 = _p17; + return A3(_mgold$elm_animation$Animation$spd, _p18._0.dos, _p18._0.from, _p18._0.to); +}; +var _mgold$elm_animation$Animation$dur = F3( + function (dos, from, to) { + var _p19 = dos; + if (_p19.ctor === 'Duration') { + return _p19._0; + } else { + return _elm_lang$core$Basics$abs(to - from) / _p19._0; + } + }); +var _mgold$elm_animation$Animation$animate = F2( + function (t, _p20) { + var _p21 = _p20; + var _p25 = _p21._0.to; + var _p24 = _p21._0.start; + var _p23 = _p21._0.from; + var duration = A3(_mgold$elm_animation$Animation$dur, _p21._0.dos, _p23, _p25); + var fr = A3(_elm_lang$core$Basics$clamp, 0, 1, ((t - _p24) - _p21._0.delay) / duration); + var eased = _p21._0.ease(fr); + var correction = function () { + var _p22 = _p21._0.ramp; + if (_p22.ctor === 'Nothing') { + return 0; + } else { + var from_ = _p22._0 * (t - _p24); + var eased_ = _mgold$elm_animation$Animation$defaultEase(fr); + return from_ - (from_ * eased_); + } + }(); + return (_p23 + ((_p25 - _p23) * eased)) + correction; + }); +var _mgold$elm_animation$Animation$velocity = F2( + function (t, u) { + var forwDiff = A2(_mgold$elm_animation$Animation$animate, t + 10, u); + var backDiff = A2(_mgold$elm_animation$Animation$animate, t - 10, u); + return (forwDiff - backDiff) / 20; + }); +var _mgold$elm_animation$Animation$timeRemaining = F2( + function (t, _p26) { + var _p27 = _p26; + var duration = A3(_mgold$elm_animation$Animation$dur, _p27._0.dos, _p27._0.from, _p27._0.to); + return A2(_elm_lang$core$Basics$max, 0, ((_p27._0.start + _p27._0.delay) + duration) - t); + }); +var _mgold$elm_animation$Animation$getDuration = function (_p28) { + var _p29 = _p28; + return A3(_mgold$elm_animation$Animation$dur, _p29._0.dos, _p29._0.from, _p29._0.to); +}; +var _mgold$elm_animation$Animation$equals = F2( + function (_p31, _p30) { + var _p32 = _p31; + var _p35 = _p32._0; + var _p33 = _p30; + var _p34 = _p33._0; + return _elm_lang$core$Native_Utils.eq(_p35.start + _p35.delay, _p34.start + _p34.delay) && (_elm_lang$core$Native_Utils.eq(_p35.from, _p34.from) && (_elm_lang$core$Native_Utils.eq(_p35.to, _p34.to) && (_elm_lang$core$Native_Utils.eq(_p35.ramp, _p34.ramp) && ((_elm_lang$core$Native_Utils.eq(_p35.dos, _p34.dos) || (_elm_lang$core$Native_Utils.cmp( + 1.0e-3, + _elm_lang$core$Basics$abs( + A3(_mgold$elm_animation$Animation$dur, _p35.dos, _p35.from, _p35.to) - A3(_mgold$elm_animation$Animation$dur, _p34.dos, _p34.from, _p34.to))) > -1)) && A2( + _elm_lang$core$List$all, + function (t) { + return _elm_lang$core$Native_Utils.eq( + _p35.ease(t), + _p34.ease(t)); + }, + { + ctor: '::', + _0: 0.1, + _1: { + ctor: '::', + _0: 0.3, + _1: { + ctor: '::', + _0: 0.7, + _1: { + ctor: '::', + _0: 0.9, + _1: {ctor: '[]'} + } + } + } + }))))); + }); +var _mgold$elm_animation$Animation$isRunning = F2( + function (t, _p36) { + var _p37 = _p36; + var _p39 = _p37._0.start; + var _p38 = _p37._0.delay; + var duration = A3(_mgold$elm_animation$Animation$dur, _p37._0.dos, _p37._0.from, _p37._0.to); + return (_elm_lang$core$Native_Utils.cmp(t, _p39 + _p38) > 0) && ((_elm_lang$core$Native_Utils.cmp(t, (_p39 + _p38) + duration) < 0) && (!_mgold$elm_animation$Animation$isStatic(_p37))); + }); +var _mgold$elm_animation$Animation$isDone = F2( + function (t, _p40) { + var _p41 = _p40; + var duration = A3(_mgold$elm_animation$Animation$dur, _p41._0.dos, _p41._0.from, _p41._0.to); + return _mgold$elm_animation$Animation$isStatic(_p41) || (_elm_lang$core$Native_Utils.cmp(t, (_p41._0.start + _p41._0.delay) + duration) > -1); + }); +var _mgold$elm_animation$Animation$AnimRecord = F7( + function (a, b, c, d, e, f, g) { + return {start: a, delay: b, dos: c, ramp: d, ease: e, from: f, to: g}; + }); +var _mgold$elm_animation$Animation$Speed = function (a) { + return {ctor: 'Speed', _0: a}; +}; +var _mgold$elm_animation$Animation$Duration = function (a) { + return {ctor: 'Duration', _0: a}; +}; +var _mgold$elm_animation$Animation$defaultDuration = _mgold$elm_animation$Animation$Duration(750 * _elm_lang$core$Time$millisecond); +var _mgold$elm_animation$Animation$A = function (a) { + return {ctor: 'A', _0: a}; +}; +var _mgold$elm_animation$Animation$animation = function (t) { + return _mgold$elm_animation$Animation$A( + A7(_mgold$elm_animation$Animation$AnimRecord, t, 0, _mgold$elm_animation$Animation$defaultDuration, _elm_lang$core$Maybe$Nothing, _mgold$elm_animation$Animation$defaultEase, 0, 1)); +}; +var _mgold$elm_animation$Animation$static = function (x) { + return _mgold$elm_animation$Animation$A( + A7(_mgold$elm_animation$Animation$AnimRecord, 0, 0, _mgold$elm_animation$Animation$defaultDuration, _elm_lang$core$Maybe$Nothing, _mgold$elm_animation$Animation$defaultEase, x, x)); +}; +var _mgold$elm_animation$Animation$undo = F2( + function (t, _p42) { + var _p43 = _p42; + var _p44 = _p43._0; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p44, + { + from: _p44.to, + to: _p44.from, + start: t, + delay: 0 - A2(_mgold$elm_animation$Animation$timeRemaining, t, _p43), + ramp: _elm_lang$core$Maybe$Nothing, + ease: function (t) { + return 1 - _p44.ease(1 - t); + } + })); + }); +var _mgold$elm_animation$Animation$retarget = F3( + function (t, newTo, _p45) { + var _p46 = _p45; + var _p49 = _p46; + var _p48 = _p46._0; + if (_elm_lang$core$Native_Utils.eq(newTo, _p48.to)) { + return _p49; + } else { + if (_mgold$elm_animation$Animation$isStatic(_p49)) { + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p48, + {start: t, to: newTo, ramp: _elm_lang$core$Maybe$Nothing})); + } else { + if (A2(_mgold$elm_animation$Animation$isScheduled, t, _p49)) { + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p48, + {to: newTo, ramp: _elm_lang$core$Maybe$Nothing})); + } else { + if (A2(_mgold$elm_animation$Animation$isDone, t, _p49)) { + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p48, + {start: t, delay: 0, from: _p48.to, to: newTo, ramp: _elm_lang$core$Maybe$Nothing})); + } else { + var newSpeed = function () { + var _p47 = _p48.dos; + if (_p47.ctor === 'Speed') { + return _p48.dos; + } else { + return _mgold$elm_animation$Animation$Speed( + A3(_mgold$elm_animation$Animation$spd, _p48.dos, _p48.from, _p48.to)); + } + }(); + var pos = A2(_mgold$elm_animation$Animation$animate, t, _p49); + var vel = A2(_mgold$elm_animation$Animation$velocity, t, _p49); + return _mgold$elm_animation$Animation$A( + A7( + _mgold$elm_animation$Animation$AnimRecord, + t, + 0, + newSpeed, + _elm_lang$core$Maybe$Just(vel), + _p48.ease, + pos, + newTo)); + } + } + } + } + }); +var _mgold$elm_animation$Animation$duration = F2( + function (x, _p50) { + var _p51 = _p50; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p51._0, + { + dos: _mgold$elm_animation$Animation$Duration(x) + })); + }); +var _mgold$elm_animation$Animation$speed = F2( + function (x, _p52) { + var _p53 = _p52; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p53._0, + { + dos: _mgold$elm_animation$Animation$Speed( + _elm_lang$core$Basics$abs(x)) + })); + }); +var _mgold$elm_animation$Animation$delay = F2( + function (x, _p54) { + var _p55 = _p54; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p55._0, + {delay: x})); + }); +var _mgold$elm_animation$Animation$ease = F2( + function (x, _p56) { + var _p57 = _p56; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p57._0, + {ease: x})); + }); +var _mgold$elm_animation$Animation$from = F2( + function (x, _p58) { + var _p59 = _p58; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p59._0, + {from: x, ramp: _elm_lang$core$Maybe$Nothing})); + }); +var _mgold$elm_animation$Animation$to = F2( + function (x, _p60) { + var _p61 = _p60; + return _mgold$elm_animation$Animation$A( + _elm_lang$core$Native_Utils.update( + _p61._0, + {to: x, ramp: _elm_lang$core$Maybe$Nothing})); + }); + +var _user$project$Main$scaleBee = function (dimension) { + return _elm_lang$core$Basics$round(dimension / 8); +}; +var _user$project$Main$_p0 = {ctor: '_Tuple2', _0: 'imgs/mama-bee.png', _1: 'imgs/papa-bee.png'}; +var _user$project$Main$mamaBee = _user$project$Main$_p0._0; +var _user$project$Main$papaBee = _user$project$Main$_p0._1; +var _user$project$Main$_p1 = {ctor: '_Tuple3', _0: 'imgs/bee-left.png', _1: 456, _2: 640}; +var _user$project$Main$beeLeft = _user$project$Main$_p1._0; +var _user$project$Main$beeHeight = _user$project$Main$_p1._1; +var _user$project$Main$beeWidth = _user$project$Main$_p1._2; +var _user$project$Main$papaPosition = {x: 500, y: 100}; +var _user$project$Main$mamaPosition = {x: 100, y: 100}; +var _user$project$Main$viewPlayerBee = function (model) { + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src(_user$project$Main$beeLeft), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$height( + _user$project$Main$scaleBee(_user$project$Main$beeHeight)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$width( + _user$project$Main$scaleBee(_user$project$Main$beeWidth)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(model.x), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(model.y), + 'px') + }, + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + } + } + } + }, + {ctor: '[]'}); +}; +var _user$project$Main$beeVelocity = 0.5; +var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( + 'playAudio', + function (v) { + return v; + }); +var _user$project$Main$Model = F6( + function (a, b, c, d, e, f) { + return {x: a, y: b, animX: c, animY: d, mouse: e, time: f}; + }); +var _user$project$Main$Up = {ctor: 'Up'}; +var _user$project$Main$init = { + x: 0, + y: 0, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + mouse: _user$project$Main$Up, + time: 0 +}; +var _user$project$Main$Down = function (a) { + return {ctor: 'Down', _0: a}; +}; +var _user$project$Main$update = F2( + function (msg, model) { + var _p2 = msg; + switch (_p2.ctor) { + case 'PlayAudio': + return { + ctor: '_Tuple2', + _0: model, + _1: _user$project$Main$playAudio(_p2._0) + }; + case 'MouseUp': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {mouse: _user$project$Main$Up}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'MouseDown': + var _p3 = _p2._0; + var animY = A2( + _mgold$elm_animation$Animation$speed, + _user$project$Main$beeVelocity, + A2( + _mgold$elm_animation$Animation$to, + _elm_lang$core$Basics$toFloat(_p3.y), + A2( + _mgold$elm_animation$Animation$from, + _elm_lang$core$Basics$toFloat(model.y), + _mgold$elm_animation$Animation$animation(model.time)))); + var animX = A2( + _mgold$elm_animation$Animation$speed, + _user$project$Main$beeVelocity, + A2( + _mgold$elm_animation$Animation$to, + _elm_lang$core$Basics$toFloat(_p3.x), + A2( + _mgold$elm_animation$Animation$from, + _elm_lang$core$Basics$toFloat(model.x), + _mgold$elm_animation$Animation$animation(model.time)))); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + { + mouse: _user$project$Main$Down(_p3), + animX: animX, + animY: animY + }), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'Move': + var _p5 = _p2._0; + var _p4 = model.mouse; + if (_p4.ctor === 'Up') { + return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; + } else { + var animY = A3( + _mgold$elm_animation$Animation$retarget, + model.time, + _elm_lang$core$Basics$toFloat(_p5.y), + model.animY); + var animX = A3( + _mgold$elm_animation$Animation$retarget, + model.time, + _elm_lang$core$Basics$toFloat(_p5.x), + model.animX); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + { + mouse: _user$project$Main$Down(_p5), + animX: animX, + animY: animY + }), + _1: _elm_lang$core$Platform_Cmd$none + }; + } + default: + var _p6 = _p2._0; + var newY = A2(_mgold$elm_animation$Animation$animate, _p6, model.animY); + var newX = A2(_mgold$elm_animation$Animation$animate, _p6, model.animX); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + { + x: _elm_lang$core$Basics$round(newX), + y: _elm_lang$core$Basics$round(newY), + time: _p6 + }), + _1: _elm_lang$core$Platform_Cmd$none + }; + } + }); +var _user$project$Main$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Main$viewMamaBee = A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Main$PlayAudio('audio/madre.mov')), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src(_user$project$Main$mamaBee), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$height( + _user$project$Main$scaleBee(_user$project$Main$beeHeight)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$width( + _user$project$Main$scaleBee(_user$project$Main$beeWidth)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Main$mamaPosition.x), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Main$mamaPosition.y), + 'px') + }, + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + } + } + } + }, + {ctor: '[]'}), + _1: {ctor: '[]'} + }); +var _user$project$Main$viewPapaBee = A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Main$PlayAudio('audio/padre.m4a')), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src(_user$project$Main$papaBee), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$height( + _user$project$Main$scaleBee(_user$project$Main$beeHeight)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$width( + _user$project$Main$scaleBee(_user$project$Main$beeWidth)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Main$papaPosition.x), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_user$project$Main$papaPosition.y), + 'px') + }, + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + } + } + } + }, + {ctor: '[]'}), + _1: {ctor: '[]'} + }); +var _user$project$Main$view = function (model) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Main$viewMamaBee, + _1: { + ctor: '::', + _0: _user$project$Main$viewPapaBee, + _1: { + ctor: '::', + _0: _user$project$Main$viewPlayerBee(model), + _1: {ctor: '[]'} + } + } + }); +}; +var _user$project$Main$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Main$MouseUp = function (a) { + return {ctor: 'MouseUp', _0: a}; +}; +var _user$project$Main$MouseDown = function (a) { + return {ctor: 'MouseDown', _0: a}; +}; +var _user$project$Main$Move = function (a) { + return {ctor: 'Move', _0: a}; +}; +var _user$project$Main$subscriptions = function (model) { + var _p7 = model.mouse; + if (_p7.ctor === 'Up') { + return _elm_lang$core$Platform_Sub$batch( + { + ctor: '::', + _0: _elm_lang$mouse$Mouse$downs(_user$project$Main$MouseDown), + _1: { + ctor: '::', + _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 1, _user$project$Main$Tick), + _1: {ctor: '[]'} + } + }); + } else { + return _elm_lang$core$Platform_Sub$batch( + { + ctor: '::', + _0: _elm_lang$mouse$Mouse$moves(_user$project$Main$Move), + _1: { + ctor: '::', + _0: _elm_lang$mouse$Mouse$ups(_user$project$Main$MouseUp), + _1: { + ctor: '::', + _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 1, _user$project$Main$Tick), + _1: {ctor: '[]'} + } + } + }); + } +}; +var _user$project$Main$main = _elm_lang$html$Html$program( + { + init: {ctor: '_Tuple2', _0: _user$project$Main$init, _1: _elm_lang$core$Platform_Cmd$none}, + view: _user$project$Main$view, + update: _user$project$Main$update, + subscriptions: _user$project$Main$subscriptions + })(); + +var Elm = {}; +Elm['Main'] = Elm['Main'] || {}; +if (typeof _user$project$Main$main !== 'undefined') { + _user$project$Main$main(Elm['Main'], 'Main', undefined); +} + +if (typeof define === "function" && define['amd']) +{ + define([], function() { return Elm; }); + return; +} + +if (typeof module === "object") +{ + module['exports'] = Elm; + return; +} + +var globalElm = this['Elm']; +if (typeof globalElm === "undefined") +{ + this['Elm'] = Elm; + return; +} + +for (var publicModule in Elm) +{ + if (publicModule in globalElm) + { + throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.'); + } + globalElm[publicModule] = Elm[publicModule]; +} + +}).call(this); + diff --git a/imgs/bee-left.png b/imgs/bee-left.png new file mode 100644 index 0000000000000000000000000000000000000000..415792cd5004d8a27f4541525117b8cb215006f3 GIT binary patch literal 120984 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
D;)uFR&rA5Yb;(ND9ILST$8=OODd$Idqb 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 I@gITz2f=>GW&i*H literal 0 HcmV?d00001 diff --git a/imgs/mama-bee.png b/imgs/mama-bee.png new file mode 100644 index 0000000000000000000000000000000000000000..04eb479d8c8ddde76a31e953d145241aa7912bb5 GIT binary patch literal 157030 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 WpWhW3tZ~->0000n6(p literal 0 HcmV?d00001 diff --git a/imgs/papa-bee.png b/imgs/papa-bee.png new file mode 100644 index 0000000000000000000000000000000000000000..e57fbadc8f1baec01bb6489172ad7810b7409066 GIT binary patch literal 138697 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 i_C7rdcogWC0{T + + Bee + + + + +

+ + + + + From c08589c2848fe2498e99d2250678e7784348a3fe Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 23 Apr 2017 20:50:30 -0700 Subject: [PATCH 05/33] refactored bee into its own module --- Bee.elm | 159 +++++++++++++++++++ Main.elm | 209 +++++++------------------ elm.js | 452 ++++++++++++++++++++++++------------------------------- 3 files changed, 414 insertions(+), 406 deletions(-) create mode 100644 Bee.elm diff --git a/Bee.elm b/Bee.elm new file mode 100644 index 0000000..6eddd4d --- /dev/null +++ b/Bee.elm @@ -0,0 +1,159 @@ +module Bee exposing (..) + +import Html exposing (Html, div, img) +import Html.Attributes exposing (src, height, width, style) +import Html.Events exposing (onClick) +import Animation exposing (Animation, animation, from, to, speed) +import Time exposing (Time) + + +-- MODEL + + +type alias Bee = + { x : Int + , y : Int + , animX : Animation + , animY : Animation + , src : String + , audio : Maybe String + } + + + +-- VIEW + + +view : Maybe (String -> msg) -> Bee -> Html msg +view clickAction bee = + let + attributes = + [ src bee.src + , height <| scaleBee beeHeight + , width <| scaleBee beeWidth + , style + [ ( "position", "absolute" ) + , ( "user-select", "none" ) + , ( "left", (toString bee.x) ++ "px" ) + , ( "top", (toString bee.y) ++ "px" ) + ] + ] + + attributesWithEvents = + case ( clickAction, bee.audio ) of + ( Just click, Just audio ) -> + (onClick (click audio)) :: attributes + + _ -> + attributes + in + img attributesWithEvents [] + + + +-- Bees + + +player = + { x = 0 + , y = 0 + , animX = animation 0 + , animY = animation 0 + , src = "imgs/bee-left.png" + , audio = Nothing + } + + +mama = + { x = 100 + , y = 100 + , animX = animation 0 + , animY = animation 0 + , src = "imgs/mama-bee.png" + , audio = Just "audio/madre.mov" + } + + +papa = + { x = 600 + , y = 100 + , animX = animation 0 + , animY = animation 0 + , src = "imgs/papa-bee.png" + , audio = Just "audio/padre.m4a" + } + + + +-- ANIMATION + + +beeVelocity = + (0.5) + + +type alias Position = + { x : Int + , y : Int + } + + +animate : Time -> Bee -> Bee +animate time bee = + let + newX = + Animation.animate time bee.animX + + newY = + Animation.animate time bee.animY + in + { bee | x = round newX, y = round newY } + + +animateStart : Time -> Position -> Bee -> Bee +animateStart startTime toPosition bee = + let + animX = + animation startTime + |> from (toFloat bee.x) + |> to (toFloat toPosition.x) + |> speed beeVelocity + + animY = + animation startTime + |> from (toFloat bee.y) + |> to (toFloat toPosition.y) + |> speed beeVelocity + in + { bee + | animX = animX + , animY = animY + } + + +retarget : Time -> Position -> Bee -> Bee +retarget time toPosition bee = + let + animX = + bee.animX |> Animation.retarget time (toFloat toPosition.x) + + animY = + bee.animY |> Animation.retarget time (toFloat toPosition.y) + in + { bee + | animX = animX + , animY = animY + } + + + +-- HELPERS + + +( beeHeight, beeWidth ) = + ( 456, 640 ) + + +scaleBee : Float -> Int +scaleBee dimension = + dimension / 8 |> round diff --git a/Main.elm b/Main.elm index 3d4f116..4e788d7 100644 --- a/Main.elm +++ b/Main.elm @@ -1,23 +1,22 @@ port module Main exposing (..) -import Html exposing (Html, div, img) +import Html exposing (Html, div, img, button, text) import Html.Attributes exposing (src, height, width, style) import Html.Events exposing (onClick) import Mouse import Time exposing (Time) import Animation exposing (..) +import Bee exposing (Bee) -- MODEL type alias Model = - { x : Int - , y : Int - , animX : Animation - , animY : Animation + { user : Bee , mouse : MouseStatus , time : Time + , stop : Bool } @@ -28,12 +27,10 @@ type MouseStatus init : Model init = - { x = 0 - , y = 0 - , animX = animation 0 - , animY = animation 0 + { user = Bee.player , mouse = Up , time = 0 + , stop = False } @@ -47,15 +44,15 @@ type Msg | MouseUp Mouse.Position | Tick Time | PlayAudio String - - -beeVelocity = - (0.5) + | Stop update : Msg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of + Stop -> + ( { model | stop = not model.stop }, Cmd.none ) + PlayAudio file -> ( model, playAudio file ) @@ -63,26 +60,12 @@ update msg model = ( { model | mouse = Up }, Cmd.none ) MouseDown position -> - let - animX = - animation model.time - |> from (toFloat model.x) - |> to (toFloat position.x) - |> speed beeVelocity - - animY = - animation model.time - |> from (toFloat model.y) - |> to (toFloat position.y) - |> speed beeVelocity - in - ( { model - | mouse = Down position - , animX = animX - , animY = animY - } - , Cmd.none - ) + ( { model + | mouse = Down position + , user = model.user |> Bee.animateStart model.time position + } + , Cmd.none + ) Move position -> case model.mouse of @@ -90,30 +73,20 @@ update msg model = ( model, Cmd.none ) Down _ -> - let - animX = - model.animX |> retarget model.time (toFloat position.x) - - animY = - model.animY |> retarget model.time (toFloat position.y) - in - ( { model - | mouse = Down position - , animX = animX - , animY = animY - } - , Cmd.none - ) + ( { model + | mouse = Down position + , user = model.user |> Bee.retarget model.time position + } + , Cmd.none + ) Tick time -> - let - newX = - animate time model.animX - - newY = - animate time model.animY - in - ( { model | x = round newX, y = round newY, time = time }, Cmd.none ) + ( { model + | user = model.user |> Bee.animate time + , time = time + } + , Cmd.none + ) @@ -127,80 +100,15 @@ view model = [ ( "user-select", "none" ) ] ] - [ viewMamaBee - , viewPapaBee - , viewPlayerBee model - ] - - -viewPlayerBee model = - img - [ src beeLeft - , height <| scaleBee beeHeight - , width <| scaleBee beeWidth - , style - [ ( "position", "relative" ) - , ( "left", (toString model.x) ++ "px" ) - , ( "top", (toString model.y) ++ "px" ) - ] + [ -- stopButton + Bee.view (Just PlayAudio) Bee.mama + , Bee.view (Just PlayAudio) Bee.papa + , Bee.view Nothing model.user ] - [] -mamaPosition = - { x = 100 - , y = 100 - } - - -papaPosition = - { x = 500 - , y = 100 - } - - -viewMamaBee : Html Msg -viewMamaBee = - div - [ style - [ ( "user-select", "none" ) - ] - , onClick (PlayAudio "audio/madre.mov") - ] - [ img - [ src mamaBee - , height <| scaleBee beeHeight - , width <| scaleBee beeWidth - , style - [ ( "position", "relative" ) - , ( "left", (toString mamaPosition.x) ++ "px" ) - , ( "top", (toString mamaPosition.y) ++ "px" ) - ] - ] - [] - ] - - -viewPapaBee : Html Msg -viewPapaBee = - div - [ style - [ ( "user-select", "none" ) - ] - , onClick (PlayAudio "audio/padre.m4a") - ] - [ img - [ src papaBee - , height <| scaleBee beeHeight - , width <| scaleBee beeWidth - , style - [ ( "position", "relative" ) - , ( "left", (toString papaPosition.x) ++ "px" ) - , ( "top", (toString papaPosition.y) ++ "px" ) - ] - ] - [] - ] +stopButton = + button [ onClick Stop ] [ text "stop" ] @@ -209,19 +117,22 @@ viewPapaBee = subscriptions : Model -> Sub Msg subscriptions model = - case model.mouse of - Up -> - Sub.batch - [ Mouse.downs MouseDown - , Time.every (Time.millisecond * 1) Tick - ] + if model.stop then + Sub.none + else + case model.mouse of + Up -> + Sub.batch + [ Mouse.downs MouseDown + , Time.every (Time.millisecond * 100) Tick + ] - Down _ -> - Sub.batch - [ Mouse.moves Move - , Mouse.ups MouseUp - , Time.every (Time.millisecond * 1) Tick - ] + Down _ -> + Sub.batch + [ Mouse.moves Move + , Mouse.ups MouseUp + , Time.every (Time.millisecond * 100) Tick + ] @@ -232,23 +143,13 @@ port playAudio : String -> Cmd msg --- BEE - - -( beeLeft, beeHeight, beeWidth ) = - ( "imgs/bee-left.png", 456, 640 ) -( mamaBee, papaBee ) = - ( "imgs/mama-bee.png", "imgs/papa-bee.png" ) - - -scaleBee : Float -> Int -scaleBee dimension = - dimension / 8 |> round - - - -- MAIN main = - Html.program { init = ( init, Cmd.none ), view = view, update = update, subscriptions = subscriptions } + Html.program + { init = ( init, Cmd.none ) + , view = view + , update = update + , subscriptions = subscriptions + } diff --git a/elm.js b/elm.js index b7eac61..4544e3f 100644 --- a/elm.js +++ b/elm.js @@ -9335,59 +9335,134 @@ var _mgold$elm_animation$Animation$to = F2( {to: x, ramp: _elm_lang$core$Maybe$Nothing})); }); -var _user$project$Main$scaleBee = function (dimension) { +var _user$project$Bee$scaleBee = function (dimension) { return _elm_lang$core$Basics$round(dimension / 8); }; -var _user$project$Main$_p0 = {ctor: '_Tuple2', _0: 'imgs/mama-bee.png', _1: 'imgs/papa-bee.png'}; -var _user$project$Main$mamaBee = _user$project$Main$_p0._0; -var _user$project$Main$papaBee = _user$project$Main$_p0._1; -var _user$project$Main$_p1 = {ctor: '_Tuple3', _0: 'imgs/bee-left.png', _1: 456, _2: 640}; -var _user$project$Main$beeLeft = _user$project$Main$_p1._0; -var _user$project$Main$beeHeight = _user$project$Main$_p1._1; -var _user$project$Main$beeWidth = _user$project$Main$_p1._2; -var _user$project$Main$papaPosition = {x: 500, y: 100}; -var _user$project$Main$mamaPosition = {x: 100, y: 100}; -var _user$project$Main$viewPlayerBee = function (model) { - return A2( - _elm_lang$html$Html$img, - { +var _user$project$Bee$_p0 = {ctor: '_Tuple2', _0: 456, _1: 640}; +var _user$project$Bee$beeHeight = _user$project$Bee$_p0._0; +var _user$project$Bee$beeWidth = _user$project$Bee$_p0._1; +var _user$project$Bee$retarget = F3( + function (time, toPosition, bee) { + var animY = A3( + _mgold$elm_animation$Animation$retarget, + time, + _elm_lang$core$Basics$toFloat(toPosition.y), + bee.animY); + var animX = A3( + _mgold$elm_animation$Animation$retarget, + time, + _elm_lang$core$Basics$toFloat(toPosition.x), + bee.animX); + return _elm_lang$core$Native_Utils.update( + bee, + {animX: animX, animY: animY}); + }); +var _user$project$Bee$animate = F2( + function (time, bee) { + var newY = A2(_mgold$elm_animation$Animation$animate, time, bee.animY); + var newX = A2(_mgold$elm_animation$Animation$animate, time, bee.animX); + return _elm_lang$core$Native_Utils.update( + bee, + { + x: _elm_lang$core$Basics$round(newX), + y: _elm_lang$core$Basics$round(newY) + }); + }); +var _user$project$Bee$beeVelocity = 0.5; +var _user$project$Bee$animateStart = F3( + function (startTime, toPosition, bee) { + var animY = A2( + _mgold$elm_animation$Animation$speed, + _user$project$Bee$beeVelocity, + A2( + _mgold$elm_animation$Animation$to, + _elm_lang$core$Basics$toFloat(toPosition.y), + A2( + _mgold$elm_animation$Animation$from, + _elm_lang$core$Basics$toFloat(bee.y), + _mgold$elm_animation$Animation$animation(startTime)))); + var animX = A2( + _mgold$elm_animation$Animation$speed, + _user$project$Bee$beeVelocity, + A2( + _mgold$elm_animation$Animation$to, + _elm_lang$core$Basics$toFloat(toPosition.x), + A2( + _mgold$elm_animation$Animation$from, + _elm_lang$core$Basics$toFloat(bee.x), + _mgold$elm_animation$Animation$animation(startTime)))); + return _elm_lang$core$Native_Utils.update( + bee, + {animX: animX, animY: animY}); + }); +var _user$project$Bee$papa = { + x: 600, + y: 100, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/papa-bee.png', + audio: _elm_lang$core$Maybe$Just('audio/padre.m4a') +}; +var _user$project$Bee$mama = { + x: 100, + y: 100, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/mama-bee.png', + audio: _elm_lang$core$Maybe$Just('audio/madre.mov') +}; +var _user$project$Bee$player = { + x: 0, + y: 0, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/bee-left.png', + audio: _elm_lang$core$Maybe$Nothing +}; +var _user$project$Bee$view = F2( + function (clickAction, bee) { + var attributes = { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src(_user$project$Main$beeLeft), + _0: _elm_lang$html$Html_Attributes$src(bee.src), _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$height( - _user$project$Main$scaleBee(_user$project$Main$beeHeight)), + _user$project$Bee$scaleBee(_user$project$Bee$beeHeight)), _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$width( - _user$project$Main$scaleBee(_user$project$Main$beeWidth)), + _user$project$Bee$scaleBee(_user$project$Bee$beeWidth)), _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(model.x), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(model.y), + _elm_lang$core$Basics$toString(bee.x), 'px') }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(bee.y), + 'px') + }, + _1: {ctor: '[]'} + } } } }), @@ -9395,40 +9470,65 @@ var _user$project$Main$viewPlayerBee = function (model) { } } } - }, - {ctor: '[]'}); -}; -var _user$project$Main$beeVelocity = 0.5; + }; + var attributesWithEvents = function () { + var _p1 = {ctor: '_Tuple2', _0: clickAction, _1: bee.audio}; + if (((_p1.ctor === '_Tuple2') && (_p1._0.ctor === 'Just')) && (_p1._1.ctor === 'Just')) { + return { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _p1._0._0(_p1._1._0)), + _1: attributes + }; + } else { + return attributes; + } + }(); + return A2( + _elm_lang$html$Html$img, + attributesWithEvents, + {ctor: '[]'}); + }); +var _user$project$Bee$Bee = F6( + function (a, b, c, d, e, f) { + return {x: a, y: b, animX: c, animY: d, src: e, audio: f}; + }); +var _user$project$Bee$Position = F2( + function (a, b) { + return {x: a, y: b}; + }); + var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( 'playAudio', function (v) { return v; }); -var _user$project$Main$Model = F6( - function (a, b, c, d, e, f) { - return {x: a, y: b, animX: c, animY: d, mouse: e, time: f}; +var _user$project$Main$Model = F4( + function (a, b, c, d) { + return {user: a, mouse: b, time: c, stop: d}; }); var _user$project$Main$Up = {ctor: 'Up'}; -var _user$project$Main$init = { - x: 0, - y: 0, - animX: _mgold$elm_animation$Animation$animation(0), - animY: _mgold$elm_animation$Animation$animation(0), - mouse: _user$project$Main$Up, - time: 0 -}; +var _user$project$Main$init = {user: _user$project$Bee$player, mouse: _user$project$Main$Up, time: 0, stop: false}; var _user$project$Main$Down = function (a) { return {ctor: 'Down', _0: a}; }; var _user$project$Main$update = F2( function (msg, model) { - var _p2 = msg; - switch (_p2.ctor) { + var _p0 = msg; + switch (_p0.ctor) { + case 'Stop': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {stop: !model.stop}), + _1: _elm_lang$core$Platform_Cmd$none + }; case 'PlayAudio': return { ctor: '_Tuple2', _0: model, - _1: _user$project$Main$playAudio(_p2._0) + _1: _user$project$Main$playAudio(_p0._0) }; case 'MouseUp': return { @@ -9439,226 +9539,64 @@ var _user$project$Main$update = F2( _1: _elm_lang$core$Platform_Cmd$none }; case 'MouseDown': - var _p3 = _p2._0; - var animY = A2( - _mgold$elm_animation$Animation$speed, - _user$project$Main$beeVelocity, - A2( - _mgold$elm_animation$Animation$to, - _elm_lang$core$Basics$toFloat(_p3.y), - A2( - _mgold$elm_animation$Animation$from, - _elm_lang$core$Basics$toFloat(model.y), - _mgold$elm_animation$Animation$animation(model.time)))); - var animX = A2( - _mgold$elm_animation$Animation$speed, - _user$project$Main$beeVelocity, - A2( - _mgold$elm_animation$Animation$to, - _elm_lang$core$Basics$toFloat(_p3.x), - A2( - _mgold$elm_animation$Animation$from, - _elm_lang$core$Basics$toFloat(model.x), - _mgold$elm_animation$Animation$animation(model.time)))); + var _p1 = _p0._0; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, { - mouse: _user$project$Main$Down(_p3), - animX: animX, - animY: animY + mouse: _user$project$Main$Down(_p1), + user: A3(_user$project$Bee$animateStart, model.time, _p1, model.user) }), _1: _elm_lang$core$Platform_Cmd$none }; case 'Move': - var _p5 = _p2._0; - var _p4 = model.mouse; - if (_p4.ctor === 'Up') { + var _p3 = _p0._0; + var _p2 = model.mouse; + if (_p2.ctor === 'Up') { return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; } else { - var animY = A3( - _mgold$elm_animation$Animation$retarget, - model.time, - _elm_lang$core$Basics$toFloat(_p5.y), - model.animY); - var animX = A3( - _mgold$elm_animation$Animation$retarget, - model.time, - _elm_lang$core$Basics$toFloat(_p5.x), - model.animX); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, { - mouse: _user$project$Main$Down(_p5), - animX: animX, - animY: animY + mouse: _user$project$Main$Down(_p3), + user: A3(_user$project$Bee$retarget, model.time, _p3, model.user) }), _1: _elm_lang$core$Platform_Cmd$none }; } default: - var _p6 = _p2._0; - var newY = A2(_mgold$elm_animation$Animation$animate, _p6, model.animY); - var newX = A2(_mgold$elm_animation$Animation$animate, _p6, model.animX); + var _p4 = _p0._0; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, { - x: _elm_lang$core$Basics$round(newX), - y: _elm_lang$core$Basics$round(newY), - time: _p6 + user: A2(_user$project$Bee$animate, _p4, model.user), + time: _p4 }), _1: _elm_lang$core$Platform_Cmd$none }; } }); -var _user$project$Main$PlayAudio = function (a) { - return {ctor: 'PlayAudio', _0: a}; -}; -var _user$project$Main$viewMamaBee = A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Main$PlayAudio('audio/madre.mov')), - _1: {ctor: '[]'} - } - }, +var _user$project$Main$Stop = {ctor: 'Stop'}; +var _user$project$Main$stopButton = A2( + _elm_lang$html$Html$button, { ctor: '::', - _0: A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src(_user$project$Main$mamaBee), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$height( - _user$project$Main$scaleBee(_user$project$Main$beeHeight)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$width( - _user$project$Main$scaleBee(_user$project$Main$beeWidth)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Main$mamaPosition.x), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Main$mamaPosition.y), - 'px') - }, - _1: {ctor: '[]'} - } - } - }), - _1: {ctor: '[]'} - } - } - } - }, - {ctor: '[]'}), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Stop), _1: {ctor: '[]'} - }); -var _user$project$Main$viewPapaBee = A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Main$PlayAudio('audio/padre.m4a')), - _1: {ctor: '[]'} - } }, { ctor: '::', - _0: A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src(_user$project$Main$papaBee), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$height( - _user$project$Main$scaleBee(_user$project$Main$beeHeight)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$width( - _user$project$Main$scaleBee(_user$project$Main$beeWidth)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'relative'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Main$papaPosition.x), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_user$project$Main$papaPosition.y), - 'px') - }, - _1: {ctor: '[]'} - } - } - }), - _1: {ctor: '[]'} - } - } - } - }, - {ctor: '[]'}), + _0: _elm_lang$html$Html$text('stop'), _1: {ctor: '[]'} }); +var _user$project$Main$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; var _user$project$Main$view = function (model) { return A2( _elm_lang$html$Html$div, @@ -9674,13 +9612,19 @@ var _user$project$Main$view = function (model) { }, { ctor: '::', - _0: _user$project$Main$viewMamaBee, + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Main$PlayAudio), + _user$project$Bee$mama), _1: { ctor: '::', - _0: _user$project$Main$viewPapaBee, + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Main$PlayAudio), + _user$project$Bee$papa), _1: { ctor: '::', - _0: _user$project$Main$viewPlayerBee(model), + _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), _1: {ctor: '[]'} } } @@ -9699,33 +9643,37 @@ var _user$project$Main$Move = function (a) { return {ctor: 'Move', _0: a}; }; var _user$project$Main$subscriptions = function (model) { - var _p7 = model.mouse; - if (_p7.ctor === 'Up') { - return _elm_lang$core$Platform_Sub$batch( - { - ctor: '::', - _0: _elm_lang$mouse$Mouse$downs(_user$project$Main$MouseDown), - _1: { - ctor: '::', - _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 1, _user$project$Main$Tick), - _1: {ctor: '[]'} - } - }); + if (model.stop) { + return _elm_lang$core$Platform_Sub$none; } else { - return _elm_lang$core$Platform_Sub$batch( - { - ctor: '::', - _0: _elm_lang$mouse$Mouse$moves(_user$project$Main$Move), - _1: { + var _p5 = model.mouse; + if (_p5.ctor === 'Up') { + return _elm_lang$core$Platform_Sub$batch( + { ctor: '::', - _0: _elm_lang$mouse$Mouse$ups(_user$project$Main$MouseUp), + _0: _elm_lang$mouse$Mouse$downs(_user$project$Main$MouseDown), _1: { ctor: '::', - _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 1, _user$project$Main$Tick), + _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 100, _user$project$Main$Tick), _1: {ctor: '[]'} } - } - }); + }); + } else { + return _elm_lang$core$Platform_Sub$batch( + { + ctor: '::', + _0: _elm_lang$mouse$Mouse$moves(_user$project$Main$Move), + _1: { + ctor: '::', + _0: _elm_lang$mouse$Mouse$ups(_user$project$Main$MouseUp), + _1: { + ctor: '::', + _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 100, _user$project$Main$Tick), + _1: {ctor: '[]'} + } + } + }); + } } }; var _user$project$Main$main = _elm_lang$html$Html$program( From c8cc51481894f5aeb67a298a52ecb65f7ff961ab Mon Sep 17 00:00:00 2001 From: trotha01 Date: Mon, 24 Apr 2017 06:36:39 -0700 Subject: [PATCH 06/33] started adding map --- Bee.elm | 21 ++- Main.elm | 18 ++- Map.elm | 43 ++++++ elm-package.json | 1 + elm.js | 352 ++++++++++++++++++++++++++++++++++++------- imgs/map-tileset.png | Bin 0 -> 106215 bytes index.html | 4 +- 7 files changed, 373 insertions(+), 66 deletions(-) create mode 100644 Map.elm create mode 100644 imgs/map-tileset.png diff --git a/Bee.elm b/Bee.elm index 6eddd4d..563f979 100644 --- a/Bee.elm +++ b/Bee.elm @@ -31,12 +31,6 @@ view clickAction bee = [ src bee.src , height <| scaleBee beeHeight , width <| scaleBee beeWidth - , style - [ ( "position", "absolute" ) - , ( "user-select", "none" ) - , ( "left", (toString bee.x) ++ "px" ) - , ( "top", (toString bee.y) ++ "px" ) - ] ] attributesWithEvents = @@ -46,8 +40,21 @@ view clickAction bee = _ -> attributes + + wrapper = + div + [ style + [ -- ( "box-shadow", "3px 3px 1px #ccc" ) + ( "position", "absolute" ) + , ( "user-select", "none" ) + , ( "left", (toString bee.x) ++ "px" ) + , ( "top", (toString bee.y) ++ "px" ) + ] + ] in - img attributesWithEvents [] + wrapper + [ img attributesWithEvents [] + ] diff --git a/Main.elm b/Main.elm index 4e788d7..325f3d8 100644 --- a/Main.elm +++ b/Main.elm @@ -1,12 +1,15 @@ port module Main exposing (..) +import Animation exposing (..) import Html exposing (Html, div, img, button, text) import Html.Attributes exposing (src, height, width, style) import Html.Events exposing (onClick) import Mouse +import Task import Time exposing (Time) -import Animation exposing (..) +import Window import Bee exposing (Bee) +import Map -- MODEL @@ -16,6 +19,7 @@ type alias Model = { user : Bee , mouse : MouseStatus , time : Time + , window : Window.Size , stop : Bool } @@ -30,6 +34,7 @@ init = { user = Bee.player , mouse = Up , time = 0 + , window = { width = 100, height = 100 } , stop = False } @@ -40,6 +45,7 @@ init = type Msg = Move Mouse.Position + | WindowResize Window.Size | MouseDown Mouse.Position | MouseUp Mouse.Position | Tick Time @@ -53,6 +59,9 @@ update msg model = Stop -> ( { model | stop = not model.stop }, Cmd.none ) + WindowResize newSize -> + ( { model | window = newSize }, Cmd.none ) + PlayAudio file -> ( model, playAudio file ) @@ -101,7 +110,8 @@ view model = ] ] [ -- stopButton - Bee.view (Just PlayAudio) Bee.mama + Map.view model.window + , Bee.view (Just PlayAudio) Bee.mama , Bee.view (Just PlayAudio) Bee.papa , Bee.view Nothing model.user ] @@ -125,6 +135,7 @@ subscriptions model = Sub.batch [ Mouse.downs MouseDown , Time.every (Time.millisecond * 100) Tick + , Window.resizes WindowResize ] Down _ -> @@ -132,6 +143,7 @@ subscriptions model = [ Mouse.moves Move , Mouse.ups MouseUp , Time.every (Time.millisecond * 100) Tick + , Window.resizes WindowResize ] @@ -148,7 +160,7 @@ port playAudio : String -> Cmd msg main = Html.program - { init = ( init, Cmd.none ) + { init = ( init, Task.perform WindowResize Window.size ) , view = view , update = update , subscriptions = subscriptions diff --git a/Map.elm b/Map.elm new file mode 100644 index 0000000..488ae0a --- /dev/null +++ b/Map.elm @@ -0,0 +1,43 @@ +module Map exposing (..) + +import Html exposing (Html, img, div) +import Html.Attributes exposing (src, style) +import Window + + +view : Window.Size -> Html msg +view mapSize = + ground mapSize + + +ground : Window.Size -> Html msg +ground mapSize = + div [] + ((List.range 0 (tileCountFromPixels mapSize.height)) + |> List.map (\y -> row (tileCountFromPixels mapSize.width) (y * 32)) + |> List.concat + ) + + +tileCountFromPixels : Int -> Int +tileCountFromPixels pixels = + (round <| (toFloat pixels) / 32) + + +row : Int -> Int -> List (Html msg) +row width y = + List.map (\i -> tile ( i * 32, y )) (List.range 0 width) + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", (toString (x - 32)) ++ "px" ) + , ( "top", (toString (y - 32)) ++ "px" ) + ] + ] + [] diff --git a/elm-package.json b/elm-package.json index 06b086f..3392eec 100644 --- a/elm-package.json +++ b/elm-package.json @@ -11,6 +11,7 @@ "elm-lang/core": "5.1.1 <= v < 6.0.0", "elm-lang/html": "2.0.0 <= v < 3.0.0", "elm-lang/mouse": "1.0.1 <= v < 2.0.0", + "elm-lang/window": "1.0.1 <= v < 2.0.0", "mgold/elm-animation": "1.0.5 <= v < 2.0.0", "rtfeldman/elm-css": "8.2.0 <= v < 9.0.0" }, diff --git a/elm.js b/elm.js index 4544e3f..891d822 100644 --- a/elm.js +++ b/elm.js @@ -9045,6 +9045,128 @@ var _elm_lang$mouse$Mouse$subMap = F2( }); _elm_lang$core$Native_Platform.effectManagers['Mouse'] = {pkg: 'elm-lang/mouse', init: _elm_lang$mouse$Mouse$init, onEffects: _elm_lang$mouse$Mouse$onEffects, onSelfMsg: _elm_lang$mouse$Mouse$onSelfMsg, tag: 'sub', subMap: _elm_lang$mouse$Mouse$subMap}; +var _elm_lang$window$Native_Window = function() +{ + +var size = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + callback(_elm_lang$core$Native_Scheduler.succeed({ + width: window.innerWidth, + height: window.innerHeight + })); +}); + +return { + size: size +}; + +}(); +var _elm_lang$window$Window_ops = _elm_lang$window$Window_ops || {}; +_elm_lang$window$Window_ops['&>'] = F2( + function (task1, task2) { + return A2( + _elm_lang$core$Task$andThen, + function (_p0) { + return task2; + }, + task1); + }); +var _elm_lang$window$Window$onSelfMsg = F3( + function (router, dimensions, state) { + var _p1 = state; + if (_p1.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var send = function (_p2) { + var _p3 = _p2; + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p3._0(dimensions)); + }; + return A2( + _elm_lang$window$Window_ops['&>'], + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p1._0.subs)), + _elm_lang$core$Task$succeed(state)); + } + }); +var _elm_lang$window$Window$init = _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); +var _elm_lang$window$Window$size = _elm_lang$window$Native_Window.size; +var _elm_lang$window$Window$width = A2( + _elm_lang$core$Task$map, + function (_) { + return _.width; + }, + _elm_lang$window$Window$size); +var _elm_lang$window$Window$height = A2( + _elm_lang$core$Task$map, + function (_) { + return _.height; + }, + _elm_lang$window$Window$size); +var _elm_lang$window$Window$onEffects = F3( + function (router, newSubs, oldState) { + var _p4 = {ctor: '_Tuple2', _0: oldState, _1: newSubs}; + if (_p4._0.ctor === 'Nothing') { + if (_p4._1.ctor === '[]') { + return _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing); + } else { + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Maybe$Just( + {subs: newSubs, pid: pid})); + }, + _elm_lang$core$Process$spawn( + A3( + _elm_lang$dom$Dom_LowLevel$onWindow, + 'resize', + _elm_lang$core$Json_Decode$succeed( + {ctor: '_Tuple0'}), + function (_p5) { + return A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$window$Window$size); + }))); + } + } else { + if (_p4._1.ctor === '[]') { + return A2( + _elm_lang$window$Window_ops['&>'], + _elm_lang$core$Process$kill(_p4._0._0.pid), + _elm_lang$core$Task$succeed(_elm_lang$core$Maybe$Nothing)); + } else { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Maybe$Just( + {subs: newSubs, pid: _p4._0._0.pid})); + } + } + }); +var _elm_lang$window$Window$subscription = _elm_lang$core$Native_Platform.leaf('Window'); +var _elm_lang$window$Window$Size = F2( + function (a, b) { + return {width: a, height: b}; + }); +var _elm_lang$window$Window$MySub = function (a) { + return {ctor: 'MySub', _0: a}; +}; +var _elm_lang$window$Window$resizes = function (tagger) { + return _elm_lang$window$Window$subscription( + _elm_lang$window$Window$MySub(tagger)); +}; +var _elm_lang$window$Window$subMap = F2( + function (func, _p6) { + var _p7 = _p6; + return _elm_lang$window$Window$MySub( + function (_p8) { + return func( + _p7._0(_p8)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Window'] = {pkg: 'elm-lang/window', init: _elm_lang$window$Window$init, onEffects: _elm_lang$window$Window$onEffects, onSelfMsg: _elm_lang$window$Window$onSelfMsg, tag: 'sub', subMap: _elm_lang$window$Window$subMap}; + var _mgold$elm_animation$Animation$isStatic = function (_p0) { var _p1 = _p0; return _elm_lang$core$Native_Utils.eq(_p1._0.from, _p1._0.to); @@ -9421,6 +9543,43 @@ var _user$project$Bee$player = { }; var _user$project$Bee$view = F2( function (clickAction, bee) { + var wrapper = _elm_lang$html$Html$div( + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(bee.x), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(bee.y), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + }); var attributes = { ctor: '::', _0: _elm_lang$html$Html_Attributes$src(bee.src), @@ -9432,42 +9591,7 @@ var _user$project$Bee$view = F2( ctor: '::', _0: _elm_lang$html$Html_Attributes$width( _user$project$Bee$scaleBee(_user$project$Bee$beeWidth)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(bee.x), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(bee.y), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - }), - _1: {ctor: '[]'} - } + _1: {ctor: '[]'} } } }; @@ -9484,10 +9608,15 @@ var _user$project$Bee$view = F2( return attributes; } }(); - return A2( - _elm_lang$html$Html$img, - attributesWithEvents, - {ctor: '[]'}); + return wrapper( + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + attributesWithEvents, + {ctor: '[]'}), + _1: {ctor: '[]'} + }); }); var _user$project$Bee$Bee = F6( function (a, b, c, d, e, f) { @@ -9498,17 +9627,105 @@ var _user$project$Bee$Position = F2( return {x: a, y: b}; }); +var _user$project$Map$tile = function (_p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Map$row = F2( + function (width, y) { + return A2( + _elm_lang$core$List$map, + function (i) { + return _user$project$Map$tile( + {ctor: '_Tuple2', _0: i * 32, _1: y}); + }, + A2(_elm_lang$core$List$range, 0, width)); + }); +var _user$project$Map$tileCountFromPixels = function (pixels) { + return _elm_lang$core$Basics$round( + _elm_lang$core$Basics$toFloat(pixels) / 32); +}; +var _user$project$Map$ground = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + _elm_lang$core$List$concat( + A2( + _elm_lang$core$List$map, + function (y) { + return A2( + _user$project$Map$row, + _user$project$Map$tileCountFromPixels(mapSize.width), + y * 32); + }, + A2( + _elm_lang$core$List$range, + 0, + _user$project$Map$tileCountFromPixels(mapSize.height))))); +}; +var _user$project$Map$view = function (mapSize) { + return _user$project$Map$ground(mapSize); +}; + var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( 'playAudio', function (v) { return v; }); -var _user$project$Main$Model = F4( - function (a, b, c, d) { - return {user: a, mouse: b, time: c, stop: d}; +var _user$project$Main$Model = F5( + function (a, b, c, d, e) { + return {user: a, mouse: b, time: c, window: d, stop: e}; }); var _user$project$Main$Up = {ctor: 'Up'}; -var _user$project$Main$init = {user: _user$project$Bee$player, mouse: _user$project$Main$Up, time: 0, stop: false}; +var _user$project$Main$init = { + user: _user$project$Bee$player, + mouse: _user$project$Main$Up, + time: 0, + window: {width: 100, height: 100}, + stop: false +}; var _user$project$Main$Down = function (a) { return {ctor: 'Down', _0: a}; }; @@ -9524,6 +9741,14 @@ var _user$project$Main$update = F2( {stop: !model.stop}), _1: _elm_lang$core$Platform_Cmd$none }; + case 'WindowResize': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {window: _p0._0}), + _1: _elm_lang$core$Platform_Cmd$none + }; case 'PlayAudio': return { ctor: '_Tuple2', @@ -9612,20 +9837,24 @@ var _user$project$Main$view = function (model) { }, { ctor: '::', - _0: A2( - _user$project$Bee$view, - _elm_lang$core$Maybe$Just(_user$project$Main$PlayAudio), - _user$project$Bee$mama), + _0: _user$project$Map$view(model.window), _1: { ctor: '::', _0: A2( _user$project$Bee$view, _elm_lang$core$Maybe$Just(_user$project$Main$PlayAudio), - _user$project$Bee$papa), + _user$project$Bee$mama), _1: { ctor: '::', - _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), - _1: {ctor: '[]'} + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Main$PlayAudio), + _user$project$Bee$papa), + _1: { + ctor: '::', + _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), + _1: {ctor: '[]'} + } } } }); @@ -9639,6 +9868,9 @@ var _user$project$Main$MouseUp = function (a) { var _user$project$Main$MouseDown = function (a) { return {ctor: 'MouseDown', _0: a}; }; +var _user$project$Main$WindowResize = function (a) { + return {ctor: 'WindowResize', _0: a}; +}; var _user$project$Main$Move = function (a) { return {ctor: 'Move', _0: a}; }; @@ -9655,7 +9887,11 @@ var _user$project$Main$subscriptions = function (model) { _1: { ctor: '::', _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 100, _user$project$Main$Tick), - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: _elm_lang$window$Window$resizes(_user$project$Main$WindowResize), + _1: {ctor: '[]'} + } } }); } else { @@ -9669,7 +9905,11 @@ var _user$project$Main$subscriptions = function (model) { _1: { ctor: '::', _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 100, _user$project$Main$Tick), - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: _elm_lang$window$Window$resizes(_user$project$Main$WindowResize), + _1: {ctor: '[]'} + } } } }); @@ -9678,7 +9918,11 @@ var _user$project$Main$subscriptions = function (model) { }; var _user$project$Main$main = _elm_lang$html$Html$program( { - init: {ctor: '_Tuple2', _0: _user$project$Main$init, _1: _elm_lang$core$Platform_Cmd$none}, + init: { + ctor: '_Tuple2', + _0: _user$project$Main$init, + _1: A2(_elm_lang$core$Task$perform, _user$project$Main$WindowResize, _elm_lang$window$Window$size) + }, view: _user$project$Main$view, update: _user$project$Main$update, subscriptions: _user$project$Main$subscriptions diff --git a/imgs/map-tileset.png b/imgs/map-tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..36d789cab98f3a120962add972352da836c8c7b8 GIT binary patch literal 106215 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
jim2 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 - -

+ +
- - - + +Main \ No newline at end of file From fc3e0744bb64e26051e5feb74680cafef7aad5f1 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Wed, 24 May 2017 17:24:47 -0700 Subject: [PATCH 10/33] fix wall bouncing bug --- Main.elm | 20 +-- Map.elm | 158 +++++++++++------------ index.html | 364 +++++++++++++++++++++++++++++++++++++++-------------- 3 files changed, 358 insertions(+), 184 deletions(-) diff --git a/Main.elm b/Main.elm index 6f47c71..0123a46 100644 --- a/Main.elm +++ b/Main.elm @@ -22,7 +22,7 @@ type alias Model = , time : Time , window : Window.Size , map : Map - , stop : Bool + , pause : Bool } @@ -37,7 +37,7 @@ init = , mouse = Up , time = 0 , window = { width = 100, height = 100 } - , stop = False + , pause = False , map = Map.init { width = 100, height = 100 } Map.Home } @@ -54,14 +54,14 @@ type Msg | NewLevel Map.Level | Tick Time | PlayAudio String - | Stop + | Pause update : Msg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of - Stop -> - ( { model | stop = not model.stop }, Cmd.none ) + Pause -> + ( { model | pause = not model.pause }, Cmd.none ) WindowResize newSize -> ( { model @@ -122,8 +122,8 @@ view model = [ ( "user-select", "none" ) ] ] - [ -- stopButton - mapView model.window model.map + [ pauseButton + , mapView model.window model.map , Bee.view Nothing model.user ] @@ -133,8 +133,8 @@ mapView = Map.view NewLevel PlayAudio -stopButton = - button [ onClick Stop ] [ text "stop" ] +pauseButton = + button [ onClick Pause ] [ text "pause" ] @@ -143,7 +143,7 @@ stopButton = subscriptions : Model -> Sub Msg subscriptions model = - if model.stop then + if model.pause then Sub.none else case model.mouse of diff --git a/Map.elm b/Map.elm index bb3bae9..9dc5f2c 100644 --- a/Map.elm +++ b/Map.elm @@ -72,19 +72,21 @@ newLevel level map = initArtGame : ArtGame initArtGame = { balls = - [ initMovingBall ( 0, 0 ) "blue" - , initMovingBall ( 100, 100 ) "green" + [ initMovingBall ( 0, 0 ) ( 1, 1 ) "blue" + , initMovingBall ( 100, 70 ) ( -1, 1 ) "green" + , initMovingBall ( 70, 170 ) ( -1, -1 ) "yellow" + , initMovingBall ( 200, 170 ) ( 1, -1 ) "red" ] } -initMovingBall : ( Float, Float ) -> String -> MovingBall -initMovingBall ( x, y ) color = +initMovingBall : ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall +initMovingBall ( x, y ) ( vx, vy ) color = { color = color , radius = 64 , pos = vec2 x y - , xVelocity = 1 - , yVelocity = 1 + , xVelocity = vx + , yVelocity = vy } @@ -109,7 +111,7 @@ animateArtGame timeDiff window artGame = { artGame | balls = artGame.balls - -- |> List.map (animateBall timeDiff window) + |> List.map (animateBall timeDiff window) |> collisions } @@ -119,83 +121,83 @@ collisions balls = balls +initLeftWall windowHeight = + { pos = vec2 0 <| windowHeight / 2 + , halfHeight = windowHeight / 2 + , halfWidth = 1 + } -{- - initLeftWall windowHeight = - { pos = vec2 0 windowHeight / 2 - , halfHeight = windowHeight / 2 - , halfWidth = 1 - } +initRightWall windowWidth windowHeight = + { pos = vec2 windowWidth (windowHeight / 2) + , halfHeight = windowHeight / 2 + , halfWidth = 1 + } - initRightWall windowWidth windowHeight = - { pos = vec2 windowWidth (windowHeight / 2) - , halfHeight = windowHeight / 2 - , halfWidth = 1 - } +initTopWall windowWidth = + { pos = vec2 (windowWidth / 2) 0 + , halfHeight = 1 + , halfWidth = windowWidth / 2 + } - initTopWall windowWidth = - { pos = vec2 (windowWidth / 2) 0 - , halfHeight = 1 - , halfWidth = windowWidth / 2 - } +initBottomWall windowWidth windowHeight = + { pos = vec2 (windowWidth / 2) windowHeight + , halfHeight = 1 + , halfWidth = windowWidth / 2 + } - initBottomWall windowWidth windowHeight = - { pos = vec2 (windowWidth / 2) windowHeight - , halfHeight = 1 - , halfWidth = windowWidth / 2 - } --} -{- - animateBall : Time -> Window.Size -> MovingBall -> MovingBall - animateBall timeDiff window ball = - let - ( leftWall, rightWall, topWall, bottomWall ) = - ( initLeftWall window.height - , initRightWall window.width window.height - , initTopWall window.width - , initBottomWall window.width window.height - ) - - leftCol = - collisionBoxBubble - ( leftWall.pos, vec2 leftWall.halfWidth leftWall.halfHeight ) - ( ball.pos, ball.radius ) - - x = - getX ball.pos - - y = - getY ball.pos - - newX = - (x + ball.xVelocity * timeDiff) - |> clamp leftWall rightWall - - newY = - (y + ball.yVelocity * timeDiff) - |> clamp topWall bottomWall - - newXVelocity = - if newX == leftWall || newX == rightWall then - -ball.xVelocity - else - ball.xVelocity - - newYVelocity = - if newY == topWall || newY == bottomWall then - -ball.yVelocity - else - ball.xVelocity - in - { ball - | pos = vec2 newX newY - , xVelocity = newXVelocity - , yVelocity = newYVelocity - } --} + +animateBall : Time -> Window.Size -> MovingBall -> MovingBall +animateBall timeDiff window ball = + let + ( width, height ) = + ( toFloat window.width, toFloat window.height ) + + ( leftWall, rightWall, topWall, bottomWall ) = + ( initLeftWall height + , initRightWall width height + , initTopWall width + , initBottomWall width height + ) + + leftCol = + collisionBoxBubble + ( leftWall.pos, vec2 leftWall.halfWidth leftWall.halfHeight ) + ( ball.pos, ball.radius ) + + x = + getX ball.pos + + y = + getY ball.pos + + newX = + (x + ball.xVelocity * timeDiff) + |> clamp (getX leftWall.pos) (getX rightWall.pos) + + newY = + (y + ball.yVelocity * timeDiff) + |> clamp (getY topWall.pos) (getY bottomWall.pos) + + newXVelocity = + if newX == getX leftWall.pos || newX == getX rightWall.pos then + -ball.xVelocity + else + ball.xVelocity + + newYVelocity = + if newY == getY topWall.pos || newY == getY bottomWall.pos then + -ball.yVelocity + else + ball.yVelocity + in + { ball + | pos = vec2 newX newY + , xVelocity = newXVelocity + , yVelocity = newYVelocity + } type alias CollisionResult = @@ -467,7 +469,7 @@ colorCircle playAudioMsg ( x, y ) color audio = colorGame : NewLevel msg -> PlayAudio msg -> ArtGame -> Html msg colorGame newLevelMsg playAudioMsg artGame = div [] - ([ backButton ( 0, 0 ) newLevelMsg (ArtStore False) + ([ backButton ( 130, 0 ) newLevelMsg (ArtStore False) , text "Color Game" ] ++ List.map colorBall artGame.balls diff --git a/index.html b/index.html index 085a76d..fdad9d7 100644 --- a/index.html +++ b/index.html @@ -10042,8 +10042,8 @@ } }); }); -var _user$project$Map$backButton = F3( - function (_p2, newLevelMsg, level) { +var _user$project$Map$pauseButton = F2( + function (_p2, pauseMsg) { var _p3 = _p2; return A2( _elm_lang$html$Html$button, @@ -10089,6 +10089,61 @@ } } }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Pause'), + _1: {ctor: '[]'} + }); + }); +var _user$project$Map$backButton = F3( + function (_p4, newLevelMsg, level) { + var _p5 = _p4; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p5._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p5._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + }), _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( @@ -10103,8 +10158,8 @@ }); }); var _user$project$Map$playButton = F3( - function (_p4, newLevelMsg, level) { - var _p5 = _p4; + function (_p6, newLevelMsg, level) { + var _p7 = _p6; return A2( _elm_lang$html$Html$button, { @@ -10123,7 +10178,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._0), + _elm_lang$core$Basics$toString(_p7._0), 'px') }, _1: { @@ -10133,7 +10188,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._1), + _elm_lang$core$Basics$toString(_p7._1), 'px') }, _1: { @@ -10236,8 +10291,8 @@ {ctor: '[]'}); }; var _user$project$Map$colorCircle = F4( - function (playAudioMsg, _p6, color, audio) { - var _p7 = _p6; + function (playAudioMsg, _p8, color, audio) { + var _p9 = _p8; return A2( _elm_lang$html$Html$div, { @@ -10262,7 +10317,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._0), + _elm_lang$core$Basics$toString(_p9._0), 'px') }, _1: { @@ -10272,7 +10327,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._1), + _elm_lang$core$Basics$toString(_p9._1), 'px') }, _1: { @@ -10300,8 +10355,8 @@ {ctor: '[]'}); }); var _user$project$Map$groceryItem = F4( - function (playAudioMsg, _p8, image, audio) { - var _p9 = _p8; + function (playAudioMsg, _p10, image, audio) { + var _p11 = _p10; return A2( _elm_lang$html$Html$img, { @@ -10326,7 +10381,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._0), + _elm_lang$core$Basics$toString(_p11._0), 'px') }, _1: { @@ -10336,7 +10391,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._1), + _elm_lang$core$Basics$toString(_p11._1), 'px') }, _1: {ctor: '[]'} @@ -10355,25 +10410,39 @@ }, {ctor: '[]'}); }); +var _user$project$Map$initBottomWall = F2( + function (windowWidth, windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, windowHeight), + halfHeight: 1, + halfWidth: windowWidth / 2 + }; + }); +var _user$project$Map$initTopWall = function (windowWidth) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, 0), + halfHeight: 1, + halfWidth: windowWidth / 2 + }; +}; +var _user$project$Map$initRightWall = F2( + function (windowWidth, windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth, windowHeight / 2), + halfHeight: windowHeight / 2, + halfWidth: 1 + }; + }); +var _user$project$Map$initLeftWall = function (windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, windowHeight / 2), + halfHeight: windowHeight / 2, + halfWidth: 1 + }; +}; var _user$project$Map$collisions = function (balls) { return balls; }; -var _user$project$Map$animateArtGame = F3( - function (timeDiff, window, artGame) { - return _elm_lang$core$Native_Utils.update( - artGame, - { - balls: _user$project$Map$collisions(artGame.balls) - }); - }); -var _user$project$Map$tick = F2( - function (timeDelta, map) { - return _elm_lang$core$Native_Utils.update( - map, - { - artGame: A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame) - }); - }); var _user$project$Map$resize = F2( function (window, map) { return _elm_lang$core$Native_Utils.update( @@ -10381,12 +10450,12 @@ {window: window}); }); var _user$project$Map$initMovingBall = F2( - function (_p10, color) { - var _p11 = _p10; + function (_p12, color) { + var _p13 = _p12; return { color: color, radius: 64, - pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p11._0, _p11._1), + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p13._0, _p13._1), xVelocity: 1, yVelocity: 1 }; @@ -10410,8 +10479,8 @@ }; var _user$project$Map$newLevel = F2( function (level, map) { - var _p12 = level; - if ((_p12.ctor === 'ArtStore') && (_p12._0 === true)) { + var _p14 = level; + if ((_p14.ctor === 'ArtStore') && (_p14._0 === true)) { return _elm_lang$core$Native_Utils.update( map, {artGame: _user$project$Map$initArtGame, level: level}); @@ -10447,38 +10516,38 @@ return {normal: a, penetration: b}; }); var _user$project$Map$collisionBoxBubble = F2( - function (_p14, _p13) { - var _p15 = _p14; - var _p22 = _p15._1; - var _p16 = _p13; - var _p21 = _p16._1; - var _p17 = { + function (_p16, _p15) { + var _p17 = _p16; + var _p24 = _p17._1; + var _p18 = _p15; + var _p23 = _p18._1; + var _p19 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p22), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p22) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) }; - var boxX = _p17._0; - var boxY = _p17._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p16._0, _p15._0); - var _p18 = { + var boxX = _p19._0; + var boxY = _p19._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); + var _p20 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p18._0; - var dy = _p18._1; + var dx = _p20._0; + var dy = _p20._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p19 = { + var _p21 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p19._0; - var cy = _p19._1; - var _p20 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p21._0; + var cy = _p21._1; + var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -10497,17 +10566,17 @@ _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p20._0; - var inside = _p20._1; + var closest = _p22._0; + var inside = _p22._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p21 * _p21) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { return A2( _user$project$Map$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p21 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Map$CollisionResult, A2( @@ -10520,14 +10589,110 @@ penetration); } }); +var _user$project$Map$animateBall = F3( + function (timeDiff, window, ball) { + var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); + var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); + var _p25 = { + ctor: '_Tuple2', + _0: _elm_lang$core$Basics$toFloat(window.width), + _1: _elm_lang$core$Basics$toFloat(window.height) + }; + var width = _p25._0; + var height = _p25._1; + var _p26 = { + ctor: '_Tuple4', + _0: _user$project$Map$initLeftWall(height), + _1: A2(_user$project$Map$initRightWall, width, height), + _2: _user$project$Map$initTopWall(width), + _3: A2(_user$project$Map$initBottomWall, width, height) + }; + var leftWall = _p26._0; + var rightWall = _p26._1; + var topWall = _p26._2; + var bottomWall = _p26._3; + var leftCol = A2( + _user$project$Map$collisionBoxBubble, + { + ctor: '_Tuple2', + _0: leftWall.pos, + _1: A2(_elm_community$linear_algebra$Math_Vector2$vec2, leftWall.halfWidth, leftWall.halfHeight) + }, + {ctor: '_Tuple2', _0: ball.pos, _1: ball.radius}); + var newX = A3( + _elm_lang$core$Basics$clamp, + _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos), + _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos), + x + (ball.xVelocity * timeDiff)); + var newY = A3( + _elm_lang$core$Basics$clamp, + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos), + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos), + y + (ball.yVelocity * timeDiff)); + var newXVelocity = (_elm_lang$core$Native_Utils.eq( + newX, + _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos)) || _elm_lang$core$Native_Utils.eq( + newX, + _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos))) ? (0 - ball.xVelocity) : ball.xVelocity; + var newYVelocity = function () { + if (_elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos))) { + var _p27 = A2( + _elm_lang$core$Debug$log, + 'top collistion', + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos)); + return 0 - ball.yVelocity; + } else { + if (_elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos))) { + var _p28 = A2( + _elm_lang$core$Debug$log, + 'bottom collistion', + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos)); + return 0 - ball.yVelocity; + } else { + return ball.xVelocity; + } + } + }(); + return _elm_lang$core$Native_Utils.update( + ball, + { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newX, newY), + xVelocity: newXVelocity, + yVelocity: newYVelocity + }); + }); +var _user$project$Map$animateArtGame = F3( + function (timeDiff, window, artGame) { + return _elm_lang$core$Native_Utils.update( + artGame, + { + balls: _user$project$Map$collisions( + A2( + _elm_lang$core$List$map, + A2(_user$project$Map$animateBall, timeDiff, window), + artGame.balls)) + }); + }); +var _user$project$Map$tick = F2( + function (timeDelta, map) { + return _elm_lang$core$Native_Utils.update( + map, + { + artGame: A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame) + }); + }); var _user$project$Map$ArtStore = function (a) { return {ctor: 'ArtStore', _0: a}; }; var _user$project$Map$artStoreBuilding = F2( - function (_p23, newLevelMsg) { - var _p24 = _p23; - var _p26 = _p24._1; - var _p25 = _p24._0; + function (_p29, newLevelMsg) { + var _p30 = _p29; + var _p32 = _p30._1; + var _p31 = _p30._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10562,7 +10727,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p25), + _elm_lang$core$Basics$toString(_p31), 'px') }, _1: { @@ -10572,7 +10737,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p26), + _elm_lang$core$Basics$toString(_p32), 'px') }, _1: {ctor: '[]'} @@ -10618,7 +10783,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p25 + 7), + _elm_lang$core$Basics$toString(_p31 + 7), 'px') }, _1: { @@ -10628,7 +10793,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p26 + 10), + _elm_lang$core$Basics$toString(_p32 + 10), 'px') }, _1: {ctor: '[]'} @@ -10651,8 +10816,8 @@ } }); }); -var _user$project$Map$colorGame = F3( - function (newLevelMsg, playAudioMsg, artGame) { +var _user$project$Map$colorGame = F4( + function (newLevelMsg, playAudioMsg, pauseMsg, artGame) { return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10667,18 +10832,25 @@ _user$project$Map$ArtStore(false)), _1: { ctor: '::', - _0: _elm_lang$html$Html$text('Color Game'), - _1: {ctor: '[]'} + _0: A2( + _user$project$Map$pauseButton, + {ctor: '_Tuple2', _0: 130, _1: 0}, + pauseMsg), + _1: { + ctor: '::', + _0: _elm_lang$html$Html$text('Color Game'), + _1: {ctor: '[]'} + } } }, A2(_elm_lang$core$List$map, _user$project$Map$colorBall, artGame.balls))); }); var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; var _user$project$Map$storeBuilding = F2( - function (_p27, newLevelMsg) { - var _p28 = _p27; - var _p30 = _p28._1; - var _p29 = _p28._0; + function (_p33, newLevelMsg) { + var _p34 = _p33; + var _p36 = _p34._1; + var _p35 = _p34._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10712,7 +10884,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p29), + _elm_lang$core$Basics$toString(_p35), 'px') }, _1: { @@ -10722,7 +10894,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p30), + _elm_lang$core$Basics$toString(_p36), 'px') }, _1: {ctor: '[]'} @@ -10768,7 +10940,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p29 + 7), + _elm_lang$core$Basics$toString(_p35 + 7), 'px') }, _1: { @@ -10778,7 +10950,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p30 + 10), + _elm_lang$core$Basics$toString(_p36 + 10), 'px') }, _1: {ctor: '[]'} @@ -10864,21 +11036,21 @@ } }); }); -var _user$project$Map$artStore = F4( - function (play, newLevelMsg, playAudioMsg, map) { - var _p31 = play; - if (_p31 === true) { - return A3(_user$project$Map$colorGame, newLevelMsg, playAudioMsg, map.artGame); +var _user$project$Map$artStore = F5( + function (play, newLevelMsg, playAudioMsg, pauseMsg, map) { + var _p37 = play; + if (_p37 === true) { + return A4(_user$project$Map$colorGame, newLevelMsg, playAudioMsg, pauseMsg, map.artGame); } else { var showCircle = F2( - function (n, _p32) { - var _p33 = _p32; + function (n, _p38) { + var _p39 = _p38; return A4( _user$project$Map$colorCircle, playAudioMsg, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p33._0, - _p33._1); + _p39._0, + _p39._1); }); return A2( _elm_lang$html$Html$div, @@ -10923,8 +11095,8 @@ }); var _user$project$Map$Home = {ctor: 'Home'}; var _user$project$Map$house = F2( - function (_p34, newLevelMsg) { - var _p35 = _p34; + function (_p40, newLevelMsg) { + var _p41 = _p40; return A2( _elm_lang$html$Html$img, { @@ -10953,7 +11125,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._0), + _elm_lang$core$Basics$toString(_p41._0), 'px') }, _1: { @@ -10963,7 +11135,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._1), + _elm_lang$core$Basics$toString(_p41._1), 'px') }, _1: {ctor: '[]'} @@ -11006,10 +11178,10 @@ } }); }); -var _user$project$Map$view = F4( - function (newLevelMsg, playAudioMsg, mapSize, map) { - var _p36 = map.level; - switch (_p36.ctor) { +var _user$project$Map$view = F5( + function (newLevelMsg, playAudioMsg, pauseMsg, mapSize, map) { + var _p42 = map.level; + switch (_p42.ctor) { case 'Home': return A3(_user$project$Map$home, newLevelMsg, playAudioMsg, mapSize); case 'HomeTown': @@ -11017,7 +11189,7 @@ case 'GroceryStore': return A3(_user$project$Map$groceryStore, newLevelMsg, playAudioMsg, mapSize); default: - return A4(_user$project$Map$artStore, _p36._0, newLevelMsg, playAudioMsg, map); + return A5(_user$project$Map$artStore, _p42._0, newLevelMsg, playAudioMsg, pauseMsg, map); } }); var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( @@ -11158,7 +11330,7 @@ var _user$project$Main$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; -var _user$project$Main$mapView = A2(_user$project$Map$view, _user$project$Main$NewLevel, _user$project$Main$PlayAudio); +var _user$project$Main$mapView = A3(_user$project$Map$view, _user$project$Main$NewLevel, _user$project$Main$PlayAudio, _user$project$Main$Stop); var _user$project$Main$view = function (model) { return A2( _elm_lang$html$Html$div, From a51fa8038dfb941feb6cca4cea688a18d3325b6c Mon Sep 17 00:00:00 2001 From: trotha01 Date: Wed, 24 May 2017 17:52:10 -0700 Subject: [PATCH 11/33] colors collide --- Map.elm | 134 ++++++++++++++-- index.html | 460 +++++++++++++++++++++++++++++------------------------ 2 files changed, 371 insertions(+), 223 deletions(-) diff --git a/Map.elm b/Map.elm index 9dc5f2c..1b8cfff 100644 --- a/Map.elm +++ b/Map.elm @@ -46,8 +46,12 @@ type alias MovingBall = { color : String , pos : Vec2 , radius : Float - , xVelocity : Float - , yVelocity : Float + , velocity : Vec2 + + {- + , xVelocity : Float + , yVelocity : Float + -} } @@ -83,10 +87,9 @@ initArtGame = initMovingBall : ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall initMovingBall ( x, y ) ( vx, vy ) color = { color = color - , radius = 64 + , radius = 32 , pos = vec2 x y - , xVelocity = vx - , yVelocity = vy + , velocity = vec2 vx vy } @@ -118,7 +121,107 @@ animateArtGame timeDiff window artGame = collisions : List MovingBall -> List MovingBall collisions balls = - balls + collide [] balls + + +collide : List MovingBall -> List MovingBall -> List MovingBall +collide acc bodies = + case bodies of + [] -> + acc + + h :: t -> + case collideWith h t [] of + [] -> + [] + + h1 :: t1 -> + collide (h1 :: acc) t1 + + +collideWith : MovingBall -> List MovingBall -> List MovingBall -> List MovingBall +collideWith a0 bodies acc = + case bodies of + [] -> + a0 :: acc + + b0 :: bs -> + let + collisionResult = + collision a0 b0 + + ( a1, b1 ) = + resolveCollision collisionResult a0 b0 + in + collideWith a1 bs (b1 :: acc) + + + +-- figure out what collision resolution to use + + +collision : MovingBall -> MovingBall -> CollisionResult +collision body0 body1 = + let + b0b1 = + Vec2.sub body1.pos body0.pos + in + collisionBubbleBubble b0b1 body0.radius body1.radius + + + +-- calculate collision normal, penetration depth of a collision among bubbles +-- takes distance vector b0b1 and the bubble radii as argument + + +collisionBubbleBubble : Vec2 -> Float -> Float -> CollisionResult +collisionBubbleBubble b0b1 radius0 radius1 = + let + radiusb0b1 = + radius0 + radius1 + + distanceSq = + Vec2.lengthSquared b0b1 + + -- simple optimization: doesn't compute sqrt unless necessary + in + if distanceSq == 0 then + CollisionResult (vec2 1 0) radius0 + -- same position, arbitrary normal + else if distanceSq >= radiusb0b1 * radiusb0b1 then + CollisionResult (vec2 1 0) 0 + -- no intersection, arbitrary normal + else + let + d = + sqrt distanceSq + in + CollisionResult (Vec2.scale (1 / d) b0b1) (radiusb0b1 - d) + + +resolveCollision : CollisionResult -> MovingBall -> MovingBall -> ( MovingBall, MovingBall ) +resolveCollision { normal, penetration } b0 b1 = + let + relativeVelocity = + Vec2.sub b1.velocity b0.velocity + + velocityAlongNormal = + Vec2.dot relativeVelocity normal + in + if penetration == 0 || velocityAlongNormal > 0 then + ( b0, b1 ) + -- no collision or velocities separating + else + let + -- impulse scalar + impulse = + normal + + -- impulse vector + in + ( { b0 | velocity = Vec2.sub b0.velocity impulse } + , { b1 | velocity = Vec2.add b1.velocity impulse } + ) initLeftWall windowHeight = @@ -174,29 +277,28 @@ animateBall timeDiff window ball = getY ball.pos newX = - (x + ball.xVelocity * timeDiff) + (x + getX ball.velocity * timeDiff) |> clamp (getX leftWall.pos) (getX rightWall.pos) newY = - (y + ball.yVelocity * timeDiff) + (y + getY ball.velocity * timeDiff) |> clamp (getY topWall.pos) (getY bottomWall.pos) newXVelocity = if newX == getX leftWall.pos || newX == getX rightWall.pos then - -ball.xVelocity + -(getX ball.velocity) else - ball.xVelocity + getX ball.velocity newYVelocity = if newY == getY topWall.pos || newY == getY bottomWall.pos then - -ball.yVelocity + -(getY ball.velocity) else - ball.yVelocity + getY ball.velocity in { ball | pos = vec2 newX newY - , xVelocity = newXVelocity - , yVelocity = newYVelocity + , velocity = vec2 newXVelocity newYVelocity } @@ -486,8 +588,8 @@ colorBall ball = , ( "position", "absolute" ) , ( "left", (toString <| getX ball.pos) ++ "px" ) , ( "top", (toString <| getY ball.pos) ++ "px" ) - , ( "width", toString ball.radius ++ "px" ) - , ( "height", toString ball.radius ++ "px" ) + , ( "width", toString (ball.radius * 2) ++ "px" ) + , ( "height", toString (ball.radius * 2) ++ "px" ) ] ] [] diff --git a/index.html b/index.html index fdad9d7..b54e4cb 100644 --- a/index.html +++ b/index.html @@ -10042,8 +10042,8 @@ } }); }); -var _user$project$Map$pauseButton = F2( - function (_p2, pauseMsg) { +var _user$project$Map$backButton = F3( + function (_p2, newLevelMsg, level) { var _p3 = _p2; return A2( _elm_lang$html$Html$button, @@ -10089,61 +10089,6 @@ } } }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Pause'), - _1: {ctor: '[]'} - }); - }); -var _user$project$Map$backButton = F3( - function (_p4, newLevelMsg, level) { - var _p5 = _p4; - return A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._1), - 'px') - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} - } - } - } - } - } - }), _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( @@ -10158,8 +10103,8 @@ }); }); var _user$project$Map$playButton = F3( - function (_p6, newLevelMsg, level) { - var _p7 = _p6; + function (_p4, newLevelMsg, level) { + var _p5 = _p4; return A2( _elm_lang$html$Html$button, { @@ -10178,7 +10123,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._0), + _elm_lang$core$Basics$toString(_p5._0), 'px') }, _1: { @@ -10188,7 +10133,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._1), + _elm_lang$core$Basics$toString(_p5._1), 'px') }, _1: { @@ -10264,7 +10209,7 @@ _0: 'width', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.radius), + _elm_lang$core$Basics$toString(ball.radius * 2), 'px') }, _1: { @@ -10274,7 +10219,7 @@ _0: 'height', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.radius), + _elm_lang$core$Basics$toString(ball.radius * 2), 'px') }, _1: {ctor: '[]'} @@ -10291,8 +10236,8 @@ {ctor: '[]'}); }; var _user$project$Map$colorCircle = F4( - function (playAudioMsg, _p8, color, audio) { - var _p9 = _p8; + function (playAudioMsg, _p6, color, audio) { + var _p7 = _p6; return A2( _elm_lang$html$Html$div, { @@ -10317,7 +10262,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._0), + _elm_lang$core$Basics$toString(_p7._0), 'px') }, _1: { @@ -10327,7 +10272,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._1), + _elm_lang$core$Basics$toString(_p7._1), 'px') }, _1: { @@ -10355,8 +10300,8 @@ {ctor: '[]'}); }); var _user$project$Map$groceryItem = F4( - function (playAudioMsg, _p10, image, audio) { - var _p11 = _p10; + function (playAudioMsg, _p8, image, audio) { + var _p9 = _p8; return A2( _elm_lang$html$Html$img, { @@ -10381,7 +10326,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p11._0), + _elm_lang$core$Basics$toString(_p9._0), 'px') }, _1: { @@ -10391,7 +10336,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p11._1), + _elm_lang$core$Basics$toString(_p9._1), 'px') }, _1: {ctor: '[]'} @@ -10440,47 +10385,87 @@ halfWidth: 1 }; }; -var _user$project$Map$collisions = function (balls) { - return balls; -}; +var _user$project$Map$resolveCollision = F3( + function (_p10, b0, b1) { + var _p11 = _p10; + var _p12 = _p11.normal; + var relativeVelocity = A2(_elm_community$linear_algebra$Math_Vector2$sub, b1.velocity, b0.velocity); + var velocityAlongNormal = A2(_elm_community$linear_algebra$Math_Vector2$dot, relativeVelocity, _p12); + if (_elm_lang$core$Native_Utils.eq(_p11.penetration, 0) || (_elm_lang$core$Native_Utils.cmp(velocityAlongNormal, 0) > 0)) { + return {ctor: '_Tuple2', _0: b0, _1: b1}; + } else { + var impulse = _p12; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + b0, + { + velocity: A2(_elm_community$linear_algebra$Math_Vector2$sub, b0.velocity, impulse) + }), + _1: _elm_lang$core$Native_Utils.update( + b1, + { + velocity: A2(_elm_community$linear_algebra$Math_Vector2$add, b1.velocity, impulse) + }) + }; + } + }); var _user$project$Map$resize = F2( function (window, map) { return _elm_lang$core$Native_Utils.update( map, {window: window}); }); -var _user$project$Map$initMovingBall = F2( - function (_p12, color) { - var _p13 = _p12; +var _user$project$Map$initMovingBall = F3( + function (_p14, _p13, color) { + var _p15 = _p14; + var _p16 = _p13; return { color: color, - radius: 64, - pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p13._0, _p13._1), - xVelocity: 1, - yVelocity: 1 + radius: 32, + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p15._0, _p15._1), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p16._0, _p16._1) }; }); var _user$project$Map$initArtGame = { balls: { ctor: '::', - _0: A2( + _0: A3( _user$project$Map$initMovingBall, {ctor: '_Tuple2', _0: 0, _1: 0}, + {ctor: '_Tuple2', _0: 1, _1: 1}, 'blue'), _1: { ctor: '::', - _0: A2( + _0: A3( _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 100, _1: 100}, + {ctor: '_Tuple2', _0: 100, _1: 70}, + {ctor: '_Tuple2', _0: -1, _1: 1}, 'green'), - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 70, _1: 170}, + {ctor: '_Tuple2', _0: -1, _1: -1}, + 'yellow'), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 200, _1: 170}, + {ctor: '_Tuple2', _0: 1, _1: -1}, + 'red'), + _1: {ctor: '[]'} + } + } } } }; var _user$project$Map$newLevel = F2( function (level, map) { - var _p14 = level; - if ((_p14.ctor === 'ArtStore') && (_p14._0 === true)) { + var _p17 = level; + if ((_p17.ctor === 'ArtStore') && (_p17._0 === true)) { return _elm_lang$core$Native_Utils.update( map, {artGame: _user$project$Map$initArtGame, level: level}); @@ -10507,47 +10492,130 @@ var _user$project$Map$ArtGame = function (a) { return {balls: a}; }; -var _user$project$Map$MovingBall = F5( - function (a, b, c, d, e) { - return {color: a, pos: b, radius: c, xVelocity: d, yVelocity: e}; +var _user$project$Map$MovingBall = F4( + function (a, b, c, d) { + return {color: a, pos: b, radius: c, velocity: d}; }); var _user$project$Map$CollisionResult = F2( function (a, b) { return {normal: a, penetration: b}; }); +var _user$project$Map$collisionBubbleBubble = F3( + function (b0b1, radius0, radius1) { + var distanceSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(b0b1); + var radiusb0b1 = radius0 + radius1; + if (_elm_lang$core$Native_Utils.eq(distanceSq, 0)) { + return A2( + _user$project$Map$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + radius0); + } else { + if (_elm_lang$core$Native_Utils.cmp(distanceSq, radiusb0b1 * radiusb0b1) > -1) { + return A2( + _user$project$Map$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + 0); + } else { + var d = _elm_lang$core$Basics$sqrt(distanceSq); + return A2( + _user$project$Map$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$scale, 1 / d, b0b1), + radiusb0b1 - d); + } + } + }); +var _user$project$Map$collision = F2( + function (body0, body1) { + var b0b1 = A2(_elm_community$linear_algebra$Math_Vector2$sub, body1.pos, body0.pos); + return A3(_user$project$Map$collisionBubbleBubble, b0b1, body0.radius, body1.radius); + }); +var _user$project$Map$collideWith = F3( + function (a0, bodies, acc) { + collideWith: + while (true) { + var _p18 = bodies; + if (_p18.ctor === '[]') { + return {ctor: '::', _0: a0, _1: acc}; + } else { + var _p20 = _p18._0; + var collisionResult = A2(_user$project$Map$collision, a0, _p20); + var _p19 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p20); + var a1 = _p19._0; + var b1 = _p19._1; + var _v10 = a1, + _v11 = _p18._1, + _v12 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v10; + bodies = _v11; + acc = _v12; + continue collideWith; + } + } + }); +var _user$project$Map$collide = F2( + function (acc, bodies) { + collide: + while (true) { + var _p21 = bodies; + if (_p21.ctor === '[]') { + return acc; + } else { + var _p22 = A3( + _user$project$Map$collideWith, + _p21._0, + _p21._1, + {ctor: '[]'}); + if (_p22.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _v15 = {ctor: '::', _0: _p22._0, _1: acc}, + _v16 = _p22._1; + acc = _v15; + bodies = _v16; + continue collide; + } + } + } + }); +var _user$project$Map$collisions = function (balls) { + return A2( + _user$project$Map$collide, + {ctor: '[]'}, + balls); +}; var _user$project$Map$collisionBoxBubble = F2( - function (_p16, _p15) { - var _p17 = _p16; - var _p24 = _p17._1; - var _p18 = _p15; - var _p23 = _p18._1; - var _p19 = { + function (_p24, _p23) { + var _p25 = _p24; + var _p32 = _p25._1; + var _p26 = _p23; + var _p31 = _p26._1; + var _p27 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p32), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p32) }; - var boxX = _p19._0; - var boxY = _p19._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); - var _p20 = { + var boxX = _p27._0; + var boxY = _p27._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p26._0, _p25._0); + var _p28 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p20._0; - var dy = _p20._1; + var dx = _p28._0; + var dy = _p28._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p21 = { + var _p29 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p21._0; - var cy = _p21._1; - var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p29._0; + var cy = _p29._1; + var _p30 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -10566,17 +10634,17 @@ _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p22._0; - var inside = _p22._1; + var closest = _p30._0; + var inside = _p30._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p31 * _p31) > 0) && (!inside)) { return A2( _user$project$Map$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p31 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Map$CollisionResult, A2( @@ -10593,24 +10661,24 @@ function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); - var _p25 = { + var _p33 = { ctor: '_Tuple2', _0: _elm_lang$core$Basics$toFloat(window.width), _1: _elm_lang$core$Basics$toFloat(window.height) }; - var width = _p25._0; - var height = _p25._1; - var _p26 = { + var width = _p33._0; + var height = _p33._1; + var _p34 = { ctor: '_Tuple4', _0: _user$project$Map$initLeftWall(height), _1: A2(_user$project$Map$initRightWall, width, height), _2: _user$project$Map$initTopWall(width), _3: A2(_user$project$Map$initBottomWall, width, height) }; - var leftWall = _p26._0; - var rightWall = _p26._1; - var topWall = _p26._2; - var bottomWall = _p26._3; + var leftWall = _p34._0; + var rightWall = _p34._1; + var topWall = _p34._2; + var bottomWall = _p34._3; var leftCol = A2( _user$project$Map$collisionBoxBubble, { @@ -10623,46 +10691,27 @@ _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos), _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos), - x + (ball.xVelocity * timeDiff)); + x + (_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff)); var newY = A3( _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos), _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos), - y + (ball.yVelocity * timeDiff)); + y + (_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff)); var newXVelocity = (_elm_lang$core$Native_Utils.eq( newX, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos)) || _elm_lang$core$Native_Utils.eq( newX, - _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos))) ? (0 - ball.xVelocity) : ball.xVelocity; - var newYVelocity = function () { - if (_elm_lang$core$Native_Utils.eq( - newY, - _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos))) { - var _p27 = A2( - _elm_lang$core$Debug$log, - 'top collistion', - _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos)); - return 0 - ball.yVelocity; - } else { - if (_elm_lang$core$Native_Utils.eq( - newY, - _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos))) { - var _p28 = A2( - _elm_lang$core$Debug$log, - 'bottom collistion', - _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos)); - return 0 - ball.yVelocity; - } else { - return ball.xVelocity; - } - } - }(); + _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos))) ? (0 - _elm_community$linear_algebra$Math_Vector2$getX(ball.velocity)) : _elm_community$linear_algebra$Math_Vector2$getX(ball.velocity); + var newYVelocity = (_elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos)) || _elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos))) ? (0 - _elm_community$linear_algebra$Math_Vector2$getY(ball.velocity)) : _elm_community$linear_algebra$Math_Vector2$getY(ball.velocity); return _elm_lang$core$Native_Utils.update( ball, { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newX, newY), - xVelocity: newXVelocity, - yVelocity: newYVelocity + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newXVelocity, newYVelocity) }); }); var _user$project$Map$animateArtGame = F3( @@ -10689,10 +10738,10 @@ return {ctor: 'ArtStore', _0: a}; }; var _user$project$Map$artStoreBuilding = F2( - function (_p29, newLevelMsg) { - var _p30 = _p29; - var _p32 = _p30._1; - var _p31 = _p30._0; + function (_p35, newLevelMsg) { + var _p36 = _p35; + var _p38 = _p36._1; + var _p37 = _p36._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10727,7 +10776,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p31), + _elm_lang$core$Basics$toString(_p37), 'px') }, _1: { @@ -10737,7 +10786,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p32), + _elm_lang$core$Basics$toString(_p38), 'px') }, _1: {ctor: '[]'} @@ -10783,7 +10832,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p31 + 7), + _elm_lang$core$Basics$toString(_p37 + 7), 'px') }, _1: { @@ -10793,7 +10842,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p32 + 10), + _elm_lang$core$Basics$toString(_p38 + 10), 'px') }, _1: {ctor: '[]'} @@ -10816,8 +10865,8 @@ } }); }); -var _user$project$Map$colorGame = F4( - function (newLevelMsg, playAudioMsg, pauseMsg, artGame) { +var _user$project$Map$colorGame = F3( + function (newLevelMsg, playAudioMsg, artGame) { return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10827,30 +10876,23 @@ ctor: '::', _0: A3( _user$project$Map$backButton, - {ctor: '_Tuple2', _0: 0, _1: 0}, + {ctor: '_Tuple2', _0: 130, _1: 0}, newLevelMsg, _user$project$Map$ArtStore(false)), _1: { ctor: '::', - _0: A2( - _user$project$Map$pauseButton, - {ctor: '_Tuple2', _0: 130, _1: 0}, - pauseMsg), - _1: { - ctor: '::', - _0: _elm_lang$html$Html$text('Color Game'), - _1: {ctor: '[]'} - } + _0: _elm_lang$html$Html$text('Color Game'), + _1: {ctor: '[]'} } }, A2(_elm_lang$core$List$map, _user$project$Map$colorBall, artGame.balls))); }); var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; var _user$project$Map$storeBuilding = F2( - function (_p33, newLevelMsg) { - var _p34 = _p33; - var _p36 = _p34._1; - var _p35 = _p34._0; + function (_p39, newLevelMsg) { + var _p40 = _p39; + var _p42 = _p40._1; + var _p41 = _p40._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10884,7 +10926,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35), + _elm_lang$core$Basics$toString(_p41), 'px') }, _1: { @@ -10894,7 +10936,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36), + _elm_lang$core$Basics$toString(_p42), 'px') }, _1: {ctor: '[]'} @@ -10940,7 +10982,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35 + 7), + _elm_lang$core$Basics$toString(_p41 + 7), 'px') }, _1: { @@ -10950,7 +10992,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36 + 10), + _elm_lang$core$Basics$toString(_p42 + 10), 'px') }, _1: {ctor: '[]'} @@ -11036,21 +11078,21 @@ } }); }); -var _user$project$Map$artStore = F5( - function (play, newLevelMsg, playAudioMsg, pauseMsg, map) { - var _p37 = play; - if (_p37 === true) { - return A4(_user$project$Map$colorGame, newLevelMsg, playAudioMsg, pauseMsg, map.artGame); +var _user$project$Map$artStore = F4( + function (play, newLevelMsg, playAudioMsg, map) { + var _p43 = play; + if (_p43 === true) { + return A3(_user$project$Map$colorGame, newLevelMsg, playAudioMsg, map.artGame); } else { var showCircle = F2( - function (n, _p38) { - var _p39 = _p38; + function (n, _p44) { + var _p45 = _p44; return A4( _user$project$Map$colorCircle, playAudioMsg, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p39._0, - _p39._1); + _p45._0, + _p45._1); }); return A2( _elm_lang$html$Html$div, @@ -11095,8 +11137,8 @@ }); var _user$project$Map$Home = {ctor: 'Home'}; var _user$project$Map$house = F2( - function (_p40, newLevelMsg) { - var _p41 = _p40; + function (_p46, newLevelMsg) { + var _p47 = _p46; return A2( _elm_lang$html$Html$img, { @@ -11125,7 +11167,7 @@ _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41._0), + _elm_lang$core$Basics$toString(_p47._0), 'px') }, _1: { @@ -11135,7 +11177,7 @@ _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41._1), + _elm_lang$core$Basics$toString(_p47._1), 'px') }, _1: {ctor: '[]'} @@ -11178,10 +11220,10 @@ } }); }); -var _user$project$Map$view = F5( - function (newLevelMsg, playAudioMsg, pauseMsg, mapSize, map) { - var _p42 = map.level; - switch (_p42.ctor) { +var _user$project$Map$view = F4( + function (newLevelMsg, playAudioMsg, mapSize, map) { + var _p48 = map.level; + switch (_p48.ctor) { case 'Home': return A3(_user$project$Map$home, newLevelMsg, playAudioMsg, mapSize); case 'HomeTown': @@ -11189,7 +11231,7 @@ case 'GroceryStore': return A3(_user$project$Map$groceryStore, newLevelMsg, playAudioMsg, mapSize); default: - return A5(_user$project$Map$artStore, _p42._0, newLevelMsg, playAudioMsg, pauseMsg, map); + return A4(_user$project$Map$artStore, _p48._0, newLevelMsg, playAudioMsg, map); } }); var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( @@ -11199,7 +11241,7 @@ }); var _user$project$Main$Model = F6( function (a, b, c, d, e, f) { - return {user: a, mouse: b, time: c, window: d, map: e, stop: f}; + return {user: a, mouse: b, time: c, window: d, map: e, pause: f}; }); var _user$project$Main$Up = {ctor: 'Up'}; var _user$project$Main$init = { @@ -11207,7 +11249,7 @@ mouse: _user$project$Main$Up, time: 0, window: {width: 100, height: 100}, - stop: false, + pause: false, map: A2( _user$project$Map$init, {width: 100, height: 100}, @@ -11220,12 +11262,12 @@ function (msg, model) { var _p0 = msg; switch (_p0.ctor) { - case 'Stop': + case 'Pause': return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, - {stop: !model.stop}), + {pause: !model.pause}), _1: _elm_lang$core$Platform_Cmd$none }; case 'WindowResize': @@ -11308,17 +11350,17 @@ }; } }); -var _user$project$Main$Stop = {ctor: 'Stop'}; -var _user$project$Main$stopButton = A2( +var _user$project$Main$Pause = {ctor: 'Pause'}; +var _user$project$Main$pauseButton = A2( _elm_lang$html$Html$button, { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Stop), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), _1: {ctor: '[]'} }, { ctor: '::', - _0: _elm_lang$html$Html$text('stop'), + _0: _elm_lang$html$Html$text('pause'), _1: {ctor: '[]'} }); var _user$project$Main$PlayAudio = function (a) { @@ -11330,7 +11372,7 @@ var _user$project$Main$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; -var _user$project$Main$mapView = A3(_user$project$Map$view, _user$project$Main$NewLevel, _user$project$Main$PlayAudio, _user$project$Main$Stop); +var _user$project$Main$mapView = A2(_user$project$Map$view, _user$project$Main$NewLevel, _user$project$Main$PlayAudio); var _user$project$Main$view = function (model) { return A2( _elm_lang$html$Html$div, @@ -11346,11 +11388,15 @@ }, { ctor: '::', - _0: A2(_user$project$Main$mapView, model.window, model.map), + _0: _user$project$Main$pauseButton, _1: { ctor: '::', - _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), - _1: {ctor: '[]'} + _0: A2(_user$project$Main$mapView, model.window, model.map), + _1: { + ctor: '::', + _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), + _1: {ctor: '[]'} + } } }); }; @@ -11367,7 +11413,7 @@ return {ctor: 'Move', _0: a}; }; var _user$project$Main$subscriptions = function (model) { - if (model.stop) { + if (model.pause) { return _elm_lang$core$Platform_Sub$none; } else { var _p6 = model.mouse; From 7c958976b712b4d43582861147897466d6e9d135 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Wed, 24 May 2017 18:07:22 -0700 Subject: [PATCH 12/33] some cleanup --- Main.elm | 8 +-- Map.elm | 52 +++++++++++----- index.html | 173 +++++++++++++++++++++++++++++++---------------------- 3 files changed, 142 insertions(+), 91 deletions(-) diff --git a/Main.elm b/Main.elm index 0123a46..b4a3bf4 100644 --- a/Main.elm +++ b/Main.elm @@ -52,6 +52,7 @@ type Msg | MouseDown Mouse.Position | MouseUp Mouse.Position | NewLevel Map.Level + | MapMsg Map.Msg | Tick Time | PlayAudio String | Pause @@ -110,6 +111,9 @@ update msg model = NewLevel newLevel -> ( { model | map = Map.newLevel newLevel model.map }, Cmd.none ) + MapMsg msg -> + ( { model | map = Map.update msg model.map }, Cmd.none ) + -- VIEW @@ -150,8 +154,6 @@ subscriptions model = Up -> Sub.batch [ Mouse.downs MouseDown - - -- , Time.every (Time.millisecond * 100) Tick , AnimationFrame.diffs Tick , Window.resizes WindowResize ] @@ -160,8 +162,6 @@ subscriptions model = Sub.batch [ Mouse.moves Move , Mouse.ups MouseUp - - -- , Time.every (Time.millisecond * 100) Tick , AnimationFrame.diffs Tick , Window.resizes WindowResize ] diff --git a/Map.elm b/Map.elm index 1b8cfff..024ae76 100644 --- a/Map.elm +++ b/Map.elm @@ -16,14 +16,16 @@ type alias Map = { level : Level , artGame : ArtGame , window : Window.Size + , points : Int } init : Window.Size -> Level -> Map init window level = { level = level - , artGame = { balls = [] } + , artGame = initArtGame , window = window + , points = 0 } @@ -38,20 +40,26 @@ type alias PlayGame = Bool +type Color + = Red + | Orange + | Yellow + | Green + | Blue + | Purple + + type alias ArtGame = - { balls : List MovingBall } + { color : Color + , balls : List MovingBall + } type alias MovingBall = - { color : String + { color : Color , pos : Vec2 , radius : Float , velocity : Vec2 - - {- - , xVelocity : Float - , yVelocity : Float - -} } @@ -75,16 +83,17 @@ newLevel level map = initArtGame : ArtGame initArtGame = - { balls = - [ initMovingBall ( 0, 0 ) ( 1, 1 ) "blue" - , initMovingBall ( 100, 70 ) ( -1, 1 ) "green" - , initMovingBall ( 70, 170 ) ( -1, -1 ) "yellow" - , initMovingBall ( 200, 170 ) ( 1, -1 ) "red" + { color = Yellow + , balls = + [ initMovingBall ( 0, 0 ) ( 1, 1 ) Red + , initMovingBall ( 100, 70 ) ( -1, 1 ) Yellow + , initMovingBall ( 70, 170 ) ( -1, -1 ) Green + , initMovingBall ( 200, 170 ) ( 1, -1 ) Blue ] } -initMovingBall : ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall +initMovingBall : ( Float, Float ) -> ( Float, Float ) -> Color -> MovingBall initMovingBall ( x, y ) ( vx, vy ) color = { color = color , radius = 32 @@ -97,6 +106,17 @@ initMovingBall ( x, y ) ( vx, vy ) color = -- UPDATE +type Msg + = Points + + +update : Msg -> Map -> Map +update msg map = + case msg of + Points -> + { map | points = map.points + 10 } + + resize : Window.Size -> Map -> Map resize window map = { map | window = window } @@ -572,7 +592,7 @@ colorGame : NewLevel msg -> PlayAudio msg -> ArtGame -> Html msg colorGame newLevelMsg playAudioMsg artGame = div [] ([ backButton ( 130, 0 ) newLevelMsg (ArtStore False) - , text "Color Game" + , text ("Color: " ++ toString artGame.color) ] ++ List.map colorBall artGame.balls ) @@ -583,7 +603,7 @@ colorBall ball = div [ style [ ( "border-radius", "50%" ) - , ( "background-color", ball.color ) + , ( "background-color", toString ball.color ) , ( "border", "1px solid black" ) , ( "position", "absolute" ) , ( "left", (toString <| getX ball.pos) ++ "px" ) diff --git a/index.html b/index.html index b54e4cb..4d7aff9 100644 --- a/index.html +++ b/index.html @@ -10173,7 +10173,11 @@ _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: ball.color}, + _0: { + ctor: '_Tuple2', + _0: 'background-color', + _1: _elm_lang$core$Basics$toString(ball.color) + }, _1: { ctor: '::', _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, @@ -10416,82 +10420,32 @@ map, {window: window}); }); +var _user$project$Map$update = F2( + function (msg, map) { + var _p13 = msg; + return _elm_lang$core$Native_Utils.update( + map, + {points: map.points + 10}); + }); var _user$project$Map$initMovingBall = F3( - function (_p14, _p13, color) { - var _p15 = _p14; - var _p16 = _p13; + function (_p15, _p14, color) { + var _p16 = _p15; + var _p17 = _p14; return { color: color, radius: 32, - pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p15._0, _p15._1), - velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p16._0, _p16._1) + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p16._0, _p16._1), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p17._0, _p17._1) }; }); -var _user$project$Map$initArtGame = { - balls: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 0, _1: 0}, - {ctor: '_Tuple2', _0: 1, _1: 1}, - 'blue'), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 100, _1: 70}, - {ctor: '_Tuple2', _0: -1, _1: 1}, - 'green'), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 70, _1: 170}, - {ctor: '_Tuple2', _0: -1, _1: -1}, - 'yellow'), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 200, _1: 170}, - {ctor: '_Tuple2', _0: 1, _1: -1}, - 'red'), - _1: {ctor: '[]'} - } - } - } - } -}; -var _user$project$Map$newLevel = F2( - function (level, map) { - var _p17 = level; - if ((_p17.ctor === 'ArtStore') && (_p17._0 === true)) { - return _elm_lang$core$Native_Utils.update( - map, - {artGame: _user$project$Map$initArtGame, level: level}); - } else { - return _elm_lang$core$Native_Utils.update( - map, - {level: level}); - } - }); -var _user$project$Map$init = F2( - function (window, level) { - return { - level: level, - artGame: { - balls: {ctor: '[]'} - }, - window: window - }; +var _user$project$Map$Map = F4( + function (a, b, c, d) { + return {level: a, artGame: b, window: c, points: d}; }); -var _user$project$Map$Map = F3( - function (a, b, c) { - return {level: a, artGame: b, window: c}; +var _user$project$Map$ArtGame = F2( + function (a, b) { + return {color: a, balls: b}; }); -var _user$project$Map$ArtGame = function (a) { - return {balls: a}; -}; var _user$project$Map$MovingBall = F4( function (a, b, c, d) { return {color: a, pos: b, radius: c, velocity: d}; @@ -10881,7 +10835,11 @@ _user$project$Map$ArtStore(false)), _1: { ctor: '::', - _0: _elm_lang$html$Html$text('Color Game'), + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Color: ', + _elm_lang$core$Basics$toString(artGame.color))), _1: {ctor: '[]'} } }, @@ -11234,6 +11192,66 @@ return A4(_user$project$Map$artStore, _p48._0, newLevelMsg, playAudioMsg, map); } }); +var _user$project$Map$Purple = {ctor: 'Purple'}; +var _user$project$Map$Blue = {ctor: 'Blue'}; +var _user$project$Map$Green = {ctor: 'Green'}; +var _user$project$Map$Yellow = {ctor: 'Yellow'}; +var _user$project$Map$Orange = {ctor: 'Orange'}; +var _user$project$Map$Red = {ctor: 'Red'}; +var _user$project$Map$initArtGame = { + color: _user$project$Map$Yellow, + balls: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 0, _1: 0}, + {ctor: '_Tuple2', _0: 1, _1: 1}, + _user$project$Map$Red), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 100, _1: 70}, + {ctor: '_Tuple2', _0: -1, _1: 1}, + _user$project$Map$Yellow), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 70, _1: 170}, + {ctor: '_Tuple2', _0: -1, _1: -1}, + _user$project$Map$Green), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 200, _1: 170}, + {ctor: '_Tuple2', _0: 1, _1: -1}, + _user$project$Map$Blue), + _1: {ctor: '[]'} + } + } + } + } +}; +var _user$project$Map$init = F2( + function (window, level) { + return {level: level, artGame: _user$project$Map$initArtGame, window: window, points: 0}; + }); +var _user$project$Map$newLevel = F2( + function (level, map) { + var _p49 = level; + if ((_p49.ctor === 'ArtStore') && (_p49._0 === true)) { + return _elm_lang$core$Native_Utils.update( + map, + {artGame: _user$project$Map$initArtGame, level: level}); + } else { + return _elm_lang$core$Native_Utils.update( + map, + {level: level}); + } + }); +var _user$project$Map$Points = {ctor: 'Points'}; var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( 'playAudio', function (v) { @@ -11338,7 +11356,7 @@ }), _1: _elm_lang$core$Platform_Cmd$none }; - default: + case 'NewLevel': return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -11348,6 +11366,16 @@ }), _1: _elm_lang$core$Platform_Cmd$none }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + { + map: A2(_user$project$Map$update, _p0._0, model.map) + }), + _1: _elm_lang$core$Platform_Cmd$none + }; } }); var _user$project$Main$Pause = {ctor: 'Pause'}; @@ -11369,6 +11397,9 @@ var _user$project$Main$Tick = function (a) { return {ctor: 'Tick', _0: a}; }; +var _user$project$Main$MapMsg = function (a) { + return {ctor: 'MapMsg', _0: a}; +}; var _user$project$Main$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; From 3f31a5ce0002a6c2ddccd261350ddd96a6bf7ddd Mon Sep 17 00:00:00 2001 From: trotha01 Date: Wed, 24 May 2017 19:55:04 -0700 Subject: [PATCH 13/33] restructuring --- Audio.elm | 6 + Main.elm | 26 +- Map.elm | 123 ++-- index.html | 1628 ++++++++++++++++++++++++++-------------------------- 4 files changed, 890 insertions(+), 893 deletions(-) create mode 100644 Audio.elm diff --git a/Audio.elm b/Audio.elm new file mode 100644 index 0000000..5c63785 --- /dev/null +++ b/Audio.elm @@ -0,0 +1,6 @@ +port module Audio exposing (play) + +-- PORTS + + +port play : String -> Cmd msg diff --git a/Main.elm b/Main.elm index b4a3bf4..d51e48d 100644 --- a/Main.elm +++ b/Main.elm @@ -51,10 +51,8 @@ type Msg | WindowResize Window.Size | MouseDown Mouse.Position | MouseUp Mouse.Position - | NewLevel Map.Level | MapMsg Map.Msg | Tick Time - | PlayAudio String | Pause @@ -72,9 +70,6 @@ update msg model = , Cmd.none ) - PlayAudio file -> - ( model, playAudio file ) - MouseUp _ -> ( { model | mouse = Up }, Cmd.none ) @@ -108,11 +103,12 @@ update msg model = , Cmd.none ) - NewLevel newLevel -> - ( { model | map = Map.newLevel newLevel model.map }, Cmd.none ) - MapMsg msg -> - ( { model | map = Map.update msg model.map }, Cmd.none ) + let + ( newMap, cmd ) = + Map.update msg model.map + in + ( { model | map = newMap }, Cmd.map MapMsg cmd ) @@ -133,8 +129,9 @@ view model = mapView : Window.Size -> Map -> Html Msg -mapView = - Map.view NewLevel PlayAudio +mapView window map = + Map.view window map + |> Html.map MapMsg pauseButton = @@ -168,13 +165,6 @@ subscriptions model = --- PORTS - - -port playAudio : String -> Cmd msg - - - -- MAIN diff --git a/Map.elm b/Map.elm index 024ae76..055c74d 100644 --- a/Map.elm +++ b/Map.elm @@ -1,5 +1,6 @@ module Map exposing (..) +import Audio import Bee exposing (Bee) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (src, style) @@ -108,13 +109,21 @@ initMovingBall ( x, y ) ( vx, vy ) color = type Msg = Points + | NewLevel Level + | PlayAudio String -update : Msg -> Map -> Map +update : Msg -> Map -> ( Map, Cmd Msg ) update msg map = case msg of Points -> - { map | points = map.points + 10 } + ( { map | points = map.points + 10 }, Cmd.none ) + + NewLevel level -> + ( { map | level = level }, Cmd.none ) + + PlayAudio file -> + ( map, Audio.play file ) resize : Window.Size -> Map -> Map @@ -393,32 +402,32 @@ collisionBoxBubble ( posBox, boxExtents ) ( posBubble, bubbleRadius ) = -- VIEW -view : NewLevel msg -> PlayAudio msg -> Window.Size -> Map -> Html msg -view newLevelMsg playAudioMsg mapSize map = +view : Window.Size -> Map -> Html Msg +view mapSize map = case map.level of Home -> - home newLevelMsg playAudioMsg mapSize + home mapSize HomeTown -> - hometown newLevelMsg playAudioMsg mapSize + hometown mapSize GroceryStore -> - groceryStore newLevelMsg playAudioMsg mapSize + groceryStore mapSize ArtStore play -> - artStore play newLevelMsg playAudioMsg map + artStore play map -- HOME -home : NewLevel msg -> PlayAudio msg -> Window.Size -> Html msg -home newLevelMsg playAudioMsg mapSize = +home : Window.Size -> Html Msg +home mapSize = div [] - [ exit newLevelMsg HomeTown - , Bee.view (Just playAudioMsg) Bee.mama - , Bee.view (Just playAudioMsg) Bee.papa + [ exit HomeTown + , Bee.view (Just PlayAudio) Bee.mama + , Bee.view (Just PlayAudio) Bee.papa ] @@ -426,20 +435,20 @@ home newLevelMsg playAudioMsg mapSize = -- TOWN -hometown : NewLevel msg -> PlayAudio msg -> Window.Size -> Html msg -hometown newLevelMsg playAudioMsg mapSize = +hometown : Window.Size -> Html Msg +hometown mapSize = div [] - [ house ( 0, 0 ) newLevelMsg - , storeBuilding ( 160, 0 ) newLevelMsg - , artStoreBuilding ( 320, 0 ) newLevelMsg + [ house ( 0, 0 ) + , storeBuilding ( 160, 0 ) + , artStoreBuilding ( 320, 0 ) ] -house : ( Int, Int ) -> NewLevel msg -> Html msg -house ( x, y ) newLevelMsg = +house : ( Int, Int ) -> Html Msg +house ( x, y ) = img [ src "imgs/home.png" - , onClick (newLevelMsg Home) + , onClick (NewLevel Home) , style [ ( "position", "absolute" ) , ( "height", "128px" ) @@ -451,12 +460,12 @@ house ( x, y ) newLevelMsg = [] -storeBuilding : ( Int, Int ) -> NewLevel msg -> Html msg -storeBuilding ( x, y ) newLevelMsg = +storeBuilding : ( Int, Int ) -> Html Msg +storeBuilding ( x, y ) = div [] [ img [ src "imgs/store.png" - , onClick (newLevelMsg GroceryStore) + , onClick (NewLevel GroceryStore) , style [ ( "position", "absolute" ) , ( "height", "128px" ) @@ -482,12 +491,12 @@ storeBuilding ( x, y ) newLevelMsg = ] -artStoreBuilding : ( Int, Int ) -> NewLevel msg -> Html msg -artStoreBuilding ( x, y ) newLevelMsg = +artStoreBuilding : ( Int, Int ) -> Html Msg +artStoreBuilding ( x, y ) = div [] [ img [ src "imgs/store.png" - , onClick (newLevelMsg (ArtStore False)) + , onClick (NewLevel (ArtStore False)) , style [ ( "position", "absolute" ) , ( "height", "128px" ) @@ -517,18 +526,18 @@ artStoreBuilding ( x, y ) newLevelMsg = -- GROCERY STORE -groceryStore : NewLevel msg -> PlayAudio msg -> Window.Size -> Html msg -groceryStore newLevelMsg playAudioMsg mapSize = +groceryStore : Window.Size -> Html Msg +groceryStore mapSize = div [] - [ exit newLevelMsg HomeTown - , playButton ( 192, 10 ) newLevelMsg GroceryStore - , groceryItem playAudioMsg ( 64, 96 ) "imgs/banana.png" "audio/el_platano.mp3" - , groceryItem playAudioMsg ( 192, 96 ) "imgs/milk.png" "audio/leche.mp3" + [ exit HomeTown + , playButton ( 192, 10 ) GroceryStore + , groceryItem ( 64, 96 ) "imgs/banana.png" "audio/el_platano.mp3" + , groceryItem ( 192, 96 ) "imgs/milk.png" "audio/leche.mp3" ] -groceryItem : PlayAudio msg -> ( Int, Int ) -> String -> String -> Html msg -groceryItem playAudioMsg ( x, y ) image audio = +groceryItem : ( Int, Int ) -> String -> String -> Html Msg +groceryItem ( x, y ) image audio = img [ src image , style @@ -538,7 +547,7 @@ groceryItem playAudioMsg ( x, y ) image audio = , ( "left", toString x ++ "px" ) , ( "top", toString y ++ "px" ) ] - , onClick (playAudioMsg audio) + , onClick (PlayAudio audio) ] [] @@ -547,20 +556,20 @@ groceryItem playAudioMsg ( x, y ) image audio = -- ART STORE -artStore : PlayGame -> NewLevel msg -> PlayAudio msg -> Map -> Html msg -artStore play newLevelMsg playAudioMsg map = +artStore : PlayGame -> Map -> Html Msg +artStore play map = case play of True -> - colorGame newLevelMsg playAudioMsg map.artGame + colorGame map.artGame False -> let showCircle n ( color, audio ) = - colorCircle playAudioMsg ( 96 * n, 96 ) color audio + colorCircle ( 96 * n, 96 ) color audio in div [] <| - exit newLevelMsg HomeTown - :: playButton ( 192, 10 ) newLevelMsg (ArtStore True) + exit HomeTown + :: playButton ( 192, 10 ) (ArtStore True) :: List.indexedMap showCircle [ ( "black", "audio/negro.m4a" ) , ( "white", "audio/blanco.m4a" ) @@ -570,8 +579,8 @@ artStore play newLevelMsg playAudioMsg map = ] -colorCircle : PlayAudio msg -> ( Int, Int ) -> String -> String -> Html msg -colorCircle playAudioMsg ( x, y ) color audio = +colorCircle : ( Int, Int ) -> String -> String -> Html Msg +colorCircle ( x, y ) color audio = div [ style [ ( "border-radius", "50%" ) @@ -583,15 +592,15 @@ colorCircle playAudioMsg ( x, y ) color audio = , ( "width", "64px" ) , ( "height", "64px" ) ] - , onClick (playAudioMsg audio) + , onClick (PlayAudio audio) ] [] -colorGame : NewLevel msg -> PlayAudio msg -> ArtGame -> Html msg -colorGame newLevelMsg playAudioMsg artGame = +colorGame : ArtGame -> Html Msg +colorGame artGame = div [] - ([ backButton ( 130, 0 ) newLevelMsg (ArtStore False) + ([ backButton ( 130, 0 ) (ArtStore False) , text ("Color: " ++ toString artGame.color) ] ++ List.map colorBall artGame.balls @@ -619,8 +628,8 @@ colorBall ball = -- COMMON -playButton : ( Int, Int ) -> NewLevel msg -> Level -> Html msg -playButton ( x, y ) newLevelMsg level = +playButton : ( Int, Int ) -> Level -> Html Msg +playButton ( x, y ) level = button [ style [ ( "border", "1px solid black" ) @@ -630,13 +639,13 @@ playButton ( x, y ) newLevelMsg level = , ( "width", "128px" ) , ( "height", "64px" ) ] - , onClick (newLevelMsg level) + , onClick (NewLevel level) ] [ text "Play!" ] -backButton : ( Int, Int ) -> NewLevel msg -> Level -> Html msg -backButton ( x, y ) newLevelMsg level = +backButton : ( Int, Int ) -> Level -> Html Msg +backButton ( x, y ) level = button [ style [ ( "border", "1px solid black" ) @@ -646,14 +655,14 @@ backButton ( x, y ) newLevelMsg level = , ( "width", "128px" ) , ( "height", "64px" ) ] - , onClick (newLevelMsg level) + , onClick (NewLevel level) ] [ text "Back" ] -exit : NewLevel msg -> Level -> Html msg -exit newLevelMsg level = - div [ onClick (newLevelMsg level) ] +exit : Level -> Html Msg +exit level = + div [ onClick (NewLevel level) ] [ tile ( 0, 0 ) , tile ( 0, 32 ) , tile ( 32, 0 ) diff --git a/index.html b/index.html index 4d7aff9..b0a4bb4 100644 --- a/index.html +++ b/index.html @@ -9781,6 +9781,11 @@ _p61._0, {to: x, ramp: _elm_lang$core$Maybe$Nothing})); }); +var _user$project$Audio$play = _elm_lang$core$Native_Platform.outgoingPort( + 'play', + function (v) { + return v; + }); var _user$project$Bee$scaleBee = function (dimension) { return _elm_lang$core$Basics$round(dimension / 8); }; @@ -10010,158 +10015,6 @@ return _elm_lang$core$Basics$round( _elm_lang$core$Basics$toFloat(pixels) / 32); }; -var _user$project$Map$exit = F2( - function (newLevelMsg, level) { - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(level)), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 0, _1: 0}), - _1: { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 0, _1: 32}), - _1: { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 32, _1: 0}), - _1: { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 32, _1: 32}), - _1: {ctor: '[]'} - } - } - } - }); - }); -var _user$project$Map$backButton = F3( - function (_p2, newLevelMsg, level) { - var _p3 = _p2; - return A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3._1), - 'px') - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} - } - } - } - } - } - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(level)), - _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Back'), - _1: {ctor: '[]'} - }); - }); -var _user$project$Map$playButton = F3( - function (_p4, newLevelMsg, level) { - var _p5 = _p4; - return A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._1), - 'px') - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} - } - } - } - } - } - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(level)), - _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Play!'), - _1: {ctor: '[]'} - }); - }); var _user$project$Map$colorBall = function (ball) { return A2( _elm_lang$html$Html$div, @@ -10239,126 +10092,6 @@ }, {ctor: '[]'}); }; -var _user$project$Map$colorCircle = F4( - function (playAudioMsg, _p6, color, audio) { - var _p7 = _p6; - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: color}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._1), - 'px') - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} - } - } - } - } - } - } - } - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - playAudioMsg(audio)), - _1: {ctor: '[]'} - } - }, - {ctor: '[]'}); - }); -var _user$project$Map$groceryItem = F4( - function (playAudioMsg, _p8, image, audio) { - var _p9 = _p8; - return A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src(image), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._1), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - playAudioMsg(audio)), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}); - }); var _user$project$Map$initBottomWall = F2( function (windowWidth, windowHeight) { return { @@ -10390,15 +10123,15 @@ }; }; var _user$project$Map$resolveCollision = F3( - function (_p10, b0, b1) { - var _p11 = _p10; - var _p12 = _p11.normal; + function (_p2, b0, b1) { + var _p3 = _p2; + var _p4 = _p3.normal; var relativeVelocity = A2(_elm_community$linear_algebra$Math_Vector2$sub, b1.velocity, b0.velocity); - var velocityAlongNormal = A2(_elm_community$linear_algebra$Math_Vector2$dot, relativeVelocity, _p12); - if (_elm_lang$core$Native_Utils.eq(_p11.penetration, 0) || (_elm_lang$core$Native_Utils.cmp(velocityAlongNormal, 0) > 0)) { + var velocityAlongNormal = A2(_elm_community$linear_algebra$Math_Vector2$dot, relativeVelocity, _p4); + if (_elm_lang$core$Native_Utils.eq(_p3.penetration, 0) || (_elm_lang$core$Native_Utils.cmp(velocityAlongNormal, 0) > 0)) { return {ctor: '_Tuple2', _0: b0, _1: b1}; } else { - var impulse = _p12; + var impulse = _p4; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -10422,22 +10155,43 @@ }); var _user$project$Map$update = F2( function (msg, map) { - var _p13 = msg; - return _elm_lang$core$Native_Utils.update( - map, - {points: map.points + 10}); - }); -var _user$project$Map$initMovingBall = F3( - function (_p15, _p14, color) { - var _p16 = _p15; - var _p17 = _p14; - return { - color: color, - radius: 32, - pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p16._0, _p16._1), - velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p17._0, _p17._1) - }; - }); + var _p5 = msg; + switch (_p5.ctor) { + case 'Points': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {points: map.points + 10}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'NewLevel': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: _p5._0}), + _1: _elm_lang$core$Platform_Cmd$none + }; + default: + return { + ctor: '_Tuple2', + _0: map, + _1: _user$project$Audio$play(_p5._0) + }; + } + }); +var _user$project$Map$initMovingBall = F3( + function (_p7, _p6, color) { + var _p8 = _p7; + var _p9 = _p6; + return { + color: color, + radius: 32, + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p9._0, _p9._1) + }; + }); var _user$project$Map$Map = F4( function (a, b, c, d) { return {level: a, artGame: b, window: c, points: d}; @@ -10487,21 +10241,21 @@ function (a0, bodies, acc) { collideWith: while (true) { - var _p18 = bodies; - if (_p18.ctor === '[]') { + var _p10 = bodies; + if (_p10.ctor === '[]') { return {ctor: '::', _0: a0, _1: acc}; } else { - var _p20 = _p18._0; - var collisionResult = A2(_user$project$Map$collision, a0, _p20); - var _p19 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p20); - var a1 = _p19._0; - var b1 = _p19._1; - var _v10 = a1, - _v11 = _p18._1, - _v12 = {ctor: '::', _0: b1, _1: acc}; - a0 = _v10; - bodies = _v11; - acc = _v12; + var _p12 = _p10._0; + var collisionResult = A2(_user$project$Map$collision, a0, _p12); + var _p11 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p12); + var a1 = _p11._0; + var b1 = _p11._1; + var _v6 = a1, + _v7 = _p10._1, + _v8 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v6; + bodies = _v7; + acc = _v8; continue collideWith; } } @@ -10510,22 +10264,22 @@ function (acc, bodies) { collide: while (true) { - var _p21 = bodies; - if (_p21.ctor === '[]') { + var _p13 = bodies; + if (_p13.ctor === '[]') { return acc; } else { - var _p22 = A3( + var _p14 = A3( _user$project$Map$collideWith, - _p21._0, - _p21._1, + _p13._0, + _p13._1, {ctor: '[]'}); - if (_p22.ctor === '[]') { + if (_p14.ctor === '[]') { return {ctor: '[]'}; } else { - var _v15 = {ctor: '::', _0: _p22._0, _1: acc}, - _v16 = _p22._1; - acc = _v15; - bodies = _v16; + var _v11 = {ctor: '::', _0: _p14._0, _1: acc}, + _v12 = _p14._1; + acc = _v11; + bodies = _v12; continue collide; } } @@ -10538,38 +10292,38 @@ balls); }; var _user$project$Map$collisionBoxBubble = F2( - function (_p24, _p23) { - var _p25 = _p24; - var _p32 = _p25._1; - var _p26 = _p23; - var _p31 = _p26._1; - var _p27 = { + function (_p16, _p15) { + var _p17 = _p16; + var _p24 = _p17._1; + var _p18 = _p15; + var _p23 = _p18._1; + var _p19 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p32), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p32) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) }; - var boxX = _p27._0; - var boxY = _p27._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p26._0, _p25._0); - var _p28 = { + var boxX = _p19._0; + var boxY = _p19._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); + var _p20 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p28._0; - var dy = _p28._1; + var dx = _p20._0; + var dy = _p20._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p29 = { + var _p21 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p29._0; - var cy = _p29._1; - var _p30 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p21._0; + var cy = _p21._1; + var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -10588,17 +10342,17 @@ _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p30._0; - var inside = _p30._1; + var closest = _p22._0; + var inside = _p22._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p31 * _p31) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { return A2( _user$project$Map$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p31 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Map$CollisionResult, A2( @@ -10615,24 +10369,24 @@ function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); - var _p33 = { + var _p25 = { ctor: '_Tuple2', _0: _elm_lang$core$Basics$toFloat(window.width), _1: _elm_lang$core$Basics$toFloat(window.height) }; - var width = _p33._0; - var height = _p33._1; - var _p34 = { + var width = _p25._0; + var height = _p25._1; + var _p26 = { ctor: '_Tuple4', _0: _user$project$Map$initLeftWall(height), _1: A2(_user$project$Map$initRightWall, width, height), _2: _user$project$Map$initTopWall(width), _3: A2(_user$project$Map$initBottomWall, width, height) }; - var leftWall = _p34._0; - var rightWall = _p34._1; - var topWall = _p34._2; - var bottomWall = _p34._3; + var leftWall = _p26._0; + var rightWall = _p26._1; + var topWall = _p26._2; + var bottomWall = _p26._3; var leftCol = A2( _user$project$Map$collisionBoxBubble, { @@ -10691,379 +10445,781 @@ var _user$project$Map$ArtStore = function (a) { return {ctor: 'ArtStore', _0: a}; }; -var _user$project$Map$artStoreBuilding = F2( - function (_p35, newLevelMsg) { - var _p36 = _p35; - var _p38 = _p36._1; - var _p37 = _p36._0; +var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; +var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; +var _user$project$Map$Home = {ctor: 'Home'}; +var _user$project$Map$Purple = {ctor: 'Purple'}; +var _user$project$Map$Blue = {ctor: 'Blue'}; +var _user$project$Map$Green = {ctor: 'Green'}; +var _user$project$Map$Yellow = {ctor: 'Yellow'}; +var _user$project$Map$Orange = {ctor: 'Orange'}; +var _user$project$Map$Red = {ctor: 'Red'}; +var _user$project$Map$initArtGame = { + color: _user$project$Map$Yellow, + balls: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 0, _1: 0}, + {ctor: '_Tuple2', _0: 1, _1: 1}, + _user$project$Map$Red), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 100, _1: 70}, + {ctor: '_Tuple2', _0: -1, _1: 1}, + _user$project$Map$Yellow), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 70, _1: 170}, + {ctor: '_Tuple2', _0: -1, _1: -1}, + _user$project$Map$Green), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 200, _1: 170}, + {ctor: '_Tuple2', _0: 1, _1: -1}, + _user$project$Map$Blue), + _1: {ctor: '[]'} + } + } + } + } +}; +var _user$project$Map$init = F2( + function (window, level) { + return {level: level, artGame: _user$project$Map$initArtGame, window: window, points: 0}; + }); +var _user$project$Map$newLevel = F2( + function (level, map) { + var _p27 = level; + if ((_p27.ctor === 'ArtStore') && (_p27._0 === true)) { + return _elm_lang$core$Native_Utils.update( + map, + {artGame: _user$project$Map$initArtGame, level: level}); + } else { + return _elm_lang$core$Native_Utils.update( + map, + {level: level}); + } + }); +var _user$project$Map$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Map$groceryItem = F3( + function (_p28, image, audio) { + var _p29 = _p28; return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, + _elm_lang$html$Html$img, { ctor: '::', - _0: A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg( - _user$project$Map$ArtStore(false))), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - }), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}), + _0: _elm_lang$html$Html_Attributes$src(image), _1: { ctor: '::', - _0: A2( - _elm_lang$html$Html$div, + _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: { ctor: '::', _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p29._0), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37 + 7), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38 + 10), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - } + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p29._1), + 'px') + }, + _1: {ctor: '[]'} } } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('El Arte'), - _1: {ctor: '[]'} + } + } }), - _1: {ctor: '[]'} - } - }); - }); -var _user$project$Map$colorGame = F3( - function (newLevelMsg, playAudioMsg, artGame) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - A2( - _elm_lang$core$Basics_ops['++'], - { - ctor: '::', - _0: A3( - _user$project$Map$backButton, - {ctor: '_Tuple2', _0: 130, _1: 0}, - newLevelMsg, - _user$project$Map$ArtStore(false)), _1: { ctor: '::', - _0: _elm_lang$html$Html$text( - A2( - _elm_lang$core$Basics_ops['++'], - 'Color: ', - _elm_lang$core$Basics$toString(artGame.color))), + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$PlayAudio(audio)), _1: {ctor: '[]'} } - }, - A2(_elm_lang$core$List$map, _user$project$Map$colorBall, artGame.balls))); + } + }, + {ctor: '[]'}); }); -var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; -var _user$project$Map$storeBuilding = F2( - function (_p39, newLevelMsg) { - var _p40 = _p39; - var _p42 = _p40._1; - var _p41 = _p40._0; +var _user$project$Map$colorCircle = F3( + function (_p30, color, audio) { + var _p31 = _p30; return A2( _elm_lang$html$Html$div, - {ctor: '[]'}, { ctor: '::', - _0: A2( - _elm_lang$html$Html$img, + _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(_user$project$Map$GroceryStore)), + _0: {ctor: '_Tuple2', _0: 'background-color', _1: color}, _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p31._0), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p31._1), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p42), - 'px') - }, - _1: {ctor: '[]'} - } + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} } } } - }), - _1: {ctor: '[]'} + } + } } } - }, - {ctor: '[]'}), + }), _1: { ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$PlayAudio(audio)), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); + }); +var _user$project$Map$NewLevel = function (a) { + return {ctor: 'NewLevel', _0: a}; +}; +var _user$project$Map$house = function (_p32) { + var _p33 = _p32; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/home.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$Home)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p33._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p33._1), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); +}; +var _user$project$Map$storeBuilding = function (_p34) { + var _p35 = _p34; + var _p37 = _p35._1; + var _p36 = _p35._0; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$GroceryStore)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p36), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p37), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p36 + 7), + 'px') + }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'left', + _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41 + 7), + _elm_lang$core$Basics$toString(_p37 + 10), 'px') }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p42 + 10), - 'px') - }, - _1: {ctor: '[]'} - } + _1: {ctor: '[]'} } } } } } } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Los Comestibles'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); +}; +var _user$project$Map$artStoreBuilding = function (_p38) { + var _p39 = _p38; + var _p41 = _p39._1; + var _p40 = _p39._0; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel( + _user$project$Map$ArtStore(false))), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p40), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } }), _1: {ctor: '[]'} - }, - { + } + } + }, + {ctor: '[]'}), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p40 + 7), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41 + 10), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('El Arte'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); +}; +var _user$project$Map$hometown = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$house( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$storeBuilding( + {ctor: '_Tuple2', _0: 160, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$artStoreBuilding( + {ctor: '_Tuple2', _0: 320, _1: 0}), + _1: {ctor: '[]'} + } + } + }); +}; +var _user$project$Map$playButton = F2( + function (_p42, level) { + var _p43 = _p42; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { ctor: '::', - _0: _elm_lang$html$Html$text('Los Comestibles'), - _1: {ctor: '[]'} - }), + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p43._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p43._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Play!'), + _1: {ctor: '[]'} + }); + }); +var _user$project$Map$backButton = F2( + function (_p44, level) { + var _p45 = _p44; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p45._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p45._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Back'), + _1: {ctor: '[]'} + }); + }); +var _user$project$Map$colorGame = function (artGame) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: A2( + _user$project$Map$backButton, + {ctor: '_Tuple2', _0: 130, _1: 0}, + _user$project$Map$ArtStore(false)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Color: ', + _elm_lang$core$Basics$toString(artGame.color))), _1: {ctor: '[]'} } - }); - }); -var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; -var _user$project$Map$home = F3( - function (newLevelMsg, playAudioMsg, mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { + }, + A2(_elm_lang$core$List$map, _user$project$Map$colorBall, artGame.balls))); +}; +var _user$project$Map$exit = function (level) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { ctor: '::', - _0: A2(_user$project$Map$exit, newLevelMsg, _user$project$Map$HomeTown), + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), _1: { ctor: '::', - _0: A2( - _user$project$Bee$view, - _elm_lang$core$Maybe$Just(playAudioMsg), - _user$project$Bee$mama), + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), _1: { ctor: '::', - _0: A2( - _user$project$Bee$view, - _elm_lang$core$Maybe$Just(playAudioMsg), - _user$project$Bee$papa), + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), _1: {ctor: '[]'} } } - }); - }); -var _user$project$Map$groceryStore = F3( - function (newLevelMsg, playAudioMsg, mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { + } + }); +}; +var _user$project$Map$home = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$exit(_user$project$Map$HomeTown), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Map$PlayAudio), + _user$project$Bee$mama), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Map$PlayAudio), + _user$project$Bee$papa), + _1: {ctor: '[]'} + } + } + }); +}; +var _user$project$Map$groceryStore = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$exit(_user$project$Map$HomeTown), + _1: { ctor: '::', - _0: A2(_user$project$Map$exit, newLevelMsg, _user$project$Map$HomeTown), + _0: A2( + _user$project$Map$playButton, + {ctor: '_Tuple2', _0: 192, _1: 10}, + _user$project$Map$GroceryStore), _1: { ctor: '::', _0: A3( - _user$project$Map$playButton, - {ctor: '_Tuple2', _0: 192, _1: 10}, - newLevelMsg, - _user$project$Map$GroceryStore), + _user$project$Map$groceryItem, + {ctor: '_Tuple2', _0: 64, _1: 96}, + 'imgs/banana.png', + 'audio/el_platano.mp3'), _1: { ctor: '::', - _0: A4( + _0: A3( _user$project$Map$groceryItem, - playAudioMsg, - {ctor: '_Tuple2', _0: 64, _1: 96}, - 'imgs/banana.png', - 'audio/el_platano.mp3'), - _1: { - ctor: '::', - _0: A4( - _user$project$Map$groceryItem, - playAudioMsg, - {ctor: '_Tuple2', _0: 192, _1: 96}, - 'imgs/milk.png', - 'audio/leche.mp3'), - _1: {ctor: '[]'} - } + {ctor: '_Tuple2', _0: 192, _1: 96}, + 'imgs/milk.png', + 'audio/leche.mp3'), + _1: {ctor: '[]'} } } - }); - }); -var _user$project$Map$artStore = F4( - function (play, newLevelMsg, playAudioMsg, map) { - var _p43 = play; - if (_p43 === true) { - return A3(_user$project$Map$colorGame, newLevelMsg, playAudioMsg, map.artGame); + } + }); +}; +var _user$project$Map$artStore = F2( + function (play, map) { + var _p46 = play; + if (_p46 === true) { + return _user$project$Map$colorGame(map.artGame); } else { var showCircle = F2( - function (n, _p44) { - var _p45 = _p44; - return A4( + function (n, _p47) { + var _p48 = _p47; + return A3( _user$project$Map$colorCircle, - playAudioMsg, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p45._0, - _p45._1); + _p48._0, + _p48._1); }); return A2( _elm_lang$html$Html$div, {ctor: '[]'}, { ctor: '::', - _0: A2(_user$project$Map$exit, newLevelMsg, _user$project$Map$HomeTown), + _0: _user$project$Map$exit(_user$project$Map$HomeTown), _1: { ctor: '::', - _0: A3( + _0: A2( _user$project$Map$playButton, {ctor: '_Tuple2', _0: 192, _1: 10}, - newLevelMsg, _user$project$Map$ArtStore(true)), _1: A2( _elm_lang$core$List$indexedMap, @@ -11093,170 +11249,21 @@ }); } }); -var _user$project$Map$Home = {ctor: 'Home'}; -var _user$project$Map$house = F2( - function (_p46, newLevelMsg) { - var _p47 = _p46; - return A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/home.png'), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(_user$project$Map$Home)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p47._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p47._1), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - }), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}); - }); -var _user$project$Map$hometown = F3( - function (newLevelMsg, playAudioMsg, mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _user$project$Map$house, - {ctor: '_Tuple2', _0: 0, _1: 0}, - newLevelMsg), - _1: { - ctor: '::', - _0: A2( - _user$project$Map$storeBuilding, - {ctor: '_Tuple2', _0: 160, _1: 0}, - newLevelMsg), - _1: { - ctor: '::', - _0: A2( - _user$project$Map$artStoreBuilding, - {ctor: '_Tuple2', _0: 320, _1: 0}, - newLevelMsg), - _1: {ctor: '[]'} - } - } - }); - }); -var _user$project$Map$view = F4( - function (newLevelMsg, playAudioMsg, mapSize, map) { - var _p48 = map.level; - switch (_p48.ctor) { +var _user$project$Map$view = F2( + function (mapSize, map) { + var _p49 = map.level; + switch (_p49.ctor) { case 'Home': - return A3(_user$project$Map$home, newLevelMsg, playAudioMsg, mapSize); + return _user$project$Map$home(mapSize); case 'HomeTown': - return A3(_user$project$Map$hometown, newLevelMsg, playAudioMsg, mapSize); + return _user$project$Map$hometown(mapSize); case 'GroceryStore': - return A3(_user$project$Map$groceryStore, newLevelMsg, playAudioMsg, mapSize); + return _user$project$Map$groceryStore(mapSize); default: - return A4(_user$project$Map$artStore, _p48._0, newLevelMsg, playAudioMsg, map); - } - }); -var _user$project$Map$Purple = {ctor: 'Purple'}; -var _user$project$Map$Blue = {ctor: 'Blue'}; -var _user$project$Map$Green = {ctor: 'Green'}; -var _user$project$Map$Yellow = {ctor: 'Yellow'}; -var _user$project$Map$Orange = {ctor: 'Orange'}; -var _user$project$Map$Red = {ctor: 'Red'}; -var _user$project$Map$initArtGame = { - color: _user$project$Map$Yellow, - balls: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 0, _1: 0}, - {ctor: '_Tuple2', _0: 1, _1: 1}, - _user$project$Map$Red), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 100, _1: 70}, - {ctor: '_Tuple2', _0: -1, _1: 1}, - _user$project$Map$Yellow), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 70, _1: 170}, - {ctor: '_Tuple2', _0: -1, _1: -1}, - _user$project$Map$Green), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 200, _1: 170}, - {ctor: '_Tuple2', _0: 1, _1: -1}, - _user$project$Map$Blue), - _1: {ctor: '[]'} - } - } - } - } -}; -var _user$project$Map$init = F2( - function (window, level) { - return {level: level, artGame: _user$project$Map$initArtGame, window: window, points: 0}; - }); -var _user$project$Map$newLevel = F2( - function (level, map) { - var _p49 = level; - if ((_p49.ctor === 'ArtStore') && (_p49._0 === true)) { - return _elm_lang$core$Native_Utils.update( - map, - {artGame: _user$project$Map$initArtGame, level: level}); - } else { - return _elm_lang$core$Native_Utils.update( - map, - {level: level}); + return A2(_user$project$Map$artStore, _p49._0, map); } }); var _user$project$Map$Points = {ctor: 'Points'}; -var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( - 'playAudio', - function (v) { - return v; - }); var _user$project$Main$Model = F6( function (a, b, c, d, e, f) { return {user: a, mouse: b, time: c, window: d, map: e, pause: f}; @@ -11276,6 +11283,25 @@ var _user$project$Main$Down = function (a) { return {ctor: 'Down', _0: a}; }; +var _user$project$Main$Pause = {ctor: 'Pause'}; +var _user$project$Main$pauseButton = A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('pause'), + _1: {ctor: '[]'} + }); +var _user$project$Main$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Main$MapMsg = function (a) { + return {ctor: 'MapMsg', _0: a}; +}; var _user$project$Main$update = F2( function (msg, model) { var _p0 = msg; @@ -11300,12 +11326,6 @@ }), _1: _elm_lang$core$Platform_Cmd$none }; - case 'PlayAudio': - return { - ctor: '_Tuple2', - _0: model, - _1: _user$project$Main$playAudio(_p0._0) - }; case 'MouseUp': return { ctor: '_Tuple2', @@ -11356,54 +11376,26 @@ }), _1: _elm_lang$core$Platform_Cmd$none }; - case 'NewLevel': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - model, - { - map: A2(_user$project$Map$newLevel, _p0._0, model.map) - }), - _1: _elm_lang$core$Platform_Cmd$none - }; default: + var _p6 = A2(_user$project$Map$update, _p0._0, model.map); + var newMap = _p6._0; + var cmd = _p6._1; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, - { - map: A2(_user$project$Map$update, _p0._0, model.map) - }), - _1: _elm_lang$core$Platform_Cmd$none + {map: newMap}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) }; } }); -var _user$project$Main$Pause = {ctor: 'Pause'}; -var _user$project$Main$pauseButton = A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('pause'), - _1: {ctor: '[]'} +var _user$project$Main$mapView = F2( + function (window, map) { + return A2( + _elm_lang$html$Html$map, + _user$project$Main$MapMsg, + A2(_user$project$Map$view, window, map)); }); -var _user$project$Main$PlayAudio = function (a) { - return {ctor: 'PlayAudio', _0: a}; -}; -var _user$project$Main$Tick = function (a) { - return {ctor: 'Tick', _0: a}; -}; -var _user$project$Main$MapMsg = function (a) { - return {ctor: 'MapMsg', _0: a}; -}; -var _user$project$Main$NewLevel = function (a) { - return {ctor: 'NewLevel', _0: a}; -}; -var _user$project$Main$mapView = A2(_user$project$Map$view, _user$project$Main$NewLevel, _user$project$Main$PlayAudio); var _user$project$Main$view = function (model) { return A2( _elm_lang$html$Html$div, @@ -11447,8 +11439,8 @@ if (model.pause) { return _elm_lang$core$Platform_Sub$none; } else { - var _p6 = model.mouse; - if (_p6.ctor === 'Up') { + var _p7 = model.mouse; + if (_p7.ctor === 'Up') { return _elm_lang$core$Platform_Sub$batch( { ctor: '::', From dbe9af5709fb8b6754d6f68d11f41b5d7d1c2494 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Wed, 24 May 2017 20:25:33 -0700 Subject: [PATCH 14/33] remove color on click --- Main.elm | 3 +- Map.elm | 80 +- elm.js | 10449 ++++++++++++++++++++++++---------------------- index.html | 11544 +-------------------------------------------------- 4 files changed, 5648 insertions(+), 16428 deletions(-) diff --git a/Main.elm b/Main.elm index d51e48d..c813133 100644 --- a/Main.elm +++ b/Main.elm @@ -124,7 +124,8 @@ view model = ] [ pauseButton , mapView model.window model.map - , Bee.view Nothing model.user + + -- , Bee.view Nothing model.user ] diff --git a/Map.elm b/Map.elm index 055c74d..d845829 100644 --- a/Map.elm +++ b/Map.elm @@ -3,7 +3,7 @@ module Map exposing (..) import Audio import Bee exposing (Bee) import Html exposing (Html, button, div, img, text) -import Html.Attributes exposing (src, style) +import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick) import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Time exposing (Time) @@ -57,21 +57,14 @@ type alias ArtGame = type alias MovingBall = - { color : Color + { id : Int + , color : Color , pos : Vec2 , radius : Float , velocity : Vec2 } -type alias NewLevel msg = - Level -> msg - - -type alias PlayAudio msg = - String -> msg - - newLevel : Level -> Map -> Map newLevel level map = case level of @@ -86,20 +79,21 @@ initArtGame : ArtGame initArtGame = { color = Yellow , balls = - [ initMovingBall ( 0, 0 ) ( 1, 1 ) Red - , initMovingBall ( 100, 70 ) ( -1, 1 ) Yellow - , initMovingBall ( 70, 170 ) ( -1, -1 ) Green - , initMovingBall ( 200, 170 ) ( 1, -1 ) Blue + [ initMovingBall 1 ( 0, 0 ) ( 1, 1 ) Red + , initMovingBall 2 ( 100, 70 ) ( -1, 1 ) Yellow + , initMovingBall 3 ( 70, 170 ) ( -1, -1 ) Green + , initMovingBall 4 ( 200, 170 ) ( 1, -1 ) Blue ] } -initMovingBall : ( Float, Float ) -> ( Float, Float ) -> Color -> MovingBall -initMovingBall ( x, y ) ( vx, vy ) color = - { color = color +initMovingBall : Int -> ( Float, Float ) -> ( Float, Float ) -> Color -> MovingBall +initMovingBall id ( x, y ) ( vx, vy ) color = + { id = id + , color = color , radius = 32 , pos = vec2 x y - , velocity = vec2 vx vy + , velocity = vec2 (vx / 10) (vy / 10) } @@ -108,23 +102,43 @@ initMovingBall ( x, y ) ( vx, vy ) color = type Msg - = Points - | NewLevel Level + = NewLevel Level | PlayAudio String + | ColorClicked Int Color Color update : Msg -> Map -> ( Map, Cmd Msg ) update msg map = case msg of - Points -> - ( { map | points = map.points + 10 }, Cmd.none ) - NewLevel level -> ( { map | level = level }, Cmd.none ) PlayAudio file -> ( map, Audio.play file ) + ColorClicked id gameColor color -> + if gameColor == Debug.log "color clicked" color then + let + artGame = + map.artGame + + newArtGame = + { artGame | balls = artGame.balls |> removeBall id } + in + ( { map + | points = map.points + 10 + , artGame = newArtGame + } + , Cmd.none + ) + else + ( map, Cmd.none ) + + +removeBall : Int -> List MovingBall -> List MovingBall +removeBall id balls = + List.filter (\ball -> ball.id /= id) balls + resize : Window.Size -> Map -> Map resize window map = @@ -560,7 +574,7 @@ artStore : PlayGame -> Map -> Html Msg artStore play map = case play of True -> - colorGame map.artGame + colorGame map.points map.artGame False -> let @@ -570,6 +584,7 @@ artStore play map = div [] <| exit HomeTown :: playButton ( 192, 10 ) (ArtStore True) + :: points map.points :: List.indexedMap showCircle [ ( "black", "audio/negro.m4a" ) , ( "white", "audio/blanco.m4a" ) @@ -579,6 +594,11 @@ artStore play map = ] +points : Int -> Html msg +points count = + Html.div [ class "points" ] [ text (toString count) ] + + colorCircle : ( Int, Int ) -> String -> String -> Html Msg colorCircle ( x, y ) color audio = div @@ -597,18 +617,19 @@ colorCircle ( x, y ) color audio = [] -colorGame : ArtGame -> Html Msg -colorGame artGame = +colorGame : Int -> ArtGame -> Html Msg +colorGame pointCount artGame = div [] ([ backButton ( 130, 0 ) (ArtStore False) , text ("Color: " ++ toString artGame.color) + , points pointCount ] - ++ List.map colorBall artGame.balls + ++ List.map (colorBall artGame.color) artGame.balls ) -colorBall : MovingBall -> Html msg -colorBall ball = +colorBall : Color -> MovingBall -> Html Msg +colorBall gameColor ball = div [ style [ ( "border-radius", "50%" ) @@ -620,6 +641,7 @@ colorBall ball = , ( "width", toString (ball.radius * 2) ++ "px" ) , ( "height", toString (ball.radius * 2) ++ "px" ) ] + , onClick (ColorClicked ball.id gameColor ball.color) ] [] diff --git a/elm.js b/elm.js index 20975ad..aec3114 100644 --- a/elm.js +++ b/elm.js @@ -135,2897 +135,2180 @@ function A9(fun, a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i); } -//import Native.List // +//import Native.Utils // -var _elm_lang$core$Native_Array = function() { +var _elm_lang$core$Native_Basics = function() { -// 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 +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)); -// 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; + 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; +} -// An empty array. -var empty = { - ctor: '_Array', - height: 0, - table: [] -}; +function min(a, b) +{ + return _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b; +} +function max(a, b) +{ + return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b; +} +function clamp(lo, hi, n) +{ + return _elm_lang$core$Native_Utils.cmp(n, lo) < 0 + ? lo + : _elm_lang$core$Native_Utils.cmp(n, hi) > 0 + ? hi + : n; +} +var ord = ['LT', 'EQ', 'GT']; -function get(i, array) +function compare(x, y) { - 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); + return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] }; } +function xor(a, b) +{ + return a !== b; +} +function not(b) +{ + return !b; +} +function isInfinite(n) +{ + return n === Infinity || n === -Infinity; +} -function unsafeGet(i, array) +function truncate(n) { - 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]; + 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 _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); +} +function toPolar(point) +{ + var x = point._0; + var y = point._1; + return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x)); +} -// Sets the value at the index i. Only the nodes leading to i will get -// copied and updated. -function set(i, item, array) +return { + 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: F2(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 +}; + +}(); +//import // + +var _elm_lang$core$Native_Utils = function() { + +// COMPARISONS + +function eq(x, y) { - if (i < 0 || length(array) <= i) + var stack = []; + var isEqual = eqHelp(x, y, 0, stack); + var pair; + while (isEqual && (pair = stack.pop())) { - return array; + isEqual = eqHelp(pair.x, pair.y, 0, stack); } - return unsafeSet(i, item, array); + return isEqual; } -function unsafeSet(i, item, array) +function eqHelp(x, y, depth, stack) { - array = nodeCopy(array); + if (depth > 100) + { + stack.push({ x: x, y: y }); + return true; + } - if (array.height === 0) + if (x === y) { - array.table[i] = item; + return true; } - else + + if (typeof x !== 'object') { - var slot = getSlot(i, array); - if (slot > 0) + if (typeof x === 'function') { - i -= array.lengths[slot - 1]; + throw new Error( + 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.' + + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==' + + ' which describes why it is this way and what the better version will look like.' + ); } - array.table[slot] = unsafeSet(i, item, array.table[slot]); + return false; } - return array; -} + if (x === null || y === null) + { + return false + } -function initialize(len, f) -{ - if (len <= 0) + if (x instanceof Date) { - return empty; + return x.getTime() === y.getTime(); } - 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) + if (!('ctor' in x)) { - var table = new Array((to - from) % (M + 1)); - for (var i = 0; i < table.length; i++) + for (var key in x) { - table[i] = f(from + i); + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } } - return { - ctor: '_Array', - height: 0, - table: table - }; + return true; } - 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++) + // convert Dicts and Sets to lists + if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin') { - 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.ctor === '[]') + x = _elm_lang$core$Dict$toList(x); + y = _elm_lang$core$Dict$toList(y); + } + if (x.ctor === 'Set_elm_builtin') { - return empty; + x = _elm_lang$core$Set$toList(x); + y = _elm_lang$core$Set$toList(y); } - // Allocate M sized blocks (table) and write list elements to it. - var table = new Array(M); - var nodes = []; - var i = 0; - - while (list.ctor !== '[]') + // check if lists are equal without recursion + if (x.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 a = x; + var b = y; + while (a.ctor === '::' && b.ctor === '::') { - var leaf = { - ctor: '_Array', - height: 0, - table: table - }; - fromListPush(leaf, nodes); - table = new Array(M); - i = 0; + if (!eqHelp(a._0, b._0, depth + 1, stack)) + { + return false; + } + a = a._1; + b = b._1; } + return a.ctor === b.ctor; } - // 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++) + // check if Arrays are equal + if (x.ctor === '_Array') { - if (nodes[h].table.length > 0) + var xs = _elm_lang$core$Native_Array.toJSArray(x); + var ys = _elm_lang$core$Native_Array.toJSArray(y); + if (xs.length !== ys.length) { - fromListPush(nodes[h], nodes); + return false; } + for (var i = 0; i < xs.length; i++) + { + if (!eqHelp(xs[i], ys[i], depth + 1, stack)) + { + return false; + } + } + return true; } - var head = nodes[nodes.length - 1]; - if (head.height > 0 && head.table.length === 1) + if (!eqHelp(x.ctor, y.ctor, depth + 1, stack)) { - return head.table[0]; + return false; } - else + + for (var key in x) { - return head; + if (!eqHelp(x[key], y[key], depth + 1, stack)) + { + return false; + } } + return true; } -// Push a node into a higher node as a child. -function fromListPush(toPush, nodes) -{ - var h = toPush.height; +// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on +// the particular integer values assigned to LT, EQ, and GT. - // Maybe the node on this height does not exist. - if (nodes.length === h) +var LT = -1, EQ = 0, GT = 1; + +function cmp(x, y) +{ + if (typeof x !== 'object') { - var node = { - ctor: '_Array', - height: h + 1, - table: [], - lengths: [] - }; - nodes.push(node); + return x === y ? EQ : x < y ? LT : GT; } - nodes[h].table.push(toPush); - var len = length(toPush); - if (nodes[h].lengths.length > 0) + if (x instanceof String) { - len += nodes[h].lengths[nodes[h].lengths.length - 1]; + var a = x.valueOf(); + var b = y.valueOf(); + return a === b ? EQ : a < b ? LT : GT; } - nodes[h].lengths.push(len); - if (nodes[h].table.length === M) + if (x.ctor === '::' || x.ctor === '[]') { - fromListPush(nodes[h], nodes); - nodes[h] = { - ctor: '_Array', - height: h + 1, - table: [], - lengths: [] - }; + while (x.ctor === '::' && y.ctor === '::') + { + var ord = cmp(x._0, y._0); + if (ord !== EQ) + { + return ord; + } + x = x._1; + y = y._1; + } + return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT; } -} -// Pushes an item via push_ to the bottom right of a tree. -function push(item, a) -{ - var pushed = push_(item, a); - if (pushed !== null) + if (x.ctor.slice(0, 6) === '_Tuple') { - return pushed; + var ord; + 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; } - var newTree = create(item, a.height); - return siblise(a, newTree); + throw new Error( + 'Comparison error: comparison is only defined on ints, ' + + 'floats, times, chars, strings, lists of comparable values, ' + + 'and tuples of comparable values.' + ); } -// 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)); +// COMMON VALUES - // 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; - } +var Tuple0 = { + ctor: '_Tuple0' +}; - // 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; - } +function Tuple2(x, y) +{ + return { + ctor: '_Tuple2', + _0: x, + _1: y + }; } -// Converts an array into a list of elements. -function toList(a) +function chr(c) { - return toList_(_elm_lang$core$Native_List.Nil, a); + return new String(c); } -function toList_(list, a) + +// GUID + +var count = 0; +function guid(_) { - for (var i = a.table.length - 1; i >= 0; i--) - { - list = - a.height === 0 - ? _elm_lang$core$Native_List.Cons(a.table[i], list) - : toList_(list, a.table[i]); - } - return list; + return count++; } -// 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) + +// RECORDS + +function update(oldRecord, updatedFields) +{ + var newRecord = {}; + + for (var key in oldRecord) { - newA.lengths = a.lengths; + newRecord[key] = oldRecord[key]; } - for (var i = 0; i < a.table.length; i++) + + for (var key in updatedFields) { - newA.table[i] = - a.height === 0 - ? f(a.table[i]) - : map(f, a.table[i]); + newRecord[key] = updatedFields[key]; } - return newA; + + return newRecord; } -// Maps a function over the elements with their index as first argument. -function indexedMap(f, a) + +//// LIST STUFF //// + +var Nil = { ctor: '[]' }; + +function Cons(hd, tl) { - return indexedMap_(f, a, 0); + return { + ctor: '::', + _0: hd, + _1: tl + }; } -function indexedMap_(f, a, from) +function append(xs, ys) { - 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++) + // append Strings + if (typeof xs === 'string') { - newA.table[i] = - a.height === 0 - ? A2(f, from + i, a.table[i]) - : indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]); + return xs + ys; } - return newA; -} -function foldl(f, b, a) -{ - if (a.height === 0) + // append Lists + if (xs.ctor === '[]') { - for (var i = 0; i < a.table.length; i++) - { - b = A2(f, a.table[i], b); - } + return ys; } - else + var root = Cons(xs._0, Nil); + var curr = root; + xs = xs._1; + while (xs.ctor !== '[]') { - for (var i = 0; i < a.table.length; i++) - { - b = foldl(f, b, a.table[i]); - } + curr._1 = Cons(xs._0, Nil); + xs = xs._1; + curr = curr._1; } - return b; + curr._1 = ys; + return root; } -function foldr(f, b, a) + +// CRASHES + +function crash(moduleName, region) { - 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; + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; } -// TODO: currently, it slices the right, then the left. This can be -// optimized. -function slice(from, to, a) +function crashCase(moduleName, region, value) { - if (from < 0) - { - from += length(a); - } - if (to < 0) - { - to += length(a); - } - return sliceLeft(from, sliceRight(to, a)); + return function(message) { + throw new Error( + 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n' + + 'This was caused by the `case` expression ' + regionToString(region) + '.\n' + + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n' + + 'The message provided by the code author is:\n\n ' + + message + ); + }; } -function sliceRight(to, a) +function regionToString(region) { - if (to === length(a)) + if (region.start.line == region.end.line) { - return a; + return 'on line ' + region.start.line; } + return 'between lines ' + region.start.line + ' and ' + region.end.line; +} - // 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]); +// TO STRING - // Maybe the a node is not even needed, as sliced contains the whole slice. - if (right === 0) +function toString(v) +{ + var type = typeof v; + if (type === 'function') { - return sliced; + return ''; } - // 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) + if (type === 'boolean') { - newA.table[right] = sliced; - newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0); + return v ? 'True' : 'False'; } - return newA; -} -function sliceLeft(from, a) -{ - if (from === 0) + if (type === 'number') { - return a; + return v + ''; } - // Handle leaf level. - if (a.height === 0) + if (v instanceof String) { - var newA = { ctor:'_Array', height:0 }; - newA.table = a.table.slice(from, a.table.length + 1); - return newA; + return '\'' + addSlashes(v, true) + '\''; } - // 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) + if (type === 'string') { - return sliced; + return '"' + addSlashes(v, false) + '"'; } - // 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++) + if (v === null) { - len += length(newA.table[i]); - newA.lengths[i] = len; + return 'null'; } - return newA; -} - -// Appends two trees. -function append(a,b) -{ - if (a.table.length === 0) - { - return b; - } - if (b.table.length === 0) + if (type === 'object' && 'ctor' in v) { - return a; - } + var ctorStarter = v.ctor.substring(0, 5); - var c = append_(a, b); + if (ctorStarter === '_Tupl') + { + var output = []; + for (var k in v) + { + if (k === 'ctor') continue; + output.push(toString(v[k])); + } + return '(' + output.join(',') + ')'; + } - // Check if both nodes can be crunshed together. - if (c[0].table.length + c[1].table.length <= M) - { - if (c[0].table.length === 0) + if (ctorStarter === '_Task') { - return c[1]; + return '' } - if (c[1].table.length === 0) + + if (v.ctor === '_Array') { - return c[0]; + var list = _elm_lang$core$Array$toList(v); + return 'Array.fromList ' + toString(list); } - // Adjust .table and .lengths - c[0].table = c[0].table.concat(c[1].table); - if (c[0].height > 0) + if (v.ctor === '') { - 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 ''; } - return c[0]; - } - - if (c[0].height > 0) - { - var toRemove = calcToRemove(a, b); - if (toRemove > E) + if (v.ctor === '_Process') { - c = shuffle(c[0], c[1], toRemove); + return ''; } - } - 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) + if (v.ctor === '::') { - a = nodeCopy(a); - b = nodeCopy(b); - var appended = append_(botRight(a), botLeft(b)); - - insertRight(a, appended[1]); - insertLeft(b, appended[0]); + var output = '[' + toString(v._0); + v = v._1; + while (v.ctor === '::') + { + output += ',' + toString(v._0); + v = v._1; + } + return output + ']'; } - 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); + if (v.ctor === '[]') + { + return '[]'; } - else + + if (v.ctor === 'Set_elm_builtin') { - b = nodeCopy(b); - var appended = append_(a, botLeft(b)); + return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v)); + } - 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); + if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin') + { + return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v)); } - } - // Check if balancing is needed and return based on that. - if (a.table.length === 0 || b.table.length === 0) - { - return [a, b]; + var output = ''; + for (var i in v) + { + if (i === 'ctor') continue; + var str = toString(v[i]); + var c0 = str[0]; + var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; + output += ' ' + (parenless ? str : '(' + str + ')'); + } + return v.ctor + output; } - var toRemove = calcToRemove(a, b); - if (toRemove <= E) + if (type === 'object') { - 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; -} + if (v instanceof Date) + { + return '<' + v.toString() + '>'; + } -function insertLeft(parent, node) -{ - if (node.table.length > 0) - { - parent.table[0] = node; - parent.lengths[0] = length(node); + if (v.elm_web_socket) + { + return ''; + } - var len = length(parent.table[0]); - for (var i = 1; i < parent.lengths.length; i++) + var output = []; + for (var k in v) { - len += length(parent.table[i]); - parent.lengths[i] = len; + output.push(k + ' = ' + toString(v[k])); } - } - else - { - parent.table.shift(); - for (var i = 1; i < parent.lengths.length; i++) + if (output.length === 0) { - parent.lengths[i] = parent.lengths[i] - parent.lengths[0]; + return '{}'; } - 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; + return '{ ' + output.join(', ') + ' }'; } - 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]; + return ''; } -function set2(a, b, index, value) +function addSlashes(str, isChar) { - if (index < a.length) + 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) { - a[index] = value; + return s.replace(/\'/g, '\\\''); } else { - b[index - a.length] = value; + return s.replace(/\"/g, '\\"'); } } -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); +return { + eq: eq, + cmp: cmp, + Tuple0: Tuple0, + Tuple2: Tuple2, + chr: chr, + update: update, + guid: guid, - set2(a.lengths, b.lengths, index, l + length(slot)); -} + append: F2(append), -// 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; -} + crash: crash, + crashCase: crashCase, -// 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)); + toString: toString +}; - // 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++; +}(); +var _elm_lang$core$Basics$never = function (_p0) { + never: + while (true) { + var _p1 = _p0; + var _v1 = _p1._0; + _p0 = _v1; + continue never; } +}; +var _elm_lang$core$Basics$uncurry = F2( + function (f, _p2) { + var _p3 = _p2; + return A2(f, _p3._0, _p3._1); + }); +var _elm_lang$core$Basics$curry = F3( + function (f, a, b) { + return f( + {ctor: '_Tuple2', _0: a, _1: b}); + }); +var _elm_lang$core$Basics$flip = F3( + function (f, b, a) { + return A2(f, a, b); + }); +var _elm_lang$core$Basics$always = F2( + function (a, _p4) { + return a; + }); +var _elm_lang$core$Basics$identity = function (x) { + return x; +}; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<|'] = F2( + function (f, x) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['|>'] = F2( + function (x, f) { + return f(x); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>>'] = F3( + function (f, g, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<<'] = F3( + function (g, f, x) { + return g( + f(x)); + }); +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append; +var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString; +var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite; +var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN; +var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat; +var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling; +var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor; +var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate; +var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round; +var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not; +var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and; +var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max; +var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min; +var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq; +var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e; +var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi; +var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp; +var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase; +var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs; +var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate; +var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt; +var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2; +var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan; +var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin; +var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos; +var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan; +var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin; +var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod; +var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub; +var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; +_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add; +var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar; +var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar; +var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns; +var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees; +var _elm_lang$core$Basics$radians = function (t) { + return t; +}; +var _elm_lang$core$Basics$GT = {ctor: 'GT'}; +var _elm_lang$core$Basics$EQ = {ctor: 'EQ'}; +var _elm_lang$core$Basics$LT = {ctor: 'LT'}; +var _elm_lang$core$Basics$JustOneMore = function (a) { + return {ctor: 'JustOneMore', _0: a}; +}; - // 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]; -} +//import Native.Utils // -// 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; -} +var _elm_lang$core$Native_Debug = function() { -// Returns how many items are in the tree. -function length(array) +function log(tag, value) { - if (array.height === 0) + var msg = tag + ': ' + _elm_lang$core$Native_Utils.toString(value); + var process = process || {}; + if (process.stdout) { - return array.table.length; + process.stdout.write(msg); } 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++; + console.log(msg); } - return slot; + return value; } -// Recursively creates a tree with a given height containing -// only the given item. -function create(item, h) +function crash(message) { - if (h === 0) - { - return { - ctor: '_Array', - height: 0, - table: [item] - }; - } - return { - ctor: '_Array', - height: h, - table: [create(item, h - 1)], - lengths: [1] - }; + throw new Error(message); } -// 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)] - }; -} +return { + crash: crash, + log: F2(log) +}; -// 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)] - }; -} +}(); +var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; +var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; -function toJSArray(a) -{ - var jsArray = new Array(length(a)); - toJSArray_(jsArray, 0, a); - return jsArray; +var _elm_lang$core$Maybe$withDefault = F2( + function ($default, maybe) { + var _p0 = maybe; + if (_p0.ctor === 'Just') { + return _p0._0; + } else { + return $default; + } + }); +var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'}; +var _elm_lang$core$Maybe$andThen = F2( + function (callback, maybeValue) { + var _p1 = maybeValue; + if (_p1.ctor === 'Just') { + return callback(_p1._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$Just = function (a) { + return {ctor: 'Just', _0: a}; +}; +var _elm_lang$core$Maybe$map = F2( + function (f, maybe) { + var _p2 = maybe; + if (_p2.ctor === 'Just') { + return _elm_lang$core$Maybe$Just( + f(_p2._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map2 = F3( + function (func, ma, mb) { + var _p3 = {ctor: '_Tuple2', _0: ma, _1: mb}; + if (((_p3.ctor === '_Tuple2') && (_p3._0.ctor === 'Just')) && (_p3._1.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A2(func, _p3._0._0, _p3._1._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map3 = F4( + function (func, ma, mb, mc) { + var _p4 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc}; + if ((((_p4.ctor === '_Tuple3') && (_p4._0.ctor === 'Just')) && (_p4._1.ctor === 'Just')) && (_p4._2.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A3(func, _p4._0._0, _p4._1._0, _p4._2._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map4 = F5( + function (func, ma, mb, mc, md) { + var _p5 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md}; + if (((((_p5.ctor === '_Tuple4') && (_p5._0.ctor === 'Just')) && (_p5._1.ctor === 'Just')) && (_p5._2.ctor === 'Just')) && (_p5._3.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A4(func, _p5._0._0, _p5._1._0, _p5._2._0, _p5._3._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_lang$core$Maybe$map5 = F6( + function (func, ma, mb, mc, md, me) { + var _p6 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me}; + if ((((((_p6.ctor === '_Tuple5') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) && (_p6._2.ctor === 'Just')) && (_p6._3.ctor === 'Just')) && (_p6._4.ctor === 'Just')) { + return _elm_lang$core$Maybe$Just( + A5(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0, _p6._4._0)); + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); + +//import Native.Utils // + +var _elm_lang$core$Native_List = function() { + +var Nil = { ctor: '[]' }; + +function Cons(hd, tl) +{ + return { ctor: '::', _0: hd, _1: tl }; } -function toJSArray_(jsArray, i, a) +function fromArray(arr) { - for (var t = 0; t < a.table.length; t++) + var out = Nil; + for (var i = arr.length; i--; ) { - 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]); - } + out = Cons(arr[i], out); } + return out; } -function fromJSArray(jsArray) +function toArray(xs) { - if (jsArray.length === 0) + var out = []; + while (xs.ctor !== '[]') { - return empty; + out.push(xs._0); + xs = xs._1; } - var h = Math.floor(Math.log(jsArray.length) / Math.log(M)); - return fromJSArray_(jsArray, h, 0, jsArray.length); + return out; } -function fromJSArray_(jsArray, h, from, to) +function foldr(f, b, xs) { - if (h === 0) + var arr = toArray(xs); + var acc = b; + for (var i = arr.length; i--; ) { - return { - ctor: '_Array', - height: 0, - table: jsArray.slice(from, to) - }; + acc = A2(f, arr[i], acc); } + return acc; +} - 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++) +function map2(f, xs, ys) +{ + var arr = []; + while (xs.ctor !== '[]' && ys.ctor !== '[]') { - 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); + arr.push(A2(f, xs._0, ys._0)); + xs = xs._1; + ys = ys._1; } - return { - ctor: '_Array', - height: h, - table: table, - lengths: lengths - }; + return fromArray(arr); } -return { - 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 -}; - -}(); -//import Native.Utils // - -var _elm_lang$core$Native_Basics = function() { - -function div(a, b) -{ - return (a / b) | 0; -} -function rem(a, b) -{ - return a % b; -} -function mod(a, b) +function map3(f, xs, ys, zs) { - if (b === 0) + var arr = []; + while (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]') { - throw new Error('Cannot perform mod 0. Division by zero error.'); + arr.push(A3(f, xs._0, ys._0, zs._0)); + xs = xs._1; + ys = ys._1; + zs = zs._1; } - 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; + return fromArray(arr); } -function abs(n) + +function map4(f, ws, xs, ys, zs) { - return n < 0 ? -n : n; + 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 min(a, b) +function map5(f, vs, ws, xs, ys, zs) { - return _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b; + 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 max(a, b) + +function sortBy(f, xs) { - return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b; + return fromArray(toArray(xs).sort(function(a, b) { + return _elm_lang$core$Native_Utils.cmp(f(a), f(b)); + })); } -function clamp(lo, hi, n) + +function sortWith(f, xs) { - return _elm_lang$core$Native_Utils.cmp(n, lo) < 0 - ? lo - : _elm_lang$core$Native_Utils.cmp(n, hi) > 0 - ? hi - : n; -} - -var ord = ['LT', 'EQ', 'GT']; - -function compare(x, y) -{ - return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] }; -} - -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 _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t)); -} -function toPolar(point) -{ - var x = point._0; - var y = point._1; - return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x)); + return fromArray(toArray(xs).sort(function(a, b) { + var ord = f(a)(b).ctor; + return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1; + })); } return { - 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: F2(compare), + Nil: Nil, + Cons: Cons, + cons: F2(Cons), + toArray: toArray, + fromArray: fromArray, - xor: F2(xor), - not: not, + foldr: F3(foldr), - truncate: truncate, - ceiling: Math.ceil, - floor: Math.floor, - round: Math.round, - toFloat: function(x) { return x; }, - isNaN: isNaN, - isInfinite: isInfinite + map2: F3(map2), + map3: F4(map3), + map4: F5(map4), + map5: F6(map5), + sortBy: F2(sortBy), + sortWith: F2(sortWith) }; }(); -//import // - -var _elm_lang$core$Native_Utils = function() { - -// COMPARISONS - -function eq(x, y) -{ - var stack = []; - var isEqual = eqHelp(x, y, 0, stack); - var pair; - while (isEqual && (pair = stack.pop())) - { - isEqual = eqHelp(pair.x, pair.y, 0, stack); - } - return isEqual; -} - - -function eqHelp(x, y, depth, stack) -{ - if (depth > 100) - { - stack.push({ x: x, y: y }); - return true; - } - - if (x === y) - { - return true; - } - - if (typeof x !== 'object') - { - if (typeof x === 'function') - { - throw new Error( - 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.' - + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==' - + ' which describes why it is this way and what the better version will look like.' - ); - } - return false; - } - - if (x === null || y === null) - { - return false - } - - if (x instanceof Date) - { - return x.getTime() === y.getTime(); - } - - if (!('ctor' in x)) - { - for (var key in x) - { - if (!eqHelp(x[key], y[key], depth + 1, stack)) - { - return false; - } - } - return true; - } - - // convert Dicts and Sets to lists - if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin') - { - x = _elm_lang$core$Dict$toList(x); - y = _elm_lang$core$Dict$toList(y); - } - if (x.ctor === 'Set_elm_builtin') - { - x = _elm_lang$core$Set$toList(x); - y = _elm_lang$core$Set$toList(y); - } - - // check if lists are equal without recursion - if (x.ctor === '::') - { - var a = x; - var b = y; - while (a.ctor === '::' && b.ctor === '::') - { - if (!eqHelp(a._0, b._0, depth + 1, stack)) - { - return false; +var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith; +var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy; +var _elm_lang$core$List$sort = function (xs) { + return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs); +}; +var _elm_lang$core$List$singleton = function (value) { + return { + ctor: '::', + _0: value, + _1: {ctor: '[]'} + }; +}; +var _elm_lang$core$List$drop = F2( + function (n, list) { + drop: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return list; + } else { + var _p0 = list; + if (_p0.ctor === '[]') { + return list; + } else { + var _v1 = n - 1, + _v2 = _p0._1; + n = _v1; + list = _v2; + continue drop; + } } - a = a._1; - b = b._1; - } - return a.ctor === b.ctor; - } - - // check if Arrays are equal - if (x.ctor === '_Array') - { - var xs = _elm_lang$core$Native_Array.toJSArray(x); - var ys = _elm_lang$core$Native_Array.toJSArray(y); - if (xs.length !== ys.length) - { - return false; } - for (var i = 0; i < xs.length; i++) - { - if (!eqHelp(xs[i], ys[i], depth + 1, stack)) - { + }); +var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5; +var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4; +var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3; +var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2; +var _elm_lang$core$List$any = F2( + function (isOkay, list) { + any: + while (true) { + var _p1 = list; + if (_p1.ctor === '[]') { return false; + } else { + if (isOkay(_p1._0)) { + return true; + } else { + var _v4 = isOkay, + _v5 = _p1._1; + isOkay = _v4; + list = _v5; + continue any; + } } } - return true; - } - - if (!eqHelp(x.ctor, y.ctor, depth + 1, stack)) - { - return false; - } - - for (var key in x) - { - if (!eqHelp(x[key], y[key], depth + 1, stack)) - { - return false; - } - } - return true; -} - -// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on -// the particular integer values assigned to LT, EQ, and GT. - -var LT = -1, EQ = 0, GT = 1; - -function cmp(x, y) -{ - if (typeof x !== 'object') - { - return x === y ? EQ : x < y ? LT : GT; - } - - if (x instanceof String) - { - var a = x.valueOf(); - var b = y.valueOf(); - return a === b ? EQ : a < b ? LT : GT; - } - - if (x.ctor === '::' || x.ctor === '[]') - { - while (x.ctor === '::' && y.ctor === '::') - { - var ord = cmp(x._0, y._0); - if (ord !== EQ) - { - return ord; + }); +var _elm_lang$core$List$all = F2( + function (isOkay, list) { + return !A2( + _elm_lang$core$List$any, + function (_p2) { + return !isOkay(_p2); + }, + list); + }); +var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr; +var _elm_lang$core$List$foldl = F3( + function (func, acc, list) { + foldl: + while (true) { + var _p3 = list; + if (_p3.ctor === '[]') { + return acc; + } else { + var _v7 = func, + _v8 = A2(func, _p3._0, acc), + _v9 = _p3._1; + func = _v7; + acc = _v8; + list = _v9; + continue foldl; } - x = x._1; - y = y._1; } - return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT; - } - - if (x.ctor.slice(0, 6) === '_Tuple') - { - var ord; - 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; - } - - throw new Error( - 'Comparison error: comparison is only defined on ints, ' - + 'floats, times, chars, strings, lists of comparable values, ' - + 'and tuples of comparable values.' - ); -} - - -// COMMON VALUES - -var Tuple0 = { - ctor: '_Tuple0' + }); +var _elm_lang$core$List$length = function (xs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p4, i) { + return i + 1; + }), + 0, + xs); }; - -function Tuple2(x, y) -{ - return { - ctor: '_Tuple2', - _0: x, - _1: y - }; -} - -function chr(c) -{ - return new String(c); -} - - -// GUID - -var count = 0; -function guid(_) -{ - return count++; -} - - -// RECORDS - -function update(oldRecord, updatedFields) -{ - var newRecord = {}; - - for (var key in oldRecord) - { - newRecord[key] = oldRecord[key]; +var _elm_lang$core$List$sum = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x + y; + }), + 0, + numbers); +}; +var _elm_lang$core$List$product = function (numbers) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return x * y; + }), + 1, + numbers); +}; +var _elm_lang$core$List$maximum = function (list) { + var _p5 = list; + if (_p5.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1)); + } else { + return _elm_lang$core$Maybe$Nothing; } - - for (var key in updatedFields) - { - newRecord[key] = updatedFields[key]; +}; +var _elm_lang$core$List$minimum = function (list) { + var _p6 = list; + if (_p6.ctor === '::') { + return _elm_lang$core$Maybe$Just( + A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1)); + } else { + return _elm_lang$core$Maybe$Nothing; } - - return newRecord; -} - - -//// 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; +}; +var _elm_lang$core$List$member = F2( + function (x, xs) { + return A2( + _elm_lang$core$List$any, + function (a) { + return _elm_lang$core$Native_Utils.eq(a, x); + }, + xs); + }); +var _elm_lang$core$List$isEmpty = function (xs) { + var _p7 = xs; + if (_p7.ctor === '[]') { + return true; + } else { + return false; } - - // append Lists - if (xs.ctor === '[]') - { - return ys; +}; +var _elm_lang$core$List$tail = function (list) { + var _p8 = list; + if (_p8.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p8._1); + } else { + return _elm_lang$core$Maybe$Nothing; } - 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; -} - - -// CRASHES - -function crash(moduleName, region) -{ - return function(message) { - throw new Error( - 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n' - + 'The message provided by the code author is:\n\n ' - + message - ); - }; -} - -function crashCase(moduleName, region, value) -{ - return function(message) { - throw new Error( - 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n' - + 'This was caused by the `case` expression ' + regionToString(region) + '.\n' - + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n' - + 'The message provided by the code author is:\n\n ' - + message - ); - }; -} - -function regionToString(region) -{ - if (region.start.line == region.end.line) - { - return 'on line ' + region.start.line; - } - return 'between lines ' + region.start.line + ' and ' + region.end.line; -} - - -// TO STRING - -function toString(v) -{ - var type = typeof v; - if (type === 'function') - { - return ''; - } - - if (type === 'boolean') - { - return v ? 'True' : 'False'; - } - - if (type === 'number') - { - return v + ''; - } - - if (v instanceof String) - { - return '\'' + addSlashes(v, true) + '\''; - } - - if (type === 'string') - { - return '"' + addSlashes(v, false) + '"'; - } - - if (v === null) - { - return 'null'; - } - - if (type === 'object' && 'ctor' in v) - { - var ctorStarter = v.ctor.substring(0, 5); - - if (ctorStarter === '_Tupl') - { - var output = []; - for (var k in v) - { - if (k === 'ctor') continue; - output.push(toString(v[k])); - } - return '(' + output.join(',') + ')'; - } - - if (ctorStarter === '_Task') - { - return '' - } - - if (v.ctor === '_Array') - { - var list = _elm_lang$core$Array$toList(v); - return 'Array.fromList ' + toString(list); - } - - if (v.ctor === '') - { - return ''; - } - - if (v.ctor === '_Process') - { - return ''; - } - - if (v.ctor === '::') - { - var output = '[' + toString(v._0); - v = v._1; - while (v.ctor === '::') - { - output += ',' + toString(v._0); - v = v._1; - } - return output + ']'; - } - - if (v.ctor === '[]') - { - return '[]'; - } - - if (v.ctor === 'Set_elm_builtin') - { - return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v)); - } - - if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin') - { - return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v)); - } - - var output = ''; - for (var i in v) - { - if (i === 'ctor') continue; - var str = toString(v[i]); - var c0 = str[0]; - var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0; - output += ' ' + (parenless ? str : '(' + str + ')'); - } - return v.ctor + output; - } - - if (type === 'object') - { - if (v instanceof Date) - { - return '<' + v.toString() + '>'; - } - - if (v.elm_web_socket) - { - return ''; - } - - var output = []; - for (var k in v) - { - output.push(k + ' = ' + toString(v[k])); - } - if (output.length === 0) - { - return '{}'; - } - return '{ ' + output.join(', ') + ' }'; - } - - return ''; -} - -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, '\\"'); - } -} - - -return { - eq: eq, - cmp: cmp, - Tuple0: Tuple0, - Tuple2: Tuple2, - chr: chr, - update: update, - guid: guid, - - append: F2(append), - - crash: crash, - crashCase: crashCase, - - toString: toString -}; - -}(); -var _elm_lang$core$Basics$never = function (_p0) { - never: - while (true) { - var _p1 = _p0; - var _v1 = _p1._0; - _p0 = _v1; - continue never; +}; +var _elm_lang$core$List$head = function (list) { + var _p9 = list; + if (_p9.ctor === '::') { + return _elm_lang$core$Maybe$Just(_p9._0); + } else { + return _elm_lang$core$Maybe$Nothing; } }; -var _elm_lang$core$Basics$uncurry = F2( - function (f, _p2) { - var _p3 = _p2; - return A2(f, _p3._0, _p3._1); - }); -var _elm_lang$core$Basics$curry = F3( - function (f, a, b) { - return f( - {ctor: '_Tuple2', _0: a, _1: b}); +var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {}; +_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons; +var _elm_lang$core$List$map = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, acc) { + return { + ctor: '::', + _0: f(x), + _1: acc + }; + }), + {ctor: '[]'}, + xs); }); -var _elm_lang$core$Basics$flip = F3( - function (f, b, a) { - return A2(f, a, b); +var _elm_lang$core$List$filter = F2( + function (pred, xs) { + var conditionalCons = F2( + function (front, back) { + return pred(front) ? {ctor: '::', _0: front, _1: back} : back; + }); + return A3( + _elm_lang$core$List$foldr, + conditionalCons, + {ctor: '[]'}, + xs); }); -var _elm_lang$core$Basics$always = F2( - function (a, _p4) { - return a; - }); -var _elm_lang$core$Basics$identity = function (x) { - return x; -}; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<|'] = F2( - function (f, x) { - return f(x); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['|>'] = F2( - function (x, f) { - return f(x); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>>'] = F3( - function (f, g, x) { - return g( - f(x)); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<<'] = F3( - function (g, f, x) { - return g( - f(x)); - }); -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append; -var _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString; -var _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite; -var _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN; -var _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat; -var _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling; -var _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor; -var _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate; -var _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round; -var _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not; -var _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and; -var _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max; -var _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min; -var _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq; -var _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e; -var _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi; -var _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp; -var _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase; -var _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs; -var _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate; -var _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt; -var _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2; -var _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan; -var _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin; -var _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos; -var _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan; -var _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin; -var _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod; -var _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub; -var _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {}; -_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add; -var _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar; -var _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar; -var _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns; -var _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees; -var _elm_lang$core$Basics$radians = function (t) { - return t; -}; -var _elm_lang$core$Basics$GT = {ctor: 'GT'}; -var _elm_lang$core$Basics$EQ = {ctor: 'EQ'}; -var _elm_lang$core$Basics$LT = {ctor: 'LT'}; -var _elm_lang$core$Basics$JustOneMore = function (a) { - return {ctor: 'JustOneMore', _0: a}; -}; - -var _elm_lang$core$Maybe$withDefault = F2( - function ($default, maybe) { - var _p0 = maybe; - if (_p0.ctor === 'Just') { - return _p0._0; +var _elm_lang$core$List$maybeCons = F3( + function (f, mx, xs) { + var _p10 = f(mx); + if (_p10.ctor === 'Just') { + return {ctor: '::', _0: _p10._0, _1: xs}; } else { - return $default; + return xs; } }); -var _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'}; -var _elm_lang$core$Maybe$andThen = F2( - function (callback, maybeValue) { - var _p1 = maybeValue; - if (_p1.ctor === 'Just') { - return callback(_p1._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } +var _elm_lang$core$List$filterMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$maybeCons(f), + {ctor: '[]'}, + xs); }); -var _elm_lang$core$Maybe$Just = function (a) { - return {ctor: 'Just', _0: a}; +var _elm_lang$core$List$reverse = function (list) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + {ctor: '[]'}, + list); }; -var _elm_lang$core$Maybe$map = F2( - function (f, maybe) { - var _p2 = maybe; - if (_p2.ctor === 'Just') { - return _elm_lang$core$Maybe$Just( - f(_p2._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } +var _elm_lang$core$List$scanl = F3( + function (f, b, xs) { + var scan1 = F2( + function (x, accAcc) { + var _p11 = accAcc; + if (_p11.ctor === '::') { + return { + ctor: '::', + _0: A2(f, x, _p11._0), + _1: accAcc + }; + } else { + return {ctor: '[]'}; + } + }); + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$foldl, + scan1, + { + ctor: '::', + _0: b, + _1: {ctor: '[]'} + }, + xs)); }); -var _elm_lang$core$Maybe$map2 = F3( - function (func, ma, mb) { - var _p3 = {ctor: '_Tuple2', _0: ma, _1: mb}; - if (((_p3.ctor === '_Tuple2') && (_p3._0.ctor === 'Just')) && (_p3._1.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A2(func, _p3._0._0, _p3._1._0)); +var _elm_lang$core$List$append = F2( + function (xs, ys) { + var _p12 = ys; + if (_p12.ctor === '[]') { + return xs; } else { - return _elm_lang$core$Maybe$Nothing; + return A3( + _elm_lang$core$List$foldr, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + ys, + xs); } }); -var _elm_lang$core$Maybe$map3 = F4( - function (func, ma, mb, mc) { - var _p4 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc}; - if ((((_p4.ctor === '_Tuple3') && (_p4._0.ctor === 'Just')) && (_p4._1.ctor === 'Just')) && (_p4._2.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A3(func, _p4._0._0, _p4._1._0, _p4._2._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } +var _elm_lang$core$List$concat = function (lists) { + return A3( + _elm_lang$core$List$foldr, + _elm_lang$core$List$append, + {ctor: '[]'}, + lists); +}; +var _elm_lang$core$List$concatMap = F2( + function (f, list) { + return _elm_lang$core$List$concat( + A2(_elm_lang$core$List$map, f, list)); }); -var _elm_lang$core$Maybe$map4 = F5( - function (func, ma, mb, mc, md) { - var _p5 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md}; - if (((((_p5.ctor === '_Tuple4') && (_p5._0.ctor === 'Just')) && (_p5._1.ctor === 'Just')) && (_p5._2.ctor === 'Just')) && (_p5._3.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A4(func, _p5._0._0, _p5._1._0, _p5._2._0, _p5._3._0)); - } else { - return _elm_lang$core$Maybe$Nothing; - } +var _elm_lang$core$List$partition = F2( + function (pred, list) { + var step = F2( + function (x, _p13) { + var _p14 = _p13; + var _p16 = _p14._0; + var _p15 = _p14._1; + return pred(x) ? { + ctor: '_Tuple2', + _0: {ctor: '::', _0: x, _1: _p16}, + _1: _p15 + } : { + ctor: '_Tuple2', + _0: _p16, + _1: {ctor: '::', _0: x, _1: _p15} + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }, + list); }); -var _elm_lang$core$Maybe$map5 = F6( - function (func, ma, mb, mc, md, me) { - var _p6 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me}; - if ((((((_p6.ctor === '_Tuple5') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) && (_p6._2.ctor === 'Just')) && (_p6._3.ctor === 'Just')) && (_p6._4.ctor === 'Just')) { - return _elm_lang$core$Maybe$Just( - A5(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0, _p6._4._0)); +var _elm_lang$core$List$unzip = function (pairs) { + var step = F2( + function (_p18, _p17) { + var _p19 = _p18; + var _p20 = _p17; + return { + ctor: '_Tuple2', + _0: {ctor: '::', _0: _p19._0, _1: _p20._0}, + _1: {ctor: '::', _0: _p19._1, _1: _p20._1} + }; + }); + return A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }, + pairs); +}; +var _elm_lang$core$List$intersperse = F2( + function (sep, xs) { + var _p21 = xs; + if (_p21.ctor === '[]') { + return {ctor: '[]'}; } else { - return _elm_lang$core$Maybe$Nothing; + var step = F2( + function (x, rest) { + return { + ctor: '::', + _0: sep, + _1: {ctor: '::', _0: x, _1: rest} + }; + }); + var spersed = A3( + _elm_lang$core$List$foldr, + step, + {ctor: '[]'}, + _p21._1); + return {ctor: '::', _0: _p21._0, _1: spersed}; } }); - -//import Native.Utils // - -var _elm_lang$core$Native_List = function() { - -var Nil = { ctor: '[]' }; - -function Cons(hd, tl) -{ - return { ctor: '::', _0: hd, _1: tl }; -} - -function fromArray(arr) -{ - var out = Nil; - for (var i = arr.length; i--; ) - { - out = Cons(arr[i], out); - } - return out; -} - -function toArray(xs) -{ - var out = []; - while (xs.ctor !== '[]') - { - out.push(xs._0); - xs = xs._1; - } - return out; -} - -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 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 _elm_lang$core$Native_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; - })); -} - -return { - Nil: Nil, - Cons: Cons, - cons: F2(Cons), - toArray: toArray, - fromArray: fromArray, - - foldr: F3(foldr), - - map2: F3(map2), - map3: F4(map3), - map4: F5(map4), - map5: F6(map5), - sortBy: F2(sortBy), - sortWith: F2(sortWith) -}; - -}(); -var _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith; -var _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy; -var _elm_lang$core$List$sort = function (xs) { - return A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs); -}; -var _elm_lang$core$List$singleton = function (value) { - return { - ctor: '::', - _0: value, - _1: {ctor: '[]'} - }; -}; -var _elm_lang$core$List$drop = F2( - function (n, list) { - drop: +var _elm_lang$core$List$takeReverse = F3( + function (n, list, taken) { + takeReverse: while (true) { if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return list; + return taken; } else { - var _p0 = list; - if (_p0.ctor === '[]') { - return list; + var _p22 = list; + if (_p22.ctor === '[]') { + return taken; } else { - var _v1 = n - 1, - _v2 = _p0._1; - n = _v1; - list = _v2; - continue drop; + var _v23 = n - 1, + _v24 = _p22._1, + _v25 = {ctor: '::', _0: _p22._0, _1: taken}; + n = _v23; + list = _v24; + taken = _v25; + continue takeReverse; } } } }); -var _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5; -var _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4; -var _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3; -var _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2; -var _elm_lang$core$List$any = F2( - function (isOkay, list) { - any: - while (true) { - var _p1 = list; - if (_p1.ctor === '[]') { - return false; - } else { - if (isOkay(_p1._0)) { - return true; - } else { - var _v4 = isOkay, - _v5 = _p1._1; - isOkay = _v4; - list = _v5; - continue any; - } - } - } +var _elm_lang$core$List$takeTailRec = F2( + function (n, list) { + return _elm_lang$core$List$reverse( + A3( + _elm_lang$core$List$takeReverse, + n, + list, + {ctor: '[]'})); }); -var _elm_lang$core$List$all = F2( - function (isOkay, list) { - return !A2( - _elm_lang$core$List$any, - function (_p2) { - return !isOkay(_p2); - }, - list); +var _elm_lang$core$List$takeFast = F3( + function (ctr, n, list) { + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return {ctor: '[]'}; + } else { + var _p23 = {ctor: '_Tuple2', _0: n, _1: list}; + _v26_5: + do { + _v26_1: + do { + if (_p23.ctor === '_Tuple2') { + if (_p23._1.ctor === '[]') { + return list; + } else { + if (_p23._1._1.ctor === '::') { + switch (_p23._0) { + case 1: + break _v26_1; + case 2: + return { + ctor: '::', + _0: _p23._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._0, + _1: {ctor: '[]'} + } + }; + case 3: + if (_p23._1._1._1.ctor === '::') { + return { + ctor: '::', + _0: _p23._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._0, + _1: { + ctor: '::', + _0: _p23._1._1._1._0, + _1: {ctor: '[]'} + } + } + }; + } else { + break _v26_5; + } + default: + if ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) { + var _p28 = _p23._1._1._1._0; + var _p27 = _p23._1._1._0; + var _p26 = _p23._1._0; + var _p25 = _p23._1._1._1._1._0; + var _p24 = _p23._1._1._1._1._1; + return (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? { + ctor: '::', + _0: _p26, + _1: { + ctor: '::', + _0: _p27, + _1: { + ctor: '::', + _0: _p28, + _1: { + ctor: '::', + _0: _p25, + _1: A2(_elm_lang$core$List$takeTailRec, n - 4, _p24) + } + } + } + } : { + ctor: '::', + _0: _p26, + _1: { + ctor: '::', + _0: _p27, + _1: { + ctor: '::', + _0: _p28, + _1: { + ctor: '::', + _0: _p25, + _1: A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24) + } + } + } + }; + } else { + break _v26_5; + } + } + } else { + if (_p23._0 === 1) { + break _v26_1; + } else { + break _v26_5; + } + } + } + } else { + break _v26_5; + } + } while(false); + return { + ctor: '::', + _0: _p23._1._0, + _1: {ctor: '[]'} + }; + } while(false); + return list; + } }); -var _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr; -var _elm_lang$core$List$foldl = F3( - function (func, acc, list) { - foldl: +var _elm_lang$core$List$take = F2( + function (n, list) { + return A3(_elm_lang$core$List$takeFast, 0, n, list); + }); +var _elm_lang$core$List$repeatHelp = F3( + function (result, n, value) { + repeatHelp: while (true) { - var _p3 = list; - if (_p3.ctor === '[]') { - return acc; + if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { + return result; } else { - var _v7 = func, - _v8 = A2(func, _p3._0, acc), - _v9 = _p3._1; - func = _v7; - acc = _v8; - list = _v9; - continue foldl; + var _v27 = {ctor: '::', _0: value, _1: result}, + _v28 = n - 1, + _v29 = value; + result = _v27; + n = _v28; + value = _v29; + continue repeatHelp; } } }); -var _elm_lang$core$List$length = function (xs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p4, i) { - return i + 1; - }), - 0, - xs); -}; -var _elm_lang$core$List$sum = function (numbers) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return x + y; - }), - 0, - numbers); -}; -var _elm_lang$core$List$product = function (numbers) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return x * y; - }), - 1, - numbers); -}; -var _elm_lang$core$List$maximum = function (list) { - var _p5 = list; - if (_p5.ctor === '::') { - return _elm_lang$core$Maybe$Just( - A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1)); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$minimum = function (list) { - var _p6 = list; - if (_p6.ctor === '::') { - return _elm_lang$core$Maybe$Just( - A3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1)); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List$member = F2( - function (x, xs) { - return A2( - _elm_lang$core$List$any, - function (a) { - return _elm_lang$core$Native_Utils.eq(a, x); - }, +var _elm_lang$core$List$repeat = F2( + function (n, value) { + return A3( + _elm_lang$core$List$repeatHelp, + {ctor: '[]'}, + n, + value); + }); +var _elm_lang$core$List$rangeHelp = F3( + function (lo, hi, list) { + rangeHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(lo, hi) < 1) { + var _v30 = lo, + _v31 = hi - 1, + _v32 = {ctor: '::', _0: hi, _1: list}; + lo = _v30; + hi = _v31; + list = _v32; + continue rangeHelp; + } else { + return list; + } + } + }); +var _elm_lang$core$List$range = F2( + function (lo, hi) { + return A3( + _elm_lang$core$List$rangeHelp, + lo, + hi, + {ctor: '[]'}); + }); +var _elm_lang$core$List$indexedMap = F2( + function (f, xs) { + return A3( + _elm_lang$core$List$map2, + f, + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$List$length(xs) - 1), xs); }); -var _elm_lang$core$List$isEmpty = function (xs) { - var _p7 = xs; - if (_p7.ctor === '[]') { - return true; - } else { - return false; - } -}; -var _elm_lang$core$List$tail = function (list) { - var _p8 = list; - if (_p8.ctor === '::') { - return _elm_lang$core$Maybe$Just(_p8._1); + +var _elm_lang$core$Result$toMaybe = function (result) { + var _p0 = result; + if (_p0.ctor === 'Ok') { + return _elm_lang$core$Maybe$Just(_p0._0); } else { return _elm_lang$core$Maybe$Nothing; } }; -var _elm_lang$core$List$head = function (list) { - var _p9 = list; - if (_p9.ctor === '::') { - return _elm_lang$core$Maybe$Just(_p9._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$List_ops = _elm_lang$core$List_ops || {}; -_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons; -var _elm_lang$core$List$map = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, acc) { - return { - ctor: '::', - _0: f(x), - _1: acc - }; - }), - {ctor: '[]'}, - xs); - }); -var _elm_lang$core$List$filter = F2( - function (pred, xs) { - var conditionalCons = F2( - function (front, back) { - return pred(front) ? {ctor: '::', _0: front, _1: back} : back; - }); - return A3( - _elm_lang$core$List$foldr, - conditionalCons, - {ctor: '[]'}, - xs); - }); -var _elm_lang$core$List$maybeCons = F3( - function (f, mx, xs) { - var _p10 = f(mx); - if (_p10.ctor === 'Just') { - return {ctor: '::', _0: _p10._0, _1: xs}; +var _elm_lang$core$Result$withDefault = F2( + function (def, result) { + var _p1 = result; + if (_p1.ctor === 'Ok') { + return _p1._0; } else { - return xs; + return def; } }); -var _elm_lang$core$List$filterMap = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$foldr, - _elm_lang$core$List$maybeCons(f), - {ctor: '[]'}, - xs); - }); -var _elm_lang$core$List$reverse = function (list) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (x, y) { - return {ctor: '::', _0: x, _1: y}; - }), - {ctor: '[]'}, - list); +var _elm_lang$core$Result$Err = function (a) { + return {ctor: 'Err', _0: a}; }; -var _elm_lang$core$List$scanl = F3( - function (f, b, xs) { - var scan1 = F2( - function (x, accAcc) { - var _p11 = accAcc; - if (_p11.ctor === '::') { - return { - ctor: '::', - _0: A2(f, x, _p11._0), - _1: accAcc - }; - } else { - return {ctor: '[]'}; - } - }); - return _elm_lang$core$List$reverse( - A3( - _elm_lang$core$List$foldl, - scan1, - { - ctor: '::', - _0: b, - _1: {ctor: '[]'} - }, - xs)); - }); -var _elm_lang$core$List$append = F2( - function (xs, ys) { - var _p12 = ys; - if (_p12.ctor === '[]') { - return xs; +var _elm_lang$core$Result$andThen = F2( + function (callback, result) { + var _p2 = result; + if (_p2.ctor === 'Ok') { + return callback(_p2._0); } else { - return A3( - _elm_lang$core$List$foldr, - F2( - function (x, y) { - return {ctor: '::', _0: x, _1: y}; - }), - ys, - xs); + return _elm_lang$core$Result$Err(_p2._0); } }); -var _elm_lang$core$List$concat = function (lists) { - return A3( - _elm_lang$core$List$foldr, - _elm_lang$core$List$append, - {ctor: '[]'}, - lists); -}; -var _elm_lang$core$List$concatMap = F2( - function (f, list) { - return _elm_lang$core$List$concat( - A2(_elm_lang$core$List$map, f, list)); - }); -var _elm_lang$core$List$partition = F2( - function (pred, list) { - var step = F2( - function (x, _p13) { - var _p14 = _p13; - var _p16 = _p14._0; - var _p15 = _p14._1; - return pred(x) ? { - ctor: '_Tuple2', - _0: {ctor: '::', _0: x, _1: _p16}, - _1: _p15 - } : { - ctor: '_Tuple2', - _0: _p16, - _1: {ctor: '::', _0: x, _1: _p15} - }; - }); - return A3( - _elm_lang$core$List$foldr, - step, - { - ctor: '_Tuple2', - _0: {ctor: '[]'}, - _1: {ctor: '[]'} - }, - list); - }); -var _elm_lang$core$List$unzip = function (pairs) { - var step = F2( - function (_p18, _p17) { - var _p19 = _p18; - var _p20 = _p17; - return { - ctor: '_Tuple2', - _0: {ctor: '::', _0: _p19._0, _1: _p20._0}, - _1: {ctor: '::', _0: _p19._1, _1: _p20._1} - }; - }); - return A3( - _elm_lang$core$List$foldr, - step, - { - ctor: '_Tuple2', - _0: {ctor: '[]'}, - _1: {ctor: '[]'} - }, - pairs); +var _elm_lang$core$Result$Ok = function (a) { + return {ctor: 'Ok', _0: a}; }; -var _elm_lang$core$List$intersperse = F2( - function (sep, xs) { - var _p21 = xs; - if (_p21.ctor === '[]') { - return {ctor: '[]'}; +var _elm_lang$core$Result$map = F2( + function (func, ra) { + var _p3 = ra; + if (_p3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + func(_p3._0)); } else { - var step = F2( - function (x, rest) { - return { - ctor: '::', - _0: sep, - _1: {ctor: '::', _0: x, _1: rest} - }; - }); - var spersed = A3( - _elm_lang$core$List$foldr, - step, - {ctor: '[]'}, - _p21._1); - return {ctor: '::', _0: _p21._0, _1: spersed}; + return _elm_lang$core$Result$Err(_p3._0); } }); -var _elm_lang$core$List$takeReverse = F3( - function (n, list, taken) { - takeReverse: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return taken; +var _elm_lang$core$Result$map2 = F3( + function (func, ra, rb) { + var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; + if (_p4._0.ctor === 'Ok') { + if (_p4._1.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A2(func, _p4._0._0, _p4._1._0)); } else { - var _p22 = list; - if (_p22.ctor === '[]') { - return taken; + return _elm_lang$core$Result$Err(_p4._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p4._0._0); + } + }); +var _elm_lang$core$Result$map3 = F4( + function (func, ra, rb, rc) { + var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; + if (_p5._0.ctor === 'Ok') { + if (_p5._1.ctor === 'Ok') { + if (_p5._2.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); } else { - var _v23 = n - 1, - _v24 = _p22._1, - _v25 = {ctor: '::', _0: _p22._0, _1: taken}; - n = _v23; - list = _v24; - taken = _v25; - continue takeReverse; + return _elm_lang$core$Result$Err(_p5._2._0); } + } else { + return _elm_lang$core$Result$Err(_p5._1._0); } + } else { + return _elm_lang$core$Result$Err(_p5._0._0); } }); -var _elm_lang$core$List$takeTailRec = F2( - function (n, list) { - return _elm_lang$core$List$reverse( - A3( - _elm_lang$core$List$takeReverse, - n, - list, - {ctor: '[]'})); - }); -var _elm_lang$core$List$takeFast = F3( - function (ctr, n, list) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return {ctor: '[]'}; - } else { - var _p23 = {ctor: '_Tuple2', _0: n, _1: list}; - _v26_5: - do { - _v26_1: - do { - if (_p23.ctor === '_Tuple2') { - if (_p23._1.ctor === '[]') { - return list; - } else { - if (_p23._1._1.ctor === '::') { - switch (_p23._0) { - case 1: - break _v26_1; - case 2: - return { - ctor: '::', - _0: _p23._1._0, - _1: { - ctor: '::', - _0: _p23._1._1._0, - _1: {ctor: '[]'} - } - }; - case 3: - if (_p23._1._1._1.ctor === '::') { - return { - ctor: '::', - _0: _p23._1._0, - _1: { - ctor: '::', - _0: _p23._1._1._0, - _1: { - ctor: '::', - _0: _p23._1._1._1._0, - _1: {ctor: '[]'} - } - } - }; - } else { - break _v26_5; - } - default: - if ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) { - var _p28 = _p23._1._1._1._0; - var _p27 = _p23._1._1._0; - var _p26 = _p23._1._0; - var _p25 = _p23._1._1._1._1._0; - var _p24 = _p23._1._1._1._1._1; - return (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? { - ctor: '::', - _0: _p26, - _1: { - ctor: '::', - _0: _p27, - _1: { - ctor: '::', - _0: _p28, - _1: { - ctor: '::', - _0: _p25, - _1: A2(_elm_lang$core$List$takeTailRec, n - 4, _p24) - } - } - } - } : { - ctor: '::', - _0: _p26, - _1: { - ctor: '::', - _0: _p27, - _1: { - ctor: '::', - _0: _p28, - _1: { - ctor: '::', - _0: _p25, - _1: A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24) - } - } - } - }; - } else { - break _v26_5; - } - } - } else { - if (_p23._0 === 1) { - break _v26_1; - } else { - break _v26_5; - } - } - } +var _elm_lang$core$Result$map4 = F5( + function (func, ra, rb, rc, rd) { + var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; + if (_p6._0.ctor === 'Ok') { + if (_p6._1.ctor === 'Ok') { + if (_p6._2.ctor === 'Ok') { + if (_p6._3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); } else { - break _v26_5; + return _elm_lang$core$Result$Err(_p6._3._0); } - } while(false); - return { - ctor: '::', - _0: _p23._1._0, - _1: {ctor: '[]'} - }; - } while(false); - return list; - } - }); -var _elm_lang$core$List$take = F2( - function (n, list) { - return A3(_elm_lang$core$List$takeFast, 0, n, list); - }); -var _elm_lang$core$List$repeatHelp = F3( - function (result, n, value) { - repeatHelp: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) { - return result; + } else { + return _elm_lang$core$Result$Err(_p6._2._0); + } } else { - var _v27 = {ctor: '::', _0: value, _1: result}, - _v28 = n - 1, - _v29 = value; - result = _v27; - n = _v28; - value = _v29; - continue repeatHelp; + return _elm_lang$core$Result$Err(_p6._1._0); } + } else { + return _elm_lang$core$Result$Err(_p6._0._0); } }); -var _elm_lang$core$List$repeat = F2( - function (n, value) { - return A3( - _elm_lang$core$List$repeatHelp, - {ctor: '[]'}, - n, - value); - }); -var _elm_lang$core$List$rangeHelp = F3( - function (lo, hi, list) { - rangeHelp: - while (true) { - if (_elm_lang$core$Native_Utils.cmp(lo, hi) < 1) { - var _v30 = lo, - _v31 = hi - 1, - _v32 = {ctor: '::', _0: hi, _1: list}; - lo = _v30; - hi = _v31; - list = _v32; - continue rangeHelp; +var _elm_lang$core$Result$map5 = F6( + function (func, ra, rb, rc, rd, re) { + var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; + if (_p7._0.ctor === 'Ok') { + if (_p7._1.ctor === 'Ok') { + if (_p7._2.ctor === 'Ok') { + if (_p7._3.ctor === 'Ok') { + if (_p7._4.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); + } else { + return _elm_lang$core$Result$Err(_p7._4._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._2._0); + } } else { - return list; + return _elm_lang$core$Result$Err(_p7._1._0); } + } else { + return _elm_lang$core$Result$Err(_p7._0._0); } }); -var _elm_lang$core$List$range = F2( - function (lo, hi) { - return A3( - _elm_lang$core$List$rangeHelp, - lo, - hi, - {ctor: '[]'}); +var _elm_lang$core$Result$mapError = F2( + function (f, result) { + var _p8 = result; + if (_p8.ctor === 'Ok') { + return _elm_lang$core$Result$Ok(_p8._0); + } else { + return _elm_lang$core$Result$Err( + f(_p8._0)); + } }); -var _elm_lang$core$List$indexedMap = F2( - function (f, xs) { - return A3( - _elm_lang$core$List$map2, - f, - A2( - _elm_lang$core$List$range, - 0, - _elm_lang$core$List$length(xs) - 1), - xs); +var _elm_lang$core$Result$fromMaybe = F2( + function (err, maybe) { + var _p9 = maybe; + if (_p9.ctor === 'Just') { + return _elm_lang$core$Result$Ok(_p9._0); + } else { + return _elm_lang$core$Result$Err(err); + } }); -var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; -var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; -var _elm_lang$core$Array$isEmpty = function (array) { - return _elm_lang$core$Native_Utils.eq( - _elm_lang$core$Array$length(array), - 0); -}; -var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; -var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; -var _elm_lang$core$Array$get = F2( - function (i, array) { - return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( - i, - _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( - A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; - }); -var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; -var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; -var _elm_lang$core$Array$filter = F2( - function (isOkay, arr) { - var update = F2( - function (x, xs) { - return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; - }); - return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); - }); -var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; -var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; -var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; -var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; -var _elm_lang$core$Array$toIndexedList = function (array) { - return A3( - _elm_lang$core$List$map2, - F2( - function (v0, v1) { - return {ctor: '_Tuple2', _0: v0, _1: v1}; - }), - A2( - _elm_lang$core$List$range, - 0, - _elm_lang$core$Native_Array.length(array) - 1), - _elm_lang$core$Native_Array.toList(array)); -}; -var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; -var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; -var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; -var _elm_lang$core$Array$repeat = F2( - function (n, e) { - return A2( - _elm_lang$core$Array$initialize, - n, - _elm_lang$core$Basics$always(e)); - }); -var _elm_lang$core$Array$Array = {ctor: 'Array'}; - -//import Native.Utils // - -var _elm_lang$core$Native_Char = function() { - -return { - fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); }, - toCode: function(c) { return c.charCodeAt(0); }, - toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); }, - toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); }, - toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); }, - toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); } -}; - -}(); -var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode; -var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode; -var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower; -var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper; -var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower; -var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper; -var _elm_lang$core$Char$isBetween = F3( - function (low, high, $char) { - var code = _elm_lang$core$Char$toCode($char); - return (_elm_lang$core$Native_Utils.cmp( - code, - _elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp( - code, - _elm_lang$core$Char$toCode(high)) < 1); - }); -var _elm_lang$core$Char$isUpper = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('A'), - _elm_lang$core$Native_Utils.chr('Z')); -var _elm_lang$core$Char$isLower = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('a'), - _elm_lang$core$Native_Utils.chr('z')); -var _elm_lang$core$Char$isDigit = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('0'), - _elm_lang$core$Native_Utils.chr('9')); -var _elm_lang$core$Char$isOctDigit = A2( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('0'), - _elm_lang$core$Native_Utils.chr('7')); -var _elm_lang$core$Char$isHexDigit = function ($char) { - return _elm_lang$core$Char$isDigit($char) || (A3( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('a'), - _elm_lang$core$Native_Utils.chr('f'), - $char) || A3( - _elm_lang$core$Char$isBetween, - _elm_lang$core$Native_Utils.chr('A'), - _elm_lang$core$Native_Utils.chr('F'), - $char)); -}; - -//import Native.Utils // - -var _elm_lang$core$Native_Scheduler = function() { - -var MAX_STEPS = 10000; - +//import Maybe, Native.List, Native.Utils, Result // -// TASKS +var _elm_lang$core$Native_String = function() { -function succeed(value) +function isEmpty(str) { - return { - ctor: '_Task_succeed', - value: value - }; + return str.length === 0; } - -function fail(error) +function cons(chr, str) { - return { - ctor: '_Task_fail', - value: error - }; + return chr + str; } - -function nativeBinding(callback) +function uncons(str) { - return { - ctor: '_Task_nativeBinding', - callback: callback, - cancel: null - }; + var hd = str[0]; + if (hd) + { + return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1))); + } + return _elm_lang$core$Maybe$Nothing; } - -function andThen(callback, task) +function append(a, b) { - return { - ctor: '_Task_andThen', - callback: callback, - task: task - }; + return a + b; } - -function onError(callback, task) +function concat(strs) { - return { - ctor: '_Task_onError', - callback: callback, - task: task - }; + return _elm_lang$core$Native_List.toArray(strs).join(''); } - -function receive(callback) +function length(str) { - return { - ctor: '_Task_receive', - callback: callback - }; + return str.length; } - - -// PROCESSES - -function rawSpawn(task) +function map(f, str) { - var process = { - ctor: '_Process', - id: _elm_lang$core$Native_Utils.guid(), - root: task, - stack: null, - mailbox: [] - }; - - enqueue(process); - - return process; + var out = str.split(''); + for (var i = out.length; i--; ) + { + out[i] = f(_elm_lang$core$Native_Utils.chr(out[i])); + } + return out.join(''); } - -function spawn(task) +function filter(pred, str) { - return nativeBinding(function(callback) { - var process = rawSpawn(task); - callback(succeed(process)); - }); + return str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join(''); } - -function rawSend(process, msg) +function reverse(str) { - process.mailbox.push(msg); - enqueue(process); + return str.split('').reverse().join(''); } - -function send(process, msg) +function foldl(f, b, str) { - return nativeBinding(function(callback) { - rawSend(process, msg); - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); + var len = str.length; + for (var i = 0; i < len; ++i) + { + b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; } - -function kill(process) +function foldr(f, b, str) { - return nativeBinding(function(callback) { - var root = process.root; - if (root.ctor === '_Task_nativeBinding' && root.cancel) - { - root.cancel(); - } - - process.root = null; - - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); + for (var i = str.length; i--; ) + { + b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); + } + return b; } - -function sleep(time) +function split(sep, str) { - return nativeBinding(function(callback) { - var id = setTimeout(function() { - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }, time); - - return function() { clearTimeout(id); }; - }); + return _elm_lang$core$Native_List.fromArray(str.split(sep)); } - - -// STEP PROCESSES - -function step(numSteps, process) +function join(sep, strs) { - while (numSteps < MAX_STEPS) + return _elm_lang$core$Native_List.toArray(strs).join(sep); +} +function repeat(n, str) +{ + var result = ''; + while (n > 0) { - var ctor = process.root.ctor; - - if (ctor === '_Task_succeed') + if (n & 1) { - while (process.stack && process.stack.ctor === '_Task_onError') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; - } - - if (ctor === '_Task_fail') - { - while (process.stack && process.stack.ctor === '_Task_andThen') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; + 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; +} - if (ctor === '_Task_andThen') - { - process.stack = { - ctor: '_Task_andThen', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } +function trim(str) +{ + return str.trim(); +} +function trimLeft(str) +{ + return str.replace(/^\s+/, ''); +} +function trimRight(str) +{ + return str.replace(/\s+$/, ''); +} - if (ctor === '_Task_onError') - { - process.stack = { - ctor: '_Task_onError', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } +function words(str) +{ + return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g)); +} +function lines(str) +{ + return _elm_lang$core$Native_List.fromArray(str.split(/\r\n|\r|\n/g)); +} - if (ctor === '_Task_nativeBinding') - { - process.root.cancel = process.root.callback(function(newRoot) { - process.root = newRoot; - enqueue(process); - }); +function toUpper(str) +{ + return str.toUpperCase(); +} +function toLower(str) +{ + return str.toLowerCase(); +} - break; +function any(pred, str) +{ + for (var i = str.length; i--; ) + { + if (pred(_elm_lang$core$Native_Utils.chr(str[i]))) + { + return true; } - - if (ctor === '_Task_receive') + } + return false; +} +function all(pred, str) +{ + for (var i = str.length; i--; ) + { + if (!pred(_elm_lang$core$Native_Utils.chr(str[i]))) { - var mailbox = process.mailbox; - if (mailbox.length === 0) - { - break; - } - - process.root = process.root.callback(mailbox.shift()); - ++numSteps; - continue; + return false; } - - throw new Error(ctor); } + return true; +} - if (numSteps < MAX_STEPS) +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; + + if (subLen < 1) { - return numSteps + 1; + return _elm_lang$core$Native_List.Nil; } - enqueue(process); - return numSteps; -} + var i = 0; + var is = []; + while ((i = str.indexOf(sub, i)) > -1) + { + is.push(i); + i = i + subLen; + } -// WORK QUEUE + return _elm_lang$core$Native_List.fromArray(is); +} -var working = false; -var workQueue = []; -function enqueue(process) +function toInt(s) { - workQueue.push(process); + var len = s.length; - if (!working) + // if empty + if (len === 0) { - setTimeout(work, 0); - working = true; + return intErr(s); } -} -function work() -{ - var numSteps = 0; - var process; - while (numSteps < MAX_STEPS && (process = workQueue.shift())) + // if hex + var c = s[0]; + if (c === '0' && s[1] === 'x') { - if (process.root) + for (var i = 2; i < len; ++i) { - numSteps = step(numSteps, process); + var c = s[i]; + if (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) + { + continue; + } + return intErr(s); } + return _elm_lang$core$Result$Ok(parseInt(s, 16)); } - if (!process) + + // is decimal + if (c > '9' || (c < '0' && c !== '-' && c !== '+')) { - working = false; - return; + return intErr(s); + } + for (var i = 1; i < len; ++i) + { + var c = s[i]; + if (c < '0' || '9' < c) + { + return intErr(s); + } } - setTimeout(work, 0); -} - - -return { - succeed: succeed, - fail: fail, - nativeBinding: nativeBinding, - andThen: F2(andThen), - onError: F2(onError), - receive: receive, - spawn: spawn, - kill: kill, - sleep: sleep, - send: F2(send), + return _elm_lang$core$Result$Ok(parseInt(s, 10)); +} - rawSpawn: rawSpawn, - rawSend: rawSend -}; +function intErr(s) +{ + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int"); +} -}(); -//import // -var _elm_lang$core$Native_Platform = function() { +function toFloat(s) +{ + // check if it is a hex, octal, or binary number + if (s.length === 0 || /[\sxbo]/.test(s)) + { + return floatErr(s); + } + var n = +s; + // faster isNaN check + return n === n ? _elm_lang$core$Result$Ok(n) : floatErr(s); +} +function floatErr(s) +{ + return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float"); +} -// PROGRAMS -function program(impl) +function toList(str) { - return function(flagDecoder) - { - return function(object, moduleName) - { + return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr)); +} +function fromList(chars) +{ + return _elm_lang$core$Native_List.toArray(chars).join(''); +} + +return { + 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 +}; + +}(); + +//import Native.Utils // + +var _elm_lang$core$Native_Char = function() { + +return { + fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); }, + toCode: function(c) { return c.charCodeAt(0); }, + toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); }, + toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); }, + toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); }, + toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); } +}; + +}(); +var _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode; +var _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode; +var _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower; +var _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper; +var _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower; +var _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper; +var _elm_lang$core$Char$isBetween = F3( + function (low, high, $char) { + var code = _elm_lang$core$Char$toCode($char); + return (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp( + code, + _elm_lang$core$Char$toCode(high)) < 1); + }); +var _elm_lang$core$Char$isUpper = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('Z')); +var _elm_lang$core$Char$isLower = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('z')); +var _elm_lang$core$Char$isDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('9')); +var _elm_lang$core$Char$isOctDigit = A2( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('0'), + _elm_lang$core$Native_Utils.chr('7')); +var _elm_lang$core$Char$isHexDigit = function ($char) { + return _elm_lang$core$Char$isDigit($char) || (A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('a'), + _elm_lang$core$Native_Utils.chr('f'), + $char) || A3( + _elm_lang$core$Char$isBetween, + _elm_lang$core$Native_Utils.chr('A'), + _elm_lang$core$Native_Utils.chr('F'), + $char)); +}; + +var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; +var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; +var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; +var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; +var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; +var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; +var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; +var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; +var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; +var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; +var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; +var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; +var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; +var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; +var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; +var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; +var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; +var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; +var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; +var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; +var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; +var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; +var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; +var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; +var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; +var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; +var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; +var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; +var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; +var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; +var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; +var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; +var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; +var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; +var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; +var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; +var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; +var _elm_lang$core$String$fromChar = function ($char) { + return A2(_elm_lang$core$String$cons, $char, ''); +}; +var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; + +var _elm_lang$core$Tuple$mapSecond = F2( + function (func, _p0) { + var _p1 = _p0; + return { + ctor: '_Tuple2', + _0: _p1._0, + _1: func(_p1._1) + }; + }); +var _elm_lang$core$Tuple$mapFirst = F2( + function (func, _p2) { + var _p3 = _p2; + return { + ctor: '_Tuple2', + _0: func(_p3._0), + _1: _p3._1 + }; + }); +var _elm_lang$core$Tuple$second = function (_p4) { + var _p5 = _p4; + return _p5._1; +}; +var _elm_lang$core$Tuple$first = function (_p6) { + var _p7 = _p6; + return _p7._0; +}; + +//import // + +var _elm_lang$core$Native_Platform = function() { + + +// PROGRAMS + +function program(impl) +{ + return function(flagDecoder) + { + return function(object, moduleName) + { object['worker'] = function worker(flags) { if (typeof flags !== 'undefined') @@ -3573,190 +2856,554 @@ return { }(); -var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( - {ctor: '[]'}); -var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; -_elm_lang$core$Platform_Cmd_ops['!'] = F2( - function (model, commands) { - return { - ctor: '_Tuple2', - _0: model, - _1: _elm_lang$core$Platform_Cmd$batch(commands) - }; - }); -var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; +//import Native.Utils // -var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( - {ctor: '[]'}); -var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; +var _elm_lang$core$Native_Scheduler = function() { -var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; -var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; -var _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags; -var _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program; -var _elm_lang$core$Platform$Program = {ctor: 'Program'}; -var _elm_lang$core$Platform$Task = {ctor: 'Task'}; -var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; -var _elm_lang$core$Platform$Router = {ctor: 'Router'}; +var MAX_STEPS = 10000; -var _elm_lang$core$Result$toMaybe = function (result) { - var _p0 = result; - if (_p0.ctor === 'Ok') { - return _elm_lang$core$Maybe$Just(_p0._0); - } else { - return _elm_lang$core$Maybe$Nothing; - } -}; -var _elm_lang$core$Result$withDefault = F2( - function (def, result) { - var _p1 = result; - if (_p1.ctor === 'Ok') { - return _p1._0; - } else { - return def; - } - }); -var _elm_lang$core$Result$Err = function (a) { - return {ctor: 'Err', _0: a}; -}; -var _elm_lang$core$Result$andThen = F2( - function (callback, result) { - var _p2 = result; - if (_p2.ctor === 'Ok') { - return callback(_p2._0); - } else { - return _elm_lang$core$Result$Err(_p2._0); - } + +// TASKS + +function succeed(value) +{ + return { + ctor: '_Task_succeed', + value: value + }; +} + +function fail(error) +{ + return { + ctor: '_Task_fail', + value: error + }; +} + +function nativeBinding(callback) +{ + return { + ctor: '_Task_nativeBinding', + callback: callback, + cancel: null + }; +} + +function andThen(callback, task) +{ + return { + ctor: '_Task_andThen', + callback: callback, + task: task + }; +} + +function onError(callback, task) +{ + return { + ctor: '_Task_onError', + callback: callback, + task: task + }; +} + +function receive(callback) +{ + return { + ctor: '_Task_receive', + callback: callback + }; +} + + +// PROCESSES + +function rawSpawn(task) +{ + var process = { + ctor: '_Process', + id: _elm_lang$core$Native_Utils.guid(), + root: task, + stack: null, + mailbox: [] + }; + + enqueue(process); + + return process; +} + +function spawn(task) +{ + return nativeBinding(function(callback) { + var process = rawSpawn(task); + callback(succeed(process)); }); -var _elm_lang$core$Result$Ok = function (a) { - return {ctor: 'Ok', _0: a}; -}; -var _elm_lang$core$Result$map = F2( - function (func, ra) { - var _p3 = ra; - if (_p3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - func(_p3._0)); - } else { - return _elm_lang$core$Result$Err(_p3._0); - } +} + +function rawSend(process, msg) +{ + process.mailbox.push(msg); + enqueue(process); +} + +function send(process, msg) +{ + return nativeBinding(function(callback) { + rawSend(process, msg); + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); }); -var _elm_lang$core$Result$map2 = F3( - function (func, ra, rb) { - var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; - if (_p4._0.ctor === 'Ok') { - if (_p4._1.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A2(func, _p4._0._0, _p4._1._0)); - } else { - return _elm_lang$core$Result$Err(_p4._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p4._0._0); +} + +function kill(process) +{ + return nativeBinding(function(callback) { + var root = process.root; + if (root.ctor === '_Task_nativeBinding' && root.cancel) + { + root.cancel(); } + + process.root = null; + + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); }); -var _elm_lang$core$Result$map3 = F4( - function (func, ra, rb, rc) { - var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; - if (_p5._0.ctor === 'Ok') { - if (_p5._1.ctor === 'Ok') { - if (_p5._2.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); - } else { - return _elm_lang$core$Result$Err(_p5._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._0._0); - } +} + +function sleep(time) +{ + return nativeBinding(function(callback) { + var id = setTimeout(function() { + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }, time); + + return function() { clearTimeout(id); }; }); -var _elm_lang$core$Result$map4 = F5( - function (func, ra, rb, rc, rd) { - var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; - if (_p6._0.ctor === 'Ok') { - if (_p6._1.ctor === 'Ok') { - if (_p6._2.ctor === 'Ok') { - if (_p6._3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); - } else { - return _elm_lang$core$Result$Err(_p6._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._1._0); +} + + +// STEP PROCESSES + +function step(numSteps, process) +{ + while (numSteps < MAX_STEPS) + { + var ctor = process.root.ctor; + + if (ctor === '_Task_succeed') + { + while (process.stack && process.stack.ctor === '_Task_onError') + { + process.stack = process.stack.rest; } - } else { - return _elm_lang$core$Result$Err(_p6._0._0); - } - }); -var _elm_lang$core$Result$map5 = F6( - function (func, ra, rb, rc, rd, re) { - var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; - if (_p7._0.ctor === 'Ok') { - if (_p7._1.ctor === 'Ok') { - if (_p7._2.ctor === 'Ok') { - if (_p7._3.ctor === 'Ok') { - if (_p7._4.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); - } else { - return _elm_lang$core$Result$Err(_p7._4._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._1._0); + if (process.stack === null) + { + break; } - } else { - return _elm_lang$core$Result$Err(_p7._0._0); - } - }); -var _elm_lang$core$Result$mapError = F2( - function (f, result) { - var _p8 = result; - if (_p8.ctor === 'Ok') { - return _elm_lang$core$Result$Ok(_p8._0); - } else { - return _elm_lang$core$Result$Err( - f(_p8._0)); - } - }); -var _elm_lang$core$Result$fromMaybe = F2( - function (err, maybe) { - var _p9 = maybe; - if (_p9.ctor === 'Just') { - return _elm_lang$core$Result$Ok(_p9._0); - } else { - return _elm_lang$core$Result$Err(err); + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; } - }); -var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; -var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; -var _elm_lang$core$Task$spawnCmd = F2( - function (router, _p0) { - var _p1 = _p0; - return _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Platform$sendToApp(router), - _p1._0)); - }); + if (ctor === '_Task_fail') + { + while (process.stack && process.stack.ctor === '_Task_andThen') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_andThen') + { + process.stack = { + ctor: '_Task_andThen', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_onError') + { + process.stack = { + ctor: '_Task_onError', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_nativeBinding') + { + process.root.cancel = process.root.callback(function(newRoot) { + process.root = newRoot; + enqueue(process); + }); + + break; + } + + if (ctor === '_Task_receive') + { + var mailbox = process.mailbox; + if (mailbox.length === 0) + { + break; + } + + process.root = process.root.callback(mailbox.shift()); + ++numSteps; + continue; + } + + throw new Error(ctor); + } + + if (numSteps < MAX_STEPS) + { + return numSteps + 1; + } + enqueue(process); + + return numSteps; +} + + +// WORK QUEUE + +var working = false; +var workQueue = []; + +function enqueue(process) +{ + workQueue.push(process); + + if (!working) + { + setTimeout(work, 0); + working = true; + } +} + +function work() +{ + var numSteps = 0; + var process; + while (numSteps < MAX_STEPS && (process = workQueue.shift())) + { + if (process.root) + { + numSteps = step(numSteps, process); + } + } + if (!process) + { + working = false; + return; + } + setTimeout(work, 0); +} + + +return { + succeed: succeed, + fail: fail, + nativeBinding: nativeBinding, + andThen: F2(andThen), + onError: F2(onError), + receive: receive, + + spawn: spawn, + kill: kill, + sleep: sleep, + send: F2(send), + + rawSpawn: rawSpawn, + rawSend: rawSend +}; + +}(); +var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; +_elm_lang$core$Platform_Cmd_ops['!'] = F2( + function (model, commands) { + return { + ctor: '_Tuple2', + _0: model, + _1: _elm_lang$core$Platform_Cmd$batch(commands) + }; + }); +var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; + +var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; + +var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; +var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; +var _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags; +var _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program; +var _elm_lang$core$Platform$Program = {ctor: 'Program'}; +var _elm_lang$core$Platform$Task = {ctor: 'Task'}; +var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; +var _elm_lang$core$Platform$Router = {ctor: 'Router'}; + + +/* + * Copyright (c) 2010 Mozilla Corporation + * Copyright (c) 2010 Vladimir Vukicevic + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * File: mjs + * + * Vector and Matrix math utilities for JavaScript, optimized for WebGL. + * Edited to work with the Elm Programming Language + */ + +var _elm_community$linear_algebra$Native_Math_Vector2 = function() { + + var MJS_FLOAT_ARRAY_TYPE = Float32Array; + + var V2 = { }; + + if (MJS_FLOAT_ARRAY_TYPE == Array) { + V2.$ = function V2_$(x, y) { + return [x, y]; + }; + } else { + V2.$ = function V2_$(x, y) { + return new MJS_FLOAT_ARRAY_TYPE([x, y]); + }; + } + + V2.getX = function V2_getX(a) { + return a[0]; + } + V2.getY = function V2_getY(a) { + return a[1]; + } + V2.setX = function V2_setX(x, a) { + return new MJS_FLOAT_ARRAY_TYPE([x, a[1]]); + } + V2.setY = function V2_setY(y, a) { + return new MJS_FLOAT_ARRAY_TYPE([a[0], y]); + } + + V2.toTuple = function V2_toTuple(a) { + return { + ctor:"_Tuple2", + _0:a[0], + _1:a[1] + }; + }; + V2.fromTuple = function V2_fromTuple(t) { + return new MJS_FLOAT_ARRAY_TYPE([t._0, t._1]); + }; + + V2.toRecord = function V2_toRecord(a) { + return { + _:{}, + x:a[0], + y:a[1] + }; + }; + V2.fromRecord = function V2_fromRecord(r) { + return new MJS_FLOAT_ARRAY_TYPE([r.x, r.y]); + }; + + V2.add = function V2_add(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] + b[0]; + r[1] = a[1] + b[1]; + return r; + }; + + V2.sub = function V2_sub(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] - b[0]; + r[1] = a[1] - b[1]; + return r; + }; + + V2.neg = function V2_neg(a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = - a[0]; + r[1] = - a[1]; + return r; + }; + + V2.direction = function V2_direction(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] - b[0]; + r[1] = a[1] - b[1]; + var im = 1.0 / V2.length(r); + r[0] = r[0] * im; + r[1] = r[1] * im; + return r; + }; + + V2.length = function V2_length(a) { + return Math.sqrt(a[0]*a[0] + a[1]*a[1]); + }; + + V2.lengthSquared = function V2_lengthSquared(a) { + return a[0]*a[0] + a[1]*a[1]; + }; + + V2.distance = function V2_distance(a, b) { + var dx = a[0] - b[0]; + var dy = a[1] - b[1]; + return Math.sqrt(dx * dx + dy * dy); + }; + + V2.distanceSquared = function V2_distanceSquared(a, b) { + var dx = a[0] - b[0]; + var dy = a[1] - b[1]; + return dx * dx + dy * dy; + }; + + V2.normalize = function V2_normalize(a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + var im = 1.0 / V2.length(a); + r[0] = a[0] * im; + r[1] = a[1] * im; + return r; + }; + + V2.scale = function V2_scale(k, a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] * k; + r[1] = a[1] * k; + return r; + }; + + V2.dot = function V2_dot(a, b) { + return a[0] * b[0] + a[1] * b[1]; + }; + + return { + vec2: F2(V2.$), + getX: V2.getX, + getY: V2.getY, + setX: F2(V2.setX), + setY: F2(V2.setY), + toTuple: V2.toTuple, + toRecord: V2.toRecord, + fromTuple: V2.fromTuple, + fromRecord: V2.fromRecord, + add: F2(V2.add), + sub: F2(V2.sub), + neg: V2.neg, + direction: F2(V2.direction), + length: V2.length, + lengthSquared: V2.lengthSquared, + distance: F2(V2.distance), + distanceSquared: F2(V2.distanceSquared), + normalize: V2.normalize, + scale: F2(V2.scale), + dot: F2(V2.dot) + }; + +}(); + +var _elm_community$linear_algebra$Math_Vector2$dot = _elm_community$linear_algebra$Native_Math_Vector2.dot; +var _elm_community$linear_algebra$Math_Vector2$scale = _elm_community$linear_algebra$Native_Math_Vector2.scale; +var _elm_community$linear_algebra$Math_Vector2$normalize = _elm_community$linear_algebra$Native_Math_Vector2.normalize; +var _elm_community$linear_algebra$Math_Vector2$distanceSquared = _elm_community$linear_algebra$Native_Math_Vector2.distanceSquared; +var _elm_community$linear_algebra$Math_Vector2$distance = _elm_community$linear_algebra$Native_Math_Vector2.distance; +var _elm_community$linear_algebra$Math_Vector2$lengthSquared = _elm_community$linear_algebra$Native_Math_Vector2.lengthSquared; +var _elm_community$linear_algebra$Math_Vector2$length = _elm_community$linear_algebra$Native_Math_Vector2.length; +var _elm_community$linear_algebra$Math_Vector2$direction = _elm_community$linear_algebra$Native_Math_Vector2.direction; +var _elm_community$linear_algebra$Math_Vector2$negate = _elm_community$linear_algebra$Native_Math_Vector2.neg; +var _elm_community$linear_algebra$Math_Vector2$sub = _elm_community$linear_algebra$Native_Math_Vector2.sub; +var _elm_community$linear_algebra$Math_Vector2$add = _elm_community$linear_algebra$Native_Math_Vector2.add; +var _elm_community$linear_algebra$Math_Vector2$fromRecord = _elm_community$linear_algebra$Native_Math_Vector2.fromRecord; +var _elm_community$linear_algebra$Math_Vector2$fromTuple = _elm_community$linear_algebra$Native_Math_Vector2.fromTuple; +var _elm_community$linear_algebra$Math_Vector2$toRecord = _elm_community$linear_algebra$Native_Math_Vector2.toRecord; +var _elm_community$linear_algebra$Math_Vector2$toTuple = _elm_community$linear_algebra$Native_Math_Vector2.toTuple; +var _elm_community$linear_algebra$Math_Vector2$setY = _elm_community$linear_algebra$Native_Math_Vector2.setY; +var _elm_community$linear_algebra$Math_Vector2$setX = _elm_community$linear_algebra$Native_Math_Vector2.setX; +var _elm_community$linear_algebra$Math_Vector2$getY = _elm_community$linear_algebra$Native_Math_Vector2.getY; +var _elm_community$linear_algebra$Math_Vector2$getX = _elm_community$linear_algebra$Native_Math_Vector2.getX; +var _elm_community$linear_algebra$Math_Vector2$vec2 = _elm_community$linear_algebra$Native_Math_Vector2.vec2; +var _elm_community$linear_algebra$Math_Vector2$Vec2 = {ctor: 'Vec2'}; + +var _elm_lang$animation_frame$Native_AnimationFrame = function() +{ + +function create() +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var id = requestAnimationFrame(function() { + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); + }); + + return function() { + cancelAnimationFrame(id); + }; + }); +} + +return { + create: create +}; + +}(); + +var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; +var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; +var _elm_lang$core$Task$spawnCmd = F2( + function (router, _p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToApp(router), + _p1._0)); + }); var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; var _elm_lang$core$Task$mapError = F2( function (convert, task) { @@ -3943,1554 +3590,2305 @@ var _elm_lang$core$Task$cmdMap = F2( }); _elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; -//import Native.Utils // - -var _elm_lang$core$Native_Debug = function() { - -function log(tag, value) -{ - var msg = tag + ': ' + _elm_lang$core$Native_Utils.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); -} - -return { - crash: crash, - log: F2(log) +var _elm_lang$core$Dict$foldr = F3( + function (f, acc, t) { + foldr: + while (true) { + var _p0 = t; + if (_p0.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v1 = f, + _v2 = A3( + f, + _p0._1, + _p0._2, + A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), + _v3 = _p0._3; + f = _v1; + acc = _v2; + t = _v3; + continue foldr; + } + } + }); +var _elm_lang$core$Dict$keys = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, keyList) { + return {ctor: '::', _0: key, _1: keyList}; + }), + {ctor: '[]'}, + dict); }; - -}(); -//import Maybe, Native.List, Native.Utils, Result // - -var _elm_lang$core$Native_String = function() { - -function isEmpty(str) -{ - return str.length === 0; -} -function cons(chr, str) -{ - return chr + str; -} -function uncons(str) -{ - var hd = str[0]; - if (hd) - { - return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1))); +var _elm_lang$core$Dict$values = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, valueList) { + return {ctor: '::', _0: value, _1: valueList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$toList = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, list) { + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: key, _1: value}, + _1: list + }; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$foldl = F3( + function (f, acc, dict) { + foldl: + while (true) { + var _p1 = dict; + if (_p1.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v5 = f, + _v6 = A3( + f, + _p1._1, + _p1._2, + A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), + _v7 = _p1._4; + f = _v5; + acc = _v6; + dict = _v7; + continue foldl; + } + } + }); +var _elm_lang$core$Dict$merge = F6( + function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { + var stepState = F3( + function (rKey, rValue, _p2) { + stepState: + while (true) { + var _p3 = _p2; + var _p9 = _p3._1; + var _p8 = _p3._0; + var _p4 = _p8; + if (_p4.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + var _p7 = _p4._1; + var _p6 = _p4._0._1; + var _p5 = _p4._0._0; + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { + var _v10 = rKey, + _v11 = rValue, + _v12 = { + ctor: '_Tuple2', + _0: _p7, + _1: A3(leftStep, _p5, _p6, _p9) + }; + rKey = _v10; + rValue = _v11; + _p2 = _v12; + continue stepState; + } else { + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + return { + ctor: '_Tuple2', + _0: _p7, + _1: A4(bothStep, _p5, _p6, rValue, _p9) + }; + } + } + } + } + }); + var _p10 = A3( + _elm_lang$core$Dict$foldl, + stepState, + { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$toList(leftDict), + _1: initialResult + }, + rightDict); + var leftovers = _p10._0; + var intermediateResult = _p10._1; + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p11, result) { + var _p12 = _p11; + return A3(leftStep, _p12._0, _p12._1, result); + }), + intermediateResult, + leftovers); + }); +var _elm_lang$core$Dict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Debug.crash( + _elm_lang$core$String$concat( + { + ctor: '::', + _0: 'Internal red-black tree invariant violated, expected ', + _1: { + ctor: '::', + _0: msg, + _1: { + ctor: '::', + _0: ' and got ', + _1: { + ctor: '::', + _0: _elm_lang$core$Basics$toString(c), + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: lgot, + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: rgot, + _1: { + ctor: '::', + _0: '\nPlease report this bug to ', + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + })); + }); +var _elm_lang$core$Dict$isBBlack = function (dict) { + var _p13 = dict; + _v14_2: + do { + if (_p13.ctor === 'RBNode_elm_builtin') { + if (_p13._0.ctor === 'BBlack') { + return true; + } else { + break _v14_2; + } + } else { + if (_p13._0.ctor === 'LBBlack') { + return true; + } else { + break _v14_2; + } + } + } while(false); + return false; +}; +var _elm_lang$core$Dict$sizeHelp = F2( + function (n, dict) { + sizeHelp: + while (true) { + var _p14 = dict; + if (_p14.ctor === 'RBEmpty_elm_builtin') { + return n; + } else { + var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), + _v17 = _p14._3; + n = _v16; + dict = _v17; + continue sizeHelp; + } + } + }); +var _elm_lang$core$Dict$size = function (dict) { + return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); +}; +var _elm_lang$core$Dict$get = F2( + function (targetKey, dict) { + get: + while (true) { + var _p15 = dict; + if (_p15.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); + switch (_p16.ctor) { + case 'LT': + var _v20 = targetKey, + _v21 = _p15._3; + targetKey = _v20; + dict = _v21; + continue get; + case 'EQ': + return _elm_lang$core$Maybe$Just(_p15._2); + default: + var _v22 = targetKey, + _v23 = _p15._4; + targetKey = _v22; + dict = _v23; + continue get; + } + } + } + }); +var _elm_lang$core$Dict$member = F2( + function (key, dict) { + var _p17 = A2(_elm_lang$core$Dict$get, key, dict); + if (_p17.ctor === 'Just') { + return true; + } else { + return false; + } + }); +var _elm_lang$core$Dict$maxWithDefault = F3( + function (k, v, r) { + maxWithDefault: + while (true) { + var _p18 = r; + if (_p18.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: k, _1: v}; + } else { + var _v26 = _p18._1, + _v27 = _p18._2, + _v28 = _p18._4; + k = _v26; + v = _v27; + r = _v28; + continue maxWithDefault; + } + } + }); +var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; +var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; +var _elm_lang$core$Dict$Black = {ctor: 'Black'}; +var _elm_lang$core$Dict$blackish = function (t) { + var _p19 = t; + if (_p19.ctor === 'RBNode_elm_builtin') { + var _p20 = _p19._0; + return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); + } else { + return true; } - return _elm_lang$core$Maybe$Nothing; -} -function append(a, b) -{ - return a + b; -} -function concat(strs) -{ - return _elm_lang$core$Native_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(_elm_lang$core$Native_Utils.chr(out[i])); +}; +var _elm_lang$core$Dict$Red = {ctor: 'Red'}; +var _elm_lang$core$Dict$moreBlack = function (color) { + var _p21 = color; + switch (_p21.ctor) { + case 'Black': + return _elm_lang$core$Dict$BBlack; + case 'Red': + return _elm_lang$core$Dict$Black; + case 'NBlack': + return _elm_lang$core$Dict$Red; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); } - return out.join(''); -} -function filter(pred, str) -{ - return str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join(''); -} -function reverse(str) +}; +var _elm_lang$core$Dict$lessBlack = function (color) { + var _p22 = color; + switch (_p22.ctor) { + case 'BBlack': + return _elm_lang$core$Dict$Black; + case 'Black': + return _elm_lang$core$Dict$Red; + case 'Red': + return _elm_lang$core$Dict$NBlack; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + } +}; +var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; +var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; +var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { + return {ctor: 'RBEmpty_elm_builtin', _0: a}; +}; +var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); +var _elm_lang$core$Dict$isEmpty = function (dict) { + return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); +}; +var _elm_lang$core$Dict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; + }); +var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { + var _p23 = dict; + if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } else { + return dict; + } +}; +var _elm_lang$core$Dict$lessBlackTree = function (dict) { + var _p24 = dict; + if (_p24.ctor === 'RBNode_elm_builtin') { + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(_p24._0), + _p24._1, + _p24._2, + _p24._3, + _p24._4); + } else { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } +}; +var _elm_lang$core$Dict$balancedTree = 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( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(col), + yk, + yv, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; +}; +var _elm_lang$core$Dict$blacken = function (t) { + var _p25 = t; + if (_p25.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); + } +}; +var _elm_lang$core$Dict$redden = function (t) { + var _p26 = t; + if (_p26.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); + } +}; +var _elm_lang$core$Dict$balanceHelp = function (tree) { + var _p27 = tree; + _v36_6: + do { + _v36_5: + do { + _v36_4: + do { + _v36_3: + do { + _v36_2: + do { + _v36_1: + do { + _v36_0: + do { + if (_p27.ctor === 'RBNode_elm_builtin') { + if (_p27._3.ctor === 'RBNode_elm_builtin') { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._3._0.ctor) { + case 'Red': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + } + } + case 'NBlack': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + } + } + default: + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + } + case 'NBlack': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } + case 'NBlack': + if (_p27._0.ctor === 'BBlack') { + if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + default: + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + default: + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + switch (_p27._3._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._4._3._1, + _p27._4._3._2, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._4._1, + _p27._4._2, + _p27._4._3._4, + _elm_lang$core$Dict$redden(_p27._4._4))); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._3._4._1, + _p27._3._4._2, + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._3._1, + _p27._3._2, + _elm_lang$core$Dict$redden(_p27._3._3), + _p27._3._4._3), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); + } while(false); + return tree; +}; +var _elm_lang$core$Dict$balance = F5( + function (c, k, v, l, r) { + var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; + }); +var _elm_lang$core$Dict$bubble = F5( + function (c, k, v, l, r) { + return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$moreBlack(c), + k, + v, + _elm_lang$core$Dict$lessBlackTree(l), + _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _elm_lang$core$Dict$removeMax = F5( + function (c, k, v, l, r) { + var _p28 = r; + if (_p28.ctor === 'RBEmpty_elm_builtin') { + return A3(_elm_lang$core$Dict$rem, c, l, r); + } else { + return A5( + _elm_lang$core$Dict$bubble, + c, + k, + v, + l, + A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + } + }); +var _elm_lang$core$Dict$rem = F3( + function (color, left, right) { + var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; + if (_p29._0.ctor === 'RBEmpty_elm_builtin') { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p30 = color; + switch (_p30.ctor) { + case 'Red': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + case 'Black': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); + default: + return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p33 = _p29._1._0; + var _p32 = _p29._0._0; + var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; + if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/LBlack/Red', + color, + _elm_lang$core$Basics$toString(_p32), + _elm_lang$core$Basics$toString(_p33)); + } + } + } else { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p36 = _p29._1._0; + var _p35 = _p29._0._0; + var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/Red/LBlack', + color, + _elm_lang$core$Basics$toString(_p35), + _elm_lang$core$Basics$toString(_p36)); + } + } else { + var _p40 = _p29._0._2; + var _p39 = _p29._0._4; + var _p38 = _p29._0._1; + var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); + var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); + var k = _p37._0; + var v = _p37._1; + return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); + } + } + }); +var _elm_lang$core$Dict$map = F2( + function (f, dict) { + var _p41 = dict; + if (_p41.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + var _p42 = _p41._1; + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _p41._0, + _p42, + A2(f, _p42, _p41._2), + A2(_elm_lang$core$Dict$map, f, _p41._3), + A2(_elm_lang$core$Dict$map, f, _p41._4)); + } + }); +var _elm_lang$core$Dict$Same = {ctor: 'Same'}; +var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; +var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; +var _elm_lang$core$Dict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p43 = dict; + if (_p43.ctor === 'RBEmpty_elm_builtin') { + var _p44 = alter(_elm_lang$core$Maybe$Nothing); + if (_p44.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) + }; + } + } else { + var _p55 = _p43._2; + var _p54 = _p43._4; + var _p53 = _p43._3; + var _p52 = _p43._1; + var _p51 = _p43._0; + var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); + switch (_p45.ctor) { + case 'EQ': + var _p46 = alter( + _elm_lang$core$Maybe$Just(_p55)); + if (_p46.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) + }; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) + }; + } + case 'LT': + var _p47 = up(_p53); + var flag = _p47._0; + var newLeft = _p47._1; + var _p48 = flag; + switch (_p48.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) + }; + } + default: + var _p49 = up(_p54); + var flag = _p49._0; + var newRight = _p49._1; + var _p50 = flag; + switch (_p50.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) + }; + } + } + } + }; + var _p56 = up(dict); + var flag = _p56._0; + var updatedDict = _p56._1; + var _p57 = flag; + switch (_p57.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); + default: + return _elm_lang$core$Dict$blacken(updatedDict); + } + }); +var _elm_lang$core$Dict$insert = F3( + function (key, value, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _elm_lang$core$Dict$singleton = F2( + function (key, value) { + return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); + }); +var _elm_lang$core$Dict$union = F2( + function (t1, t2) { + return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); + }); +var _elm_lang$core$Dict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; + }); + return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); + }); +var _elm_lang$core$Dict$intersect = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p58) { + return A2(_elm_lang$core$Dict$member, k, t2); + }), + t1); + }); +var _elm_lang$core$Dict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p59) { + var _p60 = _p59; + var _p62 = _p60._1; + var _p61 = _p60._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), + _1: _p62 + } : { + ctor: '_Tuple2', + _0: _p61, + _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) + }; + }); + return A3( + _elm_lang$core$Dict$foldl, + add, + {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, + dict); + }); +var _elm_lang$core$Dict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); + }), + _elm_lang$core$Dict$empty, + assocs); +}; +var _elm_lang$core$Dict$remove = F2( + function (key, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _elm_lang$core$Dict$diff = F2( + function (t1, t2) { + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, v, t) { + return A2(_elm_lang$core$Dict$remove, k, t); + }), + t1, + t2); + }); + +//import Native.Scheduler // + +var _elm_lang$core$Native_Time = function() { + +var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - return str.split('').reverse().join(''); -} -function foldl(f, b, str) + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); +}); + +function setInterval_(interval, task) { - var len = str.length; - for (var i = 0; i < len; ++i) + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); - } - return b; + var id = setInterval(function() { + _elm_lang$core$Native_Scheduler.rawSpawn(task); + }, interval); + + return function() { clearInterval(id); }; + }); } -function foldr(f, b, str) + +return { + now: now, + setInterval_: F2(setInterval_) +}; + +}(); +var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; +var _elm_lang$core$Time$spawnHelp = F3( + function (router, intervals, processes) { + var _p0 = intervals; + if (_p0.ctor === '[]') { + return _elm_lang$core$Task$succeed(processes); + } else { + var _p1 = _p0._0; + var spawnRest = function (id) { + return A3( + _elm_lang$core$Time$spawnHelp, + router, + _p0._1, + A3(_elm_lang$core$Dict$insert, _p1, id, processes)); + }; + var spawnTimer = _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Time$setInterval, + _p1, + A2(_elm_lang$core$Platform$sendToSelf, router, _p1))); + return A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer); + } + }); +var _elm_lang$core$Time$addMySub = F2( + function (_p2, state) { + var _p3 = _p2; + var _p6 = _p3._1; + var _p5 = _p3._0; + var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); + if (_p4.ctor === 'Nothing') { + return A3( + _elm_lang$core$Dict$insert, + _p5, + { + ctor: '::', + _0: _p6, + _1: {ctor: '[]'} + }, + state); + } else { + return A3( + _elm_lang$core$Dict$insert, + _p5, + {ctor: '::', _0: _p6, _1: _p4._0}, + state); + } + }); +var _elm_lang$core$Time$inMilliseconds = function (t) { + return t; +}; +var _elm_lang$core$Time$millisecond = 1; +var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; +var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; +var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; +var _elm_lang$core$Time$inHours = function (t) { + return t / _elm_lang$core$Time$hour; +}; +var _elm_lang$core$Time$inMinutes = function (t) { + return t / _elm_lang$core$Time$minute; +}; +var _elm_lang$core$Time$inSeconds = function (t) { + return t / _elm_lang$core$Time$second; +}; +var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; +var _elm_lang$core$Time$onSelfMsg = F3( + function (router, interval, state) { + var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); + if (_p7.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var tellTaggers = function (time) { + return _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(time)); + }, + _p7._0)); + }; + return A2( + _elm_lang$core$Task$andThen, + function (_p8) { + return _elm_lang$core$Task$succeed(state); + }, + A2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now)); + } + }); +var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); +var _elm_lang$core$Time$State = F2( + function (a, b) { + return {taggers: a, processes: b}; + }); +var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); +var _elm_lang$core$Time$onEffects = F3( + function (router, subs, _p9) { + var _p10 = _p9; + var rightStep = F3( + function (_p12, id, _p11) { + var _p13 = _p11; + return { + ctor: '_Tuple3', + _0: _p13._0, + _1: _p13._1, + _2: A2( + _elm_lang$core$Task$andThen, + function (_p14) { + return _p13._2; + }, + _elm_lang$core$Native_Scheduler.kill(id)) + }; + }); + var bothStep = F4( + function (interval, taggers, id, _p15) { + var _p16 = _p15; + return { + ctor: '_Tuple3', + _0: _p16._0, + _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), + _2: _p16._2 + }; + }); + var leftStep = F3( + function (interval, taggers, _p17) { + var _p18 = _p17; + return { + ctor: '_Tuple3', + _0: {ctor: '::', _0: interval, _1: _p18._0}, + _1: _p18._1, + _2: _p18._2 + }; + }); + var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); + var _p19 = A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + newTaggers, + _p10.processes, + { + ctor: '_Tuple3', + _0: {ctor: '[]'}, + _1: _elm_lang$core$Dict$empty, + _2: _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}) + }); + var spawnList = _p19._0; + var existingDict = _p19._1; + var killTask = _p19._2; + return A2( + _elm_lang$core$Task$andThen, + function (newProcesses) { + return _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p20) { + return A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict); + }, + killTask)); + }); +var _elm_lang$core$Time$Every = F2( + function (a, b) { + return {ctor: 'Every', _0: a, _1: b}; + }); +var _elm_lang$core$Time$every = F2( + function (interval, tagger) { + return _elm_lang$core$Time$subscription( + A2(_elm_lang$core$Time$Every, interval, tagger)); + }); +var _elm_lang$core$Time$subMap = F2( + function (f, _p21) { + var _p22 = _p21; + return A2( + _elm_lang$core$Time$Every, + _p22._0, + function (_p23) { + return f( + _p22._1(_p23)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; + +var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; +var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; +var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; + +var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.create( + {ctor: '_Tuple0'}); +var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame'); +var _elm_lang$animation_frame$AnimationFrame$State = F3( + function (a, b, c) { + return {subs: a, request: b, oldTime: c}; + }); +var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + 0)); +var _elm_lang$animation_frame$AnimationFrame$onEffects = F3( + function (router, subs, _p0) { + var _p1 = _p0; + var _p5 = _p1.request; + var _p4 = _p1.oldTime; + var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs}; + if (_p2._0.ctor === 'Nothing') { + if (_p2._1.ctor === '[]') { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + _p4)); + } else { + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + function (time) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + subs, + _elm_lang$core$Maybe$Just(pid), + time)); + }, + _elm_lang$core$Time$now); + }, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$animation_frame$AnimationFrame$rAF))); + } + } else { + if (_p2._1.ctor === '[]') { + return A2( + _elm_lang$core$Task$andThen, + function (_p3) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + _p4)); + }, + _elm_lang$core$Process$kill(_p2._0._0)); + } else { + return _elm_lang$core$Task$succeed( + A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4)); + } + } + }); +var _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3( + function (router, newTime, _p6) { + var _p7 = _p6; + var _p10 = _p7.subs; + var diff = newTime - _p7.oldTime; + var send = function (sub) { + var _p8 = sub; + if (_p8.ctor === 'Time') { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(newTime)); + } else { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(diff)); + } + }; + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + function (_p9) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + _p10, + _elm_lang$core$Maybe$Just(pid), + newTime)); + }, + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p10))); + }, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$animation_frame$AnimationFrame$rAF))); + }); +var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) { + return {ctor: 'Diff', _0: a}; +}; +var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Diff(tagger)); +}; +var _elm_lang$animation_frame$AnimationFrame$Time = function (a) { + return {ctor: 'Time', _0: a}; +}; +var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Time(tagger)); +}; +var _elm_lang$animation_frame$AnimationFrame$subMap = F2( + function (func, sub) { + var _p11 = sub; + if (_p11.ctor === 'Time') { + return _elm_lang$animation_frame$AnimationFrame$Time( + function (_p12) { + return func( + _p11._0(_p12)); + }); + } else { + return _elm_lang$animation_frame$AnimationFrame$Diff( + function (_p13) { + return func( + _p11._0(_p13)); + }); + } + }); +_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap}; + +//import Native.List // + +var _elm_lang$core$Native_Array = function() { + +// 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: [] +}; + + +function get(i, array) { - for (var i = str.length; i--; ) + if (i < 0 || i >= length(array)) { - b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b); + throw new Error( + 'Index ' + i + ' is out of range. Check the length of ' + + 'your array first or use getMaybe or getWithDefault.'); } - return b; -} -function split(sep, str) -{ - return _elm_lang$core$Native_List.fromArray(str.split(sep)); -} -function join(sep, strs) -{ - return _elm_lang$core$Native_List.toArray(strs).join(sep); + return unsafeGet(i, array); } -function repeat(n, str) + + +function unsafeGet(i, array) { - var result = ''; - while (n > 0) + for (var x = array.height; x > 0; x--) { - if (n & 1) + var slot = i >> (x * 5); + while (array.lengths[slot] <= i) { - result += str; + slot++; } - n >>= 1, str += str; + if (slot > 0) + { + i -= array.lengths[slot - 1]; + } + array = array.table[slot]; } - 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; + return array.table[i]; } -function trim(str) -{ - return str.trim(); -} -function trimLeft(str) -{ - return str.replace(/^\s+/, ''); -} -function trimRight(str) -{ - return str.replace(/\s+$/, ''); -} -function words(str) -{ - return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g)); -} -function lines(str) +// Sets the value at the index i. Only the nodes leading to i will get +// copied and updated. +function set(i, item, array) { - return _elm_lang$core$Native_List.fromArray(str.split(/\r\n|\r|\n/g)); + if (i < 0 || length(array) <= i) + { + return array; + } + return unsafeSet(i, item, array); } -function toUpper(str) -{ - return str.toUpperCase(); -} -function toLower(str) -{ - return str.toLowerCase(); -} -function any(pred, str) +function unsafeSet(i, item, array) { - for (var i = str.length; i--; ) + array = nodeCopy(array); + + if (array.height === 0) { - if (pred(_elm_lang$core$Native_Utils.chr(str[i]))) - { - return true; - } + array.table[i] = item; } - return false; -} -function all(pred, str) -{ - for (var i = str.length; i--; ) + else { - if (!pred(_elm_lang$core$Native_Utils.chr(str[i]))) + var slot = getSlot(i, array); + if (slot > 0) { - return false; + i -= array.lengths[slot - 1]; } + array.table[slot] = unsafeSet(i, item, array.table[slot]); } - return true; + return array; } -function contains(sub, str) -{ - return str.indexOf(sub) > -1; -} -function startsWith(sub, str) -{ - return str.indexOf(sub) === 0; -} -function endsWith(sub, str) + +function initialize(len, f) { - return str.length >= sub.length && - str.lastIndexOf(sub) === str.length - sub.length; + if (len <= 0) + { + return empty; + } + var h = Math.floor( Math.log(len) / Math.log(M) ); + return initialize_(f, h, 0, len); } -function indexes(sub, str) -{ - var subLen = sub.length; - if (subLen < 1) +function initialize_(f, h, from, to) +{ + if (h === 0) { - return _elm_lang$core$Native_List.Nil; + 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 i = 0; - var is = []; - - while ((i = str.indexOf(sub, i)) > -1) + 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++) { - is.push(i); - i = i + subLen; + 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 _elm_lang$core$Native_List.fromArray(is); + return { + ctor: '_Array', + height: h, + table: table, + lengths: lengths + }; } - -function toInt(s) +function fromList(list) { - var len = s.length; - - // if empty - if (len === 0) + if (list.ctor === '[]') { - return intErr(s); + return empty; } - // if hex - var c = s[0]; - if (c === '0' && s[1] === 'x') + // Allocate M sized blocks (table) and write list elements to it. + var table = new Array(M); + var nodes = []; + var i = 0; + + while (list.ctor !== '[]') { - for (var i = 2; i < len; ++i) + 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 c = s[i]; - if (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) - { - continue; - } - return intErr(s); + var leaf = { + ctor: '_Array', + height: 0, + table: table + }; + fromListPush(leaf, nodes); + table = new Array(M); + i = 0; } - return _elm_lang$core$Result$Ok(parseInt(s, 16)); } - // is decimal - if (c > '9' || (c < '0' && c !== '-' && c !== '+')) + // Maybe there is something left on the table. + if (i > 0) { - return intErr(s); + var leaf = { + ctor: '_Array', + height: 0, + table: table.splice(0, i) + }; + fromListPush(leaf, nodes); } - for (var i = 1; i < len; ++i) + + // Go through all of the nodes and eventually push them into higher nodes. + for (var h = 0; h < nodes.length - 1; h++) { - var c = s[i]; - if (c < '0' || '9' < c) + if (nodes[h].table.length > 0) { - return intErr(s); + fromListPush(nodes[h], nodes); } } - return _elm_lang$core$Result$Ok(parseInt(s, 10)); + var head = nodes[nodes.length - 1]; + if (head.height > 0 && head.table.length === 1) + { + return head.table[0]; + } + else + { + return head; + } } -function intErr(s) +// Push a node into a higher node as a child. +function fromListPush(toPush, nodes) { - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int"); -} + 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: [], + lengths: [] + }; + nodes.push(node); + } -function toFloat(s) -{ - // check if it is a hex, octal, or binary number - if (s.length === 0 || /[\sxbo]/.test(s)) + nodes[h].table.push(toPush); + var len = length(toPush); + if (nodes[h].lengths.length > 0) { - return floatErr(s); + len += nodes[h].lengths[nodes[h].lengths.length - 1]; } - var n = +s; - // faster isNaN check - return n === n ? _elm_lang$core$Result$Ok(n) : floatErr(s); -} + nodes[h].lengths.push(len); -function floatErr(s) -{ - return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float"); + if (nodes[h].table.length === M) + { + fromListPush(nodes[h], nodes); + nodes[h] = { + ctor: '_Array', + height: h + 1, + table: [], + lengths: [] + }; + } } - -function toList(str) -{ - return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr)); -} -function fromList(chars) +// Pushes an item via push_ to the bottom right of a tree. +function push(item, a) { - return _elm_lang$core$Native_List.toArray(chars).join(''); -} - -return { - 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 -}; - -}(); + var pushed = push_(item, a); + if (pushed !== null) + { + return pushed; + } -var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; -var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; -var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; -var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; -var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; -var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; -var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; -var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; -var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; -var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; -var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; -var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; -var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; -var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; -var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; -var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; -var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; -var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; -var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; -var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; -var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; -var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; -var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; -var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; -var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; -var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; -var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; -var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; -var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; -var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; -var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; -var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; -var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; -var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; -var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; -var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; -var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; -var _elm_lang$core$String$fromChar = function ($char) { - return A2(_elm_lang$core$String$cons, $char, ''); -}; -var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; + var newTree = create(item, a.height); + return siblise(a, newTree); +} -var _elm_lang$core$Dict$foldr = F3( - function (f, acc, t) { - foldr: - while (true) { - var _p0 = t; - if (_p0.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v1 = f, - _v2 = A3( - f, - _p0._1, - _p0._2, - A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), - _v3 = _p0._3; - f = _v1; - acc = _v2; - t = _v3; - continue foldr; - } - } - }); -var _elm_lang$core$Dict$keys = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, keyList) { - return {ctor: '::', _0: key, _1: keyList}; - }), - {ctor: '[]'}, - dict); -}; -var _elm_lang$core$Dict$values = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, valueList) { - return {ctor: '::', _0: value, _1: valueList}; - }), - {ctor: '[]'}, - dict); -}; -var _elm_lang$core$Dict$toList = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, list) { - return { - ctor: '::', - _0: {ctor: '_Tuple2', _0: key, _1: value}, - _1: list - }; - }), - {ctor: '[]'}, - dict); -}; -var _elm_lang$core$Dict$foldl = F3( - function (f, acc, dict) { - foldl: - while (true) { - var _p1 = dict; - if (_p1.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v5 = f, - _v6 = A3( - f, - _p1._1, - _p1._2, - A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), - _v7 = _p1._4; - f = _v5; - acc = _v6; - dict = _v7; - continue foldl; - } +// 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; } - }); -var _elm_lang$core$Dict$merge = F6( - function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { - var stepState = F3( - function (rKey, rValue, _p2) { - stepState: - while (true) { - var _p3 = _p2; - var _p9 = _p3._1; - var _p8 = _p3._0; - var _p4 = _p8; - if (_p4.ctor === '[]') { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - var _p7 = _p4._1; - var _p6 = _p4._0._1; - var _p5 = _p4._0._0; - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { - var _v10 = rKey, - _v11 = rValue, - _v12 = { - ctor: '_Tuple2', - _0: _p7, - _1: A3(leftStep, _p5, _p6, _p9) - }; - rKey = _v10; - rValue = _v11; - _p2 = _v12; - continue stepState; - } else { - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - return { - ctor: '_Tuple2', - _0: _p7, - _1: A4(bothStep, _p5, _p6, rValue, _p9) - }; - } - } - } - } - }); - var _p10 = A3( - _elm_lang$core$Dict$foldl, - stepState, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$toList(leftDict), - _1: initialResult - }, - rightDict); - var leftovers = _p10._0; - var intermediateResult = _p10._1; - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p11, result) { - var _p12 = _p11; - return A3(leftStep, _p12._0, _p12._1, result); - }), - intermediateResult, - leftovers); - }); -var _elm_lang$core$Dict$reportRemBug = F4( - function (msg, c, lgot, rgot) { - return _elm_lang$core$Native_Debug.crash( - _elm_lang$core$String$concat( - { - ctor: '::', - _0: 'Internal red-black tree invariant violated, expected ', - _1: { - ctor: '::', - _0: msg, - _1: { - ctor: '::', - _0: ' and got ', - _1: { - ctor: '::', - _0: _elm_lang$core$Basics$toString(c), - _1: { - ctor: '::', - _0: '/', - _1: { - ctor: '::', - _0: lgot, - _1: { - ctor: '::', - _0: '/', - _1: { - ctor: '::', - _0: rgot, - _1: { - ctor: '::', - _0: '\nPlease report this bug to ', - _1: {ctor: '[]'} - } - } - } - } - } - } - } - } - })); - }); -var _elm_lang$core$Dict$isBBlack = function (dict) { - var _p13 = dict; - _v14_2: - do { - if (_p13.ctor === 'RBNode_elm_builtin') { - if (_p13._0.ctor === 'BBlack') { - return true; - } else { - break _v14_2; - } - } else { - if (_p13._0.ctor === 'LBBlack') { - return true; - } else { - break _v14_2; - } + else + { + return null; } - } while(false); - return false; -}; -var _elm_lang$core$Dict$sizeHelp = F2( - function (n, dict) { - sizeHelp: - while (true) { - var _p14 = dict; - if (_p14.ctor === 'RBEmpty_elm_builtin') { - return n; - } else { - var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), - _v17 = _p14._3; - n = _v16; - dict = _v17; - continue sizeHelp; - } + } + + // 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_(_elm_lang$core$Native_List.Nil, a); +} + +function toList_(list, a) +{ + for (var i = a.table.length - 1; i >= 0; i--) + { + list = + a.height === 0 + ? _elm_lang$core$Native_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 ? from : from + 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); } - }); -var _elm_lang$core$Dict$size = function (dict) { - return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); -}; -var _elm_lang$core$Dict$get = F2( - function (targetKey, dict) { - get: - while (true) { - var _p15 = dict; - if (_p15.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Maybe$Nothing; - } else { - var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); - switch (_p16.ctor) { - case 'LT': - var _v20 = targetKey, - _v21 = _p15._3; - targetKey = _v20; - dict = _v21; - continue get; - case 'EQ': - return _elm_lang$core$Maybe$Just(_p15._2); - default: - var _v22 = targetKey, - _v23 = _p15._4; - targetKey = _v22; - dict = _v23; - continue get; - } - } + } + else + { + for (var i = 0; i < a.table.length; i++) + { + b = foldl(f, b, a.table[i]); } - }); -var _elm_lang$core$Dict$member = F2( - function (key, dict) { - var _p17 = A2(_elm_lang$core$Dict$get, key, dict); - if (_p17.ctor === 'Just') { - return true; - } else { - return false; + } + 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); } - }); -var _elm_lang$core$Dict$maxWithDefault = F3( - function (k, v, r) { - maxWithDefault: - while (true) { - var _p18 = r; - if (_p18.ctor === 'RBEmpty_elm_builtin') { - return {ctor: '_Tuple2', _0: k, _1: v}; - } else { - var _v26 = _p18._1, - _v27 = _p18._2, - _v28 = _p18._4; - k = _v26; - v = _v27; - r = _v28; - continue maxWithDefault; - } + } + else + { + for (var i = a.table.length; i--; ) + { + b = foldr(f, b, a.table[i]); } - }); -var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; -var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; -var _elm_lang$core$Dict$Black = {ctor: 'Black'}; -var _elm_lang$core$Dict$blackish = function (t) { - var _p19 = t; - if (_p19.ctor === 'RBNode_elm_builtin') { - var _p20 = _p19._0; - return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); - } else { - return true; } -}; -var _elm_lang$core$Dict$Red = {ctor: 'Red'}; -var _elm_lang$core$Dict$moreBlack = function (color) { - var _p21 = color; - switch (_p21.ctor) { - case 'Black': - return _elm_lang$core$Dict$BBlack; - case 'Red': - return _elm_lang$core$Dict$Black; - case 'NBlack': - return _elm_lang$core$Dict$Red; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); + 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); } -}; -var _elm_lang$core$Dict$lessBlack = function (color) { - var _p22 = color; - switch (_p22.ctor) { - case 'BBlack': - return _elm_lang$core$Dict$Black; - case 'Black': - return _elm_lang$core$Dict$Red; - case 'Red': - return _elm_lang$core$Dict$NBlack; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + if (to < 0) + { + to += length(a); } -}; -var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; -var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; -var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { - return {ctor: 'RBEmpty_elm_builtin', _0: a}; -}; -var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); -var _elm_lang$core$Dict$isEmpty = function (dict) { - return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); -}; -var _elm_lang$core$Dict$RBNode_elm_builtin = F5( - function (a, b, c, d, e) { - return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; - }); -var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { - var _p23 = dict; - if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); - } else { - return dict; + return sliceLeft(from, sliceRight(to, a)); +} + +function sliceRight(to, a) +{ + if (to === length(a)) + { + return a; } -}; -var _elm_lang$core$Dict$lessBlackTree = function (dict) { - var _p24 = dict; - if (_p24.ctor === 'RBNode_elm_builtin') { - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(_p24._0), - _p24._1, - _p24._2, - _p24._3, - _p24._4); - } else { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + + // Handle leaf level. + if (a.height === 0) + { + var newA = { ctor:'_Array', height:0 }; + newA.table = a.table.slice(0, to); + return newA; } -}; -var _elm_lang$core$Dict$balancedTree = 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( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(col), - yk, - yv, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); - }; - }; - }; - }; - }; - }; - }; - }; - }; + + // 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) }; -}; -var _elm_lang$core$Dict$blacken = function (t) { - var _p25 = t; - if (_p25.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); + if (sliced.table.length > 0) + { + newA.table[right] = sliced; + newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0); } -}; -var _elm_lang$core$Dict$redden = function (t) { - var _p26 = t; - if (_p26.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); + 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; } -}; -var _elm_lang$core$Dict$balanceHelp = function (tree) { - var _p27 = tree; - _v36_6: - do { - _v36_5: - do { - _v36_4: - do { - _v36_3: - do { - _v36_2: - do { - _v36_1: - do { - _v36_0: - do { - if (_p27.ctor === 'RBNode_elm_builtin') { - if (_p27._3.ctor === 'RBNode_elm_builtin') { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._3._0.ctor) { - case 'Red': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - } - } - case 'NBlack': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - } - } - default: - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - } - case 'NBlack': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } - case 'NBlack': - if (_p27._0.ctor === 'BBlack') { - if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - default: - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - default: - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - switch (_p27._3._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._4._3._1, - _p27._4._3._2, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._4._1, - _p27._4._2, - _p27._4._3._4, - _elm_lang$core$Dict$redden(_p27._4._4))); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._3._4._1, - _p27._3._4._2, - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._3._1, - _p27._3._2, - _elm_lang$core$Dict$redden(_p27._3._3), - _p27._3._4._3), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); - } while(false); - return tree; -}; -var _elm_lang$core$Dict$balance = F5( - function (c, k, v, l, r) { - var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; - }); -var _elm_lang$core$Dict$bubble = F5( - function (c, k, v, l, r) { - return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$moreBlack(c), - k, - v, - _elm_lang$core$Dict$lessBlackTree(l), - _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - }); -var _elm_lang$core$Dict$removeMax = F5( - function (c, k, v, l, r) { - var _p28 = r; - if (_p28.ctor === 'RBEmpty_elm_builtin') { - return A3(_elm_lang$core$Dict$rem, c, l, r); - } else { - return A5( - _elm_lang$core$Dict$bubble, - c, - k, - v, - l, - A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + + // 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]; } - }); -var _elm_lang$core$Dict$rem = F3( - function (color, left, right) { - var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; - if (_p29._0.ctor === 'RBEmpty_elm_builtin') { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p30 = color; - switch (_p30.ctor) { - case 'Red': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - case 'Black': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); - default: - return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); - } - } else { - var _p33 = _p29._1._0; - var _p32 = _p29._0._0; - var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; - if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/LBlack/Red', - color, - _elm_lang$core$Basics$toString(_p32), - _elm_lang$core$Basics$toString(_p33)); - } - } - } else { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p36 = _p29._1._0; - var _p35 = _p29._0._0; - var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; - if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/Red/LBlack', - color, - _elm_lang$core$Basics$toString(_p35), - _elm_lang$core$Basics$toString(_p36)); - } - } else { - var _p40 = _p29._0._2; - var _p39 = _p29._0._4; - var _p38 = _p29._0._1; - var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); - var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); - var k = _p37._0; - var v = _p37._1; - return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); + 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); } - }); -var _elm_lang$core$Dict$map = F2( - function (f, dict) { - var _p41 = dict; - if (_p41.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - var _p42 = _p41._1; - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _p41._0, - _p42, - A2(f, _p42, _p41._2), - A2(_elm_lang$core$Dict$map, f, _p41._3), - A2(_elm_lang$core$Dict$map, f, _p41._4)); + + return c[0]; + } + + if (c[0].height > 0) + { + var toRemove = calcToRemove(a, b); + if (toRemove > E) + { + c = shuffle(c[0], c[1], toRemove); } - }); -var _elm_lang$core$Dict$Same = {ctor: 'Same'}; -var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; -var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; -var _elm_lang$core$Dict$update = F3( - function (k, alter, dict) { - var up = function (dict) { - var _p43 = dict; - if (_p43.ctor === 'RBEmpty_elm_builtin') { - var _p44 = alter(_elm_lang$core$Maybe$Nothing); - if (_p44.ctor === 'Nothing') { - return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) - }; - } - } else { - var _p55 = _p43._2; - var _p54 = _p43._4; - var _p53 = _p43._3; - var _p52 = _p43._1; - var _p51 = _p43._0; - var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); - switch (_p45.ctor) { - case 'EQ': - var _p46 = alter( - _elm_lang$core$Maybe$Just(_p55)); - if (_p46.ctor === 'Nothing') { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) - }; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) - }; - } - case 'LT': - var _p47 = up(_p53); - var flag = _p47._0; - var newLeft = _p47._1; - var _p48 = flag; - switch (_p48.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) - }; - } - default: - var _p49 = up(_p54); - var flag = _p49._0; - var newRight = _p49._1; - var _p50 = flag; - switch (_p50.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) - }; - } - } - } - }; - var _p56 = up(dict); - var flag = _p56._0; - var updatedDict = _p56._1; - var _p57 = flag; - switch (_p57.ctor) { - case 'Same': - return updatedDict; - case 'Insert': - return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); - default: - return _elm_lang$core$Dict$blacken(updatedDict); + } + + 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]); } - }); -var _elm_lang$core$Dict$insert = F3( - function (key, value, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always( - _elm_lang$core$Maybe$Just(value)), - dict); - }); -var _elm_lang$core$Dict$singleton = F2( - function (key, value) { - return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); - }); -var _elm_lang$core$Dict$union = F2( - function (t1, t2) { - return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); - }); -var _elm_lang$core$Dict$filter = F2( - function (predicate, dictionary) { - var add = F3( - function (key, value, dict) { - return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; - }); - return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); - }); -var _elm_lang$core$Dict$intersect = F2( - function (t1, t2) { - return A2( - _elm_lang$core$Dict$filter, - F2( - function (k, _p58) { - return A2(_elm_lang$core$Dict$member, k, t2); - }), - t1); - }); -var _elm_lang$core$Dict$partition = F2( - function (predicate, dict) { - var add = F3( - function (key, value, _p59) { - var _p60 = _p59; - var _p62 = _p60._1; - var _p61 = _p60._0; - return A2(predicate, key, value) ? { - ctor: '_Tuple2', - _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), - _1: _p62 - } : { - ctor: '_Tuple2', - _0: _p61, - _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) - }; - }); - return A3( - _elm_lang$core$Dict$foldl, - add, - {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, - dict); - }); -var _elm_lang$core$Dict$fromList = function (assocs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p63, dict) { - var _p64 = _p63; - return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); - }), - _elm_lang$core$Dict$empty, - assocs); -}; -var _elm_lang$core$Dict$remove = F2( - function (key, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), - dict); - }); -var _elm_lang$core$Dict$diff = F2( - function (t1, t2) { - return A3( - _elm_lang$core$Dict$foldl, - F3( - function (k, v, t) { - return A2(_elm_lang$core$Dict$remove, k, t); - }), - t1, - t2); - }); + 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); -//import Native.Scheduler // + // 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); + } + } -var _elm_lang$core$Native_Time = function() { + from += to; -var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + // 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) { - callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); -}); + return a.table[a.table.length - 1]; +} +function botLeft(a) +{ + return a.table[0]; +} -function setInterval_(interval, task) +// 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) { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + var newA = { + ctor: '_Array', + height: a.height, + table: a.table.slice() + }; + if (a.height > 0) { - var id = setInterval(function() { - _elm_lang$core$Native_Scheduler.rawSpawn(task); - }, interval); + newA.lengths = a.lengths.slice(); + } + return newA; +} - return function() { clearInterval(id); }; - }); +// 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]; + } } -return { - now: now, - setInterval_: F2(setInterval_) -}; +// 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; +} -}(); -var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; -var _elm_lang$core$Time$spawnHelp = F3( - function (router, intervals, processes) { - var _p0 = intervals; - if (_p0.ctor === '[]') { - return _elm_lang$core$Task$succeed(processes); - } else { - var _p1 = _p0._0; - var spawnRest = function (id) { - return A3( - _elm_lang$core$Time$spawnHelp, - router, - _p0._1, - A3(_elm_lang$core$Dict$insert, _p1, id, processes)); - }; - var spawnTimer = _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Time$setInterval, - _p1, - A2(_elm_lang$core$Platform$sendToSelf, router, _p1))); - return A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer); +// 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]; } - }); -var _elm_lang$core$Time$addMySub = F2( - function (_p2, state) { - var _p3 = _p2; - var _p6 = _p3._1; - var _p5 = _p3._0; - var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); - if (_p4.ctor === 'Nothing') { - return A3( - _elm_lang$core$Dict$insert, - _p5, - { - ctor: '::', - _0: _p6, - _1: {ctor: '[]'} - }, - state); - } else { - return A3( - _elm_lang$core$Dict$insert, - _p5, - {ctor: '::', _0: _p6, _1: _p4._0}, - state); + else + { + var inc = t === 0 ? 0 : a.lengths[t - 1]; + toJSArray_(jsArray, i + inc, a.table[t]); } - }); -var _elm_lang$core$Time$inMilliseconds = function (t) { - return t; -}; -var _elm_lang$core$Time$millisecond = 1; -var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; -var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; -var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; -var _elm_lang$core$Time$inHours = function (t) { - return t / _elm_lang$core$Time$hour; -}; -var _elm_lang$core$Time$inMinutes = function (t) { - return t / _elm_lang$core$Time$minute; + } +} + +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 + }; +} + +return { + 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 }; -var _elm_lang$core$Time$inSeconds = function (t) { - return t / _elm_lang$core$Time$second; + +}(); +var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; +var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; +var _elm_lang$core$Array$isEmpty = function (array) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$Array$length(array), + 0); }; -var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; -var _elm_lang$core$Time$onSelfMsg = F3( - function (router, interval, state) { - var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); - if (_p7.ctor === 'Nothing') { - return _elm_lang$core$Task$succeed(state); - } else { - var tellTaggers = function (time) { - return _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - function (tagger) { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - tagger(time)); - }, - _p7._0)); - }; - return A2( - _elm_lang$core$Task$andThen, - function (_p8) { - return _elm_lang$core$Task$succeed(state); - }, - A2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now)); - } - }); -var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); -var _elm_lang$core$Time$State = F2( - function (a, b) { - return {taggers: a, processes: b}; +var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; +var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; +var _elm_lang$core$Array$get = F2( + function (i, array) { + return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( + i, + _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; }); -var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); -var _elm_lang$core$Time$onEffects = F3( - function (router, subs, _p9) { - var _p10 = _p9; - var rightStep = F3( - function (_p12, id, _p11) { - var _p13 = _p11; - return { - ctor: '_Tuple3', - _0: _p13._0, - _1: _p13._1, - _2: A2( - _elm_lang$core$Task$andThen, - function (_p14) { - return _p13._2; - }, - _elm_lang$core$Native_Scheduler.kill(id)) - }; - }); - var bothStep = F4( - function (interval, taggers, id, _p15) { - var _p16 = _p15; - return { - ctor: '_Tuple3', - _0: _p16._0, - _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), - _2: _p16._2 - }; - }); - var leftStep = F3( - function (interval, taggers, _p17) { - var _p18 = _p17; - return { - ctor: '_Tuple3', - _0: {ctor: '::', _0: interval, _1: _p18._0}, - _1: _p18._1, - _2: _p18._2 - }; - }); - var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); - var _p19 = A6( - _elm_lang$core$Dict$merge, - leftStep, - bothStep, - rightStep, - newTaggers, - _p10.processes, - { - ctor: '_Tuple3', - _0: {ctor: '[]'}, - _1: _elm_lang$core$Dict$empty, - _2: _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}) +var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; +var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; +var _elm_lang$core$Array$filter = F2( + function (isOkay, arr) { + var update = F2( + function (x, xs) { + return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; }); - var spawnList = _p19._0; - var existingDict = _p19._1; - var killTask = _p19._2; - return A2( - _elm_lang$core$Task$andThen, - function (newProcesses) { - return _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); - }, - A2( - _elm_lang$core$Task$andThen, - function (_p20) { - return A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict); - }, - killTask)); - }); -var _elm_lang$core$Time$Every = F2( - function (a, b) { - return {ctor: 'Every', _0: a, _1: b}; - }); -var _elm_lang$core$Time$every = F2( - function (interval, tagger) { - return _elm_lang$core$Time$subscription( - A2(_elm_lang$core$Time$Every, interval, tagger)); + return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); }); -var _elm_lang$core$Time$subMap = F2( - function (f, _p21) { - var _p22 = _p21; +var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; +var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; +var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; +var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; +var _elm_lang$core$Array$toIndexedList = function (array) { + return A3( + _elm_lang$core$List$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$Native_Array.length(array) - 1), + _elm_lang$core$Native_Array.toList(array)); +}; +var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; +var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; +var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; +var _elm_lang$core$Array$repeat = F2( + function (n, e) { return A2( - _elm_lang$core$Time$Every, - _p22._0, - function (_p23) { - return f( - _p22._1(_p23)); - }); + _elm_lang$core$Array$initialize, + n, + _elm_lang$core$Basics$always(e)); }); -_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; - -var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; -var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; +var _elm_lang$core$Array$Array = {ctor: 'Array'}; //import Maybe, Native.Array, Native.List, Native.Utils, Result // @@ -6121,57 +6519,26 @@ var _elm_lang$core$Json_Decode$dict = function (decoder) { var _elm_lang$core$Json_Decode$array = function (decoder) { return A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder); }; -var _elm_lang$core$Json_Decode$list = function (decoder) { - return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder); -}; -var _elm_lang$core$Json_Decode$nullable = function (decoder) { - return _elm_lang$core$Json_Decode$oneOf( - { - ctor: '::', - _0: _elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing), - _1: { - ctor: '::', - _0: A2(_elm_lang$core$Json_Decode$map, _elm_lang$core$Maybe$Just, decoder), - _1: {ctor: '[]'} - } - }); -}; -var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float'); -var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int'); -var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool'); -var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string'); -var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'}; - -var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; -var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; -var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; - -var _elm_lang$core$Tuple$mapSecond = F2( - function (func, _p0) { - var _p1 = _p0; - return { - ctor: '_Tuple2', - _0: _p1._0, - _1: func(_p1._1) - }; - }); -var _elm_lang$core$Tuple$mapFirst = F2( - function (func, _p2) { - var _p3 = _p2; - return { - ctor: '_Tuple2', - _0: func(_p3._0), - _1: _p3._1 - }; - }); -var _elm_lang$core$Tuple$second = function (_p4) { - var _p5 = _p4; - return _p5._1; -}; -var _elm_lang$core$Tuple$first = function (_p6) { - var _p7 = _p6; - return _p7._0; +var _elm_lang$core$Json_Decode$list = function (decoder) { + return A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder); +}; +var _elm_lang$core$Json_Decode$nullable = function (decoder) { + return _elm_lang$core$Json_Decode$oneOf( + { + ctor: '::', + _0: _elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing), + _1: { + ctor: '::', + _0: A2(_elm_lang$core$Json_Decode$map, _elm_lang$core$Maybe$Just, decoder), + _1: {ctor: '[]'} + } + }); }; +var _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float'); +var _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int'); +var _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool'); +var _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string'); +var _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'}; var _elm_lang$dom$Native_Dom = function() { @@ -9457,6 +9824,12 @@ var _mgold$elm_animation$Animation$to = F2( {to: x, ramp: _elm_lang$core$Maybe$Nothing})); }); +var _user$project$Audio$play = _elm_lang$core$Native_Platform.outgoingPort( + 'play', + function (v) { + return v; + }); + var _user$project$Bee$scaleBee = function (dimension) { return _elm_lang$core$Basics$round(dimension / 8); }; @@ -9687,139 +10060,508 @@ var _user$project$Map$tileCountFromPixels = function (pixels) { return _elm_lang$core$Basics$round( _elm_lang$core$Basics$toFloat(pixels) / 32); }; -var _user$project$Map$exit = F2( - function (newLevelMsg, level) { - return A2( - _elm_lang$html$Html$div, +var _user$project$Map$points = function (count) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class('points'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + _elm_lang$core$Basics$toString(count)), + _1: {ctor: '[]'} + }); +}; +var _user$project$Map$initBottomWall = F2( + function (windowWidth, windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, windowHeight), + halfHeight: 1, + halfWidth: windowWidth / 2 + }; + }); +var _user$project$Map$initTopWall = function (windowWidth) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, 0), + halfHeight: 1, + halfWidth: windowWidth / 2 + }; +}; +var _user$project$Map$initRightWall = F2( + function (windowWidth, windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth, windowHeight / 2), + halfHeight: windowHeight / 2, + halfWidth: 1 + }; + }); +var _user$project$Map$initLeftWall = function (windowHeight) { + return { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, windowHeight / 2), + halfHeight: windowHeight / 2, + halfWidth: 1 + }; +}; +var _user$project$Map$resolveCollision = F3( + function (_p2, b0, b1) { + var _p3 = _p2; + var _p4 = _p3.normal; + var relativeVelocity = A2(_elm_community$linear_algebra$Math_Vector2$sub, b1.velocity, b0.velocity); + var velocityAlongNormal = A2(_elm_community$linear_algebra$Math_Vector2$dot, relativeVelocity, _p4); + if (_elm_lang$core$Native_Utils.eq(_p3.penetration, 0) || (_elm_lang$core$Native_Utils.cmp(velocityAlongNormal, 0) > 0)) { + return {ctor: '_Tuple2', _0: b0, _1: b1}; + } else { + var impulse = _p4; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + b0, + { + velocity: A2(_elm_community$linear_algebra$Math_Vector2$sub, b0.velocity, impulse) + }), + _1: _elm_lang$core$Native_Utils.update( + b1, + { + velocity: A2(_elm_community$linear_algebra$Math_Vector2$add, b1.velocity, impulse) + }) + }; + } + }); +var _user$project$Map$resize = F2( + function (window, map) { + return _elm_lang$core$Native_Utils.update( + map, + {window: window}); + }); +var _user$project$Map$update = F2( + function (msg, map) { + var _p5 = msg; + switch (_p5.ctor) { + case 'NewLevel': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: _p5._0}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'PlayAudio': + return { + ctor: '_Tuple2', + _0: map, + _1: _user$project$Audio$play(_p5._0) + }; + default: + return _elm_lang$core$Native_Utils.eq(_p5._0, _p5._1) ? { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {points: map.points + 10}), + _1: _elm_lang$core$Platform_Cmd$none + } : {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + } + }); +var _user$project$Map$initMovingBall = F3( + function (_p7, _p6, color) { + var _p8 = _p7; + var _p9 = _p6; + return { + color: color, + radius: 32, + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p9._0, _p9._1) + }; + }); +var _user$project$Map$Map = F4( + function (a, b, c, d) { + return {level: a, artGame: b, window: c, points: d}; + }); +var _user$project$Map$ArtGame = F2( + function (a, b) { + return {color: a, balls: b}; + }); +var _user$project$Map$MovingBall = F4( + function (a, b, c, d) { + return {color: a, pos: b, radius: c, velocity: d}; + }); +var _user$project$Map$CollisionResult = F2( + function (a, b) { + return {normal: a, penetration: b}; + }); +var _user$project$Map$collisionBubbleBubble = F3( + function (b0b1, radius0, radius1) { + var distanceSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(b0b1); + var radiusb0b1 = radius0 + radius1; + if (_elm_lang$core$Native_Utils.eq(distanceSq, 0)) { + return A2( + _user$project$Map$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + radius0); + } else { + if (_elm_lang$core$Native_Utils.cmp(distanceSq, radiusb0b1 * radiusb0b1) > -1) { + return A2( + _user$project$Map$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + 0); + } else { + var d = _elm_lang$core$Basics$sqrt(distanceSq); + return A2( + _user$project$Map$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$scale, 1 / d, b0b1), + radiusb0b1 - d); + } + } + }); +var _user$project$Map$collision = F2( + function (body0, body1) { + var b0b1 = A2(_elm_community$linear_algebra$Math_Vector2$sub, body1.pos, body0.pos); + return A3(_user$project$Map$collisionBubbleBubble, b0b1, body0.radius, body1.radius); + }); +var _user$project$Map$collideWith = F3( + function (a0, bodies, acc) { + collideWith: + while (true) { + var _p10 = bodies; + if (_p10.ctor === '[]') { + return {ctor: '::', _0: a0, _1: acc}; + } else { + var _p12 = _p10._0; + var collisionResult = A2(_user$project$Map$collision, a0, _p12); + var _p11 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p12); + var a1 = _p11._0; + var b1 = _p11._1; + var _v6 = a1, + _v7 = _p10._1, + _v8 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v6; + bodies = _v7; + acc = _v8; + continue collideWith; + } + } + }); +var _user$project$Map$collide = F2( + function (acc, bodies) { + collide: + while (true) { + var _p13 = bodies; + if (_p13.ctor === '[]') { + return acc; + } else { + var _p14 = A3( + _user$project$Map$collideWith, + _p13._0, + _p13._1, + {ctor: '[]'}); + if (_p14.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _v11 = {ctor: '::', _0: _p14._0, _1: acc}, + _v12 = _p14._1; + acc = _v11; + bodies = _v12; + continue collide; + } + } + } + }); +var _user$project$Map$collisions = function (balls) { + return A2( + _user$project$Map$collide, + {ctor: '[]'}, + balls); +}; +var _user$project$Map$collisionBoxBubble = F2( + function (_p16, _p15) { + var _p17 = _p16; + var _p24 = _p17._1; + var _p18 = _p15; + var _p23 = _p18._1; + var _p19 = { + ctor: '_Tuple2', + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) + }; + var boxX = _p19._0; + var boxY = _p19._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); + var _p20 = { + ctor: '_Tuple2', + _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), + _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) + }; + var dx = _p20._0; + var dy = _p20._1; + var c = A2( + _elm_community$linear_algebra$Math_Vector2$vec2, + A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), + A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); + var _p21 = { + ctor: '_Tuple2', + _0: _elm_community$linear_algebra$Math_Vector2$getX(c), + _1: _elm_community$linear_algebra$Math_Vector2$getY(c) + }; + var cx = _p21._0; + var cy = _p21._1; + var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$Basics$abs(dx), + _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, boxX, cy), + _1: true + } : { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0 - boxX, cy), + _1: true + }) : ((_elm_lang$core$Native_Utils.cmp(cy, 0) > 0) ? { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, boxY), + _1: true + } : { + ctor: '_Tuple2', + _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), + _1: true + })); + var closest = _p22._0; + var inside = _p22._1; + var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); + var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { + return A2( + _user$project$Map$CollisionResult, + A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), + 0); + } else { + var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); + return inside ? A2( + _user$project$Map$CollisionResult, + A2( + _elm_community$linear_algebra$Math_Vector2$scale, + -1, + _elm_community$linear_algebra$Math_Vector2$normalize(normal)), + penetration) : A2( + _user$project$Map$CollisionResult, + _elm_community$linear_algebra$Math_Vector2$normalize(normal), + penetration); + } + }); +var _user$project$Map$animateBall = F3( + function (timeDiff, window, ball) { + var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); + var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); + var _p25 = { + ctor: '_Tuple2', + _0: _elm_lang$core$Basics$toFloat(window.width), + _1: _elm_lang$core$Basics$toFloat(window.height) + }; + var width = _p25._0; + var height = _p25._1; + var _p26 = { + ctor: '_Tuple4', + _0: _user$project$Map$initLeftWall(height), + _1: A2(_user$project$Map$initRightWall, width, height), + _2: _user$project$Map$initTopWall(width), + _3: A2(_user$project$Map$initBottomWall, width, height) + }; + var leftWall = _p26._0; + var rightWall = _p26._1; + var topWall = _p26._2; + var bottomWall = _p26._3; + var leftCol = A2( + _user$project$Map$collisionBoxBubble, { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(level)), - _1: {ctor: '[]'} + ctor: '_Tuple2', + _0: leftWall.pos, + _1: A2(_elm_community$linear_algebra$Math_Vector2$vec2, leftWall.halfWidth, leftWall.halfHeight) }, + {ctor: '_Tuple2', _0: ball.pos, _1: ball.radius}); + var newX = A3( + _elm_lang$core$Basics$clamp, + _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos), + _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos), + x + (_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff)); + var newY = A3( + _elm_lang$core$Basics$clamp, + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos), + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos), + y + (_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff)); + var newXVelocity = (_elm_lang$core$Native_Utils.eq( + newX, + _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos)) || _elm_lang$core$Native_Utils.eq( + newX, + _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos))) ? (0 - _elm_community$linear_algebra$Math_Vector2$getX(ball.velocity)) : _elm_community$linear_algebra$Math_Vector2$getX(ball.velocity); + var newYVelocity = (_elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos)) || _elm_lang$core$Native_Utils.eq( + newY, + _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos))) ? (0 - _elm_community$linear_algebra$Math_Vector2$getY(ball.velocity)) : _elm_community$linear_algebra$Math_Vector2$getY(ball.velocity); + return _elm_lang$core$Native_Utils.update( + ball, { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 0, _1: 0}), - _1: { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 0, _1: 32}), - _1: { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 32, _1: 0}), - _1: { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 32, _1: 32}), - _1: {ctor: '[]'} - } - } - } + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newX, newY), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newXVelocity, newYVelocity) }); }); -var _user$project$Map$backButton = F3( - function (_p2, newLevelMsg, level) { - var _p3 = _p2; - return A2( - _elm_lang$html$Html$button, +var _user$project$Map$animateArtGame = F3( + function (timeDiff, window, artGame) { + return _elm_lang$core$Native_Utils.update( + artGame, + { + balls: _user$project$Map$collisions( + A2( + _elm_lang$core$List$map, + A2(_user$project$Map$animateBall, timeDiff, window), + artGame.balls)) + }); + }); +var _user$project$Map$tick = F2( + function (timeDelta, map) { + return _elm_lang$core$Native_Utils.update( + map, { + artGame: A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame) + }); + }); +var _user$project$Map$ArtStore = function (a) { + return {ctor: 'ArtStore', _0: a}; +}; +var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; +var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; +var _user$project$Map$Home = {ctor: 'Home'}; +var _user$project$Map$Purple = {ctor: 'Purple'}; +var _user$project$Map$Blue = {ctor: 'Blue'}; +var _user$project$Map$Green = {ctor: 'Green'}; +var _user$project$Map$Yellow = {ctor: 'Yellow'}; +var _user$project$Map$Orange = {ctor: 'Orange'}; +var _user$project$Map$Red = {ctor: 'Red'}; +var _user$project$Map$initArtGame = { + color: _user$project$Map$Yellow, + balls: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 0, _1: 0}, + {ctor: '_Tuple2', _0: 1, _1: 1}, + _user$project$Map$Red), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 100, _1: 70}, + {ctor: '_Tuple2', _0: -1, _1: 1}, + _user$project$Map$Yellow), + _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p3._1), - 'px') - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} - } - } - } - } - } - }), + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 70, _1: 170}, + {ctor: '_Tuple2', _0: -1, _1: -1}, + _user$project$Map$Green), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(level)), + _0: A3( + _user$project$Map$initMovingBall, + {ctor: '_Tuple2', _0: 200, _1: 170}, + {ctor: '_Tuple2', _0: 1, _1: -1}, + _user$project$Map$Blue), _1: {ctor: '[]'} } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Back'), - _1: {ctor: '[]'} - }); + } + } + } +}; +var _user$project$Map$init = F2( + function (window, level) { + return {level: level, artGame: _user$project$Map$initArtGame, window: window, points: 0}; + }); +var _user$project$Map$newLevel = F2( + function (level, map) { + var _p27 = level; + if ((_p27.ctor === 'ArtStore') && (_p27._0 === true)) { + return _elm_lang$core$Native_Utils.update( + map, + {artGame: _user$project$Map$initArtGame, level: level}); + } else { + return _elm_lang$core$Native_Utils.update( + map, + {level: level}); + } + }); +var _user$project$Map$ColorClicked = F2( + function (a, b) { + return {ctor: 'ColorClicked', _0: a, _1: b}; }); -var _user$project$Map$playButton = F3( - function (_p4, newLevelMsg, level) { - var _p5 = _p4; +var _user$project$Map$colorBall = F2( + function (gameColor, ball) { return A2( - _elm_lang$html$Html$button, + _elm_lang$html$Html$div, { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: { + ctor: '_Tuple2', + _0: 'background-color', + _1: _elm_lang$core$Basics$toString(ball.color) + }, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._0), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p5._1), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: {ctor: '[]'} + } + } } } } @@ -9829,90 +10571,74 @@ var _user$project$Map$playButton = F3( _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(level)), + A2(_user$project$Map$ColorClicked, gameColor, ball.color)), _1: {ctor: '[]'} } }, + {ctor: '[]'}); + }); +var _user$project$Map$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Map$groceryItem = F3( + function (_p28, image, audio) { + var _p29 = _p28; + return A2( + _elm_lang$html$Html$img, { ctor: '::', - _0: _elm_lang$html$Html$text('Play!'), - _1: {ctor: '[]'} - }); - }); -var _user$project$Map$colorBall = function (ball) { - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: _elm_lang$html$Html_Attributes$src(image), + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: ball.color}, - _1: { + _0: _elm_lang$html$Html_Attributes$style( + { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.x), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.y), + _elm_lang$core$Basics$toString(_p29._0), 'px') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'width', + _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.width), + _elm_lang$core$Basics$toString(_p29._1), 'px') }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'height', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.height), - 'px') - }, - _1: {ctor: '[]'} - } + _1: {ctor: '[]'} } } } } - } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$PlayAudio(audio)), + _1: {ctor: '[]'} } - }), - _1: {ctor: '[]'} - }, - {ctor: '[]'}); -}; -var _user$project$Map$colorCircle = F4( - function (playAudioMsg, _p6, color, audio) { - var _p7 = _p6; + } + }, + {ctor: '[]'}); + }); +var _user$project$Map$colorCircle = F3( + function (_p30, color, audio) { + var _p31 = _p30; return A2( _elm_lang$html$Html$div, { @@ -9937,7 +10663,7 @@ var _user$project$Map$colorCircle = F4( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._0), + _elm_lang$core$Basics$toString(_p31._0), 'px') }, _1: { @@ -9947,7 +10673,7 @@ var _user$project$Map$colorCircle = F4( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p7._1), + _elm_lang$core$Basics$toString(_p31._1), 'px') }, _1: { @@ -9968,32 +10694,38 @@ var _user$project$Map$colorCircle = F4( _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( - playAudioMsg(audio)), + _user$project$Map$PlayAudio(audio)), _1: {ctor: '[]'} } }, {ctor: '[]'}); }); -var _user$project$Map$groceryItem = F4( - function (playAudioMsg, _p8, image, audio) { - var _p9 = _p8; - return A2( - _elm_lang$html$Html$img, - { +var _user$project$Map$NewLevel = function (a) { + return {ctor: 'NewLevel', _0: a}; +}; +var _user$project$Map$house = function (_p32) { + var _p33 = _p32; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/home.png'), + _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src(image), + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$Home)), _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', _0: { @@ -10001,7 +10733,7 @@ var _user$project$Map$groceryItem = F4( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._0), + _elm_lang$core$Basics$toString(_p33._0), 'px') }, _1: { @@ -10011,7 +10743,7 @@ var _user$project$Map$groceryItem = F4( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p9._1), + _elm_lang$core$Basics$toString(_p33._1), 'px') }, _1: {ctor: '[]'} @@ -10020,194 +10752,158 @@ var _user$project$Map$groceryItem = F4( } } }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - playAudioMsg(audio)), - _1: {ctor: '[]'} - } + _1: {ctor: '[]'} } - }, - {ctor: '[]'}); - }); -var _user$project$Map$animateBall = F3( - function (timeDiff, window, ball) { - var _p10 = { - ctor: '_Tuple4', - _0: 0, - _1: _elm_lang$core$Basics$toFloat(window.width) - ball.width, - _2: 0, - _3: _elm_lang$core$Basics$toFloat(window.height) - ball.height - }; - var leftWall = _p10._0; - var rightWall = _p10._1; - var topWall = _p10._2; - var bottomWall = _p10._3; - var newX = A3(_elm_lang$core$Basics$clamp, leftWall, rightWall, ball.x + (ball.xVelocity * timeDiff)); - var newY = A3(_elm_lang$core$Basics$clamp, topWall, bottomWall, ball.y + (ball.yVelocity * timeDiff)); - var newXVelocity = (_elm_lang$core$Native_Utils.eq(newX, leftWall) || _elm_lang$core$Native_Utils.eq(newX, rightWall)) ? (0 - ball.xVelocity) : ball.xVelocity; - var newYVelocity = (_elm_lang$core$Native_Utils.eq(newY, topWall) || _elm_lang$core$Native_Utils.eq(newY, bottomWall)) ? (0 - ball.yVelocity) : ball.xVelocity; - return _elm_lang$core$Native_Utils.update( - ball, - {x: newX, y: newY, xVelocity: newXVelocity, yVelocity: newYVelocity}); - }); -var _user$project$Map$collisions = function (balls) { - return balls; -}; -var _user$project$Map$animateArtGame = F3( - function (timeDiff, window, artGame) { - return _elm_lang$core$Native_Utils.update( - artGame, - { - balls: _user$project$Map$collisions( - A2( - _elm_lang$core$List$map, - A2(_user$project$Map$animateBall, timeDiff, window), - artGame.balls)) - }); - }); -var _user$project$Map$tick = F2( - function (time, map) { - var timeDiff = time - map.lastTimestamp; - return _elm_lang$core$Native_Utils.update( - map, - { - lastTimestamp: time, - artGame: A3(_user$project$Map$animateArtGame, timeDiff, map.window, map.artGame) - }); - }); -var _user$project$Map$resize = F2( - function (window, map) { - return _elm_lang$core$Native_Utils.update( - map, - {window: window}); - }); -var _user$project$Map$initMovingBall = F2( - function (time, color) { - return {color: color, width: 64, height: 64, x: 0, y: 0, xVelocity: 1, yVelocity: 1}; - }); -var _user$project$Map$initArtGame = function (time) { - return { - balls: { - ctor: '::', - _0: A2(_user$project$Map$initMovingBall, time, 'blue'), - _1: { - ctor: '::', - _0: A2(_user$project$Map$initMovingBall, time, 'green'), - _1: {ctor: '[]'} } - } - }; + }, + {ctor: '[]'}); }; -var _user$project$Map$newLevel = F2( - function (level, map) { - var _p11 = level; - if ((_p11.ctor === 'ArtStore') && (_p11._0 === true)) { - return _elm_lang$core$Native_Utils.update( - map, +var _user$project$Map$storeBuilding = function (_p34) { + var _p35 = _p34; + var _p37 = _p35._1; + var _p36 = _p35._0; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, { - artGame: _user$project$Map$initArtGame(map.lastTimestamp), - level: level - }); - } else { - return _elm_lang$core$Native_Utils.update( - map, - {level: level}); - } - }); -var _user$project$Map$init = F2( - function (window, level) { - return { - level: level, - artGame: { - balls: {ctor: '[]'} - }, - window: window, - lastTimestamp: 0 - }; - }); -var _user$project$Map$Map = F4( - function (a, b, c, d) { - return {level: a, artGame: b, window: c, lastTimestamp: d}; - }); -var _user$project$Map$ArtGame = function (a) { - return {balls: a}; -}; -var _user$project$Map$MovingBall = F7( - function (a, b, c, d, e, f, g) { - return {color: a, x: b, y: c, width: d, height: e, xVelocity: f, yVelocity: g}; - }); -var _user$project$Map$ArtStore = function (a) { - return {ctor: 'ArtStore', _0: a}; -}; -var _user$project$Map$artStoreBuilding = F2( - function (_p12, newLevelMsg) { - var _p13 = _p12; - var _p15 = _p13._1; - var _p14 = _p13._0; - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$GroceryStore)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p36), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p37), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}), + _1: { ctor: '::', _0: A2( - _elm_lang$html$Html$img, + _elm_lang$html$Html$div, { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg( - _user$project$Map$ArtStore(false))), - _1: { + _0: _elm_lang$html$Html_Attributes$style( + { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p14), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p15), + _elm_lang$core$Basics$toString(_p36 + 7), 'px') }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p37 + 10), + 'px') + }, + _1: {ctor: '[]'} + } } } } } - }), - _1: {ctor: '[]'} - } - } + } + } + }), + _1: {ctor: '[]'} }, - {ctor: '[]'}), - _1: { + { + ctor: '::', + _0: _elm_lang$html$Html$text('Los Comestibles'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); +}; +var _user$project$Map$artStoreBuilding = function (_p38) { + var _p39 = _p38; + var _p41 = _p39._1; + var _p40 = _p39._0; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel( + _user$project$Map$ArtStore(false))), + _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( { @@ -10215,437 +10911,444 @@ var _user$project$Map$artStoreBuilding = F2( _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p40), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p14 + 7), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p15 + 10), - 'px') - }, - _1: {ctor: '[]'} - } - } - } + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41), + 'px') + }, + _1: {ctor: '[]'} } } } } }), _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('El Arte'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - }); - }); -var _user$project$Map$colorGame = F3( - function (newLevelMsg, playAudioMsg, artGame) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - A2( - _elm_lang$core$Basics_ops['++'], - { - ctor: '::', - _0: A3( - _user$project$Map$backButton, - {ctor: '_Tuple2', _0: 0, _1: 0}, - newLevelMsg, - _user$project$Map$ArtStore(false)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html$text('Color Game'), - _1: {ctor: '[]'} + } } }, - A2(_elm_lang$core$List$map, _user$project$Map$colorBall, artGame.balls))); - }); -var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; -var _user$project$Map$storeBuilding = F2( - function (_p16, newLevelMsg) { - var _p17 = _p16; - var _p19 = _p17._1; - var _p18 = _p17._0; - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { + {ctor: '[]'}), + _1: { ctor: '::', _0: A2( - _elm_lang$html$Html$img, + _elm_lang$html$Html$div, { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(_user$project$Map$GroceryStore)), - _1: { + _0: _elm_lang$html$Html_Attributes$style( + { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p19), + _elm_lang$core$Basics$toString(_p40 + 7), 'px') }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41 + 10), + 'px') + }, + _1: {ctor: '[]'} + } } } } } - }), - _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('El Arte'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); +}; +var _user$project$Map$hometown = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$house( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$storeBuilding( + {ctor: '_Tuple2', _0: 160, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$artStoreBuilding( + {ctor: '_Tuple2', _0: 320, _1: 0}), + _1: {ctor: '[]'} + } + } + }); +}; +var _user$project$Map$playButton = F2( + function (_p42, level) { + var _p43 = _p42; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p43._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p43._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } } } - }, - {ctor: '[]'}), + }), _1: { ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Play!'), + _1: {ctor: '[]'} + }); + }); +var _user$project$Map$backButton = F2( + function (_p44, level) { + var _p45 = _p44; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p45._0), + 'px') + }, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p45._1), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18 + 7), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p19 + 10), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - } + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} } } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Los Comestibles'), - _1: {ctor: '[]'} - }), + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), _1: {ctor: '[]'} } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Back'), + _1: {ctor: '[]'} }); }); -var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; -var _user$project$Map$home = F3( - function (newLevelMsg, playAudioMsg, mapSize) { +var _user$project$Map$colorGame = F2( + function (pointCount, artGame) { return A2( _elm_lang$html$Html$div, {ctor: '[]'}, - { + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: A2( + _user$project$Map$backButton, + {ctor: '_Tuple2', _0: 130, _1: 0}, + _user$project$Map$ArtStore(false)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Color: ', + _elm_lang$core$Basics$toString(artGame.color))), + _1: { + ctor: '::', + _0: _user$project$Map$points(pointCount), + _1: {ctor: '[]'} + } + } + }, + A2( + _elm_lang$core$List$map, + _user$project$Map$colorBall(artGame.color), + artGame.balls))); + }); +var _user$project$Map$exit = function (level) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { ctor: '::', - _0: A2(_user$project$Map$exit, newLevelMsg, _user$project$Map$HomeTown), + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), _1: { ctor: '::', - _0: A2( - _user$project$Bee$view, - _elm_lang$core$Maybe$Just(playAudioMsg), - _user$project$Bee$mama), + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), _1: { ctor: '::', - _0: A2( - _user$project$Bee$view, - _elm_lang$core$Maybe$Just(playAudioMsg), - _user$project$Bee$papa), + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), _1: {ctor: '[]'} } } - }); - }); -var _user$project$Map$groceryStore = F3( - function (newLevelMsg, playAudioMsg, mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { + } + }); +}; +var _user$project$Map$home = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$exit(_user$project$Map$HomeTown), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Map$PlayAudio), + _user$project$Bee$mama), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Map$PlayAudio), + _user$project$Bee$papa), + _1: {ctor: '[]'} + } + } + }); +}; +var _user$project$Map$groceryStore = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$exit(_user$project$Map$HomeTown), + _1: { ctor: '::', - _0: A2(_user$project$Map$exit, newLevelMsg, _user$project$Map$HomeTown), + _0: A2( + _user$project$Map$playButton, + {ctor: '_Tuple2', _0: 192, _1: 10}, + _user$project$Map$GroceryStore), _1: { ctor: '::', _0: A3( - _user$project$Map$playButton, - {ctor: '_Tuple2', _0: 192, _1: 10}, - newLevelMsg, - _user$project$Map$GroceryStore), + _user$project$Map$groceryItem, + {ctor: '_Tuple2', _0: 64, _1: 96}, + 'imgs/banana.png', + 'audio/el_platano.mp3'), _1: { ctor: '::', - _0: A4( + _0: A3( _user$project$Map$groceryItem, - playAudioMsg, - {ctor: '_Tuple2', _0: 64, _1: 96}, - 'imgs/banana.png', - 'audio/el_platano.mp3'), - _1: { - ctor: '::', - _0: A4( - _user$project$Map$groceryItem, - playAudioMsg, - {ctor: '_Tuple2', _0: 192, _1: 96}, - 'imgs/milk.png', - 'audio/leche.mp3'), - _1: {ctor: '[]'} - } + {ctor: '_Tuple2', _0: 192, _1: 96}, + 'imgs/milk.png', + 'audio/leche.mp3'), + _1: {ctor: '[]'} } } - }); - }); -var _user$project$Map$artStore = F4( - function (play, newLevelMsg, playAudioMsg, map) { - var _p20 = play; - if (_p20 === true) { - return A3(_user$project$Map$colorGame, newLevelMsg, playAudioMsg, map.artGame); + } + }); +}; +var _user$project$Map$artStore = F2( + function (play, map) { + var _p46 = play; + if (_p46 === true) { + return A2(_user$project$Map$colorGame, map.points, map.artGame); } else { var showCircle = F2( - function (n, _p21) { - var _p22 = _p21; - return A4( + function (n, _p47) { + var _p48 = _p47; + return A3( _user$project$Map$colorCircle, - playAudioMsg, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p22._0, - _p22._1); + _p48._0, + _p48._1); }); return A2( _elm_lang$html$Html$div, {ctor: '[]'}, { ctor: '::', - _0: A2(_user$project$Map$exit, newLevelMsg, _user$project$Map$HomeTown), + _0: _user$project$Map$exit(_user$project$Map$HomeTown), _1: { ctor: '::', - _0: A3( + _0: A2( _user$project$Map$playButton, {ctor: '_Tuple2', _0: 192, _1: 10}, - newLevelMsg, _user$project$Map$ArtStore(true)), - _1: A2( - _elm_lang$core$List$indexedMap, - showCircle, - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'black', _1: 'audio/negro.m4a'}, - _1: { + _1: { + ctor: '::', + _0: _user$project$Map$points(map.points), + _1: A2( + _elm_lang$core$List$indexedMap, + showCircle, + { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'white', _1: 'audio/blanco.m4a'}, + _0: {ctor: '_Tuple2', _0: 'black', _1: 'audio/negro.m4a'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'red', _1: 'audio/rojo.m4a'}, + _0: {ctor: '_Tuple2', _0: 'white', _1: 'audio/blanco.m4a'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'blue', _1: 'audio/azul.m4a'}, + _0: {ctor: '_Tuple2', _0: 'red', _1: 'audio/rojo.m4a'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'yellow', _1: 'audio/amarillo.m4a'}, - _1: {ctor: '[]'} + _0: {ctor: '_Tuple2', _0: 'blue', _1: 'audio/azul.m4a'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'yellow', _1: 'audio/amarillo.m4a'}, + _1: {ctor: '[]'} + } } } } - } - }) + }) + } } }); } }); -var _user$project$Map$Home = {ctor: 'Home'}; -var _user$project$Map$house = F2( - function (_p23, newLevelMsg) { - var _p24 = _p23; - return A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/home.png'), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - newLevelMsg(_user$project$Map$Home)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p24._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p24._1), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - }), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}); - }); -var _user$project$Map$hometown = F3( - function (newLevelMsg, playAudioMsg, mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _user$project$Map$house, - {ctor: '_Tuple2', _0: 0, _1: 0}, - newLevelMsg), - _1: { - ctor: '::', - _0: A2( - _user$project$Map$storeBuilding, - {ctor: '_Tuple2', _0: 160, _1: 0}, - newLevelMsg), - _1: { - ctor: '::', - _0: A2( - _user$project$Map$artStoreBuilding, - {ctor: '_Tuple2', _0: 320, _1: 0}, - newLevelMsg), - _1: {ctor: '[]'} - } - } - }); - }); -var _user$project$Map$view = F4( - function (newLevelMsg, playAudioMsg, mapSize, map) { - var _p25 = map.level; - switch (_p25.ctor) { +var _user$project$Map$view = F2( + function (mapSize, map) { + var _p49 = map.level; + switch (_p49.ctor) { case 'Home': - return A3(_user$project$Map$home, newLevelMsg, playAudioMsg, mapSize); + return _user$project$Map$home(mapSize); case 'HomeTown': - return A3(_user$project$Map$hometown, newLevelMsg, playAudioMsg, mapSize); + return _user$project$Map$hometown(mapSize); case 'GroceryStore': - return A3(_user$project$Map$groceryStore, newLevelMsg, playAudioMsg, mapSize); + return _user$project$Map$groceryStore(mapSize); default: - return A4(_user$project$Map$artStore, _p25._0, newLevelMsg, playAudioMsg, map); + return A2(_user$project$Map$artStore, _p49._0, map); } }); -var _user$project$Main$playAudio = _elm_lang$core$Native_Platform.outgoingPort( - 'playAudio', - function (v) { - return v; - }); var _user$project$Main$Model = F6( function (a, b, c, d, e, f) { - return {user: a, mouse: b, time: c, window: d, map: e, stop: f}; + return {user: a, mouse: b, time: c, window: d, map: e, pause: f}; }); var _user$project$Main$Up = {ctor: 'Up'}; var _user$project$Main$init = { @@ -10653,7 +11356,7 @@ var _user$project$Main$init = { mouse: _user$project$Main$Up, time: 0, window: {width: 100, height: 100}, - stop: false, + pause: false, map: A2( _user$project$Map$init, {width: 100, height: 100}, @@ -10662,16 +11365,35 @@ var _user$project$Main$init = { var _user$project$Main$Down = function (a) { return {ctor: 'Down', _0: a}; }; +var _user$project$Main$Pause = {ctor: 'Pause'}; +var _user$project$Main$pauseButton = A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('pause'), + _1: {ctor: '[]'} + }); +var _user$project$Main$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Main$MapMsg = function (a) { + return {ctor: 'MapMsg', _0: a}; +}; var _user$project$Main$update = F2( function (msg, model) { var _p0 = msg; switch (_p0.ctor) { - case 'Stop': + case 'Pause': return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, - {stop: !model.stop}), + {pause: !model.pause}), _1: _elm_lang$core$Platform_Cmd$none }; case 'WindowResize': @@ -10686,14 +11408,6 @@ var _user$project$Main$update = F2( }), _1: _elm_lang$core$Platform_Cmd$none }; - case 'PlayAudio': - var _p3 = _p0._0; - var _p2 = A2(_elm_lang$core$Debug$log, 'play audio', _p3); - return { - ctor: '_Tuple2', - _0: model, - _1: _user$project$Main$playAudio(_p3) - }; case 'MouseUp': return { ctor: '_Tuple2', @@ -10703,21 +11417,21 @@ var _user$project$Main$update = F2( _1: _elm_lang$core$Platform_Cmd$none }; case 'MouseDown': - var _p4 = _p0._0; + var _p2 = _p0._0; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, { - mouse: _user$project$Main$Down(_p4), - user: A3(_user$project$Bee$animateStart, model.time, _p4, model.user) + mouse: _user$project$Main$Down(_p2), + user: A3(_user$project$Bee$animateStart, model.time, _p2, model.user) }), _1: _elm_lang$core$Platform_Cmd$none }; case 'Move': - var _p6 = _p0._0; - var _p5 = model.mouse; - if (_p5.ctor === 'Up') { + var _p4 = _p0._0; + var _p3 = model.mouse; + if (_p3.ctor === 'Up') { return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; } else { return { @@ -10725,60 +11439,45 @@ var _user$project$Main$update = F2( _0: _elm_lang$core$Native_Utils.update( model, { - mouse: _user$project$Main$Down(_p6), - user: A3(_user$project$Bee$retarget, model.time, _p6, model.user) + mouse: _user$project$Main$Down(_p4), + user: A3(_user$project$Bee$retarget, model.time, _p4, model.user) }), _1: _elm_lang$core$Platform_Cmd$none }; } case 'Tick': - var _p7 = _p0._0; + var _p5 = _p0._0; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, { - user: A2(_user$project$Bee$animate, _p7, model.user), - map: A2(_user$project$Map$tick, _p7, model.map), - time: _p7 + user: A2(_user$project$Bee$animate, model.time, model.user), + map: A2(_user$project$Map$tick, _p5, model.map), + time: model.time + _p5 }), _1: _elm_lang$core$Platform_Cmd$none }; default: + var _p6 = A2(_user$project$Map$update, _p0._0, model.map); + var newMap = _p6._0; + var cmd = _p6._1; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, - { - map: A2(_user$project$Map$newLevel, _p0._0, model.map) - }), - _1: _elm_lang$core$Platform_Cmd$none + {map: newMap}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) }; } }); -var _user$project$Main$Stop = {ctor: 'Stop'}; -var _user$project$Main$stopButton = A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Stop), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('stop'), - _1: {ctor: '[]'} +var _user$project$Main$mapView = F2( + function (window, map) { + return A2( + _elm_lang$html$Html$map, + _user$project$Main$MapMsg, + A2(_user$project$Map$view, window, map)); }); -var _user$project$Main$PlayAudio = function (a) { - return {ctor: 'PlayAudio', _0: a}; -}; -var _user$project$Main$Tick = function (a) { - return {ctor: 'Tick', _0: a}; -}; -var _user$project$Main$NewLevel = function (a) { - return {ctor: 'NewLevel', _0: a}; -}; -var _user$project$Main$mapView = A2(_user$project$Map$view, _user$project$Main$NewLevel, _user$project$Main$PlayAudio); var _user$project$Main$view = function (model) { return A2( _elm_lang$html$Html$div, @@ -10794,11 +11493,15 @@ var _user$project$Main$view = function (model) { }, { ctor: '::', - _0: A2(_user$project$Main$mapView, model.window, model.map), + _0: _user$project$Main$pauseButton, _1: { ctor: '::', - _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), - _1: {ctor: '[]'} + _0: A2(_user$project$Main$mapView, model.window, model.map), + _1: { + ctor: '::', + _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), + _1: {ctor: '[]'} + } } }); }; @@ -10815,18 +11518,18 @@ var _user$project$Main$Move = function (a) { return {ctor: 'Move', _0: a}; }; var _user$project$Main$subscriptions = function (model) { - if (model.stop) { + if (model.pause) { return _elm_lang$core$Platform_Sub$none; } else { - var _p8 = model.mouse; - if (_p8.ctor === 'Up') { + var _p7 = model.mouse; + if (_p7.ctor === 'Up') { return _elm_lang$core$Platform_Sub$batch( { ctor: '::', _0: _elm_lang$mouse$Mouse$downs(_user$project$Main$MouseDown), _1: { ctor: '::', - _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 500, _user$project$Main$Tick), + _0: _elm_lang$animation_frame$AnimationFrame$diffs(_user$project$Main$Tick), _1: { ctor: '::', _0: _elm_lang$window$Window$resizes(_user$project$Main$WindowResize), @@ -10844,7 +11547,7 @@ var _user$project$Main$subscriptions = function (model) { _0: _elm_lang$mouse$Mouse$ups(_user$project$Main$MouseUp), _1: { ctor: '::', - _0: A2(_elm_lang$core$Time$every, _elm_lang$core$Time$millisecond * 500, _user$project$Main$Tick), + _0: _elm_lang$animation_frame$AnimationFrame$diffs(_user$project$Main$Tick), _1: { ctor: '::', _0: _elm_lang$window$Window$resizes(_user$project$Main$WindowResize), diff --git a/index.html b/index.html index b0a4bb4..14e12e4 100644 --- a/index.html +++ b/index.html @@ -1,11526 +1,20 @@ -Main \ No newline at end of file + + + Bee + + + +
+ + + + + From 8db37a60034e445f6d6c822c4656d0a31e7987ed Mon Sep 17 00:00:00 2001 From: trotha01 Date: Thu, 25 May 2017 18:11:11 -0700 Subject: [PATCH 15/33] change colors every 2 seconds --- Map.elm | 101 +- elm-package.json | 1 + index.html | 12428 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 12502 insertions(+), 28 deletions(-) diff --git a/Map.elm b/Map.elm index d845829..bcfc960 100644 --- a/Map.elm +++ b/Map.elm @@ -2,10 +2,13 @@ module Map exposing (..) import Audio import Bee exposing (Bee) +import Dict exposing (Dict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick) import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) +import Random +import Random.List exposing (choose) import Time exposing (Time) import Window @@ -18,6 +21,7 @@ type alias Map = , artGame : ArtGame , window : Window.Size , points : Int + , seed : Random.Seed } @@ -27,6 +31,7 @@ init window level = , artGame = initArtGame , window = window , points = 0 + , seed = Random.initialSeed 0 } @@ -50,9 +55,40 @@ type Color | Purple +colorGen : Random.Generator Color +colorGen = + Random.int 1 3 + |> Random.map + (\i -> + case i of + 1 -> + Red + + 2 -> + Orange + + 3 -> + Yellow + + 4 -> + Green + + 5 -> + Blue + + 6 -> + Purple + + _ -> + Red + ) + + type alias ArtGame = { color : Color , balls : List MovingBall + , time : Time + , seed : Random.Seed } @@ -77,16 +113,42 @@ newLevel level map = initArtGame : ArtGame initArtGame = - { color = Yellow - , balls = - [ initMovingBall 1 ( 0, 0 ) ( 1, 1 ) Red - , initMovingBall 2 ( 100, 70 ) ( -1, 1 ) Yellow - , initMovingBall 3 ( 70, 170 ) ( -1, -1 ) Green - , initMovingBall 4 ( 200, 170 ) ( 1, -1 ) Blue - ] + { time = 0 + , seed = Random.initialSeed 0 + , color = Yellow + , balls = initialBalls } +get : Int -> List a -> Maybe a +get index list = + list + |> List.drop index + |> List.head + + +randItem : List a -> Random.Generator (Maybe a) +randItem list = + Random.int 0 (List.length list - 1) + |> Random.map (\i -> get i list) + + +randomColor : Random.Seed -> List MovingBall -> ( Color, Random.Seed ) +randomColor seed balls = + Random.step (randItem balls) seed + |> Tuple.mapFirst (Maybe.map (\ball -> ball.color)) + |> Tuple.mapFirst (Maybe.withDefault Red) + + +initialBalls : List MovingBall +initialBalls = + [ initMovingBall 1 ( 0, 0 ) ( 1, 1 ) Red + , initMovingBall 2 ( 100, 70 ) ( -1, 1 ) Yellow + , initMovingBall 3 ( 70, 170 ) ( -1, -1 ) Green + , initMovingBall 4 ( 200, 170 ) ( 1, -1 ) Blue + ] + + initMovingBall : Int -> ( Float, Float ) -> ( Float, Float ) -> Color -> MovingBall initMovingBall id ( x, y ) ( vx, vy ) color = { id = id @@ -117,7 +179,7 @@ update msg map = ( map, Audio.play file ) ColorClicked id gameColor color -> - if gameColor == Debug.log "color clicked" color then + if gameColor == color then let artGame = map.artGame @@ -152,10 +214,31 @@ tick timeDelta map = } +{-| This is the number of milliseconds we wait +before changing colors +-} +colorSwapTime : Time +colorSwapTime = + 2000 + + animateArtGame : Time -> Window.Size -> ArtGame -> ArtGame animateArtGame timeDiff window artGame = + let + newTime = + artGame.time + timeDiff + + ( ( newColor, newSeed ), timeReset ) = + if newTime > colorSwapTime then + ( randomColor artGame.seed artGame.balls, 0 ) + else + ( ( artGame.color, artGame.seed ), newTime ) + in { artGame - | balls = + | time = timeReset + , color = newColor + , seed = newSeed + , balls = artGame.balls |> List.map (animateBall timeDiff window) |> collisions diff --git a/elm-package.json b/elm-package.json index 47b93b4..14faba3 100644 --- a/elm-package.json +++ b/elm-package.json @@ -9,6 +9,7 @@ "exposed-modules": [], "dependencies": { "elm-community/linear-algebra": "3.1.0 <= v < 4.0.0", + "elm-community/random-extra": "2.0.0 <= v < 3.0.0", "elm-lang/animation-frame": "1.0.1 <= v < 2.0.0", "elm-lang/core": "5.1.1 <= v < 6.0.0", "elm-lang/html": "2.0.0 <= v < 3.0.0", diff --git a/index.html b/index.html index 14e12e4..d9f1cc9 100644 --- a/index.html +++ b/index.html @@ -1,20 +1,12410 @@ - - - Bee - - - -
- - - - - +Main \ No newline at end of file From a10789655afbf9afa80ed361d6a3455061cd438f Mon Sep 17 00:00:00 2001 From: trotha01 Date: Thu, 25 May 2017 18:30:34 -0700 Subject: [PATCH 16/33] add puff sound --- Map.elm | 4 +- audio/puff.mp3 | Bin 0 -> 9748 bytes bin/live.sh | 3 + elm.js | 5681 +++++++++++++--------- index.html | 12428 +---------------------------------------------- 5 files changed, 3290 insertions(+), 14826 deletions(-) create mode 100644 audio/puff.mp3 create mode 100755 bin/live.sh diff --git a/Map.elm b/Map.elm index bcfc960..bfa9c73 100644 --- a/Map.elm +++ b/Map.elm @@ -155,7 +155,7 @@ initMovingBall id ( x, y ) ( vx, vy ) color = , color = color , radius = 32 , pos = vec2 x y - , velocity = vec2 (vx / 10) (vy / 10) + , velocity = vec2 0 0 } @@ -191,7 +191,7 @@ update msg map = | points = map.points + 10 , artGame = newArtGame } - , Cmd.none + , Audio.play "audio/puff.mp3" ) else ( map, Cmd.none ) diff --git a/audio/puff.mp3 b/audio/puff.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c7a1e67da2295ddf6c08ba9447a7ac6380ce6014 GIT binary patch literal 9748 zcmeI1Wl)^Y*5L8r?g4_k4DK$$Ww6163?AGG1PJaf69~Z>V36QJgF7Kea0wEe03kq- zd58adcRy_1t=*5iRky27bwAzboIbzPQeE|^DG8z?AquvgftrB;qQQX>eRp3sJ9=e% zd$6sKH$4x%qP3fwyBocVlNXqqUduNq$Q4Yl>uYaspsUP}P?trBlDof~tGl%w{r_tF z&$p7h!;>FPB~yAWYi}R07ub$o+ua51O>d>Iq(~1mkk?c|IH5v_qmPe=1RtNjzd!Fk zrgjKZUR(Fq20%p(#4rj%00t(?Ktzp>5CH(ckb$C(HloRj5PcO8VjgXIWKtgNkw7=BVmgs6+CxDmo`%R!Hb8t~s!{SVjN^zyE*^gt&EM?}VfU~jOO zAK1=7M_2h@4iMFU%6~HOpA7sb1OE?Y0KP5Pi^S;@K7yQ?i}b6R9tEfOD<-Pa^WIp( zZ8$D3$5sfumv0m4)gp5H+Z*#=&j5H~xcBH3@GU2s5!U|G7f4^>_wq5Ly-o6YL^o$} z_;@LeJsyqrj@IBb9R8?=kF+1J91hzEx17ZMvE1?6y-7I@Xl~x3LOWICM9PX%x#;X>?OOtE$7Je`7%}U#cO^h;4oM)lr zDr=Q8ynTLiA1eDIXOg(4cs;APahUQ3t`G^6T!$&yB6x?+^FfEN2J$Y|4J%rQ{yLds04d%unl245b0S zS&0k_-M4KGU&9}#AIq15Ia%8s9xhH@AEawpNm!?64~Fr`_@02z?^EO(FCQl* zgYm}c1~`vrDsv!8lT7XGt%?Q0V?2d*8zR&2Iw>bzM^EI%*3t#y_ZahZvMJw&1a9J|Zv5A>Vg|tEJMSPH?}#{*oNH&u;y5 zaR(p=7`A`m>t~k9tsj3_N}5@$S7NAEMkbW{+dwAnwj?OGC!y?vVazZy2${(n z1CK4jYoJjsXh)?DytNBtfGm_3!8(3I;AbaA9|Egl)lP3egu2|dJtT{_Eo2!Qou0s< zkHt_km($b3llKRv?8|z3dPeLDt3?iFTf~*uBw|Q_Dil1=nx)qp0rn6z^g>q2#DzMW z!-J6^+t6>sa!164RP-~it=zgJzdQj6ak^kg%N&0Jl7)ZuQSqKf(MhP>W*P0pB^hoqnI7roqG8{(cK+DjHhr$ri zzl&$GvqNuXHoT8WQ}vHN@#TF_xR0c8|7jD^4S8IbG#;rt6w+A$-hR<>Uhl#!g9#wr zBm(kEw8*JbhVr3wC;@R`h55S=u+R!FCg?h;jSt1>kYNu zEXS|S9b_Mp&10|y>FceQ%3~lash)QO;gZLDjV7zb_gC<$C<{Zu?~5T5F@9^eJ)tfS zwJY$~wZFe>)t;n0`knWH>&iYX+o;dHNnje>EL^1s=u(liNu^TYMsc#_i3EepQj1wY zd!-R|vm&BKZg;qJFheLA4G-eTm3)D0qnJhblV%r7IjM#FUgaOX`+N0CKU_g<`lee@ z8@7-f?;-D?y%M5xM9%T(>bBVO1Z2t${FI6kOxbR%9o=4ay0cz*-QnkD5wNCJEzu)O z{=hNA3)wTt5v_Q=aCh~{vGh2;uqKo(c?3n(1{HHt-A4{bRCa00*#=RBh=*#m_sqI_ z4V#|6esG-TKiNAQ@SDd-i4_0U5E=H|t{z*SI*92Vm6uJ%j#r$7(6eX=U8~W7{cJOu zk`{0~JWYs!95qbCZZMUQnn>9>h{55)D90imWM?S$9D^_}!u6A@u1p9aeUe-_GPL2D%7uI)$x)sim;GLBi`d1z?7YLpz^8T zaR|mIg08OL!uh$V=XgZ@C#{}7rb#G-$HxYAw35yC z$al#kIC~vNB2PnJ7|nBH1c$ula*}_Ei(lMIep1~W#q~0}shV_;kBLAp$no?ukJss^ zu_5*rMj|b@YBQ9kajg)6R)VqIzdGFAhJ3kkyFZRs4gLGmf`&$avXOGnfg}KLnxh}c zu+yuUNwPB_tR_cZGb|A}-E(fHm?fs;n9Z+WeTb*nT5GN_&ucYZtD6$B^=@r(I6zsi=Kryz9=~P zH57bnu(uaBhlTnU4xfgf9%4KJ!8pGqBY=q8yYrhFLm6 z8Rh5F!dhzIGZ`^wnEzOPlR1z?{W~_HZ?Ie{G1Y@dJE&6)cnR{5bmFk}%6K}u#D{&q=Y31kEuOzaKiQ4q{t)Pn!4J3zKnGN8ih#JCaJ?@-Hv zbq?~my{V3~>4jo{*y#|(V$`050%|eT9W5Ol+oF&Bcqe#TDJB%5Xzue3kc$bx!`~MLfET7j$5BzcC$Lu0IOS) zw2%EVy^B)h(hO+m&+ssQ0$Sv1GzviLpXgf2ab%jfptns6M1u06Kj2#{;C~8|!MdcH zb5gJqf{+d_Uipj#6jq7FWnmWpJG=z4yx9^S^=s2>M&1a!+E=h26KoCX@f@I4hNDCT z(4P|;i=(CjY2#xV0i1MB$VA8^91Qr4Dpd{nulI&t-S6P?;@4MVX% zaR{4Oci&U9;J9UFb9q4s>-RbVs6$RzUB3zfI5Ih-r%*St0*HDPyv%O3+K^sm(A zqOEr*@%o+>rQeekDjKB*MC{X$)=n_Z(Ij~sPr3`te{K?$VoS-qJr&8Sb#9A~J1Gw_ zIv;DehB@%5?)*pp6M0&pOCiB!JCy#fYlp;?zq?yoir5v2Aevb$C4mg&-xe)L1uEM~ z1bw1%`fOfhUl9!q9cag!^LHC?>FF6_A{E`kBe4aTwgBW~pNrCT=zp-y7r(+Zb() zHvd^Mg8_rVIVGMiav44TNEX_(-ub1@Pd2wQnDkIx7TVK61dig9@k>~|>PkGbFB^|f zmqIqEuK!rHQ`s4%PM_(1>;726J#lS&S^U`N@bbGaA1{8?jGo)5e1gS4aWF1uXgqJ@l5YM0-@rH> z%}kg~Ubn@TCjaP|DrdPVjid4cT*k}C-6%1&2@D+e5(=*n-XLo0U^ zN`J+oe1mXozOBn}$ z9gqwPy}RXb0N|2iKLPD>1GVkY`oFcyq4D@?LdN=eRhYk0bw-soRNzw^kxA7W5kY%B z`kUEZ2%0`;P}#;XMBAkwaI34KNN1*xA7<}t_i!gp>x`a`{G`9-CH@--W(Hm2xGH_d zAI8U{Q&TBo@WjtmBI?hQ;doax>c;EXSF=s%ScTR9Ehau|ob#HZ|BWXzli_zyL+Vz| z9)B&4%-^$D*K@V`{S(43`+aFO_YPqeCzX%Sg;JLwgPQ~V*W}HFx*k;YnNm?ij69zKAuZGr`jAMElHH_ScB2G z?2;Q5o@H$vmtQ6_zRaP=iK;v56_V7^`oS~@)RmZ2bS5IOHUF4Sm2RSz*!}zjFFCX0 z;RdfSELX}`O+i6%dAgR&&J2lOWeLgwp#+e_sG~G!DJDIdpJCYuv1VZA$c-{RDA;|f z=NEfkgL%;oGWq8Wt#f&QdWF_Mw3@%KYl}HX=SVv&)+5gl^Ed38Dms28<6SAs2PtHi z_od*h=r}Q85g)PVT*`|Np7fwIv8<%&%11|jrxr)oc*=KuKaN?b6_d*e(s7tUn>%tq zw3~RbRy+MDmHi58v3uoG#d1x~&6#&Rvo7Mx;sNcCmc|uM%a65hPn>!1>Fyan^As<0 zElix0`MV4Cz&D!o2fvS{*)tFr)i zdSfv<#b(EYAF)^bewxaV(U$vr4{6%3p9~xMuU4(pTsEAX6g;dyESx_6`6T}R>tx8E zo28_XmDZ(w3iqs}uI)X`*}6f3##4(b{}+YNcs=EPsiDzm3K%k&>DATD0`WM~fqaql zp_le)tt_=|Devq5`%-v+hya>cyOJrA8HMcX#?VwT{xvTcVu=$1{7^0$vAw}1NSg24 zP3qkhr_?))T!~)6xy`l038f#qz?Q*P!Gt;f!0D(nRY2+8$m|)|?tNIwO_8W5RQQ&LAc+=N<#zv>TBj80htVwI?V+ zo~%SXTQahv#j&O)9IU`cjD4VySSF*k`;)Q#*6xkaN@38xL4|(HXFrb#gB8(MuG;0);kLVi;3Yz4x?0%^^%I6@K z&}Id7UX&-G2`k~e=01Y)FTOl$-}KQ z0VN_W(WX9N>Yj1nC&xjhL09cwb_Nor0>jvDG4mD^`QG$hT0>vx>fkKP?XT)|o9>4X z!Y@}*zxO~kae5Czr>|7IhS%M{xfc13WCGlt#adSU;8#kC3*CW6q^7Q<{SnlW7LiJi zefLI!&@}O%Eyu?dfmorTu8(|r{A9qf81dTNGEeU=5`0g~!X!=3YH^16d3~=q-QkvJ z=yR061MqmJYWj%Nv>Jt1vz{M|%z2YQ}4fdV`+RNR5J9 zml+80oe3Jno4RG_W>r8MO_M4*vXX~u*$-15KeU7`c@29qd3l_$rNE1L4a^XHrbEux zt}`Ali=Kd1xW-u#D}>uMx$hE8-PFOJHS~$tzjp3cmH&%?!71((Pa;n;C#WGmmvt_% z{4My;!Vnp&vF7w5^2N z3~*K>&ARwvcpTGDv226P>c1I|gu+R{5I{Q^^xZaD!ArJwLTHBOz?{0Hm}f>k#hHid zG=uk_x7?WkT96!K%dP2X2`n3tagPz>_S1BA8a37zROqE;U)g-Bi8a&wx?-^4l(^UH zE%>RGt+3lW%6}<=7{lCf=4W5<(46_KF8I9|f9kxkS#F!~1rCfw0Il1z?1v`$oJou@ z6GknW!Ns{ZW`3Ht7nx`s|JJr-X3kjIt#JZi8rWH(Ce>tNNuo{?Vb3oIo{!BH`mx?6 zt&{0XJ9SNI=*+=&>}tk#N#&KA<$hx@BOZGZlORT_nnpC=P9IMdkiMJOw5M{-7hJb} z6Zj9%kq{aq0%&55aeu@;N58Z~nP=?g!sM<}BUWc~97|?%8X2uFGWz}Cpk?LD$(E5c zy6)ok-{zwH#?O|U((tSusV&kf7XeA^w^oMF8}>*7mWCXyR?qZF#9vTBA%!wv_m-qd z_dAiZGwr`8x3|)TR$Sde8jXf7WZzCD*a*;V)pDRPMl4_-!#AwI-iQHmn%)m=UYz&#Xwa9cJ_?O-I7GB;FXJ1oStaN}T0A%NPs&}+^_shH}E$*`0dbZh(`iIW7Prs@!Xmzieb0#0UI>{WA9cuFIi zzGHp5td|+^eXlf~b}aLlc>IYg?S}oN4C^DaDlX|ODF_NCfF8`j8Bl_0d^GKUP$Sl_ zUhCRU32T<(QNMNPW2b;pMNgvh9gUpUEv{w;Ur4`ktnpI9<80s{tmPs|&F3s?QQA|} zBhKcMR#+vfRbysWFU@Ws=enlTs-u3NZe4C_>nny&z`$KwGsR~b)wC?(sS;lt$?y8l z8M=^CiV#ET|F%l$2#91+WM;0c3KSH^^4T^^b6PY=EE*1@VC;;5HnP6b41zzxhvu%Y;1v=! z9hd1E50j6O-HO@1<~q7J4=$5`DqhOMPS0!3J$pDi(}gvUuk1~KTv~A)Hm~7fD1cN$TyM%ZhV2y5iCt49>G1-0mSW^ zWrUhRWTrTU9SH#f|tNgqSED3^%Q;) z0oTqxF%_KpPhKrWJnxG1+J?G^*W~{`_>>Xpdi*`LRDPT9cpxj(5xuQyvi?QL@9jcT z6h*<$B$~-p_<3@71IInI>+I!%O7GoEct~}8cwzwont{-u;~=Ik8Jf8|%7={l{wJVO z?n6#Flp*50*e|6?3#c#RBLC!Ip@-Rckx>`mWRa`s@@6^sjtS%Z2~-;-B_)?Tbl5aM zrU;i-%HiLTBCnzm2#0cB$Tis2ybv)dQG=8-2Q*ya2o9=N!K|bwTrZlZ7b@3Vxx~g* zBOqi3tBaNql31dZA*#IfuW<_Wg=MKO&&vWh%|_qv^T6S->%B0t{xrv>(B-pT@#Q#u zK;tvV$Ra3OuQ~3a$}A~=zVz9cCA%bdRQ2BHEAETaqTl$B^s}{utt}{4NAvCSPe4l? ze}jaO#tGY93}=#u3j@&}m_s8>_}zh=H>+_ILpvhda{^|7dFJ2t5yC`Wcl zdVIxy8_l4I@ObWR4Z#_gjk6+5ObRW+6U7V+hB(IU6bzt9rB0H@iDHN&Te7=tkh)UU zs6c`zk>PU(S!K5i3#m}nsq}19*W%T7dmZK|qD6IJ28U>h@edZ4yO@Yy8}m?xOe2dV z9WQY{G8bL}ZDWk9JY}uKPGQLT$-ompGC;L3V&zo@)O3Dqi8$1}S^- zQiJ(yo47bwW~r8*aF?%irll{(a}H;<8MVDB*i6mmc}e=i;xV9ViD{DwMa@E7TXEI+ z(X}0X>=K(q>0;iVK}esj?G@h*_g8bb-yPvrPAs%xE4ygsUqC(CoM(IHIqs()-qS4+ zi-3L7sJBGJ0;iy~Mb`z^NEw9DV~8&&GuK zLO0ajXN*r}HK1b1i;j^LR|ps;gOd%NFZsso>z?%Bw+&TPP(UhHdOZznCPO?w6H~nR zE0c07-g<9u1dx5APz~vLAy|56Ipqns&#IKGPL(t#0>jr-Bn|*4u-n@2poh@kf zFP8{@gJPi|JKR0a0LKaypr-Y+^2K$qTvmrM9XQ+2SyNt1S&&y;u%m4rY literal 0 HcmV?d00001 diff --git a/bin/live.sh b/bin/live.sh new file mode 100755 index 0000000..460eed2 --- /dev/null +++ b/bin/live.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +elm-live Main.elm --output elm.js diff --git a/elm.js b/elm.js index aec3114..204b038 100644 --- a/elm.js +++ b/elm.js @@ -3370,2525 +3370,3276 @@ var _elm_community$linear_algebra$Math_Vector2$getX = _elm_community$linear_alge var _elm_community$linear_algebra$Math_Vector2$vec2 = _elm_community$linear_algebra$Native_Math_Vector2.vec2; var _elm_community$linear_algebra$Math_Vector2$Vec2 = {ctor: 'Vec2'}; -var _elm_lang$animation_frame$Native_AnimationFrame = function() +//import Native.List // + +var _elm_lang$core$Native_Array = function() { + +// 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: [] +}; + + +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 create() + +function unsafeGet(i, array) { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + for (var x = array.height; x > 0; x--) { - var id = requestAnimationFrame(function() { - callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); - }); + 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]; +} - return function() { - cancelAnimationFrame(id); - }; - }); + +// 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); } -return { - create: create -}; -}(); +function unsafeSet(i, item, array) +{ + array = nodeCopy(array); -var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; -var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; -var _elm_lang$core$Task$spawnCmd = F2( - function (router, _p0) { - var _p1 = _p0; - return _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Platform$sendToApp(router), - _p1._0)); - }); -var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; -var _elm_lang$core$Task$mapError = F2( - function (convert, task) { - return A2( - _elm_lang$core$Task$onError, - function (_p2) { - return _elm_lang$core$Task$fail( - convert(_p2)); - }, - task); - }); -var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Task$map = F2( - function (func, taskA) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return _elm_lang$core$Task$succeed( - func(a)); - }, - taskA); - }); -var _elm_lang$core$Task$map2 = F3( - function (func, taskA, taskB) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return _elm_lang$core$Task$succeed( - A2(func, a, b)); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$map3 = F4( - function (func, taskA, taskB, taskC) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - function (c) { - return _elm_lang$core$Task$succeed( - A3(func, a, b, c)); - }, - taskC); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$map4 = F5( - function (func, taskA, taskB, taskC, taskD) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - function (d) { - return _elm_lang$core$Task$succeed( - A4(func, a, b, c, d)); - }, - taskD); - }, - taskC); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$map5 = F6( - function (func, taskA, taskB, taskC, taskD, taskE) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - function (d) { - return A2( - _elm_lang$core$Task$andThen, - function (e) { - return _elm_lang$core$Task$succeed( - A5(func, a, b, c, d, e)); - }, - taskE); - }, - taskD); - }, - taskC); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$sequence = function (tasks) { - var _p3 = tasks; - if (_p3.ctor === '[]') { - return _elm_lang$core$Task$succeed( - {ctor: '[]'}); - } else { - return A3( - _elm_lang$core$Task$map2, - F2( - function (x, y) { - return {ctor: '::', _0: x, _1: y}; - }), - _p3._0, - _elm_lang$core$Task$sequence(_p3._1)); + if (array.height === 0) + { + array.table[i] = item; } -}; -var _elm_lang$core$Task$onEffects = F3( - function (router, commands, state) { - return A2( - _elm_lang$core$Task$map, - function (_p4) { - return {ctor: '_Tuple0'}; - }, - _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - _elm_lang$core$Task$spawnCmd(router), - commands))); - }); -var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); -var _elm_lang$core$Task$onSelfMsg = F3( - function (_p7, _p6, _p5) { - return _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); - }); -var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); -var _elm_lang$core$Task$Perform = function (a) { - return {ctor: 'Perform', _0: a}; -}; -var _elm_lang$core$Task$perform = F2( - function (toMessage, task) { - return _elm_lang$core$Task$command( - _elm_lang$core$Task$Perform( - A2(_elm_lang$core$Task$map, toMessage, task))); - }); -var _elm_lang$core$Task$attempt = F2( - function (resultToMessage, task) { - return _elm_lang$core$Task$command( - _elm_lang$core$Task$Perform( - A2( - _elm_lang$core$Task$onError, - function (_p8) { - return _elm_lang$core$Task$succeed( - resultToMessage( - _elm_lang$core$Result$Err(_p8))); - }, - A2( - _elm_lang$core$Task$andThen, - function (_p9) { - return _elm_lang$core$Task$succeed( - resultToMessage( - _elm_lang$core$Result$Ok(_p9))); - }, - task)))); - }); -var _elm_lang$core$Task$cmdMap = F2( - function (tagger, _p10) { - var _p11 = _p10; - return _elm_lang$core$Task$Perform( - A2(_elm_lang$core$Task$map, tagger, _p11._0)); - }); -_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; + 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; +} -var _elm_lang$core$Dict$foldr = F3( - function (f, acc, t) { - foldr: - while (true) { - var _p0 = t; - if (_p0.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v1 = f, - _v2 = A3( - f, - _p0._1, - _p0._2, - A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), - _v3 = _p0._3; - f = _v1; - acc = _v2; - t = _v3; - continue foldr; - } + +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); } - }); -var _elm_lang$core$Dict$keys = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, keyList) { - return {ctor: '::', _0: key, _1: keyList}; - }), - {ctor: '[]'}, - dict); -}; -var _elm_lang$core$Dict$values = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, valueList) { - return {ctor: '::', _0: value, _1: valueList}; - }), - {ctor: '[]'}, - dict); -}; -var _elm_lang$core$Dict$toList = function (dict) { - return A3( - _elm_lang$core$Dict$foldr, - F3( - function (key, value, list) { - return { - ctor: '::', - _0: {ctor: '_Tuple2', _0: key, _1: value}, - _1: list - }; - }), - {ctor: '[]'}, - dict); -}; -var _elm_lang$core$Dict$foldl = F3( - function (f, acc, dict) { - foldl: - while (true) { - var _p1 = dict; - if (_p1.ctor === 'RBEmpty_elm_builtin') { - return acc; - } else { - var _v5 = f, - _v6 = A3( - f, - _p1._1, - _p1._2, - A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), - _v7 = _p1._4; - f = _v5; - acc = _v6; - dict = _v7; - continue foldl; - } + 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.ctor === '[]') + { + return empty; + } + + // Allocate M sized blocks (table) and write list elements to it. + var table = new Array(M); + var nodes = []; + 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; } - }); -var _elm_lang$core$Dict$merge = F6( - function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { - var stepState = F3( - function (rKey, rValue, _p2) { - stepState: - while (true) { - var _p3 = _p2; - var _p9 = _p3._1; - var _p8 = _p3._0; - var _p4 = _p8; - if (_p4.ctor === '[]') { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - var _p7 = _p4._1; - var _p6 = _p4._0._1; - var _p5 = _p4._0._0; - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { - var _v10 = rKey, - _v11 = rValue, - _v12 = { - ctor: '_Tuple2', - _0: _p7, - _1: A3(leftStep, _p5, _p6, _p9) - }; - rKey = _v10; - rValue = _v11; - _p2 = _v12; - continue stepState; - } else { - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - return { - ctor: '_Tuple2', - _0: _p7, - _1: A4(bothStep, _p5, _p6, rValue, _p9) - }; - } - } - } - } - }); - var _p10 = A3( - _elm_lang$core$Dict$foldl, - stepState, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$toList(leftDict), - _1: initialResult - }, - rightDict); - var leftovers = _p10._0; - var intermediateResult = _p10._1; - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p11, result) { - var _p12 = _p11; - return A3(leftStep, _p12._0, _p12._1, result); - }), - intermediateResult, - leftovers); - }); -var _elm_lang$core$Dict$reportRemBug = F4( - function (msg, c, lgot, rgot) { - return _elm_lang$core$Native_Debug.crash( - _elm_lang$core$String$concat( - { - ctor: '::', - _0: 'Internal red-black tree invariant violated, expected ', - _1: { - ctor: '::', - _0: msg, - _1: { - ctor: '::', - _0: ' and got ', - _1: { - ctor: '::', - _0: _elm_lang$core$Basics$toString(c), - _1: { - ctor: '::', - _0: '/', - _1: { - ctor: '::', - _0: lgot, - _1: { - ctor: '::', - _0: '/', - _1: { - ctor: '::', - _0: rgot, - _1: { - ctor: '::', - _0: '\nPlease report this bug to ', - _1: {ctor: '[]'} - } - } - } - } - } - } - } - } - })); - }); -var _elm_lang$core$Dict$isBBlack = function (dict) { - var _p13 = dict; - _v14_2: - do { - if (_p13.ctor === 'RBNode_elm_builtin') { - if (_p13._0.ctor === 'BBlack') { - return true; - } else { - break _v14_2; - } - } else { - if (_p13._0.ctor === 'LBBlack') { - return true; - } else { - break _v14_2; - } - } - } while(false); - return false; -}; -var _elm_lang$core$Dict$sizeHelp = F2( - function (n, dict) { - sizeHelp: - while (true) { - var _p14 = dict; - if (_p14.ctor === 'RBEmpty_elm_builtin') { - return n; - } else { - var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), - _v17 = _p14._3; - n = _v16; - dict = _v17; - continue sizeHelp; - } - } - }); -var _elm_lang$core$Dict$size = function (dict) { - return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); -}; -var _elm_lang$core$Dict$get = F2( - function (targetKey, dict) { - get: - while (true) { - var _p15 = dict; - if (_p15.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Maybe$Nothing; - } else { - var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); - switch (_p16.ctor) { - case 'LT': - var _v20 = targetKey, - _v21 = _p15._3; - targetKey = _v20; - dict = _v21; - continue get; - case 'EQ': - return _elm_lang$core$Maybe$Just(_p15._2); - default: - var _v22 = targetKey, - _v23 = _p15._4; - targetKey = _v22; - dict = _v23; - continue get; - } - } - } - }); -var _elm_lang$core$Dict$member = F2( - function (key, dict) { - var _p17 = A2(_elm_lang$core$Dict$get, key, dict); - if (_p17.ctor === 'Just') { - return true; - } else { - return false; - } - }); -var _elm_lang$core$Dict$maxWithDefault = F3( - function (k, v, r) { - maxWithDefault: - while (true) { - var _p18 = r; - if (_p18.ctor === 'RBEmpty_elm_builtin') { - return {ctor: '_Tuple2', _0: k, _1: v}; - } else { - var _v26 = _p18._1, - _v27 = _p18._2, - _v28 = _p18._4; - k = _v26; - v = _v27; - r = _v28; - continue maxWithDefault; - } + } + + // 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 _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; -var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; -var _elm_lang$core$Dict$Black = {ctor: 'Black'}; -var _elm_lang$core$Dict$blackish = function (t) { - var _p19 = t; - if (_p19.ctor === 'RBNode_elm_builtin') { - var _p20 = _p19._0; - return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); - } else { - return true; } -}; -var _elm_lang$core$Dict$Red = {ctor: 'Red'}; -var _elm_lang$core$Dict$moreBlack = function (color) { - var _p21 = color; - switch (_p21.ctor) { - case 'Black': - return _elm_lang$core$Dict$BBlack; - case 'Red': - return _elm_lang$core$Dict$Black; - case 'NBlack': - return _elm_lang$core$Dict$Red; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); + + var head = nodes[nodes.length - 1]; + if (head.height > 0 && head.table.length === 1) + { + return head.table[0]; } -}; -var _elm_lang$core$Dict$lessBlack = function (color) { - var _p22 = color; - switch (_p22.ctor) { - case 'BBlack': - return _elm_lang$core$Dict$Black; - case 'Black': - return _elm_lang$core$Dict$Red; - case 'Red': - return _elm_lang$core$Dict$NBlack; - default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + else + { + return head; } -}; -var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; -var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; -var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { - return {ctor: 'RBEmpty_elm_builtin', _0: a}; -}; -var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); -var _elm_lang$core$Dict$isEmpty = function (dict) { - return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); -}; -var _elm_lang$core$Dict$RBNode_elm_builtin = F5( - function (a, b, c, d, e) { - return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; - }); -var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { - var _p23 = dict; - if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); - } else { - return dict; +} + +// 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: [], + lengths: [] + }; + nodes.push(node); } -}; -var _elm_lang$core$Dict$lessBlackTree = function (dict) { - var _p24 = dict; - if (_p24.ctor === 'RBNode_elm_builtin') { - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(_p24._0), - _p24._1, - _p24._2, - _p24._3, - _p24._4); - } else { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + + nodes[h].table.push(toPush); + var len = length(toPush); + if (nodes[h].lengths.length > 0) + { + len += nodes[h].lengths[nodes[h].lengths.length - 1]; } -}; -var _elm_lang$core$Dict$balancedTree = 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( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(col), - yk, - yv, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); - }; - }; - }; - }; - }; - }; - }; - }; + nodes[h].lengths.push(len); + + if (nodes[h].table.length === M) + { + fromListPush(nodes[h], nodes); + nodes[h] = { + ctor: '_Array', + height: h + 1, + table: [], + lengths: [] }; + } +} + +// 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_(_elm_lang$core$Native_List.Nil, a); +} + +function toList_(list, a) +{ + for (var i = a.table.length - 1; i >= 0; i--) + { + list = + a.height === 0 + ? _elm_lang$core$Native_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) }; -}; -var _elm_lang$core$Dict$blacken = function (t) { - var _p25 = t; - if (_p25.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); + if (a.height > 0) + { + newA.lengths = a.lengths; } -}; -var _elm_lang$core$Dict$redden = function (t) { - var _p26 = t; - if (_p26.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); + for (var i = 0; i < a.table.length; i++) + { + newA.table[i] = + a.height === 0 + ? f(a.table[i]) + : map(f, a.table[i]); } -}; -var _elm_lang$core$Dict$balanceHelp = function (tree) { - var _p27 = tree; - _v36_6: - do { - _v36_5: - do { - _v36_4: - do { - _v36_3: - do { - _v36_2: - do { - _v36_1: - do { - _v36_0: - do { - if (_p27.ctor === 'RBNode_elm_builtin') { - if (_p27._3.ctor === 'RBNode_elm_builtin') { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._3._0.ctor) { - case 'Red': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - } - } - case 'NBlack': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - } - } - default: - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - } - case 'NBlack': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } - case 'NBlack': - if (_p27._0.ctor === 'BBlack') { - if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - default: - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - default: - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - switch (_p27._3._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; - } else { - break _v36_6; - } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } else { - break _v36_6; - } - } - } else { - break _v36_6; - } - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); - } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._4._3._1, - _p27._4._3._2, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._4._1, - _p27._4._2, - _p27._4._3._4, - _elm_lang$core$Dict$redden(_p27._4._4))); - } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._3._4._1, - _p27._3._4._2, - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._3._1, - _p27._3._2, - _elm_lang$core$Dict$redden(_p27._3._3), - _p27._3._4._3), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); - } while(false); - return tree; -}; -var _elm_lang$core$Dict$balance = F5( - function (c, k, v, l, r) { - var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; - }); -var _elm_lang$core$Dict$bubble = F5( - function (c, k, v, l, r) { - return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$moreBlack(c), - k, - v, - _elm_lang$core$Dict$lessBlackTree(l), - _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - }); -var _elm_lang$core$Dict$removeMax = F5( - function (c, k, v, l, r) { - var _p28 = r; - if (_p28.ctor === 'RBEmpty_elm_builtin') { - return A3(_elm_lang$core$Dict$rem, c, l, r); - } else { - return A5( - _elm_lang$core$Dict$bubble, - c, - k, - v, - l, - A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + 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 ? from : from + 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); } - }); -var _elm_lang$core$Dict$rem = F3( - function (color, left, right) { - var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; - if (_p29._0.ctor === 'RBEmpty_elm_builtin') { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p30 = color; - switch (_p30.ctor) { - case 'Red': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - case 'Black': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); - default: - return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); - } - } else { - var _p33 = _p29._1._0; - var _p32 = _p29._0._0; - var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; - if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/LBlack/Red', - color, - _elm_lang$core$Basics$toString(_p32), - _elm_lang$core$Basics$toString(_p33)); - } - } - } else { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p36 = _p29._1._0; - var _p35 = _p29._0._0; - var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; - if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/Red/LBlack', - color, - _elm_lang$core$Basics$toString(_p35), - _elm_lang$core$Basics$toString(_p36)); - } - } else { - var _p40 = _p29._0._2; - var _p39 = _p29._0._4; - var _p38 = _p29._0._1; - var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); - var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); - var k = _p37._0; - var v = _p37._1; - return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); - } + } + else + { + for (var i = 0; i < a.table.length; i++) + { + b = foldl(f, b, a.table[i]); } - }); -var _elm_lang$core$Dict$map = F2( - function (f, dict) { - var _p41 = dict; - if (_p41.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - var _p42 = _p41._1; - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _p41._0, - _p42, - A2(f, _p42, _p41._2), - A2(_elm_lang$core$Dict$map, f, _p41._3), - A2(_elm_lang$core$Dict$map, f, _p41._4)); + } + 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); } - }); -var _elm_lang$core$Dict$Same = {ctor: 'Same'}; -var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; -var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; -var _elm_lang$core$Dict$update = F3( - function (k, alter, dict) { - var up = function (dict) { - var _p43 = dict; - if (_p43.ctor === 'RBEmpty_elm_builtin') { - var _p44 = alter(_elm_lang$core$Maybe$Nothing); - if (_p44.ctor === 'Nothing') { - return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) - }; - } - } else { - var _p55 = _p43._2; - var _p54 = _p43._4; - var _p53 = _p43._3; - var _p52 = _p43._1; - var _p51 = _p43._0; - var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); - switch (_p45.ctor) { - case 'EQ': - var _p46 = alter( - _elm_lang$core$Maybe$Just(_p55)); - if (_p46.ctor === 'Nothing') { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) - }; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) - }; - } - case 'LT': - var _p47 = up(_p53); - var flag = _p47._0; - var newLeft = _p47._1; - var _p48 = flag; - switch (_p48.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) - }; - } - default: - var _p49 = up(_p54); - var flag = _p49._0; - var newRight = _p49._1; - var _p50 = flag; - switch (_p50.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) - }; - } - } - } - }; - var _p56 = up(dict); - var flag = _p56._0; - var updatedDict = _p56._1; - var _p57 = flag; - switch (_p57.ctor) { - case 'Same': - return updatedDict; - case 'Insert': - return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); - default: - return _elm_lang$core$Dict$blacken(updatedDict); + } + else + { + for (var i = a.table.length; i--; ) + { + b = foldr(f, b, a.table[i]); } - }); -var _elm_lang$core$Dict$insert = F3( - function (key, value, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always( - _elm_lang$core$Maybe$Just(value)), - dict); - }); -var _elm_lang$core$Dict$singleton = F2( - function (key, value) { - return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); - }); -var _elm_lang$core$Dict$union = F2( - function (t1, t2) { - return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); - }); -var _elm_lang$core$Dict$filter = F2( - function (predicate, dictionary) { - var add = F3( - function (key, value, dict) { - return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; - }); - return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); - }); -var _elm_lang$core$Dict$intersect = F2( - function (t1, t2) { - return A2( - _elm_lang$core$Dict$filter, - F2( - function (k, _p58) { - return A2(_elm_lang$core$Dict$member, k, t2); - }), - t1); - }); -var _elm_lang$core$Dict$partition = F2( - function (predicate, dict) { - var add = F3( - function (key, value, _p59) { - var _p60 = _p59; - var _p62 = _p60._1; - var _p61 = _p60._0; - return A2(predicate, key, value) ? { - ctor: '_Tuple2', - _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), - _1: _p62 - } : { - ctor: '_Tuple2', - _0: _p61, - _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) - }; - }); - return A3( - _elm_lang$core$Dict$foldl, - add, - {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, - dict); - }); -var _elm_lang$core$Dict$fromList = function (assocs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p63, dict) { - var _p64 = _p63; - return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); - }), - _elm_lang$core$Dict$empty, - assocs); -}; -var _elm_lang$core$Dict$remove = F2( - function (key, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), - dict); - }); -var _elm_lang$core$Dict$diff = F2( - function (t1, t2) { - return A3( - _elm_lang$core$Dict$foldl, - F3( - function (k, v, t) { - return A2(_elm_lang$core$Dict$remove, k, t); - }), - t1, - t2); - }); - -//import Native.Scheduler // - -var _elm_lang$core$Native_Time = function() { + } + return b; +} -var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) +// TODO: currently, it slices the right, then the left. This can be +// optimized. +function slice(from, to, a) { - callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); -}); + if (from < 0) + { + from += length(a); + } + if (to < 0) + { + to += length(a); + } + return sliceLeft(from, sliceRight(to, a)); +} -function setInterval_(interval, task) +function sliceRight(to, a) { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + if (to === length(a)) { - var id = setInterval(function() { - _elm_lang$core$Native_Scheduler.rawSpawn(task); - }, interval); + return a; + } - return function() { clearInterval(id); }; - }); -} + // Handle leaf level. + if (a.height === 0) + { + var newA = { ctor:'_Array', height:0 }; + newA.table = a.table.slice(0, to); + return newA; + } -return { - now: now, - setInterval_: F2(setInterval_) -}; + // Slice the right recursively. + var right = getSlot(to, a); + var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]); -}(); -var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; -var _elm_lang$core$Time$spawnHelp = F3( - function (router, intervals, processes) { - var _p0 = intervals; - if (_p0.ctor === '[]') { - return _elm_lang$core$Task$succeed(processes); - } else { - var _p1 = _p0._0; - var spawnRest = function (id) { - return A3( - _elm_lang$core$Time$spawnHelp, - router, - _p0._1, - A3(_elm_lang$core$Dict$insert, _p1, id, processes)); - }; - var spawnTimer = _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Time$setInterval, - _p1, - A2(_elm_lang$core$Platform$sendToSelf, router, _p1))); - return A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer); - } - }); -var _elm_lang$core$Time$addMySub = F2( - function (_p2, state) { - var _p3 = _p2; - var _p6 = _p3._1; - var _p5 = _p3._0; - var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); - if (_p4.ctor === 'Nothing') { - return A3( - _elm_lang$core$Dict$insert, - _p5, - { - ctor: '::', - _0: _p6, - _1: {ctor: '[]'} - }, - state); - } else { - return A3( - _elm_lang$core$Dict$insert, - _p5, - {ctor: '::', _0: _p6, _1: _p4._0}, - state); + // 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]; } - }); -var _elm_lang$core$Time$inMilliseconds = function (t) { - return t; -}; -var _elm_lang$core$Time$millisecond = 1; -var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; -var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; -var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; -var _elm_lang$core$Time$inHours = function (t) { - return t / _elm_lang$core$Time$hour; -}; -var _elm_lang$core$Time$inMinutes = function (t) { - return t / _elm_lang$core$Time$minute; -}; -var _elm_lang$core$Time$inSeconds = function (t) { - return t / _elm_lang$core$Time$second; -}; -var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; -var _elm_lang$core$Time$onSelfMsg = F3( - function (router, interval, state) { - var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); - if (_p7.ctor === 'Nothing') { - return _elm_lang$core$Task$succeed(state); - } else { - var tellTaggers = function (time) { - return _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - function (tagger) { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - tagger(time)); - }, - _p7._0)); - }; - return A2( - _elm_lang$core$Task$andThen, - function (_p8) { - return _elm_lang$core$Task$succeed(state); - }, - A2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now)); + if (c[1].table.length === 0) + { + return c[0]; } - }); -var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); -var _elm_lang$core$Time$State = F2( - function (a, b) { - return {taggers: a, processes: b}; - }); -var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); -var _elm_lang$core$Time$onEffects = F3( - function (router, subs, _p9) { - var _p10 = _p9; - var rightStep = F3( - function (_p12, id, _p11) { - var _p13 = _p11; - return { - ctor: '_Tuple3', - _0: _p13._0, - _1: _p13._1, - _2: A2( - _elm_lang$core$Task$andThen, - function (_p14) { - return _p13._2; - }, - _elm_lang$core$Native_Scheduler.kill(id)) - }; - }); - var bothStep = F4( - function (interval, taggers, id, _p15) { - var _p16 = _p15; - return { - ctor: '_Tuple3', - _0: _p16._0, - _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), - _2: _p16._2 - }; - }); - var leftStep = F3( - function (interval, taggers, _p17) { - var _p18 = _p17; - return { - ctor: '_Tuple3', - _0: {ctor: '::', _0: interval, _1: _p18._0}, - _1: _p18._1, - _2: _p18._2 - }; - }); - var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); - var _p19 = A6( - _elm_lang$core$Dict$merge, - leftStep, - bothStep, - rightStep, - newTaggers, - _p10.processes, + + // 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++) { - ctor: '_Tuple3', - _0: {ctor: '[]'}, - _1: _elm_lang$core$Dict$empty, - _2: _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}) - }); - var spawnList = _p19._0; - var existingDict = _p19._1; - var killTask = _p19._2; - return A2( - _elm_lang$core$Task$andThen, - function (newProcesses) { - return _elm_lang$core$Task$succeed( - A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); - }, - A2( - _elm_lang$core$Task$andThen, - function (_p20) { - return A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict); - }, - killTask)); - }); -var _elm_lang$core$Time$Every = F2( - function (a, b) { - return {ctor: 'Every', _0: a, _1: b}; - }); -var _elm_lang$core$Time$every = F2( - function (interval, tagger) { - return _elm_lang$core$Time$subscription( - A2(_elm_lang$core$Time$Every, interval, tagger)); - }); -var _elm_lang$core$Time$subMap = F2( - function (f, _p21) { - var _p22 = _p21; - return A2( - _elm_lang$core$Time$Every, - _p22._0, - function (_p23) { - return f( - _p22._1(_p23)); - }); - }); -_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; - -var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; -var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; -var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; - -var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.create( - {ctor: '_Tuple0'}); -var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame'); -var _elm_lang$animation_frame$AnimationFrame$State = F3( - function (a, b, c) { - return {subs: a, request: b, oldTime: c}; - }); -var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - {ctor: '[]'}, - _elm_lang$core$Maybe$Nothing, - 0)); -var _elm_lang$animation_frame$AnimationFrame$onEffects = F3( - function (router, subs, _p0) { - var _p1 = _p0; - var _p5 = _p1.request; - var _p4 = _p1.oldTime; - var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs}; - if (_p2._0.ctor === 'Nothing') { - if (_p2._1.ctor === '[]') { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - {ctor: '[]'}, - _elm_lang$core$Maybe$Nothing, - _p4)); - } else { - return A2( - _elm_lang$core$Task$andThen, - function (pid) { - return A2( - _elm_lang$core$Task$andThen, - function (time) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - subs, - _elm_lang$core$Maybe$Just(pid), - time)); - }, - _elm_lang$core$Time$now); - }, - _elm_lang$core$Process$spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Platform$sendToSelf(router), - _elm_lang$animation_frame$AnimationFrame$rAF))); - } - } else { - if (_p2._1.ctor === '[]') { - return A2( - _elm_lang$core$Task$andThen, - function (_p3) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - {ctor: '[]'}, - _elm_lang$core$Maybe$Nothing, - _p4)); - }, - _elm_lang$core$Process$kill(_p2._0._0)); - } else { - return _elm_lang$core$Task$succeed( - A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4)); - } - } - }); -var _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3( - function (router, newTime, _p6) { - var _p7 = _p6; - var _p10 = _p7.subs; - var diff = newTime - _p7.oldTime; - var send = function (sub) { - var _p8 = sub; - if (_p8.ctor === 'Time') { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - _p8._0(newTime)); - } else { - return A2( - _elm_lang$core$Platform$sendToApp, - router, - _p8._0(diff)); + c[1].lengths[i] += len; } - }; - return A2( - _elm_lang$core$Task$andThen, - function (pid) { - return A2( - _elm_lang$core$Task$andThen, - function (_p9) { - return _elm_lang$core$Task$succeed( - A3( - _elm_lang$animation_frame$AnimationFrame$State, - _p10, - _elm_lang$core$Maybe$Just(pid), - newTime)); - }, - _elm_lang$core$Task$sequence( - A2(_elm_lang$core$List$map, send, _p10))); - }, - _elm_lang$core$Process$spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Platform$sendToSelf(router), - _elm_lang$animation_frame$AnimationFrame$rAF))); - }); -var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) { - return {ctor: 'Diff', _0: a}; -}; -var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) { - return _elm_lang$animation_frame$AnimationFrame$subscription( - _elm_lang$animation_frame$AnimationFrame$Diff(tagger)); -}; -var _elm_lang$animation_frame$AnimationFrame$Time = function (a) { - return {ctor: 'Time', _0: a}; -}; -var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) { - return _elm_lang$animation_frame$AnimationFrame$subscription( - _elm_lang$animation_frame$AnimationFrame$Time(tagger)); -}; -var _elm_lang$animation_frame$AnimationFrame$subMap = F2( - function (func, sub) { - var _p11 = sub; - if (_p11.ctor === 'Time') { - return _elm_lang$animation_frame$AnimationFrame$Time( - function (_p12) { - return func( - _p11._0(_p12)); - }); - } else { - return _elm_lang$animation_frame$AnimationFrame$Diff( - function (_p13) { - return func( - _p11._0(_p13)); - }); + c[0].lengths = c[0].lengths.concat(c[1].lengths); } - }); -_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap}; - -//import Native.List // - -var _elm_lang$core$Native_Array = function() { -// 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; + return c[0]; + } -// An empty array. -var empty = { - ctor: '_Array', - height: 0, - table: [] -}; + 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]); +} -function get(i, array) +// Returns an array of two nodes; right and left. One node _may_ be empty. +function append_(a, b) { - if (i < 0 || i >= length(array)) + if (a.height === 0 && b.height === 0) { - throw new Error( - 'Index ' + i + ' is out of range. Check the length of ' + - 'your array first or use getMaybe or getWithDefault.'); + return [a, b]; } - return unsafeGet(i, array); -} - -function unsafeGet(i, array) -{ - for (var x = array.height; x > 0; x--) + if (a.height !== 1 || b.height !== 1) { - var slot = i >> (x * 5); - while (array.lengths[slot] <= i) + if (a.height === b.height) { - slot++; + a = nodeCopy(a); + b = nodeCopy(b); + var appended = append_(botRight(a), botLeft(b)); + + insertRight(a, appended[1]); + insertLeft(b, appended[0]); } - if (slot > 0) + else if (a.height > b.height) { - i -= array.lengths[slot - 1]; + a = nodeCopy(a); + var appended = append_(botRight(a), b); + + insertRight(a, appended[0]); + b = parentise(appended[1], appended[1].height + 1); } - array = array.table[slot]; - } - return array.table[i]; -} + 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); + } + } -// 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) + // Check if balancing is needed and return based on that. + if (a.table.length === 0 || b.table.length === 0) { - return array; + return [a, b]; } - return unsafeSet(i, item, array); -} + var toRemove = calcToRemove(a, b); + if (toRemove <= E) + { + return [a, b]; + } + return shuffle(a, b, toRemove); +} -function unsafeSet(i, item, array) +// Helperfunctions for append_. Replaces a child node at the side of the parent. +function insertRight(parent, node) { - array = nodeCopy(array); + 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; +} - if (array.height === 0) +function insertLeft(parent, node) +{ + if (node.table.length > 0) { - array.table[i] = item; + 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 { - var slot = getSlot(i, array); - if (slot > 0) + parent.table.shift(); + for (var i = 1; i < parent.lengths.length; i++) { - i -= array.lengths[slot - 1]; + parent.lengths[i] = parent.lengths[i] - parent.lengths[0]; } - array.table[slot] = unsafeSet(i, item, array.table[slot]); + parent.lengths.shift(); } - return array; } - -function initialize(len, f) +// Returns the extra search steps for E. Refer to the paper. +function calcToRemove(a, b) { - if (len <= 0) + var subLengths = 0; + for (var i = 0; i < a.table.length; i++) { - return empty; + subLengths += a.table[i].table.length; } - var h = Math.floor( Math.log(len) / Math.log(M) ); - return initialize_(f, h, 0, len); + 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); } -function initialize_(f, h, from, to) +// get2, set2 and saveSlot are helpers for accessing elements over two arrays. +function get2(a, b, index) { - if (h === 0) + return index < a.length + ? a[index] + : b[index - a.length]; +} + +function set2(a, b, index, value) +{ + if (index < a.length) { - 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 - }; + a[index] = value; + } + else + { + b[index - a.length] = value; } +} - 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++) +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) { - 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); + length = 0; } - return { + var a = { ctor: '_Array', height: h, - table: table, - lengths: lengths + table: new Array(length) }; + if (h > 0) + { + a.lengths = new Array(length); + } + return a; } -function fromList(list) +// Returns an array of two balanced nodes. +function shuffle(a, b, toRemove) { - if (list.ctor === '[]') + 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) { - return empty; + 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++; } - // Allocate M sized blocks (table) and write list elements to it. - var table = new Array(M); - var nodes = []; - var i = 0; + // 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; - while (list.ctor !== '[]') + // 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) { - table[i] = list._0; - list = list._1; - i++; + // 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); - // table is full, so we can push a leaf containing it into the - // next node. - if (i === M) + // Copy and adjust size table. + slot.table = slot.table.concat(source.table.slice(from, to)); + if (slot.height > 0) { - var leaf = { - ctor: '_Array', - height: 0, - table: table - }; - fromListPush(leaf, nodes); - table = new Array(M); - i = 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); + } } - } - // 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); - } + from += to; - // 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) + // Only proceed to next slots[i] if the current one was + // fully copied. + if (source.table.length <= to) { - fromListPush(nodes[h], nodes); + 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++; } } - var head = nodes[nodes.length - 1]; - if (head.height > 0 && head.table.length === 1) + // Cleanup after the loop. Copy the last slot into the new nodes. + if (slot.table.length > 0) { - return head.table[0]; + saveSlot(newA, newB, write, slot); + write++; } - else + + // Shift the untouched slots to the left + while (read < a.table.length + b.table.length ) { - return head; + saveSlot(newA, newB, write, get2(a.table, b.table, read)); + read++; + write++; } + + return [newA, newB]; } -// Push a node into a higher node as a child. -function fromListPush(toPush, nodes) +// Navigation functions +function botRight(a) { - var h = toPush.height; + return a.table[a.table.length - 1]; +} +function botLeft(a) +{ + return a.table[0]; +} - // Maybe the node on this height does not exist. - if (nodes.length === h) +// 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) { - var node = { - ctor: '_Array', - height: h + 1, - table: [], - lengths: [] - }; - nodes.push(node); + newA.lengths = a.lengths.slice(); } + return newA; +} - nodes[h].table.push(toPush); - var len = length(toPush); - if (nodes[h].lengths.length > 0) - { - len += nodes[h].lengths[nodes[h].lengths.length - 1]; +// Returns how many items are in the tree. +function length(array) +{ + if (array.height === 0) + { + return array.table.length; } - nodes[h].lengths.push(len); - - if (nodes[h].table.length === M) + else { - fromListPush(nodes[h], nodes); - nodes[h] = { - ctor: '_Array', - height: h + 1, - table: [], - lengths: [] - }; + return array.lengths[array.lengths.length - 1]; } } -// Pushes an item via push_ to the bottom right of a tree. -function push(item, a) +// 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 pushed = push_(item, a); - if (pushed !== null) + var slot = i >> (5 * a.height); + while (a.lengths[slot] <= i) { - return pushed; + slot++; } - - var newTree = create(item, a.height); - return siblise(a, newTree); + return slot; } -// 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) +// Recursively creates a tree with a given height containing +// only the given item. +function create(item, h) { - // 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 + if (h === 0) { - return null; + return { + ctor: '_Array', + height: 0, + table: [item] + }; } + return { + ctor: '_Array', + height: h, + table: [create(item, h - 1)], + lengths: [1] + }; } -// Converts an array into a list of elements. -function toList(a) -{ - return toList_(_elm_lang$core$Native_List.Nil, a); -} - -function toList_(list, a) +// Recursively creates a tree that contains the given tree. +function parentise(tree, h) { - for (var i = a.table.length - 1; i >= 0; i--) + if (h === tree.height) { - list = - a.height === 0 - ? _elm_lang$core$Native_List.Cons(a.table[i], list) - : toList_(list, a.table[i]); + return tree; } - return list; -} -// Maps a function over the elements of an array. -function map(f, a) -{ - var newA = { + return { ctor: '_Array', - height: a.height, - table: new Array(a.table.length) + height: h, + table: [parentise(tree, h - 1)], + lengths: [length(tree)] }; - 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) +// Emphasizes blood brotherhood beneath two trees. +function siblise(a, b) { - var newA = { + return { ctor: '_Array', - height: a.height, - table: new Array(a.table.length) + height: a.height + 1, + table: [a, b], + lengths: [length(a), length(a) + length(b)] }; - 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 ? from : from + a.lengths[i - 1]); - } - return newA; } -function foldl(f, b, a) +function toJSArray(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; + var jsArray = new Array(length(a)); + toJSArray_(jsArray, 0, a); + return jsArray; } -function foldr(f, b, a) +function toJSArray_(jsArray, i, a) { - if (a.height === 0) + for (var t = 0; t < a.table.length; t++) { - for (var i = a.table.length; i--; ) + if (a.height === 0) { - b = A2(f, a.table[i], b); + jsArray[i + t] = a.table[t]; } - } - else - { - for (var i = a.table.length; i--; ) + else { - b = foldr(f, b, a.table[i]); + var inc = t === 0 ? 0 : a.lengths[t - 1]; + toJSArray_(jsArray, i + inc, a.table[t]); } } - return b; } -// TODO: currently, it slices the right, then the left. This can be -// optimized. -function slice(from, to, a) +function fromJSArray(jsArray) { - if (from < 0) - { - from += length(a); - } - if (to < 0) + if (jsArray.length === 0) { - to += length(a); + return empty; } - return sliceLeft(from, sliceRight(to, a)); + var h = Math.floor(Math.log(jsArray.length) / Math.log(M)); + return fromJSArray_(jsArray, h, 0, jsArray.length); } -function sliceRight(to, a) +function fromJSArray_(jsArray, h, from, to) { - if (to === length(a)) - { - return a; - } - - // Handle leaf level. - if (a.height === 0) + if (h === 0) { - var newA = { ctor:'_Array', height:0 }; - newA.table = a.table.slice(0, to); - return newA; + return { + ctor: '_Array', + height: 0, + table: jsArray.slice(from, to) + }; } - // 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) + 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++) { - return sliced; + 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); } - - // Create new node. - var newA = { + return { ctor: '_Array', - height: a.height, - table: a.table.slice(0, right), - lengths: a.lengths.slice(0, right) + height: h, + table: table, + lengths: lengths }; - 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; - } +return { + 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, - // Slice the left recursively. - var left = getSlot(from, a); - var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]); + toJSArray: toJSArray, + fromJSArray: fromJSArray +}; - // Maybe the a node is not even needed, as sliced contains the whole slice. - if (left === a.table.length - 1) - { - return sliced; - } +}(); +var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; +var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; +var _elm_lang$core$Array$isEmpty = function (array) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$Array$length(array), + 0); +}; +var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; +var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; +var _elm_lang$core$Array$get = F2( + function (i, array) { + return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( + i, + _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; + }); +var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; +var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; +var _elm_lang$core$Array$filter = F2( + function (isOkay, arr) { + var update = F2( + function (x, xs) { + return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; + }); + return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); + }); +var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; +var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; +var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; +var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; +var _elm_lang$core$Array$toIndexedList = function (array) { + return A3( + _elm_lang$core$List$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$Native_Array.length(array) - 1), + _elm_lang$core$Native_Array.toList(array)); +}; +var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; +var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; +var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; +var _elm_lang$core$Array$repeat = F2( + function (n, e) { + return A2( + _elm_lang$core$Array$initialize, + n, + _elm_lang$core$Basics$always(e)); + }); +var _elm_lang$core$Array$Array = {ctor: 'Array'}; - // 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; +var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; +var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; +var _elm_lang$core$Task$spawnCmd = F2( + function (router, _p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToApp(router), + _p1._0)); + }); +var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; +var _elm_lang$core$Task$mapError = F2( + function (convert, task) { + return A2( + _elm_lang$core$Task$onError, + function (_p2) { + return _elm_lang$core$Task$fail( + convert(_p2)); + }, + task); + }); +var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Task$map = F2( + function (func, taskA) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return _elm_lang$core$Task$succeed( + func(a)); + }, + taskA); + }); +var _elm_lang$core$Task$map2 = F3( + function (func, taskA, taskB) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return _elm_lang$core$Task$succeed( + A2(func, a, b)); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map3 = F4( + function (func, taskA, taskB, taskC) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return _elm_lang$core$Task$succeed( + A3(func, a, b, c)); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map4 = F5( + function (func, taskA, taskB, taskC, taskD) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return _elm_lang$core$Task$succeed( + A4(func, a, b, c, d)); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map5 = F6( + function (func, taskA, taskB, taskC, taskD, taskE) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return A2( + _elm_lang$core$Task$andThen, + function (e) { + return _elm_lang$core$Task$succeed( + A5(func, a, b, c, d, e)); + }, + taskE); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$sequence = function (tasks) { + var _p3 = tasks; + if (_p3.ctor === '[]') { + return _elm_lang$core$Task$succeed( + {ctor: '[]'}); + } else { + return A3( + _elm_lang$core$Task$map2, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + _p3._0, + _elm_lang$core$Task$sequence(_p3._1)); } +}; +var _elm_lang$core$Task$onEffects = F3( + function (router, commands, state) { + return A2( + _elm_lang$core$Task$map, + function (_p4) { + return {ctor: '_Tuple0'}; + }, + _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + _elm_lang$core$Task$spawnCmd(router), + commands))); + }); +var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); +var _elm_lang$core$Task$onSelfMsg = F3( + function (_p7, _p6, _p5) { + return _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); + }); +var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); +var _elm_lang$core$Task$Perform = function (a) { + return {ctor: 'Perform', _0: a}; +}; +var _elm_lang$core$Task$perform = F2( + function (toMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, toMessage, task))); + }); +var _elm_lang$core$Task$attempt = F2( + function (resultToMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2( + _elm_lang$core$Task$onError, + function (_p8) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Err(_p8))); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p9) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Ok(_p9))); + }, + task)))); + }); +var _elm_lang$core$Task$cmdMap = F2( + function (tagger, _p10) { + var _p11 = _p10; + return _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, tagger, _p11._0)); + }); +_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; - 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; +var _elm_lang$core$Dict$foldr = F3( + function (f, acc, t) { + foldr: + while (true) { + var _p0 = t; + if (_p0.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v1 = f, + _v2 = A3( + f, + _p0._1, + _p0._2, + A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), + _v3 = _p0._3; + f = _v1; + acc = _v2; + t = _v3; + continue foldr; } - 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); + }); +var _elm_lang$core$Dict$keys = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, keyList) { + return {ctor: '::', _0: key, _1: keyList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$values = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, valueList) { + return {ctor: '::', _0: value, _1: valueList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$toList = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, list) { + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: key, _1: value}, + _1: list + }; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$foldl = F3( + function (f, acc, dict) { + foldl: + while (true) { + var _p1 = dict; + if (_p1.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v5 = f, + _v6 = A3( + f, + _p1._1, + _p1._2, + A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), + _v7 = _p1._4; + f = _v5; + acc = _v6; + dict = _v7; + continue foldl; + } } - } - - // 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; + }); +var _elm_lang$core$Dict$merge = F6( + function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { + var stepState = F3( + function (rKey, rValue, _p2) { + stepState: + while (true) { + var _p3 = _p2; + var _p9 = _p3._1; + var _p8 = _p3._0; + var _p4 = _p8; + if (_p4.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + var _p7 = _p4._1; + var _p6 = _p4._0._1; + var _p5 = _p4._0._0; + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { + var _v10 = rKey, + _v11 = rValue, + _v12 = { + ctor: '_Tuple2', + _0: _p7, + _1: A3(leftStep, _p5, _p6, _p9) + }; + rKey = _v10; + rValue = _v11; + _p2 = _v12; + continue stepState; + } else { + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + return { + ctor: '_Tuple2', + _0: _p7, + _1: A4(bothStep, _p5, _p6, rValue, _p9) + }; + } + } + } + } + }); + var _p10 = A3( + _elm_lang$core$Dict$foldl, + stepState, + { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$toList(leftDict), + _1: initialResult + }, + rightDict); + var leftovers = _p10._0; + var intermediateResult = _p10._1; + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p11, result) { + var _p12 = _p11; + return A3(leftStep, _p12._0, _p12._1, result); + }), + intermediateResult, + leftovers); + }); +var _elm_lang$core$Dict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Debug.crash( + _elm_lang$core$String$concat( + { + ctor: '::', + _0: 'Internal red-black tree invariant violated, expected ', + _1: { + ctor: '::', + _0: msg, + _1: { + ctor: '::', + _0: ' and got ', + _1: { + ctor: '::', + _0: _elm_lang$core$Basics$toString(c), + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: lgot, + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: rgot, + _1: { + ctor: '::', + _0: '\nPlease report this bug to ', + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + })); + }); +var _elm_lang$core$Dict$isBBlack = function (dict) { + var _p13 = dict; + _v14_2: + do { + if (_p13.ctor === 'RBNode_elm_builtin') { + if (_p13._0.ctor === 'BBlack') { + return true; + } else { + break _v14_2; + } + } else { + if (_p13._0.ctor === 'LBBlack') { + return true; + } else { + break _v14_2; + } } - } - else - { - parent.table.shift(); - for (var i = 1; i < parent.lengths.length; i++) - { - parent.lengths[i] = parent.lengths[i] - parent.lengths[0]; + } while(false); + return false; +}; +var _elm_lang$core$Dict$sizeHelp = F2( + function (n, dict) { + sizeHelp: + while (true) { + var _p14 = dict; + if (_p14.ctor === 'RBEmpty_elm_builtin') { + return n; + } else { + var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), + _v17 = _p14._3; + n = _v16; + dict = _v17; + continue sizeHelp; + } } - 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; + }); +var _elm_lang$core$Dict$size = function (dict) { + return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); +}; +var _elm_lang$core$Dict$get = F2( + function (targetKey, dict) { + get: + while (true) { + var _p15 = dict; + if (_p15.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); + switch (_p16.ctor) { + case 'LT': + var _v20 = targetKey, + _v21 = _p15._3; + targetKey = _v20; + dict = _v21; + continue get; + case 'EQ': + return _elm_lang$core$Maybe$Just(_p15._2); + default: + var _v22 = targetKey, + _v23 = _p15._4; + targetKey = _v22; + dict = _v23; + continue get; + } + } + } + }); +var _elm_lang$core$Dict$member = F2( + function (key, dict) { + var _p17 = A2(_elm_lang$core$Dict$get, key, dict); + if (_p17.ctor === 'Just') { + return true; + } else { + return false; + } + }); +var _elm_lang$core$Dict$maxWithDefault = F3( + function (k, v, r) { + maxWithDefault: + while (true) { + var _p18 = r; + if (_p18.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: k, _1: v}; + } else { + var _v26 = _p18._1, + _v27 = _p18._2, + _v28 = _p18._4; + k = _v26; + v = _v27; + r = _v28; + continue maxWithDefault; + } + } + }); +var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; +var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; +var _elm_lang$core$Dict$Black = {ctor: 'Black'}; +var _elm_lang$core$Dict$blackish = function (t) { + var _p19 = t; + if (_p19.ctor === 'RBNode_elm_builtin') { + var _p20 = _p19._0; + return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); + } else { + return true; } - for (var i = 0; i < b.table.length; i++) - { - subLengths += b.table[i].table.length; +}; +var _elm_lang$core$Dict$Red = {ctor: 'Red'}; +var _elm_lang$core$Dict$moreBlack = function (color) { + var _p21 = color; + switch (_p21.ctor) { + case 'Black': + return _elm_lang$core$Dict$BBlack; + case 'Red': + return _elm_lang$core$Dict$Black; + case 'NBlack': + return _elm_lang$core$Dict$Red; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); } +}; +var _elm_lang$core$Dict$lessBlack = function (color) { + var _p22 = color; + switch (_p22.ctor) { + case 'BBlack': + return _elm_lang$core$Dict$Black; + case 'Black': + return _elm_lang$core$Dict$Red; + case 'Red': + return _elm_lang$core$Dict$NBlack; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + } +}; +var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; +var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; +var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { + return {ctor: 'RBEmpty_elm_builtin', _0: a}; +}; +var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); +var _elm_lang$core$Dict$isEmpty = function (dict) { + return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); +}; +var _elm_lang$core$Dict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; + }); +var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { + var _p23 = dict; + if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } else { + return dict; + } +}; +var _elm_lang$core$Dict$lessBlackTree = function (dict) { + var _p24 = dict; + if (_p24.ctor === 'RBNode_elm_builtin') { + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(_p24._0), + _p24._1, + _p24._2, + _p24._3, + _p24._4); + } else { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } +}; +var _elm_lang$core$Dict$balancedTree = 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( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(col), + yk, + yv, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; +}; +var _elm_lang$core$Dict$blacken = function (t) { + var _p25 = t; + if (_p25.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); + } +}; +var _elm_lang$core$Dict$redden = function (t) { + var _p26 = t; + if (_p26.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); + } +}; +var _elm_lang$core$Dict$balanceHelp = function (tree) { + var _p27 = tree; + _v36_6: + do { + _v36_5: + do { + _v36_4: + do { + _v36_3: + do { + _v36_2: + do { + _v36_1: + do { + _v36_0: + do { + if (_p27.ctor === 'RBNode_elm_builtin') { + if (_p27._3.ctor === 'RBNode_elm_builtin') { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._3._0.ctor) { + case 'Red': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + } + } + case 'NBlack': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + } + } + default: + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + } + case 'NBlack': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } + case 'NBlack': + if (_p27._0.ctor === 'BBlack') { + if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + default: + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + default: + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + switch (_p27._3._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._4._3._1, + _p27._4._3._2, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._4._1, + _p27._4._2, + _p27._4._3._4, + _elm_lang$core$Dict$redden(_p27._4._4))); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._3._4._1, + _p27._3._4._2, + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._3._1, + _p27._3._2, + _elm_lang$core$Dict$redden(_p27._3._3), + _p27._3._4._3), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); + } while(false); + return tree; +}; +var _elm_lang$core$Dict$balance = F5( + function (c, k, v, l, r) { + var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; + }); +var _elm_lang$core$Dict$bubble = F5( + function (c, k, v, l, r) { + return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$moreBlack(c), + k, + v, + _elm_lang$core$Dict$lessBlackTree(l), + _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _elm_lang$core$Dict$removeMax = F5( + function (c, k, v, l, r) { + var _p28 = r; + if (_p28.ctor === 'RBEmpty_elm_builtin') { + return A3(_elm_lang$core$Dict$rem, c, l, r); + } else { + return A5( + _elm_lang$core$Dict$bubble, + c, + k, + v, + l, + A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + } + }); +var _elm_lang$core$Dict$rem = F3( + function (color, left, right) { + var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; + if (_p29._0.ctor === 'RBEmpty_elm_builtin') { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p30 = color; + switch (_p30.ctor) { + case 'Red': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + case 'Black': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); + default: + return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p33 = _p29._1._0; + var _p32 = _p29._0._0; + var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; + if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/LBlack/Red', + color, + _elm_lang$core$Basics$toString(_p32), + _elm_lang$core$Basics$toString(_p33)); + } + } + } else { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p36 = _p29._1._0; + var _p35 = _p29._0._0; + var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/Red/LBlack', + color, + _elm_lang$core$Basics$toString(_p35), + _elm_lang$core$Basics$toString(_p36)); + } + } else { + var _p40 = _p29._0._2; + var _p39 = _p29._0._4; + var _p38 = _p29._0._1; + var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); + var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); + var k = _p37._0; + var v = _p37._1; + return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); + } + } + }); +var _elm_lang$core$Dict$map = F2( + function (f, dict) { + var _p41 = dict; + if (_p41.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + var _p42 = _p41._1; + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _p41._0, + _p42, + A2(f, _p42, _p41._2), + A2(_elm_lang$core$Dict$map, f, _p41._3), + A2(_elm_lang$core$Dict$map, f, _p41._4)); + } + }); +var _elm_lang$core$Dict$Same = {ctor: 'Same'}; +var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; +var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; +var _elm_lang$core$Dict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p43 = dict; + if (_p43.ctor === 'RBEmpty_elm_builtin') { + var _p44 = alter(_elm_lang$core$Maybe$Nothing); + if (_p44.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) + }; + } + } else { + var _p55 = _p43._2; + var _p54 = _p43._4; + var _p53 = _p43._3; + var _p52 = _p43._1; + var _p51 = _p43._0; + var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); + switch (_p45.ctor) { + case 'EQ': + var _p46 = alter( + _elm_lang$core$Maybe$Just(_p55)); + if (_p46.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) + }; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) + }; + } + case 'LT': + var _p47 = up(_p53); + var flag = _p47._0; + var newLeft = _p47._1; + var _p48 = flag; + switch (_p48.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) + }; + } + default: + var _p49 = up(_p54); + var flag = _p49._0; + var newRight = _p49._1; + var _p50 = flag; + switch (_p50.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) + }; + } + } + } + }; + var _p56 = up(dict); + var flag = _p56._0; + var updatedDict = _p56._1; + var _p57 = flag; + switch (_p57.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); + default: + return _elm_lang$core$Dict$blacken(updatedDict); + } + }); +var _elm_lang$core$Dict$insert = F3( + function (key, value, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _elm_lang$core$Dict$singleton = F2( + function (key, value) { + return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); + }); +var _elm_lang$core$Dict$union = F2( + function (t1, t2) { + return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); + }); +var _elm_lang$core$Dict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; + }); + return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); + }); +var _elm_lang$core$Dict$intersect = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p58) { + return A2(_elm_lang$core$Dict$member, k, t2); + }), + t1); + }); +var _elm_lang$core$Dict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p59) { + var _p60 = _p59; + var _p62 = _p60._1; + var _p61 = _p60._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), + _1: _p62 + } : { + ctor: '_Tuple2', + _0: _p61, + _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) + }; + }); + return A3( + _elm_lang$core$Dict$foldl, + add, + {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, + dict); + }); +var _elm_lang$core$Dict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); + }), + _elm_lang$core$Dict$empty, + assocs); +}; +var _elm_lang$core$Dict$remove = F2( + function (key, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _elm_lang$core$Dict$diff = F2( + function (t1, t2) { + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, v, t) { + return A2(_elm_lang$core$Dict$remove, k, t); + }), + t1, + t2); + }); - 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]; -} +//import Native.Scheduler // -function set2(a, b, index, value) -{ - if (index < a.length) - { - a[index] = value; - } - else - { - b[index - a.length] = value; - } -} +var _elm_lang$core$Native_Time = function() { -function saveSlot(a, b, index, slot) +var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - 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)); -} + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); +}); -// Creates a node or leaf with a given length at their arrays for perfomance. -// Is only used by shuffle. -function createNode(h, length) +function setInterval_(interval, task) { - if (length < 0) - { - length = 0; - } - var a = { - ctor: '_Array', - height: h, - table: new Array(length) - }; - if (h > 0) + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - 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)); + var id = setInterval(function() { + _elm_lang$core$Native_Scheduler.rawSpawn(task); + }, interval); - // 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++; - } + return function() { clearInterval(id); }; + }); +} - // 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; +return { + now: now, + setInterval_: F2(setInterval_) +}; - // 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); +}(); +var _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_; +var _elm_lang$core$Time$spawnHelp = F3( + function (router, intervals, processes) { + var _p0 = intervals; + if (_p0.ctor === '[]') { + return _elm_lang$core$Task$succeed(processes); + } else { + var _p1 = _p0._0; + var spawnRest = function (id) { + return A3( + _elm_lang$core$Time$spawnHelp, + router, + _p0._1, + A3(_elm_lang$core$Dict$insert, _p1, id, processes)); + }; + var spawnTimer = _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Time$setInterval, + _p1, + A2(_elm_lang$core$Platform$sendToSelf, router, _p1))); + return A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer); + } + }); +var _elm_lang$core$Time$addMySub = F2( + function (_p2, state) { + var _p3 = _p2; + var _p6 = _p3._1; + var _p5 = _p3._0; + var _p4 = A2(_elm_lang$core$Dict$get, _p5, state); + if (_p4.ctor === 'Nothing') { + return A3( + _elm_lang$core$Dict$insert, + _p5, + { + ctor: '::', + _0: _p6, + _1: {ctor: '[]'} + }, + state); + } else { + return A3( + _elm_lang$core$Dict$insert, + _p5, + {ctor: '::', _0: _p6, _1: _p4._0}, + state); + } + }); +var _elm_lang$core$Time$inMilliseconds = function (t) { + return t; +}; +var _elm_lang$core$Time$millisecond = 1; +var _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond; +var _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second; +var _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute; +var _elm_lang$core$Time$inHours = function (t) { + return t / _elm_lang$core$Time$hour; +}; +var _elm_lang$core$Time$inMinutes = function (t) { + return t / _elm_lang$core$Time$minute; +}; +var _elm_lang$core$Time$inSeconds = function (t) { + return t / _elm_lang$core$Time$second; +}; +var _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now; +var _elm_lang$core$Time$onSelfMsg = F3( + function (router, interval, state) { + var _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers); + if (_p7.ctor === 'Nothing') { + return _elm_lang$core$Task$succeed(state); + } else { + var tellTaggers = function (time) { + return _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + function (tagger) { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + tagger(time)); + }, + _p7._0)); + }; + return A2( + _elm_lang$core$Task$andThen, + function (_p8) { + return _elm_lang$core$Task$succeed(state); + }, + A2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now)); + } + }); +var _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time'); +var _elm_lang$core$Time$State = F2( + function (a, b) { + return {taggers: a, processes: b}; + }); +var _elm_lang$core$Time$init = _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)); +var _elm_lang$core$Time$onEffects = F3( + function (router, subs, _p9) { + var _p10 = _p9; + var rightStep = F3( + function (_p12, id, _p11) { + var _p13 = _p11; + return { + ctor: '_Tuple3', + _0: _p13._0, + _1: _p13._1, + _2: A2( + _elm_lang$core$Task$andThen, + function (_p14) { + return _p13._2; + }, + _elm_lang$core$Native_Scheduler.kill(id)) + }; + }); + var bothStep = F4( + function (interval, taggers, id, _p15) { + var _p16 = _p15; + return { + ctor: '_Tuple3', + _0: _p16._0, + _1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1), + _2: _p16._2 + }; + }); + var leftStep = F3( + function (interval, taggers, _p17) { + var _p18 = _p17; + return { + ctor: '_Tuple3', + _0: {ctor: '::', _0: interval, _1: _p18._0}, + _1: _p18._1, + _2: _p18._2 + }; + }); + var newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs); + var _p19 = A6( + _elm_lang$core$Dict$merge, + leftStep, + bothStep, + rightStep, + newTaggers, + _p10.processes, + { + ctor: '_Tuple3', + _0: {ctor: '[]'}, + _1: _elm_lang$core$Dict$empty, + _2: _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}) + }); + var spawnList = _p19._0; + var existingDict = _p19._1; + var killTask = _p19._2; + return A2( + _elm_lang$core$Task$andThen, + function (newProcesses) { + return _elm_lang$core$Task$succeed( + A2(_elm_lang$core$Time$State, newTaggers, newProcesses)); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p20) { + return A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict); + }, + killTask)); + }); +var _elm_lang$core$Time$Every = F2( + function (a, b) { + return {ctor: 'Every', _0: a, _1: b}; + }); +var _elm_lang$core$Time$every = F2( + function (interval, tagger) { + return _elm_lang$core$Time$subscription( + A2(_elm_lang$core$Time$Every, interval, tagger)); + }); +var _elm_lang$core$Time$subMap = F2( + function (f, _p21) { + var _p22 = _p21; + return A2( + _elm_lang$core$Time$Every, + _p22._0, + function (_p23) { + return f( + _p22._1(_p23)); + }); + }); +_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap}; - // 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); - } +var _elm_lang$core$Random$onSelfMsg = F3( + function (_p1, _p0, seed) { + return _elm_lang$core$Task$succeed(seed); + }); +var _elm_lang$core$Random$magicNum8 = 2147483562; +var _elm_lang$core$Random$range = function (_p2) { + return {ctor: '_Tuple2', _0: 0, _1: _elm_lang$core$Random$magicNum8}; +}; +var _elm_lang$core$Random$magicNum7 = 2147483399; +var _elm_lang$core$Random$magicNum6 = 2147483563; +var _elm_lang$core$Random$magicNum5 = 3791; +var _elm_lang$core$Random$magicNum4 = 40692; +var _elm_lang$core$Random$magicNum3 = 52774; +var _elm_lang$core$Random$magicNum2 = 12211; +var _elm_lang$core$Random$magicNum1 = 53668; +var _elm_lang$core$Random$magicNum0 = 40014; +var _elm_lang$core$Random$step = F2( + function (_p3, seed) { + var _p4 = _p3; + return _p4._0(seed); + }); +var _elm_lang$core$Random$onEffects = F3( + function (router, commands, seed) { + var _p5 = commands; + if (_p5.ctor === '[]') { + return _elm_lang$core$Task$succeed(seed); + } else { + var _p6 = A2(_elm_lang$core$Random$step, _p5._0._0, seed); + var value = _p6._0; + var newSeed = _p6._1; + return A2( + _elm_lang$core$Task$andThen, + function (_p7) { + return A3(_elm_lang$core$Random$onEffects, router, _p5._1, newSeed); + }, + A2(_elm_lang$core$Platform$sendToApp, router, value)); } - - from += to; - - // Only proceed to next slots[i] if the current one was - // fully copied. - if (source.table.length <= to) - { - read++; from = 0; + }); +var _elm_lang$core$Random$listHelp = F4( + function (list, n, generate, seed) { + listHelp: + while (true) { + if (_elm_lang$core$Native_Utils.cmp(n, 1) < 0) { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$List$reverse(list), + _1: seed + }; + } else { + var _p8 = generate(seed); + var value = _p8._0; + var newSeed = _p8._1; + var _v2 = {ctor: '::', _0: value, _1: list}, + _v3 = n - 1, + _v4 = generate, + _v5 = newSeed; + list = _v2; + n = _v3; + generate = _v4; + seed = _v5; + continue listHelp; + } } - - // Only create a new slot if the current one is filled up. - if (slot.table.length === M) + }); +var _elm_lang$core$Random$minInt = -2147483648; +var _elm_lang$core$Random$maxInt = 2147483647; +var _elm_lang$core$Random$iLogBase = F2( + function (b, i) { + return (_elm_lang$core$Native_Utils.cmp(i, b) < 0) ? 1 : (1 + A2(_elm_lang$core$Random$iLogBase, b, (i / b) | 0)); + }); +var _elm_lang$core$Random$command = _elm_lang$core$Native_Platform.leaf('Random'); +var _elm_lang$core$Random$Generator = function (a) { + return {ctor: 'Generator', _0: a}; +}; +var _elm_lang$core$Random$list = F2( + function (n, _p9) { + var _p10 = _p9; + return _elm_lang$core$Random$Generator( + function (seed) { + return A4( + _elm_lang$core$Random$listHelp, + {ctor: '[]'}, + n, + _p10._0, + seed); + }); + }); +var _elm_lang$core$Random$map = F2( + function (func, _p11) { + var _p12 = _p11; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p13 = _p12._0(seed0); + var a = _p13._0; + var seed1 = _p13._1; + return { + ctor: '_Tuple2', + _0: func(a), + _1: seed1 + }; + }); + }); +var _elm_lang$core$Random$map2 = F3( + function (func, _p15, _p14) { + var _p16 = _p15; + var _p17 = _p14; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p18 = _p16._0(seed0); + var a = _p18._0; + var seed1 = _p18._1; + var _p19 = _p17._0(seed1); + var b = _p19._0; + var seed2 = _p19._1; + return { + ctor: '_Tuple2', + _0: A2(func, a, b), + _1: seed2 + }; + }); + }); +var _elm_lang$core$Random$pair = F2( + function (genA, genB) { + return A3( + _elm_lang$core$Random$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + genA, + genB); + }); +var _elm_lang$core$Random$map3 = F4( + function (func, _p22, _p21, _p20) { + var _p23 = _p22; + var _p24 = _p21; + var _p25 = _p20; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p26 = _p23._0(seed0); + var a = _p26._0; + var seed1 = _p26._1; + var _p27 = _p24._0(seed1); + var b = _p27._0; + var seed2 = _p27._1; + var _p28 = _p25._0(seed2); + var c = _p28._0; + var seed3 = _p28._1; + return { + ctor: '_Tuple2', + _0: A3(func, a, b, c), + _1: seed3 + }; + }); + }); +var _elm_lang$core$Random$map4 = F5( + function (func, _p32, _p31, _p30, _p29) { + var _p33 = _p32; + var _p34 = _p31; + var _p35 = _p30; + var _p36 = _p29; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p37 = _p33._0(seed0); + var a = _p37._0; + var seed1 = _p37._1; + var _p38 = _p34._0(seed1); + var b = _p38._0; + var seed2 = _p38._1; + var _p39 = _p35._0(seed2); + var c = _p39._0; + var seed3 = _p39._1; + var _p40 = _p36._0(seed3); + var d = _p40._0; + var seed4 = _p40._1; + return { + ctor: '_Tuple2', + _0: A4(func, a, b, c, d), + _1: seed4 + }; + }); + }); +var _elm_lang$core$Random$map5 = F6( + function (func, _p45, _p44, _p43, _p42, _p41) { + var _p46 = _p45; + var _p47 = _p44; + var _p48 = _p43; + var _p49 = _p42; + var _p50 = _p41; + return _elm_lang$core$Random$Generator( + function (seed0) { + var _p51 = _p46._0(seed0); + var a = _p51._0; + var seed1 = _p51._1; + var _p52 = _p47._0(seed1); + var b = _p52._0; + var seed2 = _p52._1; + var _p53 = _p48._0(seed2); + var c = _p53._0; + var seed3 = _p53._1; + var _p54 = _p49._0(seed3); + var d = _p54._0; + var seed4 = _p54._1; + var _p55 = _p50._0(seed4); + var e = _p55._0; + var seed5 = _p55._1; + return { + ctor: '_Tuple2', + _0: A5(func, a, b, c, d, e), + _1: seed5 + }; + }); + }); +var _elm_lang$core$Random$andThen = F2( + function (callback, _p56) { + var _p57 = _p56; + return _elm_lang$core$Random$Generator( + function (seed) { + var _p58 = _p57._0(seed); + var result = _p58._0; + var newSeed = _p58._1; + var _p59 = callback(result); + var genB = _p59._0; + return genB(newSeed); + }); + }); +var _elm_lang$core$Random$State = F2( + function (a, b) { + return {ctor: 'State', _0: a, _1: b}; + }); +var _elm_lang$core$Random$initState = function (seed) { + var s = A2(_elm_lang$core$Basics$max, seed, 0 - seed); + var q = (s / (_elm_lang$core$Random$magicNum6 - 1)) | 0; + var s2 = A2(_elm_lang$core$Basics_ops['%'], q, _elm_lang$core$Random$magicNum7 - 1); + var s1 = A2(_elm_lang$core$Basics_ops['%'], s, _elm_lang$core$Random$magicNum6 - 1); + return A2(_elm_lang$core$Random$State, s1 + 1, s2 + 1); +}; +var _elm_lang$core$Random$next = function (_p60) { + var _p61 = _p60; + var _p63 = _p61._1; + var _p62 = _p61._0; + var k2 = (_p63 / _elm_lang$core$Random$magicNum3) | 0; + var rawState2 = (_elm_lang$core$Random$magicNum4 * (_p63 - (k2 * _elm_lang$core$Random$magicNum3))) - (k2 * _elm_lang$core$Random$magicNum5); + var newState2 = (_elm_lang$core$Native_Utils.cmp(rawState2, 0) < 0) ? (rawState2 + _elm_lang$core$Random$magicNum7) : rawState2; + var k1 = (_p62 / _elm_lang$core$Random$magicNum1) | 0; + var rawState1 = (_elm_lang$core$Random$magicNum0 * (_p62 - (k1 * _elm_lang$core$Random$magicNum1))) - (k1 * _elm_lang$core$Random$magicNum2); + var newState1 = (_elm_lang$core$Native_Utils.cmp(rawState1, 0) < 0) ? (rawState1 + _elm_lang$core$Random$magicNum6) : rawState1; + var z = newState1 - newState2; + var newZ = (_elm_lang$core$Native_Utils.cmp(z, 1) < 0) ? (z + _elm_lang$core$Random$magicNum8) : z; + return { + ctor: '_Tuple2', + _0: newZ, + _1: A2(_elm_lang$core$Random$State, newState1, newState2) + }; +}; +var _elm_lang$core$Random$split = function (_p64) { + var _p65 = _p64; + var _p68 = _p65._1; + var _p67 = _p65._0; + var _p66 = _elm_lang$core$Tuple$second( + _elm_lang$core$Random$next(_p65)); + var t1 = _p66._0; + var t2 = _p66._1; + var new_s2 = _elm_lang$core$Native_Utils.eq(_p68, 1) ? (_elm_lang$core$Random$magicNum7 - 1) : (_p68 - 1); + var new_s1 = _elm_lang$core$Native_Utils.eq(_p67, _elm_lang$core$Random$magicNum6 - 1) ? 1 : (_p67 + 1); + return { + ctor: '_Tuple2', + _0: A2(_elm_lang$core$Random$State, new_s1, t2), + _1: A2(_elm_lang$core$Random$State, t1, new_s2) + }; +}; +var _elm_lang$core$Random$Seed = function (a) { + return {ctor: 'Seed', _0: a}; +}; +var _elm_lang$core$Random$int = F2( + function (a, b) { + return _elm_lang$core$Random$Generator( + function (_p69) { + var _p70 = _p69; + var _p75 = _p70._0; + var base = 2147483561; + var f = F3( + function (n, acc, state) { + f: + while (true) { + var _p71 = n; + if (_p71 === 0) { + return {ctor: '_Tuple2', _0: acc, _1: state}; + } else { + var _p72 = _p75.next(state); + var x = _p72._0; + var nextState = _p72._1; + var _v27 = n - 1, + _v28 = x + (acc * base), + _v29 = nextState; + n = _v27; + acc = _v28; + state = _v29; + continue f; + } + } + }); + var _p73 = (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? {ctor: '_Tuple2', _0: a, _1: b} : {ctor: '_Tuple2', _0: b, _1: a}; + var lo = _p73._0; + var hi = _p73._1; + var k = (hi - lo) + 1; + var n = A2(_elm_lang$core$Random$iLogBase, base, k); + var _p74 = A3(f, n, 1, _p75.state); + var v = _p74._0; + var nextState = _p74._1; + return { + ctor: '_Tuple2', + _0: lo + A2(_elm_lang$core$Basics_ops['%'], v, k), + _1: _elm_lang$core$Random$Seed( + _elm_lang$core$Native_Utils.update( + _p75, + {state: nextState})) + }; + }); + }); +var _elm_lang$core$Random$bool = A2( + _elm_lang$core$Random$map, + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(1), + A2(_elm_lang$core$Random$int, 0, 1)); +var _elm_lang$core$Random$float = F2( + function (a, b) { + return _elm_lang$core$Random$Generator( + function (seed) { + var _p76 = A2( + _elm_lang$core$Random$step, + A2(_elm_lang$core$Random$int, _elm_lang$core$Random$minInt, _elm_lang$core$Random$maxInt), + seed); + var number = _p76._0; + var newSeed = _p76._1; + var negativeOneToOne = _elm_lang$core$Basics$toFloat(number) / _elm_lang$core$Basics$toFloat(_elm_lang$core$Random$maxInt - _elm_lang$core$Random$minInt); + var _p77 = (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? {ctor: '_Tuple2', _0: a, _1: b} : {ctor: '_Tuple2', _0: b, _1: a}; + var lo = _p77._0; + var hi = _p77._1; + var scaled = ((lo + hi) / 2) + ((hi - lo) * negativeOneToOne); + return {ctor: '_Tuple2', _0: scaled, _1: newSeed}; + }); + }); +var _elm_lang$core$Random$initialSeed = function (n) { + return _elm_lang$core$Random$Seed( { - 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++; + state: _elm_lang$core$Random$initState(n), + next: _elm_lang$core$Random$next, + split: _elm_lang$core$Random$split, + range: _elm_lang$core$Random$range + }); +}; +var _elm_lang$core$Random$init = A2( + _elm_lang$core$Task$andThen, + function (t) { + return _elm_lang$core$Task$succeed( + _elm_lang$core$Random$initialSeed( + _elm_lang$core$Basics$round(t))); + }, + _elm_lang$core$Time$now); +var _elm_lang$core$Random$Generate = function (a) { + return {ctor: 'Generate', _0: a}; +}; +var _elm_lang$core$Random$generate = F2( + function (tagger, generator) { + return _elm_lang$core$Random$command( + _elm_lang$core$Random$Generate( + A2(_elm_lang$core$Random$map, tagger, generator))); + }); +var _elm_lang$core$Random$cmdMap = F2( + function (func, _p78) { + var _p79 = _p78; + return _elm_lang$core$Random$Generate( + A2(_elm_lang$core$Random$map, func, _p79._0)); + }); +_elm_lang$core$Native_Platform.effectManagers['Random'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Random$init, onEffects: _elm_lang$core$Random$onEffects, onSelfMsg: _elm_lang$core$Random$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Random$cmdMap}; + +var _elm_community$random_extra$Random_Extra$andThen6 = F7( + function (constructor, generatorA, generatorB, generatorC, generatorD, generatorE, generatorF) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A2( + _elm_lang$core$Random$andThen, + function (d) { + return A2( + _elm_lang$core$Random$andThen, + function (e) { + return A2( + _elm_lang$core$Random$andThen, + function (f) { + return A6(constructor, a, b, c, d, e, f); + }, + generatorF); + }, + generatorE); + }, + generatorD); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen5 = F6( + function (constructor, generatorA, generatorB, generatorC, generatorD, generatorE) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A2( + _elm_lang$core$Random$andThen, + function (d) { + return A2( + _elm_lang$core$Random$andThen, + function (e) { + return A5(constructor, a, b, c, d, e); + }, + generatorE); + }, + generatorD); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen4 = F5( + function (constructor, generatorA, generatorB, generatorC, generatorD) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A2( + _elm_lang$core$Random$andThen, + function (d) { + return A4(constructor, a, b, c, d); + }, + generatorD); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen3 = F4( + function (constructor, generatorA, generatorB, generatorC) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2( + _elm_lang$core$Random$andThen, + function (c) { + return A3(constructor, a, b, c); + }, + generatorC); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$andThen2 = F3( + function (constructor, generatorA, generatorB) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return A2(constructor, a, b); + }, + generatorB); + }, + generatorA); + }); +var _elm_community$random_extra$Random_Extra$rangeLengthList = F3( + function (minLength, maxLength, generator) { + return A2( + _elm_lang$core$Random$andThen, + function (len) { + return A2(_elm_lang$core$Random$list, len, generator); + }, + A2(_elm_lang$core$Random$int, minLength, maxLength)); + }); +var _elm_community$random_extra$Random_Extra$result = F3( + function (genBool, genErr, genVal) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return b ? A2(_elm_lang$core$Random$map, _elm_lang$core$Result$Ok, genVal) : A2(_elm_lang$core$Random$map, _elm_lang$core$Result$Err, genErr); + }, + genBool); + }); +var _elm_community$random_extra$Random_Extra$sample = function () { + var find = F2( + function (k, ys) { + find: + while (true) { + var _p0 = ys; + if (_p0.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + if (_elm_lang$core$Native_Utils.eq(k, 0)) { + return _elm_lang$core$Maybe$Just(_p0._0); + } else { + var _v1 = k - 1, + _v2 = _p0._1; + k = _v1; + ys = _v2; + continue find; + } + } + } + }); + return function (xs) { + return A2( + _elm_lang$core$Random$map, + function (i) { + return A2(find, i, xs); + }, + A2( + _elm_lang$core$Random$int, + 0, + _elm_lang$core$List$length(xs) - 1)); + }; +}(); +var _elm_community$random_extra$Random_Extra$frequency = function (pairs) { + var pick = F2( + function (choices, n) { + pick: + while (true) { + var _p1 = choices; + if ((_p1.ctor === '::') && (_p1._0.ctor === '_Tuple2')) { + var _p2 = _p1._0._0; + if (_elm_lang$core$Native_Utils.cmp(n, _p2) < 1) { + return _p1._0._1; + } else { + var _v4 = _p1._1, + _v5 = n - _p2; + choices = _v4; + n = _v5; + continue pick; + } + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'Random.Extra', + { + start: {line: 154, column: 13}, + end: {line: 162, column: 79} + }, + _p1)('Empty list passed to Random.Extra.frequency!'); + } + } + }); + var total = _elm_lang$core$List$sum( + A2( + _elm_lang$core$List$map, + function (_p4) { + return _elm_lang$core$Basics$abs( + _elm_lang$core$Tuple$first(_p4)); + }, + pairs)); + return A2( + _elm_lang$core$Random$andThen, + pick(pairs), + A2(_elm_lang$core$Random$float, 0, total)); +}; +var _elm_community$random_extra$Random_Extra$choices = function (gens) { + return _elm_community$random_extra$Random_Extra$frequency( + A2( + _elm_lang$core$List$map, + function (g) { + return {ctor: '_Tuple2', _0: 1, _1: g}; + }, + gens)); +}; +var _elm_community$random_extra$Random_Extra$choice = F2( + function (x, y) { + return A2( + _elm_lang$core$Random$map, + function (b) { + return b ? x : y; + }, + _elm_lang$core$Random$bool); + }); +var _elm_community$random_extra$Random_Extra$oneIn = function (n) { + return A2( + _elm_lang$core$Random$map, + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(1), + A2(_elm_lang$core$Random$int, 1, n)); +}; +var _elm_community$random_extra$Random_Extra$andMap = F2( + function (generator, funcGenerator) { + return A3( + _elm_lang$core$Random$map2, + F2( + function (x, y) { + return x(y); + }), + funcGenerator, + generator); + }); +var _elm_community$random_extra$Random_Extra$map6 = F7( + function (f, generatorA, generatorB, generatorC, generatorD, generatorE, generatorF) { + return A2( + _elm_community$random_extra$Random_Extra$andMap, + generatorF, + A6(_elm_lang$core$Random$map5, f, generatorA, generatorB, generatorC, generatorD, generatorE)); + }); +var _elm_community$random_extra$Random_Extra$constant = function (value) { + return A2( + _elm_lang$core$Random$map, + function (_p5) { + return value; + }, + _elm_lang$core$Random$bool); +}; +var _elm_community$random_extra$Random_Extra$filter = F2( + function (predicate, generator) { + return A2( + _elm_lang$core$Random$andThen, + function (a) { + return predicate(a) ? _elm_community$random_extra$Random_Extra$constant(a) : A2(_elm_community$random_extra$Random_Extra$filter, predicate, generator); + }, + generator); + }); +var _elm_community$random_extra$Random_Extra$combine = function (generators) { + var _p6 = generators; + if (_p6.ctor === '[]') { + return _elm_community$random_extra$Random_Extra$constant( + {ctor: '[]'}); + } else { + return A3( + _elm_lang$core$Random$map2, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + _p6._0, + _elm_community$random_extra$Random_Extra$combine(_p6._1)); } +}; +var _elm_community$random_extra$Random_Extra$maybe = F2( + function (genBool, genA) { + return A2( + _elm_lang$core$Random$andThen, + function (b) { + return b ? A2(_elm_lang$core$Random$map, _elm_lang$core$Maybe$Just, genA) : _elm_community$random_extra$Random_Extra$constant(_elm_lang$core$Maybe$Nothing); + }, + genBool); + }); - // 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++; +var _elm_community$random_extra$Random_List$get = F2( + function (index, list) { + return _elm_lang$core$List$head( + A2(_elm_lang$core$List$drop, index, list)); + }); +var _elm_community$random_extra$Random_List$choose = function (list) { + if (_elm_lang$core$List$isEmpty(list)) { + return _elm_community$random_extra$Random_Extra$constant( + {ctor: '_Tuple2', _0: _elm_lang$core$Maybe$Nothing, _1: list}); + } else { + var back = function (i) { + return A2(_elm_lang$core$List$drop, i + 1, list); + }; + var front = function (i) { + return A2(_elm_lang$core$List$take, i, list); + }; + var lastIndex = _elm_lang$core$List$length(list) - 1; + var gen = A2(_elm_lang$core$Random$int, 0, lastIndex); + return A2( + _elm_lang$core$Random$map, + function (index) { + return { + ctor: '_Tuple2', + _0: A2(_elm_community$random_extra$Random_List$get, index, list), + _1: A2( + _elm_lang$core$List$append, + front(index), + back(index)) + }; + }, + gen); } - - 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(); +}; +var _elm_community$random_extra$Random_List$shuffle = function (list) { + if (_elm_lang$core$List$isEmpty(list)) { + return _elm_community$random_extra$Random_Extra$constant(list); + } else { + var helper = function (_p0) { + var _p1 = _p0; + var _p6 = _p1._0; + return A2( + _elm_lang$core$Random$andThen, + function (_p2) { + var _p3 = _p2; + var _p5 = _p3._1; + var _p4 = _p3._0; + if (_p4.ctor === 'Nothing') { + return _elm_community$random_extra$Random_Extra$constant( + {ctor: '_Tuple2', _0: _p6, _1: _p5}); + } else { + return helper( + { + ctor: '_Tuple2', + _0: {ctor: '::', _0: _p4._0, _1: _p6}, + _1: _p5 + }); + } + }, + _elm_community$random_extra$Random_List$choose(_p1._1)); + }; + return A2( + _elm_lang$core$Random$map, + _elm_lang$core$Tuple$first, + helper( + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: list + })); } - return newA; -} +}; -// Returns how many items are in the tree. -function length(array) +var _elm_lang$animation_frame$Native_AnimationFrame = function() { - 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) +function create() { - var slot = i >> (5 * a.height); - while (a.lengths[slot] <= i) + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - slot++; - } - return slot; -} + var id = requestAnimationFrame(function() { + callback(_elm_lang$core$Native_Scheduler.succeed(Date.now())); + }); -// 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 function() { + cancelAnimationFrame(id); }; - } - 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)] - }; -} +return { + create: create +}; -// 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; -} +var _elm_lang$core$Process$kill = _elm_lang$core$Native_Scheduler.kill; +var _elm_lang$core$Process$sleep = _elm_lang$core$Native_Scheduler.sleep; +var _elm_lang$core$Process$spawn = _elm_lang$core$Native_Scheduler.spawn; -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]); +var _elm_lang$animation_frame$AnimationFrame$rAF = _elm_lang$animation_frame$Native_AnimationFrame.create( + {ctor: '_Tuple0'}); +var _elm_lang$animation_frame$AnimationFrame$subscription = _elm_lang$core$Native_Platform.leaf('AnimationFrame'); +var _elm_lang$animation_frame$AnimationFrame$State = F3( + function (a, b, c) { + return {subs: a, request: b, oldTime: c}; + }); +var _elm_lang$animation_frame$AnimationFrame$init = _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + 0)); +var _elm_lang$animation_frame$AnimationFrame$onEffects = F3( + function (router, subs, _p0) { + var _p1 = _p0; + var _p5 = _p1.request; + var _p4 = _p1.oldTime; + var _p2 = {ctor: '_Tuple2', _0: _p5, _1: subs}; + if (_p2._0.ctor === 'Nothing') { + if (_p2._1.ctor === '[]') { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + _p4)); + } else { + return A2( + _elm_lang$core$Task$andThen, + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + function (time) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + subs, + _elm_lang$core$Maybe$Just(pid), + time)); + }, + _elm_lang$core$Time$now); + }, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$animation_frame$AnimationFrame$rAF))); + } + } else { + if (_p2._1.ctor === '[]') { + return A2( + _elm_lang$core$Task$andThen, + function (_p3) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + {ctor: '[]'}, + _elm_lang$core$Maybe$Nothing, + _p4)); + }, + _elm_lang$core$Process$kill(_p2._0._0)); + } else { + return _elm_lang$core$Task$succeed( + A3(_elm_lang$animation_frame$AnimationFrame$State, subs, _p5, _p4)); + } } - } -} - -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 _elm_lang$animation_frame$AnimationFrame$onSelfMsg = F3( + function (router, newTime, _p6) { + var _p7 = _p6; + var _p10 = _p7.subs; + var diff = newTime - _p7.oldTime; + var send = function (sub) { + var _p8 = sub; + if (_p8.ctor === 'Time') { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(newTime)); + } else { + return A2( + _elm_lang$core$Platform$sendToApp, + router, + _p8._0(diff)); + } }; - } - - 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 - }; -} - -return { - 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 A2( + _elm_lang$core$Task$andThen, + function (pid) { + return A2( + _elm_lang$core$Task$andThen, + function (_p9) { + return _elm_lang$core$Task$succeed( + A3( + _elm_lang$animation_frame$AnimationFrame$State, + _p10, + _elm_lang$core$Maybe$Just(pid), + newTime)); + }, + _elm_lang$core$Task$sequence( + A2(_elm_lang$core$List$map, send, _p10))); + }, + _elm_lang$core$Process$spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToSelf(router), + _elm_lang$animation_frame$AnimationFrame$rAF))); + }); +var _elm_lang$animation_frame$AnimationFrame$Diff = function (a) { + return {ctor: 'Diff', _0: a}; }; - -}(); -var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; -var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; -var _elm_lang$core$Array$isEmpty = function (array) { - return _elm_lang$core$Native_Utils.eq( - _elm_lang$core$Array$length(array), - 0); +var _elm_lang$animation_frame$AnimationFrame$diffs = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Diff(tagger)); }; -var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; -var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; -var _elm_lang$core$Array$get = F2( - function (i, array) { - return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( - i, - _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( - A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; - }); -var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; -var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; -var _elm_lang$core$Array$filter = F2( - function (isOkay, arr) { - var update = F2( - function (x, xs) { - return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; - }); - return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); - }); -var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; -var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; -var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; -var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; -var _elm_lang$core$Array$toIndexedList = function (array) { - return A3( - _elm_lang$core$List$map2, - F2( - function (v0, v1) { - return {ctor: '_Tuple2', _0: v0, _1: v1}; - }), - A2( - _elm_lang$core$List$range, - 0, - _elm_lang$core$Native_Array.length(array) - 1), - _elm_lang$core$Native_Array.toList(array)); +var _elm_lang$animation_frame$AnimationFrame$Time = function (a) { + return {ctor: 'Time', _0: a}; }; -var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; -var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; -var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; -var _elm_lang$core$Array$repeat = F2( - function (n, e) { - return A2( - _elm_lang$core$Array$initialize, - n, - _elm_lang$core$Basics$always(e)); +var _elm_lang$animation_frame$AnimationFrame$times = function (tagger) { + return _elm_lang$animation_frame$AnimationFrame$subscription( + _elm_lang$animation_frame$AnimationFrame$Time(tagger)); +}; +var _elm_lang$animation_frame$AnimationFrame$subMap = F2( + function (func, sub) { + var _p11 = sub; + if (_p11.ctor === 'Time') { + return _elm_lang$animation_frame$AnimationFrame$Time( + function (_p12) { + return func( + _p11._0(_p12)); + }); + } else { + return _elm_lang$animation_frame$AnimationFrame$Diff( + function (_p13) { + return func( + _p11._0(_p13)); + }); + } }); -var _elm_lang$core$Array$Array = {ctor: 'Array'}; +_elm_lang$core$Native_Platform.effectManagers['AnimationFrame'] = {pkg: 'elm-lang/animation-frame', init: _elm_lang$animation_frame$AnimationFrame$init, onEffects: _elm_lang$animation_frame$AnimationFrame$onEffects, onSelfMsg: _elm_lang$animation_frame$AnimationFrame$onSelfMsg, tag: 'sub', subMap: _elm_lang$animation_frame$AnimationFrame$subMap}; //import Maybe, Native.Array, Native.List, Native.Utils, Result // @@ -10130,12 +10881,22 @@ var _user$project$Map$resolveCollision = F3( }; } }); +var _user$project$Map$colorSwapTime = 2000; var _user$project$Map$resize = F2( function (window, map) { return _elm_lang$core$Native_Utils.update( map, {window: window}); }); +var _user$project$Map$removeBall = F2( + function (id, balls) { + return A2( + _elm_lang$core$List$filter, + function (ball) { + return !_elm_lang$core$Native_Utils.eq(ball.id, id); + }, + balls); + }); var _user$project$Map$update = F2( function (msg, map) { var _p5 = msg; @@ -10155,37 +10916,64 @@ var _user$project$Map$update = F2( _1: _user$project$Audio$play(_p5._0) }; default: - return _elm_lang$core$Native_Utils.eq(_p5._0, _p5._1) ? { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - map, - {points: map.points + 10}), - _1: _elm_lang$core$Platform_Cmd$none - } : {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + if (_elm_lang$core$Native_Utils.eq(_p5._1, _p5._2)) { + var artGame = map.artGame; + var newArtGame = _elm_lang$core$Native_Utils.update( + artGame, + { + balls: A2(_user$project$Map$removeBall, _p5._0, artGame.balls) + }); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {points: map.points + 10, artGame: newArtGame}), + _1: _user$project$Audio$play('audio/puff.mp3') + }; + } else { + return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + } } }); -var _user$project$Map$initMovingBall = F3( - function (_p7, _p6, color) { +var _user$project$Map$initMovingBall = F4( + function (id, _p7, _p6, color) { var _p8 = _p7; var _p9 = _p6; return { + id: id, color: color, radius: 32, pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), - velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p9._0, _p9._1) + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, 0) }; }); -var _user$project$Map$Map = F4( - function (a, b, c, d) { - return {level: a, artGame: b, window: c, points: d}; +var _user$project$Map$get = F2( + function (index, list) { + return _elm_lang$core$List$head( + A2(_elm_lang$core$List$drop, index, list)); }); -var _user$project$Map$ArtGame = F2( - function (a, b) { - return {color: a, balls: b}; +var _user$project$Map$randItem = function (list) { + return A2( + _elm_lang$core$Random$map, + function (i) { + return A2(_user$project$Map$get, i, list); + }, + A2( + _elm_lang$core$Random$int, + 0, + _elm_lang$core$List$length(list) - 1)); +}; +var _user$project$Map$Map = F5( + function (a, b, c, d, e) { + return {level: a, artGame: b, window: c, points: d, seed: e}; }); -var _user$project$Map$MovingBall = F4( +var _user$project$Map$ArtGame = F4( function (a, b, c, d) { - return {color: a, pos: b, radius: c, velocity: d}; + return {color: a, balls: b, time: c, seed: d}; + }); +var _user$project$Map$MovingBall = F5( + function (a, b, c, d, e) { + return {id: a, color: b, pos: c, radius: d, velocity: e}; }); var _user$project$Map$CollisionResult = F2( function (a, b) { @@ -10405,11 +11193,77 @@ var _user$project$Map$animateBall = F3( velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newXVelocity, newYVelocity) }); }); +var _user$project$Map$ArtStore = function (a) { + return {ctor: 'ArtStore', _0: a}; +}; +var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; +var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; +var _user$project$Map$Home = {ctor: 'Home'}; +var _user$project$Map$Purple = {ctor: 'Purple'}; +var _user$project$Map$Blue = {ctor: 'Blue'}; +var _user$project$Map$Green = {ctor: 'Green'}; +var _user$project$Map$Yellow = {ctor: 'Yellow'}; +var _user$project$Map$Orange = {ctor: 'Orange'}; +var _user$project$Map$Red = {ctor: 'Red'}; +var _user$project$Map$colorGen = A2( + _elm_lang$core$Random$map, + function (i) { + var _p27 = i; + switch (_p27) { + case 1: + return _user$project$Map$Red; + case 2: + return _user$project$Map$Orange; + case 3: + return _user$project$Map$Yellow; + case 4: + return _user$project$Map$Green; + case 5: + return _user$project$Map$Blue; + case 6: + return _user$project$Map$Purple; + default: + return _user$project$Map$Red; + } + }, + A2(_elm_lang$core$Random$int, 1, 3)); +var _user$project$Map$randomColor = F2( + function (seed, balls) { + return A2( + _elm_lang$core$Tuple$mapFirst, + _elm_lang$core$Maybe$withDefault(_user$project$Map$Red), + A2( + _elm_lang$core$Tuple$mapFirst, + _elm_lang$core$Maybe$map( + function (ball) { + return ball.color; + }), + A2( + _elm_lang$core$Random$step, + _user$project$Map$randItem(balls), + seed))); + }); var _user$project$Map$animateArtGame = F3( function (timeDiff, window, artGame) { + var newTime = artGame.time + timeDiff; + var _p28 = (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Map$colorSwapTime) > 0) ? { + ctor: '_Tuple2', + _0: A2(_user$project$Map$randomColor, artGame.seed, artGame.balls), + _1: 0 + } : { + ctor: '_Tuple2', + _0: {ctor: '_Tuple2', _0: artGame.color, _1: artGame.seed}, + _1: newTime + }; + var newColor = _p28._0._0; + var newSeed = _p28._0._1; + var timeReset = _p28._1; return _elm_lang$core$Native_Utils.update( artGame, { + time: timeReset, + color: newColor, + seed: newSeed, balls: _user$project$Map$collisions( A2( _elm_lang$core$List$map, @@ -10425,62 +11279,63 @@ var _user$project$Map$tick = F2( artGame: A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame) }); }); -var _user$project$Map$ArtStore = function (a) { - return {ctor: 'ArtStore', _0: a}; -}; -var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; -var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; -var _user$project$Map$Home = {ctor: 'Home'}; -var _user$project$Map$Purple = {ctor: 'Purple'}; -var _user$project$Map$Blue = {ctor: 'Blue'}; -var _user$project$Map$Green = {ctor: 'Green'}; -var _user$project$Map$Yellow = {ctor: 'Yellow'}; -var _user$project$Map$Orange = {ctor: 'Orange'}; -var _user$project$Map$Red = {ctor: 'Red'}; -var _user$project$Map$initArtGame = { - color: _user$project$Map$Yellow, - balls: { +var _user$project$Map$initialBalls = { + ctor: '::', + _0: A4( + _user$project$Map$initMovingBall, + 1, + {ctor: '_Tuple2', _0: 0, _1: 0}, + {ctor: '_Tuple2', _0: 1, _1: 1}, + _user$project$Map$Red), + _1: { ctor: '::', - _0: A3( + _0: A4( _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 0, _1: 0}, - {ctor: '_Tuple2', _0: 1, _1: 1}, - _user$project$Map$Red), + 2, + {ctor: '_Tuple2', _0: 100, _1: 70}, + {ctor: '_Tuple2', _0: -1, _1: 1}, + _user$project$Map$Yellow), _1: { ctor: '::', - _0: A3( + _0: A4( _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 100, _1: 70}, - {ctor: '_Tuple2', _0: -1, _1: 1}, - _user$project$Map$Yellow), + 3, + {ctor: '_Tuple2', _0: 70, _1: 170}, + {ctor: '_Tuple2', _0: -1, _1: -1}, + _user$project$Map$Green), _1: { ctor: '::', - _0: A3( + _0: A4( _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 70, _1: 170}, - {ctor: '_Tuple2', _0: -1, _1: -1}, - _user$project$Map$Green), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$initMovingBall, - {ctor: '_Tuple2', _0: 200, _1: 170}, - {ctor: '_Tuple2', _0: 1, _1: -1}, - _user$project$Map$Blue), - _1: {ctor: '[]'} - } + 4, + {ctor: '_Tuple2', _0: 200, _1: 170}, + {ctor: '_Tuple2', _0: 1, _1: -1}, + _user$project$Map$Blue), + _1: {ctor: '[]'} } } } }; +var _user$project$Map$initArtGame = { + time: 0, + seed: _elm_lang$core$Random$initialSeed(0), + color: _user$project$Map$Yellow, + balls: _user$project$Map$initialBalls +}; var _user$project$Map$init = F2( function (window, level) { - return {level: level, artGame: _user$project$Map$initArtGame, window: window, points: 0}; + return { + level: level, + artGame: _user$project$Map$initArtGame, + window: window, + points: 0, + seed: _elm_lang$core$Random$initialSeed(0) + }; }); var _user$project$Map$newLevel = F2( function (level, map) { - var _p27 = level; - if ((_p27.ctor === 'ArtStore') && (_p27._0 === true)) { + var _p29 = level; + if ((_p29.ctor === 'ArtStore') && (_p29._0 === true)) { return _elm_lang$core$Native_Utils.update( map, {artGame: _user$project$Map$initArtGame, level: level}); @@ -10490,9 +11345,9 @@ var _user$project$Map$newLevel = F2( {level: level}); } }); -var _user$project$Map$ColorClicked = F2( - function (a, b) { - return {ctor: 'ColorClicked', _0: a, _1: b}; +var _user$project$Map$ColorClicked = F3( + function (a, b, c) { + return {ctor: 'ColorClicked', _0: a, _1: b, _2: c}; }); var _user$project$Map$colorBall = F2( function (gameColor, ball) { @@ -10571,7 +11426,7 @@ var _user$project$Map$colorBall = F2( _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( - A2(_user$project$Map$ColorClicked, gameColor, ball.color)), + A3(_user$project$Map$ColorClicked, ball.id, gameColor, ball.color)), _1: {ctor: '[]'} } }, @@ -10581,8 +11436,8 @@ var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Map$groceryItem = F3( - function (_p28, image, audio) { - var _p29 = _p28; + function (_p30, image, audio) { + var _p31 = _p30; return A2( _elm_lang$html$Html$img, { @@ -10607,7 +11462,7 @@ var _user$project$Map$groceryItem = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p29._0), + _elm_lang$core$Basics$toString(_p31._0), 'px') }, _1: { @@ -10617,7 +11472,7 @@ var _user$project$Map$groceryItem = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p29._1), + _elm_lang$core$Basics$toString(_p31._1), 'px') }, _1: {ctor: '[]'} @@ -10637,8 +11492,8 @@ var _user$project$Map$groceryItem = F3( {ctor: '[]'}); }); var _user$project$Map$colorCircle = F3( - function (_p30, color, audio) { - var _p31 = _p30; + function (_p32, color, audio) { + var _p33 = _p32; return A2( _elm_lang$html$Html$div, { @@ -10663,7 +11518,7 @@ var _user$project$Map$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p31._0), + _elm_lang$core$Basics$toString(_p33._0), 'px') }, _1: { @@ -10673,7 +11528,7 @@ var _user$project$Map$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p31._1), + _elm_lang$core$Basics$toString(_p33._1), 'px') }, _1: { @@ -10703,8 +11558,8 @@ var _user$project$Map$colorCircle = F3( var _user$project$Map$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; -var _user$project$Map$house = function (_p32) { - var _p33 = _p32; +var _user$project$Map$house = function (_p34) { + var _p35 = _p34; return A2( _elm_lang$html$Html$img, { @@ -10733,7 +11588,7 @@ var _user$project$Map$house = function (_p32) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p33._0), + _elm_lang$core$Basics$toString(_p35._0), 'px') }, _1: { @@ -10743,7 +11598,7 @@ var _user$project$Map$house = function (_p32) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p33._1), + _elm_lang$core$Basics$toString(_p35._1), 'px') }, _1: {ctor: '[]'} @@ -10758,10 +11613,10 @@ var _user$project$Map$house = function (_p32) { }, {ctor: '[]'}); }; -var _user$project$Map$storeBuilding = function (_p34) { - var _p35 = _p34; - var _p37 = _p35._1; - var _p36 = _p35._0; +var _user$project$Map$storeBuilding = function (_p36) { + var _p37 = _p36; + var _p39 = _p37._1; + var _p38 = _p37._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10795,7 +11650,7 @@ var _user$project$Map$storeBuilding = function (_p34) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36), + _elm_lang$core$Basics$toString(_p38), 'px') }, _1: { @@ -10805,7 +11660,7 @@ var _user$project$Map$storeBuilding = function (_p34) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37), + _elm_lang$core$Basics$toString(_p39), 'px') }, _1: {ctor: '[]'} @@ -10851,7 +11706,7 @@ var _user$project$Map$storeBuilding = function (_p34) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36 + 7), + _elm_lang$core$Basics$toString(_p38 + 7), 'px') }, _1: { @@ -10861,7 +11716,7 @@ var _user$project$Map$storeBuilding = function (_p34) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37 + 10), + _elm_lang$core$Basics$toString(_p39 + 10), 'px') }, _1: {ctor: '[]'} @@ -10884,10 +11739,10 @@ var _user$project$Map$storeBuilding = function (_p34) { } }); }; -var _user$project$Map$artStoreBuilding = function (_p38) { - var _p39 = _p38; - var _p41 = _p39._1; - var _p40 = _p39._0; +var _user$project$Map$artStoreBuilding = function (_p40) { + var _p41 = _p40; + var _p43 = _p41._1; + var _p42 = _p41._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -10922,7 +11777,7 @@ var _user$project$Map$artStoreBuilding = function (_p38) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p40), + _elm_lang$core$Basics$toString(_p42), 'px') }, _1: { @@ -10932,7 +11787,7 @@ var _user$project$Map$artStoreBuilding = function (_p38) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41), + _elm_lang$core$Basics$toString(_p43), 'px') }, _1: {ctor: '[]'} @@ -10978,7 +11833,7 @@ var _user$project$Map$artStoreBuilding = function (_p38) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p40 + 7), + _elm_lang$core$Basics$toString(_p42 + 7), 'px') }, _1: { @@ -10988,7 +11843,7 @@ var _user$project$Map$artStoreBuilding = function (_p38) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41 + 10), + _elm_lang$core$Basics$toString(_p43 + 10), 'px') }, _1: {ctor: '[]'} @@ -11033,8 +11888,8 @@ var _user$project$Map$hometown = function (mapSize) { }); }; var _user$project$Map$playButton = F2( - function (_p42, level) { - var _p43 = _p42; + function (_p44, level) { + var _p45 = _p44; return A2( _elm_lang$html$Html$button, { @@ -11053,7 +11908,7 @@ var _user$project$Map$playButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p43._0), + _elm_lang$core$Basics$toString(_p45._0), 'px') }, _1: { @@ -11063,7 +11918,7 @@ var _user$project$Map$playButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p43._1), + _elm_lang$core$Basics$toString(_p45._1), 'px') }, _1: { @@ -11093,8 +11948,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p44, level) { - var _p45 = _p44; + function (_p46, level) { + var _p47 = _p46; return A2( _elm_lang$html$Html$button, { @@ -11113,7 +11968,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45._0), + _elm_lang$core$Basics$toString(_p47._0), 'px') }, _1: { @@ -11123,7 +11978,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45._1), + _elm_lang$core$Basics$toString(_p47._1), 'px') }, _1: { @@ -11274,18 +12129,18 @@ var _user$project$Map$groceryStore = function (mapSize) { }; var _user$project$Map$artStore = F2( function (play, map) { - var _p46 = play; - if (_p46 === true) { + var _p48 = play; + if (_p48 === true) { return A2(_user$project$Map$colorGame, map.points, map.artGame); } else { var showCircle = F2( - function (n, _p47) { - var _p48 = _p47; + function (n, _p49) { + var _p50 = _p49; return A3( _user$project$Map$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p48._0, - _p48._1); + _p50._0, + _p50._1); }); return A2( _elm_lang$html$Html$div, @@ -11333,8 +12188,8 @@ var _user$project$Map$artStore = F2( }); var _user$project$Map$view = F2( function (mapSize, map) { - var _p49 = map.level; - switch (_p49.ctor) { + var _p51 = map.level; + switch (_p51.ctor) { case 'Home': return _user$project$Map$home(mapSize); case 'HomeTown': @@ -11342,7 +12197,7 @@ var _user$project$Map$view = F2( case 'GroceryStore': return _user$project$Map$groceryStore(mapSize); default: - return A2(_user$project$Map$artStore, _p49._0, map); + return A2(_user$project$Map$artStore, _p51._0, map); } }); @@ -11497,11 +12352,7 @@ var _user$project$Main$view = function (model) { _1: { ctor: '::', _0: A2(_user$project$Main$mapView, model.window, model.map), - _1: { - ctor: '::', - _0: A2(_user$project$Bee$view, _elm_lang$core$Maybe$Nothing, model.user), - _1: {ctor: '[]'} - } + _1: {ctor: '[]'} } }); }; diff --git a/index.html b/index.html index d9f1cc9..14e12e4 100644 --- a/index.html +++ b/index.html @@ -1,12410 +1,20 @@ -Main \ No newline at end of file + + + Bee + + + +
+ + + + + From e4b68daca629192b3ad43cfb2fcfc6bb8af232c4 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Fri, 26 May 2017 18:10:17 -0700 Subject: [PATCH 17/33] added color images, randomly generate color balls --- Map.elm | 156 +- elm-package.json | 1 + elm.js | 7545 +++++++++++++++++------------- imgs/colors/blue-bird.png | Bin 0 -> 81809 bytes imgs/colors/blue-fish.png | Bin 0 -> 131119 bytes imgs/colors/green-frog.png | Bin 0 -> 103400 bytes imgs/colors/green-turtle.png | Bin 0 -> 196331 bytes imgs/colors/orange-tangerine.png | Bin 0 -> 257006 bytes imgs/colors/purple-octopus.png | Bin 0 -> 110165 bytes imgs/colors/red-cherry.png | Bin 0 -> 222475 bytes imgs/colors/red-umbrella.png | Bin 0 -> 76649 bytes imgs/colors/yellow-banana.png | Bin 0 -> 68438 bytes imgs/colors/yellow-car.png | Bin 0 -> 153630 bytes imgs/colors/yellow-cheese.png | Bin 0 -> 51902 bytes 14 files changed, 4465 insertions(+), 3237 deletions(-) create mode 100644 imgs/colors/blue-bird.png create mode 100644 imgs/colors/blue-fish.png create mode 100644 imgs/colors/green-frog.png create mode 100644 imgs/colors/green-turtle.png create mode 100644 imgs/colors/orange-tangerine.png create mode 100644 imgs/colors/purple-octopus.png create mode 100644 imgs/colors/red-cherry.png create mode 100644 imgs/colors/red-umbrella.png create mode 100644 imgs/colors/yellow-banana.png create mode 100644 imgs/colors/yellow-car.png create mode 100644 imgs/colors/yellow-cheese.png diff --git a/Map.elm b/Map.elm index bfa9c73..18499f1 100644 --- a/Map.elm +++ b/Map.elm @@ -3,6 +3,7 @@ module Map exposing (..) import Audio import Bee exposing (Bee) import Dict exposing (Dict) +import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick) @@ -27,8 +28,12 @@ type alias Map = init : Window.Size -> Level -> Map init window level = + let + ( artGame, _ ) = + initArtGame window (Random.initialSeed 0) + in { level = level - , artGame = initArtGame + , artGame = artGame , window = window , points = 0 , seed = Random.initialSeed 0 @@ -57,31 +62,8 @@ type Color colorGen : Random.Generator Color colorGen = - Random.int 1 3 - |> Random.map - (\i -> - case i of - 1 -> - Red - - 2 -> - Orange - - 3 -> - Yellow - - 4 -> - Green - - 5 -> - Blue - - 6 -> - Purple - - _ -> - Red - ) + randItem [ Red, Orange, Yellow, Green, Blue, Purple ] + |> Random.map (Maybe.withDefault Red) type alias ArtGame = @@ -98,6 +80,7 @@ type alias MovingBall = , pos : Vec2 , radius : Float , velocity : Vec2 + , img : String } @@ -105,19 +88,29 @@ newLevel : Level -> Map -> Map newLevel level map = case level of ArtStore True -> - { map | artGame = initArtGame, level = level } + let + ( artGame, seed ) = + initArtGame map.window map.seed + in + { map | artGame = artGame, seed = seed, level = level } _ -> { map | level = level } -initArtGame : ArtGame -initArtGame = - { time = 0 - , seed = Random.initialSeed 0 - , color = Yellow - , balls = initialBalls - } +initArtGame : Window.Size -> Random.Seed -> ( ArtGame, Random.Seed ) +initArtGame window seed = + let + ( balls, newSeed ) = + initialBalls window seed + in + ( { time = 0 + , seed = newSeed + , color = Yellow + , balls = balls + } + , newSeed + ) get : Int -> List a -> Maybe a @@ -140,22 +133,93 @@ randomColor seed balls = |> Tuple.mapFirst (Maybe.withDefault Red) -initialBalls : List MovingBall -initialBalls = - [ initMovingBall 1 ( 0, 0 ) ( 1, 1 ) Red - , initMovingBall 2 ( 100, 70 ) ( -1, 1 ) Yellow - , initMovingBall 3 ( 70, 170 ) ( -1, -1 ) Green - , initMovingBall 4 ( 200, 170 ) ( 1, -1 ) Blue - ] +imageDir = + "imgs/colors/" -initMovingBall : Int -> ( Float, Float ) -> ( Float, Float ) -> Color -> MovingBall -initMovingBall id ( x, y ) ( vx, vy ) color = +images : EveryDict Color (List String) +images = + EveryDict.fromList + [ ( Red, [ "red-cherry.png", "red-umbrella.png" ] ) + , ( Orange, [ "orange-tangerine.png" ] ) + , ( Yellow, [ "yellow-banana.png", "yellow-car.png", "yellow-cheese.png" ] ) + , ( Green, [ "green-frog.png", "green-turtle.png" ] ) + , ( Blue, [ "blue-bird.png", "blue-fish.png" ] ) + , ( Purple, [ "purple-octopus.png" ] ) + ] + + +alwaysGen : a -> Random.Generator a +alwaysGen x = + Random.map (\_ -> x) Random.bool + + +randomImage : Color -> Random.Generator String +randomImage color = + let + options = + EveryDict.get color images + in + case options of + Nothing -> + -- should never happen + alwaysGen "" + + Just [] -> + -- should never happen + alwaysGen "" + + Just imageList -> + randItem imageList + |> Random.map (Maybe.withDefault "") + + +randomPosition : Window.Size -> Random.Generator ( Float, Float ) +randomPosition window = + Random.pair + (Random.map toFloat (Random.int 30 window.width)) + (Random.map toFloat (Random.int 30 window.height)) + + +randomVelocity : Random.Generator ( Float, Float ) +randomVelocity = + Random.pair + (Random.map toFloat (Random.int -1 1)) + (Random.map toFloat (Random.int -1 1)) + + +randomMovingBall : Window.Size -> Int -> Random.Generator MovingBall +randomMovingBall window id = + colorGen + |> Random.andThen + (\color -> + Random.map3 + (initMovingBall id color) + (randomPosition window) + randomVelocity + (randomImage color) + ) + + +initialBalls : Window.Size -> Random.Seed -> ( List MovingBall, Random.Seed ) +initialBalls window seed = + List.foldr + (\id ( balls, seed ) -> + Random.step (randomMovingBall window id) seed + |> Tuple.mapFirst (\ball -> ball :: balls) + ) + ( [], seed ) + (List.range 0 9) + + +initMovingBall : Int -> Color -> ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall +initMovingBall id color ( x, y ) ( vx, vy ) image = { id = id , color = color , radius = 32 , pos = vec2 x y , velocity = vec2 0 0 + , img = image } @@ -716,7 +780,11 @@ colorBall gameColor ball = div [ style [ ( "border-radius", "50%" ) - , ( "background-color", toString ball.color ) + + -- , ( "background-color", toString ball.color ) + , ( "background-image", "url(" ++ imageDir ++ ball.img ++ ")" ) + , ( "background-size", "contain" ) + , ( "background-repeat", "no-repeat" ) , ( "border", "1px solid black" ) , ( "position", "absolute" ) , ( "left", (toString <| getX ball.pos) ++ "px" ) diff --git a/elm-package.json b/elm-package.json index 14faba3..69c92c8 100644 --- a/elm-package.json +++ b/elm-package.json @@ -8,6 +8,7 @@ ], "exposed-modules": [], "dependencies": { + "eeue56/elm-all-dict": "2.0.1 <= v < 3.0.0", "elm-community/linear-algebra": "3.1.0 <= v < 4.0.0", "elm-community/random-extra": "2.0.0 <= v < 3.0.0", "elm-lang/animation-frame": "1.0.1 <= v < 2.0.0", diff --git a/elm.js b/elm.js index 204b038..423eef3 100644 --- a/elm.js +++ b/elm.js @@ -890,39 +890,6 @@ var _elm_lang$core$Basics$JustOneMore = function (a) { return {ctor: 'JustOneMore', _0: a}; }; -//import Native.Utils // - -var _elm_lang$core$Native_Debug = function() { - -function log(tag, value) -{ - var msg = tag + ': ' + _elm_lang$core$Native_Utils.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); -} - -return { - crash: crash, - log: F2(log) -}; - -}(); -var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; -var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; - var _elm_lang$core$Maybe$withDefault = F2( function ($default, maybe) { var _p0 = maybe; @@ -1686,148 +1653,36 @@ var _elm_lang$core$List$indexedMap = F2( xs); }); -var _elm_lang$core$Result$toMaybe = function (result) { - var _p0 = result; - if (_p0.ctor === 'Ok') { - return _elm_lang$core$Maybe$Just(_p0._0); - } else { - return _elm_lang$core$Maybe$Nothing; +//import Native.Utils // + +var _elm_lang$core$Native_Debug = function() { + +function log(tag, value) +{ + var msg = tag + ': ' + _elm_lang$core$Native_Utils.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); +} + +return { + crash: crash, + log: F2(log) }; -var _elm_lang$core$Result$withDefault = F2( - function (def, result) { - var _p1 = result; - if (_p1.ctor === 'Ok') { - return _p1._0; - } else { - return def; - } - }); -var _elm_lang$core$Result$Err = function (a) { - return {ctor: 'Err', _0: a}; -}; -var _elm_lang$core$Result$andThen = F2( - function (callback, result) { - var _p2 = result; - if (_p2.ctor === 'Ok') { - return callback(_p2._0); - } else { - return _elm_lang$core$Result$Err(_p2._0); - } - }); -var _elm_lang$core$Result$Ok = function (a) { - return {ctor: 'Ok', _0: a}; -}; -var _elm_lang$core$Result$map = F2( - function (func, ra) { - var _p3 = ra; - if (_p3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - func(_p3._0)); - } else { - return _elm_lang$core$Result$Err(_p3._0); - } - }); -var _elm_lang$core$Result$map2 = F3( - function (func, ra, rb) { - var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; - if (_p4._0.ctor === 'Ok') { - if (_p4._1.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A2(func, _p4._0._0, _p4._1._0)); - } else { - return _elm_lang$core$Result$Err(_p4._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p4._0._0); - } - }); -var _elm_lang$core$Result$map3 = F4( - function (func, ra, rb, rc) { - var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; - if (_p5._0.ctor === 'Ok') { - if (_p5._1.ctor === 'Ok') { - if (_p5._2.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); - } else { - return _elm_lang$core$Result$Err(_p5._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p5._0._0); - } - }); -var _elm_lang$core$Result$map4 = F5( - function (func, ra, rb, rc, rd) { - var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; - if (_p6._0.ctor === 'Ok') { - if (_p6._1.ctor === 'Ok') { - if (_p6._2.ctor === 'Ok') { - if (_p6._3.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); - } else { - return _elm_lang$core$Result$Err(_p6._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p6._0._0); - } - }); -var _elm_lang$core$Result$map5 = F6( - function (func, ra, rb, rc, rd, re) { - var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; - if (_p7._0.ctor === 'Ok') { - if (_p7._1.ctor === 'Ok') { - if (_p7._2.ctor === 'Ok') { - if (_p7._3.ctor === 'Ok') { - if (_p7._4.ctor === 'Ok') { - return _elm_lang$core$Result$Ok( - A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); - } else { - return _elm_lang$core$Result$Err(_p7._4._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._3._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._2._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._1._0); - } - } else { - return _elm_lang$core$Result$Err(_p7._0._0); - } - }); -var _elm_lang$core$Result$mapError = F2( - function (f, result) { - var _p8 = result; - if (_p8.ctor === 'Ok') { - return _elm_lang$core$Result$Ok(_p8._0); - } else { - return _elm_lang$core$Result$Err( - f(_p8._0)); - } - }); -var _elm_lang$core$Result$fromMaybe = F2( - function (err, maybe) { - var _p9 = maybe; - if (_p9.ctor === 'Just') { - return _elm_lang$core$Result$Ok(_p9._0); - } else { - return _elm_lang$core$Result$Err(err); - } - }); +}(); //import Maybe, Native.List, Native.Utils, Result // var _elm_lang$core$Native_String = function() { @@ -2225,2371 +2080,2012 @@ var _elm_lang$core$Char$isHexDigit = function ($char) { $char)); }; -var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; -var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; -var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; -var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; -var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; -var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; -var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; -var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; -var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; -var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; -var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; -var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; -var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; -var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; -var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; -var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; -var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; -var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; -var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; -var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; -var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; -var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; -var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; -var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; -var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; -var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; -var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; -var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; -var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; -var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; -var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; -var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; -var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; -var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; -var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; -var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; -var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; -var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; -var _elm_lang$core$String$fromChar = function ($char) { - return A2(_elm_lang$core$String$cons, $char, ''); +var _elm_lang$core$Result$toMaybe = function (result) { + var _p0 = result; + if (_p0.ctor === 'Ok') { + return _elm_lang$core$Maybe$Just(_p0._0); + } else { + return _elm_lang$core$Maybe$Nothing; + } }; -var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; - -var _elm_lang$core$Tuple$mapSecond = F2( - function (func, _p0) { - var _p1 = _p0; - return { - ctor: '_Tuple2', - _0: _p1._0, - _1: func(_p1._1) - }; - }); -var _elm_lang$core$Tuple$mapFirst = F2( - function (func, _p2) { - var _p3 = _p2; - return { - ctor: '_Tuple2', - _0: func(_p3._0), - _1: _p3._1 - }; +var _elm_lang$core$Result$withDefault = F2( + function (def, result) { + var _p1 = result; + if (_p1.ctor === 'Ok') { + return _p1._0; + } else { + return def; + } }); -var _elm_lang$core$Tuple$second = function (_p4) { - var _p5 = _p4; - return _p5._1; +var _elm_lang$core$Result$Err = function (a) { + return {ctor: 'Err', _0: a}; }; -var _elm_lang$core$Tuple$first = function (_p6) { - var _p7 = _p6; - return _p7._0; +var _elm_lang$core$Result$andThen = F2( + function (callback, result) { + var _p2 = result; + if (_p2.ctor === 'Ok') { + return callback(_p2._0); + } else { + return _elm_lang$core$Result$Err(_p2._0); + } + }); +var _elm_lang$core$Result$Ok = function (a) { + return {ctor: 'Ok', _0: a}; }; - -//import // - -var _elm_lang$core$Native_Platform = function() { - - -// PROGRAMS - -function program(impl) -{ - return function(flagDecoder) - { - return function(object, moduleName) - { - object['worker'] = function worker(flags) - { - if (typeof flags !== 'undefined') - { - throw new Error( - 'The `' + moduleName + '` module does not need flags.\n' - + 'Call ' + moduleName + '.worker() with no arguments and you should be all set!' - ); +var _elm_lang$core$Result$map = F2( + function (func, ra) { + var _p3 = ra; + if (_p3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + func(_p3._0)); + } else { + return _elm_lang$core$Result$Err(_p3._0); + } + }); +var _elm_lang$core$Result$map2 = F3( + function (func, ra, rb) { + var _p4 = {ctor: '_Tuple2', _0: ra, _1: rb}; + if (_p4._0.ctor === 'Ok') { + if (_p4._1.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A2(func, _p4._0._0, _p4._1._0)); + } else { + return _elm_lang$core$Result$Err(_p4._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p4._0._0); + } + }); +var _elm_lang$core$Result$map3 = F4( + function (func, ra, rb, rc) { + var _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc}; + if (_p5._0.ctor === 'Ok') { + if (_p5._1.ctor === 'Ok') { + if (_p5._2.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A3(func, _p5._0._0, _p5._1._0, _p5._2._0)); + } else { + return _elm_lang$core$Result$Err(_p5._2._0); } - - return initialize( - impl.init, - impl.update, - impl.subscriptions, - renderer - ); - }; - }; - }; -} - -function programWithFlags(impl) -{ - return function(flagDecoder) - { - return function(object, moduleName) - { - object['worker'] = function worker(flags) - { - if (typeof flagDecoder === 'undefined') - { - throw new Error( - 'Are you trying to sneak a Never value into Elm? Trickster!\n' - + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n' - + 'Use `program` instead if you do not want flags.' - ); + } else { + return _elm_lang$core$Result$Err(_p5._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p5._0._0); + } + }); +var _elm_lang$core$Result$map4 = F5( + function (func, ra, rb, rc, rd) { + var _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd}; + if (_p6._0.ctor === 'Ok') { + if (_p6._1.ctor === 'Ok') { + if (_p6._2.ctor === 'Ok') { + if (_p6._3.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0)); + } else { + return _elm_lang$core$Result$Err(_p6._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._2._0); } - - var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); - if (result.ctor === 'Err') - { - throw new Error( - moduleName + '.worker(...) was called with an unexpected argument.\n' - + 'I tried to convert it to an Elm value, but ran into this problem:\n\n' - + result._0 - ); + } else { + return _elm_lang$core$Result$Err(_p6._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p6._0._0); + } + }); +var _elm_lang$core$Result$map5 = F6( + function (func, ra, rb, rc, rd, re) { + var _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re}; + if (_p7._0.ctor === 'Ok') { + if (_p7._1.ctor === 'Ok') { + if (_p7._2.ctor === 'Ok') { + if (_p7._3.ctor === 'Ok') { + if (_p7._4.ctor === 'Ok') { + return _elm_lang$core$Result$Ok( + A5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0)); + } else { + return _elm_lang$core$Result$Err(_p7._4._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._3._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._2._0); } - - return initialize( - impl.init(result._0), - impl.update, - impl.subscriptions, - renderer - ); - }; - }; - }; -} - -function renderer(enqueue, _) -{ - return function(_) {}; -} - - -// HTML TO PROGRAM - -function htmlToProgram(vnode) -{ - var emptyBag = batch(_elm_lang$core$Native_List.Nil); - var noChange = _elm_lang$core$Native_Utils.Tuple2( - _elm_lang$core$Native_Utils.Tuple0, - emptyBag - ); - - return _elm_lang$virtual_dom$VirtualDom$program({ - init: noChange, - view: function(model) { return main; }, - update: F2(function(msg, model) { return noChange; }), - subscriptions: function (model) { return emptyBag; } + } else { + return _elm_lang$core$Result$Err(_p7._1._0); + } + } else { + return _elm_lang$core$Result$Err(_p7._0._0); + } }); -} - - -// INITIALIZE A PROGRAM - -function initialize(init, update, subscriptions, renderer) -{ - // ambient state - var managers = {}; - var updateView; - - // init and update state in main process - var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - var model = init._0; - updateView = renderer(enqueue, model); - var cmds = init._1; - var subs = subscriptions(model); - dispatchEffects(managers, cmds, subs); - callback(_elm_lang$core$Native_Scheduler.succeed(model)); +var _elm_lang$core$Result$mapError = F2( + function (f, result) { + var _p8 = result; + if (_p8.ctor === 'Ok') { + return _elm_lang$core$Result$Ok(_p8._0); + } else { + return _elm_lang$core$Result$Err( + f(_p8._0)); + } + }); +var _elm_lang$core$Result$fromMaybe = F2( + function (err, maybe) { + var _p9 = maybe; + if (_p9.ctor === 'Just') { + return _elm_lang$core$Result$Ok(_p9._0); + } else { + return _elm_lang$core$Result$Err(err); + } }); - function onMessage(msg, model) - { - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - var results = A2(update, msg, model); - model = results._0; - updateView(model); - var cmds = results._1; - var subs = subscriptions(model); - dispatchEffects(managers, cmds, subs); - callback(_elm_lang$core$Native_Scheduler.succeed(model)); - }); - } - - var mainProcess = spawnLoop(initApp, onMessage); - - function enqueue(msg) - { - _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg); - } - - var ports = setupEffects(managers, enqueue); - - return ports ? { ports: ports } : {}; -} - - -// EFFECT MANAGERS - -var effectManagers = {}; - -function setupEffects(managers, callback) -{ - var ports; - - // setup all necessary effect managers - for (var key in effectManagers) - { - var manager = effectManagers[key]; - - if (manager.isForeign) - { - ports = ports || {}; - ports[key] = manager.tag === 'cmd' - ? setupOutgoingPort(key) - : setupIncomingPort(key, callback); - } - - managers[key] = makeManager(manager, callback); - } - - return ports; -} - -function makeManager(info, callback) -{ - var router = { - main: callback, - self: undefined - }; - - var tag = info.tag; - var onEffects = info.onEffects; - var onSelfMsg = info.onSelfMsg; - - function onMessage(msg, state) - { - if (msg.ctor === 'self') - { - return A3(onSelfMsg, router, msg._0, state); - } - - var fx = msg._0; - switch (tag) - { - case 'cmd': - return A3(onEffects, router, fx.cmds, state); - - case 'sub': - return A3(onEffects, router, fx.subs, state); +var _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList; +var _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList; +var _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat; +var _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt; +var _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes; +var _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith; +var _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith; +var _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains; +var _elm_lang$core$String$all = _elm_lang$core$Native_String.all; +var _elm_lang$core$String$any = _elm_lang$core$Native_String.any; +var _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower; +var _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper; +var _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines; +var _elm_lang$core$String$words = _elm_lang$core$Native_String.words; +var _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight; +var _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft; +var _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim; +var _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight; +var _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft; +var _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad; +var _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight; +var _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft; +var _elm_lang$core$String$right = _elm_lang$core$Native_String.right; +var _elm_lang$core$String$left = _elm_lang$core$Native_String.left; +var _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice; +var _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat; +var _elm_lang$core$String$join = _elm_lang$core$Native_String.join; +var _elm_lang$core$String$split = _elm_lang$core$Native_String.split; +var _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr; +var _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl; +var _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse; +var _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter; +var _elm_lang$core$String$map = _elm_lang$core$Native_String.map; +var _elm_lang$core$String$length = _elm_lang$core$Native_String.length; +var _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat; +var _elm_lang$core$String$append = _elm_lang$core$Native_String.append; +var _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons; +var _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons; +var _elm_lang$core$String$fromChar = function ($char) { + return A2(_elm_lang$core$String$cons, $char, ''); +}; +var _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty; - case 'fx': - return A4(onEffects, router, fx.cmds, fx.subs, state); +var _elm_lang$core$Dict$foldr = F3( + function (f, acc, t) { + foldr: + while (true) { + var _p0 = t; + if (_p0.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v1 = f, + _v2 = A3( + f, + _p0._1, + _p0._2, + A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), + _v3 = _p0._3; + f = _v1; + acc = _v2; + t = _v3; + continue foldr; + } } - } - - var process = spawnLoop(info.init, onMessage); - router.self = process; - return process; -} - -function sendToApp(router, msg) -{ - return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) - { - router.main(msg); - callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); }); -} - -function sendToSelf(router, msg) -{ - return A2(_elm_lang$core$Native_Scheduler.send, router.self, { - ctor: 'self', - _0: msg +var _elm_lang$core$Dict$keys = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, keyList) { + return {ctor: '::', _0: key, _1: keyList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$values = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, valueList) { + return {ctor: '::', _0: value, _1: valueList}; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$toList = function (dict) { + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (key, value, list) { + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: key, _1: value}, + _1: list + }; + }), + {ctor: '[]'}, + dict); +}; +var _elm_lang$core$Dict$foldl = F3( + function (f, acc, dict) { + foldl: + while (true) { + var _p1 = dict; + if (_p1.ctor === 'RBEmpty_elm_builtin') { + return acc; + } else { + var _v5 = f, + _v6 = A3( + f, + _p1._1, + _p1._2, + A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), + _v7 = _p1._4; + f = _v5; + acc = _v6; + dict = _v7; + continue foldl; + } + } }); -} - - -// HELPER for STATEFUL LOOPS - -function spawnLoop(init, onMessage) -{ - var andThen = _elm_lang$core$Native_Scheduler.andThen; - - function loop(state) - { - var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) { - return onMessage(msg, state); - }); - return A2(andThen, loop, handleMsg); - } - - var task = A2(andThen, loop, init); - - return _elm_lang$core$Native_Scheduler.rawSpawn(task); -} - - -// BAGS - -function leaf(home) -{ - return function(value) - { - return { - type: 'leaf', - home: home, - value: value - }; - }; -} - -function batch(list) -{ - return { - type: 'node', - branches: list - }; -} - -function map(tagger, bag) -{ - return { - type: 'map', - tagger: tagger, - tree: bag - } -} - - -// PIPE BAGS INTO EFFECT MANAGERS - -function dispatchEffects(managers, cmdBag, subBag) -{ - var effectsDict = {}; - gatherEffects(true, cmdBag, effectsDict, null); - gatherEffects(false, subBag, effectsDict, null); - - for (var home in managers) - { - var fx = home in effectsDict - ? effectsDict[home] - : { - cmds: _elm_lang$core$Native_List.Nil, - subs: _elm_lang$core$Native_List.Nil - }; - - _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx }); - } -} - -function gatherEffects(isCmd, bag, effectsDict, taggers) -{ - switch (bag.type) - { - case 'leaf': - var home = bag.home; - var effect = toEffect(isCmd, home, taggers, bag.value); - effectsDict[home] = insert(isCmd, effect, effectsDict[home]); - return; - - case 'node': - var list = bag.branches; - while (list.ctor !== '[]') +var _elm_lang$core$Dict$merge = F6( + function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { + var stepState = F3( + function (rKey, rValue, _p2) { + stepState: + while (true) { + var _p3 = _p2; + var _p9 = _p3._1; + var _p8 = _p3._0; + var _p4 = _p8; + if (_p4.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + var _p7 = _p4._1; + var _p6 = _p4._0._1; + var _p5 = _p4._0._0; + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { + var _v10 = rKey, + _v11 = rValue, + _v12 = { + ctor: '_Tuple2', + _0: _p7, + _1: A3(leftStep, _p5, _p6, _p9) + }; + rKey = _v10; + rValue = _v11; + _p2 = _v12; + continue stepState; + } else { + if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { + return { + ctor: '_Tuple2', + _0: _p8, + _1: A3(rightStep, rKey, rValue, _p9) + }; + } else { + return { + ctor: '_Tuple2', + _0: _p7, + _1: A4(bothStep, _p5, _p6, rValue, _p9) + }; + } + } + } + } + }); + var _p10 = A3( + _elm_lang$core$Dict$foldl, + stepState, { - gatherEffects(isCmd, list._0, effectsDict, taggers); - list = list._1; + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$toList(leftDict), + _1: initialResult + }, + rightDict); + var leftovers = _p10._0; + var intermediateResult = _p10._1; + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p11, result) { + var _p12 = _p11; + return A3(leftStep, _p12._0, _p12._1, result); + }), + intermediateResult, + leftovers); + }); +var _elm_lang$core$Dict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Debug.crash( + _elm_lang$core$String$concat( + { + ctor: '::', + _0: 'Internal red-black tree invariant violated, expected ', + _1: { + ctor: '::', + _0: msg, + _1: { + ctor: '::', + _0: ' and got ', + _1: { + ctor: '::', + _0: _elm_lang$core$Basics$toString(c), + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: lgot, + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: rgot, + _1: { + ctor: '::', + _0: '\nPlease report this bug to ', + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + })); + }); +var _elm_lang$core$Dict$isBBlack = function (dict) { + var _p13 = dict; + _v14_2: + do { + if (_p13.ctor === 'RBNode_elm_builtin') { + if (_p13._0.ctor === 'BBlack') { + return true; + } else { + break _v14_2; + } + } else { + if (_p13._0.ctor === 'LBBlack') { + return true; + } else { + break _v14_2; } - return; - - case 'map': - gatherEffects(isCmd, bag.tree, effectsDict, { - tagger: bag.tagger, - rest: taggers - }); - return; - } -} - -function toEffect(isCmd, home, taggers, value) -{ - function applyTaggers(x) - { - var temp = taggers; - while (temp) - { - x = temp.tagger(x); - temp = temp.rest; } - return x; - } - - var map = isCmd - ? effectManagers[home].cmdMap - : effectManagers[home].subMap; - - return A2(map, applyTaggers, value) -} - -function insert(isCmd, newEffect, effects) -{ - effects = effects || { - cmds: _elm_lang$core$Native_List.Nil, - subs: _elm_lang$core$Native_List.Nil - }; - if (isCmd) - { - effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds); - return effects; - } - effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs); - return effects; -} - - -// PORTS - -function checkPortName(name) -{ - if (name in effectManagers) - { - throw new Error('There can only be one port named `' + name + '`, but your program has multiple.'); - } -} - - -// OUTGOING PORTS - -function outgoingPort(name, converter) -{ - checkPortName(name); - effectManagers[name] = { - tag: 'cmd', - cmdMap: outgoingPortMap, - converter: converter, - isForeign: true - }; - return leaf(name); -} - -var outgoingPortMap = F2(function cmdMap(tagger, value) { - return value; -}); - -function setupOutgoingPort(name) -{ - var subs = []; - var converter = effectManagers[name].converter; - - // CREATE MANAGER - - var init = _elm_lang$core$Native_Scheduler.succeed(null); - - function onEffects(router, cmdList, state) - { - while (cmdList.ctor !== '[]') - { - // grab a separate reference to subs in case unsubscribe is called - var currentSubs = subs; - var value = converter(cmdList._0); - for (var i = 0; i < currentSubs.length; i++) - { - currentSubs[i](value); + } while(false); + return false; +}; +var _elm_lang$core$Dict$sizeHelp = F2( + function (n, dict) { + sizeHelp: + while (true) { + var _p14 = dict; + if (_p14.ctor === 'RBEmpty_elm_builtin') { + return n; + } else { + var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), + _v17 = _p14._3; + n = _v16; + dict = _v17; + continue sizeHelp; } - cmdList = cmdList._1; } - return init; - } - - effectManagers[name].init = init; - effectManagers[name].onEffects = F3(onEffects); - - // PUBLIC API - - function subscribe(callback) - { - subs.push(callback); - } - - function unsubscribe(callback) - { - // copy subs into a new array in case unsubscribe is called within a - // subscribed callback - subs = subs.slice(); - var index = subs.indexOf(callback); - if (index >= 0) - { - subs.splice(index, 1); + }); +var _elm_lang$core$Dict$size = function (dict) { + return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); +}; +var _elm_lang$core$Dict$get = F2( + function (targetKey, dict) { + get: + while (true) { + var _p15 = dict; + if (_p15.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); + switch (_p16.ctor) { + case 'LT': + var _v20 = targetKey, + _v21 = _p15._3; + targetKey = _v20; + dict = _v21; + continue get; + case 'EQ': + return _elm_lang$core$Maybe$Just(_p15._2); + default: + var _v22 = targetKey, + _v23 = _p15._4; + targetKey = _v22; + dict = _v23; + continue get; + } + } } - } - - return { - subscribe: subscribe, - unsubscribe: unsubscribe - }; -} - - -// INCOMING PORTS - -function incomingPort(name, converter) -{ - checkPortName(name); - effectManagers[name] = { - tag: 'sub', - subMap: incomingPortMap, - converter: converter, - isForeign: true - }; - return leaf(name); -} - -var incomingPortMap = F2(function subMap(tagger, finalTagger) -{ - return function(value) - { - return tagger(finalTagger(value)); - }; -}); - -function setupIncomingPort(name, callback) -{ - var sentBeforeInit = []; - var subs = _elm_lang$core$Native_List.Nil; - var converter = effectManagers[name].converter; - var currentOnEffects = preInitOnEffects; - var currentSend = preInitSend; - - // CREATE MANAGER - - var init = _elm_lang$core$Native_Scheduler.succeed(null); - - function preInitOnEffects(router, subList, state) - { - var postInitResult = postInitOnEffects(router, subList, state); - - for(var i = 0; i < sentBeforeInit.length; i++) - { - postInitSend(sentBeforeInit[i]); + }); +var _elm_lang$core$Dict$member = F2( + function (key, dict) { + var _p17 = A2(_elm_lang$core$Dict$get, key, dict); + if (_p17.ctor === 'Just') { + return true; + } else { + return false; } - - sentBeforeInit = null; // to release objects held in queue - currentSend = postInitSend; - currentOnEffects = postInitOnEffects; - return postInitResult; - } - - function postInitOnEffects(router, subList, state) - { - subs = subList; - return init; - } - - function onEffects(router, subList, state) - { - return currentOnEffects(router, subList, state); - } - - effectManagers[name].init = init; - effectManagers[name].onEffects = F3(onEffects); - - // PUBLIC API - - function preInitSend(value) - { - sentBeforeInit.push(value); - } - - function postInitSend(value) - { - var temp = subs; - while (temp.ctor !== '[]') - { - callback(temp._0(value)); - temp = temp._1; + }); +var _elm_lang$core$Dict$maxWithDefault = F3( + function (k, v, r) { + maxWithDefault: + while (true) { + var _p18 = r; + if (_p18.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: k, _1: v}; + } else { + var _v26 = _p18._1, + _v27 = _p18._2, + _v28 = _p18._4; + k = _v26; + v = _v27; + r = _v28; + continue maxWithDefault; + } } + }); +var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; +var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; +var _elm_lang$core$Dict$Black = {ctor: 'Black'}; +var _elm_lang$core$Dict$blackish = function (t) { + var _p19 = t; + if (_p19.ctor === 'RBNode_elm_builtin') { + var _p20 = _p19._0; + return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); + } else { + return true; } - - function send(incomingValue) - { - var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue); - if (result.ctor === 'Err') - { - throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0); - } - - currentSend(result._0); +}; +var _elm_lang$core$Dict$Red = {ctor: 'Red'}; +var _elm_lang$core$Dict$moreBlack = function (color) { + var _p21 = color; + switch (_p21.ctor) { + case 'Black': + return _elm_lang$core$Dict$BBlack; + case 'Red': + return _elm_lang$core$Dict$Black; + case 'NBlack': + return _elm_lang$core$Dict$Red; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); } - - return { send: send }; -} - -return { - // routers - sendToApp: F2(sendToApp), - sendToSelf: F2(sendToSelf), - - // global setup - effectManagers: effectManagers, - outgoingPort: outgoingPort, - incomingPort: incomingPort, - - htmlToProgram: htmlToProgram, - program: program, - programWithFlags: programWithFlags, - initialize: initialize, - - // effect bags - leaf: leaf, - batch: batch, - map: F2(map) }; - -}(); - -//import Native.Utils // - -var _elm_lang$core$Native_Scheduler = function() { - -var MAX_STEPS = 10000; - - -// TASKS - -function succeed(value) -{ - return { - ctor: '_Task_succeed', - value: value - }; -} - -function fail(error) -{ - return { - ctor: '_Task_fail', - value: error - }; -} - -function nativeBinding(callback) -{ - return { - ctor: '_Task_nativeBinding', - callback: callback, - cancel: null - }; -} - -function andThen(callback, task) -{ - return { - ctor: '_Task_andThen', - callback: callback, - task: task - }; -} - -function onError(callback, task) -{ - return { - ctor: '_Task_onError', - callback: callback, - task: task - }; -} - -function receive(callback) -{ - return { - ctor: '_Task_receive', - callback: callback - }; -} - - -// PROCESSES - -function rawSpawn(task) -{ - var process = { - ctor: '_Process', - id: _elm_lang$core$Native_Utils.guid(), - root: task, - stack: null, - mailbox: [] - }; - - enqueue(process); - - return process; -} - -function spawn(task) -{ - return nativeBinding(function(callback) { - var process = rawSpawn(task); - callback(succeed(process)); - }); -} - -function rawSend(process, msg) -{ - process.mailbox.push(msg); - enqueue(process); -} - -function send(process, msg) -{ - return nativeBinding(function(callback) { - rawSend(process, msg); - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function kill(process) -{ - return nativeBinding(function(callback) { - var root = process.root; - if (root.ctor === '_Task_nativeBinding' && root.cancel) - { - root.cancel(); - } - - process.root = null; - - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }); -} - -function sleep(time) -{ - return nativeBinding(function(callback) { - var id = setTimeout(function() { - callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); - }, time); - - return function() { clearTimeout(id); }; - }); -} - - -// STEP PROCESSES - -function step(numSteps, process) -{ - while (numSteps < MAX_STEPS) - { - var ctor = process.root.ctor; - - if (ctor === '_Task_succeed') - { - while (process.stack && process.stack.ctor === '_Task_onError') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; - } - - if (ctor === '_Task_fail') - { - while (process.stack && process.stack.ctor === '_Task_andThen') - { - process.stack = process.stack.rest; - } - if (process.stack === null) - { - break; - } - process.root = process.stack.callback(process.root.value); - process.stack = process.stack.rest; - ++numSteps; - continue; - } - - if (ctor === '_Task_andThen') - { - process.stack = { - ctor: '_Task_andThen', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } - - if (ctor === '_Task_onError') - { - process.stack = { - ctor: '_Task_onError', - callback: process.root.callback, - rest: process.stack - }; - process.root = process.root.task; - ++numSteps; - continue; - } - - if (ctor === '_Task_nativeBinding') - { - process.root.cancel = process.root.callback(function(newRoot) { - process.root = newRoot; - enqueue(process); - }); - - break; - } - - if (ctor === '_Task_receive') - { - var mailbox = process.mailbox; - if (mailbox.length === 0) - { - break; - } - - process.root = process.root.callback(mailbox.shift()); - ++numSteps; - continue; - } - - throw new Error(ctor); +var _elm_lang$core$Dict$lessBlack = function (color) { + var _p22 = color; + switch (_p22.ctor) { + case 'BBlack': + return _elm_lang$core$Dict$Black; + case 'Black': + return _elm_lang$core$Dict$Red; + case 'Red': + return _elm_lang$core$Dict$NBlack; + default: + return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); } - - if (numSteps < MAX_STEPS) - { - return numSteps + 1; +}; +var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; +var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; +var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { + return {ctor: 'RBEmpty_elm_builtin', _0: a}; +}; +var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); +var _elm_lang$core$Dict$isEmpty = function (dict) { + return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); +}; +var _elm_lang$core$Dict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; + }); +var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { + var _p23 = dict; + if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } else { + return dict; } - enqueue(process); - - return numSteps; -} - - -// WORK QUEUE - -var working = false; -var workQueue = []; - -function enqueue(process) -{ - workQueue.push(process); - - if (!working) - { - setTimeout(work, 0); - working = true; +}; +var _elm_lang$core$Dict$lessBlackTree = function (dict) { + var _p24 = dict; + if (_p24.ctor === 'RBNode_elm_builtin') { + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(_p24._0), + _p24._1, + _p24._2, + _p24._3, + _p24._4); + } else { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); } -} - -function work() -{ - var numSteps = 0; - var process; - while (numSteps < MAX_STEPS && (process = workQueue.shift())) - { - if (process.root) - { - numSteps = step(numSteps, process); - } +}; +var _elm_lang$core$Dict$balancedTree = 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( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$lessBlack(col), + yk, + yv, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; +}; +var _elm_lang$core$Dict$blacken = function (t) { + var _p25 = t; + if (_p25.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); } - if (!process) - { - working = false; - return; +}; +var _elm_lang$core$Dict$redden = function (t) { + var _p26 = t; + if (_p26.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); + } else { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); } - setTimeout(work, 0); -} - - -return { - succeed: succeed, - fail: fail, - nativeBinding: nativeBinding, - andThen: F2(andThen), - onError: F2(onError), - receive: receive, - - spawn: spawn, - kill: kill, - sleep: sleep, - send: F2(send), - - rawSpawn: rawSpawn, - rawSend: rawSend }; - -}(); -var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( - {ctor: '[]'}); -var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; -_elm_lang$core$Platform_Cmd_ops['!'] = F2( - function (model, commands) { - return { - ctor: '_Tuple2', - _0: model, - _1: _elm_lang$core$Platform_Cmd$batch(commands) - }; - }); -var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; - -var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; -var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( - {ctor: '[]'}); -var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; -var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; - -var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; -var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; -var _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags; -var _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program; -var _elm_lang$core$Platform$Program = {ctor: 'Program'}; -var _elm_lang$core$Platform$Task = {ctor: 'Task'}; -var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; -var _elm_lang$core$Platform$Router = {ctor: 'Router'}; - - -/* - * Copyright (c) 2010 Mozilla Corporation - * Copyright (c) 2010 Vladimir Vukicevic - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * File: mjs - * - * Vector and Matrix math utilities for JavaScript, optimized for WebGL. - * Edited to work with the Elm Programming Language - */ - -var _elm_community$linear_algebra$Native_Math_Vector2 = function() { - - var MJS_FLOAT_ARRAY_TYPE = Float32Array; - - var V2 = { }; - - if (MJS_FLOAT_ARRAY_TYPE == Array) { - V2.$ = function V2_$(x, y) { - return [x, y]; - }; - } else { - V2.$ = function V2_$(x, y) { - return new MJS_FLOAT_ARRAY_TYPE([x, y]); - }; - } - - V2.getX = function V2_getX(a) { - return a[0]; - } - V2.getY = function V2_getY(a) { - return a[1]; - } - V2.setX = function V2_setX(x, a) { - return new MJS_FLOAT_ARRAY_TYPE([x, a[1]]); - } - V2.setY = function V2_setY(y, a) { - return new MJS_FLOAT_ARRAY_TYPE([a[0], y]); - } - - V2.toTuple = function V2_toTuple(a) { - return { - ctor:"_Tuple2", - _0:a[0], - _1:a[1] - }; - }; - V2.fromTuple = function V2_fromTuple(t) { - return new MJS_FLOAT_ARRAY_TYPE([t._0, t._1]); - }; - - V2.toRecord = function V2_toRecord(a) { - return { - _:{}, - x:a[0], - y:a[1] - }; - }; - V2.fromRecord = function V2_fromRecord(r) { - return new MJS_FLOAT_ARRAY_TYPE([r.x, r.y]); - }; - - V2.add = function V2_add(a, b) { - var r = new MJS_FLOAT_ARRAY_TYPE(2); - r[0] = a[0] + b[0]; - r[1] = a[1] + b[1]; - return r; - }; - - V2.sub = function V2_sub(a, b) { - var r = new MJS_FLOAT_ARRAY_TYPE(2); - r[0] = a[0] - b[0]; - r[1] = a[1] - b[1]; - return r; - }; - - V2.neg = function V2_neg(a) { - var r = new MJS_FLOAT_ARRAY_TYPE(2); - r[0] = - a[0]; - r[1] = - a[1]; - return r; - }; - - V2.direction = function V2_direction(a, b) { - var r = new MJS_FLOAT_ARRAY_TYPE(2); - r[0] = a[0] - b[0]; - r[1] = a[1] - b[1]; - var im = 1.0 / V2.length(r); - r[0] = r[0] * im; - r[1] = r[1] * im; - return r; - }; - - V2.length = function V2_length(a) { - return Math.sqrt(a[0]*a[0] + a[1]*a[1]); - }; - - V2.lengthSquared = function V2_lengthSquared(a) { - return a[0]*a[0] + a[1]*a[1]; - }; - - V2.distance = function V2_distance(a, b) { - var dx = a[0] - b[0]; - var dy = a[1] - b[1]; - return Math.sqrt(dx * dx + dy * dy); - }; - - V2.distanceSquared = function V2_distanceSquared(a, b) { - var dx = a[0] - b[0]; - var dy = a[1] - b[1]; - return dx * dx + dy * dy; - }; - - V2.normalize = function V2_normalize(a) { - var r = new MJS_FLOAT_ARRAY_TYPE(2); - var im = 1.0 / V2.length(a); - r[0] = a[0] * im; - r[1] = a[1] * im; - return r; - }; - - V2.scale = function V2_scale(k, a) { - var r = new MJS_FLOAT_ARRAY_TYPE(2); - r[0] = a[0] * k; - r[1] = a[1] * k; - return r; - }; - - V2.dot = function V2_dot(a, b) { - return a[0] * b[0] + a[1] * b[1]; - }; - - return { - vec2: F2(V2.$), - getX: V2.getX, - getY: V2.getY, - setX: F2(V2.setX), - setY: F2(V2.setY), - toTuple: V2.toTuple, - toRecord: V2.toRecord, - fromTuple: V2.fromTuple, - fromRecord: V2.fromRecord, - add: F2(V2.add), - sub: F2(V2.sub), - neg: V2.neg, - direction: F2(V2.direction), - length: V2.length, - lengthSquared: V2.lengthSquared, - distance: F2(V2.distance), - distanceSquared: F2(V2.distanceSquared), - normalize: V2.normalize, - scale: F2(V2.scale), - dot: F2(V2.dot) - }; - -}(); - -var _elm_community$linear_algebra$Math_Vector2$dot = _elm_community$linear_algebra$Native_Math_Vector2.dot; -var _elm_community$linear_algebra$Math_Vector2$scale = _elm_community$linear_algebra$Native_Math_Vector2.scale; -var _elm_community$linear_algebra$Math_Vector2$normalize = _elm_community$linear_algebra$Native_Math_Vector2.normalize; -var _elm_community$linear_algebra$Math_Vector2$distanceSquared = _elm_community$linear_algebra$Native_Math_Vector2.distanceSquared; -var _elm_community$linear_algebra$Math_Vector2$distance = _elm_community$linear_algebra$Native_Math_Vector2.distance; -var _elm_community$linear_algebra$Math_Vector2$lengthSquared = _elm_community$linear_algebra$Native_Math_Vector2.lengthSquared; -var _elm_community$linear_algebra$Math_Vector2$length = _elm_community$linear_algebra$Native_Math_Vector2.length; -var _elm_community$linear_algebra$Math_Vector2$direction = _elm_community$linear_algebra$Native_Math_Vector2.direction; -var _elm_community$linear_algebra$Math_Vector2$negate = _elm_community$linear_algebra$Native_Math_Vector2.neg; -var _elm_community$linear_algebra$Math_Vector2$sub = _elm_community$linear_algebra$Native_Math_Vector2.sub; -var _elm_community$linear_algebra$Math_Vector2$add = _elm_community$linear_algebra$Native_Math_Vector2.add; -var _elm_community$linear_algebra$Math_Vector2$fromRecord = _elm_community$linear_algebra$Native_Math_Vector2.fromRecord; -var _elm_community$linear_algebra$Math_Vector2$fromTuple = _elm_community$linear_algebra$Native_Math_Vector2.fromTuple; -var _elm_community$linear_algebra$Math_Vector2$toRecord = _elm_community$linear_algebra$Native_Math_Vector2.toRecord; -var _elm_community$linear_algebra$Math_Vector2$toTuple = _elm_community$linear_algebra$Native_Math_Vector2.toTuple; -var _elm_community$linear_algebra$Math_Vector2$setY = _elm_community$linear_algebra$Native_Math_Vector2.setY; -var _elm_community$linear_algebra$Math_Vector2$setX = _elm_community$linear_algebra$Native_Math_Vector2.setX; -var _elm_community$linear_algebra$Math_Vector2$getY = _elm_community$linear_algebra$Native_Math_Vector2.getY; -var _elm_community$linear_algebra$Math_Vector2$getX = _elm_community$linear_algebra$Native_Math_Vector2.getX; -var _elm_community$linear_algebra$Math_Vector2$vec2 = _elm_community$linear_algebra$Native_Math_Vector2.vec2; -var _elm_community$linear_algebra$Math_Vector2$Vec2 = {ctor: 'Vec2'}; - -//import Native.List // - -var _elm_lang$core$Native_Array = function() { - -// 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: [] +var _elm_lang$core$Dict$balanceHelp = function (tree) { + var _p27 = tree; + _v36_6: + do { + _v36_5: + do { + _v36_4: + do { + _v36_3: + do { + _v36_2: + do { + _v36_1: + do { + _v36_0: + do { + if (_p27.ctor === 'RBNode_elm_builtin') { + if (_p27._3.ctor === 'RBNode_elm_builtin') { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._3._0.ctor) { + case 'Red': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + } + } + case 'NBlack': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + } + } + default: + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + } + case 'NBlack': + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } + case 'NBlack': + if (_p27._0.ctor === 'BBlack') { + if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + default: + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + } + default: + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + switch (_p27._3._0.ctor) { + case 'Red': + if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { + break _v36_0; + } else { + if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { + break _v36_1; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { + break _v36_5; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } + } else { + if (_p27._4.ctor === 'RBNode_elm_builtin') { + switch (_p27._4._0.ctor) { + case 'Red': + if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { + break _v36_2; + } else { + if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { + break _v36_3; + } else { + break _v36_6; + } + } + case 'NBlack': + if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { + break _v36_4; + } else { + break _v36_6; + } + default: + break _v36_6; + } + } else { + break _v36_6; + } + } + } else { + break _v36_6; + } + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); + } while(false); + return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._4._3._1, + _p27._4._3._2, + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._4._1, + _p27._4._2, + _p27._4._3._4, + _elm_lang$core$Dict$redden(_p27._4._4))); + } while(false); + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _elm_lang$core$Dict$Black, + _p27._3._4._1, + _p27._3._4._2, + A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$Black, + _p27._3._1, + _p27._3._2, + _elm_lang$core$Dict$redden(_p27._3._3), + _p27._3._4._3), + A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); + } while(false); + return tree; }; - - -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++; +var _elm_lang$core$Dict$balance = F5( + function (c, k, v, l, r) { + var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; + }); +var _elm_lang$core$Dict$bubble = F5( + function (c, k, v, l, r) { + return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( + _elm_lang$core$Dict$balance, + _elm_lang$core$Dict$moreBlack(c), + k, + v, + _elm_lang$core$Dict$lessBlackTree(l), + _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _elm_lang$core$Dict$removeMax = F5( + function (c, k, v, l, r) { + var _p28 = r; + if (_p28.ctor === 'RBEmpty_elm_builtin') { + return A3(_elm_lang$core$Dict$rem, c, l, r); + } else { + return A5( + _elm_lang$core$Dict$bubble, + c, + k, + v, + l, + A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); } - if (slot > 0) - { - i -= array.lengths[slot - 1]; + }); +var _elm_lang$core$Dict$rem = F3( + function (color, left, right) { + var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; + if (_p29._0.ctor === 'RBEmpty_elm_builtin') { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p30 = color; + switch (_p30.ctor) { + case 'Red': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + case 'Black': + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); + default: + return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p33 = _p29._1._0; + var _p32 = _p29._0._0; + var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; + if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/LBlack/Red', + color, + _elm_lang$core$Basics$toString(_p32), + _elm_lang$core$Basics$toString(_p33)); + } + } + } else { + if (_p29._1.ctor === 'RBEmpty_elm_builtin') { + var _p36 = _p29._1._0; + var _p35 = _p29._0._0; + var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { + return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); + } else { + return A4( + _elm_lang$core$Dict$reportRemBug, + 'Black/Red/LBlack', + color, + _elm_lang$core$Basics$toString(_p35), + _elm_lang$core$Basics$toString(_p36)); + } + } else { + var _p40 = _p29._0._2; + var _p39 = _p29._0._4; + var _p38 = _p29._0._1; + var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); + var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); + var k = _p37._0; + var v = _p37._1; + return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); + } } - 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]; + }); +var _elm_lang$core$Dict$map = F2( + function (f, dict) { + var _p41 = dict; + if (_p41.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + } else { + var _p42 = _p41._1; + return A5( + _elm_lang$core$Dict$RBNode_elm_builtin, + _p41._0, + _p42, + A2(f, _p42, _p41._2), + A2(_elm_lang$core$Dict$map, f, _p41._3), + A2(_elm_lang$core$Dict$map, f, _p41._4)); + } + }); +var _elm_lang$core$Dict$Same = {ctor: 'Same'}; +var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; +var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; +var _elm_lang$core$Dict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p43 = dict; + if (_p43.ctor === 'RBEmpty_elm_builtin') { + var _p44 = alter(_elm_lang$core$Maybe$Nothing); + if (_p44.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) + }; + } + } else { + var _p55 = _p43._2; + var _p54 = _p43._4; + var _p53 = _p43._3; + var _p52 = _p43._1; + var _p51 = _p43._0; + var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); + switch (_p45.ctor) { + case 'EQ': + var _p46 = alter( + _elm_lang$core$Maybe$Just(_p55)); + if (_p46.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) + }; + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) + }; + } + case 'LT': + var _p47 = up(_p53); + var flag = _p47._0; + var newLeft = _p47._1; + var _p48 = flag; + switch (_p48.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) + }; + } + default: + var _p49 = up(_p54); + var flag = _p49._0; + var newRight = _p49._1; + var _p50 = flag; + switch (_p50.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Same, + _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Insert, + _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Dict$Remove, + _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) + }; + } + } + } + }; + var _p56 = up(dict); + var flag = _p56._0; + var updatedDict = _p56._1; + var _p57 = flag; + switch (_p57.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); + default: + return _elm_lang$core$Dict$blacken(updatedDict); } - array.table[slot] = unsafeSet(i, item, array.table[slot]); - } - return array; -} - + }); +var _elm_lang$core$Dict$insert = F3( + function (key, value, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _elm_lang$core$Dict$singleton = F2( + function (key, value) { + return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); + }); +var _elm_lang$core$Dict$union = F2( + function (t1, t2) { + return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); + }); +var _elm_lang$core$Dict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; + }); + return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); + }); +var _elm_lang$core$Dict$intersect = F2( + function (t1, t2) { + return A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p58) { + return A2(_elm_lang$core$Dict$member, k, t2); + }), + t1); + }); +var _elm_lang$core$Dict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p59) { + var _p60 = _p59; + var _p62 = _p60._1; + var _p61 = _p60._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), + _1: _p62 + } : { + ctor: '_Tuple2', + _0: _p61, + _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) + }; + }); + return A3( + _elm_lang$core$Dict$foldl, + add, + {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, + dict); + }); +var _elm_lang$core$Dict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); + }), + _elm_lang$core$Dict$empty, + assocs); +}; +var _elm_lang$core$Dict$remove = F2( + function (key, dict) { + return A3( + _elm_lang$core$Dict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _elm_lang$core$Dict$diff = F2( + function (t1, t2) { + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, v, t) { + return A2(_elm_lang$core$Dict$remove, k, t); + }), + t1, + t2); + }); -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); -} +var _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash; +var _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log; -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); - } +var _elm_lang$core$Tuple$mapSecond = F2( + function (func, _p0) { + var _p1 = _p0; 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.ctor === '[]') - { - return empty; - } - - // Allocate M sized blocks (table) and write list elements to it. - var table = new Array(M); - var nodes = []; - 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) + ctor: '_Tuple2', + _0: _p1._0, + _1: func(_p1._1) }; - 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; - } -} + }); +var _elm_lang$core$Tuple$mapFirst = F2( + function (func, _p2) { + var _p3 = _p2; + return { + ctor: '_Tuple2', + _0: func(_p3._0), + _1: _p3._1 + }; + }); +var _elm_lang$core$Tuple$second = function (_p4) { + var _p5 = _p4; + return _p5._1; +}; +var _elm_lang$core$Tuple$first = function (_p6) { + var _p7 = _p6; + return _p7._0; +}; -// Push a node into a higher node as a child. -function fromListPush(toPush, nodes) -{ - var h = toPush.height; +//import // - // Maybe the node on this height does not exist. - if (nodes.length === h) - { - var node = { - ctor: '_Array', - height: h + 1, - table: [], - lengths: [] - }; - nodes.push(node); - } +var _elm_lang$core$Native_Platform = function() { - 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: [], - lengths: [] - }; - } -} +// PROGRAMS -// Pushes an item via push_ to the bottom right of a tree. -function push(item, a) +function program(impl) { - var pushed = push_(item, a); - if (pushed !== null) + return function(flagDecoder) { - return pushed; - } + return function(object, moduleName) + { + object['worker'] = function worker(flags) + { + if (typeof flags !== 'undefined') + { + throw new Error( + 'The `' + moduleName + '` module does not need flags.\n' + + 'Call ' + moduleName + '.worker() with no arguments and you should be all set!' + ); + } - var newTree = create(item, a.height); - return siblise(a, newTree); + return initialize( + impl.init, + impl.update, + impl.subscriptions, + renderer + ); + }; + }; + }; } -// 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) +function programWithFlags(impl) { - // Handle resursion stop at leaf level. - if (a.height === 0) + return function(flagDecoder) { - if (a.table.length < M) - { - var newA = { - ctor: '_Array', - height: 0, - table: a.table.slice() - }; - newA.table.push(item); - return newA; - } - else + return function(object, moduleName) { - return null; - } - } - - // Recursively push - var pushed = push_(item, botRight(a)); + object['worker'] = function worker(flags) + { + if (typeof flagDecoder === 'undefined') + { + throw new Error( + 'Are you trying to sneak a Never value into Elm? Trickster!\n' + + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n' + + 'Use `program` instead if you do not want flags.' + ); + } - // 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; - } + var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags); + if (result.ctor === 'Err') + { + throw new Error( + moduleName + '.worker(...) was called with an unexpected argument.\n' + + 'I tried to convert it to an Elm value, but ran into this problem:\n\n' + + result._0 + ); + } - // 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; - } + return initialize( + impl.init(result._0), + impl.update, + impl.subscriptions, + renderer + ); + }; + }; + }; } -// Converts an array into a list of elements. -function toList(a) +function renderer(enqueue, _) { - return toList_(_elm_lang$core$Native_List.Nil, a); + return function(_) {}; } -function toList_(list, a) -{ - for (var i = a.table.length - 1; i >= 0; i--) - { - list = - a.height === 0 - ? _elm_lang$core$Native_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; -} +// HTML TO PROGRAM -// Maps a function over the elements with their index as first argument. -function indexedMap(f, a) +function htmlToProgram(vnode) { - return indexedMap_(f, a, 0); + var emptyBag = batch(_elm_lang$core$Native_List.Nil); + var noChange = _elm_lang$core$Native_Utils.Tuple2( + _elm_lang$core$Native_Utils.Tuple0, + emptyBag + ); + + return _elm_lang$virtual_dom$VirtualDom$program({ + init: noChange, + view: function(model) { return main; }, + update: F2(function(msg, model) { return noChange; }), + subscriptions: function (model) { return emptyBag; } + }); } -function indexedMap_(f, a, from) + +// INITIALIZE A PROGRAM + +function initialize(init, update, subscriptions, renderer) { - var newA = { - ctor: '_Array', - height: a.height, - table: new Array(a.table.length) - }; - if (a.height > 0) + // ambient state + var managers = {}; + var updateView; + + // init and update state in main process + var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var model = init._0; + updateView = renderer(enqueue, model); + var cmds = init._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); + + function onMessage(msg, model) { - newA.lengths = a.lengths; + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { + var results = A2(update, msg, model); + model = results._0; + updateView(model); + var cmds = results._1; + var subs = subscriptions(model); + dispatchEffects(managers, cmds, subs); + callback(_elm_lang$core$Native_Scheduler.succeed(model)); + }); } - for (var i = 0; i < a.table.length; i++) + + var mainProcess = spawnLoop(initApp, onMessage); + + function enqueue(msg) { - newA.table[i] = - a.height === 0 - ? A2(f, from + i, a.table[i]) - : indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]); + _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg); } - return newA; + + var ports = setupEffects(managers, enqueue); + + return ports ? { ports: ports } : {}; } -function foldl(f, b, a) + +// EFFECT MANAGERS + +var effectManagers = {}; + +function setupEffects(managers, callback) { - if (a.height === 0) - { - for (var i = 0; i < a.table.length; i++) - { - b = A2(f, a.table[i], b); - } - } - else + var ports; + + // setup all necessary effect managers + for (var key in effectManagers) { - for (var i = 0; i < a.table.length; i++) + var manager = effectManagers[key]; + + if (manager.isForeign) { - b = foldl(f, b, a.table[i]); + ports = ports || {}; + ports[key] = manager.tag === 'cmd' + ? setupOutgoingPort(key) + : setupIncomingPort(key, callback); } + + managers[key] = makeManager(manager, callback); } - return b; + + return ports; } -function foldr(f, b, a) +function makeManager(info, callback) { - if (a.height === 0) + var router = { + main: callback, + self: undefined + }; + + var tag = info.tag; + var onEffects = info.onEffects; + var onSelfMsg = info.onSelfMsg; + + function onMessage(msg, state) { - for (var i = a.table.length; i--; ) + if (msg.ctor === 'self') { - b = A2(f, a.table[i], b); + return A3(onSelfMsg, router, msg._0, state); } - } - else - { - for (var i = a.table.length; i--; ) + + var fx = msg._0; + switch (tag) { - b = foldr(f, b, a.table[i]); + case 'cmd': + return A3(onEffects, router, fx.cmds, state); + + case 'sub': + return A3(onEffects, router, fx.subs, state); + + case 'fx': + return A4(onEffects, router, fx.cmds, fx.subs, state); } } - return b; + + var process = spawnLoop(info.init, onMessage); + router.self = process; + return process; } -// TODO: currently, it slices the right, then the left. This can be -// optimized. -function slice(from, to, a) +function sendToApp(router, msg) { - if (from < 0) - { - from += length(a); - } - if (to < 0) + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) { - to += length(a); - } - return sliceLeft(from, sliceRight(to, a)); + router.main(msg); + callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0)); + }); } -function sliceRight(to, a) +function sendToSelf(router, msg) { - if (to === length(a)) - { - return a; - } + return A2(_elm_lang$core$Native_Scheduler.send, router.self, { + ctor: 'self', + _0: msg + }); +} - // Handle leaf level. - if (a.height === 0) + +// HELPER for STATEFUL LOOPS + +function spawnLoop(init, onMessage) +{ + var andThen = _elm_lang$core$Native_Scheduler.andThen; + + function loop(state) { - var newA = { ctor:'_Array', height:0 }; - newA.table = a.table.slice(0, to); - return newA; + var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) { + return onMessage(msg, state); + }); + return A2(andThen, loop, handleMsg); } - // Slice the right recursively. - var right = getSlot(to, a); - var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]); + var task = A2(andThen, loop, init); - // Maybe the a node is not even needed, as sliced contains the whole slice. - if (right === 0) + return _elm_lang$core$Native_Scheduler.rawSpawn(task); +} + + +// BAGS + +function leaf(home) +{ + return function(value) { - return sliced; - } + return { + type: 'leaf', + home: home, + value: value + }; + }; +} - // Create new node. - var newA = { - ctor: '_Array', - height: a.height, - table: a.table.slice(0, right), - lengths: a.lengths.slice(0, right) +function batch(list) +{ + return { + type: 'node', + branches: list }; - 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) +function map(tagger, bag) { - if (from === 0) - { - return a; + return { + type: 'map', + tagger: tagger, + tree: bag } +} - // 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]); +// PIPE BAGS INTO EFFECT MANAGERS - // Maybe the a node is not even needed, as sliced contains the whole slice. - if (left === a.table.length - 1) - { - return sliced; - } +function dispatchEffects(managers, cmdBag, subBag) +{ + var effectsDict = {}; + gatherEffects(true, cmdBag, effectsDict, null); + gatherEffects(false, subBag, effectsDict, null); - // 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++) + for (var home in managers) { - len += length(newA.table[i]); - newA.lengths[i] = len; - } + var fx = home in effectsDict + ? effectsDict[home] + : { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; - return newA; + _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx }); + } } -// Appends two trees. -function append(a,b) +function gatherEffects(isCmd, bag, effectsDict, taggers) { - 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) + switch (bag.type) { - if (c[0].table.length === 0) - { - return c[1]; - } - if (c[1].table.length === 0) - { - return c[0]; - } + case 'leaf': + var home = bag.home; + var effect = toEffect(isCmd, home, taggers, bag.value); + effectsDict[home] = insert(isCmd, effect, effectsDict[home]); + return; - // 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++) + case 'node': + var list = bag.branches; + while (list.ctor !== '[]') { - c[1].lengths[i] += len; + gatherEffects(isCmd, list._0, effectsDict, taggers); + list = list._1; } - c[0].lengths = c[0].lengths.concat(c[1].lengths); - } + return; - return c[0]; + case 'map': + gatherEffects(isCmd, bag.tree, effectsDict, { + tagger: bag.tagger, + rest: taggers + }); + return; } +} - if (c[0].height > 0) +function toEffect(isCmd, home, taggers, value) +{ + function applyTaggers(x) { - var toRemove = calcToRemove(a, b); - if (toRemove > E) + var temp = taggers; + while (temp) { - c = shuffle(c[0], c[1], toRemove); + x = temp.tagger(x); + temp = temp.rest; } + return x; } - return siblise(c[0], c[1]); + var map = isCmd + ? effectManagers[home].cmdMap + : effectManagers[home].subMap; + + return A2(map, applyTaggers, value) } -// Returns an array of two nodes; right and left. One node _may_ be empty. -function append_(a, b) +function insert(isCmd, newEffect, effects) { - if (a.height === 0 && b.height === 0) + effects = effects || { + cmds: _elm_lang$core$Native_List.Nil, + subs: _elm_lang$core$Native_List.Nil + }; + if (isCmd) { - return [a, b]; + effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds); + return effects; } + effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs); + return effects; +} - 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]; - } +// PORTS - var toRemove = calcToRemove(a, b); - if (toRemove <= E) +function checkPortName(name) +{ + if (name in effectManagers) { - return [a, b]; + throw new Error('There can only be one port named `' + name + '`, but your program has multiple.'); } - return shuffle(a, b, toRemove); } -// Helperfunctions for append_. Replaces a child node at the side of the parent. -function insertRight(parent, node) + +// OUTGOING PORTS + +function outgoingPort(name, converter) { - 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; + checkPortName(name); + effectManagers[name] = { + tag: 'cmd', + cmdMap: outgoingPortMap, + converter: converter, + isForeign: true + }; + return leaf(name); } -function insertLeft(parent, node) +var outgoingPortMap = F2(function cmdMap(tagger, value) { + return value; +}); + +function setupOutgoingPort(name) { - if (node.table.length > 0) - { - parent.table[0] = node; - parent.lengths[0] = length(node); + var subs = []; + var converter = effectManagers[name].converter; - 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 + // CREATE MANAGER + + var init = _elm_lang$core$Native_Scheduler.succeed(null); + + function onEffects(router, cmdList, state) { - parent.table.shift(); - for (var i = 1; i < parent.lengths.length; i++) + while (cmdList.ctor !== '[]') { - parent.lengths[i] = parent.lengths[i] - parent.lengths[0]; + // grab a separate reference to subs in case unsubscribe is called + var currentSubs = subs; + var value = converter(cmdList._0); + for (var i = 0; i < currentSubs.length; i++) + { + currentSubs[i](value); + } + cmdList = cmdList._1; } - 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; + return init; } - var toRemove = a.table.length + b.table.length; - return toRemove - (Math.floor((subLengths - 1) / M) + 1); -} + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); -// 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]; -} + // PUBLIC API -function set2(a, b, index, value) -{ - if (index < a.length) + function subscribe(callback) { - a[index] = value; + subs.push(callback); } - else + + function unsubscribe(callback) { - b[index - a.length] = value; + // copy subs into a new array in case unsubscribe is called within a + // subscribed callback + subs = subs.slice(); + var index = subs.indexOf(callback); + if (index >= 0) + { + subs.splice(index, 1); + } } -} -function saveSlot(a, b, index, slot) -{ - set2(a.table, b.table, index, slot); + return { + subscribe: subscribe, + unsubscribe: unsubscribe + }; +} - 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)); -} +// INCOMING PORTS -// Creates a node or leaf with a given length at their arrays for perfomance. -// Is only used by shuffle. -function createNode(h, length) +function incomingPort(name, converter) { - if (length < 0) - { - length = 0; - } - var a = { - ctor: '_Array', - height: h, - table: new Array(length) + checkPortName(name); + effectManagers[name] = { + tag: 'sub', + subMap: incomingPortMap, + converter: converter, + isForeign: true }; - if (h > 0) - { - a.lengths = new Array(length); - } - return a; + return leaf(name); } -// Returns an array of two balanced nodes. -function shuffle(a, b, toRemove) +var incomingPortMap = F2(function subMap(tagger, finalTagger) { - 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) + return function(value) { - 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++; - } + return tagger(finalTagger(value)); + }; +}); - // 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; +function setupIncomingPort(name, callback) +{ + var sentBeforeInit = []; + var subs = _elm_lang$core$Native_List.Nil; + var converter = effectManagers[name].converter; + var currentOnEffects = preInitOnEffects; + var currentSend = preInitSend; - // 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); + // CREATE MANAGER - // 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); - } - } + var init = _elm_lang$core$Native_Scheduler.succeed(null); - from += to; + function preInitOnEffects(router, subList, state) + { + var postInitResult = postInitOnEffects(router, subList, state); - // Only proceed to next slots[i] if the current one was - // fully copied. - if (source.table.length <= to) + for(var i = 0; i < sentBeforeInit.length; i++) { - read++; from = 0; + postInitSend(sentBeforeInit[i]); } - // 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++; - } + sentBeforeInit = null; // to release objects held in queue + currentSend = postInitSend; + currentOnEffects = postInitOnEffects; + return postInitResult; } - // Cleanup after the loop. Copy the last slot into the new nodes. - if (slot.table.length > 0) + function postInitOnEffects(router, subList, state) { - saveSlot(newA, newB, write, slot); - write++; + subs = subList; + return init; } - // Shift the untouched slots to the left - while (read < a.table.length + b.table.length ) + function onEffects(router, subList, state) { - saveSlot(newA, newB, write, get2(a.table, b.table, read)); - read++; - write++; + return currentOnEffects(router, subList, state); } - return [newA, newB]; -} + effectManagers[name].init = init; + effectManagers[name].onEffects = F3(onEffects); -// Navigation functions -function botRight(a) -{ - return a.table[a.table.length - 1]; -} -function botLeft(a) -{ - return a.table[0]; -} + // PUBLIC API -// 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) + function preInitSend(value) { - newA.lengths = a.lengths.slice(); + sentBeforeInit.push(value); } - return newA; -} -// Returns how many items are in the tree. -function length(array) -{ - if (array.height === 0) - { - return array.table.length; - } - else + function postInitSend(value) { - return array.lengths[array.lengths.length - 1]; + var temp = subs; + while (temp.ctor !== '[]') + { + callback(temp._0(value)); + temp = temp._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) + function send(incomingValue) { - slot++; + var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue); + if (result.ctor === 'Err') + { + throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0); + } + + currentSend(result._0); } - return slot; + + return { send: send }; } -// Recursively creates a tree with a given height containing -// only the given item. -function create(item, h) +return { + // routers + sendToApp: F2(sendToApp), + sendToSelf: F2(sendToSelf), + + // global setup + effectManagers: effectManagers, + outgoingPort: outgoingPort, + incomingPort: incomingPort, + + htmlToProgram: htmlToProgram, + program: program, + programWithFlags: programWithFlags, + initialize: initialize, + + // effect bags + leaf: leaf, + batch: batch, + map: F2(map) +}; + +}(); + +//import Native.Utils // + +var _elm_lang$core$Native_Scheduler = function() { + +var MAX_STEPS = 10000; + + +// TASKS + +function succeed(value) { - if (h === 0) - { - return { - ctor: '_Array', - height: 0, - table: [item] - }; - } return { - ctor: '_Array', - height: h, - table: [create(item, h - 1)], - lengths: [1] + ctor: '_Task_succeed', + value: value }; } -// Recursively creates a tree that contains the given tree. -function parentise(tree, h) +function fail(error) { - if (h === tree.height) - { - return tree; - } - return { - ctor: '_Array', - height: h, - table: [parentise(tree, h - 1)], - lengths: [length(tree)] + ctor: '_Task_fail', + value: error }; } -// Emphasizes blood brotherhood beneath two trees. -function siblise(a, b) +function nativeBinding(callback) { return { - ctor: '_Array', - height: a.height + 1, - table: [a, b], - lengths: [length(a), length(a) + length(b)] + ctor: '_Task_nativeBinding', + callback: callback, + cancel: null }; } -function toJSArray(a) -{ - var jsArray = new Array(length(a)); - toJSArray_(jsArray, 0, a); - return jsArray; -} - -function toJSArray_(jsArray, i, a) +function andThen(callback, task) { - 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]); - } - } + return { + ctor: '_Task_andThen', + callback: callback, + task: task + }; } -function fromJSArray(jsArray) +function onError(callback, task) { - if (jsArray.length === 0) - { - return empty; - } - var h = Math.floor(Math.log(jsArray.length) / Math.log(M)); - return fromJSArray_(jsArray, h, 0, jsArray.length); + return { + ctor: '_Task_onError', + callback: callback, + task: task + }; } -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); - } +function receive(callback) +{ return { - ctor: '_Array', - height: h, - table: table, - lengths: lengths + ctor: '_Task_receive', + callback: callback }; } -return { - 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 -}; +// PROCESSES -}(); -var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; -var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; -var _elm_lang$core$Array$isEmpty = function (array) { - return _elm_lang$core$Native_Utils.eq( - _elm_lang$core$Array$length(array), - 0); -}; -var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; -var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; -var _elm_lang$core$Array$get = F2( - function (i, array) { - return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( - i, - _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( - A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; - }); -var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; -var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; -var _elm_lang$core$Array$filter = F2( - function (isOkay, arr) { - var update = F2( - function (x, xs) { - return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; - }); - return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); - }); -var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; -var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; -var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; -var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; -var _elm_lang$core$Array$toIndexedList = function (array) { - return A3( - _elm_lang$core$List$map2, - F2( - function (v0, v1) { - return {ctor: '_Tuple2', _0: v0, _1: v1}; - }), - A2( - _elm_lang$core$List$range, - 0, - _elm_lang$core$Native_Array.length(array) - 1), - _elm_lang$core$Native_Array.toList(array)); -}; -var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; -var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; -var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; -var _elm_lang$core$Array$repeat = F2( - function (n, e) { - return A2( - _elm_lang$core$Array$initialize, - n, - _elm_lang$core$Basics$always(e)); - }); -var _elm_lang$core$Array$Array = {ctor: 'Array'}; +function rawSpawn(task) +{ + var process = { + ctor: '_Process', + id: _elm_lang$core$Native_Utils.guid(), + root: task, + stack: null, + mailbox: [] + }; -var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; -var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; -var _elm_lang$core$Task$spawnCmd = F2( - function (router, _p0) { - var _p1 = _p0; - return _elm_lang$core$Native_Scheduler.spawn( - A2( - _elm_lang$core$Task$andThen, - _elm_lang$core$Platform$sendToApp(router), - _p1._0)); - }); -var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; -var _elm_lang$core$Task$mapError = F2( - function (convert, task) { - return A2( - _elm_lang$core$Task$onError, - function (_p2) { - return _elm_lang$core$Task$fail( - convert(_p2)); - }, - task); - }); -var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; -var _elm_lang$core$Task$map = F2( - function (func, taskA) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return _elm_lang$core$Task$succeed( - func(a)); - }, - taskA); - }); -var _elm_lang$core$Task$map2 = F3( - function (func, taskA, taskB) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return _elm_lang$core$Task$succeed( - A2(func, a, b)); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$map3 = F4( - function (func, taskA, taskB, taskC) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - function (c) { - return _elm_lang$core$Task$succeed( - A3(func, a, b, c)); - }, - taskC); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$map4 = F5( - function (func, taskA, taskB, taskC, taskD) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - function (d) { - return _elm_lang$core$Task$succeed( - A4(func, a, b, c, d)); - }, - taskD); - }, - taskC); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$map5 = F6( - function (func, taskA, taskB, taskC, taskD, taskE) { - return A2( - _elm_lang$core$Task$andThen, - function (a) { - return A2( - _elm_lang$core$Task$andThen, - function (b) { - return A2( - _elm_lang$core$Task$andThen, - function (c) { - return A2( - _elm_lang$core$Task$andThen, - function (d) { - return A2( - _elm_lang$core$Task$andThen, - function (e) { - return _elm_lang$core$Task$succeed( - A5(func, a, b, c, d, e)); - }, - taskE); - }, - taskD); - }, - taskC); - }, - taskB); - }, - taskA); - }); -var _elm_lang$core$Task$sequence = function (tasks) { - var _p3 = tasks; - if (_p3.ctor === '[]') { - return _elm_lang$core$Task$succeed( - {ctor: '[]'}); - } else { - return A3( - _elm_lang$core$Task$map2, - F2( - function (x, y) { - return {ctor: '::', _0: x, _1: y}; - }), - _p3._0, - _elm_lang$core$Task$sequence(_p3._1)); - } -}; -var _elm_lang$core$Task$onEffects = F3( - function (router, commands, state) { - return A2( - _elm_lang$core$Task$map, - function (_p4) { - return {ctor: '_Tuple0'}; - }, - _elm_lang$core$Task$sequence( - A2( - _elm_lang$core$List$map, - _elm_lang$core$Task$spawnCmd(router), - commands))); - }); -var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); -var _elm_lang$core$Task$onSelfMsg = F3( - function (_p7, _p6, _p5) { - return _elm_lang$core$Task$succeed( - {ctor: '_Tuple0'}); + enqueue(process); + + return process; +} + +function spawn(task) +{ + return nativeBinding(function(callback) { + var process = rawSpawn(task); + callback(succeed(process)); }); -var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); -var _elm_lang$core$Task$Perform = function (a) { - return {ctor: 'Perform', _0: a}; -}; -var _elm_lang$core$Task$perform = F2( - function (toMessage, task) { - return _elm_lang$core$Task$command( - _elm_lang$core$Task$Perform( - A2(_elm_lang$core$Task$map, toMessage, task))); +} + +function rawSend(process, msg) +{ + process.mailbox.push(msg); + enqueue(process); +} + +function send(process, msg) +{ + return nativeBinding(function(callback) { + rawSend(process, msg); + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); }); -var _elm_lang$core$Task$attempt = F2( - function (resultToMessage, task) { - return _elm_lang$core$Task$command( - _elm_lang$core$Task$Perform( - A2( - _elm_lang$core$Task$onError, - function (_p8) { - return _elm_lang$core$Task$succeed( - resultToMessage( - _elm_lang$core$Result$Err(_p8))); - }, - A2( - _elm_lang$core$Task$andThen, - function (_p9) { - return _elm_lang$core$Task$succeed( - resultToMessage( - _elm_lang$core$Result$Ok(_p9))); - }, - task)))); +} + +function kill(process) +{ + return nativeBinding(function(callback) { + var root = process.root; + if (root.ctor === '_Task_nativeBinding' && root.cancel) + { + root.cancel(); + } + + process.root = null; + + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); }); -var _elm_lang$core$Task$cmdMap = F2( - function (tagger, _p10) { - var _p11 = _p10; - return _elm_lang$core$Task$Perform( - A2(_elm_lang$core$Task$map, tagger, _p11._0)); +} + +function sleep(time) +{ + return nativeBinding(function(callback) { + var id = setTimeout(function() { + callback(succeed(_elm_lang$core$Native_Utils.Tuple0)); + }, time); + + return function() { clearTimeout(id); }; }); -_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; +} + + +// STEP PROCESSES + +function step(numSteps, process) +{ + while (numSteps < MAX_STEPS) + { + var ctor = process.root.ctor; + + if (ctor === '_Task_succeed') + { + while (process.stack && process.stack.ctor === '_Task_onError') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_fail') + { + while (process.stack && process.stack.ctor === '_Task_andThen') + { + process.stack = process.stack.rest; + } + if (process.stack === null) + { + break; + } + process.root = process.stack.callback(process.root.value); + process.stack = process.stack.rest; + ++numSteps; + continue; + } + + if (ctor === '_Task_andThen') + { + process.stack = { + ctor: '_Task_andThen', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_onError') + { + process.stack = { + ctor: '_Task_onError', + callback: process.root.callback, + rest: process.stack + }; + process.root = process.root.task; + ++numSteps; + continue; + } + + if (ctor === '_Task_nativeBinding') + { + process.root.cancel = process.root.callback(function(newRoot) { + process.root = newRoot; + enqueue(process); + }); + + break; + } + + if (ctor === '_Task_receive') + { + var mailbox = process.mailbox; + if (mailbox.length === 0) + { + break; + } + + process.root = process.root.callback(mailbox.shift()); + ++numSteps; + continue; + } + + throw new Error(ctor); + } + + if (numSteps < MAX_STEPS) + { + return numSteps + 1; + } + enqueue(process); + + return numSteps; +} + + +// WORK QUEUE + +var working = false; +var workQueue = []; + +function enqueue(process) +{ + workQueue.push(process); + + if (!working) + { + setTimeout(work, 0); + working = true; + } +} + +function work() +{ + var numSteps = 0; + var process; + while (numSteps < MAX_STEPS && (process = workQueue.shift())) + { + if (process.root) + { + numSteps = step(numSteps, process); + } + } + if (!process) + { + working = false; + return; + } + setTimeout(work, 0); +} + + +return { + succeed: succeed, + fail: fail, + nativeBinding: nativeBinding, + andThen: F2(andThen), + onError: F2(onError), + receive: receive, + + spawn: spawn, + kill: kill, + sleep: sleep, + send: F2(send), + + rawSpawn: rawSpawn, + rawSend: rawSend +}; + +}(); +var _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {}; +_elm_lang$core$Platform_Cmd_ops['!'] = F2( + function (model, commands) { + return { + ctor: '_Tuple2', + _0: model, + _1: _elm_lang$core$Platform_Cmd$batch(commands) + }; + }); +var _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'}; + +var _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch; +var _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch( + {ctor: '[]'}); +var _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map; +var _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'}; + +var _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf; +var _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp; +var _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags; +var _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program; +var _elm_lang$core$Platform$Program = {ctor: 'Program'}; +var _elm_lang$core$Platform$Task = {ctor: 'Task'}; +var _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'}; +var _elm_lang$core$Platform$Router = {ctor: 'Router'}; -var _elm_lang$core$Dict$foldr = F3( +var _eeue56$elm_all_dict$EveryDict$foldr = F3( function (f, acc, t) { foldr: while (true) { @@ -4602,7 +4098,7 @@ var _elm_lang$core$Dict$foldr = F3( f, _p0._1, _p0._2, - A3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)), + A3(_eeue56$elm_all_dict$EveryDict$foldr, f, acc, _p0._4)), _v3 = _p0._3; f = _v1; acc = _v2; @@ -4611,9 +4107,9 @@ var _elm_lang$core$Dict$foldr = F3( } } }); -var _elm_lang$core$Dict$keys = function (dict) { +var _eeue56$elm_all_dict$EveryDict$keys = function (dict) { return A3( - _elm_lang$core$Dict$foldr, + _eeue56$elm_all_dict$EveryDict$foldr, F3( function (key, value, keyList) { return {ctor: '::', _0: key, _1: keyList}; @@ -4621,9 +4117,9 @@ var _elm_lang$core$Dict$keys = function (dict) { {ctor: '[]'}, dict); }; -var _elm_lang$core$Dict$values = function (dict) { +var _eeue56$elm_all_dict$EveryDict$values = function (dict) { return A3( - _elm_lang$core$Dict$foldr, + _eeue56$elm_all_dict$EveryDict$foldr, F3( function (key, value, valueList) { return {ctor: '::', _0: value, _1: valueList}; @@ -4631,9 +4127,9 @@ var _elm_lang$core$Dict$values = function (dict) { {ctor: '[]'}, dict); }; -var _elm_lang$core$Dict$toList = function (dict) { +var _eeue56$elm_all_dict$EveryDict$toList = function (dict) { return A3( - _elm_lang$core$Dict$foldr, + _eeue56$elm_all_dict$EveryDict$foldr, F3( function (key, value, list) { return { @@ -4645,7 +4141,7 @@ var _elm_lang$core$Dict$toList = function (dict) { {ctor: '[]'}, dict); }; -var _elm_lang$core$Dict$foldl = F3( +var _eeue56$elm_all_dict$EveryDict$foldl = F3( function (f, acc, dict) { foldl: while (true) { @@ -4658,7 +4154,7 @@ var _elm_lang$core$Dict$foldl = F3( f, _p1._1, _p1._2, - A3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)), + A3(_eeue56$elm_all_dict$EveryDict$foldl, f, acc, _p1._3)), _v7 = _p1._4; f = _v5; acc = _v6; @@ -4667,305 +4163,365 @@ var _elm_lang$core$Dict$foldl = F3( } } }); -var _elm_lang$core$Dict$merge = F6( - function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) { - var stepState = F3( - function (rKey, rValue, _p2) { - stepState: - while (true) { - var _p3 = _p2; - var _p9 = _p3._1; - var _p8 = _p3._0; - var _p4 = _p8; - if (_p4.ctor === '[]') { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - var _p7 = _p4._1; - var _p6 = _p4._0._1; - var _p5 = _p4._0._0; - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) { - var _v10 = rKey, - _v11 = rValue, - _v12 = { - ctor: '_Tuple2', - _0: _p7, - _1: A3(leftStep, _p5, _p6, _p9) - }; - rKey = _v10; - rValue = _v11; - _p2 = _v12; - continue stepState; - } else { - if (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) { - return { - ctor: '_Tuple2', - _0: _p8, - _1: A3(rightStep, rKey, rValue, _p9) - }; - } else { - return { - ctor: '_Tuple2', - _0: _p7, - _1: A4(bothStep, _p5, _p6, rValue, _p9) - }; - } - } - } - } - }); - var _p10 = A3( - _elm_lang$core$Dict$foldl, - stepState, - { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$toList(leftDict), - _1: initialResult - }, - rightDict); - var leftovers = _p10._0; - var intermediateResult = _p10._1; - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p11, result) { - var _p12 = _p11; - return A3(leftStep, _p12._0, _p12._1, result); - }), - intermediateResult, - leftovers); - }); -var _elm_lang$core$Dict$reportRemBug = F4( - function (msg, c, lgot, rgot) { - return _elm_lang$core$Native_Debug.crash( - _elm_lang$core$String$concat( - { - ctor: '::', - _0: 'Internal red-black tree invariant violated, expected ', - _1: { - ctor: '::', - _0: msg, - _1: { - ctor: '::', - _0: ' and got ', - _1: { - ctor: '::', - _0: _elm_lang$core$Basics$toString(c), - _1: { - ctor: '::', - _0: '/', - _1: { - ctor: '::', - _0: lgot, - _1: { - ctor: '::', - _0: '/', - _1: { - ctor: '::', - _0: rgot, - _1: { - ctor: '::', - _0: '\nPlease report this bug to ', - _1: {ctor: '[]'} - } - } - } - } - } - } - } - } - })); - }); -var _elm_lang$core$Dict$isBBlack = function (dict) { - var _p13 = dict; - _v14_2: +var _eeue56$elm_all_dict$EveryDict$isBBlack = function (dict) { + var _p2 = dict; + _v8_2: do { - if (_p13.ctor === 'RBNode_elm_builtin') { - if (_p13._0.ctor === 'BBlack') { + if (_p2.ctor === 'RBNode_elm_builtin') { + if (_p2._0.ctor === 'BBlack') { return true; } else { - break _v14_2; + break _v8_2; } } else { - if (_p13._0.ctor === 'LBBlack') { + if (_p2._0.ctor === 'LBBlack') { return true; } else { - break _v14_2; + break _v8_2; } } } while(false); return false; }; -var _elm_lang$core$Dict$sizeHelp = F2( +var _eeue56$elm_all_dict$EveryDict$showFlag = function (f) { + var _p3 = f; + switch (_p3.ctor) { + case 'Insert': + return 'Insert'; + case 'Remove': + return 'Remove'; + default: + return 'Same'; + } +}; +var _eeue56$elm_all_dict$EveryDict$sizeHelp = F2( function (n, dict) { sizeHelp: while (true) { - var _p14 = dict; - if (_p14.ctor === 'RBEmpty_elm_builtin') { + var _p4 = dict; + if (_p4.ctor === 'RBEmpty_elm_builtin') { return n; } else { - var _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4), - _v17 = _p14._3; - n = _v16; - dict = _v17; + var _v11 = A2(_eeue56$elm_all_dict$EveryDict$sizeHelp, n + 1, _p4._4), + _v12 = _p4._3; + n = _v11; + dict = _v12; continue sizeHelp; } } }); -var _elm_lang$core$Dict$size = function (dict) { - return A2(_elm_lang$core$Dict$sizeHelp, 0, dict); +var _eeue56$elm_all_dict$EveryDict$size = function (dict) { + return A2(_eeue56$elm_all_dict$EveryDict$sizeHelp, 0, dict); }; -var _elm_lang$core$Dict$get = F2( +var _eeue56$elm_all_dict$EveryDict$isEmpty = function (dict) { + var _p5 = dict; + if (_p5.ctor === 'RBEmpty_elm_builtin') { + return true; + } else { + return false; + } +}; +var _eeue56$elm_all_dict$EveryDict$max = function (dict) { + max: + while (true) { + var _p6 = dict; + if (_p6.ctor === 'RBNode_elm_builtin') { + if (_p6._4.ctor === 'RBEmpty_elm_builtin') { + return {ctor: '_Tuple2', _0: _p6._1, _1: _p6._2}; + } else { + var _v15 = _p6._4; + dict = _v15; + continue max; + } + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 127, column: 5}, + end: {line: 135, column: 51} + }, + _p6)('(max Empty) is not defined'); + } + } +}; +var _eeue56$elm_all_dict$EveryDict$min = function (dict) { + min: + while (true) { + var _p8 = dict; + if (_p8.ctor === 'RBNode_elm_builtin') { + if ((_p8._3.ctor === 'RBEmpty_elm_builtin') && (_p8._3._0.ctor === 'LBlack')) { + return {ctor: '_Tuple2', _0: _p8._1, _1: _p8._2}; + } else { + var _v17 = _p8._3; + dict = _v17; + continue min; + } + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 115, column: 5}, + end: {line: 123, column: 51} + }, + _p8)('(min Empty) is not defined'); + } + } +}; +var _eeue56$elm_all_dict$EveryDict$eq = F2( + function (first, second) { + return _elm_lang$core$Native_Utils.eq( + _eeue56$elm_all_dict$EveryDict$toList(first), + _eeue56$elm_all_dict$EveryDict$toList(second)); + }); +var _eeue56$elm_all_dict$EveryDict$ord = _elm_lang$core$Basics$toString; +var _eeue56$elm_all_dict$EveryDict$get_ = F2( function (targetKey, dict) { - get: + get_: while (true) { - var _p15 = dict; - if (_p15.ctor === 'RBEmpty_elm_builtin') { + var _p10 = dict; + if (_p10.ctor === 'RBEmpty_elm_builtin') { return _elm_lang$core$Maybe$Nothing; } else { - var _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1); - switch (_p16.ctor) { + var _p11 = A2( + _elm_lang$core$Basics$compare, + _eeue56$elm_all_dict$EveryDict$ord(targetKey), + _eeue56$elm_all_dict$EveryDict$ord(_p10._1)); + switch (_p11.ctor) { case 'LT': var _v20 = targetKey, - _v21 = _p15._3; + _v21 = _p10._3; targetKey = _v20; dict = _v21; - continue get; + continue get_; case 'EQ': - return _elm_lang$core$Maybe$Just(_p15._2); + return _elm_lang$core$Maybe$Just(_p10._2); default: var _v22 = targetKey, - _v23 = _p15._4; + _v23 = _p10._4; targetKey = _v22; dict = _v23; - continue get; + continue get_; } } } }); -var _elm_lang$core$Dict$member = F2( +var _eeue56$elm_all_dict$EveryDict$get = F2( + function (targetKey, dict) { + return A2(_eeue56$elm_all_dict$EveryDict$get_, targetKey, dict); + }); +var _eeue56$elm_all_dict$EveryDict$member = F2( function (key, dict) { - var _p17 = A2(_elm_lang$core$Dict$get, key, dict); - if (_p17.ctor === 'Just') { + var _p12 = A2(_eeue56$elm_all_dict$EveryDict$get_, key, dict); + if (_p12.ctor === 'Just') { return true; } else { return false; } }); -var _elm_lang$core$Dict$maxWithDefault = F3( - function (k, v, r) { - maxWithDefault: - while (true) { - var _p18 = r; - if (_p18.ctor === 'RBEmpty_elm_builtin') { - return {ctor: '_Tuple2', _0: k, _1: v}; - } else { - var _v26 = _p18._1, - _v27 = _p18._2, - _v28 = _p18._4; - k = _v26; - v = _v27; - r = _v28; - continue maxWithDefault; - } - } - }); -var _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'}; -var _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'}; -var _elm_lang$core$Dict$Black = {ctor: 'Black'}; -var _elm_lang$core$Dict$blackish = function (t) { - var _p19 = t; - if (_p19.ctor === 'RBNode_elm_builtin') { - var _p20 = _p19._0; - return _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack); +var _eeue56$elm_all_dict$EveryDict$showLColor = function (color) { + var _p13 = color; + if (_p13.ctor === 'LBlack') { + return 'LBlack'; + } else { + return 'LBBlack'; + } +}; +var _eeue56$elm_all_dict$EveryDict$showNColor = function (c) { + var _p14 = c; + switch (_p14.ctor) { + case 'Red': + return 'Red'; + case 'Black': + return 'Black'; + case 'BBlack': + return 'BBlack'; + default: + return 'NBlack'; + } +}; +var _eeue56$elm_all_dict$EveryDict$reportRemBug = F4( + function (msg, c, lgot, rgot) { + return _elm_lang$core$Native_Utils.crash( + 'EveryDict', + { + start: {line: 320, column: 3}, + end: {line: 320, column: 14} + })( + _elm_lang$core$String$concat( + { + ctor: '::', + _0: 'Internal red-black tree invariant violated, expected ', + _1: { + ctor: '::', + _0: msg, + _1: { + ctor: '::', + _0: ' and got ', + _1: { + ctor: '::', + _0: _eeue56$elm_all_dict$EveryDict$showNColor(c), + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: lgot, + _1: { + ctor: '::', + _0: '/', + _1: { + ctor: '::', + _0: rgot, + _1: { + ctor: '::', + _0: '\nPlease report this bug to ', + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } + })); + }); +var _eeue56$elm_all_dict$EveryDict$NBlack = {ctor: 'NBlack'}; +var _eeue56$elm_all_dict$EveryDict$BBlack = {ctor: 'BBlack'}; +var _eeue56$elm_all_dict$EveryDict$Black = {ctor: 'Black'}; +var _eeue56$elm_all_dict$EveryDict$blackish = function (t) { + var _p15 = t; + if (_p15.ctor === 'RBNode_elm_builtin') { + var _p16 = _p15._0; + return _elm_lang$core$Native_Utils.eq(_p16, _eeue56$elm_all_dict$EveryDict$Black) || _elm_lang$core$Native_Utils.eq(_p16, _eeue56$elm_all_dict$EveryDict$BBlack); } else { return true; } }; -var _elm_lang$core$Dict$Red = {ctor: 'Red'}; -var _elm_lang$core$Dict$moreBlack = function (color) { - var _p21 = color; - switch (_p21.ctor) { +var _eeue56$elm_all_dict$EveryDict$Red = {ctor: 'Red'}; +var _eeue56$elm_all_dict$EveryDict$moreBlack = function (color) { + var _p17 = color; + switch (_p17.ctor) { case 'Black': - return _elm_lang$core$Dict$BBlack; + return _eeue56$elm_all_dict$EveryDict$BBlack; case 'Red': - return _elm_lang$core$Dict$Black; + return _eeue56$elm_all_dict$EveryDict$Black; case 'NBlack': - return _elm_lang$core$Dict$Red; + return _eeue56$elm_all_dict$EveryDict$Red; default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a double black node more black!'); + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 294, column: 5}, + end: {line: 298, column: 73} + }, + _p17)('Can\'t make a double black node more black!'); } }; -var _elm_lang$core$Dict$lessBlack = function (color) { - var _p22 = color; - switch (_p22.ctor) { +var _eeue56$elm_all_dict$EveryDict$lessBlack = function (color) { + var _p19 = color; + switch (_p19.ctor) { case 'BBlack': - return _elm_lang$core$Dict$Black; + return _eeue56$elm_all_dict$EveryDict$Black; case 'Black': - return _elm_lang$core$Dict$Red; + return _eeue56$elm_all_dict$EveryDict$Red; case 'Red': - return _elm_lang$core$Dict$NBlack; + return _eeue56$elm_all_dict$EveryDict$NBlack; default: - return _elm_lang$core$Native_Debug.crash('Can\'t make a negative black node less black!'); + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 303, column: 5}, + end: {line: 307, column: 75} + }, + _p19)('Can\'t make a negative black node less black!'); } }; -var _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'}; -var _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'}; -var _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) { +var _eeue56$elm_all_dict$EveryDict$LBBlack = {ctor: 'LBBlack'}; +var _eeue56$elm_all_dict$EveryDict$LBlack = {ctor: 'LBlack'}; +var _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin = function (a) { return {ctor: 'RBEmpty_elm_builtin', _0: a}; }; -var _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); -var _elm_lang$core$Dict$isEmpty = function (dict) { - return _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty); -}; -var _elm_lang$core$Dict$RBNode_elm_builtin = F5( +var _eeue56$elm_all_dict$EveryDict$empty = _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); +var _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin = F5( function (a, b, c, d, e) { return {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e}; }); -var _elm_lang$core$Dict$ensureBlackRoot = function (dict) { - var _p23 = dict; - if ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4); +var _eeue56$elm_all_dict$EveryDict$ensureBlackRoot = function (dict) { + var _p21 = dict; + if (_p21.ctor === 'RBNode_elm_builtin') { + switch (_p21._0.ctor) { + case 'Red': + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p21._1, _p21._2, _p21._3, _p21._4); + case 'Black': + return dict; + default: + return dict; + } } else { return dict; } }; -var _elm_lang$core$Dict$lessBlackTree = function (dict) { - var _p24 = dict; - if (_p24.ctor === 'RBNode_elm_builtin') { +var _eeue56$elm_all_dict$EveryDict$lessBlackTree = function (dict) { + var _p22 = dict; + if (_p22.ctor === 'RBNode_elm_builtin') { return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(_p24._0), - _p24._1, - _p24._2, - _p24._3, - _p24._4); + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$lessBlack(_p22._0), + _p22._1, + _p22._2, + _p22._3, + _p22._4); } else { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); + if (_p22._0.ctor === 'LBBlack') { + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); + } else { + return dict; + } } }; -var _elm_lang$core$Dict$balancedTree = 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( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$lessBlack(col), - yk, - yv, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d)); +var _eeue56$elm_all_dict$EveryDict$blacken = function (t) { + var _p23 = t; + if (_p23.ctor === 'RBEmpty_elm_builtin') { + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); + } else { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p23._1, _p23._2, _p23._3, _p23._4); + } +}; +var _eeue56$elm_all_dict$EveryDict$redden = function (t) { + var _p24 = t; + if (_p24.ctor === 'RBEmpty_elm_builtin') { + return _elm_lang$core$Native_Utils.crashCase( + 'EveryDict', + { + start: {line: 440, column: 5}, + end: {line: 442, column: 69} + }, + _p24)('can\'t make a Leaf red'); + } else { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Red, _p24._1, _p24._2, _p24._3, _p24._4); + } +}; +var _eeue56$elm_all_dict$EveryDict$balance_node = function (t) { + 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( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$lessBlack(col), + yk, + yv, + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, xk, xv, a, b), + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, zk, zv, c, d)); + }; }; }; }; @@ -4976,535 +4532,1961 @@ var _elm_lang$core$Dict$balancedTree = function (col) { }; }; }; -}; -var _elm_lang$core$Dict$blacken = function (t) { - var _p25 = t; - if (_p25.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4); - } -}; -var _elm_lang$core$Dict$redden = function (t) { - var _p26 = t; - if (_p26.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Native_Debug.crash('can\'t make a Leaf red'); - } else { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4); - } -}; -var _elm_lang$core$Dict$balanceHelp = function (tree) { - var _p27 = tree; - _v36_6: - do { - _v36_5: + if (_eeue56$elm_all_dict$EveryDict$blackish(t)) { + var _p26 = t; + _v34_6: do { - _v36_4: + _v34_5: do { - _v36_3: + _v34_4: do { - _v36_2: + _v34_3: do { - _v36_1: + _v34_2: do { - _v36_0: + _v34_1: do { - if (_p27.ctor === 'RBNode_elm_builtin') { - if (_p27._3.ctor === 'RBNode_elm_builtin') { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._3._0.ctor) { - case 'Red': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; + _v34_0: + do { + if (_p26.ctor === 'RBNode_elm_builtin') { + if (_p26._3.ctor === 'RBNode_elm_builtin') { + if (_p26._4.ctor === 'RBNode_elm_builtin') { + switch (_p26._3._0.ctor) { + case 'Red': + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; } else { - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; } else { - break _v36_6; + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; + } else { + break _v34_6; + } } } } - } - case 'NBlack': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; + case 'NBlack': + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; } else { - break _v36_6; + if (((_p26._0.ctor === 'BBlack') && (_p26._4._3.ctor === 'RBNode_elm_builtin')) && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; + } else { + break _v34_6; + } } } - } - default: - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; + default: + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; } else { - break _v36_6; + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; + } else { + break _v34_6; + } } - } - } - case 'NBlack': - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; + } + case 'NBlack': + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; } else { - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; } else { - break _v36_6; + if (((_p26._0.ctor === 'BBlack') && (_p26._3._4.ctor === 'RBNode_elm_builtin')) && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } } } - } - case 'NBlack': - if (_p27._0.ctor === 'BBlack') { - if ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; + case 'NBlack': + if (_p26._0.ctor === 'BBlack') { + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; + } else { + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } + } } else { - if ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; + break _v34_6; + } + default: + if (((_p26._0.ctor === 'BBlack') && (_p26._3._4.ctor === 'RBNode_elm_builtin')) && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } + } + default: + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; + } else { + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; } else { - break _v36_6; + break _v34_6; } } - } else { - break _v36_6; - } - default: - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - } - default: - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; + case 'NBlack': + if (((_p26._0.ctor === 'BBlack') && (_p26._4._3.ctor === 'RBNode_elm_builtin')) && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; } else { - break _v36_6; + break _v34_6; } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; + default: + break _v34_6; + } + } + } else { + switch (_p26._3._0.ctor) { + case 'Red': + if ((_p26._3._3.ctor === 'RBNode_elm_builtin') && (_p26._3._3._0.ctor === 'Red')) { + break _v34_0; + } else { + if ((_p26._3._4.ctor === 'RBNode_elm_builtin') && (_p26._3._4._0.ctor === 'Red')) { + break _v34_1; } else { - break _v36_6; + break _v34_6; } - default: - break _v36_6; - } + } + case 'NBlack': + if (((_p26._0.ctor === 'BBlack') && (_p26._3._4.ctor === 'RBNode_elm_builtin')) && (_p26._3._4._0.ctor === 'Black')) { + break _v34_5; + } else { + break _v34_6; + } + default: + break _v34_6; + } } } else { - switch (_p27._3._0.ctor) { - case 'Red': - if ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) { - break _v36_0; - } else { - if ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) { - break _v36_1; + if (_p26._4.ctor === 'RBNode_elm_builtin') { + switch (_p26._4._0.ctor) { + case 'Red': + if ((_p26._4._3.ctor === 'RBNode_elm_builtin') && (_p26._4._3._0.ctor === 'Red')) { + break _v34_2; } else { - break _v36_6; + if ((_p26._4._4.ctor === 'RBNode_elm_builtin') && (_p26._4._4._0.ctor === 'Red')) { + break _v34_3; + } else { + break _v34_6; + } } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) { - break _v36_5; - } else { - break _v36_6; - } - default: - break _v36_6; - } - } - } else { - if (_p27._4.ctor === 'RBNode_elm_builtin') { - switch (_p27._4._0.ctor) { - case 'Red': - if ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) { - break _v36_2; - } else { - if ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) { - break _v36_3; + case 'NBlack': + if (((_p26._0.ctor === 'BBlack') && (_p26._4._3.ctor === 'RBNode_elm_builtin')) && (_p26._4._3._0.ctor === 'Black')) { + break _v34_4; } else { - break _v36_6; + break _v34_6; } - } - case 'NBlack': - if (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) { - break _v36_4; - } else { - break _v36_6; - } - default: - break _v36_6; + default: + break _v34_6; + } + } else { + break _v34_6; } - } else { - break _v36_6; } + } else { + break _v34_6; } - } else { - break _v36_6; - } + } while(false); + return assemble(_p26._0)(_p26._3._3._1)(_p26._3._3._2)(_p26._3._1)(_p26._3._2)(_p26._1)(_p26._2)(_p26._3._3._3)(_p26._3._3._4)(_p26._3._4)(_p26._4); } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4); + return assemble(_p26._0)(_p26._3._1)(_p26._3._2)(_p26._3._4._1)(_p26._3._4._2)(_p26._1)(_p26._2)(_p26._3._3)(_p26._3._4._3)(_p26._3._4._4)(_p26._4); } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4); + return assemble(_p26._0)(_p26._1)(_p26._2)(_p26._4._3._1)(_p26._4._3._2)(_p26._4._1)(_p26._4._2)(_p26._3)(_p26._4._3._3)(_p26._4._3._4)(_p26._4._4); } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4); + return assemble(_p26._0)(_p26._1)(_p26._2)(_p26._4._1)(_p26._4._2)(_p26._4._4._1)(_p26._4._4._2)(_p26._3)(_p26._4._3)(_p26._4._4._3)(_p26._4._4._4); } while(false); - return _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4); + var _p28 = _p26._4._4; + var _p27 = _p28; + if ((_p27.ctor === 'RBNode_elm_builtin') && (_p27._0.ctor === 'Black')) { + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._4._3._1, + _p26._4._3._2, + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p26._1, _p26._2, _p26._3, _p26._4._3._3), + A5( + _eeue56$elm_all_dict$EveryDict$balance, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._4._1, + _p26._4._2, + _p26._4._3._4, + _eeue56$elm_all_dict$EveryDict$redden(_p28))); + } else { + return t; + } } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._4._3._1, - _p27._4._3._2, - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3), - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._4._1, - _p27._4._2, - _p27._4._3._4, - _elm_lang$core$Dict$redden(_p27._4._4))); + var _p30 = _p26._3._3; + var _p29 = _p30; + if ((_p29.ctor === 'RBNode_elm_builtin') && (_p29._0.ctor === 'Black')) { + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._3._4._1, + _p26._3._4._2, + A5( + _eeue56$elm_all_dict$EveryDict$balance, + _eeue56$elm_all_dict$EveryDict$Black, + _p26._3._1, + _p26._3._2, + _eeue56$elm_all_dict$EveryDict$redden(_p30), + _p26._3._4._3), + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p26._1, _p26._2, _p26._3._4._4, _p26._4)); + } else { + return t; + } } while(false); - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _elm_lang$core$Dict$Black, - _p27._3._4._1, - _p27._3._4._2, - A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$Black, - _p27._3._1, - _p27._3._2, - _elm_lang$core$Dict$redden(_p27._3._3), - _p27._3._4._3), - A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4)); - } while(false); - return tree; + return t; + } else { + return t; + } +}; +var _eeue56$elm_all_dict$EveryDict$balance = F5( + function (c, k, v, l, r) { + return _eeue56$elm_all_dict$EveryDict$balance_node( + A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, c, k, v, l, r)); + }); +var _eeue56$elm_all_dict$EveryDict$bubble = F5( + function (c, k, v, l, r) { + return (_eeue56$elm_all_dict$EveryDict$isBBlack(l) || _eeue56$elm_all_dict$EveryDict$isBBlack(r)) ? A5( + _eeue56$elm_all_dict$EveryDict$balance, + _eeue56$elm_all_dict$EveryDict$moreBlack(c), + k, + v, + _eeue56$elm_all_dict$EveryDict$lessBlackTree(l), + _eeue56$elm_all_dict$EveryDict$lessBlackTree(r)) : A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, c, k, v, l, r); + }); +var _eeue56$elm_all_dict$EveryDict$remove_max = F5( + function (c, k, v, l, r) { + var _p31 = r; + if (_p31.ctor === 'RBEmpty_elm_builtin') { + return A3(_eeue56$elm_all_dict$EveryDict$rem, c, l, r); + } else { + return A5( + _eeue56$elm_all_dict$EveryDict$bubble, + c, + k, + v, + l, + A5(_eeue56$elm_all_dict$EveryDict$remove_max, _p31._0, _p31._1, _p31._2, _p31._3, _p31._4)); + } + }); +var _eeue56$elm_all_dict$EveryDict$rem = F3( + function (c, l, r) { + var _p32 = {ctor: '_Tuple2', _0: l, _1: r}; + if (_p32._0.ctor === 'RBEmpty_elm_builtin') { + if (_p32._1.ctor === 'RBEmpty_elm_builtin') { + var _p33 = c; + switch (_p33.ctor) { + case 'Red': + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBlack); + case 'Black': + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_eeue56$elm_all_dict$EveryDict$LBBlack); + default: + return _eeue56$elm_all_dict$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); + } + } else { + var _p36 = _p32._1._0; + var _p35 = _p32._0._0; + var _p34 = {ctor: '_Tuple3', _0: c, _1: _p35, _2: _p36}; + if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'LBlack')) && (_p34._2.ctor === 'Red')) { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p32._1._1, _p32._1._2, _p32._1._3, _p32._1._4); + } else { + return A4( + _eeue56$elm_all_dict$EveryDict$reportRemBug, + 'Black/LBlack/Red', + c, + _eeue56$elm_all_dict$EveryDict$showLColor(_p35), + _eeue56$elm_all_dict$EveryDict$showNColor(_p36)); + } + } + } else { + if (_p32._1.ctor === 'RBEmpty_elm_builtin') { + var _p39 = _p32._1._0; + var _p38 = _p32._0._0; + var _p37 = {ctor: '_Tuple3', _0: c, _1: _p38, _2: _p39}; + if ((((_p37.ctor === '_Tuple3') && (_p37._0.ctor === 'Black')) && (_p37._1.ctor === 'Red')) && (_p37._2.ctor === 'LBlack')) { + return A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Black, _p32._0._1, _p32._0._2, _p32._0._3, _p32._0._4); + } else { + return A4( + _eeue56$elm_all_dict$EveryDict$reportRemBug, + 'Black/Red/LBlack', + c, + _eeue56$elm_all_dict$EveryDict$showNColor(_p38), + _eeue56$elm_all_dict$EveryDict$showLColor(_p39)); + } + } else { + var _p45 = _p32._0._2; + var _p44 = _p32._0._4; + var _p43 = _p32._0._3; + var _p42 = _p32._0._1; + var _p41 = _p32._0._0; + var l_ = A5(_eeue56$elm_all_dict$EveryDict$remove_max, _p41, _p42, _p45, _p43, _p44); + var r = A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p32._1._0, _p32._1._1, _p32._1._2, _p32._1._3, _p32._1._4); + var l = A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p41, _p42, _p45, _p43, _p44); + var _p40 = _eeue56$elm_all_dict$EveryDict$max(l); + var k = _p40._0; + var v = _p40._1; + return A5(_eeue56$elm_all_dict$EveryDict$bubble, c, k, v, l_, r); + } + } + }); +var _eeue56$elm_all_dict$EveryDict$map = F2( + function (f, dict) { + var _p46 = dict; + if (_p46.ctor === 'RBEmpty_elm_builtin') { + return _eeue56$elm_all_dict$EveryDict$RBEmpty_elm_builtin(_p46._0); + } else { + var _p47 = _p46._1; + return A5( + _eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, + _p46._0, + _p47, + A2(f, _p47, _p46._2), + A2(_eeue56$elm_all_dict$EveryDict$map, f, _p46._3), + A2(_eeue56$elm_all_dict$EveryDict$map, f, _p46._4)); + } + }); +var _eeue56$elm_all_dict$EveryDict$Same = {ctor: 'Same'}; +var _eeue56$elm_all_dict$EveryDict$Remove = {ctor: 'Remove'}; +var _eeue56$elm_all_dict$EveryDict$Insert = {ctor: 'Insert'}; +var _eeue56$elm_all_dict$EveryDict$update = F3( + function (k, alter, dict) { + var up = function (dict) { + var _p48 = dict; + if (_p48.ctor === 'RBEmpty_elm_builtin') { + var _p49 = alter(_elm_lang$core$Maybe$Nothing); + if (_p49.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: _eeue56$elm_all_dict$EveryDict$Same, _1: _eeue56$elm_all_dict$EveryDict$empty}; + } else { + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Insert, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _eeue56$elm_all_dict$EveryDict$Red, k, _p49._0, _eeue56$elm_all_dict$EveryDict$empty, _eeue56$elm_all_dict$EveryDict$empty) + }; + } + } else { + var _p60 = _p48._2; + var _p59 = _p48._4; + var _p58 = _p48._3; + var _p57 = _p48._1; + var _p56 = _p48._0; + var _p50 = A2( + _elm_lang$core$Basics$compare, + _eeue56$elm_all_dict$EveryDict$ord(k), + _eeue56$elm_all_dict$EveryDict$ord(_p57)); + switch (_p50.ctor) { + case 'EQ': + var _p51 = alter( + _elm_lang$core$Maybe$Just(_p60)); + if (_p51.ctor === 'Nothing') { + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Remove, + _1: A3(_eeue56$elm_all_dict$EveryDict$rem, _p56, _p58, _p59) + }; + } else { + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Same, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p56, _p57, _p51._0, _p58, _p59) + }; + } + case 'LT': + var _p52 = up(_p58); + var flag = _p52._0; + var newLeft = _p52._1; + var _p53 = flag; + switch (_p53.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Same, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p56, _p57, _p60, newLeft, _p59) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Insert, + _1: A5(_eeue56$elm_all_dict$EveryDict$balance, _p56, _p57, _p60, newLeft, _p59) + }; + default: + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Remove, + _1: A5(_eeue56$elm_all_dict$EveryDict$bubble, _p56, _p57, _p60, newLeft, _p59) + }; + } + default: + var _p54 = up(_p59); + var flag = _p54._0; + var newRight = _p54._1; + var _p55 = flag; + switch (_p55.ctor) { + case 'Same': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Same, + _1: A5(_eeue56$elm_all_dict$EveryDict$RBNode_elm_builtin, _p56, _p57, _p60, _p58, newRight) + }; + case 'Insert': + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Insert, + _1: A5(_eeue56$elm_all_dict$EveryDict$balance, _p56, _p57, _p60, _p58, newRight) + }; + default: + return { + ctor: '_Tuple2', + _0: _eeue56$elm_all_dict$EveryDict$Remove, + _1: A5(_eeue56$elm_all_dict$EveryDict$bubble, _p56, _p57, _p60, _p58, newRight) + }; + } + } + } + }; + var _p61 = up(dict); + var flag = _p61._0; + var updatedDict = _p61._1; + var _p62 = flag; + switch (_p62.ctor) { + case 'Same': + return updatedDict; + case 'Insert': + return _eeue56$elm_all_dict$EveryDict$ensureBlackRoot(updatedDict); + default: + return _eeue56$elm_all_dict$EveryDict$blacken(updatedDict); + } + }); +var _eeue56$elm_all_dict$EveryDict$insert = F3( + function (key, value, dict) { + return A3( + _eeue56$elm_all_dict$EveryDict$update, + key, + _elm_lang$core$Basics$always( + _elm_lang$core$Maybe$Just(value)), + dict); + }); +var _eeue56$elm_all_dict$EveryDict$singleton = F2( + function (key, value) { + return A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, _eeue56$elm_all_dict$EveryDict$empty); + }); +var _eeue56$elm_all_dict$EveryDict$union = F2( + function (t1, t2) { + return A3(_eeue56$elm_all_dict$EveryDict$foldl, _eeue56$elm_all_dict$EveryDict$insert, t2, t1); + }); +var _eeue56$elm_all_dict$EveryDict$fromList = function (assocs) { + return A3( + _elm_lang$core$List$foldl, + F2( + function (_p63, dict) { + var _p64 = _p63; + return A3(_eeue56$elm_all_dict$EveryDict$insert, _p64._0, _p64._1, dict); + }), + _eeue56$elm_all_dict$EveryDict$empty, + assocs); +}; +var _eeue56$elm_all_dict$EveryDict$filter = F2( + function (predicate, dictionary) { + var add = F3( + function (key, value, dict) { + return A2(predicate, key, value) ? A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, dict) : dict; + }); + return A3(_eeue56$elm_all_dict$EveryDict$foldl, add, _eeue56$elm_all_dict$EveryDict$empty, dictionary); + }); +var _eeue56$elm_all_dict$EveryDict$intersect = F2( + function (t1, t2) { + return A2( + _eeue56$elm_all_dict$EveryDict$filter, + F2( + function (k, _p65) { + return A2(_eeue56$elm_all_dict$EveryDict$member, k, t2); + }), + t1); + }); +var _eeue56$elm_all_dict$EveryDict$partition = F2( + function (predicate, dict) { + var add = F3( + function (key, value, _p66) { + var _p67 = _p66; + var _p69 = _p67._1; + var _p68 = _p67._0; + return A2(predicate, key, value) ? { + ctor: '_Tuple2', + _0: A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, _p68), + _1: _p69 + } : { + ctor: '_Tuple2', + _0: _p68, + _1: A3(_eeue56$elm_all_dict$EveryDict$insert, key, value, _p69) + }; + }); + return A3( + _eeue56$elm_all_dict$EveryDict$foldl, + add, + {ctor: '_Tuple2', _0: _eeue56$elm_all_dict$EveryDict$empty, _1: _eeue56$elm_all_dict$EveryDict$empty}, + dict); + }); +var _eeue56$elm_all_dict$EveryDict$remove = F2( + function (key, dict) { + return A3( + _eeue56$elm_all_dict$EveryDict$update, + key, + _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), + dict); + }); +var _eeue56$elm_all_dict$EveryDict$diff = F2( + function (t1, t2) { + return A3( + _eeue56$elm_all_dict$EveryDict$foldl, + F3( + function (k, v, t) { + return A2(_eeue56$elm_all_dict$EveryDict$remove, k, t); + }), + t1, + t2); + }); + + +/* + * Copyright (c) 2010 Mozilla Corporation + * Copyright (c) 2010 Vladimir Vukicevic + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * File: mjs + * + * Vector and Matrix math utilities for JavaScript, optimized for WebGL. + * Edited to work with the Elm Programming Language + */ + +var _elm_community$linear_algebra$Native_Math_Vector2 = function() { + + var MJS_FLOAT_ARRAY_TYPE = Float32Array; + + var V2 = { }; + + if (MJS_FLOAT_ARRAY_TYPE == Array) { + V2.$ = function V2_$(x, y) { + return [x, y]; + }; + } else { + V2.$ = function V2_$(x, y) { + return new MJS_FLOAT_ARRAY_TYPE([x, y]); + }; + } + + V2.getX = function V2_getX(a) { + return a[0]; + } + V2.getY = function V2_getY(a) { + return a[1]; + } + V2.setX = function V2_setX(x, a) { + return new MJS_FLOAT_ARRAY_TYPE([x, a[1]]); + } + V2.setY = function V2_setY(y, a) { + return new MJS_FLOAT_ARRAY_TYPE([a[0], y]); + } + + V2.toTuple = function V2_toTuple(a) { + return { + ctor:"_Tuple2", + _0:a[0], + _1:a[1] + }; + }; + V2.fromTuple = function V2_fromTuple(t) { + return new MJS_FLOAT_ARRAY_TYPE([t._0, t._1]); + }; + + V2.toRecord = function V2_toRecord(a) { + return { + _:{}, + x:a[0], + y:a[1] + }; + }; + V2.fromRecord = function V2_fromRecord(r) { + return new MJS_FLOAT_ARRAY_TYPE([r.x, r.y]); + }; + + V2.add = function V2_add(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] + b[0]; + r[1] = a[1] + b[1]; + return r; + }; + + V2.sub = function V2_sub(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] - b[0]; + r[1] = a[1] - b[1]; + return r; + }; + + V2.neg = function V2_neg(a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = - a[0]; + r[1] = - a[1]; + return r; + }; + + V2.direction = function V2_direction(a, b) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] - b[0]; + r[1] = a[1] - b[1]; + var im = 1.0 / V2.length(r); + r[0] = r[0] * im; + r[1] = r[1] * im; + return r; + }; + + V2.length = function V2_length(a) { + return Math.sqrt(a[0]*a[0] + a[1]*a[1]); + }; + + V2.lengthSquared = function V2_lengthSquared(a) { + return a[0]*a[0] + a[1]*a[1]; + }; + + V2.distance = function V2_distance(a, b) { + var dx = a[0] - b[0]; + var dy = a[1] - b[1]; + return Math.sqrt(dx * dx + dy * dy); + }; + + V2.distanceSquared = function V2_distanceSquared(a, b) { + var dx = a[0] - b[0]; + var dy = a[1] - b[1]; + return dx * dx + dy * dy; + }; + + V2.normalize = function V2_normalize(a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + var im = 1.0 / V2.length(a); + r[0] = a[0] * im; + r[1] = a[1] * im; + return r; + }; + + V2.scale = function V2_scale(k, a) { + var r = new MJS_FLOAT_ARRAY_TYPE(2); + r[0] = a[0] * k; + r[1] = a[1] * k; + return r; + }; + + V2.dot = function V2_dot(a, b) { + return a[0] * b[0] + a[1] * b[1]; + }; + + return { + vec2: F2(V2.$), + getX: V2.getX, + getY: V2.getY, + setX: F2(V2.setX), + setY: F2(V2.setY), + toTuple: V2.toTuple, + toRecord: V2.toRecord, + fromTuple: V2.fromTuple, + fromRecord: V2.fromRecord, + add: F2(V2.add), + sub: F2(V2.sub), + neg: V2.neg, + direction: F2(V2.direction), + length: V2.length, + lengthSquared: V2.lengthSquared, + distance: F2(V2.distance), + distanceSquared: F2(V2.distanceSquared), + normalize: V2.normalize, + scale: F2(V2.scale), + dot: F2(V2.dot) + }; + +}(); + +var _elm_community$linear_algebra$Math_Vector2$dot = _elm_community$linear_algebra$Native_Math_Vector2.dot; +var _elm_community$linear_algebra$Math_Vector2$scale = _elm_community$linear_algebra$Native_Math_Vector2.scale; +var _elm_community$linear_algebra$Math_Vector2$normalize = _elm_community$linear_algebra$Native_Math_Vector2.normalize; +var _elm_community$linear_algebra$Math_Vector2$distanceSquared = _elm_community$linear_algebra$Native_Math_Vector2.distanceSquared; +var _elm_community$linear_algebra$Math_Vector2$distance = _elm_community$linear_algebra$Native_Math_Vector2.distance; +var _elm_community$linear_algebra$Math_Vector2$lengthSquared = _elm_community$linear_algebra$Native_Math_Vector2.lengthSquared; +var _elm_community$linear_algebra$Math_Vector2$length = _elm_community$linear_algebra$Native_Math_Vector2.length; +var _elm_community$linear_algebra$Math_Vector2$direction = _elm_community$linear_algebra$Native_Math_Vector2.direction; +var _elm_community$linear_algebra$Math_Vector2$negate = _elm_community$linear_algebra$Native_Math_Vector2.neg; +var _elm_community$linear_algebra$Math_Vector2$sub = _elm_community$linear_algebra$Native_Math_Vector2.sub; +var _elm_community$linear_algebra$Math_Vector2$add = _elm_community$linear_algebra$Native_Math_Vector2.add; +var _elm_community$linear_algebra$Math_Vector2$fromRecord = _elm_community$linear_algebra$Native_Math_Vector2.fromRecord; +var _elm_community$linear_algebra$Math_Vector2$fromTuple = _elm_community$linear_algebra$Native_Math_Vector2.fromTuple; +var _elm_community$linear_algebra$Math_Vector2$toRecord = _elm_community$linear_algebra$Native_Math_Vector2.toRecord; +var _elm_community$linear_algebra$Math_Vector2$toTuple = _elm_community$linear_algebra$Native_Math_Vector2.toTuple; +var _elm_community$linear_algebra$Math_Vector2$setY = _elm_community$linear_algebra$Native_Math_Vector2.setY; +var _elm_community$linear_algebra$Math_Vector2$setX = _elm_community$linear_algebra$Native_Math_Vector2.setX; +var _elm_community$linear_algebra$Math_Vector2$getY = _elm_community$linear_algebra$Native_Math_Vector2.getY; +var _elm_community$linear_algebra$Math_Vector2$getX = _elm_community$linear_algebra$Native_Math_Vector2.getX; +var _elm_community$linear_algebra$Math_Vector2$vec2 = _elm_community$linear_algebra$Native_Math_Vector2.vec2; +var _elm_community$linear_algebra$Math_Vector2$Vec2 = {ctor: 'Vec2'}; + +//import Native.List // + +var _elm_lang$core$Native_Array = function() { + +// 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: [] }; -var _elm_lang$core$Dict$balance = F5( - function (c, k, v, l, r) { - var tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - return _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree; - }); -var _elm_lang$core$Dict$bubble = F5( - function (c, k, v, l, r) { - return (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5( - _elm_lang$core$Dict$balance, - _elm_lang$core$Dict$moreBlack(c), - k, - v, - _elm_lang$core$Dict$lessBlackTree(l), - _elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r); - }); -var _elm_lang$core$Dict$removeMax = F5( - function (c, k, v, l, r) { - var _p28 = r; - if (_p28.ctor === 'RBEmpty_elm_builtin') { - return A3(_elm_lang$core$Dict$rem, c, l, r); - } else { - return A5( - _elm_lang$core$Dict$bubble, - c, - k, - v, - l, - A5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4)); + + +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.ctor === '[]') + { + return empty; + } + + // Allocate M sized blocks (table) and write list elements to it. + var table = new Array(M); + var nodes = []; + 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: [], + lengths: [] + }; + 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: [], + lengths: [] + }; + } +} + +// 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_(_elm_lang$core$Native_List.Nil, a); +} + +function toList_(list, a) +{ + for (var i = a.table.length - 1; i >= 0; i--) + { + list = + a.height === 0 + ? _elm_lang$core$Native_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 ? from : from + 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); } - }); -var _elm_lang$core$Dict$rem = F3( - function (color, left, right) { - var _p29 = {ctor: '_Tuple2', _0: left, _1: right}; - if (_p29._0.ctor === 'RBEmpty_elm_builtin') { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p30 = color; - switch (_p30.ctor) { - case 'Red': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - case 'Black': - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack); - default: - return _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point'); - } - } else { - var _p33 = _p29._1._0; - var _p32 = _p29._0._0; - var _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33}; - if ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/LBlack/Red', - color, - _elm_lang$core$Basics$toString(_p32), - _elm_lang$core$Basics$toString(_p33)); - } - } - } else { - if (_p29._1.ctor === 'RBEmpty_elm_builtin') { - var _p36 = _p29._1._0; - var _p35 = _p29._0._0; - var _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36}; - if ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) { - return A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4); - } else { - return A4( - _elm_lang$core$Dict$reportRemBug, - 'Black/Red/LBlack', - color, - _elm_lang$core$Basics$toString(_p35), - _elm_lang$core$Basics$toString(_p36)); - } - } else { - var _p40 = _p29._0._2; - var _p39 = _p29._0._4; - var _p38 = _p29._0._1; - var newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39); - var _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39); - var k = _p37._0; - var v = _p37._1; - return A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right); + } + 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]); } - }); -var _elm_lang$core$Dict$map = F2( - function (f, dict) { - var _p41 = dict; - if (_p41.ctor === 'RBEmpty_elm_builtin') { - return _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack); - } else { - var _p42 = _p41._1; - return A5( - _elm_lang$core$Dict$RBNode_elm_builtin, - _p41._0, - _p42, - A2(f, _p42, _p41._2), - A2(_elm_lang$core$Dict$map, f, _p41._3), - A2(_elm_lang$core$Dict$map, f, _p41._4)); + 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); } - }); -var _elm_lang$core$Dict$Same = {ctor: 'Same'}; -var _elm_lang$core$Dict$Remove = {ctor: 'Remove'}; -var _elm_lang$core$Dict$Insert = {ctor: 'Insert'}; -var _elm_lang$core$Dict$update = F3( - function (k, alter, dict) { - var up = function (dict) { - var _p43 = dict; - if (_p43.ctor === 'RBEmpty_elm_builtin') { - var _p44 = alter(_elm_lang$core$Maybe$Nothing); - if (_p44.ctor === 'Nothing') { - return {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty}; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty) - }; - } - } else { - var _p55 = _p43._2; - var _p54 = _p43._4; - var _p53 = _p43._3; - var _p52 = _p43._1; - var _p51 = _p43._0; - var _p45 = A2(_elm_lang$core$Basics$compare, k, _p52); - switch (_p45.ctor) { - case 'EQ': - var _p46 = alter( - _elm_lang$core$Maybe$Just(_p55)); - if (_p46.ctor === 'Nothing') { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54) - }; - } else { - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54) - }; - } - case 'LT': - var _p47 = up(_p53); - var flag = _p47._0; - var newLeft = _p47._1; - var _p48 = flag; - switch (_p48.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54) - }; - } - default: - var _p49 = up(_p54); - var flag = _p49._0; - var newRight = _p49._1; - var _p50 = flag; - switch (_p50.ctor) { - case 'Same': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Same, - _1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight) - }; - case 'Insert': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Insert, - _1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight) - }; - default: - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Dict$Remove, - _1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight) - }; - } - } + 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] }; - var _p56 = up(dict); - var flag = _p56._0; - var updatedDict = _p56._1; - var _p57 = flag; - switch (_p57.ctor) { - case 'Same': - return updatedDict; - case 'Insert': - return _elm_lang$core$Dict$ensureBlackRoot(updatedDict); - default: - return _elm_lang$core$Dict$blacken(updatedDict); + } + 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 + }; +} + +return { + 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 +}; + +}(); +var _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append; +var _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length; +var _elm_lang$core$Array$isEmpty = function (array) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$Array$length(array), + 0); +}; +var _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice; +var _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set; +var _elm_lang$core$Array$get = F2( + function (i, array) { + return ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp( + i, + _elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just( + A2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing; }); -var _elm_lang$core$Dict$insert = F3( - function (key, value, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always( - _elm_lang$core$Maybe$Just(value)), - dict); +var _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push; +var _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty; +var _elm_lang$core$Array$filter = F2( + function (isOkay, arr) { + var update = F2( + function (x, xs) { + return isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs; + }); + return A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr); }); -var _elm_lang$core$Dict$singleton = F2( - function (key, value) { - return A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty); +var _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr; +var _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl; +var _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap; +var _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map; +var _elm_lang$core$Array$toIndexedList = function (array) { + return A3( + _elm_lang$core$List$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + A2( + _elm_lang$core$List$range, + 0, + _elm_lang$core$Native_Array.length(array) - 1), + _elm_lang$core$Native_Array.toList(array)); +}; +var _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList; +var _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList; +var _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize; +var _elm_lang$core$Array$repeat = F2( + function (n, e) { + return A2( + _elm_lang$core$Array$initialize, + n, + _elm_lang$core$Basics$always(e)); }); -var _elm_lang$core$Dict$union = F2( - function (t1, t2) { - return A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1); +var _elm_lang$core$Array$Array = {ctor: 'Array'}; + +var _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError; +var _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen; +var _elm_lang$core$Task$spawnCmd = F2( + function (router, _p0) { + var _p1 = _p0; + return _elm_lang$core$Native_Scheduler.spawn( + A2( + _elm_lang$core$Task$andThen, + _elm_lang$core$Platform$sendToApp(router), + _p1._0)); }); -var _elm_lang$core$Dict$filter = F2( - function (predicate, dictionary) { - var add = F3( - function (key, value, dict) { - return A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict; - }); - return A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary); +var _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail; +var _elm_lang$core$Task$mapError = F2( + function (convert, task) { + return A2( + _elm_lang$core$Task$onError, + function (_p2) { + return _elm_lang$core$Task$fail( + convert(_p2)); + }, + task); }); -var _elm_lang$core$Dict$intersect = F2( - function (t1, t2) { +var _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed; +var _elm_lang$core$Task$map = F2( + function (func, taskA) { return A2( - _elm_lang$core$Dict$filter, - F2( - function (k, _p58) { - return A2(_elm_lang$core$Dict$member, k, t2); - }), - t1); + _elm_lang$core$Task$andThen, + function (a) { + return _elm_lang$core$Task$succeed( + func(a)); + }, + taskA); }); -var _elm_lang$core$Dict$partition = F2( - function (predicate, dict) { - var add = F3( - function (key, value, _p59) { - var _p60 = _p59; - var _p62 = _p60._1; - var _p61 = _p60._0; - return A2(predicate, key, value) ? { - ctor: '_Tuple2', - _0: A3(_elm_lang$core$Dict$insert, key, value, _p61), - _1: _p62 - } : { - ctor: '_Tuple2', - _0: _p61, - _1: A3(_elm_lang$core$Dict$insert, key, value, _p62) - }; - }); +var _elm_lang$core$Task$map2 = F3( + function (func, taskA, taskB) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return _elm_lang$core$Task$succeed( + A2(func, a, b)); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map3 = F4( + function (func, taskA, taskB, taskC) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return _elm_lang$core$Task$succeed( + A3(func, a, b, c)); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map4 = F5( + function (func, taskA, taskB, taskC, taskD) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return _elm_lang$core$Task$succeed( + A4(func, a, b, c, d)); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$map5 = F6( + function (func, taskA, taskB, taskC, taskD, taskE) { + return A2( + _elm_lang$core$Task$andThen, + function (a) { + return A2( + _elm_lang$core$Task$andThen, + function (b) { + return A2( + _elm_lang$core$Task$andThen, + function (c) { + return A2( + _elm_lang$core$Task$andThen, + function (d) { + return A2( + _elm_lang$core$Task$andThen, + function (e) { + return _elm_lang$core$Task$succeed( + A5(func, a, b, c, d, e)); + }, + taskE); + }, + taskD); + }, + taskC); + }, + taskB); + }, + taskA); + }); +var _elm_lang$core$Task$sequence = function (tasks) { + var _p3 = tasks; + if (_p3.ctor === '[]') { + return _elm_lang$core$Task$succeed( + {ctor: '[]'}); + } else { return A3( - _elm_lang$core$Dict$foldl, - add, - {ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty}, - dict); + _elm_lang$core$Task$map2, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + }), + _p3._0, + _elm_lang$core$Task$sequence(_p3._1)); + } +}; +var _elm_lang$core$Task$onEffects = F3( + function (router, commands, state) { + return A2( + _elm_lang$core$Task$map, + function (_p4) { + return {ctor: '_Tuple0'}; + }, + _elm_lang$core$Task$sequence( + A2( + _elm_lang$core$List$map, + _elm_lang$core$Task$spawnCmd(router), + commands))); }); -var _elm_lang$core$Dict$fromList = function (assocs) { - return A3( - _elm_lang$core$List$foldl, - F2( - function (_p63, dict) { - var _p64 = _p63; - return A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict); - }), - _elm_lang$core$Dict$empty, - assocs); +var _elm_lang$core$Task$init = _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); +var _elm_lang$core$Task$onSelfMsg = F3( + function (_p7, _p6, _p5) { + return _elm_lang$core$Task$succeed( + {ctor: '_Tuple0'}); + }); +var _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task'); +var _elm_lang$core$Task$Perform = function (a) { + return {ctor: 'Perform', _0: a}; }; -var _elm_lang$core$Dict$remove = F2( - function (key, dict) { - return A3( - _elm_lang$core$Dict$update, - key, - _elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing), - dict); +var _elm_lang$core$Task$perform = F2( + function (toMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, toMessage, task))); }); -var _elm_lang$core$Dict$diff = F2( - function (t1, t2) { - return A3( - _elm_lang$core$Dict$foldl, - F3( - function (k, v, t) { - return A2(_elm_lang$core$Dict$remove, k, t); - }), - t1, - t2); +var _elm_lang$core$Task$attempt = F2( + function (resultToMessage, task) { + return _elm_lang$core$Task$command( + _elm_lang$core$Task$Perform( + A2( + _elm_lang$core$Task$onError, + function (_p8) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Err(_p8))); + }, + A2( + _elm_lang$core$Task$andThen, + function (_p9) { + return _elm_lang$core$Task$succeed( + resultToMessage( + _elm_lang$core$Result$Ok(_p9))); + }, + task)))); + }); +var _elm_lang$core$Task$cmdMap = F2( + function (tagger, _p10) { + var _p11 = _p10; + return _elm_lang$core$Task$Perform( + A2(_elm_lang$core$Task$map, tagger, _p11._0)); }); +_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap}; //import Native.Scheduler // @@ -10935,8 +11917,8 @@ var _user$project$Map$update = F2( } } }); -var _user$project$Map$initMovingBall = F4( - function (id, _p7, _p6, color) { +var _user$project$Map$initMovingBall = F5( + function (id, color, _p7, _p6, image) { var _p8 = _p7; var _p9 = _p6; return { @@ -10944,9 +11926,41 @@ var _user$project$Map$initMovingBall = F4( color: color, radius: 32, pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), - velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, 0) + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, 0), + img: image }; }); +var _user$project$Map$randomVelocity = A2( + _elm_lang$core$Random$pair, + A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, + A2(_elm_lang$core$Random$int, -1, 1)), + A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, + A2(_elm_lang$core$Random$int, -1, 1))); +var _user$project$Map$randomPosition = function (window) { + return A2( + _elm_lang$core$Random$pair, + A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, + A2(_elm_lang$core$Random$int, 30, window.width)), + A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, + A2(_elm_lang$core$Random$int, 30, window.height))); +}; +var _user$project$Map$alwaysGen = function (x) { + return A2( + _elm_lang$core$Random$map, + function (_p10) { + return x; + }, + _elm_lang$core$Random$bool); +}; +var _user$project$Map$imageDir = 'imgs/colors/'; var _user$project$Map$get = F2( function (index, list) { return _elm_lang$core$List$head( @@ -10971,9 +11985,9 @@ var _user$project$Map$ArtGame = F4( function (a, b, c, d) { return {color: a, balls: b, time: c, seed: d}; }); -var _user$project$Map$MovingBall = F5( - function (a, b, c, d, e) { - return {id: a, color: b, pos: c, radius: d, velocity: e}; +var _user$project$Map$MovingBall = F6( + function (a, b, c, d, e, f) { + return {id: a, color: b, pos: c, radius: d, velocity: e, img: f}; }); var _user$project$Map$CollisionResult = F2( function (a, b) { @@ -11012,17 +12026,17 @@ var _user$project$Map$collideWith = F3( function (a0, bodies, acc) { collideWith: while (true) { - var _p10 = bodies; - if (_p10.ctor === '[]') { + var _p11 = bodies; + if (_p11.ctor === '[]') { return {ctor: '::', _0: a0, _1: acc}; } else { - var _p12 = _p10._0; - var collisionResult = A2(_user$project$Map$collision, a0, _p12); - var _p11 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p12); - var a1 = _p11._0; - var b1 = _p11._1; + var _p13 = _p11._0; + var collisionResult = A2(_user$project$Map$collision, a0, _p13); + var _p12 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p13); + var a1 = _p12._0; + var b1 = _p12._1; var _v6 = a1, - _v7 = _p10._1, + _v7 = _p11._1, _v8 = {ctor: '::', _0: b1, _1: acc}; a0 = _v6; bodies = _v7; @@ -11035,20 +12049,20 @@ var _user$project$Map$collide = F2( function (acc, bodies) { collide: while (true) { - var _p13 = bodies; - if (_p13.ctor === '[]') { + var _p14 = bodies; + if (_p14.ctor === '[]') { return acc; } else { - var _p14 = A3( + var _p15 = A3( _user$project$Map$collideWith, - _p13._0, - _p13._1, + _p14._0, + _p14._1, {ctor: '[]'}); - if (_p14.ctor === '[]') { + if (_p15.ctor === '[]') { return {ctor: '[]'}; } else { - var _v11 = {ctor: '::', _0: _p14._0, _1: acc}, - _v12 = _p14._1; + var _v11 = {ctor: '::', _0: _p15._0, _1: acc}, + _v12 = _p15._1; acc = _v11; bodies = _v12; continue collide; @@ -11063,38 +12077,38 @@ var _user$project$Map$collisions = function (balls) { balls); }; var _user$project$Map$collisionBoxBubble = F2( - function (_p16, _p15) { - var _p17 = _p16; - var _p24 = _p17._1; - var _p18 = _p15; - var _p23 = _p18._1; - var _p19 = { + function (_p17, _p16) { + var _p18 = _p17; + var _p25 = _p18._1; + var _p19 = _p16; + var _p24 = _p19._1; + var _p20 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p25), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p25) }; - var boxX = _p19._0; - var boxY = _p19._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); - var _p20 = { + var boxX = _p20._0; + var boxY = _p20._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p19._0, _p18._0); + var _p21 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p20._0; - var dy = _p20._1; + var dx = _p21._0; + var dy = _p21._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p21 = { + var _p22 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p21._0; - var cy = _p21._1; - var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p22._0; + var cy = _p22._1; + var _p23 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -11113,17 +12127,17 @@ var _user$project$Map$collisionBoxBubble = F2( _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p22._0; - var inside = _p22._1; + var closest = _p23._0; + var inside = _p23._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p24 * _p24) > 0) && (!inside)) { return A2( _user$project$Map$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p24 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Map$CollisionResult, A2( @@ -11140,24 +12154,24 @@ var _user$project$Map$animateBall = F3( function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); - var _p25 = { + var _p26 = { ctor: '_Tuple2', _0: _elm_lang$core$Basics$toFloat(window.width), _1: _elm_lang$core$Basics$toFloat(window.height) }; - var width = _p25._0; - var height = _p25._1; - var _p26 = { + var width = _p26._0; + var height = _p26._1; + var _p27 = { ctor: '_Tuple4', _0: _user$project$Map$initLeftWall(height), _1: A2(_user$project$Map$initRightWall, width, height), _2: _user$project$Map$initTopWall(width), _3: A2(_user$project$Map$initBottomWall, width, height) }; - var leftWall = _p26._0; - var rightWall = _p26._1; - var topWall = _p26._2; - var bottomWall = _p26._3; + var leftWall = _p27._0; + var rightWall = _p27._1; + var topWall = _p27._2; + var bottomWall = _p27._3; var leftCol = A2( _user$project$Map$collisionBoxBubble, { @@ -11207,26 +12221,33 @@ var _user$project$Map$Orange = {ctor: 'Orange'}; var _user$project$Map$Red = {ctor: 'Red'}; var _user$project$Map$colorGen = A2( _elm_lang$core$Random$map, - function (i) { - var _p27 = i; - switch (_p27) { - case 1: - return _user$project$Map$Red; - case 2: - return _user$project$Map$Orange; - case 3: - return _user$project$Map$Yellow; - case 4: - return _user$project$Map$Green; - case 5: - return _user$project$Map$Blue; - case 6: - return _user$project$Map$Purple; - default: - return _user$project$Map$Red; - } - }, - A2(_elm_lang$core$Random$int, 1, 3)); + _elm_lang$core$Maybe$withDefault(_user$project$Map$Red), + _user$project$Map$randItem( + { + ctor: '::', + _0: _user$project$Map$Red, + _1: { + ctor: '::', + _0: _user$project$Map$Orange, + _1: { + ctor: '::', + _0: _user$project$Map$Yellow, + _1: { + ctor: '::', + _0: _user$project$Map$Green, + _1: { + ctor: '::', + _0: _user$project$Map$Blue, + _1: { + ctor: '::', + _0: _user$project$Map$Purple, + _1: {ctor: '[]'} + } + } + } + } + } + })); var _user$project$Map$randomColor = F2( function (seed, balls) { return A2( @@ -11279,54 +12300,175 @@ var _user$project$Map$tick = F2( artGame: A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame) }); }); -var _user$project$Map$initialBalls = { - ctor: '::', - _0: A4( - _user$project$Map$initMovingBall, - 1, - {ctor: '_Tuple2', _0: 0, _1: 0}, - {ctor: '_Tuple2', _0: 1, _1: 1}, - _user$project$Map$Red), - _1: { +var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( + { ctor: '::', - _0: A4( - _user$project$Map$initMovingBall, - 2, - {ctor: '_Tuple2', _0: 100, _1: 70}, - {ctor: '_Tuple2', _0: -1, _1: 1}, - _user$project$Map$Yellow), + _0: { + ctor: '_Tuple2', + _0: _user$project$Map$Red, + _1: { + ctor: '::', + _0: 'red-cherry.png', + _1: { + ctor: '::', + _0: 'red-umbrella.png', + _1: {ctor: '[]'} + } + } + }, _1: { ctor: '::', - _0: A4( - _user$project$Map$initMovingBall, - 3, - {ctor: '_Tuple2', _0: 70, _1: 170}, - {ctor: '_Tuple2', _0: -1, _1: -1}, - _user$project$Map$Green), + _0: { + ctor: '_Tuple2', + _0: _user$project$Map$Orange, + _1: { + ctor: '::', + _0: 'orange-tangerine.png', + _1: {ctor: '[]'} + } + }, _1: { ctor: '::', - _0: A4( - _user$project$Map$initMovingBall, - 4, - {ctor: '_Tuple2', _0: 200, _1: 170}, - {ctor: '_Tuple2', _0: 1, _1: -1}, - _user$project$Map$Blue), - _1: {ctor: '[]'} + _0: { + ctor: '_Tuple2', + _0: _user$project$Map$Yellow, + _1: { + ctor: '::', + _0: 'yellow-banana.png', + _1: { + ctor: '::', + _0: 'yellow-car.png', + _1: { + ctor: '::', + _0: 'yellow-cheese.png', + _1: {ctor: '[]'} + } + } + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Map$Green, + _1: { + ctor: '::', + _0: 'green-frog.png', + _1: { + ctor: '::', + _0: 'green-turtle.png', + _1: {ctor: '[]'} + } + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Map$Blue, + _1: { + ctor: '::', + _0: 'blue-bird.png', + _1: { + ctor: '::', + _0: 'blue-fish.png', + _1: {ctor: '[]'} + } + } + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: _user$project$Map$Purple, + _1: { + ctor: '::', + _0: 'purple-octopus.png', + _1: {ctor: '[]'} + } + }, + _1: {ctor: '[]'} + } + } + } } } + }); +var _user$project$Map$randomImage = function (color) { + var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Map$images); + var _p29 = options; + if (_p29.ctor === 'Nothing') { + return _user$project$Map$alwaysGen(''); + } else { + if (_p29._0.ctor === '[]') { + return _user$project$Map$alwaysGen(''); + } else { + return A2( + _elm_lang$core$Random$map, + _elm_lang$core$Maybe$withDefault(''), + _user$project$Map$randItem(_p29._0)); + } } }; -var _user$project$Map$initArtGame = { - time: 0, - seed: _elm_lang$core$Random$initialSeed(0), - color: _user$project$Map$Yellow, - balls: _user$project$Map$initialBalls -}; +var _user$project$Map$randomMovingBall = F2( + function (window, id) { + return A2( + _elm_lang$core$Random$andThen, + function (color) { + return A4( + _elm_lang$core$Random$map3, + A2(_user$project$Map$initMovingBall, id, color), + _user$project$Map$randomPosition(window), + _user$project$Map$randomVelocity, + _user$project$Map$randomImage(color)); + }, + _user$project$Map$colorGen); + }); +var _user$project$Map$initialBalls = F2( + function (window, seed) { + return A3( + _elm_lang$core$List$foldr, + F2( + function (id, _p30) { + var _p31 = _p30; + return A2( + _elm_lang$core$Tuple$mapFirst, + function (ball) { + return {ctor: '::', _0: ball, _1: _p31._0}; + }, + A2( + _elm_lang$core$Random$step, + A2(_user$project$Map$randomMovingBall, window, id), + _p31._1)); + }), + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: seed + }, + A2(_elm_lang$core$List$range, 0, 9)); + }); +var _user$project$Map$initArtGame = F2( + function (window, seed) { + var _p32 = A2(_user$project$Map$initialBalls, window, seed); + var balls = _p32._0; + var newSeed = _p32._1; + return { + ctor: '_Tuple2', + _0: {time: 0, seed: newSeed, color: _user$project$Map$Yellow, balls: balls}, + _1: newSeed + }; + }); var _user$project$Map$init = F2( function (window, level) { + var _p33 = A2( + _user$project$Map$initArtGame, + window, + _elm_lang$core$Random$initialSeed(0)); + var artGame = _p33._0; return { level: level, - artGame: _user$project$Map$initArtGame, + artGame: artGame, window: window, points: 0, seed: _elm_lang$core$Random$initialSeed(0) @@ -11334,11 +12476,14 @@ var _user$project$Map$init = F2( }); var _user$project$Map$newLevel = F2( function (level, map) { - var _p29 = level; - if ((_p29.ctor === 'ArtStore') && (_p29._0 === true)) { + var _p34 = level; + if ((_p34.ctor === 'ArtStore') && (_p34._0 === true)) { + var _p35 = A2(_user$project$Map$initArtGame, map.window, map.seed); + var artGame = _p35._0; + var seed = _p35._1; return _elm_lang$core$Native_Utils.update( map, - {artGame: _user$project$Map$initArtGame, level: level}); + {artGame: artGame, seed: seed, level: level}); } else { return _elm_lang$core$Native_Utils.update( map, @@ -11363,58 +12508,72 @@ var _user$project$Map$colorBall = F2( ctor: '::', _0: { ctor: '_Tuple2', - _0: 'background-color', - _1: _elm_lang$core$Basics$toString(ball.color) + _0: 'background-image', + _1: A2( + _elm_lang$core$Basics_ops['++'], + 'url(', + A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Map$imageDir, + A2(_elm_lang$core$Basics_ops['++'], ball.img, ')'))) }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'background-size', _1: 'contain'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'background-repeat', _1: 'no-repeat'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString( - _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString( - _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'width', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.radius * 2), + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), 'px') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'height', + _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.radius * 2), + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), 'px') }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: {ctor: '[]'} + } + } } } } @@ -11436,8 +12595,8 @@ var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Map$groceryItem = F3( - function (_p30, image, audio) { - var _p31 = _p30; + function (_p36, image, audio) { + var _p37 = _p36; return A2( _elm_lang$html$Html$img, { @@ -11462,7 +12621,7 @@ var _user$project$Map$groceryItem = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p31._0), + _elm_lang$core$Basics$toString(_p37._0), 'px') }, _1: { @@ -11472,7 +12631,7 @@ var _user$project$Map$groceryItem = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p31._1), + _elm_lang$core$Basics$toString(_p37._1), 'px') }, _1: {ctor: '[]'} @@ -11492,8 +12651,8 @@ var _user$project$Map$groceryItem = F3( {ctor: '[]'}); }); var _user$project$Map$colorCircle = F3( - function (_p32, color, audio) { - var _p33 = _p32; + function (_p38, color, audio) { + var _p39 = _p38; return A2( _elm_lang$html$Html$div, { @@ -11518,7 +12677,7 @@ var _user$project$Map$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p33._0), + _elm_lang$core$Basics$toString(_p39._0), 'px') }, _1: { @@ -11528,7 +12687,7 @@ var _user$project$Map$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p33._1), + _elm_lang$core$Basics$toString(_p39._1), 'px') }, _1: { @@ -11558,8 +12717,8 @@ var _user$project$Map$colorCircle = F3( var _user$project$Map$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; -var _user$project$Map$house = function (_p34) { - var _p35 = _p34; +var _user$project$Map$house = function (_p40) { + var _p41 = _p40; return A2( _elm_lang$html$Html$img, { @@ -11588,7 +12747,7 @@ var _user$project$Map$house = function (_p34) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._0), + _elm_lang$core$Basics$toString(_p41._0), 'px') }, _1: { @@ -11598,7 +12757,7 @@ var _user$project$Map$house = function (_p34) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._1), + _elm_lang$core$Basics$toString(_p41._1), 'px') }, _1: {ctor: '[]'} @@ -11613,10 +12772,10 @@ var _user$project$Map$house = function (_p34) { }, {ctor: '[]'}); }; -var _user$project$Map$storeBuilding = function (_p36) { - var _p37 = _p36; - var _p39 = _p37._1; - var _p38 = _p37._0; +var _user$project$Map$storeBuilding = function (_p42) { + var _p43 = _p42; + var _p45 = _p43._1; + var _p44 = _p43._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -11650,7 +12809,7 @@ var _user$project$Map$storeBuilding = function (_p36) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38), + _elm_lang$core$Basics$toString(_p44), 'px') }, _1: { @@ -11660,7 +12819,7 @@ var _user$project$Map$storeBuilding = function (_p36) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39), + _elm_lang$core$Basics$toString(_p45), 'px') }, _1: {ctor: '[]'} @@ -11706,7 +12865,7 @@ var _user$project$Map$storeBuilding = function (_p36) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38 + 7), + _elm_lang$core$Basics$toString(_p44 + 7), 'px') }, _1: { @@ -11716,7 +12875,7 @@ var _user$project$Map$storeBuilding = function (_p36) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39 + 10), + _elm_lang$core$Basics$toString(_p45 + 10), 'px') }, _1: {ctor: '[]'} @@ -11739,10 +12898,10 @@ var _user$project$Map$storeBuilding = function (_p36) { } }); }; -var _user$project$Map$artStoreBuilding = function (_p40) { - var _p41 = _p40; - var _p43 = _p41._1; - var _p42 = _p41._0; +var _user$project$Map$artStoreBuilding = function (_p46) { + var _p47 = _p46; + var _p49 = _p47._1; + var _p48 = _p47._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -11777,7 +12936,7 @@ var _user$project$Map$artStoreBuilding = function (_p40) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p42), + _elm_lang$core$Basics$toString(_p48), 'px') }, _1: { @@ -11787,7 +12946,7 @@ var _user$project$Map$artStoreBuilding = function (_p40) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p43), + _elm_lang$core$Basics$toString(_p49), 'px') }, _1: {ctor: '[]'} @@ -11833,7 +12992,7 @@ var _user$project$Map$artStoreBuilding = function (_p40) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p42 + 7), + _elm_lang$core$Basics$toString(_p48 + 7), 'px') }, _1: { @@ -11843,7 +13002,7 @@ var _user$project$Map$artStoreBuilding = function (_p40) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p43 + 10), + _elm_lang$core$Basics$toString(_p49 + 10), 'px') }, _1: {ctor: '[]'} @@ -11888,8 +13047,8 @@ var _user$project$Map$hometown = function (mapSize) { }); }; var _user$project$Map$playButton = F2( - function (_p44, level) { - var _p45 = _p44; + function (_p50, level) { + var _p51 = _p50; return A2( _elm_lang$html$Html$button, { @@ -11908,7 +13067,7 @@ var _user$project$Map$playButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45._0), + _elm_lang$core$Basics$toString(_p51._0), 'px') }, _1: { @@ -11918,7 +13077,7 @@ var _user$project$Map$playButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45._1), + _elm_lang$core$Basics$toString(_p51._1), 'px') }, _1: { @@ -11948,8 +13107,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p46, level) { - var _p47 = _p46; + function (_p52, level) { + var _p53 = _p52; return A2( _elm_lang$html$Html$button, { @@ -11968,7 +13127,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p47._0), + _elm_lang$core$Basics$toString(_p53._0), 'px') }, _1: { @@ -11978,7 +13137,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p47._1), + _elm_lang$core$Basics$toString(_p53._1), 'px') }, _1: { @@ -12129,18 +13288,18 @@ var _user$project$Map$groceryStore = function (mapSize) { }; var _user$project$Map$artStore = F2( function (play, map) { - var _p48 = play; - if (_p48 === true) { + var _p54 = play; + if (_p54 === true) { return A2(_user$project$Map$colorGame, map.points, map.artGame); } else { var showCircle = F2( - function (n, _p49) { - var _p50 = _p49; + function (n, _p55) { + var _p56 = _p55; return A3( _user$project$Map$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p50._0, - _p50._1); + _p56._0, + _p56._1); }); return A2( _elm_lang$html$Html$div, @@ -12188,8 +13347,8 @@ var _user$project$Map$artStore = F2( }); var _user$project$Map$view = F2( function (mapSize, map) { - var _p51 = map.level; - switch (_p51.ctor) { + var _p57 = map.level; + switch (_p57.ctor) { case 'Home': return _user$project$Map$home(mapSize); case 'HomeTown': @@ -12197,7 +13356,7 @@ var _user$project$Map$view = F2( case 'GroceryStore': return _user$project$Map$groceryStore(mapSize); default: - return A2(_user$project$Map$artStore, _p51._0, map); + return A2(_user$project$Map$artStore, _p57._0, map); } }); diff --git a/imgs/colors/blue-bird.png b/imgs/colors/blue-bird.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a5a425b99559bc762dea563808f46b42a59473 GIT binary patch literal 81809 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 literal 0 HcmV?d00001 diff --git a/imgs/colors/blue-fish.png b/imgs/colors/blue-fish.png new file mode 100644 index 0000000000000000000000000000000000000000..4288548de9c23df16c69cfa3d9f09a736a7dbbef GIT binary patch literal 131119 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

0>^ZsUFFTX_6H%Am_h_yd$Ke#{1IJ@~DMduV< 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

-^0TtR?JxbfFog}Izg9S4AOk3Q_*w5&M{l~ZE&R%nDMBV=DO*Bp<9YU{oY zm%+l&O8ZPU6(o1DFFsC?D;EBFuSOD8%Y%%h>zXoiowTMW^fMWYB};IFjdOQB_eTsX z#F`XY8*s`B=J_4(yX{XVeXn)HbxzCbK09DXh3AEjuD&cRBv#aVK!tC7v!_S7q@ww& z*m*NWHG0vyD<=L&9KGjO+?ZAMGuli}|GUp7>Qx2KexsIIa3}m1ap6!8Q$Mx5?wDidg#TRypTw3{Z=RL;pu?z zck7ZEIwiC<;S{nq7JV~?6&e`{q?Efqf4H>TppJHTRy;0(e;JD%2RmS5F8*FuU?gx+ z60QAD+!$alDXPj(*jtxi*8>VF%HV zw`d+Oq$VYyn!UGc0rX|UFCYL=74yC6^RxXeh;r`Si+^9i6_xHqONe(D>*5)&!oBsC zdWd_zqX*XEQ@Ooe(FrHDOhmYmmI3H%ulcte8t*yWzX%q%yf0@V;DKWZe0a1scXrHj z3+go$w=MJD&HaKh8U*U9o=DNGqim$MKE$NhwSygrn~0cvAlmacLJK!ITXS4)mEcl}ur!rq%dF ziaH4#L|}9mq5@UH(qk+^t)bmfD)%7z$#xGKT~b{=^lYghd>)vf1RrF*|IBZpWzSEp z529W}yp2}+j`U=7Oy(yEyD0a3yA8)%qLSd91O7D4GXi%1eRru_cqy4Pa-W>pe=m8 zq5s^A<)N%psnNn}DJlxleQoFm4GX3B_CIo)HjaZ6vy%b&L^Eo0Hj-y{`$nP~&|veM zD`L0>&oVwm33E>Qlfm{^P*^C{*emZaQ+6dRa(MZ}GGYrRVb#^?KMo#6PmtHbxq z_jck?1*56P>%|KaIdq&AhIQFYvd$$wXlBIfH%hf&GpeT=9jGoA7$%Q1q<5KE`cCEX1(~PUHKYop_4&eN%9zK_ z4T^)FIXgQ$ZRjk~%}i*5XMWtJ{CA<2D8NId26wF=qCfL?JO@X~?=A+HRj^oT?Jj&tRLEmvMQSuA|*72zZ5(D`JmI7V)pUrL*EWEUC^ehyMm z*Fk5M{2SQqhpt8#AYXanG6~QU>~GqRL@faQ1XN`uz)H89RmGL-J=PVuqebl`a>>Lc z5M&RmguFb}7m`G%TSDsp47QU-B-dE0bbW}}BO9{QN1XVZ8pk_H!i~!s6owM*Fp5L^?>$jA(p1}sjc7Vbk$^3IN9as zs2hdD;D~o1UYgb;#SeC@Y+fnjh0UWa01v^#=hO)kL`y(DaD^Ng8IzQph8HP#!M;H) zS%DLRX~BCz3*HBc%y)zpIRYRTJLCb+#Gj;IpzY7ouFikD``{_!;rKt&c~ZOCFGRvu zcHi*1#E*B*zxqc_SvkZ*SDouKDzc5rcz8bG8Q7=4q%}BP{OF)_XtR771ne+oX`h=1 zpUw5D>ZXcZP?3gM;iyRSC8zQFATWju7C(6mN^u0cYKVM+gh6nJ^cRb_S5+@BELg*q zF$?IV)Z8dVog2hAorQ`_G%bStWlMuT#6GFkq6&q(TUmK|EDX)o_FqWp5y^h2A->Qm z?(yrS4SY~o+(&gk<&CeBGt%C`=R0`ADw4vjf|T+-_?-uR0*NO_JImLg6C!)sGmA^i z^gM3atBL*1XmnW_bPlV9tBb%n8jF_AOVWGvsMZezLp?}VHh{|RqItYlBfhuHqMiol zU@ZK08R^QP0wD>A>0Skho#JAO(CbfEzpb;tN*92!>1qUdAC8A1zlaN+@`JW`+s|Si zla06WoBWRw&v4N~Akr2cS@6k3T!B<82*!O^Fx4JfK<3O&B9bVwc6ERV74cf{;YtL% z0g^EMHbVU$`R=&dCqLpyR$CX3H}#SdQxv^)y$~#w%p|&%X`R;etpLZP=Pb6G@#08GPgmxms-VtJ^lR&;2~bb*y%C@4b5mIO zGfZE~vd!^KZMNvV2qmXX4q%RVuwn01UGGKDRZ5nRZ(-XdMy+-^V}eCVj6 z(mP`CUA+0vr}F3V%+kqlNSe_lM*Erf-QBM4>$(rK*!dxG{Fw=)>VnO-^IX6Y_NtrtD~3mQ4hq(3~7;B-erW8?k= zR{1>W9q#&RgeUp1_!_N_EK=1K72)wSMl}ZQDn781>#%vBl$`zD8`SL_mVt>k(gckN)TW&Qf7erI_k zyVv?eZ##;hx3BkQeieDN1#3kpgXenSQnEMuwEnzV#CZ4(b7uR)*Kj?ggPdjjiaooiJmDS zU>1gpIt|dc9rsp7jDZ-YmM!Ks04&|s$g|H8v8?@98!f+KrjzvAw(JZ==V8TN5@77t z8J)1pOxM;?#E(+6uVr+=xy;GUT?&9{VZS3;Zhistov|&%$^?<7I*GY)d_{11+DluU zGCs@&$-sa}71j+GmBqkvNmAZ4PJmEEsi<@X1*HcF4Ds*7CS}(<@Gf4uq@s4eO9-Kc zva6a-t3Mqcw8TmW2=t*o$MhKDO;90MtzBYx_uTDV|08?vPs!X^+3ugX$^7=d+Xj5< z=?PSB(7Pt* z!+`VsS_EWIO>aVx(FVZircMi@4x;weVvU?5_Jk*OEEjbzKY}IqSBosxukkv^1qxJnfRT~5yB72u_hk>#r&|38;Gns-RLuO{he345 z6>%**4mAtY2!3PE@(kkVOVhfYP!}Nz=Op6rTThN7- zaYfN^i<5fW!NH>$*s=Pir69+r9pAxii(*0`?Z(b$)<07%KKgC`Ekmy#i$dMrTUK@- zZbVqnz>$JaJnVRY3GAN} zx%StIW?Bj~;IvKi>geeyUDH}o|NQB47p+J9(HXA^DFPbW>ep7tbVp5yV zpghSZ9WlS(VC2lh%d6kybvsBd5Hy|ySY7IulnNhPEz`O23G0@JKHyRY;7(>`QYtb` zvfbE+^xO324@8@3vm8EZ073xZ%ZSEQj{B2O^Dx2Fz-v&Fv>stzF$U?F!U*zO&#go`3H66(gb zTY%lt!l|CQV*nz2LPp z5b4A6>=C-pu>f-EVr*j$9=NNG4xBRxiMNJ)e2@3|fk>MVHq~seadImIPV(QktMk$f z^#*Nf3d(q(*t6>1W9d~!=RZsnfTUqG!-u);w@K<7#J6FEKmj?I)qZI}y z%t#hzH@7WoC?N!!caVEcj&HQ?#WgEqu#(=O!g*9SZ8V~0UG?kq`3!fqkoK8TgLN$;A9=B*Vv+4vAJ;Sp?i9v<^1e;8m707IMg}(>=BK(E6%-W2igoQlj$2UU~>^` zqkh%@bYffS6Ualzl4AO3#aK#pCB@{(Af9q)w}aVA=u%r|I1rGSBw{8eeBu7YPHtq+ zZYo&F<0fGYfqfuml0YIF0*nb+S<&|NN|SQ*Hd~!|*@b24#dkpI8X#fxVkql$|2pgF z)aK$89d4e_bJ5$oA>@VmoZy>QHtD@F%gb_xhU2mTa((IuF=B^8(cAyGL^M7;DdQKP zf*Y7^8<3({u!#V>&GdfK%jcELw2ZEb@FITjtcRUd6)Hx-6>O?2T62+bJ2*QUZQDBp zYr68l_Dn{;Z+s)V564wB)dBODt&&cwB#xmv~#uw zEs*hMfisPwFSZhCofg%Y;Esx^RAOVJRqxJXGm0;Dt zuJB#28?9`c4Py|wN0!L7|L?`~MG{qzc5Sj9D4MCWsPHxeZEbhszEpgOVXX4%Ry>#j zTGqy>kw^ap7%2jd$u34-<56paRA@D#e!e<$?`Wz61MlpF2iosB>^A$@6JFhuzd~ta zIjDA2si~>!ws>}Hc7%wnbfBFf*PDpqGkr&_615iaR$%i4i$_glFLy%|KX5&vY1D@(}y zV=P+cc&!@_q7KBHzh~{$gF^)Z1&7HGy-C-}o^N&1+G1V7A`Q1R2I)<+Y0}?F6fH!o zGU|z+@JNRwx_UxTURtyYRiu(sjBEU(_6howOseeZ(pMF3ZUJ}-`G$O+&yO7lq}8e< znR=9+CL2SUB;RQb6b5P-H=5TN5M2n4z1P~Yzh}TlBV|GcC@QX~yEeKsURlz}>jp02 zZvV9SxoudjZF(A`z#N{J)_rz*TnEks?bt7Ex0bfy?x;hhNVy2(lQ7=OgV2bl|DgqM zo0zmbAHfTR>gVSgl(e?3ON+<*6tU5XSdemi0qF_1Ate^Soy#9y&b|4W=@?)OU9|?d z8=+!$25vKV@XfgbeX`UBrbq+AMZ#-E!P%L)vAAH_u!E#Rwu0icrPHGQmU>xv88{Mw zBMb*kqIJVYkqc!o(_7h_2qs0H-oAbgI%4`aEqj?K-Lf*IU-u3thsyN?H6I;B%KT?f z`Rz!-zsNJ#Dg(!QDXXT`*1QhfSWvrwLVNC8oIf)y-^?He#ddOeW#dXqW@e_xqv%gC z)X_QH^9vz}6tGMd602P&Is|W+heeJ!0IrLaaSZ(>M>a7NdGCkUI>1XpPz4t%jZdd! zq7^w9N#}OGwXE>NQ54?|FY8HEn*K@ohe1t_jaTwgQ@@S>pI*N0ILVC!M+XNiU4`Ql z5ykU{LbN9I4KY3Ka`L;IvS+7vQmv^6U{9Kho5dvZOoJ+*o9n*cLbjaKgwXl)>C-pafaz=)MGUrm*l=6JvV5zxc>Kz>Z3K$qq6TNFE zXfC~Fm(E#io{*iX_WXHR!`cs*SZL=xFlh5 z5X~-gTv=bAeo3HyragsMPlm{KtJCseGWNZl`1kJ)Dk?XE%*dn5MCiU@J`U#T;gf!eR^Tg({}Q$**kQ4nFf>#YhK73eNZVR{SWQQ#lc3^%e^Y+}x6>?o zx&OM~pUPe>1%*JZbsHQ%GX>T5E7}J3%UVhgDkb>}xxn2@elfI4pYK)Kklcx4D1chv z(K14Gp;&tFSoYO+TP6WH#-;rPLRDR>(2>Lfs={}Rw-MN6|32QUolBzG5Hv4-t0O}oRIvhp}80^Gd!E;(@NQokHDC!>#OOLzU;-`_d6MgP#m z_fD?Fy7k|S#Yf&Z&F;1^21t$k&X<1|G8l~0%<00c=)xEos0`{HsDUKh>;a<>0`RgA z5Bcl2D}7?kZAnnhHGRNpJUEqk1byD*dzNOzC_FXDX}OK9|59QB&wuMSsW`mkUQLVA z;87W!L=3AF6bjziIVAe4mEZ);OmpDY&i6`fRAQ;8!+kJK{y7f8Dh&`U2!c6jw59cN-IlKd3bpSZt){2 z($l)zg9++N&UT6qhe+WO7ul_~67w7(4*Hu1Z!~d@>2Q8KV?iTUP{&7+zFm!vN zls~gV2_do3P-|A^!Q2*tLBT}qn@6g!x1K$fA%_rZG$($bUA zfs17jt%g>OIh??zu}qSwpciUsX|a}<@$BtkK2$tgqeP4lejm|TV*QoV3^vkeSWc!& zQR{t}cXXPq*uJY8k6HzZpjc%iC-lFR=L3rlJ{Ibp|8M{4|8!gm-j9!+$9bRE!PUu94cpgU`{oFlsV}bn(EN%)#})S)cx&o0w_v_=c( zpI3_AS+*e;(9*(!SGi=gq~&)OP+lT74N5qvEdjH}ELN4AEOZwE04GK~M+fkGSV;Mf z+KnhJu46wIndM((8QrM;+rnw!N2TIlR}3&99Y1-$uyV11Pqlzf6*52(S~QLF|cZ$;6Zlh)g8>3^>Anz-uoeLQJ>Z}B{neWVwBW?ido zbE}W4UpHc!8O7-O1qTI=87e~o9QG%-rXLJ|xnl@&!U4(i6I(!R;Ds|4EASHsX{#_& z(@#@*N*KXAySc;XJXUjg{PnrFk8p)q4Xd! z0*DLHp(;C;M)wo38wC|dly3jsCg1ASJhsN}g)Swc)i3A7fehe@8$`k}!dX%K zB(xvADyivIv@spYj#}y+Q_#dvb3H#@Vc-c)Zzs9CTJbnaN}2qYWVA4>FZaIA7Q`!1 zk7L#j*;N2hgXx0;P$Vny6RdBJ!_krg0<1I+!dexVB)x0DP1NoC+dWpj|M;hP@Nr$B z#9NhLX^bV5!kFzJhzR?%k+4Y~-nCdj1XUBR+iox#c zRZK&o0;yx=vgUU-|57jN)kx~d&O`GiV?vLPD$7@( zpxY-G@_&!e$nfJpKE+rgK*_~3f7s>}oR2Lzk5r#nps%Mlw7t(~wy(KFB{0zCs*4qf z=_e~@f;Qbbuw}pQ{N_W52kL{Y-%}{yt58P?3W79V+))GMz$)KRWl+8=<~EbFBW`j8 zCTj=a*z(o(qg3e8HD$ScJHY9@xAA^D?mMh6i07`->l?wXuqG12DMO-!pwb{%kj|id z%vd1e@7GCd@fjI@x6Sbw_|uLyv7G2zW8_4VZ$P?fB4(Ss$J~;JiJcZ750R7UMgf(^ zCn9L~xkVWPn5c1agFfwl{DKtVg$_?Kqh`p^6hK9dimYt;<5D^!8PA_$_Hz62z=N{( z)5r&x=JeT?%|<=Rxjv0NNWbbZ-a#fVgt(v*SWM_0S!1@+7Hu@IB|qb;ZXHqr;# zRsO-rwGo2)r1R^2tq0hIb?@GV{F>7{{hYm;q5?GPsN&#IVyAr6flD)ke*a3JWbPbJXuGLmu zy@5TSa>r~U&g;Kd{+m0ltX8)3Utb`)C9b8RXK06X@P>5bm#IlGyITB7hN6vgeW^|3 zXmzCg_A7JVVgKshLA%xCuOzbkq(+IDeqkIR3LsPOj!UvvcavL1PvVmt0=)tda!*W7 zPm!Cu`ed%2U)vyEk<{5zxWGc0xnRCnei+`|D?@M)&5=jgiAoSD^xA&9@XhFz)3a~F zMuhT*CY@J`C(ATGC5ptM0Du^Xo9Mzo%2?b(Sec2#00&VtuKCo<@Pz_~B72HS+x{fe zZV$8a-s?C0C?xHV35AhP<hHD_jX$teB`nCaD-Jew;7>h`*SeCG)0Df;@P z0JRBXh2sE~UIwKx2Bj^&TZ96rdJk3MLhfvtcoRx-sxm;U9~>1p2hjLXARQTc6tHz1DB`V8*xmZIooJ?nakG z+$0N+IiUF1i8k)t&F64RMh_cjIV_$IyH{Bi)y$Vv%sfDuaG-uVYe@39G`6cQ0DuN; zni+7o7aAB$FQS&RR`PdPy^8;Koj1&ttoHA@ciJ#UPwBVv{%VM1Z)y?4L9*&VxKa1R zww;SfhtAWuooMyj_WXyIwt~;u`LrZVrQJnVXlfy4(s&igxZNOH2ytZ%`Ots0*&5IF zh5QHZBzMQB7D7Cn^gL_IrOq+f`TEQ-i<8B0z}>_}#n;PqS)GH5*}P{PXgu%V4?2YE zBVqxGFGF}lncV`yCHd*%;t0mk>Y{3z_JCiB4Vu9M2A3mQ!8s4PigMCUmX{f%^cr(& zWhzsXhe^qsJ%#C-WXyovS#_w#zNq(r$A6*}w-b#9M3RSu#mrZ(nIpA{wjfYJO!rF{I9!6mSieZ%7#z74U1Dtf%2x)b3&+@ zUhv!pNX3s7?#wA8tH8>qxm$K8Ltq+>CevOROo#AE@v z$~=8x*=#Z@0kv{&czh;D`J=?qKLYh6(YKQrRr$tuH$6iXHQa)LK4Mg0@sRpjJTnYV z67_(|UV+KPl^yx_ig;4ludC0)939!3v%3r$zOaxTl+X2%1DEijRlmO+#!#~Qc-X4) ze@ZI&wJjyb9jqrA6Dc%zw9S}_6O-2S6|qRn9wnYI%>RsUCy&vdrt%e_TWUv{Zh+G>Ke%wFtGs6V5WI9vowT)CMpLv2{*XBqkgl3NqxnLQBf>%zeCFd+IAn(Bz@h}q$Kq+IRU9L>z`gFmjqGNh ztJMReab}7CGQ?z)Tv(~NZ|fnP+@H#wAh`s|=|f=Pa>?N9_xqp9F%*6yL)@`H2!euj zJ^Gnx2#OIm~V;Wwp9l{0)zJqF;F2 z(`PJR%g}PB@HfUqu@s8B9iB#MX)t?>_^IB9!tT+_{Y*wSUyHYEHcBQ5vJ5d4b!Tmi za7`{~ZgP6Eia&(=IlEgqw&Tx+|NM$kzAU)sZr61Y7tE@VvzDoq9x~YR=ds($-}fG( zPd7<7@06>ch*KJ>Tv~?;7Z;e{I`MRGfMsxTEG^(782Ph~T}utt*nR<7;mUCVTN`h( zJST2E9|zwvGWDV(}!Ei?vBYw@~)iKS2BzE-O|s1IvN1? zLHVU~L3+%Gfu+M-J94&$T5aBqHBr@skKAwJY_>8wSPWrpy@pnrvs^?9d(%PX;DgS)=T;KE zs7M+9;7B5uj zF8lU-C#ChRk8@+4`{;oCKl=%p`q{+p77fW=A5Y&T2Opo#}ZK>_xBZQ}fXw<5^ubDG*z+~U?(Jje+G z75(VZmW4|^6<|uh4q+)6_uL_+8(a(Np2}rIfXnAVX03B>JrBrD{T zFd++1#HHWMJpGG|$-l zh*a2T$qoerxBwO#1ANc#)=&?geYl<;KI2X#L_8%G2p`qb8&IrZ@#=wor}|IFJG}hI z1ZJk9`l&f3ZaEtI!izabOuFA?IM&;PyR|MkHf2#DZ(6_M^Q1Tv94&z$zvFOs3m_Fh z6fg|;84v^y0YVm~9WjkQ0+V5$&w{>i*#5K!)( z$PqiJrX5W&q+4mj#KJ*CU zWYfu8M@M{OvuMQvT4XwI_wiQ!yv(U@{t}=mI9IB4$IVP*&O46)XtBNruD)JQvhkjd zwp4o3h%sSg2zy&6F<9e~Q1c5F2Mhv6+5)<_Xq5!uY1RUwfUstq^%ERQf^2w{95m`r zo(=0su$0(>KDz=Nx~l!FmDd&l1^$nH>dueIA?6`W*FZzKWY0?fLFz98zy186n9W?e zTkRpJi2o`Vzu_(-;z#0U0># z#gFS52w~V;;#ExHxyjSMh~yBH>%tQeq4yrV>NNzeswCf-P?^W`760bVJvb~sulIk8 zpgy{O6-S$Sp5>2+0U($W#U^o*-`a}z@cSi!M@}4;Ny`K*xGTACa?b|9~I0|$X6aF%H2Hw#&qIN`N?Yjb0BLp|25DNWP+cf$2?gCr)p2NjL~f8 zY|gLM4Ntn!GjT9U%%k|{ZHD^5wZ(aKt6V=MQpy3Wt>=j!pxtgkZU4Tx&BkNCr@t=n zQw-OUnhtH66fqAy85@90(JK)Fm;6Jo5CtLJO|JxrGs9Ips<6>AWtHNWnv&RcA&({L z1}VyvB6gnS+{iPSNiaM!zkN}!hCtAT$5d~e^xyDGq}|dT{)wKbS= zY^BCpqryzgVs;n8^+%VieWB!Ax zmqLt~hFFl8_7~pE494lYzx1Vu*4&QPa>D(KneDh4cWi?rYiKpL2N2ukP6AK*FQ?*# zXyGvk`L3vPKjSp!?%i`?_T6eXsB7Jbc<<^hyx$ye9mD)LK>C)y)xME)`hGJeZGjir zT+fHpyL-#30Ctl@L>NJj&Ht3!SEGOXop+L%o&;9vBCAMBa^g({n*TSq=<}7}%c)^NN-L4^X|}&(F7|~ZRS+Bp4q?l5nmzxQ#LrwkiDYu&fCSfj zaVmbPocoOm5rOkc*4_~~l~%JFdm^9!J%t57$-BmSg68A$3n!t&Gorl5TgdC<{DBEAi`&t>T|7?P zdLtZ|ItUlibO5SXcKCGt*QS$X`PXAvyxJ##b%nBI0lI&!<6zi<$W4D@PPWYtfW)6t ztE(rx;%HsghG7hR?|`096~$l<)WhXUTCb)L(dsMNQFwZpkCmGGUTqkb(%X!+gxSvoC z2g-+=tZud?%tCP3GlWvekgntdajP2?7h0?sU`!jxBFmBAtDam1MV#Ybh+-F0gK{YX z+oQaUn4BZ^$9_f@0{43DKQ1Esm5;z{-tnF%VLjDNxO@XK2tKxP5;N-q_1%|LG$Ye1 zF_DsFlL@^AU!KiM*7xOaNox55`4yHD{FrJ%IFN_(H8jTq>D001deP^Xc`!aij@oSP ze)*bF88*&}|I{>EVr79VX%s{bR&EBCm}LhOd%Ps@i>Lh2J=3 z|5bH2W?RKejFg2j-xHeLFlvdi-&QZ}tP}xBG5Tj{2REUMJdF!njx~KW%9l7|=R9jp zPH|*T_DvND_*w46wfNXUE4xw4D|Q&&90~E5EkQ!%E^alu06%SRj15+QO8LfL5b>6x z)x>;2YVm@6OyB?$+bwD%Co-|`y50LzXVk`1Pj(bkb&f_{623&`N2@YmC}+X%hv#6j zu|I0yO+5kw`fqy&pWGUyHmB|cBL-C!>p5k2s~>^XYf_u}6brPRx6lGKNkDR4Zc=f& zuuW%>3nWj~UE7b7-J=(MO#hBz-{FD6`x=mn37er3SU;#ald+NcfU-FLaAy=~I`{GZ zK3{RRl2hOWfx-0H7-f|$-8issw9pG&Wf3IdoVUMc!P$9s>FmUrybr&G2Dro=@xRku zMFz@zI9#YAV?Fgm8$a^8#kp%hr0Zj#jIqd&eQHq*6a4a6wDjO~%jNSr(W>2S&OL(h z|5?=yFW}SYK=prJj8Hte#er8~Nu%BMNTsTt^b*|6bs|g*)5XyjwwM3;BvkN(7fmj$)Ak=0FVG z^REk%C{_fyNs&2Ot#39y?Kl1p=6`L?2=wv=I7lZ;=ZW>1%hVaLemLtMcUKMb`Yd|L z+}qs4<>IPw;XAJegeTYQ{pEZc{i95KmgDy-8nTy-H@(emoc1laopwUi)Nn?^9!F&) z5VOpwxozPW@%%k2m%OD5f+tOKV1i={p-Rw7gKAh(xv;0+Z^nYJaG}jW*>RN!0mi2nWkI7S-PAB5Tf=ADQL_MSHH(rf z;yEgMX}<^wKmK@9w9J*;Px>i@PK3z$%m_);RoBP z4DCOr|3MMb`*c}TEH@e7iSyd}{?j((xOk~S@vT1PwdSa_KTPBSOs`UfC;QH!AyWD2 z3JbeDtn{YxL`eGh&~1H-kKLr;4Xlg88Er$Vi>mCPwa9j4wkN*;A-OkiGJWk4i}-^% zxzr<+squG%9q;}5mH(yjj4iE)^6QuYczza4fEfRn{`V;v{=z`I5F!aL zvot%R$q?GH{@C8H$Fs300Hf{PoS5UpOwo(2XiEA7jD6Hb(N`Up;hXChI=AL&deen8 zCCf24+!iw%P|x4rXgYMCaGaw8lC`N=6CYD#xweLqaGHHDOf7%T zb}NHPsU#9g%4JfL$)hP~G*?`BHcwlWw@->@6130@2jHe~bhB=Xr-^qE%`-jQm|i-g z2D4mu0;C&(xdHgcSXZ&UuWy19DMHY9X3v2Tr~t* z8HPvaCYg(gugijFPjbU<|4$TY3g^<#dJMr7Rl%A|nW~#VYyk5EFDvszFS391;QPL4 zTsxweuI(B&vsCznvn=liKz57mjnzBv9z26?HH}NPXm66j^4Aki; zN!Pml8ew7|m;kOAu%s|=ejc-!ES9wpZQ~?0_^bYkZ9H?leQ>|}?c+1$dfK(Wc83ck zE-6o5B59GCcdXd8#6p-0<+{Ibv>=W?XasVT-4Rc(_J$Z=P>l6Dkt}NQ)@1qzsQ~US zY?}D9760HHO|FiR<4JCq(=&;3fNH9;6{xENS-Ibd*-oVknH}l=>vXm9rhlhsobRKU z7Z7{Tq^7#DlqGR2g3fjaE|4*FUDRxspY070AR|)-s*S|PD@n$tnLpFX{IuKY%RA7V zKuo67D!CVJwOJhDi}>XvXw=In^m)R&4ARcngjj$}HYk`4+-BE$TiK)Bp352h+F$i5 z6ODvhz=U8Hd?LL!?b^aNK?Qb7*m&jnHX)g(Pz*_gb;}X!yuOEvSZ|q+u3@f7N!Lhj zb5R3a#KjTqkMqNI{yCS}XMC?HM!ywU6;vQ8q!pY2I2|?)ZL7ge{@&yc6TWaQ{Xb|+ zZAizK1@{<1aBDt*? zDmPe?i9$A^vDOlsmp)96^hFHfiHLf+ZQ}4AN7wvB;4C30CkvvkTV?8b&58Yfmeju? zGRxXvoWLZ7LPdW^pzYszH*0fo7~()P^5H}}msD#s2>Z)sqsebT@vM5dMMwJwbs{BX z09OoSJVHa!JRLPv1{Ofs@M)9fKKr)k{c972Chad8e3{w*L}Sh_4pZ^wo0Q?5Y@jZl zFJW$_zUG>S5n_g5$9)vWt%$tyeAAii4m!3XjoWN-8V$-94hlR!@?dyLF{vPz@+DjL z&Lkz04XrMnq~_B8&X}b&Ui@JV862>MV0Fz$WQ&f)?Y{;sdmi;ldF*79MZKgm@kZ7( zoy2^tdZI#}!)CDVwj87pj#I9vQ*p7o(6o8L9hE=~PbV>#E=Z38xAYV3#$jPk)M)Lu z7fmu}5zWvtCLrfw2A)xbW2b2Ebeaj2&@jCYL%BV}*!D-Ul5Y{j-cxj$Gv;YDD%9eo z3LE`Hd*4v9pYK?GE)MVkVqQXl$(HOMPe;kH0L+B>UH5t=ZOy>$Q$KMLwQ+3-dcsww z{Z748ZS|>;wvWd(oq?BPL142AJ_FIBFSg|j9qJD2J2nioTZGFHsqz{xAg0-x&CCa> zZbq9^Y*oE?nV-0nfn1R8JtwpeWgIcK%MRPC_G@S9?kgj_EYws*$r)=?G@tfb(*))ArO$mx1Rh&b5iuWg}w&!Pj2}?2SkHOTjWcr0t+;y}I zeY8Zv-%o`tI@mQ6zy!BKgCw-1IX5T0zbKww9#21{tI2?4GbF5{^O`ev#HbzJQ$@a8 zEm~Oqm|TA1J(J>6$~Kh9{4*FuG%B0w^jNooPic~9W@Ynx{yuei=w zzVPK)BIa#3F>K@6bl~@?Itui503xu%E@zw$Y`qT5{-wL!Z=927BV~lhgaKZ9h?#*k zx0hXvy*0KAtX#^lFsC@5GDZoo9R_AM-vr7_XLG-imCl2hk3%F-MnD8)ckfAF18D6Y zMT5OXI6a85zJhVfb_w_UvUCz~%0_pXtVf<`05K3Iq|AB+cbmEpMK0583Mh23H21K5 zex87f)+fb-?lIz!alWuI@XsA}GI-g7xm4nq9oKE)*?;VNdtT=FOj+nEE?z&y=9`Q3 zR>w8NBA#Xtpd7PYyo}qbg4<@y@Wqer?Rlmm+zEboiWJ>Rzd^kNc*Dr*yZJA{BIdoH zMqS0@x~w$A3`G_kuHEF}v>K1%>(MVk#k%a~6S7BIz;q4zH;l}B#sR1{y8e*A>cq2; zqKQ1WiBNd7a`tR>TS9z0tjY8dF`XV)CNRFUb0SXR?~C17RUXF~9cUPZ{v(rvkfp?k zoIxV43WwKIfA9MH&Wf@C7ltpcIlW$l0dgRZqRGVo_isnFia?&+3seumRI{1uM1nAEEGr>$go zRr|t$mbmJExB~PgN%HuvnN-EDaKD0BnE__f`~dupKWq6{LaVn^k7?~!Z1plg{mL)a zk|${jsvVtTHObB4SVXZb&4vY4sIQE@K{6;{V)|rdy&LCqy^YrQ^D`DM;#G7j+Dt&_+zyji7-J0YtCx!wYrtXbS3|zjjD+P@FkxYSSny4xp(OCOVuEz)Pxn zreH}D`uGZ(vRl8AG@3_E>u4nXa2P^ z^F0S4hRE=v>>hB>%-BC{T)ZARAwb2nQ!PWkS!#S%ia?n`Fzk3@(O*Alq}4|!h+zgl z4%|l3JHSRJkM1HJJ>Pu}`&(7H=E3;N#o$T@X;wMGyrp3gWN~39g25x!2PI)F--a2B z3U`MGE$h`UIfdblZ&F-C1S8AQy$E*>#ZgCDP- z-hAW_&*9w;QpK94#_FGkTYHE7<@NbZUL++Q;B+-U_k|eeA{R8G$eqzAmRUB>gtIPGgG^cvK zDZ>+~`C<}dJSkpq&biSst?Cz3Mc9+QReCCu#w2=^^$0f;qNGgk#dBBV^HvAK9LFUO ziV^Ppy*5NefBl??;xa=wZ|_1+{w7?B=J9SWEygt-5E>;Vh_!$vWU7>;K>fS_8_*s}{`<(@f1mjTuy2a%sh;$sZ2fQC6Z>2-aWbLUnJT*X_WtecJSZp-5IoiS`%N8LlNpiG zjF5Ozo_s!&9QsLBTSTwXRRR+@ghq9X`4Rm4Pd+@X0-Gr`TMOOo!MV)&rtAxII6H26i!XxI7((#f z&h8eXX!~1+iDw?_I}Ojik3Qd5pRZ?jQ$e0n1LmS!34)x8(q)bdg4Fx( z(I1(v^Nk=}du^fHFs&FXo%_7-_XRt>xWi103ey7G)g+ZS_+O%L!>WeA5@dxAf4T^vWx> zR58m2ViPIb-uINR=}{;|RX?H#OM!%n``&$Gljn3)s78&--DqlV{^ zAsGw#n$APnhe-maX15fv!@Np|F1N!4KS13iMQ#gC)k-8m>iXkFfhP=D>8aQ;+A#^( z^s4x<*1`#g)UVB-bGg_ZIaNP_i6Di^6P1-;pfD>uhhhV7_3>NynCaQmIr}9$k~AKCOsjsr z%8sRVFHEWTIa$F8tZh=yP=`9@e^WxVfhe}Dw~Y}DtH+?C=!4X6TT^UO6Ar0Jj;wr; z%4YonbQn32&d|5{{M<;joCRP-VA6b)m;5_~PXw&Rk$u?eV3CQ7t80AJz8y{uC=@6V z8bK8J_g6%8DYxiJzKl|}zx42~}lUAGWK|GBrvo%Gunxiqza#ny&0S~Q65KU9s z=Zfw-_S7KyLCbA1I3>#K$IdqlvE^ZP$uwl5AT{i_xoKX#cFy|>E!`3oV(!wYd}x=A zoEZ@u<*Lw!lE%)iW1ON3rG5^COP68>gL|~`^Yw+QpQtTauK;8>VQw{C?1^@eOCA#m>wSqxz&8%v> zc_m4i{+>z=4Xv3k4!OQHtOlktb;y!=uj zO4u@K;U$_*4Dw}VtAvU@WRB?k^kk!3$Dm3rYebV=)bqlnxOnx72(~YaH1HJK9RpF* zM>%tjGcB+3>{X`vp0^WX-OL_4*rF;i<@vmJ_+MOMCHYy-LA!Qo3ZEo(xPic8gbuP6 zRK*>=iYPwK+4Z10o8ol(`u-+btuAb_2{cOLhOek&&vAYa$>!AU_ zxa!~>R^F*k%YU1(=R6(|1F~AWpcO_v{fuk*O8aG{4KQHN+fplok-yr(!GetWTdF9T!#4$5z>H%4^`Px&ZW{<;mvF&e(& z4Ahvo1M8p=n;IdSLq$#;98zp0?ZcO28vWRDaFN3Zg>8q;`;J?kb)V5Vw#rc!6VQf8 zZ>l)?q)+fS{jWRI+bmDwaG)xzh0EJ$zui6)n*#yauV?E^R+j+?n!W@6Tkd2cgq#HR!{KgepuW zNP!#8P@-ElSy%nnPXLgs&~z!B*kHP%8#v=!CNNms$%#WwPEJKvH?pS(l2#mXcxWjh zEltbJJaTVgW@h#k(cwRBWawvew4KMLrmekm#@^#+bz!M~raeUSAj#GvtaqXDFaQ;< zTDhU9ab0ZT*JKqD800v3zQJ-t?Ge4ZYMSFr@ECozmfDB zZM*mXW~gdwYw!41cwX-hjg3jHG}=uy*l4*PPQv*<-H7Yz>K2_>2tcc<62mwr?EU;< z3zbJ?T{_Ji1*_;`yQR$N_J_CYGydy-$|C$|?2)->o7Haml4$l?>-(T^@ripjn^f3K z-2S7JV!9edFrgtP6w(DX5faq5UXx$#f--sw>g(~Nh}Z@~G01AXZmn%sn{i+^^v?g% z>$drxno)IPxzfn;iIa1xOr6p7eEq}eN|SVsh;MA9e5f%rbJJSE%=*cQZ6~|z9=3s* zMCnw42~60S@e~$nEH6#XOPU+PcL+%a6${CEnv6H5)6@rUnXOZiWN-xBu}tw>LV$m9 zw>jPuUgA~0#bgPkq@);k2O&N@9^`O%oaukmtuKATn^p$T*Pl@{Fd&s=I-??CQACRe zBjq`4bVvs@857?smA@RUl|mN@H>(GAh7&W)%jC zWxsC_8aXU>J|`xp9UI6fl+Eo^m4F@|-y{!L|CzP^iuw|Fy+)%v{^MmUXrwzd1dYgK zB3t-22;+mGd!JQFR_OJ(AlB>iz4T16B0*VsFUh~c_o*E8{@D=Dgr6f{)A9=5T@{na z?la7Gb$Io!7ANm5$j=RY1|D2Pr>AQJY)X`7H=t_FZ3&0szrVakM<2Xn zUoYnU2jITeSet8bN%6|1krt#s4(GqSzuqI?|2m#-dy);ut$=Rb+AwY&cN84YMO<>BEKb`e~x6R?n zzc(#DX01Lxy{|Pkx(EbQLy$MX)Qdl8Ire^FIr`n7Xl4ZO=o1%PeWCg+=>D%O8LZB3 zx6Ea`Sd-VYAXpXWZy;e1TJYrql`v_5`_VL_mVq0Aef#Y^>Po;ZVkYL#C;NWy=B>4i zge8R1Z$|-U$?<=Y>Gp-|+4F6#)rH3Al*{%n$WMc@v>*3^{~C|dmS zpQB=D)a7&yNokzG`aL)BX(Y2_s@atlYar0Iv*<`E7 zIV#;)H$K5&tOviO_vHK1zN3|x8F#;_FLWTSMKI0=e#OJrZ27bz8&B<%+zdvgiw$=}lb^EEaW0r>}P?nnQU&7|on~KX>^BE1rStmddc7Bk_%T^dAyZtKP z%jF=YG{DRkrz9O%s&0AQ$A6F+%wan4^G$OJTz^cE#tBJ)2~L>7 zBrX(V{6Wcc$brlCR(K2wX#q_eeyu%E9uk`7XDaND-QA(RPI+!8^TfhlTxZQYn3Vhc zX399_rc~;Uo-p=vg57qSyn%qzjV)!C}7no@?0K>!(Gl#)xw7 zgy!M-|GZKRb5$h$W~nbX#w2N9MixocW8q* z-+G51q_yHHcDW}ckE1-px{-$v(ZP--*(-9=+*V)Qgln6LI{%o$1VLX0rbO)&ttW+P zVasN4k!HC5!!A9VDKUL{xYX|O@kG4ZEPIY`Xq^r-;j#-Ji%LL%6if7l{qB6@{5kWp z9OPG+x_M{njM2dR>-kC(mg!)uq?sArKg`qtiHv+W8XY#y{>yd% zeJ3(GL<4+(i)5Q*HglD9?+oAK7&~CZD+ik%hY;|=N z)h&&=oR$L1fcCnR%!oYpH}%LREi4~u+!0cI@K%_5cE^ioD?-k4NDq|_Wk+E6H{ctI>=cDks9IpU_$!& z?$oKDK8CYVwu)n2L zrmFpQw#Fp}2L z!2f>?pCyP&67lm#FGRzyEK-PX^J0iLF4yH?T)W+?Ax=AFM_BU>8i^fbKKdi? za~S6L-2`c7x*yA`R`?J{F6Dm#st2o4Yo2rJR$=;O$PBO(4f#~wwiJh4f*#Ez3oQlh#LrE28)jgIA_VmIbi(%kG?@^-&qSO|-(NXK^GG~0 zBD#X5Z=TNYZx07K{>Gy_tcT(Jh}Y!*<}TJs%?0;& z78-1F6rvc}p*nkD;oePb;P>0~rPv`!JKH0Ey)P7T$QD^{gjH=A|BVjc!?jjk zL*LsuU3f(x(7vJ`MQcLBn55jTyJRBe=_oK_B*l7&c}+Ju=cAu_^f(~KQgdF)D%wPg zg8k}W>(r;R0^i*IhnvbIcBZ0-lj_d+`1k;Rm;DD&a8F198jG~Xn)`}f^JWm*N8^b! z8g;mXHtvN1gEx}toxmPv3S1WYX6%m~y1mQ3dltS8yQhQzgle_f*?1X#``M`9=N&br zFwT$FAT)@qh$FQ95jXW#01qZvM3T|5A@ne%QyuRSJ#V{acmJnN`JD&q$JULY=noWd z-j&h!d)yP56f#V)|Em>Y_)B@Ps2$1JD6mqkh`(xf|6{?#Aezy5{eV`B8U`4O55*aY z5=MO3&Z!6U22D37?Cde>oZg@85dWy6^QZ&ZhTazjRpjx{=+n z&B6638aDi=$wEU9CXA9N+sYKybVnO?C=)*=At{F$=>g zK`_f)^l=x@^<*9c8H)m1Y!xZ?Vdom*Bct{CdOK{S?0b2<_I+)L^<>3E1tX}Lq;EIQ zIP|Uy*`P6Q<`Y5Wql>j$dC$u=TZyEAo5fsnKucme)M$2iz_;qR-KAN+uH-->x&nND zNuV!hhUuYf(}STP1#gI2WPUzPz3me2Z;Oe$EG5lF$A1%efU3?nuT`hP4B|fDfGu*&2iK`S!&c`>k@>&n_$3e!>>ig> zsd($r_fv?J6q5Vt^4?1E7tE2%=!y&DGd+j)5P8;?zOa@^1x@t7)rDKz z6t6X%DiG6dk0NyAI)>V=pqL5@)_cNWY-^QMW3 z98(=?z|?_K&0I@ax&uXs1YFl*t?6aX`-?Qop@2s2`_n?_#Q>QD`2tUrrr_7Iy617S zxXPgNRt>Tqy0Xiz7mSmEeti5#yj)llCbC54($#t911bW*}qDlC%f z4Zmj$VXvDS_6|Z!h0@X&op;!Cwe=8Q0Ra3g53x{*7Z&X4hf&OV!2(wJA6TJ>6KUOoyF~Y4~SARW+DaRY2uX@M2A(In@T6;L+ z<8qtyffTZZmhL^wmlj?*{hy9XE_aiZDXu4Ic2xwS-V=T}{F3uNSZQWO;H2$@T0*)c zq#ux0B$V*I`5*5GzQ7K4*LB|K`KwDsLpnk@mJ6S`Ojg|vhAnG<^OXBeU_NXac{U#W zy=U$#2tuuuXRj`Az$91}AmgcWL}15JloPd6#BbC93dbb8iq+XuSm4XHO0Wb*e%l3P zy8FkZxWdKHz6W8gC{Bxr5FWM&n;B<(@u7nj*9*e0;4ko67?M#Z4~zorl!xYT8E49W z=%_-y{!NHKtP1f#4D$o)?{kPZqd9(SmnvBTGuy~(Xl==VQxCBm1*lw?9={0@-6S5s zAg67c`O)x)DmK$AIo6@5`|^sr?jX%4pjY{6?D|@a!8-Dhm&M;0{NFH`QcJ)+AtgjG zRX7}Oqan>XQ>NtkB9>pIL=D32aP!nczY6#hq{sYL{^GVsnaQP+&x*So#4;i1E8cT+ z8=tDN4GPa)a4)6r*`&LDH!nFOCZbIv>Z|}vaQbrfBj@$XM~k(&XWw{C>kd>!G;AZs z0}7Mxi?>vXuqn0qH&6WjT{D0zYJL?6H~m5#~S^*DdQQJXJxVb zZ6}?^i&PX1WES{SvFq0u&sZc5b9M)SOPm9!62qLgy`rIgpqD9^9IHr)DXLmV%2xnn ztM@LNghfWj(^C$*1!HultRkBKD|kX!+DNG6iMDvvi@llE`1|kd#?O~CK1ODeG{F>; zP??tD-r0w1G~k2>e&51?6DDPpsLu=0)}@|L4%9Eui}Zs09cOd7^x~_~P}Ho9*5Cz+h};gF4PJ1{UH$2|=nLZk88I83w&S8|;3M43W_-C1{jo{mV`Pd;(AT|MDd1LNmHO8+_L8q3H#`rrd{PfHAxwcHI8g}Xwlqe~Oi<8L!ID&s7px!zR|Apa z^m)9D>qeFBW>r&GhFDY@jj*CKQqFLJC;E2Mq`#-GFDn~**hM$!T5umj#1eQ-fu!|T`2z#BzNCsdGk8cMkEKpv z3=ox=+gs!fPoQ^S@*^bhyI0nw>`?M5T~Ua`)qSV;^z_e7-fEBOuM3mf4_*VCQS=k$ zs@4)MZ>W54`e$yY#05fepR(roqCcl?n3$YYvbRTG)(C4fi(y&a@I1Wk^ezUFUNU2L zy?9z&0wpT5ho3T(G7iiuWru=(d-=+y>X|eIl)F2*AHAf`%Bq+27=dt|~U@c_k@8X~cJ~YtOj>izp+Q@uh#>-B)yf<+d2A3HCfvC_TUSAvi-O zKiSq$GJ+Hd-nT6JbG;E<8vO4;5Ko?K3Z`9HRaGVCx(QEQsCe2NKX&0dyYm9D`D8Wo z@__C7FK}3o7DaY4WhwF{$8{$H>Nx*=dc|}t?4v6@^^19hNf8Qqo`5F=QJ9l|l@CKH za%RcfZ}N~6W1-T@Hd9h|1yA+UDa)fDz^*INE-i0nL(m4NRUupv9g>i=`SS^ z;suI@o5NBLQpNA8)DVpp;ICBJ^V~Ro-C!({Z{6yz%T&T~cg3`B&H~4egk!r4j{Mur z{p5#fCXIbF=Z3LJmVpf3q~w41LX$rvXxT-Jgt~{bT)&DeZ33OEfiH~N7X+&BeUNxW zxGuGl4qt%f&7C4e0=${UmCz_;*&aR+t9tKY-~BwdpMBOG@6uYQ%KXMX++LmH;@Lz@ z$9AHc>dHrZ!FH;7C#n1&%c%|)gIt-LLzd<|&xPTnq@+bYXWy5*{5~Tiv53$mJP))2 zFTRTQ@bw-}zUD&5DyF<29m?uCFlkanf?1GW_jfEx>9+|nCF2fhHY^{-eXX8pg&L83rUKJ z66g``Rn{Tc$a~B$h3bO$sck+!$&zLNCo%VD(J_2oX7`kbUhJ${Ai1SmnP*V-0kxgr9odRU>lmbiZ36=(pE<2W;PSVjluJl|;Ax7j);)bYfdW8A zDxT#JZX(}^`5<{VU7iN2^WXc-yooe+2>Z+(a#E0cONPNC~i8B;i7H)5IEz?PHMVTUw1bX+GCywgR95_ z=vv1#-g?9|w2Zwr&2md2CQPx1cbn}i3s$BpRbwDSYDtz#3Fd>_-p9~ol})6s(#npp zRM&;f{B*@j26JXZXFV8uWRQLW41$J%hboW?NJ&lA-co{+MNi$yb7Tk{UApX&qa{FF z-zVS}4=L)@Y#0jL0PZKy=C6iTmL$2dnz~Mt#zlp?mF!hf=`e$DUahAbtn#wrf?a1p z8QlA_qF?09z~ZPs$DgOHfDVZafsFghp+n$W;I;Tly5D4d_dn7s!n5Z%fA&JtkWlzK z{3m}%0LY7+CE^1Vjcbh^yZA{_`yl5)AG3u;v@VPx8xQ-{iLus*U(eNw1HkK5@^cVA z!BFFJ+t2s0dbs;zpi{RMns&}wM9!Zi_C|P(dQ&8EQ{eSj8w>^Hz;r-CQ0~QehEEdc ztY{(i89kQ*c6^6LjpR6CPwGQ=DL3P!TW>>@6c<7cd3S*alX^UZFMNDY2UlEWD`olk z*fD|X>9BGGl4LTlx9d7zB>^I7hSt=`#sxZrBtVKJX{J4CtwlM=nyINRG9YZXH9xU^ z%TiSkIjH9Q6Q^!_dN4p8z`};&DXb6Ys~96HN&IE8{=E(r-3TOc>G~N(+$b{orv)uN zH7mBq={Zw9R8}Vc%<=52@y|YdRO)I#Q;B;^4+!+O_Ga_fV5N2MT-6nOdDNQKW>=kj z(Pu0yu7$lp5k}nznCs+BsWPF>yLY7kj67ycz?=;U`MEP<4Rn7+2m_uOBCD!Z6)Ea> zg|6)GsxVjz_NN^3^keX*jwJUD8lf#e$^#}C2SOTZmT{JIa_xLkFQ#1k;hw8vn6FTV z=n;4O?zjJEu@|_N+LJB!XTATDo}adr_OlIhBPo(_gEe|*IDbKd`Ej|7JfRIwTYXh5 z?f5~ivGQNVd5F1=NV zUcf-{pf79uy@mg2`@XSK9MRn2wux#}F3`~omWYXDCYJ87B=%*^4* ztF@eLe0_uavID!y4W7*rf@?0YjDKh)fupwdH{dp}j=X*QxKd&4&!FMIuJzhVJZFkI zqKVE+PBzXfS3sz%=_FdVa;QEuL(z^_^H|hMlcoI?+zqt}Uo5m-i@JP2?i{X=z@Ey! zMte@6c;Q<#NU|v$zZ0?xQu_3oqukvdwp5^Kt9E4sHN?ncV2=O+>g#wmPo!+4#vHVq z^pVC6{&%~9GpMS#9xeYN0!Arp3j;>!$lt#`_wE>$o|eOO!a}#_uh3G=9stSf2VWVjjaf1qFo&>xEWsx2lU;<}Bb z`*zg8!N8%^K^2iAn~RSyTJ`@*5(=i{Z)B)hSp@LeA#vqa=k=8Q{6rE>u|A(eWyK&~ zRosxmfK%}eFKNI|@b01T`%hvUR>&KA0^?EN7tcd889)(Wcxu&Vtq2a{v^mBJ72pK; zXMrdv;_7H`w!G^QmW z;aORfk0OdpGk?3pdO>YB$E|wfv-bT0`!w^BbSZHUMw~H76Xa7XqAN0FNu28=-Z~?v z9Ne`?a)dg3tdgi4$`%DzVs_OTmn9?hd$T3>viI&6F2Hn`uF%adrK~9K@tL#?hN59U zV!d9z6_d~kk;17H3EFZD804Nsu?+VnXs7kv%Gt*fmc6b4w&(kWKN>quG5!#chq;r8 zmCn79ZvI%}`~`sqF%P;VqYu7wGcPfW{NRO8yyy{pd(x_{rKMGyW-uus_W7cm^HLAY zo70@XD{f2j=-fb&X9FH?m-iM=)Uf5Xsiv#HqU>>%M}j)`GE4#;UMaqoV2zeYC#098 z1h{axy}f;;^Dl1u+$LiWe~S@ZqVj>Bcf!6lacXIUouR!x6Eu#obopxg3I)OcD!pzW z=xKKdu9^j*X3mVpK!`?HTR)nO(quNjVH`4tNxsLd|k#$LK zi+v$U@T}~3G{S8usitB^xI{=1MsmlT^=}NK9mjGe-@AIMe*SxIw*H zVr3<#euNpJ4GstZ;PpWvbw^+a>pVC6jA;xfT@o!*vp?$r5Rh=Z%8TN^FBW{Tj7|u~ zKG*a@!vw==V%*WfkzBO-B0t2wAfF)#E>a5}{sATV?@9*eQjat**>-2;eUmpuN#&Zm zOL)xEVC|8Z5gzZ_U6AsTh~-y^B}EP(Dq$_Hq}BHRSGoBbSDrF%EcD@ozX4%@?<{TT zb{7G3XZ)`_7&$mFUw3$FD;{`dJ31{*32UeqN_VTi3k|thi+ebUf?|+YXmT@bmdB|q zJWuLlZYY06UYwqeqa4RfIQ>in`~$nTnlwo>ZRGAQ@b2zn3Z!+S)}TM1ryxFc1&js# zUqv^LS+sFTj^ewGg7Kuc+_U=6A~z$q7DN4L-V(T5WUm}dfGqm{W6*Rn>1RJ^h0xH7 zHQ)P@(U-;jMNj_nMWx29o7&LSEs|TV-uf2~?aKGLOBA|>W}jcLx4gwK6mGo&%399hESq|G0E=*JbfS*$*!(Z^I+=I3^q`-tE8 z`SVPxi@ClYJ;JRaV*5oc1`|Kzobs(!A{jUqi*ETt^V^1}6r6XIbEn}Zngs8ss35?7 z@dis76I7lv>dy;gyTf-bresFaUP}MawHlkOTX&_c1b71L%fkgSGh8UIlnH*wDmrB- ze{*>T&-Uo&!!o^jnw798)zf*I`s=U14}?lPO*Z!EL)#vdRT*XgN+UA}sHj1fED@+z z@A4ySOE%>4t=3Ruud81+MZzj{R0T`aKt|m@ zZiUN?6gj%8TK}Qva40hJ)kRwUlQpm*P?5P>w!Q&imLO0msN8$tMUtj&?;%LdKhU8` z#j|uUUUg)EOUx$*@ucj~?cO$|V%ohNa{2Q~B$xutzg2uaI#fRu@LK=Hjm7T(oC?H3^L~&K3zHlBE{_1#8H12!Zlr0B#a4S_4*Dd4adfRP;WsZ5Pdwt z9Hf!-MJ5;T7oi!Z3(Ao(5}msr)E;$bfbOoEB&eBo();VX!XOOBa}fq;^xqd=cHb$= z=|et%(Dx^pb#y9w@-E3HJ+A+IRZ)V5J>o8qLXQc!{_K+laI+4;7Gnsm9>0>34EN+h z+<$$Tz!RHk)<{y}z7wSp@ZNH4{jcKh_s?zW&0*ID?2+j zFOT;3k2z(s^k^e7ey6u-b%1A9GOFgce~mwOr{8?RU2PCItSWn4=3uPm`VGdJB@ty* zERb^X6qxHjRAccy*$bHf{(%r60WzO8wDtO7jggP~HlUl6wX!Nf zM&pcrlKA~De()pb(=avn$lVwZGzT96@u~?P0USqIM62%dzB) z`oxPK0Pfo2zlm&VxDLpZHhzv>9$;4bzjp`lba@NUfI(cJG*YS6wBJHubc3o>K%HBH zukc&6D}LluEazv;WEaNpv|pSvGf8(j5+D3KF3?*8@6xAbh>|)-q1`;(o{>dGK1&a4 zc*)WF@+?%xB?WhqDb@tdd+)^IhtRkzT}h)rZ~$hjx2*%87;{qb1ZZW&8G+Ct%Mk^M z_{=C$SPn$t12nL%;=u@2(zu|{=~~F>2iUe6luuWpXaaXy6{jdBe=U)DoJ%`b_L2oh zk%|#d&tC)&J#+~X6AxV}%dYEg0e6kFoTD-h@_U!ra4J|SHfT9U zPpO5sYg|P=$|PP=SW8)r*?Zf(!6GynkCWNUku}bP;Pui^fahX0qZZ{%CIgAZtOP;FJ-bxQACpWnye-&Kihz`^8RcBm3 z&EzPnoDcO;nG@)}+a?j@PSW_@?6N`s?c2A5Z=WlOgYfO|YJ|pOrW7JDTWk>-lT1-}()!65%0YFc*<=o|SH% zs9(67q{9~pL9O9G)j58fCz<6kx(g4qS)1XijKjcvn;^vdsu8+m>X8WfY|myn?qt;a zzWYqvfNf@*dE3$*IlERL{hkjQgBaQ%%3VkIAvJUyv;Jhy3u)MHR zl@a5iNql`UBTtqt`oXnsST#;H(ks~Kd{`G^0TpZ;aW89mSFiS_&v_UdMGBYGi`&*t zOi&lU`m4+k6amQMW-@6J-DXrqMpF(u!-+kEuD?Y*Y$FxgcTi|~Ftlca9!|pJ50#aX z3Yw1B$*YX)+(bz!(^N2u>`k=);GZl9FfLuu_F%n@VetYzMwcxPh;YaIRN6EQDjV9J z{<2TnD4Es&*mXfMu8JSgbDLpWlHail$i*kChH-Jb92~IP>yqUz3E{R_s8N$=BOP0lh(kOWhw&BKteon2c*s~D z28|b#(TB5uQz8Xm1ue?C7#1!Gx+gbY1+(sD2~c~DXW8U9_WkZ<9~@gMG|Pnzntdn5 z_bmX}N<~#w2X2U7j6}vaHw`JddvfDxN3PmD*I`61cGc-W-EU!0 zC8af!}{r8#&s`vtlgb&+wUV{KHn%zA@`C#^6Op51^;O z((Ta_bzUdxi~rqddjD&bqdIpnS*|GWoi-rY67-X(=NKyMo23seEN*DcolmPX@lA(- z$)0}t$v;fj#y(#NXOQ&Ol3FcI;hYp_W@c`1-%~a9+e`0x_wl^!r;?7RKPQZfV{P8J zhMAd_7z`*_1A-Ej{aD(JA)$4 zTD`=*L%bX-;-Yz>n^ye2XSkBr_ybym*9{{5;>!Dz`KiDt?!4ad$5l~rCrO2G%zHx~ zGU{2aq#BQh&8*0}X+`w-b=mG~2!I4(0Q9)$sa$VH7~;ah!jQX|Acu9mS5M)*nF>~Z`f9IOrJ46cq?XeP_uNful9jM&VIGl1IX&gZ^6Vjip_YqjGwt2S7MWZBmuN)u>eqT_j~T; z!BYK3@t-sIs#pqg$Q-*)5(^o#NdPqyln9SMnF`{f3~}a@j78`&GzHyyJAP{%dZ!<) z3z$_tYUDm@C)*BkIvux+?i>7qjm={&z6Q5aIVOa9a-S<^S?f&Yq@||)M<4bj_u`jipcMQ z-JGNL1_d=pI_e%}#aY63ALP_!!l)*RsHk3j^|IEht_>}Vj!9?M^%8TjyDX?5t%dwT z9)!4?5?J=-`+Sdme%AH0rcg1BT_Ytuova1Zvy3zYje*)G&Ot{Nk$tZ7V_>O>TbxjU z@CbdjF5m0S06?gg7Zt^pzEpy?x3>dTCAEAt2(hXH(VyeDaOp#lryLF4=-P>xCnDp7 zLAsz{Frs3Dts6{hUS1)&IblFsXI`+G7rnF|e?`!?#M`>c0E>Ws3Nws%A1d<6{r>&W zQ6{6r2U+M$9<#R`*8Zd4h7YFiN!PQL5Cqt6E)AXt)Gyje_7}yK9hzc+EcD&^v>=rI zc6P8fstRVE=vSb;=*u%YI=TX7yFcE@kgR|k8sox~jI8_bk{PGkrWt|&vA3G;A39D|wlH$%iNhEe7#64c zcFk5(abiWb%E_@Zqa*OkXshI7b)B55Dl>jH5w7@a5F#f&&w7^?wOk+4j#ENRjgI#P zu`UEVO#H;WbdXzRapz=fi_}8u@hXvDbk0|NhNh<(b%;56r>Y4)3QKP`zl$gpo^LVp z9oaGoNN*>a97iwrvj9unOYA`jQgwv835v~(lJpo;GC{&PfY29hmNR&kl#HyLz77Wj zx3aP_!aWW9Wf~9^2~B%a*&QaoNz8$*fku#FoY_Q7ZFY~yQ^?NF{-IW;>K9d&yCr(6 zk^2n)Ku%?KMcSy5Fu_10C5r&=C0c)bIYE%RICh>SR5Yj?7NS0utk>$a`i!y4fJhp! z^i(uF+!K;Bfbie@lRkS!q3dAz0ZleodA6hBW0CL(RASUq|=1(1$|t_%Ap?2tT!J%nc^eY0eb$oTF>{0g|7(y1HZ*Q6Bs) zqq@1zoNCHU?CP`R>nZ$x_1W%?F6X=ic^L);#m4PWMC!FlYmKH$5)&st-e721k*;7F z#U9y)f0i%Pi>ODrt2EC&Fq*E9hO=RYJu(F)UvND~#YUNR!X@y&{@4FjKo-Z&<%A4D zk9Vs$i`1`fFk{6Ld=WYL>YKJp@K4=CuCR~jg1N^XbcZ;~g)TM}+DK}n^nH-EpT<7%{nyISLM&NL%2*JBSXRrlr@ddLJj2W?ZV-Z@U1 zV|C}WHLb)b@!Q#NOgez62yaTUq(n|kL@1p@)1e1geFPc4MNi>4uf$Vl2^LhUDy^TW zgUN|*Ug-*EL6!@9znc9EjcwkMs|@Gd;%m^+(doaU67!jPOLiKnhTBugNGuqcDi1E2 zHwm16|6JCAgd22#$H|9zMRwdktdd1H>&>nxwozQRJuP`KSMd@qcT$sFQ?kza3nWn+ z_}o-wm2JlLU|WjJ3-c}1f*<|`6+1%;Bv0fL6uXB&SK2+^F{J7+^W61+D|W^CI^aaF zqGDb@-tD)#xdk_3?m5E*cGhCrDmO{)`zaW$r>fk&x&(EVHXm&c_rT*ahLc zemBE`$2XdCk$KVd|EFNgi?kJC+Iovh%EMoD#i)$+{BjA{zzo1VdJ!)H@%O~jDZKHu zO-iX(k)7Iy=)!yrJ0^t1Zs6Ze9{)LSj9pSMgR6CIwVW80Li5{ck}Qh05DMU;fa_Bn z!2vmLYR%}*cP8E?OvF?70%e&e`;gupO=Q+B>6x;9QQ?AuQ6SR{y}r#@fZMwavF8 zUyi^7<*>6m3$&iD;%?(KCqZ2#8fG=QxAup{R{h@PxhWYT3DC33`fo5B&#Km&ymvy$ zT#wRSzCM3V^qaC8%lK#IUwDwrHZ|N**&fw%M>lz3sG35sapgnHO}0fuU^g}~0Vqzl zvS}Rc8@U|FppfV1m!WfJ;VgXgN=yF*5o$4sgF||<-#K$#VO)R3=7ODIJd;p}v$b4R z8~fz4fSrGi6D_8%SjNU$8T9n@zZ(4*S8(G8-MaooCx6H3+Vk@*ZCZ;NZ(OK$c7FyS z>kVaQthUH>F-2q3sn|4)tvM$(0=Qu;b7m)jL_onRSK3EUsGrS|?f)XaO;o!>QE zbJ;ifO-DuH096oO>T(_j`}db2D?U5{fsul) z@R)hDCg~6_TEk>8Y9X{+g0QpA+`|N43vCOjB;u=KaUc2y9GUiSP3)-VGh_;%EHOE2 z)mjE{qcsF!Oz@wtwFQea|1NTI!F9fjS$%^e|5xyGV)CCcPuLnl7v5h>w3`WDZCqNG zKP!kEtw2a8(WFYu=ag%0a%Bvp>GCJS8C?mv_%LAh%9RCLv4BT29a*yw)1E+W23yTuJBQXpG5&>57}(Mf)HG!K-h@V4uRgM4J&|S1fqMIZ zyMbXk|Jft9#rk~q|Ps*YwrVhA>U86->r&Ge^!b8ds_jYt4F8kQ-=A?wsQ ze`k$qNo~nbY~E;vNNWZmW#Qd)dbsx|>{jx-_v;v#%)bwMv9LIq^dRue|0<3(62s4P zl%_FXSff6i^hTcayMZnMu&oheLXgxVD)rElwhD!u%OO1}CIp;Y&`p znwBX>+hx(xO9xYsd`F^@WvxjyX~Cd!Io#UF+BGC))9l5k2H6j;F3+v4_0p>*mACU1<>U zv&suIoDeKvQ20$9uR;W2YR3R{7zIrw%V@Cvu%$d%mB9nl#~LTWwpVNo!i%n;i$xO` z{MC0b&8>tppasNcJg=hN_bkZFw7v+Bys8@??XiZ?UZc}2G<*-BvI>*mtsmCV4}f56|7YH0eBka z?(b2_Ro4iT2>b~RtJ#0QD5E73Fj=6iYy45+L#UN*T&D%{_vdGoNdc$rBmNjj`jVMy zO;s+X1WN7lL(j#5oY(OwhLAQ9W4q$^i0&Z-mX}q%bU0+TsYS2(3xFvhU|JB~?^o3u zmHNM$TTHSMh+T)&lC{HOnj{(#@8e~hU_#N&F zGc-a&3Tid~tvXZdAZw>w!FyCf6KlZ6UMhrg(CESzkgbLd-+=o`0nqD z#X;^mQF$MEl*cJh@j?b((91v9T>nuC$6Tdpt%E9=ea60Y*>amq&x%nX)J znCnrWRD=?CS|t4=^!u-IQJ_`gul5Tu5ZrW~~Sx+8^HoBDiY*rghsH!(Z* zwwlN*)@_G%V)EH{c|xh(06r~SZ<+KzxjpiF02iEVy!#>^-Skt4U=eSXKl+o9CyXW7 zj9ux5UMjAGZJ`SR2Cr6I%6|Qad>HlIM1=yzs;b5UO~nCnBSPt$BEo+IZif9#8o`cv z=<*RzhN3*QiYD<}3YkiDtY-TXV>Ta!K-Omn8d^k3(I_o;(y|J$`9?7B6WRXHN?+WH zB)krHk8B^UP}muOtxDeC-#`7ujA|29F3YIJI{S?W=CUX;J1pC(T?Yy0#xi0L`J$(m zJ_d?qo>c_k{k!H%4p8Vg6&91U_FjsMVi|QI%6-^(zEYd4f%*7Xkw)HsHTO6(b(@RI z-_&xj!Jg`8pQc~+&r=CAwG)8ybG)+*kHr=0!iL~1>v*psQ6)|?t0>}vtLD#Hk6h&K zw@Sz5w)qT^f|oM)O(Ij(%OBl{kIhZqD>)0nepsc8ZZ{bQ=^+=eUVqJFOsKaL*U`gO zx8bs6B+dGKzOoB(2w#=V3_YW{Ex_6Zt$5-1gX&{4=yVf z2<}J+fjvbI$B32B)Z#nDio>Mwah)u-qaIG6+6mB593Tu9Jp{ZCm)+z^Tc%{K zwns0&aAPp91JyY{8UIaJ1Kz;`^0x4*V*#5fItHOTvrxTPBqK$>g=>$-!6d%Dj=KB$ z)X4(7_r1;}#N9Nm^}D}Xu{sM*#k0fi>+jX)*Py=>h76atQQ0x|CBXDt9t!Ukz23|z@qj2ufJDgt9I-@PhA`2QHSU9 z)A8lLxI-_fJfn};)JZ|h8RVoR@z3!m>6R_~J8feVzx>?G6$*yX!0G|N^DJBnh)^nO zWgYXepTXzdYVY3XEdg+TQ@$D{j0`~R4+q5HJY5DqavDgECc|?ZoXwwYGo#JVE<39z zeDHF|JG3x#g%;nx)6=b{lVi-;v66_BLS0u&x7d1+nNU73JFK<2f%JGHh8gqdM7h@@ zKS%stP`+=x(q&bE=A)^AI-=3SB?$7Zd;0;gk6d}gbQ)lY*_|Ninc_j`TnPJH_gY=K z9URzt7er%Zv&_#wQkx~|*C>~(1k;2B{tI$&Hat}TL*&Y34;KyI{_LMXXSUR|K z7%p|O$!X+3Tas(caRXT=WG_=thYDJM`^Rhb6)By+i-lCC_X7eyvOZQR7_h*MMAux= z08`R{v9KBq%hK8FxWwCdB9a$j#w_YsWlO>^iqN~X)q?JIlbOo-~T`!0P1p|F7|%>=$__^RN~~)$oOCC=f3%$Rqs(omj5o>h(~xfE@t{ z2@Vwk-AOQT4*V-6xs6RsQO#EDPS7XUUMR)t;i#m`LVPCFRR%dDJ6>hPU_ln z@n|q_a#-SbeCaEK;Rp%=$V_q}A)&1kr9VzbLB0Q3D=%W%Q_hddE}p;T%c%_OQf{B; zl~$Kz;7%LT@ZK+c%T!}$V(PG$WfF(2OS)<##rY2kp~a|RW<3}DwAZg7N7`U}gmFB+ z@z&a6A^d=KyTxfWDhO>PinETESu)_tkwJ*y9kXKDWoK~L`J3lwm;olq=Q_!;2?{kQ z3vXS;UBCEBgsHr08efqYt6fK*8}jPG}NKU3GghwI+QfD{$3fsTiTj`co&_6`1j zlrMxpnSIR*R5LctLas^`7c!sGlTVY^f2;gABnC2FIciD&l*-w#$_Uk8dV&lk-W)*R zq4TD^!hNY4`*cc@1i&WrBlqzmRKSbr^gzN%{Y;kl#eJ#FhX7vLztm3%!Z`^$)aVGV$7-vP|o z287V)9M?&+KSY4vSIC)sUMF9?Uf$7Xq(zR3L2x0j80LG$oIP4^8VAM(CrIZoz z-7~DbT$NZbke`nRp+z(_bOoH*{sbf*jN;<2s-|EZJ#tu&Yzp9~HAT15zr-Ogis&Q7 z0K&^@Mn3_^d?UpUTf(@aOF#S*4NZ;OBN%RiR+=f&K$&1iZO8n`fiGbp? z=_?&oipsZeF0h5|)arL0eoRgktrG%pEN5#H8aiq}-mFzWm+C5hTDuSkmoYee8bQXf zPn#h07*`=e&ryNBUlDIE?=5n==%E=iWCQ9)tNaGzCh23=A$qZxF4Z57(qv+bnGU^v z??dgh*ww#XRZ-9n4Br?`5y(uOE#LdgrI}h2Q3lNj4>7+W^9S#{c00BYC4}O7vLyWq zJ6A2=F+*HT>g}2L9M4|Q?{t(4rE>nx!N9({DnQW23ZZuYyfm)SC(92P!k82X(rtbM zG6qfs9Lu3U05h_5^Gmz>%Nk_SXJ00AkQ3@{b>DhPeEgU5jZT#2@@l{*KJaO+RX}pC zEivw0)8Wfwfn`f^;{{3aO_?)5yBQ5gX%>i?pr1@sV*&dh6d0%|$`EnK+ghoAXnLh_ z1X>T#!)YH@{TYk|XkRt?dNRLpIU8ytnGwB+_~BRF(9Hq;P=aM}GB$8V(|Z}3Xq>Vb z)&=;dg{%f+8U*z4xJddnO@V$$`0wSBq4hgd_68vDM;)%Ct0a_##!pzj#wA(8u{ROW zYey_0(~$N7gbg2J3_)q{gXS@Rh-3#4`27X6G_}Dd;)_gdApqVM)V-^>{00xvCpi9d zL1r$6n&yu7Wvq({;G(1BU&Em7P6OA{4xXHJr#btv^x|2-r$2v&$|GoeFP5TDu&b)S z?NdDFK>*@&%bbroqD+tsLo+|N$J7ZA9D8ETT2z@igHjVsivDY13rNnY>U@c*(@`Y- z=a$y%549&!pJ~B#@{<~6!;nIOKa}j(VLBME!rzlm(n|g)OADm1R^uYe#%XMGSACKp zU|xq+*ZZX*vEVv5m_S?+U}gzThqV~QG)3MwkOHc^KQ1Owlc}rzkGyNQXw%5o>RGE# z)e{cHsw!Ho*KLA8H1Nbm8-~f}rDg9{_wu{iyZ^UIj*St5iA8Lu83O_D-v|PgXAA^D z8f;xB9;FbQDAt0Si9OVDQRzh;+0iwJz=0D>7*$+D_OQXRDirdXMCacbrdCFk=6(59 zx!iUVMYjQX>hh~1Ss#-&fo46Rs{-Iz{UA^fdo1*Gz+U&i{R@>?{Mi3ib>t4q_Z}sa z0SoU7yNGXUZKko)O|$$F&k6QDrF{AynB()&Z$;;-Fyulq-?y!@6WJ5f_oyt@np=aVy}K|j>jyTkzi$wl4xUROGg@bJcdGg z{v>+NAS7*H>IdhpHM`tne#j}X+46>@J`rtT0l@Hgc>X9EtotX~s<^!$+#9O#%4|@v z(Zc5mW+{RKk#(@b{NGe49seXIoN`7XF@_WbyFKj=E_|3bQGl497i~~Gx|00(gqnEc z@rf^h4yzKl%H%xzw5h47KsrwNnN1<&>t8l);Cc+@h&VWgRJJ<_lwm_G9(OG<{rOyH z2b6~CT^fPu%4VFTr*EPJyk&*);K}G#CPro4(?-}#L^PufESNVNcNKxVNTuCG7{i|& zF*oK%!+#|1<%@!QZ@iwHZCpHBF|F7&9P0BFn#+yCQ~9*4={DU=VkLLgkocEfKm9

&*#4 zs(e8!$|KD9Uc zgT{;^1isdjJ1shOehgBQgSZ2n9#zz^UYBzF+d~mxWJaESfrn z;vVeIZCe-{8)U^u8dF!SK0t{XYvSClNOsFm%tg?yO%nW`(Q}Ox`7@jiUY|j?k>t$* zmpedc`Kc@5fH*(JO`g%;t+`;Qe&M>LmKBg_r3K+9fL;a%lwL?L)JVq3&vyBF90L(H zwZ_emebZ*8N|uJ>xe7u+rGcd}m*lWIm_4%7(@j-_JhI3uGkyD7i#Am!Q7M^QjztXa z$@r;M@qP7?YWKsqZU|`$k5{10;iH2H_;FzqPTzE(3#KE!1jd9?2ybSL9G6@a=_&ygYltMU z_m|6Ew-W&fqU$R1G+FLrNl8fqKp_4;m>KZVt}~t%`}Ublrfh$stwEH*l++00(2!CCtZz- z_#l9xA0RU{1#^|JRLD%eJCqy%LV8gQP@ABU zK5LtCsaiHWTiN2r7Zj%R-BZDz<5(%@!psnZk+EfzQNi9eTk*XcO=;Qgir39PjP*KMag4GsHN349Zp+{`jm47DwnD-_Ki{HI33u zD^|WtMRI{QGv*kAkwtin@M#k!F;!`xXk2x6)+i`9TO;YPDk9%M+KB%A+Iy7rm;{OV zzE4`2`0@pn!Dr&Spl|qxc;=_1%)UJozTJMNWK8a(uNH5-DqAPUSXb*_O8sA1Bdwy( z6WD5pzqPG<(nmMw(~QZHxYxlT#t}aH{AXN1+dJ}bf9nS5hUBq|>vEC*eZHVTo^@Xr zOs(sFeTF6}dRu}}?(M=ch45?OqDz2Pg*#e7ZFVRPLgmh#zR0RM``^f#E6&w`h^F99 z++WWtlmpYut)dio02jkHGvyWeW4`Aw(IGd4Q)^OOQ}U+*V0zgC@?S2Ubh-9Ce@{2b zqo)9!_|WNkXDYyLdVEaEj3Bg&76(F+;b&-TV^{h;5J4kpPwqDb(|C*!ek zV<0PI@Y@#))}xVd9pRz4*X_XTgObN>NzN%&_ZAZb0Dp|n9G61?E=wD`wscoc4oiJ* z>{F>yVn0B+P6G?fn8YyAKy(@XzsJ2L3>mpF7=?uk$k?cXyC7QNy%R*_-?XDNYR|uu zb0uF9o)j0t;7wUV=( z?D+3v9@5azP}}cWH3xksRTcBZ@h^51%+Dax$P15H#RB3^BO4@=#GG4BsuLs_ib&IP zGK|BG{Vx_3zmYuB6L#Xg_2*}%uox7M6-q!SVF5hWSz>M_mo8E5)65Y!rkq@C9o{E# z%??Xe{SnyB+;!BqdYB;`Z%w1~+i7E&rUU14=A=cDHoyJqd)_4aT(;xa{!rNNF9J?C zCDvyzB86utGIri5>do`dLO)uSgN_Xq7mDn1*gap5JTCutleEAJ4f8lfi*nUAB+$ZP z3N-AV$bU}3@cza!(qz@)$WQFzB2k>sa-q(YRnf2%MH^j5`Qi|Au2V^nhhNaXw3hCU zGsPD2FEB8a&(p3}_EYfF(SWmV3UP69N=e^_WWflMV)sKJtxB5W5C9AN0ET%Q;84w_ zvfY1Gqxkw{v4=Xk)dc-cm2C^4l#;^UN!%UULL%;^_UdKF!P8JUKX6N=fLqctCV)?8 zI0l0Nj-CB?Qt|oXG;nO(*dEei`Uh?YfC~gX&;PSM0Mll;$0?75Qw?CHxRgSh6D9(@ zYA@2*ErB2yz>}qw@92azDvLdkl;`EUbxViEZ2F1QVNcV%z!7bwBU-_n>y|Ms;`fTB|Z6Q!iyvH`BT-4MBxbaqBRM_bm`` zAsxPq3KTxpSa#D19j;PcyrDsWY&t?9%kB_J<^lh&6xJJl)tGbgI7x&kOlBEu#&j4E zKZgnl3EA=KUVU2VLiE!ftTZ*E?ZLr2fY=qPL;Gi67m13vjIUAD55Wd<<>gIK&rgzNteN3P#2J3{T~$y7$=53 zAX9mlwbe>N_-`LuwcDwXY5rpHi@V3N7XgzvzlN>3zK*rGDojaL+vq5amSrymD$R$M z@T)ax$!mzzoJ+=3Yu2*DEc?4#hk$x*yh!a0MBXPPp8SNd1bkRP39h}IcfnPZphZv_ zDFrwZAT%X`D$f%P008vSu^|js41?*~3JTs|#%Z_GL07UYLtt*k$qJ$xsQ{PS*iOkz z;S_@vf%0XiQV4QVHz?V_-@Da(wvW+ilg|nUX0nN#5XzGy4iV2&2}gq!ns3J()&7!Z4WJZ?6ai%r zmu%;$xty=~o|iomM&o!bNXOb%HV$mFMKXr2?bHDsW6afrly;Rn=f1LcLJ8-2pQ&1?2#IPMJ#Si+H`;!_gN=$C#L#8wb+d zulS-4$wRt8WEmk~3blJ4sd}F7p{;)EE0eg-6=IxM^!zN^su(+wjbbIPqCwfMd^5Fk zj&I=(FXekO`FQqtgVD^b@YoD;f>{P;(BtCpxJ-b+(Y|3?Af4hY+*Kd>=OAD&r{6PG zm6U@669~NoNJBa5OJB^DuiWL(K|wJk}Y3PcMxa^$qSc-7xb+ygI18WT^9kU(Np zn;Yb_sP?g3fMq9P)LsJkBAfxJT1Z89lhkw^(GE$j$*oCyCZ zDgu#m`YJP<@w)nRu-{%DfZzHJzwUL+)UnlJfE?z(KZL7eK$^9aD#m)}K?IN{zVNsk z=Fbcaa{)szB1z+KLt&=Ps6<(+jt76Ow@&*p`+z$$UmzCrKRH|A{=ntmd#i4ZG>spU zroB-}^Xy0CAWxXDXAThN+yP9uI89OjF>JhD!3}W7Sj?>eNmS9>u^bl9gWtDSzh#Z1 z6M1Bq+^Uk?-W7U0?l-eC9zUKr84==CJ~P|uCTy}N>#gXj)xrYghMlV%Ar>BLMRS&;k*I|{}?bLg_p`@KtXg*!Et;Z|NA>O)gOLt zweQ~j7f6ZEahc_LS?&J{11iR7y!5CE8{`uM1%I7(cVfT4J_t8BjG3!9*)_o|c;=5( zZEclOMLG8DE(SrS=(VQkA+16Ini^94SJTHQ8$A>jpO#X+F;e5Fw;uJN#C&{shW@V< z7IS%V{asKnh)Nyi6_Dgn^yj^EtdH7p zLQQp{5iMu?L9&)ab~{OsfAD8kD_9OmQvI-H!?iNUJ95}`G#c{-*eJkMy3l{HPpP%f zaXetiv;vBZba`CIyUYn-|EINFqj@3m;eETg*7z@!1W?BHdb6-9s!8t{7*M2quYOuRCSp}qXpaZ zprJ?fhwhihKEdu3m^1c2;#8Oq%;xen0_ReVVLu_C$CbE>3Mvo)45YN~4MQs|qM)OP z052&HI@&KG}C-f$v*z}>61u^&FiKD zQed0Cm2RJ0tt5CI{*CnQAFX!or)QvGkNF`(gF}*<;Mx6dde2$s&6)}~2O7u{-D3h2 zjv(k4%83J(g`gFzmom}73?#hnKeT(~*~5VYIi+qsxZ_9gS9DtuZ zdcMuBQMdd$FI4kH(tcEZhvVkuni)VY_TanLO{(G_9zEij4*a|a73h1b!ytnw4Hs{O zet8U9wpuKK?_eIRSg~r{zZs^AW?#lW&LHL#7T`IA>fyA6+u(q$Ja7g{3`J|A(>l24 z>$B!9IGq2~1FC>;IK6+gjuBHAs>0M!jg{<|o*Q< z-}h-8-+RM-tGQ>FiL5@73FbH)2K9}7pNpbW*Ukb~7P@Y?{k2ba7|Y!Rdl9CI;)*vbbLHsQ9u0)Qb82Gk&Hq7>L`#_|3u$M z{`SPG|Kf+tq9I?B#$X>C`SOio#Rp9#RS>M&%B6Y;cbIqwtDYL#2Dj=_va7X5cuX z$PG^PiWOBh>Xe1s6vM}`|0sisVK!LD)En6Ep>DEDv$I+A_w~J-S5`uSB1%}eOvt_D zM$SPiG!WmvzajHJj>g2yWc4YEi_)c+4%zC)-vfN(Rwg;rE&O%8C#iHeRAsdzyinc= z`^vC7>#S>YfE_TVVz-qa7GrQ}M1|#6*d47i`A!^aG`lhPYxA9}*qVQUy0UrpZ5(bU z6~+D#bgz@nfG`y&7mkEmARXz*O|}FA!Z`F+lnuWA;>V}G8WarepIA0K4hm5xFzFV1 z(VLANFl~*D3$*+$|VAm=)&)Z)15`F`V4V zPhDRcfuIvCj%zzdn4nnka7;dry{6ULKATi(*3yHu5cp~&*TJ%%9Z%cFz)O;jmTXf4 z{RqjdwG@V5%t*{W5b(9kU zt}ZTV_CMiQtrs){Q|7f4_C%1H&4I$r-ausquFnY~VM zp~^CA7MP?=dERFu&-z1|;xp$p_v|ZAPVBYcVh(?Ve3yqT&Bq>Im;JaIlhADhuM6$*0$JnchSn4sl z0#EW1Q%1l^H;7=!E|^(!XzFM|8a5Q=Oc;DZZ}S3lO|*AeJ1F|#zYyW~MraN+Y-q^E z^SyD8k8Gk{|8yT&ni@}=A@821E%%)S2fmd2ombtm)k+22fHFKZ4Mtqdc;#|2oF8qp zb_tNrZH;?7(sYEl!w)(M<2$}#$e-?b14U_4uksam5K{YZbvcJ{Fx0l0Z-u2-L|Q77DtQyIfmppHYz3;wuG^AqCGGP&E7QS( zj>ppeUsC|0@-_rnbh5LP3_%xitB5!KLK{BywZft^a=nh54nDBOFwMNi5UrN>Q_-n4 zW$V&nuWhEAgyn!<3+E)#hC+g03m(D%PDT}HHU5fyU3`78H$Z~H9QK!gNw=_UOgZHP z39Cv%5<*#QawW3dB43=8S`?u&( z{JR*M8V6l`t^25Z>VMGk@=9+*X$jw%&2?|=hjayNM4hCx7r_gY%npWHna0cpVaJ#(L%GOkyCsxpfe+po_L zKYWi#cQdi$%BV~<5RbjqCuwK`{Cl8UF<>+zQ>EWpCS8`VzS4rKVh1#s6IEp>oC!+> zo7~p;K*XtdRzZ6)c!If6wYjA;D#V{9PAi>%d9g%0+5y6}IIsDBw)d62&u{oSOYgGk zUa~5Z)d_H)I;=MysP|@QM8?Mg+0OoPITdRyMJEK5|7z^;USxErNK@VKdAR>lyR6UA zy+-@9`r2IM1lUSJc8hR~ANf)h2*_voQ*rNUJcx(?(tJyA?**;o<20L!lfiP9VO%?? zMktrPb5M{UcMKSHWGh}7wgXn9(Btu$B%h2yrX)Iv&6o)9@5W z_1#;2cUt}aI^qo>^C~jc5zpFb{xSD54f?UaU!BFHxKAf(;AYS_J28+dHpt{sDbee` zd{!cx$vFJd&-guM&FrZ{(`)@bLGbCkzA*Pe0!iKT2%TbyPGYm({g zxub^?s(|v(m@jr0ddkAi8+?^Hx`KX1J#FALfG2HN=%x4N*mm+aZn0wV3Sk_sdWhEMle7KrN!yXQhD6fSNxyj!I=5mg<-!ZkSi! z=Sp_@rh#BJV`-$_iT#NouDj?hd8TV5yi~$JM({$Gr8HZ9$no!e>aUymXP?*@yT>?0 z(nY+DukDcC!_eIT6hkrn&K)yUb1`g(Ja2OHDM@!%O&rK+1N_T;?@&HfD>dC2@fGD% zW%;`Bd&gIr{MU1lz4))>Cm2(Rlw)?m$0vRKn?;$PMiUY?8xCXkU~m}Rrc32!wx#Q< zqEGNjypUy?%dj6}eS%Y?_b+yWLD-QScWjgHXR3;d{S;Z{W%>AGMwuTZ#vBlf0=#sFazHI z9R8`<{rib)>x~azIG;0yqVz7Hc$nb$P19PcY|!HbU5Cuo$sV;-HmPn^{6JlwhyD{XlQCnE1DjAQ`(oD;8QptVFr160(VU`| zOyBwQz4Uz6N;p|H8}S(G)R+OR<)Niv{kM522&J?k_!MAdnfr))XZf8$ z+d7C^`C-be=->NNxx(D5l(kYg`11Q>x^=qF(38rQ(N(1?sZNH!*7}OQ1gHhTa_qDs za$Hw<6gG4-_4RSn`SC9vo?2E|p>n5VI072yJj=oZ<+db5pD~6Qp$~hHH^03HHs(4+ ze6oz9;CYR&R0cY{l;P&KH{mEb#ZiK$zucui8NF4ib8+pr^4Gsjk6XaG;7FBb1`&Q1 zY9G$HAFUgl1>rSmlg02Nxp$GOmgBQ8;7^gj1}7EJby3=upzCV!7o&S~pYLB^mfvi> z6YYhFT#i`lJ2&@3d<8zG(=9}&VNQ7qW@N+3l-#cG+pmk29%}lmbyV4f6b}M$h_csy zwr4t%$Mu5I5l4L^skqYKzr8+!od1?r)o!QnK!xT(8ZXXNxt*dRG7UzL4>Ilc`~$DW zH2S#(qh_1@ai!+b^!#VoWPG?49941?$7zNESjLN~1Ay@La${J@7&djFKwtF30X5An zfA$3hW7*yp&>Vr3Et-;FmzEiC@%=h+vqv`l%qjmgtcXT>a^W0reQjB~GN|8;TZ;XSLutL;P>`%X@ z4#PA~-Okl(RhEQLi-V22O^Bp_4&Eqm9@zI6@O|dN%~>jot1JF26Y*lc3`wkVg-s#z zD`e3oMQ7>U5Tko}Fr3>{%eWq{T9L52EL0{lTuyKjMK4sgx@_!mBcU?v;>zzlWAh}G zuW>h6w}`25r_MrH+(D+qK&3z+62V)#1|Y>FZ*m5#K~k19NwZbr`g?qvhC5cM8#H{R&TnFpI;}>-kU#Ie)tTsxPo6C@KxkmaBhXug=!%)-&^q zgezV_6F9B^oX0z(ewinTEXE|(;Nz#9+2$Y3CaySeJ6$8+-X|DHsT8%0i`<%bJB}FD zj_Sm$%pM869o70C=ToscYEY@!3~G6s5%TtMqNW8|ONp-A9TVG?DYWX)w6dFadUqeA z0fQ6*7X@wW&ayzfrrbLRkGC6cTma&z1RNiU%Gr>czl!h0AhotakF!o;55y?hiB+mIOSm1kottat!K`(DZ>xVdcmy()CW!kr+?oES7oAKY}E94)qrg|@7r$g#MN=6ipu=vB_PDbVRd~87WUEx?xYG&`xygl8g2v<;$26kG}pW~ zxMx4-F?$?mS$JHoy3AsF@ialr*zh=w7#?C&L|n z1>qhf1sWcRFMVw0cnD>WV01`q;tWS~-mvF*4P^O#P8h1BSH(hVglft{EHlGZ%*xaC z_Z;KtJ-(!gV^OMiS?w19Agy3@3(aul`QX-P(Is;-@8paDDGhI4H*`>rRyMWs)VO?z z_S-jKxlaJ-@sFtWLys#|^|IacE@lj{sfWstF#)Ckh)eO{RlQ+BE> zL=qy}Fgxu{49TB?qD_+R6Ivx4^KR3=;}k^E^mb7WZ(RL!ACwFUSktX@=p;?YNwcxsVs*fT{2QxoS<{n9Jbc8pW2T^ z&z%b)$0go6rZvVIbU5%tTaPeb*A+2Y8vSB@A@SuU$2)txu_{UsaC`Z4UrBO=yb)X( zt;&X=015vs?Zx=2MqKl4-8^rMRK@L@k-Nv20a}EbM?SKnPoMFlTG<|21gPF1f|OO- z5(G)>mP^jd9Paian!*ajg4jW%-ROMVIFx~+?gF3D6RQoLdD?TI>^i%VDXa>*2)5m4 z4#9v4NP%ED`lPs#0lP7y(}2$|woBmtmFO4Xu)nkseN0PO#@Q;KZ=y|f86VrbEeKu$ zIL{<$qu{JOK{feL@ihU+SGeasvnoH=kNUpm>#mP4iWx1ux7`KmVT)0ed={2m67eMi ze;ahf%3Xakx@2&u=t60X;)aZ7s%R=y>h%j;4lW@JPljrXBNo2hXat941zsz3dnO<+ z`G1b;UH_RuQ|%v73&o;=#NarP95Haub#2$@23N&wCef`6j=Z}M zBItADb-{6;n71lU2?m*$EZhIM$%nVuZ4kkN?(Q_B)_+t*#dHt{U|32Ob&DDU8H*hP zE7#lq*?HcZQMLY0PzA43@VtP5J<6%FNw;pJ?Q=NLl4K*%kgp&yI;8-^XwI|v;3{qX z={duPmpOAJ{f9sSdL8D+9aX`pdHX6+J{8{^M4F}*U@;d~dl{4l8EJRl2-ufi7lNOD zw(_`h_a&XjAY&!pZeGTN#UH2p_nv#LQWN6Lb@HDyYex2ydzT_#Pgx5Gk*g^QrW=>k}cp!~m`CAx58{|xYI;xwIHB>1* zSWBFXGWtD;e!X5`*4Tt(vsTdl)#ihH6R91pgR)oV{ZU4E8lSki77zICQi!QjJB7=b ze;+Hxr^3~0aV&-b- zc}ixY*}R3lcos|L+zttIzwQhSEp)ayU(xgCLrpc+f6}i=;+VdRZ-QR=J$eHd6E6O* zmFALWWi8NB8Y0t~lUU(VFu3zO`RevCnF#K3*N%I6fm|5Pl8_N&jtIZooYUuTC*Yf} zQkI|rBT@o3;ceXe@2l_Sks@)FEMgWQRf55T|4tRKI+xI&rxi>Eu_)gAyCV7aggp)F>~Vk z@hE?ary}a_PP_>iefW^bJ7%d7v(w7so%=+4aa~%qPepA!#&vQ46HK&WO(5g_Ram&w zEu;c}WRCDoBuep&CVLtGda&cW_v}NB74zZEFTol^EZVB!H+|mXcW?f<5IAq(_)@^> z{B!h|u=b3Fyyi3v^uu!JbL(j#ji3E_m)`16@};FZx>=@k$NiSn zu#;qP!&fJ?!2(5Yy(d`q*YTSoqT7g}ZCJT)FmpjC{Kg_b$$3IY>MKN2M-EwSwohh%&r}V$xxp^L?_J-|ky%=kSgMk5><* z`M=2BE8=_ATwwn&+_Pq$l#9J)s8T3(pWEvbh-L#E6y&w^pUjLL* zHBj%wGM1Rj3LsO_;~_I)x%CPKhb@0{h5yd-U_$P3Cqtg;O_NYS%?qzWqgLu@W9AZ7Ki(QT`Ul%Pm3|@gyo4Sn*2 z_O3Z757J7%_xD#F_mj9BEw2{1tWTYdzt2plXQIlvJ&e`_%D@Y}p))?HBaq?4)pBxBiaPBpG$JDNOhKF6gN8w|>hNH2bpJ-!zMpJ&2S-t;)qmD&a z(AXR(3EAc)bZ0HOMC2TErtSl4PdTt5XASN+qku9{(us#&4SFfvi`cbZL z*qZb^61{wYYP!%(klqKU=&Dd5bL*~X3L0TsMBE3LccB1tDSepp@TlQE_H)g$nrz+a zPB6AUr)y`DNW#I;zksClQU|IXv>4}wRJT0Wv zw8BbRh~{q0t9&f~KI0&@?Dq(Gw7-5tRZT+lRiYT;!}aeRR>IExJc})Y2tt$`M~uEN z8$$BPQ{U|Au)U_XPiknC99xTYUCF&(CFt0yTEJLJqp^tJ46+})o|sj8Ha)-XX0CMR zJ)|o~+Bi~ zLNO_t8k9|7^x0qU5+$~v@nJI zgS=1iz=vjtTFj~m!Z>{ZSOw8&i3u3k4zpoz;cj7u2Che40ELoFM3s(8un&qSJUlMdVG18 zD}SXpi%jmwv(IH7OE|GCdS)Q;ACye`+$>Gpjf};$#^kbDOm??A6Z1{hbdEVojdxn! zh50nM*_z`{!Jtwa>DR;?ftCerTNaFlUsL@`w<=63V-zV$YeMew5%oe#l&=d=uC~(C z3Vby+jL+k>Ey5)1jRVz<7_K)XI)!ru+8fhzOirnJN`Mvk9a<%Rl&L0=)(G8B1 z)EKkj-lfb=0To*o58P$2X+|QvdqwM9cFjto<2wecPX-BzQyS;JYfj@YO#N5*2S-JCO#ca9fkJ-R^G}@}-+m)xrHQ)3;&weqV@11&-I@LbQrt$uoxGM=| z5LzF#Mu0(vQ0rTKS}eAvZ=umf){5HnN;BX)sLxnOtd-$-mqfw0h+BWBp4473$PYcjPvuoeLb zXC5v|+rmd0gYeXNJo~^xnXf3Bug26rkVWV+tsZuLY-?#&Zk)%r$2<20e_iJ0A6MV| zZeEU;vExKi&&Tt~22FDBtMh_d5JEFJ4xSy8EFOq1CkttCOB$d$uDglddSW{;=7Vyc zQ+DHci{Ri>aa@4p0{svMv@wPinF{W8_NY(h(-yoFh|KRpEOk5!Z`WOgCN;42jYFEK z#l`igB075X-ujml^$_&XIwX#I+Yk9 zOP|B~I44~(JWH+6UXZE{UoMv^r!0q^;#>=*nXJG5>-Ld;!&HbZ4p_mrS zFOD=NKpc*`hHb}qOygkrdcW)Bjb_4KWQkD86;(NyncpS3!>1J*lWn`$9+bTgMxV|^ zL<56q$wW;mPc51+N8luyOj%cC+ksJnbgE1Q_UH@26QCJLjpm877%j|AI5smptyR+VY#g~H_&SMj5&la0~LboHn*0cf{u zJ%SISjP4=S>mtkN8#z@eaF5J)Jo6V}4d(mvQ(0F$;V^S=B_9dsni+_wpIwcZVSlJN zBt4-yBtvh{KVh-=BW+ikI?`e)`HQRD!z$6pcf;zlqT0BJHf1rcbDTM2l9A>C(HyAx z+sD}5Ox@|-JxlSgMqn8YHRuNw4m9OUX2h~$MQBw=!jElxi6kR^ME2;8uhMm5I*H5i7<*87n z{BBTuXo08mp~1GPTL+b;>|71qo{dR{NhOZGh?H8}zc8Ql%#cd6cJ`{YzwU^Pkc}+n zrB|#BqjvVgiVI8Tt=NLDY6}*xY_2qA0OOdyJG8Y2>Mu^Sx_IQ~Z2(3)%+=>QeFO*S za-ZMhKo85YsUq!&<>oF72)Su$yXco!BKFIMWg*g{UQ0N6-o2 zC0grrN}Q|L)Zh+l1<>KCD@V{n|FX14xm2X`nVTGZDfjcWFa@r(>k+0Q9;nfvIWbnR zEze*par{IwPsuU*@O+_8}1Rime*mwU;=DWlDj3QLzK(1SyXoK0` zZ~ahL$%rv|rSWJzjE6S?c~f#ecP5u_)8g0o6MT27%!`Qz_@v}Lpn(-FTn9BJKKm8p z*)*h~yn2b0J6&K3>PmmLZL=Vuh(gW4>6Uv?x!D@}7nZszsOg6?Ct~z?=W3Sg?j@g- zEHs*G679l`=5uv7I5i;b752DqG?^vW=e3F0{?2IhL9(*PBtuT4w-_&nASM^|L=RM@ znhk~blu!W5i2g^=hYYTdH061nSb}Hv=^Z7Sc_YchlsI;1V=(T33Pb)`&N4OlHk}?` zSWZQgN{(6@{_yOXFjD0yRbE;563k`yd1gKuN$=wdS;>H$)k*YPA(>stpZeBUf>{lz zwUJZDCH_3l3qw{--fU!wF$I&-E#ei42lmek9oSsCt(}1RGpL?B6JtO<4J({^@cCB0 z>46O4gW{b!W~yTF0*x{|BbHJU8wBMq*hHPs6yjK~?lZmb9r6ci_|s)Zo#jppR>Znw ztt3me&%USf#GJo*k!mM|oWF{wRgT&&Wy?FtvMSGjhazGKlqCThU=oEl#F>1X5xHQ*Xav zHs;VZy&0g)Llv(CizY|Rn}hCCT^H>CVy=o#no;MTOxd;W(&YtfK3}_CP*~q4Lx{}x zJ~3TfU}{ht<}g(5F7i}wH#TqdPH||*J6nSoT&%qnPn11jD}Wg1vElNFoThcybT33P zCg)eVNGPT6_$wRdc_v4GQ5Gt%g^GHu*A2Aq-_qV zZb+B_2L;<+k;Cc*TQ6>xrievrbtdzvXHx~gSivf3L-+=D&G|EcRDlHL@hi??O5rS- zmpXe7BGvFzymW@cPwqMQUnfjDG0c#+ghu-`=)%T&T6C=*xC}b)ATWw>w)%wer3#+K zdw{9i**dFKGZ?F_w&r3l#6C=<&z&+{}NS2 z@s1t|nbERqmU@jan9|+3{T*DoxB$h^j+&%bYkWgbEI3O}Aap6#1Q&g_^_QK}S(4bw zB}HiaWP{F3*HjEesX>njg@2wx(Ja2w~jr08^_Q6wyU00 zpIXEN(i}$1->uvwVtiW|+C{m6cz5~F4DKePB0c1C;x_O&fq5n8J=b0`H{)WHsU1sP z8Lr!iDpU};vmg-mjU*?|nDzqifLntOjt7gD`s=HsUPept)GNd&ADY#Y8M+9wtl#tg z)*pI}K64fPOti5Ak}1#aHfG`Q!ORb{HuN>#q-_2@=*rl9zovNHRe0M9w|hA`HurPZ znKQI7j@>q>=jt3{6-w(BGzcq7`ZEbOUNn|!y=!exJ(O+TD^HST z&emwg9*z*z{cN-rZkb`Juo|7vOs-pOqY~vG)T>~Fa~oHa&SH`g9cQS*wm$a!ojs{B zC^Tv9_HBiYlE3lTd;iko9SbLgP1Jlp!v_<`!u^(|4-5uXExg+Rvl4Qrcgr*7PE^qF zD^`BxY^72lJ^nM+-=5ISKktLt&1)i=046#;vcq?F)se3(p;n_;pkfd62E#DH2Wkc5 zU;f8R1Z6B*e?}rQQUW<7)rXPOZOPc_xQ`qoWu+rGZmVH~K$JsT5`ioJeNo`3m!=^Yv(6j{3#3WNv>gfWP3tqh)aZmt$w!9lvp zhE`RN)GydzpaEhS@S>m++PaJToYC}SKg0k1T;xPfi6&@N6L3z6m^%H4`kx6AZK}@P z?mko+VwzRS|1+BVuj)?qGfbWIORp;%*c3o(HQ-^gH44)IziCqrl=Xq@zv`qV|1*KY zDJ-$S@mpxkS0X>PLJ!^dKf6HhJ}bUNX%lTp|8pm}!Qs)29$)A4v<8Oef8U43EvZ7? zsFRlewhJJk$en@w-=`}%QN?L2ZAslDhJHtLm*HwK7KXNrld(W2ZxwEy=U1!?12 zNb{dN-#)yR(HRqYdH?5>4hu+@0ZHkk{bg_Y!5U!fiJ#{Gp7pOV)v_D$Lc3{N6~vZI zX_UizLn|sR>HlwmRu~$IF;PF0F<%g%R=cdvl;MeM>g8+x|Evbj$21y68eD$&>=gb> zTs};xs@#;MPW}J?%a7qXHdMHr?*%^a4>GT%{KIZ#t-ThKV*CF!Wx5Fgbpv;!_7K<^`<$L2Dlpcxt}yrz@DWyHtk-Ub3eK$S(|MnEr|pRspoLacx?rt z6~df?UMqcwJa#bjqawbXftTc#P~`tfEG<%o(M=gMpy!c;!p$~4~Z#Q z97=UNQC^Jo+`sJatTYY_QZO+_*QLBj*@VE`=B)Uhpk$Q6W@X&_51!2|SuxT%cU+1g zn|v(-UZf4JzcasuZ&)H{h1y4Eb*he z3X5P>e;ix?h_Z$YW{$SAT!~2Mwd9lAFh1LCxL2EXcX$qV5#@?-W$8(C zTXZUswL6}`RNa%na%T`aczvl9lwqCHKBQ59$l^L9{Fx3^mDpMYqPLt+CHqk4p?KvA zO9^{W+WdYXePZML!Y|d}yzEMRg-75qFp3K(8)#5M&f$YT=Rzi9?_3~+s5X{U zzyvd^+FSCluXbK`+8c%rf5Ad;!!1{bueg`R=vaf$_2Fa=fim!Iv6pt$K@kZdn~D+b?jZ|U6*d>|j-d=OqFDplxnZRq z7iQ($g?8`czpLjV^2$F>>dFkSpPM0fJxyethC(S5^*2!?iMl>Y$8MRe1#@mJx%Zt< z6uevvQf4(W5sV?r;@WTD@WQDQf&+XZzuN1kp(|_>M_ffv+IlW8=v`)ympt~#0)h`2 z6T%i?8gmnfz*hq>4YsEN78)F5y8b47?bLa9AxFgW7kX{?as6v&{Zu-56nE$|B-alI zKP0*ZZ85ZMITj#{&9)~dwv)^k^$8ca`k}Zk5QyH3(N)Gmq@TU{rw~2~)Z123v;od7 zAWz+R{vH?~Z#bDxSoGPKw2<$3h$1MV#*Mjf>9ejf`@64TdhK-h0oHmF?WOkR;mq;; z1i$z`ZkanyxHCKEG2hM9fL^i7(kwtxmbP^hz2!Bo-s74oC`F!SYAt<0{E@aXkHxTx z#}S*?0oMoodf45c-gUzy+iRO?G5&{tfqs2`tn~4FE|{+WxQ%q2!Hoy%z!)}|`Cl7Q zA;oDniSNkfWq~L0!hM%*XXE|M9u_KEb^C_mWph1|F|3P%F#tG@Z&H+DkIKOrv;8h} z{OAO4HLbvRwW0*?H0e@XSKJ2Iy3D$L`1B+0r5ShADcbYSgfi24v5)?kr(Vbf=#1?Ye12NNRzr*IRdydN~908Za6A{DSgs#*f` zW)@ND6hJcf#izsHa_w4Cn|HI-0%eouq7gKu71W&YG*>R(cRH$!<2u;=JiifyFAd*a zt{gNDZM&O7pmKs^UXK$#z7y`ND}io!#%+PX3CxDr6l<(_-i2axR|vk(1ItytqmR}E zxQOAvZDuismp1Q_1%yu{h1!2%bIs#3w6Qr~bKDgaK{9efeqB$`>zwOsy_oPts7Rky z&;?sda3GHm%m{?F*`lh_f^ioe-6NA@gsyl>=PhBO6W4Og;^cVX`kq(!8bq7?!wV8z zTcaLn`lvYHtAFo48^TmGzcxe(6=}#{3vQhWf|9XDzXVL}Uk zvTC#Zv^#Eyqq+QxI`~8Zy^COER{(7jR9N_Y(>qxS)B%Pykoyfo5JPADaszIa15#@5 zuz>$oubnVbc%o8$cDTh~Y<$=K3-HzOt>57Jbn?{=eBB?OpzMmlRm(T4e*1xZAR5|j zE@OB%?Y(;f2_5!wsA^(Fa1H69kVrLOO9CKJQ1}YCTa#mBT{|kku<>#o50m;tLCTR6 zP8^!1w#@>ebp@Sr{Ct&G4c3X?N&6#^$PX?4JqBG(Rx%s7)i>tT`txhN{li>HYbkkC zjYfR)^*&+Xy*^@e^TB?X7~zgXYF!>f8PM#U&}5nc>S<%7zmx)xng4f!Fpa2((Oy`$ zgy#5HbcHn|@)^^+uvZM-B*Tc6!k6Z5dmmi+H%9s_3JV3yP}%w{V9}_3d@mY&`?YY4 z&Ue#m_UFy5VRsvn?8s7LK`OQzPNsg-B_ha*By4MXS{3kWf%PwPCGUA0YkqnSqB3#2 zRpc$WHph>n9+-Zig-2eNym##e@TCX$kI#p&Ut@FIp!rQ%^e{tEF%<&?KDuS(&$s-P39p0leROiyDHSBYJ{2=}4r%MIYa0l5aV$pdTA2ipH>loyE$UKh}J z`EkJWYpFGvjpJk$$Ib{`;|!fZ-Q|pp`PXI$5G0_cmjuaO^VY28A*q-&NkKsBNb77V znC3n}6dx$Q;>JKEH@W%>wXbU!65<$+xmdyhjL+w7xtFbsjUOITynL*h;!DD9_c_f* zyYEH-4C^>%Pf^*3ToQTN^lhD*Y9j`FWGD<(o>4cW<;sM#H;A8j)ayHVV6nFH>l&c_ zf>^Y8hdC82nN+E4!5~6!7=L`X38-mz(uiSf>9xn)Xy+*R+Q+%2*gb}ZwcB!qga!$E zwp7XDPYPn$0I&8?J6c|6`Jh9sEdn^o(v^9ay|nK1+gFZFyJuDXB zcok^KE(Qm%Su7FNJc6{1=A5E({Nj#jA?Qj`bC^5iA2> zHI>ri8-j@+4k8+SY4QCK@n4ZGiALOcNvzrB{qXv}7*-{vstUMF8C3n(u!iDGH}$n@ zst0hD>Mi@F>tDsZ+n)27?yNE{dj}s0yJ!m>Aai`OeP(Gp8DCe&!6LpFDU|Dyk@|v( zM}q%9lCC)*ulMa|u4OO#iOaTK%f?!+W!Gxi#)e-a zT%XTXUX4OK9(Li^%;QRayQ2JECX(dZ(JGy?*(Ir#X7nO@YijiO8xjUq`Q3XaSI*)3 z#%hOeoCp^pFf~>>R-}lV58oVRwFJWgW&SN22R3jYvLrDJi(%vyPuL%c`JP5CO>~bb z*a`H!O3Au)-00E3H2}vcIF*!fsXuL$eTWtet6Q`va2e~6w#;`~UX;K;g5Vlv8+1J> zI2D8Z&YjTXi+Z6EowHa|hI@7KdygZ`*x*g8Rwp!*w)6B&AVX_5bo$<~s}sX6GSS&@ z*g9PBzL@I72Sbb^HfW|7*FpitJI!}k-ms&+$xXK1U^6v(_$6~=O;-A`b1C2ghw)K8 zGkp4-ZO0Z89>+F?Wv!d0AD?uV>w|+2OKKgi&!!FqN#wC zb8R8xjeRANCg|6{r!1+9sdhp*VPZD&w&y5eNtlREfn+}C&aE6A_o^m2hwzx!tj+0n z)G=kmy!cgO`mjt0Wx2ieG-G`%&H*mDl$)ufbg@1)1d6Qe`N=ImBz#Ju8Ny8pn}LJl z)=L*alV<)C(JhOS(o&S0V8}dngc768RuG-QYpH*c_ z^%PpWgS=0SE^pmaGAcAB@ska#&_fdngUTbG?dwQ632)u8P>%x&Q_gkqM-!?m$^$i$ zHx+u@2#MMqHT!gum_qg3_TiBGY63Me0*(g+BHG^RMRBz>fk&}x8lDOF9ABqTDTyb| zq!dMp;Lr*du@gG*>+MIVV%OH~cYl)LV1%v0y92`|Ou3oI5)9hD$zBHhL0E(4GVYb% zD>oEN+g?_c*pu=YU=%T|NP+F7`ZEnP0iG3i((j0W-^g4wbj@~Cgnu+*>K@>ZH&4oh?gr64T`6nd!*Xkb)>k#i&T-d36`7xr|XPbXMP(89h9 zjoOi)F@o#O1Tv3JdphzfFym$4z^fCy+Q&;{>-^M=kd@k08b$i8Lbro=P`59!TN6-m zixWBAzUl-H-t=n`f~juQIJd9+8{*3F=?)!YL9gwwi)JI3h29Mh`c=deNgj>6n!yl6 zRqJ9bt?t%*)yxrF`pG}(WF(ClYn5-y4e;epI_|8wE_Vww7cq4Ut5g5`gDD^IUyAu$ z|9t+DwHkWKLTYUrzr}IUb~u}~0q7P8E_}cA(wCEH8xY!s7lEGb9zTkB{_4azdwMIu zy*Hb`^8O3(7dj|_=4;|Q?getF_iu+lvW+s|HO{nq&@iwZZZ-94<3}AsF5ix4yH^fB zvM)HlF1oB!T9t?RUAP+)Ge;z5%CktmzMW*HfvPd!@-OWV-aP&^e`!y5WLN7%b)IvJ zXAq-Qw?!f+X_lhkh>CI$>3q6jgzl=JE(28H@KqpSD>|YlAW!i(uQ?2}S~(g9lpOEB zeVzNr+qJLGm}QU+L@vfGv3LUpG5V!>w3EI*9!ThiV5QFF`m;5NLz!K0o{sbQlL1*V z_BeFb=j|3_L?rvXd0Nk7?*XHt>UvYkVgOmNFd0)hugUvADAh!o4AM zd6kOMf#f(9*ekl*cz&#hj0nL>RNDUG`)?azmBkr0tXABMa4y zmy7vs-AVqZG@T%Y~Z zUI60zN9sOiNtu)123fqMq;vISrSJ(eHx*HnnmCGRn*oE{evycXAYX=W8x=~5w1P$j z8D1KB*BEx@_k@tZA)`+loBI}Jc0uGcIVt2gMACfEZ8x)K0*LGG-Eb-6HPc4~n-ul* zCvHR!3ylHU&?a`lE772m7;JSbN@8zh%|8cp?{CSWqEGT@o@s)z-%PJx9&B|l5z$zK zpZ4Neq`gm3#RD-P;}r*zTL#@fat|7^K$!G7n^ALx_GHiq$AobOjO#5QonmwvwK5k$ zK85fBYufT82Co^~%^;Tc9%ht;GL4)i&Uhs;FIz_*myrX);1e4kiJ4uz4qGNK%OF)= ztK9+`TxQiCak~SPl?j8r-J%edjDQcT%C-?NAHFaA>+yx|t$Vz-C=5wHaVPbJDph(o zJ3?E|DNFv~l{JH&sM<8DDgQ4A8)0Ck9i3w%I8U~wk{o9N>!5(f_n<0GT=NNIVRO4lTGsr%pc9=Vtpp zLbBcC5Q^Ktw8#vLXKSx-WPd#mQL_=M8juO^S)z%a&h4nak0kYPsc-Bc{Nm)p4TfpR zZe`iWRdQxV$jmCQvLfoRO{^8{0Kt;g2s~8+SPn`6#L?H;P5h3YVp-MX{cYNT*)UXZ`*}@?p4EO=$`H>NJheu+6ab`0iaZNFH|1=-&e9cE| zMd~PbH!jo3s_{nozs`K@7LSP$lkt7a@vI6`)hYQRk-?iUL07~NHWD3`2pbn0<}OYN z5NW?ZVTF=sbW}wrT{$h59a7@oG=6S6Xkn=CWKk9*yD6oTYB=L80&6*|!sm#yO+$zXzMgMr+%vx`^|u2in1I;Z8_Bs1QR>!qkI-Dg zQF_`TOC#VoVr(Wg_as* ztNGwmT*>7Kn(vS~2IZKahmH5o$3W{0rbiL$!22UHH`SLVmW|}i8pKH!!sSodS)K-SFOD@4fan^nvrcS` z4%HZpX%r<8gf%>Fmwi&n7R{=s_0ZNoLw~{&ksN6E^X!r zVA0AQbhrx_`E}$3$>#dnO+He?OsfZ}S~YVd1g6aHJUaYw|A^N%)@sFlSXXCXDlJ8b z?TNSXwlWv+iq%_@|C)4%vGy7D`+ei8zwX&h?gIUsUQ9N#FzSP@RdwKbgMXpUQfEGH zTtSF_hs%e-VH9!G>U-dmTq7jVG#^Nf*4CYtwN#T?tX8e7`}Gq-$j00Ee0Ur@VhTxcYz7fyrD0>yZ!9e(_sJ2hcX9*mz1U4?tMm^e4t$i- z7%0ev+1M+ZA1h1#Oh)|Xq;KXJiY$*;#IHHKO=)K2NW}(|yqCX%RE#2|(A_7?Ofl8t zD|ezg*T-VVv-q!2Wmv{^1dE6MUUl&Y(L+ZyN02ZB!87Ju-75W1Q2TQOVC$ZkaB@2I z%`TVWXJ2j68W-BnX2lz`b7o5T*u1@+_Nq72ooBfKV65k8SEyZjJ4m>4GW{~_c|*Tx z*8)wf2t2Cmi*lgb^*!(Jw%Co95X9*`XUgcTz`wx)gcM>akP?W$Nw;WLH!PLAe~wI& zqAZJ>bEZMtf2=I=+%`+b`;oj6(&UeUnH>--i`n3xc+cwN^QK9?2On%+80 z`#yrznLg^xR(=`wxyWa&ajb$3CRW_7dUP>;G-?i6 z;JyPT{VM|Li!;nealyZ2xGSI@qME8N;9LW)sl{i-7nz-@&bJFgRJ- zyzT)sxVOskV$x!&=J8cfv-eRQ{4EwF#3{G1JeMfK2RsNY3Fk9d$b$61<&& zAducI(L>mfKbVT@H4v#=Th#_5svMq>M8j*mEEyDMp-S*9b_l&imTVva zJ8byFU>o}5pb~G-e-glY?JpnM-g0rhxI>pNAH2~f_9#$v_cUs$OS|(2dC31BmTS`& ztk+1?Ph}z<9S?JvY+1$Sy*aAVm?d;p&~;GE+&$B-N&;V*Uxjx5>}h1B91KjrmQLrmaz{aNS1S0wCs zrue%d?Uky(!8SG(rw#9!-eVR&#FtGcqgKqsLERl-vs<;MP2c-JS7gGry0rb;Azq}S z|HLc`8Tb5L(jMAAJKu^SDZyTgPRbU$N4rf;* z6XQ>})K^bmnX|B=dQw1cPz}Q?T9rP0f3{YgS0!kk{j$;+A|0oqDR^_hhbnxski30@ z&t(>zd~Dqo`qWeY-t7y>HwM7vdbWBcN`FaMWrnE<{|Vj~YYEnq z-LW?V4M(HRpv*`39HczDf>OC7i4p9!G|^j)!?)T-!SIK>Sp?L~RT&ruD*#pbqwtx} z9iFksOu*}=)O3(DO`m@Sh_4yF1nUGqflmf{SIb-_O+)^Ir~6n>3vWJ=rjnF*F$ZJ>1wu;iZ0xgX!A-AjUZO zSQB0?&shoYuj9r;R7hsN$Tf#BWO1kDR;#L1{ z%qEX(H>2L~VOS65Tc^BWcttMSo&))MM|x)j#VimpG}D)c zXF|07dEEQQ+u@Vp{o!z+d&Yd$YkE!Fa&-^ILCx6^f0$G|w7u#=VIqqrb#F0`KUZ!; zq+J2?BT;pp-f&H->I)9bW$E?cS$P?iW+Q>UjvL`NPXid=;%J6ON)J@V(!N~uz%!%o z;QV+2Yh7=~ukt?}$dUgYMCQW1d`RCII{Pk{2qI0T>xMD3V7bz0zJoKhYp`K|*@Id- zo?rTy-aW{qyESx0HHxj+b~t;|+kCYc!cr(Jan!2XS!*~@8Hy$ z=l#=EDs!fRu9w!RzHa}bF^XfEt+9k(7#w|I4C{7s^nSsA9{#lgG^H`DBYQJZ-B<)pJycJ!ZFmL z{vTMp(PG{0)( zs6F$r5%VH=Ds?OtdHgu(LAbji2VmPs=BdL!kBcvRAiV>*K!vo@08gO0fkvhvH17U# z#z=4NvrTl+pcNfE{-nF@-v=6uShKxDMv`h27$IR@*YOYzvUmO;ee_%~7ys}!SH?{1 z>5~!uPU4ez%v4u8cKJ)!%UDtAv$^z&rU#v~x4L_j=^h~jP#h@kZFXk#2I-jWUD)i0 zZB2h~3|zU%zxz~X8!|x~&cD9VgQo__1`A6IlO2>uG(0E1_*3=W|3SfMcqHyDVm#{O zKgDBl6QZta3={x_T`b{yE|%VtZHv#LcO&n&moYC^WQ#TEVa#QDG(Bj%|e_U8_548M=^?bi*bH% zxBy_!{eki?Ke9Yn%mWsV*-0~!ItNwUbR|j$_pw-29bFACbq%rB5QZ`L%+HXr8UL|_ zBS7IoYfHjhRC2F!NW|!n^6|@tyJlSBwTc?BpN!Vdp!dJ8;8VC~xwi?gQp=g4a!>iB zCSK8#{7D!QTx_z7Yv%F(AhanF6Whka%?uZ=@{k1YlgH%ai#*4c@N)kcYqHl}W27v_eg z^B-j3FfLl%>A6W|ocVd+TJZoMT>L`cXxjIOA~|r6W1Ehy@67|xAJ@1$y~&T;v5i9M-tZE5we|l0tMHmVUp!=ri}!F!qcUo;l}`v&G-Zpgp_c(jPrBxR|&HiwMZPuOd@y6vEQBIJD`u8aO&9)gKO@9;=%es%BSloV|6I@XoD13PGW!Yo{clKaKWz+&Cv-Guk@FBe8F_pZiS_(T_U4p{%$zg z1+%$7M%dcJ$UAt?6@1cdGEukUUmaoTPteSVMtgc9xZ+9$cQ)}5S%wvi*>HK_oEw>6 z#vLo%1#@A5>S&C))A?7gGKEM8nUzXU7FtN|TYY+aJ;ULf6-5LCYw&^|{do{0RFS}SnQX%`8gcrLatD!8} z^lrDn^&3(v=#|nWU8&}Ne;$sn4jW!xnHhBc!Vfu}R*nLSb5w zB?7(?oQJI?414hgi?^|m`3&cDJ7TxiIoX1}Y6wO4K<(=hP^PQ3G$`=ceDnT>Hc9dU zTc#)6CR$2k%nAqS{Vux~RX$M`!LgC;cXqS2ft}}q>DPZp%$1H9uI?q5?*75f4NGweKyAm{|5S{M z(#fY$r$Nf>>K#g;+mk5x6j`zEqQpAT88Gk?AhsCU+18#gUD^~;_OsUAD-pGWd>%T@ z7wKEq{zqPI_-_I(l%OvkjN4E*R&Z&f)iL)NNGxKmv=FKumaA-=H+ruB#ZH3?q*LNY z@xPF$!R7|IOgN@}%j{-nDgWHewua6c94o(Ack}WEIHuh})_~IY_!)<-sU+E7Y`@In)!yGu3et4&-6X`7fGHy1vOKnwnTg|s!AwC z5N9!u3t}Hfnj%t}9?~WOyH|40? zXwWr8^Hc2Y|F(^Ry8JCQloPOeyy~wbJ2YaoD_Cy9VNzPUB~vPT7CDWd-B6F1(LvGk zOt^MQQ>K5OctYiN0EMeWmfhcy8d+o+@Yj*(Y2|`OMJX!(+*-waRA0 zW{LWm0u0HyGFozd*kEw%(svlkw?J z`niW!lb%hnL8e0;90ALd^Z+BIO4<&X99Cbl*v{@nclMx`=c>p_oS66X_cPd@Zi0RL zi|hOaO92@Wata%oSY9R8Agdvt<;Z!l5n2M8pb8C2L6OZI3Ih*=H~Qz7<$m;R=Pv_i z+LIuJDt7ld?h)fza@Vx}#VMXuL5qq{1SGHE0tS`#=U-IKO5YEov)gAP1xOk3+AHZ zq!Inv758PQVk72+n8s3+QuCcMJoWnYW4_Fb28-PF_t2CyA)|~R$qTd%B_{28jHpU? zHDB#2XOlR$DOyPbCC;g4$q~tPPc}sXm}7`La_yFU+wU_chZH16Q%>YkoQFLY z8C9nR^4Hd>Ag2sqtW|F@x>oq4!%<=AF8M$R_46K%6vT@lQ%A;~JrWp#Nwe)I-iQJjj9~bc_+TV#SHh87S z>RHX@W%nW&(9-GjYqOp11#({;l@cS>RiwZxK_hk}O=!T;6Yb`+!%r1MIF8L>vNoVR zAfNq%)}6Pje@^^S)sFywXa^x!B0AA=6#Ao;mm*o>AeNv8hN%|>L62CDYgn(kp8^8j zXb{oqij{Sf845NhR7zkTA6#=>?UcnKdf_#^2leTD z2M5-pq<>bewZR|y#UK-NTHy*0V}Ek0n-!z)7em|IyTCO!Vc=R{#!ozKPL`+Sia-r6 zrgn6rZVVzLQUtLSY|XX>Bv`Lqlw%JM%*u#oiSbxf&I!X4HZ)VFD#ayR>!SG}w!?M? zRz3sk%SeD6hjSa$IQcZOy9wwPzveu7` zNF6=Uc0P@?WTPydKzqKseeX4_N!$FsI-z|Z*dYQPN4mShGgm_dv&y$t0D~*F;LX@@ z+1HLv`kHOsvWZ6jQw(ydA0AJ%>)v?d)6^z#Rg;=0p7wLwyDI>$a8J5*0pHF+U=*pjmRD zjQTavx*n*kynfei5neBtokVC^qq+I?2E*q2qtjJI(ghjAsV!)J3dzR!=3NMX=s8XQ z?}jEIIg@c6jb&%

xbh@2)E9@&kPqL3`OOkqe!QD9xzp;&0QF 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 q65johNXLLN zHdy`e>-)avcXpnCcFuF3=l;}neXjd+zkY0}&3uvfA_WBnv(BT3#uOA(k>`&gJ?;5F zLK5{G6qFPcIuGxg2G8%d1?7migfu`FM`Uig;`0!xVAL$P#sUT0flptL{w>96+mE;E zk!+71(9@j%u7@yuP4Cc?YnxS|U67RTy@K`1U!T~K*O3|VBa<@5_Fu}*FFFchPxDfT zbw585Os+ab7?`FR7we`8n{B_ohHB$>{L`6S@n?^GQl4Lhtlt-9h&K41x+4`aSm?;% zT_?#Pj1Qba>r+EDY+4U zwj7h4KO2p`yWOR?{pQA_)86#ZaUER>QL}Q>GGn7_xQW+iG|(`7ZF{}j1T~Z=uQu{) zV#1+<%Jgr+Iak@FnLeEIZQmAL=c2Ttk3o3*amHPzY&An z)k~wW{JUbYuIjw8*~3du!Tt99_Lftl zR^_o950yCPMcO@N^nV7&G{ylhvr9!r;ABAHE=Vds37Issml3aJRg$u%^euF*Rp;x z)B^@xIMn)`-)n3Xk#>FQf1L2n@B4RoZ&(XyrqdcpUa{T~v*gs}Zv52~cyXmUJ`jFH zDO192B)ZKst>u0rvvwwj5sEvw;v&#|{Fq{OszRzaEnmH?9-7ZF`5P%69424wXg(FXc+gR?K4f1s)acq=?|V<>wkX%??0%md zODpy>q9%D0g*XTjvPVN_S{)5hIW?o7P0LK3=o|k9i~K>~WI}^c*ck{Ju{V?sbMIeC zoBZ6*4vG`E7r1yOwN&yebD&Pw>z*^Z+*rn+_C$g`B;t%GK0m5RtL;;qK(TJIFl*G` zigs?gBLCmJRcN?fcW+XQ`bV_H5j~Dgxi*KAX{WzfRxaTn@wRkW2%jl}zh~98m ze|9#~Eia;X*=4DmG9eVn%_-u^GUhs7-fcAh`Q;2HA=t$XCk7tU^YWQ z9YIJ3?lVk7wh5o7Hs?4hgnDnc;f+fqtUl$mhF*SFE9lfxrhEf5N0G?#)PLWW957=| z>mF0;HisxSEps(}75OhjKHu4Rep72fZib{ph{v`a^>!|YByex|e0}MwEl;y+JR|Y5 zb{;gd7x=Swz`A}JLHrt&-@NR{hmf}9yLIwi)B83dO?b+-nEGE46}S=t?d3kioGCzw z11<=qu^fdT(?~(Uiu00j5OnRhDQT6f zSBTY^RGlU)7xRB1ckyq?9j1M zpjmsEYFr#>@_#WKts6=t&Xgbye+$|lOtFqwSASIS`fb_>u*SVJ#VLKH7-$4}D_iHn zd93SK$;%StNu+k2~Wp_N}LfYK0KbuD2uj;C% zOcqMVh2^q1L{<;XG{uM^KmqkGje&b3YG-JUJn*KU5Tokvx1cg(R`lq%Z&c#{fh+i_ zU7OtVg((aB#$9{h*;$^o)d zgSeojpY!nJ-?;ieL;X^8`Bq0F;k{OeK#ESQ3vqf}x@?V)ay?_(%|E!Pyi*eWDPHN9 z=yl>{;;}A~i`|j4w*fyLnoh8J@qq7BQ$(@u-t{!ae^BL?+7FhPehQRQ``M><((C?e zeb}Dcw0yX%VbPhOq(b@XiKn;7J%U(%&@)C-PSD@L{J#%T(VcQk8q=yBwnm1|0|1`Z zK{k~^zqG~c_x5b(t=nkaxF-^$!|5Sj+ z^rz}TA`*fXO1B9^&~b{|-TyrI_QYIb&mf;V_El=*JLdK#sTy?p2+U(>W9H+qeVOs? z|M9F41%ZbR+fpH}u%1rFSE4z^7qfq9ZZl@92tmXinDEbRg(7EXWf?z>z}(K?&3XFs z|9iPl`K+wr8Yu{d?^#HV_>(*{Y})S}Zcu{h0cfeKDmc`}^F~NDeNLv~8X>h6%o?w>QYl>gnh z*!exyEr}iG*T;##HFKCxoza@p)@8Y${c5&>0MqM3DX(+(O&#(A)DYDk8=tb<11H$E zMS; zn+qHn9;)pPmwpVpGrTFzYyMjsR{OMqj*L(d{Z465J)Me6`s8e1SSv=TS?sy9JwLSJ zfEp};go22K4?y5b!kYF{tH?6c^e+IZW~xgBppx#>(A=D+v|}4r%;Q%M-?%zGKYhDu z;SfE_!J6<0_==K=*g=82_^QLfCOdvZ#+NlsP0bt~cRd`&g9B*aKeo_K5>ppluAcmWZK-@C)z5^$ zw&Q#9;WgpJ{un<_{8#tc`W#?xIqu4p9O0S9IxqiLueqM^4af>1W>{%kv=!?#+wd1M z&&$VT9!)#vu2oDXO`F#aC{gfFuPw|@)-)S-6m{kawr#?=;8`yCoghao>yD=P0E4V; znH7fXiRn>8H>G%E9xmNvODEix+cxdI8yopVLo`pJQ1aoUa8=1?Pb;{i89J;oCK&6g zFNN@Vc5MgpW$g700X_ZhrX_P6;%#*Ri|{~CfbinbSiY=twQC=(5r}5e+2Z&vRlJE zh+j}<_xaw1{6+_;OsdL+GU}ULea?>cf4P@;t(vZ^#ifInO7qq*bmQd_K9{UKD*IWR z?1pY&Y3RM`vy)PhI;&LUV?X1tHO=pEN4>W*#oGVNgU5me0D%YDw7i_jqF0cKr8?fm znrV}EY#+4Ttodr{r7U?n4F(l34n6erD;I8F%X`F!tA1^&Vtj~`bRP85a5vDmkKIW= zFdMa#l(SU0yb==}Q~7(lWCXan|4R-8d`7Yg5`$h1w!f^2RdvT{!kh;Kn5wEut_1I+R5s!B9!3p!pe0nL6VCFCme9K)~A z-rlSd2-RA@l!EOFPL`}H9KM^!J$6gxacl7E)2+xihYV|(IvpS4&0zc1U+!*&=oB^D z-P(F0V)?)zM^i^&ytJqM$&;)=rmfebd9)m=@B^abW@H~GYAasTuS?-#5tt<(vYV^X zN#IM(_B#{ge1%_->Jx3+8Etn7Bz{M4N6Y4X)A}Y-SUtJwCAgF$HGQ@NAy*WpLU75} z@m%8H4X66Lzk2qfzHn@oKI&jT3~g}psBq$fo8b8F{cjo?7Ds*^<+{a^?@rgQ1mSLZ zfkL91m*!?rjkr^+N88><9UW|Z zEO|k@VqMFGic~%|V%CLD1VCT`OejBHev?@s8E`TA(<94msVLZ&O^v?3z{4Pr;%dFt zg2I<^_(qm^&73ZB`jlQfIntV-1)1r-({=YO5rXfj*$_M>V4Nz_&xs#}C?+^oEjhVp zT6cE+$kVlI`PG=cU<9TLoe!Bv85o}Z;f{W-EI-!eTnS*(S z=6K#1`QlQk00e3;gpBXModx5R%tY&_MV7v~#5cKoi{-MMPLp0i6l?a%S>MZJP}j&@ z+@RUQwZUw<7-F3=YbG|y{bWaVrRFAG9$NC zUqX@2j?sb1DBK4`;j@_}#~t6(2=O?WFlA7a7|EGjuxy7LkB9l=cJheL){b284%%Y$ zKU5Up(#G;87Dc5=4j+xA1mA=$kbon^wNGU1wl!e!tmYl_G2ISxome76{qS{eLG|aa zTYX-#SyKtoh<(^TWDM0D1zds3_f`B6hcI{p_80Q%9CmkrrBrnzW5UPi&w65L@6|eLZP%+ab+s!hJ>Vr*QCIg&p`e znXpE-VX=HaUip`^pQoWzOnd)TUa>ZTPd@WuccZauq6q zDfN~rIErFcW#a)i8E^QjF-csTcSpPzN#!PePD~M0!l(D0F`@%7nVBGo{+Tg+Qx$?XVkA@M$^% zSB$!C4LckEe$ML7X-FzNuC!N6(!BfOhfzRaa+7yoI`SYp83~yn^3@Bh3dFY8>Cpp3 zeqi<_Ao|VD?=^eGU|d^J`5#zScm51LbyxEZom3fPOo@PNeDX=iv>u@9~Wyc03;9+Q+O1JZ;0-FDM9To>!iNxz(+r-Te_Vf zxiIG4jqcD^@6#so;fWj(z0M)R>n?ga3QFoKl{6fLE~q|a)oNWfvcuL(v>xi^>q6Z9 zv+8yJ_EnVClQ(@YBYpAjTh%VijxBV@!C^<=^y%kW&uy(tjmvk`Zi=1F zHigT8AYJ|L72(ta9(60vQ6Au8kgu_sX`1~h*#A#w^KQVBonXk)0v)L=7WS_|a7X3e z)#}!N6%68S^G7rQB5g7-XF=lMl1so84<_C^s`TewCr)`(rez>< z@=|9DZV;Gz<1i0QiUrE{#=8m90Y%nKh}zcwfwP7=PgOkNSeepOIxIPF!p|9NXm_WP z<4wz(u72zMLk3|1L|`r&?grZ!97H!hv2)Af#C zP=4zaaF*WrUQ@M#H5W`sP2~?ou;v5EQu8#@$R2wHJcj{KS zAkT}Neb~Vwh}6FgCGY$q4(`Dm71NmY-Zm$Paa)!9yr0;>68thNt!G$X+KRpA@lw)= z$kSIXtd}e1`1L|bA^V<3MawdibNZ&2Ld@Kb9QLkN`lyilBaf@Y7wZ(>F0)(KBs(Y$ zT2X-|EJN1{HAZmD_x$Y6yWUrJzM#9$_SK&Y+j!iy%_-^bbX3|}ZH0ytzU7BuCpILW zHUXJuItoorBeuPRZ>Y#od7-lxm_NIVwakWf!tARz2XBr{{^i;C=XU;w_7*972J|N6 zGR-1Xd_&e2QoblL{V-1b$^V7e6H|Dd%cEwNOl(=`c-?)Lrl1gktEk!RXv-kEA@O zY6tcfmW-g;Qy08^a4UQ5X86xRqDl?n?%FSXw8 z-VRFw7}{EI0)9T}tTEIkI3ENr_ioc)>Z^hl$WYbCivGCKw(lUegtT_g`9~+!_-58E&*_zo49k}NpYmy!w z>o%d3oSgM`lqtDu#WQ0qZ@IYoWkm4C1XteS>W2+NKPxLr6@z6I0XqRLI5^<9Ot0dk z9}~JQj7zR7HM=X52>=)5xc}I*`$qYRay6&yAa()j$=8^YWOz69q?I&cA2iN|#1)JD zZwHwwjuRs-ElS|W7v1Ia`4Nb|jyAeg?XE{6%z9J67Y8PLRN#=iJ5-?|GhW-zS$2PX zxKYQ}cvNV#by1a{{;mnD$orTFIz#P)YxU?{iCpd5-Folf0NaRX>yTUq#!L_3sw(ad z0zmCD$y?StJaHaCm(#E@nedlBZUmP)QL${#@2GDMw!|+P4Do!NiSrs?>)M zbpDDc6ryo`iT6cs_3#6dZ4l(SItY3WxrmJiLKjt15iQsrquEDbUe>bG&lO!3OS@~G zm5a#(_wzVAZ0WcSsZ~8w0UY{QVjSQ{Dw}oUe6G};yQlKrIn2MdWWD97e>ovjT{T)y z^_sJX9U@)_KkigCpS`8sigaK?isk6>AM71i8; z3O>)Q%m@m|)L@BWWj>myizYJd5CX=ieOCwx#NyGPP#QPgep~@J>Tfn!P(`2wj~hTX zpp!*Vz7YanhDYf9UsO_QZ}k^g!QD2F;&aopN7Qft@+n>pg3Df7w>v{A&;XqsL-{^Y z%;m1kKS(!fX#{7*s17OmD>151il^FAsFqJOTAk(q`;qk&L$_-6$1m{EU)E7&x)s!( zrg!%qjhdlG>)=nGK@xEB&j*jj#zKS~wM#ee1iZS&U!<<>*~{Bkf4o>m8QL7YhXO(S zJFr^Fh!336;c+ERRcvQpu;6>8@ad;gnRgC`N;@qeMoz5mMn{KV$QB#(%W+~T9w+|Q z97i^8sfcgSX1T8|{O)9unkrWgH*}s()b`se=ZIUcYEFkMUV107`%CVnxZCVPUAjG@ z%)_tYX?pRVFBQar<^Q?^@cqU&M0$s^fg5 zOq1n*TPC3WLd@%!Qu_CL?TK3#6#AVcq;df4_>TuW_wBe*X8||}&v(2ok{-CO} z;rsTjxI{>J&y+=LiccsHP3Tf8UCMIoZ@aPim*Ax-J;t*;e&os3$4MO*4s&;d9dfXw zDPZn#VLI8}>i8cxo-D8|e10S6+K9#P0Gr5UYjV3_WmEX>L8m)wugBHE_IXKD7h2#@ zrv=}`%ZfpBJH7+TBSF!QeEOW3Nl%xg1KcOS$;A9VcAS$I&3cgkXXd>Py+Qy%(q!Yd zE#l(!#P{xE=z|BXo+Ey#alvTRp6K)tb@A{z=H2D@^o{fZ%sKMZbypa=P90+hgt%u} zIVGHSOXK>&iAL#!RhN9VgXnDPvLBt-URoItys>=c-Qx1k*e*&kyx>|48*9bpVG#gZ zzX3UrGu^-z<*PzY^SXWB!zZ26`11KN=NQ4xia^=Wz~HRy&9sZK89CB4-E_8zp~_mm zII*Kxuu$~u?th#b>?X9I{OFQylhX$16t;uF^;DqR_AoI3(VMN{xbozW^MiXfN>9J} z_fKUY4V&&hjf4j3 z;Xpw5!2Xcp{xswFG{9!-%66~&i`?&OOdGOWbKo2V@mYRbbfu7}3Ndjc6F)DZ;=Xhn zOBZ;NHdm`qWpG*=VH7Tv<9Ba^vGsFwgOW0Vo2U}FV5jV{TnK%P(g&4Z0^jK^y;Lk)qhO^`b#hsstAqMm!t zWKDQlm9Hasa_^rT1inUAy|UsoqOay!m+^$vhXcjeJJ%7rOki*W1Go{aCwA=LltK~r z^2rmoQK#eY!bj$E76HYTPS0;f1^Ts`UO^FWB_z;K&%46hhZRk)xbJar+8H-UysYzb z6(je8VBe2ofM-j+Jr5=i0ak ze5`o^f|zB#gD8Yckh**P^229qeGokE9$Tb;>a*(dnQhG;93S>4&%(CxRGcLTOnkT5 zYgeKgpjR*vgOp9N=OoNOlb{aQG<4{lpJ16E7az)P`Llh`Hm8|qeMil-K?3FlI1nkP z@S=vvu8U+UzdyIYP!~Lp;c#F4F;_TMZGM<^3!$t3&5Gq~-dn>Ccb|-NPkZ2F|Mlm>^FOYFp^0}kRc1{;}jMP`QrL3Vl(@%@;uFwH-lr4dK zD;?CVf0{p9fNLZ+pUT!TPk`Em=C!Rd&KoOO^+OYQ#*clYK zm(Gq9h5S$J8^r(9%2~TGGSQ7bfZy@^;C`5mHwuaX24j4MvETfM4e8I*br8MtvRL{; zkfxVCT-x4d3ch?)CT)<|F-&erf@G%+d^uw)lxVm$Kr5|EFnATkSWrEx7?yAyA+G>m zy^gSoT==%Awl|&tmhVvPN@$4F(xXt)FCn(_Vf*1KwW6xJRazMU6zE5G1V zkMcjI;(Bw$2UVi@;>jM7jLEYg`r^fQRl_jf8>Ln^-RCoZws}^63?fKVWWa1b?#%FP zi+Pip3(NsrZ{jx}J=x4LU=9C3-Y5jgAIwOf={^-ol%!3I8wUjVsMYhHyqs+b%ZVaBLm&qIZ{;)MNlgE z+>LhJEEkA!w#h4C1dQ-q4@R|~IwbXO-x53vaD}I5F%XP;y`Om`ZA|4v|QdsYauQU7mmd$1ZaiQwlZ7DaxZYPs4(@SHo!3a)r})-@od@4J@W-_ z72DxoBFYbL)B=QrIPR9ggA!is$MhwQoWyS+%j%!~a9b*hK_KKoVHhR=3dUp*^*a(OF?PT*H=5TdNo z6Fqj9sh=ueO3S!3%U>FW2nPHGeV+~6aD=@L2|r-pL*vIyv32D~8NQ9`L%5?N>Ves<>iW|(a_|Py4i9G}I|d(0dv+W2kKl&PDX}zH zuv5$ya79MWFh_X0e47$c-i_x>>_28uyErEVd#J?*+}FY_g-e`{O6;Fuz;sYMonVwS zs)FNz6X0v`3rKbC@}dq-?~eSf^exe|UnJbN=+$1H0+2lL>@+$q#m~6$2M4RQUx>?Z zRCXm}hBdVE*>M-sVPMCc{xvN3xdr!_4B@}PtaUy2yxBh_$t3XIbyVwhA8oO?Mwe&l z2<_6Cy*`7)ww*zcnB3QBUSc+XO zqu@pJ)1i6%aghl9_bm12u)?`6@0#avR%gYyQA+hb zrU6s1dW1(ZlDs=Rfh{L45^cEpMEePwDV2n=ZsH3H`s*2jHVxRKHfTiWm_#EXrzF=8 zLz&1D>~Pw;=1-}1h25nx*MIA2inHJI94vVX4Gr8*O@BJnqgHRVnVp4ur%$oPP`(c_ zxA!y(Tfc`Q4dKO!*lzb*;@Hjqz`)HMNbg!0|5L~UMp{F*qXv+bwrv@|#qdfNJOEQO z0bN$&$vY24>`2LezFQP^#%bnM=KcM`lUsU5y<*I)3{{R$AY6%KHT zY%d%2-7yqs`|gpdlMwXj0)Njzz48SSnMj)m+dZn1I1}fukxf^MG3>ufm9i47?gkV8bgTQ2(~Cn4A%FSg3M!7yFi_Gt#=Y_xLZ z<%6$Tw3)X`0DG@zFnr-Xix#F{Ps1l(1Dn=`B-%G$CEEQC7j?Y6NqH8Tw%~*N-6avR zP8w<5ozyUD+b>PiUIfq9bX~;4zo$}T%5SVx)=ilGp;afOK_DC1Q1YT?KF`x1rhGmc z&!=P;c6>R2?|-I(7dicUw()&lr`tos_)3MVs8(+G--3z%MWLKn!Lp_#tv4Sp7QGHn zA(6_#L2Vv5fcA>~Ob(N*v)M9!lv1)KX~hj0Ex5E*;MHr@syS?Yf8g>L#yjijL5!<` zHZ#qYFT_hI7cvVZ(2Xq@e3h7w4}P7eEj4nYB|P;(f<>ZWLxtY_*jp9W{-&@gLWn^{ z!xaL}?+hiT&W?yr;YOw3gEiyUd4tx<(R}&fC9WYsyruRyc$0&%ygQ0H>}pTgv7_J= z41z@tJPeQ4EtWnNrFnLz(Y?Q7gCvIaTU)f)2b0(FsVz&d7!BLcsw(oklvtke>D+Cg zn@tQT0j?g~U#**YLdN&?kq^!4s_XYluV@GOadyr2B(S@5mnIAfvyOm4Nm3+|GAILo z7}WNBXQ3F(e)`Co_&=ZM zUY=x_%{YtUw7f{iA2AvyBp7^Tlpi#SjtJ;}b8}zKdn{`4r0@Pk@SBxybz9D&EwB%d zJjYqv*5Y7@CdVDWXp$ONi5W~YPS7Bkfq~%6FUM8c;`is1#G-WY?3*rK?73DeR2F?C zHtW}(U;gx_PGT%}(Qmi~61Fj-CXfA1e1~5TL0SN4cHe#9y0OJt{DKKO%^G_*<6}hF zPMC2EfWb=m#qapULg5zmn#&V;B0>**%=Se;>F{0EEvyx4s@S|3liNm7x5x0OYakWI zhSCt*oXuqeU4J-yr@LYzHaH+FK#neM@w@}CI+3jgP}9`QyKJ#*Ft0iucUENWcZy`! zH;xd~^i%M_n1uC~ep`u>PX6(mqz7{9KCmP)PgGTAr^^X&VO`AC-`DoZ* z+oD*kBP=gxq}Wy}pr}x)&$|nCz`U_{nSRDYu3emt#E)43PsTCssPN&1Vv!&0fJ&2| z4|z(%8glfQak(Jhalza(qw@r3x+XjQaE;VvS~gB8YL*Zo&}rGBs^9~J1oSA+>z{PjzBmZ0B5w}a2<*ZFy?Q4De?sx`gL>B&AbW*lskI}`9Y{S>H1WCXqN zeQE8+!qID6EiTt>xJm1OVvI0kR)GSYHh_Ds6}=SII0IMr17irE$RG0$wl zKV2a3*hzJegC(>zq2vfM9JensFEx2sazj1qJ7ajS zyndOEju*5{L?OU_OV#;muV|ywOkQi?rO{h`0ek8h0itH}{H=j7ak@7j4zQ!yMyNwJ zkVOM(IWG8F7U5_7d@U%e+T+mucbl4+w^kjq%GWB8a=x0&P>0J`;oLbYhrp&6^=Usm zYvdy>-<98@NdM&eGG}*7-+(EcTdo?@;Bys6o466*SuVm?%~+?ZwRfb>o^$Pc-E=U@ z9doF(8{H_NK@nKkM*8At*u1p+d4zPDsht~wc{ZSYQBHr?vBJ(Q2`3AZKyVBrc2Ai5 z0c1Wh5s~`PN5zIQrg6FG+79lv;nF0G+v!?q59}#KBY1MGkA&>9xXQwI4jBvoj`Pye zO+cPXU$?@stp`v@=*S3A75j!b2Hpta&v?`fQ;AkZTeFpJ-nv}(N#{-A4Tjx&m9!06 zO=|sOx<8$>qEy%nK>1P8qSLpVLaaRAM*HdacweWS$l;rfs1U!2xcGBic(3b~%VJ7w zyx__Z)$0B+3_PjPdSR+oraAZ2rj2TIAle4(<=Q;DVSPpQVS^E)!w9vMj?5q0mmlq( zTu}Ddv=VrXTuRWsQue3*4(s##LH8K*%@_#VYg>-GL(N8`iF}&hTNF1J#J5r0EwkoKM#kF7c+F zPwph2m&=!Ka9JA}V|EUM4M@%U+?J1X4~D!4?uM;|fQSm}yUzt@kA#Z;>nYYC>d9AD z>oxg;_lEGq7hS5W8-s0sxCvDqGNu4e;EU8h=(mHZplw23f!;&7&CeHU{eD}2D$8aw z-IRL`LL%O4cHNtir1s3k0oE=C27^y;e5mJ5_A=`qbmIgCZR{?`1~W#wO^;e!UCEv1 z$?4t8<}|Epfdf33S@*m@N$?8Cstm=2!70SK#1Z@r5+;MH3}EIs=j}f{1$4q_<|$3e zy5djUVS18pJziE-d9=Q~(L^n?MsadIGX-iOYcv6u5`2^UPLcwq%u-$ZrucL5y z)srebOWl6`&*SGGv&tHQ9x#Aq;IAXW_LGk@UbNj$cLv(R{}bKa_@4j#EUB5AM9pi*}todo;vxWIHohh>Kf&+eW1g6dWT&+ zCah9hC;jf__*YwBkm4z}JFX4)i&VPrU7F~e^NI~tUh+td4@Qsp0W?~bG!iV7^R=bu z>n&ECML_Uem}?{yvweV*Ttq7jz$diwHbqB()!`)z1D$ZOgCN;@PXUfGLoz>Z+ z+iFq<^7nv!y&vwF1W${+L5!Z1K5#L{Wk24H>>eSauQ#nnKWW)R+GrF@|lsqs8%tbYX7E$pU^$1E}mtIxP0x<^3V zf~F`qNvcx}UhlV`t#))j@@|R;cdQfcylWNu{`lv6I7&}R%Bj#oV%70xx?qms@nTCVR)<573^b%pcm+X4pyMHd&^ zg~AgoO5!K#=Z2eR;D@|F9JIdAWM)gaoR6(RB_O}!f@?PnLPf`a&m>-&{hayWIlc3v zQqk&TQN~TH7xWuXZ(aUTC|j?%&8LE4mck6NXiYp|Vl<5^zjpo6+p@PH#mHyd0_DEF z@K;s=_8*iXiYcaR^3&)=2ZMvfP15EtG<@H^b=?5!+F6#o^6SUd_C6v3t`ARVB}`?` zB&F;riEnPb&Q@bNl8JyPs$ad)3v%C;g}vT~f#EZ~EV~saYHl*`{?6wrMW#YFjB@3k zFTVT{0|{B`5p3H$86ZWFinUh&ldXao)tX;ty69l>bI%_t>C{Zk*E8?>q66Sd-{_?i z&u~r)%ASI|_rY}sqW8TT&QIwN=47rT3?IX78$i6cNyCF|Gbb;vFZL1e(ImNpzPC_d0AIQPist(di{yrSCk<fg1?#J+KnyW zqaPgkoK*8k+2TwZT(pJYmEC;$BsTJah#*Z(B5FQ?}PDj$6(8mDSF;y_5EAw|n4pSUNttnK8>I6vqcw z{jvq7Vc4w`4z2x6zQd^T#`%GZ(LI`NmH;D2I4swKS-kOJO?h}&fFirYQVjOz<*jvotS%mKI-jNH;&Ofm<=Rmf9ccZWa~dmq z%sor4!JMDzolo*NN9eQ*M&f(EN}%wF7CVS75`&J9ht44ZUCkMGi;f4_$6p`q`e?f; zDJ(A=z6<_#E^tv}H24SPClr1dHbA-GDl^I}Q5wpn1Iuh9YbqQ82Iw`LS#$Jg`n~bY zhd0ujLk!~XGDDv_sF#ZO|JfO;owYlVa&5O8JV63VLB5T-YLuFfe2H$+lQcY!3dO8- z#hccVnk7X$qMMun@$KJc#H}wOj#nq@^O@;iQGTS=6%}SLAfJH9Un%}-7)IX~i-gT% zaa-#Aj+!7#%)1J{d@6f+q=Y?*GM}S9Ng?&sKK-g-S(RVbLrS#W!nCYb#7{IpoS?Bp=f~bMg2MuP6 zb|q$ePe#r!bJT8tlv&i7RJVDk>AN0(zB^9Ms`7TGbzP3a(mme+fA5OpErGeFv9 zI0+DpV2hSeywuRN&65>uDQ0(qyUeg?@V37xoK>#7#d>(@Cg)1{pWd2)B+2X(xizmH z#-FvC2U#POgLRKH2}wUDh$4d<1LvSo9>%zV(gnkS$?Bg6KPIMxsp@$?kxYXED3irf z-r*gy=EB+(0x(a95jnEk(15ICX-Q6Jk7E5?-{hN%BLSTb0O}I=e|~HGs<2te-IVIup98>IFAJ}xKC-f zTytE*eV{zWy33a#gHZZ)8;S^-Jb@P_%S*~VnYgCDs&FU8@j~OD_j<<#F)X3cKan5t zL2Erg5^ibX!b5T4j6=90v1_?(esr-Wpic25!6hu9F^F4J}tw5mxK z+3ix~F4oqwubWs6y;l)IrS9f;1~vMz@DE~I0wdQE4-~+&*Ae?9L>J59wrn`&;?s>E zErAoJhn#;_t|S{zq`c~XYV%Ucq_qB}ao-D*J^v7I?d!OHW90`Sj$@j?NBXkm#MCW@a^=WzS z3^7jA*O97fnk&y<1-ooCu91+R&-Z+7W@r!Ycpc%&d&k}SzP8YhdWeMY2gxJDXHVE^ zFC?e=#c|H9Sp`8WrPI9{1{&?|s#SJl*co=^CZ_LQ>14S>#JCN3e1+LbD+A#6(C>4F zEf<<=4 z2(E2b_H!ngJD(?sesP6J5B7x5ZWW=(lsXmEHwy^mdmW+aS!u$57X*yhab4EuiChj{ z%f;s4hLl0}nDSy+gwj|BR(kS>Ok5cD#YlTR@5&G&umO)8x^#ANS>NT=gsRl1O22K* zL(KdWkFmMvVtzui(O8DfVgr}Xj~1{$^H|_HaQon!lfAQB-_a#snV~=)>(E=MpT&B6 zse8UFbSW#AMqWB$w3`TPGf3e-FJncdP{vyf%er`tZ4J@(U|9#KV-uy|z3wQ1gK^8e z`jrE+0`^BXIVR{(3@& zQjxhq>$iIzksL18Hd2E-zwda7BA?(U7bMRe)RmIxj%vdWx&!RE_~nDw80No3ZJ})w zRR!kmT}m}e2s*hoGuGwx=~{#Jb;QqCzj_KRc9+&3)Z1Q@M9tT&A=VNlH{S=9T&T1@ zQax@yLEX&E84o2I90e~xh0r&LUZhp1XpTTwQPMs!Uze5Zp%}+fBQF9 zs@87{)A!qu5ICuVBZK!AkP_w03yrC0)d2VCm5_F$ST<0hU+=0!w>3@R+>FJ7s8tE- z!fa*Mr|6s(DmrNGym^cHPW}A?iLCM`Z!5HEPcBaiJ=60PuFCu-aXr>A7Ew%@=Jaa& zhMrT3X897|=)(F-uY@_Dijt&Du~q!0sT%v zYJR_lpfm^D54+vCvxF8&dQ*w)9H{yBI1vfbvu%=Q&oJ`E%}sOmgiD`I4N5D5s#bSv z?a%>tyI_9>dz`5^NqQ)kyw`5gcBGAk;H?=Y)Y#e}DHBl)a5dP;JHCOFV3tF*$-MB1 zSHX!_`=YgeX?ndJn`A1cpKOk@^Le5<^P0_sup>rmD!I^Vw+HYEbMGRNvK6-P*m@e zt`~)%ZF`~1!sXwCmQ#MAe{T?aLbk#`E&s!xOUe*ezYW_V&sK62SH#gwgUxBmY5LVT zxZR<&snHSf`0(n=kjCULqmsb6F!W@ZW+K*e?B|_dajRo*BCDKg0xG{wMW5E^YVvrR z$ktpdarKGy=k))P>ZWJgHl6d7PN4^IX%sEKrRM^U`yHm|R9M_RX`CxT6GMw(OAX=8 zR#65emV%BS!ugfnscoo#DC0AW$#jwA4CAb^7Dsk%)02IuJuR6?&biFAat`e>*>%Z>&4fM;y?keK4GGcpUYxyQ&sJ~j~T^q?74#j zTkmW}R@V<)AP2p2Yr*#Jc%KwFrg+B7q+e*P+UK{0L-q60b9Uyail$%6<*U6in#TGx zt4w##nMj(`)5dMrL~dWw2>5+BI zUB67e-}xIqzt2D4^_SNV-mqYJ@S6R69M**%FWqOnKE6Y|S*L7w;B>b`y!o+Y386CGS*H2T>@pumLb~<(4+pDzY>}i+Rpat`BwV*d1-9okn zVcOjC_M!}Jn|z@%<{J-qvH zoV#rtkp|G;w> zEZ>Jl+zh65{@RK_k|Uv!#+dXER@R*JtUtaFz#3Cd0w`6g1i&ZJ&T=x}Z!7P=@0@@C z^_^G#-TX_AB;Hifr85*coB6V{g1%XR+#@)aZC21%FzKTmfVFsTZ3gbT10RKj z8SVGk32_~hGBWoynd_E?zck-Yqjc0+loVT_9u2`*Fnxw#NU;521_OctgB=3fmpE{y zmcpO|V(@iv*zV3|MbGwF8kN3Q(yKe;b7TxMB617eB%SP zfkB-5N%t>1BxI zuex1#ZK9pllo$ldGG zLZzs{qHrq46#V9$!7LO{-qvXXW+~wL7&P`tC^i78f$cZchJ;{_5X=>V;SlKo+ry;e z=OV?ADQ?6QZH0;Zm3UXuFxij#1R|S?I!!{pY1miO(63lYMxoin)uWO)g-GfMW*xi9 zN?h&iv)4K!>HC<6zQ+Re9%r!E@zezTglbr;$U!e_@~)@7_w}z{{Gp#GpN6`}^^@O2 za?TlRt-tG*Yv$d2{crw!?vfQmF1Fcv-qMQGpZe-=0L0E|Is3O%sS*I6 z1n}oY(tN+4ZTQ??|8mcpZ|J>Y{+zzw@8_eiF7$e7&4PcTg?Kxk=QO!``A}>AnQE7I zEIyx$I9-08w)M`-0%3OtFyrRs8Y!zI0la3?2$`mz%)2uK5X=?qTp<`1f;k2|U@$#N z-#l%CZ$i9NiMM;|>tf;^O1wky6RBI*OkFw=5DykiAdt?ul`4crP$O+_+~oU~Ef8sQ z>@pzNg23!;JAh3mmuY(267*((zoueLMfQJ5lT-IU?jK&g_(NY#-)Sd2HRje@YX#sZ z-~QA;RC@bR(a7P$e1)%{Zu*B&KRPjHh6a1Loc)ZK+zeoiE%X0Ml_~-7iLGRwuTAs) zUh(3etoiPb`YzuG?wId=-a_V76{Kuybx#nZ(!JZ1{DY1ig&WW|wJ#hD}_SRc|_s)5XmlL@-D4y}# z+4iMX0Aj?tt)pAb@kgF`UVl$3{3~Vnw^XST0H46lpC{P=QQ<~rl7)6{n%o8GeEvQ% zuRA;C!X-r*t_j-E$>zsWfnX5KBB;za1Pj0p8*Fd-W7kmPot}7$Qor95Z}G%CJ$@pE z0U-&)1_nY+iZccjGbAazC8X9W2I+L@rv7Ti!JEpz%R`ywfRGH#G4+^a9*f+%MQ&dS zdNaN*bqW*4?{!XOPCxF5Z+!ZYoBl3^KM|ffg$rU#07O?_`oq7qVJIqQs`9s}-Ah3} zV2lz7!H)59jz8p&%J6TgQl*~Q0GRkzYK$1Ssj-^BxMjafH{TYYGVju3iJMMkC^G6F zeu%fj8SDaQ`86I=h__%~Zd<-$(KxfV+jfFr@#G6_&%?_)d_^PB^0$@D^KhV10(sg@ z`r~21^g%EOf(1gj1cG@6+n?N@uS2xW6Kz$-?}&-EB>8!MLQtRP_=QP`)`Wr?24jS_ zws7@9}q(wV>71^Qa~fSD7j+K8KC0^CbZ ze#KSECS}U-Z>drx06y`Q_V*J({QqwL%JPri_qrSFR}ajqU45``R_Y>?`F_*D*<&2y zEp!cw^7ish8wFD_G5}YYpNAIa=5;hzE`r6Jv*)v}o_Yuc(+|ONp|V&A772DpkZO|G z=XQFcjY|EVm}nEkyOL^J)Pofy1S$#WB~D-(qE*c}d71aOb>2(^e=SF{pnZzUR1pR_ zSZfD8X#=~CoIuSugXwMCKJ60p9=iKCV%%QOj_v-(bKQIQ{^^;-7ry zzyG`uH|F$(6(6~VNgyvf<9GTZ5R7r#Mm7gW9eC`o_g#7*Bx!{u0G29M0^k$O9GLnc z(66rh#}|J3u8;n-dg(IEor}F67&l_*-qWvZh&K;_Gr4^;L*LZx+TFdvacE3G=eBq< zMsD0$H>jJ=(L>vF`6P2&uStPLBLzO6gmCRJRF);c7c8*YK|l;Tp+ws}_0=A?L1}LF z_%T5nBw^c13VOYY8OQ)utFXf7-cOU+Li0{s-nHu}%#gx)xKplP=2I#R{bs_pMhp7m(H^Gl%+Z^2>XP&Aw=aaj)|1Rs zPKO`&s88CZNCl)S*g;U6 zd6(K=bIZxggI-#Ek)M81kek=(+U2h=$lGhJm~9?S#x-nPx69`*?c?K0(AxvwZx4(Z zxA?45~VrAAkA1z5PQtb+Jc_Cx2+B@w2vvhe32C8kGe@gKLgI?2jIV za{5Q9Ql*|C0O)bXU_GE;Uh@y9o_pWNF6sH*LV9jo>7v?%kzSRy>eL*l?M@YMyGPe$ zT`g#+oNKd^Z<0I-X3#a~u5c7u9`;)2eV69Tt=pRn#JW}}SMiP16zc^$55lETSpjyQ zK|;Y#B(PV%TZz`k#9P2mBzGhsP))|BnSm+mPPNmOLnaGyJK=8fdhM*vHM#rgfWN8G zuy(8P1q5je;U+ctA+O+zd;rYvmd}P~0yG2DGzM~hQTI+V~*k+!6^z(k! zQ|&{`=^v#^m3q7bU;;Q(EnePz*RwzT^V=_d&w?usp|Q5=WMIr<($LW(5aMlj13L>a z+KVzWx6K!0WY$%m&+p3v;1tAVuPdy?%{qLNc`dDq+&cI;3FX=WsO$^jatM|PW+3Uw z7jIRX>y+j-O0-GQ@#OtXLb#ev+Mum(Uf!9@I&ul%X|7T>@AM@Q*9nKMyU*N*bOSw2 za|m^kDce5njMLZd0BRAYwSV4O7qJNX@;8%$d(tV>vjoCv;IFCBG`in8&K`Aa|F1u? z-zBFVFmOz(ujdmQ{!|t5+Wy_KGw$?2!HO8b|KMBy`L`ylqDCXt73cfqi$Dam zqZ1Lw9rDcY0l2dLOQ}+&9?t+cS>-F%t(v$keDm$c{ASZF&1cNL{21!>*qgzIRZr4_ zWCrN#1i$Vf-j4aUDRJcsG};_Ja=CdF^w?`TcCASydDjk-qKnMm$=ek;hS|zo7b#4D zn{@Y-U;$K?CAoXSyyR1MBM@&;#;)y>y{Ql%?4b@r-2U-nI#0TlfWeH zq28<$m<6(#iZ1fGc^Q~&cLk^5uf63;XBBS#dhG&%(s~{`sAOhoeVP!G`8sJ(94kWby-3;86!eiknErpNUcI zpkVfb-jxt61v4NJLA*tY*1*{BlxPd+c=8%e1*m}?YIh_w@9vqFv)6(z?X1F;A~#TT zZCA3_=ZZTDK(Do)Kzp8F_A&*amkar}ft|F&yX1;LB(psT>{foCXwC)HDbN$`0*X&z z5EKJ`1RwSVW}g=}IpfHqKK-eKuYYTD?BnDSgFo*(Ku?T;6k>FR;$XP1|k8Z>JMDl@F*! z+}PN7uw>4WS1n(>Z_0n6C(1yq%^ldx@ZueSG1&Z9wzczeF8$7?FfAzzmnv1N1i+qGauvQ=(92R)<~qr^ zf|Jf;3mCJjOBVDp=Vb;%r_ep>bb%yO_%eB3Ghmr}>s6k55a_q7>tAW@fiH-8?mj2~ z-Nz5U>_3vPfEOcH+uS+lk~i8GP>FM>wZ+bp_meIaBFXJrz?ZU`0k#8k#&&V%{rA#y z*`@eXjpUi2RL0Jtd}k z3RXJ(My3rgbz;2-et*T$@9CerfY?Pc-Hcz4$7S*XvreJnb^BM+CIWj2 z5w|D%1$uxBfIEO;U?Xr_x}5a23(yNXkj&D)lX2|JU#ti1wHKG|vw~C3K8t(CCfH|i zF17{MT|N&@KMyfxW~a4OsZx*p0eQA?;xYSCND4g^&}(*Hxa7TepMAxq8~na~R~@5` zMx>@cHc1$DHf~>gh&Mk;BcJf!>EdZ;#cmGR3PH|y2R!xD^y!mK6|f^2d)7$cPihb> zObRuE6=3FpvEX(>v<{**O0*u_=#;x>YCxDdlFvek6zATx~D`&M%NfGN2aI~`liBVb14-8{|Y6l79HGogGksRU1foy=6FuV3^u zZQhp|2H{v^f{bX5j)*=hCpNZOa!>pb4191P|PC zJHZu~GH~xIdVh9-G#}ha-}vT9D6Hn6_yBMcY`+(o^Ag}#U=57C7zTQi>wPb{2*NNK zZ5=%bJt0C5N4VUMHxiiT+PL__6(@e-%ZL7E!Mt5G zVkJ%+Kga5cami&(M!dziba{3ik5jMC#`O7&+Y;Sft!FM7wpg4`8_Ot!)x^c*TkHC7W4PohkEZI3-g~@-Z5;2 zl1sO+RH>&90OkulK6KxoyzYnhe*a6=s}{lS%bcrD7*kPEodNoa#-HWkkK)m3ZLL(g z0bWrxuGh9=jE>?A?S4O#lO*C~DuyKXglz4LjiDE!% ziqr%`O)FmuT(WNATIte5Z<^{_Erhq?o_txCtuW6|3Yi(E2#L?zo-4D=uf- zFE5sbf4GVIs?`jTK-wheRe`0zD+I;@^jW}wA_oKeAT$!EtOH)+6qX#~cR)M}mBpZ| zKnKArgYo;F^ln$!8?=^g)*+0IgWn1RQ36*J9$YU}=R+7G1VsP%-e+F8VO!;SJ^hWi z>3k5UV3*AG^@YHfU&pKWBR)34c+Zxb|7qQVaJff&jgkILYN}5@pX@d~6MpG-V3Q=b z`?7+>iHmqs`)5!C9t3LD1#F!^g#DAVG}w198mFGZ%7YF@Dt(xu5R~_AP*^&JrAj>s z0npDp;-G+I&Ly}}V{Oz-?@$0#*&ZCEl5lk+|OrUA%82<%$S(Me8ihX|q_ zTs13iK??7BX86lpPzs-OpEF}lJMN$h{%NnDoV}v=AiR2G#Q4cC zbL#vwCL(Tp#Xqw6r~e^)?GKGtK;_vf$17+E(REPyENs6ADzAG7?!W$78{hsOa@)`p{1stb{coe)L|E6E7hAo=RX9^xh<9>!JdyhS>G%YDNuKJu-n zuO6N=O5{}?PNsuCr^QgH#zpIQ5uS2b@SXEMxb~H7r{Z@K8waBiT3rO;oPrN6Y6o2< zO(h9h4tw$TF9b?gWMx?$1?AdfETwf2{W(b0p6=`BX;w zhUm|JX02_*xykS`)|M_|sZvi=0L;67UtII&j^z|MY6YR#j`gLB11Ci}ep)=KBk$sM zfj^`G@;V-U7TdBsA{%v~6R6Vw;FH<~Y&qOJ#r3Vg9(cCri~~;jmyaHF=?8#To0sI! z$$P{Y#)0+k_ymjp>s``!Ch%`Sk1+CwKzi>{*6f1*D$K3H`ejf%UNFCm=znWs#`S_` zi`Y3q;N$>3MUmq`7sitx{q_-g!<0cdVU z=!eQK7&C~EpeI5C1EUt=2^g#=Mp;~iNT5<(R6LNxLve71VTowRCdFWZ(foE&}d~;bMgwrq&xz-~L8* z4!0b(FMGe_g}UbGBRJypGcnbk&d_`-rx4n5J4=-+^*9E=w8}4a{ch%;?mP2;ZoO~a zYx{n?AJM8l$3Vkk$c1rp4qpNEb%b{FtyQLhyWPp>^R3Dd&EyYC2L2*&6Po1DXzK7S zhG5^M>9QS4iZhz)lM3B<4a7SVXMjoqe3SWm+0bKwyVucMPjX?~u9djOz3$pTPqh6B zWOMGMAP}E%2HUD!CxKH7T)SytFZXHpx&w_Uy z^nvHUYU%s_H?t2&UafPJA>W-#kCV!d>!|z)?6OcszY*hhspv5DS>*oJFs}+d5mYuo zum;ALp}i*u%0&(?4dAP&o~p>+aocm604n!`-3kPV+Yf9leb2W8jWpbw9&9OzD;JF+ zp@$vYkuWK`$BiNVy)a%!0uMnS$ToyNh%8c>NLso0L9j7sl)#|?CV=JuSf6%?Nxxcm9p; zB-b~pRH;&r2>_}pv5T?ROuBwwSpBX)`ts^eT;y-8_1bF>B#L5h`eM`mqnN9VZ3Dal zhmTn}dHIm8pDNOrg1_ATWB_s!^h|nPlupWMCeO(XK)3{gy&+hZG+_1(h&MpAN{QBj z+m*O}QcF)o1smN!ujsmryVte3a=yAY|9?@QU;c8ob%}K5_H|a`7C>JFbp#&_hi0GCnmp~Oc~}4AUf+ApQNzz3Prfx? zCyPB&ZB|$?{7m7Ge@FDWfQk1z8QiJTn2V?&j3eR@>k^=9I<(S@#(k*Y4%K7O#_Q4Q zCxBO?EXzEXRUoTjT#(BC$-x)^n}Bg7sjP=aJsDxWV>`?<$jC0}1#uBl2@^*!u0jwa z^dpRb??X%j@yYi$0mz=jIaEO=bL$MECV@WzTq9|{Ni`*y7@AJP%0k`v%S%`M+2=1f z@EZ%}jB3NFbcTD~^iE*<*BkG*H)FHd^sT?{ZEKej`M`~1<0ifurk2|-l=@^Ipi)h? z!RP@9HiB#h`q9P!gtg?UJ|M97-f&k0iw;C(2sRDD{`%Vb(qn33VD&x+pl6({3t#eLf>WPOZ?&&24|MY2!ut{kOO<-G z0nmGobB-Vgkg0?Xy>ILm-h1Ekzk1t!>;9tms(oqR-|y(FTf!tKZqnh)HCgT$uhy2g zm!9`|*ef{i+uN?RfuOcOb_)XAX23>C0fsh{b?iXWdoS1nMJsAK{Y&z9r%=)>9db9F5%JcVm&b$8Yz+ZnNeT63d z79{(JIK~74SKNL({?J3^*bvkp z#v(odaY&jUn0zY(P>)bSydYr;cxn)0Bo+uNh`I#y#ywJV2>^Nv^$8@5QXa7oMBoKu z26*rvzI^<34{obIt=7|sn_dH#sql?8src=h1DJtAH7;5+BH^p|3BPmhU#)xPjxmP% z4RupPM9@YPtvE0hv|fSgHdM9&6_l2Fx|76_+k#?JcQj6-9Ici%PQZl_R$yyC%$W;o z=faA8(Y1rHa$ndMz}#+N7)=j_lTP9NAiov(UIf2PE!~WP+dF?HTaP~&`^PWS@cGZD zwq#{nPx}%GOO<*A0Z>(OE+IJEo}_D=+i^eo-jCV%tV{mryCa{vuz7v0-(GVd&1USS zFE;rWD-@1V%Qapu0=puY&$l;bZoA%hars){vwvo4<8o3m9$tE7KKp zbo2t88SA>W{du%@-8zdaia;(4fF1D1lgRx`w_QJiHF*9lS>*1RSC|^B_7C4W?zeM?#)x#Le829?93Dp$uN|obUpY1YKYx1gmaj%I&xO=$24aVfd8qW@ zdjc5sXgr7x&q1RYc8lRejwijjOdf|2S+{?VCf{^L- z&^P78<(=5kH1-^nSwM)yFj=$5uU;cicc&;DHsPX;# zs9o_K&&dZK{KbFX_or`M)^h-WRlFCUexcKS#2CwL=dMK>yg+a7L0cZ_*oEDj3m90ttR%SF(kLsDMyNU=b@rdhchybI4aOzGdNS=L}B7P49!5T)uVy%=Q9Q9oI-)qmSRe za_hm%h9~ZCj4)j7rRnQnY%(N7W7Ip;3aS=$yHE*H?MH(OIx+$TFt9Xn^A`4kUxV&i z3JX`D+ZE=FCoZ79H3heuNMf~XQn#?d6y-_k0#;yK1*!{S`y%Mw8`YH%E`Z+3WXVVd z)R+n(+ti8dP>?+K&jo%M!F5wNtpj!GrT+X=;U(v2^{g|gE=zz=N+2v%0^sa^fmD?^ zPT~V$80I}CZu-MbeEQr^n+tz&p{!lI)&b1_b6$DU`+B|+-?Z3l_<0}AdYbF!DQ>}% z>9^NWyx}|DzTyyW{<<7gwxA^4srY)bm+&aIAM7#+_g3t3F#Vtt?GB&Ym5eEqYU=QX zIpCX34&S89H%(LJoXeIi!q5UMtk}0JcKZs~)oH@C9Tmh0*+|!l-DxU>v$=@+*g~J~ z<_gpG`fCHe4CqZwmw9r8eMQpOHKJa6ty%g^$9_*|;xG69;0s>4^q(&V@ZMQ*-bp%v zqh$`=`i*a}_5=Sce{|0S(tiN(9E2@MV=0C?;06e)6(nk6gC;?&7=%`Cum%CzaJbOo zY>2}W$1z?jXs{GgUUqH)}mM{fgpHn5O_a6 zVSC>Boo8I;z3VYH)+SyGp>J}T%Rr$LtDA&E#rus7XP!RPxBj9RuREyWbe@aBDp93| zb4}cY;zNTAlU=1(#Ro}CKXn$BCK|;F5LPTo19Sk@0g#;_8__KW<{X-^-rfhG8w3XD zfDa%Xg{lQ^2i61kB>Pb|CeaaG!fcrId<{lwP+bZ;7bH;FSP8*`q(ED9P?#TC+*xE| zFsp6Sj^+muT$}=F%Bd68Uh1cvioWO^4bM80+On1OOb3Kzm2s)3Dgde~-un)hZ`G<* zTyVh!od5Il<@^iICp|W60xUYwt~lv4!#_50&(l_Yy~fxBfwP0L727!#qpfncs9>Yz z=J|Y2KE?a)z53c*MbS2guhrvA`ZdkrQ-bA*%i|y_YBpvO1DB`{@RR{ zx&;lHH5=w73xL`M2AO(2S*XiGh0HJ$Is3onD}kq+zZRfM+w0IafRlWPw`tm{_gzCY@_$I_+h{fZb!Mg^&X3}9qP5eNBMiD9=4GiiR zp>{4w_;(x1P_oyL>Par(b_0EjVQdKc4?wpDuyA;4nx4N0%vNar0mdE#JD%ikH+De1 zp5#q76&e9LAxLcjY^tDc2>N=HoWoj>@S{)NL7zgUrh}Y=Uf3}odQU`a3T}--ud>MR zVA=H%dP`y^4x~R=&1x^4b}GE+1sXj6EUGK^YHvN0rZ0HFlx=59JyihEdymO%?BDy| z_qgPeOZfWNzAj_qW39zudK~9^=T$lWla)^_dRFzF5B|89ZNIImt%^#IGm{`kmyv1N zkZm?+FITXke){U(Nq9+T>H0$7p~Y3dZLj;u0Dh8AT-zlsTp)JoiH^gLl6&5{@7KtMk>v6n9lk9yr_1$EI%#bn>T$p%7k~U~YJs5`=ho49e z#QM`;aUiNexEOQ2@sXxZMCpII+vli<@TA z&P}y_e8cS1*cGg(?+o@5uPb$27D-cwE5;GvlT+ZR296+%F-8eQvEmV{$&@-X6Q>P*b-s zEt+Wt5ch%hLvKGSHKzKcwu)353E4H%)Epg1iikEZfO-YY4ufv6?7SPoTOxL>Nj9al z2e$TBdI?TDm4O$Yt@7d*vv~2+yel#Vgk@vuQcv~}@VCD8E&l4S{z`W4+&T4AFPP9) zB#K=Go`c>Po^{w;YTuc-w{PIV@Anapi3xUIp=5@FSpJkZca0$^2rc;3m_JPwNJG-A1S786y`y z?SML&YJJlU`nrMNw9rSpb0}F?QnGn~I+g1uT9}*IasE*X@#@1|S-XK?!K~itX89I5 zfzv(46DHgX=m;^!*hR-WS@BGG&4I6f+y7beiBI(fL*SfXtpKbZAG7giK1cM?k4F1# z-7?j`e6GM^g-^ri;tKo*bWDb~Z?Xdut~N*O%r%BN&Qr4zhKN)IXF)A07C}S>Rbmx0 zj)^C<7LS7+H)!3>p+Sv$|6JD$7JC==M9wxyMzuv=D z^sCTMZ2H7%Z*weIKCvY@gr@G#m@E&8D^+5u)={g*gkelIbc7X6DpzgG4o8usT_`>s zn=7CgGg(-cMl?N83p{Jb`*_E#$I%~-i^mhqV&q%b=^uEu#u1BpYTUZtc6>c%SF=L1 z5ilMHG~_LMvI}^o4{ga zgsDc;t7(nhOWJ3pZL{JuSp6MtclsH*GxR~f z7eX)XZCA9gAR`Nd-Dd2zg>QmDC}uh1c|D}P`A4w-frt=Lb{sGf1ZTC*7<@eU@}D`Qs8(! zO!Cn^bVHrV`J1MlOSk;JZtHeD%oEM^OHFP+fhV>M?-!e;&w?ZOpMUXt_WQv(M+}@i zmcFd2fZteeMjPJtw=Dj`xhzWWV!WrXXU)QagW|p2k(-b0JF4p4VGPL1`gL|etv{Yu zt3+bMB=If`9D!AYWE(TB=b$?ITr}NK9pF`P&fr~2U0(3s;L~CetRgCj18AlFV9tOM zkF|;sMZ_oZXK@&-Sff-zN39xBt;AHSDJU2e!KKHhC}Mn)i(%UQ?xJyN(z)F^FZA>{ zzIN|^{Aj~6=G8`NIA)yj+dVw2h;iIscf4Xzm2WKDtc@lvOp_Q%3u?TBdP8VL6~-GC z#+m^WaYcQ=P1Vp{+1Jy!Vz64jp|2-eRZ+&hQt^)drlV>N>L4;zB3H$^CNPNeJy2Z@ zb`*^bT1#5nsJBUxNFZoEgqj7GB%xv~uqbuy9QghuF_v zL|hz)N&8UfT_OF)eX!@;g-`E!&E{YAu<6p8VpM}(Zxlscd)T%GalUol=i0RtHg29O zVo+6R_2FwIds697@_oX+Qim@EKDRL~+E^>NU75BlwWKvcdqXOjYAfFYAyYIXx3w3V zg2AFuYWb-YN)a&aF7$N=zgdTPyWW?!&G=OE(3f>UGx>j_U3>B=yD^&W;o5&PgR?gc z>~&n$cDGKafxm8U-xE313u$%lgerCGYsd^SS zhn%UTMNHy6k*xXXZ%@x&_p<+abC?iFL=S-E_1`^1m-{(pELXeggO!19-a+Zbykk?zSa zq)Te54JsySO9)D!9vV$yv{7ZGQDZC$iLtA#br%o!)_*Zvo4Bf1;(`FuMA1ZT_id>0cq7KyY^{-yU{Ry@D@{+-wMu<;i?#AC#E&;^(z@2~b}Ixt>GWm5Pjc@;M_ZSNF`;93?Y~0q>jr_d zXy3vNpjUXCSrm*s;lQs6jEW2AS-a@z5eFVa{3m<8SXq?12ed3yVL7gT?THa$knS49nvgQ2L`)6|R zW%hg7TFoev{+nhF;*@MNb+s0J%LOAj`116%4+;`W1B*gHnU>nvvcY9|0@)@}NjEd*S5c+3$p!h|!J^Z-1~;+RZhXf5P#p=*!S#3peFTR(L*hrv~fS*p~>-ikub$}m}4&UTD5%_vK zOV^~0mzRRwJ88fyy&jz~#OsqPUAI2T;ln2rHcW5o@D=T#+kh{{hpAXo;ZDA2hOTzm zxfcP|Owd>C_U&GXH;a%nL0>yC=HN4v1DJLDBny27;opwp4<34>=4lMQuAny^cohO( zH?Zrnyy$jM7Pqer{Kkk)Ul1%jI%4HXKJvFKzV=T`dk&mjcf)9%8$R}-fvrFJ z%)3`C*zvX{N6#OaJJe)Ovtd!-G+O6Hl5k;bpCFl`vTBmPFWm~aW(2=kZNSMYLFjqU?~mrLu^#$@22Iu3 zjeF~o52$#yMlp-~tK50$D5lwnh&xl2^$-d2`g*>)&d(z z@(6v#lv9W-m|=+L!Pru?XEB6*bdHsyy`}5qvR&Z+Aebv{0)!Vvla(a9fIEP-wI0@< z_)Ia|A76&d+)h72BYBF_Z5|sj(BJ7 zYksu0&x1eeVdU=6+1}VlsG_P#C)R8(pYN8>mudFwTEItAwG}945bSbI9KOX#$X3Uv z+OoI}f*(zHQmrc84&X}~E+=hTGdq1Uxqg!c9ZFl$j^r97OTIk|ovluCEm&sfxUmOA zyjs{=c_!%Vc#KxARr(q_LcWm8gVgNr_ik==Gyh0xE~GYV_|jr$aJn9RUBke$0m~;k z_>B`wPZ%sbw8`9K;JN!Be%{;n`s)9;U*B=#+4ZmZ=9iAS<=l7t+i`=V&pY5S%g}&A z!{a?sgjlah;)Lnulx5!gsRIdV`)*0w0a|NaZQEW%ayh4xfw-b}Oc@x&WZ-Y|cG9^% zOke1w)4W8Te%o;>)T)kEJNtRtRYx;ao5%oNdr!Y^(?5!?7d)%#F@L(U%6InKNn;{? zk20XAKI{G^2i;_sF$IH?x`QO=)f#m{^8N=658LX!Y#r~T83p&(T>QNSm60FJ3G3Hc zgEo2?R!>csB5NNIsk4Vs`F9b1J zoci3u3TjjHSfXU6v#mn!A~c!{x(H-0S_xoC!E7Xn+ip!jbFykUef1x=JaqH=##*ozXby z!>29*KCcPX<$LzEs#?`0Gjv;{)v#dZD#0?v?hU~rg&OE6#OsnOUAJEF>Ccd)4j*B9 z<J%7&U)Sa^*W0dGWkZ%ne$W5 zOdbexKZJYm;I%7c6;&3`Hpef2-#W94_+)YVa^R zGOsp4L;b8~{B{iwYXX348_Kzd2mICWPR5%;pgH)Zqy1E=64*^bDev9tdinK{89(y2Krf#vvX}ashG4W?-uj1PMHbX&&KN4BG@;5A?2p zu{r3LDlC}?wHO^+56fbRwj|ZcHp^R4GR{s1VPXLqErHsiBs3j#0mA$y@2&&6&R{OF zaE-#fF$%0oPX@Gh)KRQ>;R{q=cs6s7f97OHLMAMi?7z!!aj8e*_rQ6Fpn<53G4Q?f ze#oo;=Vd3q_!IL!9XIR|8!oJ|?b-^e>TRzxUOhfaz%L7cI+@3pI(|-}4z2+jX)-@) z9t16iZ=r{ZpgSR2C%9GMHVQhHegkT0L^pxu`E;2K;iZY$WgeN%!CR*|>bWJ%UY`Hn*?qGR-`u z&f+2UN%AF60mnB`#w3`e*xn_N~tkUb-59RbJpK-SpY-_x)k@ z#orj(dDDvzT?zg3A&Ml5ebSZ9OcxF<`g|lC;+3iIX&Y!wxpAU&j1p`chbTFyld0F4 zwq=>T4m0HdX2DMkoghi>IpwC-OujZP-mbFOsqfsVDuJgFSzdp|aX36iVw%%IUmFx= z!^4`4fNS;t^D$f0aNTk6G&{<8Y_O96sFU+`CG!`RDOWHHfd!zLKeb-I1s7OVBLw5# zvT;$F+7Pb+zfsU}AV~W*)dZ<%A?!&xJ658 zzVHm){`@oHrGLx;`F>?(?qI2h`x~*P{-FKY`p=&HjddUT;>LCC7v8jp=AA>R_yqh+ z;^uj$sPhT(&E-p{e{ze{(4VVWnp)(JU zVkfWAY?@6NSDu`}mjyqsz?ga(Xk`g@_$XL%Y{=mYPdx9>cfRRwo*$gC5xp4JyffU=A>qG zPsOx5e3HrWn_On6^8F;4=Gz|DO#)fZUQker(V+ zmYeT`EjL8$zYAT?R9Bk5)6d|(7oV;By!55aU%Wi$4tmtN(j6?dd%qQDUNYy_J4d!3 zI`^6-#5XLBn`XiX^XnB2(n5_`(Ma+2B!AB}6t5obcbJ79v&kGmfm$;9r~@R5lCd*A`La9a4ww@P#*h_&UmlG*AaOdkZ-#Ji&T)ENhj_K~ zHBH;NMP}eQ=^FK$nf;`TTbFnLW&vzPKSWPfXRq6PDF%EDjA;zm-hBd@^Yk8;Eettr z;5naqP4ihFILNHp#?D{D5x0dbBf`SAUsro?``+>o#rMkJ9=-P(h8H)q*#Ivhg}I$G zg@3cpNpfM|w(qTUI&PT*G$|Ubm~jKu&<2CqoIXv%z1c8t>-ww%IO*<@-cED-4xa*` zOY-wQ=}d7__b&x2)5;NasY9epHWfs`dBfZw=8n-m-hIna3r?f+Yi$nUAR8pgb@dS3+!4 zkuA*uwv6^+qWCLIgV9e9g!TJeB^>f5sK%CNSdk_@Mtx{pGc?{=D88r0Gw?v_;HOfFGBp#a}t~*4V1S6wb z>j{wY?FoeKY9^!Xb|v4X$bb%m%tvKVs8o{Qxrwc?YYo)vNpyK&2wgA;VH*Bzrnehk zj@rc#%!8h81#`{R75p8@4kpJOuHO}K!ykl&_jo<-RtIsyv*WbQJ0$TXXE>;KXuMeAN=eqZrphLD;w*fZ|x!)_x0n)H8KXPMvaCZ z?T^uU4qXr%eJt1$pqfx znvvMT={U0hz$~1#E~`lHdn{cWsps!6o151b4$eSbl7K&zS4fa?A8og$?it`TQw^u{ zsRyn0DBe#NXyQD0mrex9IclQq*(j2+5f@b*pINgv7j9X^oJu_j|ITvahil6N)JbS` zqImDv?35quCA_FQ!MZpBK%bJW*N!QT3E*X(YYPI+WQDM#E?~yt^tsomQy-G#(nBP( zZ}$SB!B;|64|Z$Z!-kO|Y}0*pk?i{HV72*xH)hz04NV}8Fpx$RimO(|M>Tw{YFs_E zKIk#tRE>%;YMfD=D1kt~s2?9qk6)6+kpJ$@Xb2zKs(9T98=Hx62X#xMl)P&*_9R`I)Fbi@D8-kXM5mX%e) z>wWh=cZ@mbtjwC{5hxi1WGYZZKoA>gRHPAcKpJgr{aU*PyKS`xZ9j+p+5v2^)fN@8 zMGyp$LFNLgsDYZttei6=A|v7s=j{D{Kla||?0xRJky!<_R#n{Ri6BjTQW?itoz z>s@OB8^?i_F_5(#7@X}?Z1M>WU>|_p5ZVXK*WJb8?YR%Y`vJP!e`6nTpbdO!MA*AW z%T@OR`VVs8Cigoo1+9mb=R6toV?QdR=RF^1%`BjsNYTcnd}zIec(xwtrQ3@2{pY9f zo|C`v)IYl6*Z$Kw<WWbr6s?2IL54X%C=LtknuifeK%rZaQ3HI{ zDx4al8mJ+RIf`eQh-Rq+8A{_?qMON7AoqwQ-l&4^|GLCGjh8$P_}on5{lCOYO=AM3 zc9=|m|;Oo6z%yY&{xk?uYW&)DGqOE>gttJ_N|@Q z4WNGFTxiPZBT5#A5;K7f29L&|cQkAR;Eiow_O%Z983Pmn2pR_jC1TkquxVUf$_PNq zTWH^M;2I1CU@DM9Q1}_Zv7hBDd>^odMNSsR`ma40G+q|AVo{LG|JyJY1rt8C$6}j| zaY`rxXMTTs`LP6he%m+10XHd8Z&Qf<;0vZfIf7b>H|v`DfJ8`C1IXIM;|ZPsUN4Fd&*h9Zk3D0HNf9f(W)lP(2dcW*8+9FxG|y1C5+p;FgwFUog`xq^rlE z@iK6788|uwP5@>I6n(%f0cw#Xn-Or~B5O{Z0M<_dErIM_0D2uSM;E}l0*WO-c0xKA z0cH;9*U{inKt2S}^=_N72rT!2PhA4cUk7>eyhiq30{(Xn{9$$M-UXm_-ubX^`~jg? zy$Y?f&c&VvFbJi#n8B?F=)SeP=I>bh%7r(b{PI;do%+)GpE&wASD9kGH(OV??Y)d& z)@!TTBY)Y&@lP>^hsYqa!ZSuuTU;5K_3P z@+=JR#Sp-85KaQg-)9nvT-N1r1`J6YKIxD%-{fW|uT zR~VoufLsKoa7wB*>AE%4oiGDp6_#{?FAf&)$E)XJP7N`J`~AX$z`SJn1V$_jIRl7@ zWBI~7peY+cEDQ_;f}^&;C7Hr|77bQS0V9-NCnU|#4&aTYTC=kUfI$j&0FX*qI{?2} z3T8=!m~;&vF}3Wadg5eWQ#x8K6x6Yzi(_ju&?EEv+hy&YJw3h$E$&-ZEo78an+DJ* z3{#;pwpOtrMV5PP$6d12XR%B|#L^~~5eQ1Lh?~olPM1-%0c3<$MxvR)BbQQvAz(vc zahrtu#Uq15Paia}3$8fwo2&WSuiG>;Tz*U~M-f+XKw@BX%$cJp zUnY!B!mtwIt|-z%2~vqOw(2=uz+~lGgRI*q?V=XnawaU=KY59_4&MHeCEl&aKRwU~ zz!nf}hyg&^BCGj}yV!YE2iIJRo1VXY^j}||4c@VM!T`sBd<|OdLBX@Y_>jV_AKme7 z$G_0|`Ng%twHKUq408(xVm$B*kuJ13<2P}CsMV*%=W!^_O&s+#S+|-`qbeXiYNL<| zrrw(`!m-Y&j9dahUk@ifx}yYh9DzKp{*Fa+wqMm&} zx;U}X2Zr*eJFxyg=i0;DS#w7;x2-dY40VTc(Ntt@DvFE@XKbO#qRlp&Wm|Me#+rmc zBEm3=gfw9^CgD>6+Q3k`1BYi=T0-b35;Xu?xtk#rML>%L9Rl|VlsOlW9SH^_!ts$t z-f5%NYfG;$GB;l!lNI3DL%>60;22PhT|)^i5@bmPJz%*2PFO$>A&X;RyMmLcy%EI{ zFz5ny0a)7snYjSyZ;MXN_W}5rX9O8|XaIa+H?aSWkZZO_3#ua;{1F0vH3vTHzCQ$T z0&NUm|7vN!@rN!SO3y1&%BfdBo^{s+9}7k`d2owf2JABFFC zw)5h?7wK1?bzSTGdb_i492{0Segk9qHb%Y%!z~fjgW?R-I3v`+@<|ip*SMJyu>jJb z4E|G)cprxOqYgM9trG9n(R4!7r*^2YVfPi7>w@2 z34bH$Kw$|61#tZK{>&X8-}dAAz4Vhi_|)9FdzaDaTbKexZdfPIUYY{>8f0LJn8*p> zSIhIWNHg{7GOK{fmLNpU6A)J;9LKJRB-O649$Z*IeK!tU;zM zG6*ub&n*(PVI3x6panq(1WkgLuTx$igKaXz(6fK>YY4bFq~RzJ{+ZLdXfNo4Nvn4geB}1MJbF52a^L0xQRX zhep5=#|}dS<2gdMC|Ku0cdw1d)EPV46avr9p$Q_P>xYtUIbcKK<0LMw)XD; ze53+`Hw}S%F9$AsG33&-(y;~^Gw6B+`i&g;WB2_LTr0`k>%U)GZ+rvB*E|X5lCDnm zt(n2c9RTD(K2Y7PD}VJ@e`R0#(wBH(ZaR+@X?pHhX3W8)(3yRZQX{NsSNYT(Fe>?!hK&{y!QT2 zF8sUB>iFCDFP_AnZR_ARY+k?`OS)0IZ32Duu4`%tNNxaFiNPa!ZIfA+5m2#Gel79* zU6iX7=MV?yZn-EF4*;Xl6Ol@3D4&O;8)JMPhI7$Ya%o__Vi0I;#RL}C0l>lnW8(ne zSp4_Ifkb%FsvsCjhGWu(acIHPGM6%bSs0lY*5_8~VuqVu?3C(r)DkR0ds;?usT6rkoUwD5KnVC^s#Vtj9&62__?p zjI8dkB@o6!(wk%9c@k2Dj0j}mv|2+hqmO_g10yEnAV^MvAbVlsnlMaJ>B-|xX z$KShhi{%kv)wWP%ZOkkx>2`-QJ6Z-#90!h%fE6eE+7^M^f(;EkumBWiLwc7$_OyY{ zF#z`fxYr{!Te06}7C3blkY54mtOK(j2Ka826yNm&;NS}&PyJS4M~1Sksv@`v^hpi; zW&!-Mlwj~S07t&**=W7_4RY-(UX6Zy-WvmKfx*W<0~or1$Kx^D?Y6s=6NUfR#K^#C zNdbz8YxK|N3(kFM>pS;6H+xlgclLzQafM?y5l-C77#tG|W}~}S=`J{gB2@|bQeCX6 zL59WV%-B~Y@tz^u*9_hsp`qinEa8^K`?z^;Ygd{=>_{IVvz%vVkNRh(Z-_O)jgi+#ggjo8fia zO|D_={}qC#doa+BM-02HoWxOr5@cph1x4mTpcW54C7u5(V`2gbG^rdcrp5p^#KI)w zo>WDS`8q0YHYr~FEfxn%n;k&nG8=uKCdy*7TDAksX zH56ND%Bf9bqp8R=S#+t$+hmK3pfpKtSY%9MTO@gppxPw5OAvx+O=yA8A`;})jvi}Z zqzD5`Fk=$E4s?bjt&!V!-6ydfLe?c9Bfwg$<-i(gj9MMhJ%w%kHPI)IK_5E_9D_SZ zwBJcNaF~I6_W<1|L(VxDG7o=;y$QfU0Lvb&`TcupC!o&)@{^F^CxN9QpyvQ{0{Ht5 z(D^RNGp_PS&Dbw6b-FO1k7mGo3pYD>#5s!B(8b21kMq?{j&+l{5HQ zmVk?*fYussed}B4=YRg^p|z%>C~B>mU=Ieh6fkh>8VdmZ{k&uUH|rPf`(PUUy>nj(v7~0^~3L8ZGoOhHLDmCIjy$)u`Mw%0GnENM1oj%hpG^5X0l?4{Ia!h?YG|OD zQm-~q%NT>pTE<@q0J--6F=H4&q!l-R=)s(LP-BC$*9c4mbb{MAFk;qA)n94Uw8+|w@+>2xI$WrEvdm;aB(NkhA}SQgSV+d? zc9O{e(j-a~+C*qs78M*X3K%QG1`~!ki5d~~I-ysPWN^oz$yii}pt_E~T_eI8w_s;7 z%=B}~hRdQKJP376pave169Hqv+6HiM*RgzOJq6e?>(@NSvw{x-H~?VH@9!mGq=2=% zf$^=7nHgYq5x9LFc;HFE6JG^c3X7n~s1zqu3jo}&LGKjctp;$BgSZJD9DMCRlf6Iw zW4QY2Cq=WK0x7oU1s`(&FtC6{Q6S4Q0sv+vYc18z=kn4@3im#urqxgcg(4hjDsRoWhmCwVbs8w4%>h1pb2LOx7PS@%-OJGe{&4o0{}% zqa-d<&4|WeHY^M{VvNg~K&pK%9m7;Lwh*8gqLnq8p>twvm<*@#HrDet@?71X!F+T! z8-KK`%x&G4c~G~_n#xe*ZO&ASv%HIJK*VS>sh$#=5knfL)gmE*&4?_71Y?2Zz|ca5 z1Q@^LSd;XL(GhYJqwEYLrwCZL3>cQqh|tSPS~MD;?%5Qv<5sVz<39+crj%55(q81syT*d1t0XFa1FqW`#k&-uzokt z+6kc!@R?ZvFNa+B)av~au4?HZ{$Pk@;!k;*_>bJ1dJ@23-+B1*54}dN__3eFzWz-0 z3qEjqixqqf06+jR#y}~Bcfb4Hc*QGTK>(0t85KoAA~IDdA|fbF(3#ewVPVADQT+eU z|A{Lvf99L^zx<}-pMCkghmT*oauCQ50OsI4ijzIqF$z%zlo{p>?2huPy69nsf) zgn)Fk?J9i@)-znjy3l$f?q+Wbz!X$6fVObpFP4HOs!xl}A!4fv-2eg$R3LC19KZgv z5jS#Xr8$dm+Q03Tw~%VUFR*@@XZ$kqAkfRe+Ji%uG^?=80F3&LlK|)v2vW)ZImuY6 zJivGcFp{CcwPw!<1R}2UtN(vFIOt70AzFrDm9|zB7z`eQv0k*XI__XlWDv^-0J@>0 zTLAVY^%r6Yv7f`tnOGt2=~pkTmcWY=dDnWZ-7cW7y= zWnkq5*1s|UodlGDblYzK6*+LA0B8x=z6YY`2^&iQp9kqGkKI z7JyqUaQ!zxzUfVni=zQQvC+aX0Q))^{HzAv8)>lYjVlgT7#<4ATq{?i%gJ-Yu0nFd$xMvH@^@sf6;g5 z7hic{`TaxVyZPfQ@4D{e$KUnxJ5Jv8k^_hHeH#aW@k0vc@Epu)3#Q;)s32+?QY}$# zI@-rW*sr(5D-9RshhylN4*Iqv-p4rL8;M{50|8@(RO>v2nG4$3c76-{m(<2p#{T7V z4vzl#>30tQdgpD%1{nuC(Z+5lC~Sl~=8^kmFFkl@_D71N>IateT4&e7GJ3NH0_3@$ z?V|?622JhB#^#M4Xp(IkSi$61DK&va^L;T|Z0c;LxVt;*#yd=bK86@hc-%!uKM%Iyiuh2Y@jfI7TH2kNnT& zk}`W`KH=1&>)Lx9;a%l{p9(T>1p0#fn-QS7+Fd0$tF@Mp2kca11LL4;)aC^f0OUGgIuvrHvCt*Vz;_RC2+Rg#gBfd@WV}?^nf)Evwloy19zlNB-F9@s zKouF-8rvpIqam=|2CxX(HSdm*Q!T)p1<~iZ-r)@7P}&gyw*YvL05<@bb0Z3$>Hw#{ z19I()A=|bmBZ2Oo8koVNK_(Uky*uwzh^hzxmDd_P4*ii62OQ`J#(1!i!)0VtL6+UV>*l;~8kRTJg^-fh7VL z@$cm_#y!I?ZhQZ+-+S?wR{rig?>c_>3yvK@dvFja4iU`pdF0CqHdlp^5z0hSW{9<~ z+7vgm9kYE?0oQ3I-ewa@U_X9M9sJTSCjP7sw_xrr5|8u*K6{B#8H0^n=2bNRLukZ}bLm6uw} z$`?v&>xew4Ln`kk;ID2Nu{Gcq?I)6W9H0W5?WkLGRf@CI~Tv zm9?4$te`A`EC@y%FdQ0%jXcA!&?tm4${D%UYpTb~r1>Bjb;uMrsWP?P-9gI(mSuEk zx!s}VOw-9uM$3!yyoPnGj|>Kd#=vG6p~YC*q0#NIo6R(Cwr^uZSQCZWnHIXe%$-C9 z0V@Km5>AYO_1Ql9=g#udjVdwkSNT zL2t3ZZ@UBKdH{!>{A8T}+rKH>p7<2(jDaB0mOT7u1%P2DFgy+%IDo(X+rP!Fx890= zzmK)GHN5ntFU5K1orjs38O+bmPyBvS6i`Zm{XyUYUWF|TYs$!98_UP4IgXpw{{H;W zpZdV_Z&?2Dx88Z;?q{zY$KuI{fZ`BP9O)rn?LfxLT5Am{OUMkVOjJ4i9c7C>9ErD? zA8eL*r~PcB+jvXjee{C8aIw%Jt&z8jF~@*xgJTgD5%DKr-&yy zSEQM>q^z0=3n++UAV`(s4649b0Ci=LZ&c;xq+Xev^OK78OSTJW@@FJ3BOaHFL0}2~ z01Ttpm?B~jn`Zq`DWPDh7(Y$bY+s8U@M{Us(m;zHd-Jfs;(`-#Yk4w+-N|dkQaopArzKjm|?X-VF<=B#42OKgR!BZ>hpj# zuNb0L%W5?fT4mxD)#g?1tJUEKt!6W7C7V$vIxT%<+wRuUxsF;HuNJ3Hp0vZ!(j4Y5 zn#0nL4JdO2IJf}}z5XqXQzvx$p><}SYxCKAW=xw_1Vgbf$7PHGhW%xjT?0|)=jgUP z82mJVcfl<_j{rAs5ZdQK&e{#EUMd(o88UYnu*6dqAJ)J3Squgl^ezSbryTeKa1_9U ztseC6{-$KF`9544C9Ydzz*|u=k3I&_S_=_@QtFKUV4ml09`Fq7Wkdu9#$B68hihg9 z2#e!5WbWMc*_HP`@A~DxebH?vzVN&Qhx5HFM}XoeFgya-l^NKz7OX*GV1%_0X{$Js zaDj)`K;M?c`=|qZA@U=KK~4h00)m1rI9mkHzp9P?vPaIP}l2pfq_J{!VC}RHN+PB2RAfD+9z%Q?=+ic;o^#aRh<51)Hbx$n~-h4ln z+u$PRU}6vmU}T({IJS-*ETozvtUpBz(lV+Tzrgyn*)xBh@e3bX5i;%eo2s0(AaX&> zaTPm70G%f?{>aVx1vjuw**`IqIEc{z2E|tIGu1$$NW;#ng-izkPK4&(@EQvo1Hq(~ zDt3vxgIXW}D_A(f$`V;HL0mnexacK!R6C1{1y|Ph^t`b}SX?+GNCAQsg0TcKKw%k0 zK^To4^JtaAm^2E~K%v$_dUe41J|q3RJLh-rUf6@X=;+$rJGb#Y-9A0gUlgEiVMi7R zyDg}NIqYur2&Z%#116Zl!jc_hO@>{AwX=^&??PaH{S@evM}gZ4;9lUKdx4D^$QAQ$ zKi@e^XniBFa6ZuAE}{s)f;(`fn>M~6hdbZ`9zUXiw;14mxI5h60GRpVH^@c*@2_EJ z)-7?m6vbAi;G+ou#z0L(N4p@qS%YyU8R+wfCQzv~i%-|*x z?-uO)ClB^SatI2tDA>{7TC|!qXe|k{ZNS`4;F>43aPFl~zx{7Na??lW{(k+#-|}(u z@qhb;{Gm>fzPks3_LpBt`p9mvy*n_tW&rfB0jz3a<>_tzyb|x}3Yf)CUh?&B;&ar90m&jD7&&vT^*3T$wRi;i*IFqn-V%_3(=$@j z53CwcuJsiAtYJ4F=q2Hig_|VPE9d;U`m8{mN$T)h7v~wg#v~} zS>S91$O~Yc6NUrE`mlu!$&jOkQ=^vUPWw)yvM+7lslU)}(-((JxOs3PAJ~6!2aBy1 zvULrtD`1sd7(v@YnSs{E?9Y(T6w5l*mfUyEjEdrxG zg#NiA^IZUa02xGfIYUbM7+0*IcpaYJNx%;pVC>AwA9&g~V)y^}b$R|Z-%!pSZUMnZ z836ppdKj@puw)@hQzriUnLO6)34C$&gZu6u-}?0HPk!K8ht}_Z)}6-=UUlj?uzD0Q z%fR3$AZr~I>kM0HYpgXy7RX#CAuE5{vv^?W4^;bbT)Zh1+yZ_7m`8RECi!%?Z?47G?D15df45_}Qr8Lmm#mn|7$h(I)ZN zDmo6m9BH{y(?V9@$N(cl7#d(`JP`COWq4l{`yglK**^c#j+j90XZXJE1{$YEEfhr;D|!3GXr}#%*$aDr(>cHOcRMa_-L|yY zLdz)NlmI783mc+MSDB5hW$bMXSqB!*X4v*RzHd4u{E`7~06q`k@HbqGOW*dpvj6HQ2J#TLD7K{G zEdY4t4-tXDu!S&_A_kjOxN(o=;xKOB_}C@)k8XPEXHLBD$s75`Q@(QSmMc!JqJQEj zFggL`CxBvEVZ5qQ3>3tYwPFoOz#1gVFe?x%CnZzqCaj#uB3lygKM6LkF5emm3J>%G ztH-3!E=bQ|!yw#dgheoV5r7M>0q{hHBPZv-;eMHU!}>gb&th+_dsb%^ zOTDp+1hgn}OS)tWP|YeO_l(BC_k7CUH(k!Ay-PTWSDNqF5K2 z;LoYzNuqwY00I-hZrzQh{GJBvNFZY*LC=Aa5ns zr-DpOZr+bWZen2n{2U-F-_0AgODcJp71D+eE2VzzLZCftu~Y^_OR)8s*v*Y9w}u*I zVWh`E(}$R*ucbOBn&vSBpqujE24hfCTS(CysZ@^Gl6H+Eh$haN8n_IE0i*$=QYxcP zJy)aGk}#jlZiPuOnym|`CMXD43Sh9oIJul*dCa%@;N{lL+18F z+ARXs1+ovo`O&aPc%N1DmfWa;e^CHmaIF#dTzxItfAG6<{?$)JyChodmRV#A06wyZ z6-(AFF_oeWR5O-@$Eo5Z4&+~1xMl4VSDz>zc*^xB|L!RduHAL*;giGj*H?j+lR&-# z{=qUTtYD79#G(B(P-N z-ICocj16;7pn4W+9_TCp*#a=P=swQc);)Cg+y&R~?wKI*DUJ zDuJc|)irID!OI#TAwMT5mF#TX-?oK#07yRI*)^z;0qh9r9A6X*Q@Xi1I*yvgZK4K| zSdNFUWB9qFCM(?SpMMEpF93HS88rwedEy^&mXN}{`fMme$oNM z@hUJ_1$e|LhJcI+Fk~U*h9lVm8Uzw{Ycn{Y$eXY(z+@HH;|0_;>=QrxBjIxi@T{)~ zAY!m#>I!rRuw9GZJkVNjA3L@Ktv;}4q4U80*^6)5(>>>gYZqQ{<0#K>c*fFq+_}KJ z#~F7fj~io|lpFj0rT_VMDc<--`=X7Zy%qpknOZ9f^!rb}?GFx;N{THR@CK9+YDHo|s6y=;TomZzO}fjdl$0iU7i zbnCGN0MGal%@Z<%h)Flj6o$vi{4j*`?#GV5>)dvhUHSRtzrFgv#+{dFWEb6V?8dXl z11t>(z=;)LvNIrtko&@am(Xa=xyNbqTB=PZFTXf-DNe zqZ(@lj-*qrfL&>-Py$xuowefrUq|3is@Fo1OO-tEGJeAhIlwozKyHA-3W^Xu%?|7- z<>vdcAl(Mbv;VN(nOn{{8YyQvB}lY>|8QvLP*ldkls&xUSXd?pw#gDg6>eY}U5%KV z10;h4(8o-2sB?qwS56irHga-H%3w}J?vPsmkV$hR3Dw^(O(oW!FF7FNhMwuL|8-Pr zNRfP7H-tnrgi6V-cbhOr|YC zphl+%_Z^+Z0hwFL&Y$@&7hXlbv3uum6%Q4_gR%f+jj^B=Ez+6S(&{TwU9!~9fI(N} z)Qr%{wqUd&c5o6aofR3MbwpO>db*2)<2!eKZuxJ{S?X-R z=yNCEf6)W$cV48aeeq2vzO-*R!lI1O9u9%!Q^05)$kzcH0{I58u?7?yKqd?+Ty+n| z0vHCM#0M67(CDw2m9?yj%qIq5xx7kKa^L0p)r4Xe%1*(FDRX4YJGcb^<;t%r=|&Q_ z9|bVyz19Q<z_x*QA87Z0-YhWJ1E>Y*ba4Et?N7L;kkRdD z^)I~Rsf*uw$BDtQ+n>Dn!h83$E)w< z`q$I9zwK@G96*D~!bdWCKGSy}Eh58G^zfIO*YV5_cU>%f;SXZEN(eK`Wd zj^Gjpc*#|~F*|U}L=NCa=Q)*9ueUebNaKvUodq@USG&HDYKRN+V6G(33NO2cgTw$IIrrazlx5Blv3#+XWuj*wR3CZ;MaS)^tjq3Zl$|9To0?IpmRa!L|6fIylY zkpNZa(B%3}CYfJKUUC3~N=BfA$Gf<9Z2|et&YxcV1oP8-7RLABA+>;)7%-6J2iiXB6n! z2E_=tq1D4(Z~y=B%I|)S1OzKvvhWrF{KsJo4H1Z}LuACxta(~+2mmKWhX7^J)&2HE zqdOKqzx=`7Gp+u<0^_qka^ziS-z?!D>6jf>+PeVd~v1uz@~r`7>82F3$m zJOpG6=)&LVat9WR+pyWD3zs zwP5SeSt?S^^%+~WcobuQ9(d4WMPQ6)fa-E?7TvIY5iXY|4XRi^RhcD9wvQw8gsKc5 zh(43@W{DVN(&Tm|AW&6=s~`%4j&@LxfuY>I9zM4E=r#<_^Gh zAG23E#WQ@`zh?{rw*b!K<`7C6K*acbNLyn9Jpi3xnuE)nr{_h2D%qF3n>g-zFWE>x z9RdJ$EU-hrk!DgxcFd%d*FbJFCWh+*Nbw7S81PAHZjpK=U3naZ_q#mrjR%)gaEzN@ zjE){>fUDWwkS6_bWztK?Ic7wOE z!FWW3c8e{9Wu(a>gUx1@h>QR-7)+5`++0oVA9S;oe-1gbye>2yi-i#G91Hvo>GgjT`h-y+5^FK~NPVBT*p^j5Lpf1h!8#NW(Hk7N%yYIKBMTjaHIwGaL{kg0!_Q z2$J1-Z~;fK?Ne7=Gx)CgrO^YjruJDYQW!4UnVWUDV4EwpXu)QEZMf4Fw0l-g8KGk= zI5sCTSi}*V$@=~Svi-$(Vs76d35z)jR&&TCBRFEvj}Y*7gHHqa()Yg(Fa5o@$=)qC za0>uF$^c^2U}|Bb+Z7})oYKT6rN~C6b&%ZdL$?CUiSEYAeDPu4qV@Dpb;Kt1Y z+M=p?6GXFLDwWm*ArB8J>leP~L0{&rwI$e7Rb&b?(pHlCEMbkcYy^Q3^UfKSV6k+N zhJ%c2$3;U>F`AssAc)`3WC^A`tK7bm5(G*KoC6bRjh9ai5Z9`NB|z4t(hCuo$yhBd zjUx5)Brub{_l~0Ox%lgH-`P|$ln_j<;)tD>;R{4|J&&b>{|R8|7pxHwjCzL!0Nt#Bmm8QnfIshaF!Q$`kQY7kS=DuX ziw)cYfR8;k5oiL8?*2gjgh|ftauS9nn>D|_$4%1nl}4|oV9sqPM|I;4MzZ{0Tgiz) ztkI;jSit%aXz#0PjhGgFGbQIR36~8;vT?IS?RRO~ybvbmhluK| z9}+Z~v=qef{tUohvcDoG)Y;snnq89Sd8hzb#R6u`B|tI8fj-LsoIqp00&5-f=h!SN z8$M#tMR2oY&glvubDg-HRe{IKGkg=qjwr|(TyyWnuF!g(W4%=(-rwcyCZ#>bH2Hf? z%wki`U*!y+oVB#$Fyki4fk0mFEJs1g=ol*ZGb}+y0yFlEUBuN=6vj+KwOm9hQ&LK$ znkk(*&L=D1DE_4)>VKAI7BM(@Q4cnc4n=DLS+_95DzmRN`jle;0gyT>lRSG!QJ_3x zRi-%$p@^56TM!oSeLGwqGi%^wOUm8eCdSc_urFD z=Qy(5qq~=PoV?(|@ptXmJN%ez@cxlwf=5hbsGtId4MbThWXG8p+v}R%%)G^%5@chM zV_l(#`oO(oIk~=s+pl`9EPm%V%EjCMJAk)FSWcmAeht?<0P-M%o^64kg@>tl=z&u4_9Op5Ll1FiErGeV+Cb0?=PZ%r$z$B28x8CXfl-4_Y-QeFKP&q z;)*y*_XAAIw=Un$T@s%;b;AFz>;GErSQPdgr4$r<}qfa zIAZghlQx?5i-MYCi8t+tjsD&6{qn{cXZ^7x#wzg!lEx74z}lgbrK?2e6ogLz!A3WL zz>XvtnhP={Wo|;bY+~5N-k*(Q0-hxT*HLsCL0S#Zp&?!qLT9iKtnER7GzYthmw&@!61+V)27PC zgo%xTaKz|NG?7d!tfGI5oEiJ)iGb9lU;n+-_Fpa{IFjzm-yyVHxgC!c-+X8X`iuIP zFTQB)mmpXe=c=dL7(!D);DQYq6l@^M6tH&OX&Kd#>FVoI601&Ptov>XDRne|eK8@MBgnv-!a_`FYn9XUpqm1} z+D$+vuGF& z+OR*Dm2_!_phG)S0wmPgKGgnQ0!u3UgPZ!F>&$U{Q%_Ar1lh3F`{oZa&ivnxIUzq| zDYaTYv5|u~j+6;(bkgHY6~pEM8i_#G!@OT=U~yTARAmH4GH(fxb4lmqR5VZ51pLsz z78-Hp7E@b|5c%Al2n0vfwj}wZ+x27nF3J>=X1lHuVPru1>b#a0Vj*uPhNTX#%tQ${8TYk+m)uF5EUk) zLMbYE%m%qKuwn})yWW~Hy~SCZ&B4jSswZ^wHo;d4434hjj{V;zz1RMPT(}Z>p&v%{p zt3UoZ^QAxkk+bK4v-Se*S)j;~7lst9x5HriP2^0%v?nt6n!wOB=8u|Phsp26?E+!u z4AD)}&vJ#E`UL9`x~omY920ybN)7x;v|$u60qI>O5{XZ@@TMx>C6SdWO{SJ;cCa*j z3<$*#rQB<*vkY0!PKBDV(DtFkvwBp`@+swHNmk+jAT@wKs&~Yq%8mmjVn9kcICAio zGkg(Pm&hucfO1uPE=5%a995KYX*Jf6-v2ZoxMAUR4FFvyYIs%&ZXYQES2AyKtj z8YM&3ykNZlqY!9f?+LzuKevm+kU&);C85>v5g zVeTyfO*T3aO>iGq&haE3$)9}j{;9WoxaXDT3{a4pJB(sv5_X@e2${*>m#OO~X<#L# zp+O{er&F51?w_|}a+B&!fwWo$PONt6uI25^7hGswwX}WXGj@!e8CPB7w{uGp-U5JIkH-V>^D?g+8W|s7!F_-6`_H)V zlkfP2{)1n7&V~Dc9eV%}n>>f)2AchCPc{R74NSrmLhJN&9B}%Xq4?%kpL>dK4rN3{ zVDsuXenduu2uw(kj@u;+O1$Eaa{VU2-zJEb_%yE{p+2mspUyvDWSR(Bf1%5_*Z}eo zV3jv~6jA7LsBAEzIM8bLm&PF1ZOLBl(-eJ1g0Vq=dR2(T+Q0W{FGO&fNunvrJpQ|jugf*LF_!1*j)5#>wCv02`hln9}uHxFSg}KS# z$_-h8v3bM;qzd#(B4=?h$2msjBss6Fac%p>;*}6=1479R3@82>gRKOPIDY- z5OsP})10w?{Viq9c+BdS!#l9FH~ZQKQ}85$}BBUVV; zwN~HKV$aSjS&O+$KwZd#3qqgKkb{J;ocjc!@A+}L^qdZW&q3tbAR08XfdT;UQlRfL z_z-~W|HHq>PygG0S7lLcfxs;Qxb=9fp+0eay;_y)_SG+Z33q(x4}Rd-Cw~7eXW5fy zop&zKUj)Q(KF&qks9g-F0e_IG_mSq`15PUkPsL94`kMlxq&qM_(iq-MCHNzjNi#>B=T--RrEKhhKpps@ z2?$7%#3QJIzll*yK{DA;kM@ztYQgyUoM@7fD#uPj7;`BL2OvWJz3~p>wP=pdMl*uG zK}0RGFE9$gC2I3%sx6dB0CU>&FM3UqxN56nC76h5H8MFgn?%D%Wmt)%a`zfjbBkCw znVHa7LpS04ts8vmivpyJ6hh=CPESey-pO=xNOU~ZpQk#$eCKwJ{TC5vwwA5%ZHE_8 z^k)C`@=G^cy3%C+#qEe%3O%f^cg99J=X?+wXqoFaA4o{h$5IbG8F#pAD!UOEHEi3MtE&>SoiX ziZqc;ZYJ_IcK>d|B$jMlEo&|b8McvJ7qe_C!j~$I#0bIPNt8=nniQ&K7pAVj5C$U+ z>}2C>jsgh7j9PqiiSO`r@MjD1GkCZnPK+1UK@U3+$iU|bGC)Q3I#rv%JxWt<>gTG^ zbcT|eKw<60$mUFERsB{w39UqoSH!Lc5XDrnesOGx)EbxI0i{j1g_;akR0sB$42kEM zlGyW1Vzuz1Bxt;%l!+sdO;xR7{n%o$qLrZo$7gZ0Sp3pumk+_2}J=hh0#=)mMSu(4Gqa)3=7+`tL<4!JJ`-HDnYL!Seygy=n6j4$N0p8+;sWb zn0d_)$i<7Z0B(ZFD?oI+-v}=Yd#A7kfuBTp;ENW2eAy*<-7Q~{?Ep-kLuJ|4{c{Td zZap5wjGrd0N@K@8@B53rxBjnx`|AtKx4h!wUBLFe09cvv(2|WVlQEOFnXKCg2y1f6 zv>S>@^DO!_JOngEG{mhT@f=Sy9M3Af=_RcQsDNB-SfGYBl7w}uF@5E~W5;iUH)N{1 zlFTgCy}$8IDg@JwJ$F+4Rq;$DUojI!oMH3`t{~GoW#j7S;1G3Vv@IVtAD9K_W zX^DZP*Sn^m>sWV6)5${VX6>nJ#SjV+y(N zg2)tNO_8^yP@T*uqY4aQVYJO{&kp8Vwzr=}&(8?@ZOCd*=zR;o1AFA=-Ux@jKlZMs*6yUe%{GWVvN!t@(v8ngePJ#ed z4Is-#*FjVgF>!79I|ekUWL`wyn~;4I0>TE!vb#qiJteWU2}5ND2PJ;9&rH zCSv{=pthgA1Da)ExZjuB3?enO#7LN>s|R|=8G&d3`{kTqr2#q0UqiB?g+3Hm20UUf&4G&OYkO@@R zE@zqLU2NwTx`M@7NWUxev031=d*x)2e|q7)fArShnm=*NH(z!hFuR=~ zIr33KnyP?=uNwSKV*@t>erMXfQosL*ZGN7(#UX&X(&1bGxfnFWpg<-Wq||+jwB@6I zbBVr}5PGM{F-)C@(T!>1MTR+T^5BoEuxFq5R{}qi4)GKFnZDf3lBrVu^+35rU=}~K zMM-5?xcQ20=z6X7_)Y>Wnv8;pBTS5x%wDK*BL=AJ9iJTkZu&liIV*`w07;m2Qy_AX zg?X}exn37mF-1~^iWjabE{>cbRbwJITfNw*MWO^cQS!BaU*Xxn;8ss&<^Y#9xZ*)$ zV6B5>nh~-&cEE`y%^caQr**te{Bp{m{K$y$(sM z=cWKbi54&utuyfwtvptxBI+jG#F9X{5Iq!_XiC6jI8-T`+oj13^=2&1#*(#s^TA!{ z?#zDSf{O>ghB582!p1_46?8#BAyO1Y%NX=@kqHdelttdN>!M}23wCk;oaKcXU`Jo% za|HV6rLuN#h#Rjx7Z?1%>t&bj_}B9m0RO&PNw`cXw>bM127c1wO#q(qr7y_$Uh_m4 zW1zM`;1&Sfdi)c`e%7+5>Ma1=_P%#re*gda`TxGSe9N;hJr|hS2AG11ynt@VTb=}e zP2sRjU=Y(+;XY~j&7HIJe9>L5J0HOs{$D1o`%ve>W^YzTd z@->DwssPd=w_&osDFSrLSI$jD#JDHmE`i!qHbM|1iTP;k2#((u8~J-8qffb;SrQ*e z0>W!-Au(WmzFksT7cB@#M{|kw#X=Hi<`m*q@;H}KatFMf++G=RXp;pTq3Qfjy3tM#AQPu;1cKts!o)x$@w%tnA8D?j zG&*>J<|LW)_=#*)<)Tj}GDoY$Kw3IlxsNF^f>cwaQdKw#VOlYrSb)V?tqQ*V&^DO< z%-b)!Z16LHY!j7qp%rZ~?%Kk(Wo6FVnX`M+?#v4I^+k?q z(1$J+dlJeGb4=B0AYrD#hIjxWM3709^H@FUU7v^F&xYTc1e0+p19J-Z4?nEh{KKpJ6L|^l(|ZnA0S1FO>r+$#Xn5c$!(HjIKh6P`r9P6 zJ6QyboPmH~t(0vZPV$u~F45H7&2A+BBM02 zhSPp!it`~8Mpghzu!U!o%ltXd1jazG#g%QIro7iNU<#vHr>s978RR>5C6^>*8aADw z6AR=gEjXf@#dsjUz<_TpNx)Zl{=7C^A1fmE@OW?Q85I82_F#>rLu4SpM zGDWJa#R=BXeM6Ff=>{FQc1}_gz$-zZ-w(<0MP-ejkd!${1D9C* z27sk6eL=qankR1M1a1Mqt;atJ;3pOYXb=|waOC>W&ENFaSHG=q?tI0S=esBuQ?O_J zq*0+k{n~p5tRJTQT%GYFIX##=%`AGOSt60Zkh(G@p7*OSvTF-(3eqGyDX(-7qspKw zW?YeUr5RTXo5|&i1jNcQcMD5hmA!(GgJF$7)oG$kmJ> z(okM^EL27h83#ZYa_8KQi?Yz#5N(G1(LzDTQ3Cl+^InofH*wOdO`O9Q+C==Jg^xA71L7-SjOXqm#M30V|r7v85 z#qfKw%;r+49+-v&aiN5BMpi($7;#}}zA!BogQI;5?$~uRlC}LacGvEC!Q8B1PQ%`G ziSVEGaMSQU9DmKL@a*S2Ps(dCJrBS~s_hA586E`w7=WjI;S2KWCq8j&CU6S?Zaw}H zksrj0Cgp(NiTm%z4Zrduzn0zc*KfY!TwrlK!Q|8k{2Cdx&14$EY31HnHr|ZwlO`AG znY`RO7?eqtu_U&h2p;?ix-_M?WXxXHatr;~l97M@(PlMTU#Wx2fD z5C{0&{GZ8DIe)ynn zB$@5wE`fEe(Ssv!%@MfsPrxB`IRT24evUr^kcq)G0T`t$TnXBBEcK=Py4?HTz#zs4 zTEo9KOD;b#i(-TP%qc0ydd3ptG;>J#Z$+@fDD%(HgV_MY~rR zI?=Njb!~2jvb?Wv=gwY`_UxQUM}rPuEcmNA4DNdXcYgP`zKeh7`WKt%>Z6{|9x`Z{JEd>ix6~oHVd_$*LMtn7}3n;WYGiX5VhOOiu@bvBX&h14lS&B9GR_0I;fI zD+l={lJ-zZx-mP@_A;PmC}r*@0-Y%_caV}Q zgplDf0-4Ld7x(!l!P7Lc%OJU=W*iHk?SM{*UMaV=ez03_#2ESi3`QbVHF&@WSX0Y0 zf*fsB)DV#@PHN@|WL`R7i)Ji+xH8WwP{x2UkTC!gwwKC%RE{5n=phpWqzFunBxOyl zV@Tr@n7iH))JRpK8R-FtC*ES?Oa-K*jD~^l9V+MTLO*dKNndRl_hYLWzZ8;I05F*a zM9K_S;84m%PV#r6dB61Zqhv8xg1~6ZBsGOahAB>V;^KmYRw`F$s#oI*B zEr|3Ppo@k6zd39?@Bsem8!p4Q{>YEYTnPgIBY=N92?B3cz?BAne(B}-rdw~8ofUPs z1pv1mTaT|h>jzOpYyjYn_x|Z+x4!KM-+hUky!4Vw0Ayr_BVvM_+1V%!J-iK)ub@Ff ztpUX|L3fX&^=%rKY9z{%$OTM>EXOzAz@$X8e-z}yauA*>Cn-fy4x2E4L=892DKDZi zk1nDh0{cJ_D^tjPQ{!9Dr`hUc>p94AKTOUfc5Y_)tBXbkI1?+%N zJ%g~kHP`1oYaoyykg=22IUg>DiXX=ya0>u#J-*JYpJ8Gp0A%IhgZS*f{hqhY z-T%?oJ?Tmyn_)X135;OVsLsA@4BAwX$>J51)Mm;jEtk&ET*Kc zF1fkK$Dwu4D-k%P*d&7JIP{AUyXNKqsZFH|+sVA*LAe9X64TozlC-1djYOjNwSOq0 z{bD13grAE53FkWN@YEtMKn@Dup=oQ-(~ZP2{V*-dMs#~nq^6nMn#2LQJW|P^-l0`jf@@PQZ|XCV>6Nh z*7~a4FYsEKF{1&iTaN4=U3is!#oW^HCbL1?nRtVUbHiMKRjzU_Kv}V&I;OQWGP*T3 zIMBBklRVfm(z|lIUE01)zzmtYQ0OnVVeqjB@!qFiPy>Ot0l2g}P{q3a@Simv_~`=g z|Is($4Zrd0k9+W=-ul+JZlRQ|$JdATBPb%a0PyAi^_wra?X54o`I@~Sb@`Dd+{9@o*L3hV^@Y`{qsTLnH2LBkRb9U6Cl+^>kEe8y#;~Fax7mAA9)-n4U1Hc3fIx_`@*AcOY zR1a@f72`EA3mU*ZHyoI#u~ubd4VCno;88ja=bWK~s5c*`S6xOT2kJjWQv6}8Ci zzbta)`ZvY~9I2@~_JV;Uqa@y?+{_r9aKsdbzpdifn&=mqQ^d-X3n(f4ITT)_|4+#) zmMb`4NxMZ0P@OlVoI@Gx=M^<2j4}a0#%T^`^gMAD8&O;X?ayLvSa=4vE)eA(dB?h< ziN9ZdowNkSQ7=9eoG4-isdjCmiSs*FC_?Bvfy($G3SGz1MU4nBhPjoA-PT*rZo8-d zs$Q@4(e8r1*N(9O5v#nMT__?2K}HsKt&5?`knP?8Mj7S?jAJL)$#w}{-36JGB-eG3 zt?tJ8AG;6lKX?c2f67zQAwXn1i2gZ%-z+Z-1Oc95G2bJc{fnQ$?~aD_wC6wnaV-UJ zF@Rf-uLJ96iI@cdPJZ$e`ubmb?O*KFcfI(k3jxZ=498Fp=X~2N-)}PsI01eQzk52i z?`v^pO#D5HZe-zx5u?($^&tjjo*65L=Yb^qjJzC)MCM6vf(ZzySJTNfwA#S_HATQg z@evZ_#mE`y7!C5RAD-2rO3o#p?N>S-!+h9=zmLVNRXtc(qJ8GSXNS@_i0RlpCoxMr z+ZW~YfoenXj3lTTDh1_~SeB9Y0TYtIW%#I#a<_XaTi|~#031yTXm6y$8;(_qSYdn0 zIw0KkU@3E~The|K6J>rOVRK3H;ldmowOpEdZo`Jk{mq;5Lt>?Ib8gVt+hU zQ7TO)G^qle#mJ;{J&L*Enh9yzMJs?c<}@czC^CjnH5V!M1z)^@4Qb0Bvfyt%58!j3mKT1* zQ=MG!ICKVY0l=-t*O>UT<*eTgzxQ8Wc>L`@_5LS330PWy9p?mVlTqz627gn*-4w}p zs@!`T;P>@98v+X;v7?vjO$KOo0oQT?%i6K{=eSz!yM9cX%yJW|g-c61_fszsrAbnd zsKHSk{b1GoOXUE1X}qvh&i<9%zJa~;1^~{gH(Z7Q##FI=N?bmljR3T*ve+mF)`goL zLo^Es?SK$`yh`Zxb>KRxzw)zgRF8it=l^O<9Y;>#upgqZ=;Yr~6i4ZhZHn9pGGdFG z3VzeCW9dyCu(GEt%;Cbfi;eSEoIK2 zQUS-vWTAcLWL&Kl7B#g+D@|O`Xdtu19Prc_y!bq0TvM1%OCqF!3$7G;M+c`qct1Y06)%D0?#&f~HzWD5XpJ-$}RFXT4Ji3cCV=imCOckDXy53jlA zDnKmEs9;487hX-NZ#(V0pESg}NaHo}VSzr{d^6AJ_eE;Cd?h2R6|LZm4;ZyE~{T#3mYhbsUmg};&7wAG>9BYq}}+vHrHgXlR6 zKeVsBY#cX7*ys?9K(rK&*&#(hhRSV1k=z>OQ0 zj9>_fj+hp)1mqE`Ipx5j4mBTywf3{}SZ9G0jM06$pQo$^KMCdSsWJ zdkJ2?u)};AL$$rI#fDNcf(L;abWQ~qK*wzKyQaM;Mx7X2oEqD8&IH$Nm;Ux`BB}$N zeX-E5Fos__io3r1CAi`_*F_-kb^w?7?P5S#;0^^`Z16wMxdh*Q?^opfa4miu$-%sZ zT(%xxHTJVM4EM-gzyIr(fBw~HAHUlE!)va&1~Sgcx@eb&2ma&?!CxGw6+nTY*0Cv* zq`{ducc~`JBu>TnCegHro(2>n;8CWSO3M69Ff$DRjQow2V&;!hwlFaXDm_6e)K0Dr-mZ&C!*9o-17%lE}@>|#9{taf_aM5N}Tv3 zo=4?s!6WhP9+79es|6DZA3>D+&k|-J2}y2`55y#?7BNykNEHChQRs4b?}6MZZe_5S z?KndB-iAM0Ii@Z}D?h1K)-h0Rh{;;UXv;-rT1G>SRcElKHjarhOY@9=hx=5}@W$hG z?7#`4(FX9)Z6yCvp|gDvbMJgN{^}ziqOvC#7X!G%Zb-CI>t{X@-T6hb!x1sgaJ=?RoW5uPfAu8( z7~j;}ItY^T9bJ(fl67^Z_D8V09(?{GJ8wSUP>fkSW z0!xjoYO=Z1{O=g$Q7wmzltir_K2OY2GDM#AY?Z*!Z}Z4AF5!k3+A2)M_!=a`iHWI2 zB7hW}xpj2U22#}|(s=i&Xb!L@ zH^*@`h$TS3s9^1yP3%A%(DaU6HOrBtED3n5znuXjR0{}dIJj#EX&f;W0D3qc3lE^j z4qUj(J=Eq$X;QDOABbh7Q7|w>f#_kogZYV28XZc>nUOl|11j=hi8AHPDw?Zc>G1pB zQ7whIkp-$7E@)z;A~lwva*QWt4S#GD5&=K*izP~cRrnq$?=lbDE@9TRW(1+wj1fQ| zq6QGE@(lyS-gJF76@V_AS2RV2nk0R&WbM_A@=;A`$1o9KEK^HcyV%)Kw?8=Zve`L) zZ>yIdC#z-zY+)@}1cr#90c991TVQ=m$o9_)5RZX6s$Kv|Rr%sQTPH9OQt^~m&J^2VO zR6DP}SF(lH)$K{{But+5%o z6DV_mf)eFP!lq3i@iAB$SqN_4GHyj1*;HE(KhI4$g)Ztw3R}5-tu*A9ia!?^7~Ax^ z#S*cVXvl_)_eB(hZEZP*QZ7V=Cawcw;g0uUo>2gdz^oa+e_Xs1`*Voe1a4RFRTa?h zXYjnVov}5;0jaMn?>v6#RmDrX9lHXn`-RX3TRUbY7#O zMKD;g4`hAmU%5w?`W=yT&jMth&|BAVv&oVFk$^|+COw=SGjZWUC1&J6b~Ah!v*rg26n^kr}+IT2`EKq?a83`Xz1M< zdamBkOp}CfJ)DB3A%jqPkUm+#no@cni;AXvJnJW1*c`qAk z6XQsfBv&Q8XMVQLoXlZP<|tNj*xWgO%LtP;1BxNmI5%)awU^h2c>9$9yYcSuV*;r& zo+E%rRg25S2m8n#j*eSQFu>$pCQ`WG=`s=~FqzgFNRn}kIwMHcwn;hX=gk_5-GW8= z*T|F_$|6Qld?>w|)8IaXGKOv|sCf-Fub{ddLSmAL93qZnXdt(&x?Qms%^%%%`%SHP z%aWGYsNEk+sF(DV0xtI&Xk!yOmY6kppY8=Mz}AS!kYnX6`>L;rylkK zZ`!4yAyhh;II7eOG5Ii5rY4 z<*!t(h%%g3Leqm()nh_s)JXtACEK6?Ry--ci?44}RU-t|D(B)%J;2XMp;oWQ6d7uw zsy0>KU`rM-zL_di;lt72DMt-5&u*aRsEjJ(%5Y|?hUCjkMv0uE6?~!hDShkIgX?Msk{Dv#GBCd(dQSKPnMh z#{zCgd40MbhS{{Rs?S4m`aAU(!qF;#8Ft0M3_ZwK1dIXhDNx%Vo(q}wlmj7?Q(S60MTVSJNl;M}u!?XrL3rzKmKv_J$}3<@H$T96q9J04>QBdr~K1x1eja1HmL zD5$rmBl_f!`uDy8=ev|6Wk;1HgzD_oZ_4_wOS@7h3ECHXD*H4@g)_68FVSV-9S9y`!cf@_3!mxwh(^tWR6D!nI{DHhX$s{iwQp^T=CpRf1W)ad3G;>#1f6udXBJRThV~O$u10a>CZG|SCS4nPT1Poaq z;#x{rr%BvWguKegIUKXa5`vitXt6g$cwojJ$VI*gDFjel1v4vuj1(T~uwxk$`zuCjK3ZxvXh86>D4eI)S<;Y+{Ww1My*8|di8<=V)l_(KCo(*g}*3S+t@{IywT)(l5 z1;s#M)-23wQ3ApEqC~L+%mUWNtSKeSjq(~Efxz;LMZnlQHgFfPaz7U~gWza|!{)(e_6ebnVYnYO*~F$9~dx%5buKt!i;dSD_n zmg_cQN?%7})Id%0LJDXomV>Bn9-&D?32H7ynH={@B;803ZG26!gQHei5{xDlaHEOL zI6@7zN1bvKnJr3yUysQ_)p8R0awUotaan(UtrD|*ssexHXYH!bLB_5Etw|Hm_DvKS zfx6B_QFiIZ@737XmDx00H^^M&`w*(`{PTzrkmX6HIOOgHjJ+aNHed8})FyC;8zvK` z_4iebv5P|S0NnU}CtmWa>#bBv52utx46f4h`MilG>~n6j+lLf2srbkhS+_2iudD|2 zf4@Lw&Zxg0l4zlm0-87p28tjX0z0(jF;mXdW(?|ZBzaR>NfI?~lr1Lg02XKLMg&Y? zx3~iL0enR!5^gC6WqVqW8&2B8!)ckVs-D z_{GFnP^=YTR<2jP9BZgpcv}Fft7^wsFxR9EZUDh?^`wk!^&ZDfEdF&635;c$>yIU0 zvu8iFJiBkl-r_xGOtXqbEGZC?uru0N~c+ zOwb<_D=Pp#@*~gxi}R0v`1>w<0?TOVbil6`{7Hkvn}9!?{ya&usgIVlWiXG`F_$6_)P$EaY4~>Y>jcUt=MXoj-sd+c$t?}lus7`V0>fb z3b2t60uI@ODRb*~vK@HvSH@_#&(x+AV8;EDd2?x;UzsGGV!8mfjuGp&cHk#q& zK7+iuBVChFF6)7ACFN)kw20JDC<9pcn7UADZ@%a(SJKVZhZsFc_O8VoJk7>t!b5umM-;a~_mtDxt0AX`5Qb9jK2 zg$`!O0*f8clV-5}?*zAe`FfhU?z!lbhKK>tMF4IF=oXMwkewC_CxHil_2ZDY{w#KK z_Lw$=Y)QadkIf&}C=lCYcifEkeCIhIzHIHoFFXHYnBkfb2Y;}&_o;M)diSvM zu3GKPAFLgNBMlqiYPDkbHBHW(p>`~6g1yUMkJ?kHU9nDy@xy;eIS1&2qFG@5szl1U zII2LAXGA9U*@QG1NuX^%U?1(%GN?Rsrg)Z&d?lG3Sy!1A-D_C^s>iTn>!U>cbGHEM z`=NiXxx_;QOAG@2KPF7wwMHFMK4dvsh)Io!4NRLv?3sig;Oaz{iDM?@0(!vh1FklGh{Nv7R)t6xPM4#EcpNJkKC4RS3BU<2;vnFcg_lv^z1xP!)ze7MDpW z05n%U$2tH*Kd0x764YWRdABMyFw6~#m1+Uvowj1Uw~nKH!?;(PqP(Zbb}w)MG|p>G zL!^D;c;-QASj=#BagwM5n-{y#T@CA<#4rNN6m(A^TWmRyZtKC*D5YevfLXV&>qVKn zSq4pq#r#-cHvDm%09_=jA{UFO<>Eaju<~I33&)RkzDf1Wahuy-rc72q+ORF9$5xMd zq`*e?@?32kI>MN55th!UeS;xR+|Kt8$ zSXfx#J;2r1{|)~B?mHZYE{ZJxxb=8EslJB6${xStR($eDo_6aqFIjogj=f}u1L8*l z{-kzOpBC*>pZAj*@S6tyVzQ_X4oc9cYpn^j4RrmnfE@wFz=IU)*)I#260|g>C1ZlA zny3w%=Cp14JAv`Qm4!qR1Lpv~w+Q?q? zoE)NY%FbgKt0P6j3F>8FWE8z#Nt9oyoy#BxV9XG(8v?uTWZV)!2-5j8f7g*9cSm!M zL5ijpf%<;lGA3${0RRC207*naRJf<(ioKEz^Rm9NFdI2+UcinD$Ly(SpJxoUl)2ed zZ#q&-8Mvp?$N=_Wtgz8B8nKxpfnB$rJtSZh0HUn|pUE3Nm{auaWn=Lp3KGXL`S=$H zMtzVqvpb&4xz(D1Bd~$WflR3xNy^aXGFm1Am!)aMn~dO|n*`vw7P7?-sMms;Z$mA% zpk^{4Q_2xA>;L^7boWy6DuUi%V1t2jEA_{81gC)q8xW)JiqY`%OSF!RZ~kw7DE@i)v=j zMlAt>{i1m0X2Py4O=@SO94lZ$H>;7!_mff;f@5?VEM zn)&Adk-&^BtZ}ny!HjFiQW_E_SiV}_9{0JF2dPaibh%HH$GcP$aN)c!t3(2KNbSr-Is*IrcPZ@<3S;SDGk-f?0?g z)b}5f+mxlU0JRi&TL$hb@N5Q}(SWgjWFc# z_yq=(0uyQl)KXBh8Mvd;8QUm&hES`ki)-&d4HuOtPf!zhR=M31g-5j69xp#pfF|{{cCS_Lgz>9kfZUNkLz>jCR?9df<*K_B30DnM$ zzxDHUenwHWlK}&RR`s`{F@QJuXaJ}@nhPVg6jzK9 zxXn-t3e;og+>M7pW45yl@U7;#DyJ@iIs~3&7oXE{+s=Jxr4A-P5F8no&9^c3`;EXYU8Ne(9+L^1fQ|z8gsG3~`C%wk8 zktwOn^RLOqz%jgz02TwwU*;qdxU2krpoye}c=&sT))?~K)bTrI-tV+v=8*!^+F4LK-{SkUqSV|G zZ?jE*mXXStT+jP!Fj;W4Efme=#4bCTV8j}BjBFw+PkHWU3KEH_r7WROj3rXZu@T~> zXd}c%?iOOhkj^!h@y1Z9rVqE=i%7bM1z&*p~iZQ-O=GmZj!+1I&I73wTO zw$z@5n%Jo+!xn&UGaF5{A@X!CAjpETtPTLiNXg12l$(k7L6F|1WRL7dWto@UI`+*< zGKU%;_tYbBhf2d$d@PH&wi5U-_0Z?*z)%PYmTDnqQ97Z?NBtpY!k znZzw59GEUYGZ{c%8Eou;l>>+_Ymz)IDb`l=bsN@K4_5hqFj9?Aj2tjE!!blTX;enO zySVU7Cj9HjBG6q_F)QK$mWzu~mDCym@iMzlD^S~ibhUfEBY)wD98G14fpV2O4kViD z_@|VKBM;WZKcAahuJ^apvA*yb!>v{2D|7 zKL@-L_v4fQ@QH9@ZUMlp$753VMacR4yPx>xKe_7M6VKkcgUoRF$Y=g2V)>{^HLV9c z$59{=_?u8y9|`c2O{CX)=W6J)^z4x85OkX>_K#|FP<24XHRYEkC1*6L#+0sv6Xqyk z+Gr}HNSmSXM*#lHuT@pwMk=m7qluBA#OG2EAl8+GHn1@zxRgka6q?+UUgm0Um5JIos=BR3`A38{Qy>jNGf%PZ^|S>e7uuXQ80*_ z`r^o*ZnZ+7wqx%i(7$hv{?)C!~>2o3CC zJa1dRMj>!FL$=U%oywNVux~Y^p%yY^3mUq^$@L~NTg6W8&|czyc3foGzhfQw@wFd1 z{9yZqx`*Q?H{Fay7sxXbrS(|pu^uQQQQg6i*N+@y?9`OaT|m8iPSDAp|=3w)+5ZVkO26=8=m_M zXCMC1E6+L$G8jJcc8`gQshY8)&Z12OLQ5olmaE-I#`=l%=8iF{IiB=B2<}ueWat7_ z86oQ{a0b}II2n;r!^H#;WR!6!Wv6c}qt;{dl50IRXYFz-qtu(Yl6=9~If=~xU&K&t zmgGncSB$1S+8TyTn!&ON+(`gf3~JX{OQOkKwXjd){JVG_-8*?Hp7#siEBj25&hBa7 za&Ymv9;%^OZ^G*XkM74h7X#&d05|?k+~`|>s`LO$7y$U#{)l& zB(_BuFdO1xb22xRX4foa!)FuvW5VWAF<}T&yrl1G{GM?NNK*#M?bjgnx-s~Z@EnG;o%>~w*u@I@#CG(nj>CuSKFd?X3RxM1FmviGP zx8UF<1v@Og@9I81EA4oz_x{XqcKo;uxShDD7GUHJR3T7DeCu)?#XGv}6Ja)z$s$!i&_MT9=A0XmQ z68<&XN_v*Dq=Co*FtiwIwgqlyB~UA61O+!Q>0P)k_QyMJjX(yun|n0=Z)eKqK1n6t z2jN^at0tUcED1^;%uUfqKQ$n0x>qd0U|Yc)Y3`Zw&$J%2-ofK z5^~>-8~5ktA!CqI*04e5jlZ3MFxh06NM&G2<@eANdj^bO!>pdWAPb0^TSS^d=0XTF zg>Ybz)Ev`L|407)lMP8(xFLW%8pw~qAA9LmIkt)W1ZtBz3>3g!A2E`ljD~TNT>u&p za1P9)@e*oLD=`jEYAf#M+u#XmjQgp-)^J{E$3lkVqXd`!L-J?_FKib)*z+J2BxRHl zDIj05utRZ9Y|l;?8#a-H#rn`{f5HlUrXPFRJPNjjT@vR=9E1UX%T2%yP#&@r%P=H^%>Ih zE|DO`#&v4-948^5rNFZtH@nwSKu-g0BM@7LY+vzBlDXacq<357)R-lMGNP0`V#~xR7(J)a*=dcVs87{K~D_&vBOy z7sj@fSY2?g38eH;tFay{C{ew^n1`#U7(0d9vu6|EcZ!zt0qB8aWcTGzFI~dU58sH} zSB`s@e(bm4Eq)eIK)(u{_pv|37bOR@e$2?gTLAF!to&NT0E)vm->`7(kN(ZazVQjJ z+jpYjBWgJ~Q$=~g#oILV=RpwHud`;88M{qRJP`*b!-vhM{5U_14&b-~Ri-d(R7G`A zl*^Wk?8VHMtzKiu7!>QlVBr8E>cPHXBsE*7+14hBT|!rBt##v!cSJ&g#{VVB^GY1X z4bR}^X^RNO(tj=Tr>cmZ2*u!=GiVBq&-F0iL8%(8{7S*Q;AK3_MRrxyr% zhFp}5&nirMkfRP-A^-Z|!N{wOd^cD7%;?jjw??<}oz4RIMY3LZTa}`M|zupV`Y0wC zV3e!OD|cvNyz$9;NjM7pECbG+16i83tEIqUelY@yu-3`zen2%*01)R3Mz1gFH%6^z z8kKB7O@l+xoM;#UqRJGqXK4exeCm4+-kW`=?yDoFkgm2i%Q@FdSYgD zB&-B~2{lW+@wU~p#!_0fmC>Q838dlrJ0blh){Oe4FrL*5ks#wBnFd3GXRGSwgXnlE z|Dr|Zf(24g+@%QgMZhMhdGj)#RH4p-N{&xvCmBf$3{ednN3!c?$4Y6Ch+VNh6j|&P zb~R+}#U0NvGg`Wq-SdlQBHf6B->g{$HOKCw?}63~L-i{9*ewFYb@S?)oUBpJpmF42 z4d6-u_-g>h)xsrYyNO5r@koOZSL_m3uS;xTPbqikd zE9?2%+A)kRRRSau@9L#$1~0B_6K__bwstbHRzQ}yf5S7_Q4|ctbAM602nm6*3_RcV zE9%0<{20$hb~5iOPa8*Ua&gJ|bAnmy3Qp@)tW4xNBi1K`z* zIOmhM;I;?u@#k^40RNl|u7;rXr@+&1{1CpdvF0;jAN^AB765!)qCWvKiv{qJU;3W^ z{)GJ-*Yx{j#yP2&bh5ci_!mFRW=1~of7}F)XwtbkMd}KyPpRP8=w2Ao8oW$cZL(~7 z!pSDoSh%5po!Nub!vueg(o;>|3q7sUpnyu%(JLmEucV&q$JKQj0LWIET~wnXX$nZ2 z+`bxP6B#0iPN#|c-;dNbiZk=#=PA5Y8InlGQp%JGVdihf<$btmzsHqoT}sF{bf}u) zi|XBiq>H$=EdquT^6@wYm1U$xD|N0Xhjn<(cFKyNR`Hhr%kU^9a#YlGb-(XmCjtBf z`)DEtG^48KutiWae%>o1aF?K$91CNOKj$(5bx=hDY51;W@)0H#StO8%K|&eATpkG4 z#l)1%VOcH4iD^sxN#9uEM`5|0N{YPWd)t&!P_R(A3KGuIrwRI6^|>Sw~tp?DC@Q8WxO zq*j0}78UErJ^(sX-i;mYBvk`_s4;wjy%T`vJK$c+c~dfH1YTqKpGszVUUBd!5 z7peTQuGq=snk(6tYlg2F;6?wA&2Qm237OTzY%f?kiaTz#|HGOVgJ8L^?Ltfju}Y8I zYOHf+7H)5>^Js0Iu+!3PwvWaStibXBeBc4X(-;??JBt(Vem~^^NX0DRg&-K<+uFFc z1^o4o{i0iEKL#RUwgBMc@`V&L2!{%UIlSemsF9lTf zM*dD)E69+BuGf;8@sb`XK(~-g$cy!vUZ>G2X_~SY=AyOlr+v80pKKzv)^7N$0dA#d z75VRRtCsQ*4K@enFF0k(xjsc@EJywMH#PZE!*>a3w`vpMY64(UYXwNE4%>w4thK2a zCso2{y-D2eQCkp*oWVZsgseXT&og+g0?wqO8@`HUCKbR<#GZQKQUaV1jvOCD?I`cj zda%$6`#>i4Q91OU1piLir<^M0C0jeL=KEyiduM~egee_34NRbC7l{be^*3g5V2S6I z3#At49B%Da&>cX{D5!bu+^iHy?3pv^g!#WRXc+)neuj=I0{v0}Hv%y7H)iqS-UC+$ zXG4~rC6Ak>3Z_<64fuy+iz?=oLQIgZjXjhgN>Z>_k7J2rb^Izrj9)|=DHoR#u}=~z zfHHQof;|Ol`Ak2=BLmbZohI3OG4SGPKNo>O_6JBTz53{!AS;KCV2WztguQV^;DC4B zKoak-EaW4_pcIqa5uSTwL1e-69Zb5|g7P!*_ zW!mL&j;%LYNpgLPM*t?G27LZwiQD}GBe%@`zOiSuPn`diThxD~4jqTJTEnVb6-pT> z87ggCW7UP_{OF33Y(Q94v~aRVhaWmlSY3m~D)5R0?E8nC@R?g~tg(Rq0hGJV+xceT zzTbT(P66O7d(_VYZUMl@pY+Qh6bHZjg@wWUe(6u2@C0DoVEQO$HyRK~xc*diP?KT3 z5>rx=O0pD<>W~Lcss$+hRX|#<0ldJ9Xnbu4Hk#a-NN>)ZIi`_YNQ08avxI(*rEE^{ z9mM5aU;x!c^*X55B|EMCBkqe&m>Z735~8#TG-=xD*F@s7*Xoi?2+|FaB8jojw`_1! z2^M5gRbB9D8q12933Wh*<_O3lS8w<`$^#09b3I1$s??%Nwhi)dE1DsT7`{@14vP|9 zxr`~R%|C{n=VMKRL`hA9qTyFKWi((N_zMvwB^dELz*?8_hn}0Q6G2%|CxMM5aWN&c z44P**>qZf{HqHd2c4rP0`k6=y3l$&5Ql94QL2!qvnZMwRU=Iwr0>9#!B?+&^zrs*s zh9Q6r0XE=(tq!xXV|H7Pj$nqz60OAts@$-K#&AENzH%D?{i6#F?w4;H~?FtuZY zb(F)%lZ<5)1rRd%gxOu!ElNi;z<}0(54sL4qWG>~J2DuZ7{acMVK#Cn@v{Py^0TJ4 ztmzBQJT75jT0kkK=Nfqfn+Jc6d35uDJD1jxt*^ZNzysNLP*)veYdZ|9g$tGCTII?r zXv^7fNE;{D89Q^D>+U1EXFy|G2Om02cq-$9{XHD`$Y3z!m^}{7JudYzlnp-+jwpe!~TT5g1!DeTcBTMrAScKqZLdCaH7EO|LEmQ)C87 z?)!wv8L3AC0yBTj$$YHK!#%<`WB;arzqpPTHH-kHQft^oYohMqa63`a?T91rOqB_N zD9vU|ZfyQyEOEakH%Qe{j-J$LLy4#JL+CC?bX6jOOO#Pq13zJV6;;_@96%K!=U}Sn zl~*OMZuCjFEj&OAuR~EZ`xiyRa0P6rP2d(gHmk=K`&2i3M$EKpJfU=6HL6;3F*7x= zsT!ET5`a?;tW(*=JVDw@Cr;^V3@d14)Dz|*h}Iu3!X^*0UTu^Pms%5x_Dof z0m@XyiEh zilY!{hLEZNX*mxnLCU?Mq_nGrYquboa_3u+ul)*Mz%`jV0;q~yJWYAg@dv9? zo)_Rsl=bh2JvH{#j~23?qgWZbBn3~!y4l+_cdBZKqMG_p1A$Uw3MsnA5m4BcoWFAg z$L`7h^Kf15g2srgZ5J?_xllB0E88i!O<*~>%EAM}ZcClxi*)qFDZ;5$2o8f@xr8Tw z_EtP_vgQcZ-|H^V&u!z|+ra8?{fQsPcy!CaTLAEJrTn^M_;dg6M}GL~?AWvVODuUj z_gDY%mJ6wMd29mJ2C`l{Lsu`nFK=q$f*X~}$L5e^ZT_{ab)(7liLWR4LxhDA*KZtk zRU2{>Q)La7V>r6n?%)zms@o`Sl`Rbo59*IdX5C)ACf)Sw$u>+2W z1Htr7h(RE1V=EE^ByeJE3>JMO(F;jPl#ql}QuY07?>*h_*80AgKj!?pwbwrP+*hj7 zd!=*6IPac!n!VRvdo{oBH-8N?xNU*crEaqT+_j*yB`|AqYy;)jG^}h~5hWOngLrM+ zNo=R1lw}!f1Fn~dC}QZM2TBa@#JaQuqE-xx4VrhSYZw#7A=W0>wZ=Zq)D z$77Z#6dI~>+&=72zNnnFQl?_5{2Bs^H^%~SN;P1PfI{kVa*K@OM$<8Nl*ek&(3EXc@+VU z0_)7B32-PmWVvF_i|%O|_s&gB@MY|9j-9&Bba25Q)S5J;3EGJoprPGM&Gt+CFS50r zj-_c4qj$=BxFTmVi0-tqFPbwjrB<6nm{~LK#KNsNw(opEuu3!O%|X7)Cxj$}QW5D> zGPSK`5>i##mlrovtsP@iM0`(!ohJbxA98mtO$0NS)pbNw6yK z#spRXGP`@zco@9r@~y|yYIYGKgokSkFI=I2=?cS3YYY!p@Q=3e8-d?=3>$&J>JiSj z)>czT$hg))LJ|D}fE~kiO-?Q_Mlml~%@sTzXOwREz2lpzPGgF?QUHBu-2KxX=DSBf z|6?C+e-#$|0)k(7@(rk`cI%v{z%2{o@|uU;hVaZlv-4v-|FMUJ%{2mE0KV=iwBPe@ z@JYV|sIlYZYk}tH>B;x28oX}yG5noB{TKD__Znsa?*QOWm(j0tVc7L}?>GMX|M4ro z1n{0b9pcHTru8V^c}7L?b*DHtOO-jO zN_e1r(=5l=QjD#W$0)jfqZmGpy+L(Ia0z}6w4IDy$U^%JYGOQqVg`Tsd`r3jA=6S( zjVA4JVk?QVIQE)m%JQL*U z%ZfLV+%qkdnWU1Pj8-No7Br|krpx1<2*4&}02+TO$h5g*Pxptq%_sr9eKs()Y81|2 zO5bOT*2y`9aU`9B)noiha_Uck(=x=F5nj4RSoi847DCt!=s$IV;kgUlW!xb20kY{a ztak7(tq`_80aAg0=8bj{hoJAT7to9m9Oqm>wk8w?sAUcAb|b?|T0o4nwv%c8`Tf-| z1w&}%?a!R!rH}0X*y^%*GdsR^;%A^A@}{r+##QB z_Vb!gebvz!N#DcWJW35V4xE@R$|!Hn+9gtvx9kI|y_A-pEbvG4>6tvn;E!oPUrY)% zWn$-+Qau;56So?n6^3GbSj1d#SG!GhflP2SYpF;8uV&L~oKd>3O8`{gjHswzF}L0 z>U>=pEkx2WFk}66MKp+H_c=vZdTTX_Zl7h0j2}4zft>{|TMG+YqlCCZQotJR5?ex0 z9Fs%>85A^&ry@|>G95bwp(x}f5&=))9F{#z-$-KMig=X5*;*}RnAGGncm<@rK(>R8 z#m8okGUpHbj$h6!9u=Lzl32Q8JYHx4W5kP;<6_(IpM5D+=`Z#{j{z3;vFf1#mE7GgnYz@B->&NqRZ28_!! zdw)%MYQXIB9v;4QMR;_Duy_&8FMfcR{>neVb20$j**)#60r$liFaZA%@XSl!gAYNE zgV(AX_znPm&X0Zr5s`oR(GStXzxD_I+jqSa*lllHt1FY_#vTBYaR3)p4G-m*?SeF2Hy!kQ)wxpWip)ZJ_7*JjQeW0w3bIP7M`P`Uy{hP;qTdd(?BO1V!P zFkrh7;Mf?)hLjcTOdBcLQJXfiQIN0BaY-G;I>|7=7R;y;Y~N8F_v*eT$?-~58du6= zD0mA|9&06{-q8T?AP{!>Z^3FnaZ^s;qQlO@>M#V;Ee4eOyXeZLQZHEK1yaEPDuA=| zk(~l9XBCn|Q2ie}{h1F2P~BeWbEQ25fUW_}yWE8wuYY||HrO>4;1rlf@N`k=KXehw zt%G}diRS(hU;)%Lruc&~v&;ya0pWay;bIGaIly1}To-8bUz%zODJBJpT||}x^uf9N zXFDA2E`IKZKG^;rF{kI*`?;s!+Tfk%d_J97bzU=d` z0P*1E(+fta>fG`g44LdGOTjtc?@RF*!~w)1xiPCbX{tXfOb*2c*Akush0Mhu11E*!`_ni2^3=@VetDNywR ze7XSNJ2LI3wfl;->I@#VXqCN_yls-kwszo!(L|yEfx-m8+F`gJ6vzr0yBaWD^u}OL zoM4nYsI^DFTr6AQtC_Qgp_R8i^9YYVy7?oQ=k4cn$Cm-a3_K9^%)SM;6j-h{ELahq z73v<{ql?RH!qqj=6A?4M@< z;e+4xH@;~8-oN{so_!Or*-7(?-}G|yTUNcHzG2bGY4_RH{E1y0irTvP8SMLUycuIy z{0$E!l5eh~`?rYo4O=_P&?7rV%YDK*0}fR0kIET6+P~F4#rW%($y1I%k?YEepk(QR zaBZy)y#heL75KHlUk3QC)Y*JokNl_rQe)Ez1snG=s;tL^pJn3sq0uo^;z2HfPSNJk z(5Ur8Qu9YLhcKtVNx{X8y~vvpX<5@^G&0SkVChi=%oI^R6_Ha!cF2SoD4ivN3KqA} z%azSpMZ8S~j;Wf&)<#bQdsK%1j#*V3+0%%L-EWmC*x>SbEKUkS3@bLxAhV7sW2kWg zsD%~|b(B(MU(qmV&fvKNHBtl+7jgnIun`JVN1RF|)>zv#*iq7)5d@O-js+t-71nIp zIAz3i6smo_Qm-n;z^=+HvKW^Ho;hjs(g-*?c4@Cw1rEyW?E=sT$S#h1eOb?w_fPB? zF2>7sP&DT*V0pCA{d)*njw>=BKf2=?E0cafD{Uw@b&-DADSRfODP(Dw= z=~h{W@gP+Om6>z)<+!P6e165hcLW&({>sB&1^8>9z7E%eF6J2sAYyj@?Po9JeLspn zfk3Mk!XCbDhr#WJwm}!T*$uqCxMm!0>0Wb0{&@yugRps#=-)fRz3==!{OHRs*i=hY zhk`Ew0L%sW%isF#F_Q2O0N#DPn$VvbKl*KtAOFU0`1Y^(62R|hAbRDvsv4;lRG<_( z92&J`JTdr_dOUk@VRh&S0t~}}ACIcJqPB?Lfep-yX|rei_%SI2ZWV9PRvhiav*OUuSuYq zEjx6DViuzYa;I(K0xXqn zC#BYt>eHnJlO+zQSkxpOwEbpze!)xHpNOW6^thCoR!|&^lUX~d;!BDS;4)f7fxKcE zYX|{rUM7v``1D9fGKGW}qdm?K62|{km3RMs1@lA`d-uV z40JTN7^(n1Tf#ki2KVeexMxqnCkybr(d%0@s}xy~vez-0b&WD+0_QF@ujKA;u^6QW zlL4I!giX*GQT^lk5{!jxI0T6bg>Ha%O6+e}P?Uv_- zNUoU+UfH_DkEc!%yKn(bl7yHf!YOc zLD88zia8jE0@ss78%4!3_c)r0qWzeV-xT6;PY9dQ2vq9oO)4tEM6wA%P#Y+yFG4osw}LjMy-&e(_(0p*YvLa{l7VvSmK&_-?B2mqG%@5H=u@y^E{>&Do+mi240 z*pyzigJCNO+kmhO2wtX{$x*gq0@kh=uUmtL*uF|8jJUY*s1|+6jSGz8kBScK!jQDL z8>xP+JmUnkc-bo8nmaVDQO!-^HcsY`;yFWZRY{=RasKQy_f8{8yqY?C4;gw$-$T5I zNT`e;v}p8m-hf(H0lboBEA#*KIZ)_zZ9H3c=oXA&jB61tfbggdWXf@^_YIHo1*PZ}PStXVZgt7q@72{trstEv3}7XwLpG_5*~_HS!?+zk9Phg9p8N_{!KFhCQ`~rLwAOF7h8h{P2 zIhb$<06!;3zkvV@pZbCCpI`p&25bzqnqIf{FUh<5{zAn)lP%mh<3UP z6MC|-uOITwAcY}E6UAPxU3RMybUYF_@T__HWIHEV^jySS-#cM5@!g6CO zmr4->UV3VRnn!4W1t3R5Nia)f**9(buFd-`{cHO!8yyOkE!1*^S_GSQj47PFWN$13 zu^ekt%zzVsf&plc6#F7^{5^IDQIQzls^eHFj?Ob6RM|qUbt9BP)&$HN2nE1f7NCw0^@h9;RO6HY&?p&uuZRiF zy&2ru47_k~r!Cr(R>8GUt;sH!W$IjgeW99h)~K0mRS!Z$4g0s8Jee*ihj!sA^+;z8j zG9m_}xIp_1G7&~2UFN-QD)Z*pJq83?Z!mXbwJHL@6;135YSu|-}$Q3L0ZHH2Ps9VG+=AC#f*CHL_91EXx( zcg2(jugsc9w`}Dn$Sf@YS&R1nZUNZ@$j0j0qG2GO*B&`%RA_I)FnPC++u7UuVc;8E zYYqto6Fi||)Q3<;Fhog3AAK8f9A7qW6u`C$Xs+G7m2S^KBNm;qjwu{^DinIZr#FvI z?ckfubiB(98G^>Q^d7R>BAj0%T&y9h-pmlL27g=zO>><=n4HL2Hwc;nk@@wdaO!cy z)YuT?G$P7BGPm#f2E(H*b`Lig9__%+p*huJ>JX@kmnx4%F@VQ&r?rk{AiEtm#G>pm z2?U(}d^b3L=4^#|C0^_RZp}!_P-P7WwBYO107PMXi zUvN%uf6(Jc{`Nnr#=vNPwLbkH2Noav`*{Bg7rK95V=Uku0Q_8I|3Yv8cDPti$bYO zV`p8#vynDWYQm}vr2YXlAJ22%6Ziv5}&3{e%*QqZVwIg~oAl&=gKs-XFUv(-|}J zq|i8`HjPX~tti7JxjN98Kq+MmAvb8ClxJAv%>I&(rvG=e@~Ir#2_$CmzX%lUNkQVp zvF6qQTiksyAUlnkB?tUcsSvAQyzE4ugDD%8Ty~?&&X3%rbtrSi0M`))x=q%Dohsat z8wVB3B_qur5!Ip3>0rzT458WtQUx~0fM{o~U(VxNFe}Rk0tOFi8%WzI(+IYflpf(~ ztsT52c(WZt1<;go>`YnAN(DQ)XBq)#zz9@Y;xb1RF`#nBNSOfY!dM)jMcYYP{iEsMvZH)EW zii5cWfS*erArLY9-TOa?Pkrm}{7YZ@E}-8byb|Mwj7$$DgH(2zCSWnT!P6@^vd99G z%Zf2}dF1!_q4ntCW*zZzYoASV9XkO2Fmd0*2oRQ_FtUkptUR7Uj|r8@ryT2@i$B^+ zrx`bS(EjsO)7PNDv^_QrTCD$^5!^9>kF?cckFf(1!!t#J)(o1NFNy{#OiY5)6{kV% z&;_y!IiM~(4gur^vLncj(~Xo<^aJ+I8C-z%sGqAUx@t@ig^`tJKi%&v3|%B`w>pfa zawq24?ih+3gRxQR>?9cyOgojv+7>U;pl~`LpysDyVr<{m45sM9X~SBd)&ua?+bmLy zdTAO9#$zSn2-?d!+-ur6cz2=vJ(owe)%Z6VoHBAOc<~}AoKhEXia9CS)rPBvn2HsT zfR1y8SkBjz#9BolMpN3miitfC0|PFAAn#`d(zuV;w#%`ynVSKj_j*3KVkA2dWHVT; zS|NwA<4PJ%(-XK-^G8-eWZk^%0B-hJ$AgY$jOz{yXMC`FI&(;i%NK*N9&|D4P%wn5 z*M-v_Un!h&QpFM-sP72?%^ciugZ89VFvvxBxee8&h$G90P^Z4ZR&)ai&0B;6`UjP6&{*A!< z|I9ZldD*(x6lAyqfS*ertaqdD{g&VR|M;S3HgD}_&immNyvH(OQXG$f?RybiMV%3M z`uQXPu+rK&X!R8DXN(mr=l)4ZY~*7q-lm8p8jl#qgh}yBG%|=3evPX4mc}4( z#I{wSX7n$W4G%)qW0hEvg6b=I0k{)_J0bAgejeY`UA>=av_rtR?%6(jpZ)1=&*W+1nR5Unb9UU5~ zn@-G>LNkIilv_+(A=occK`Jd{!&!^hP|6;x#>Ep0fdpI|8_D)I0v&Yxik*$Xqe;ug zqq0Zc*AzaLEFX}^(j${+wL&PI$T8$O{Z73NBRyb>3nB(_lcR)EPUIBRH>z0M51Fifr)CAYj%+Cc?1i1~qg~Mb zvh$E_59vexyO!1DAyTZ4i)fi3z^nnyW!@L1YS1Ax{h-LQL}NAa zj>~{(pm5=no%@6#H1f7*F7VRFcYknm)jUA!w@vV^m&Rcpn6^D{cN@ZTO=s&f+B_0q zwIR$O(o-i}eCT`LV`E@r`I_ILgQ;H$JoE5-@ew;-UrTP_I{^5(GWzwN0SX`fhkx^R z@-P3wAA0K-0Gmx<`ZV6*l$R#;zbInoBwm}k>=J$Dbfet}%JSeiUgf<}x5aye>C6|p zVLbh~e%~n^Insv}eeZ=Kkj9duNup+wFerO)d5Za?3iyqQh{!+5Xm`p~NU?ogkr-}t zv7I1?WD1yKN~gFFTB?{bXU^CKgO>!FD`>(TS|c{fs*{)>7wg1A27oe{kwhkdZ_EiS zOb+@r5{oBPZ(Ga}lnMmuF_?OYc3~6ΜSujhEiGiz6 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

i8nlX@j}>OJrKsOlhZnG3GOEN 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�vg+ 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�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≫6p%gj8 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 O0000#+%>pc{(0YX&bNM- z-$mb4SNH1GPpw`1*?U){s$MlTrr&U?6`lG!Vkyk;b^(UM5iF<3lp89UUZn(~6$a!QKZc zAVL2z#^h6yfX8RKso_DzZ3}YmZy+kjuFapS?Y#i*^5`7xf4+Fz1L0yXg9_;#*3R*Z zFJ4!t^@{uL`saRRz<+NGTqxyCj$umhIc2BwI&K&F9~WUtKxfWvU|jMtVF_X7D1V%_ zQbF7RRqw5#yWV7c9HgcaVPaLPWj$IV;pC|Co5Ncb6jeBQo3`u1+zG;xEQE?5gKAO1 z<{(2sOv-pRqC>GspS>0;34m0@;7V}PK|D%)Htr-X<7bcHs;5xeM94BJmS;Hv6 ztEFSb5zYcI09VT&fjUiP83Csc0dN_!!8ow-LR;6A1th$bty(Z>Mo;K4adQj;(=bC+ z5!taV5yE%0+Cvj!C_zbxa8Xc%QITev%@ozF05l0lOA1AFQ6%|h-$xFS-?Jk2XB|oE z5+I;u*~co)asc?>g7~lGI_6zzYPxOT$&!1)#R*-3{BL9f5=HOKM8j+sD_>hXClCBr zfENOQ75GxsU_#iXbIQCUWA@++;*)Ta!zOO;9XU&?y%1b%jYzNfgasVup`RbG1`<}H zSIvV7@`Afnff1DLLRMqkV>J1wW7IUcALzfT%iIlHgnLZA!`WjDP{ubVi;y1EM}&L; zb5TLjZ|Gq{BAk6dxdlz|s)?b1uf~k`=+p5)dSFNnz+zGr3=*?t@jT1g2t<`dm81z+Uu+JIHZy92!O5 zgtlitZ*|hblxQhr0iZ%^7G1+_y`Wc5!mI`~ze@B@)tVQcOXgl6S+Zpz6gMsOc)g;vr~t~3Y3`A zK@~0*p{_-DSrY0oDVG+4stU%YEoSnCGXdopOF;td0pjp9V=$?JP)Z9#m;_`FMnscx z)IKex6Uu>$n&4q`WwJe7i|-(+rY-YJs% z3ulC6Tp>n#79j^`~jP4iWK1Eq!QNT?%wzU^- z4U7r(O*|Zt8%|)NLxeLE6P3FAL4}&I0AMHNz^=0}S5TB2%AogxKV!rQfkR0M1m;og z=KUDv1WePd?xRndrhGt;OqZ4gi}#6Y{75_tAkA%%X&Ig(j2Olx!t+KT z8Tf{dV6u#f9$ZQQvrrw@(EPJEaOZI=%JbV~StKt+34j3*lHGzAivxKE@K4|n)?0&6 zUD)^tQ7@8=9+Mt^IzG||9=b7qzPe6R84LpV544+!eCOgey-hD{ct#$F#H8LIy zvosrozX_}`Mn&UgN(&$m4^D_K#uEDmL{N2xn1)G$1>lk3;Aa4ITj+4Xfd<&x2KL#K znDR^<6dJ{iSO^7D*nKbH^_#ze)6FR;iJAmfqDCMZ+IvcFB76Ov(8X>q<1v?7bY*l z|6EWE2(DkEXA1kcD;FBhqg4JEE4409q7!H4!pyLn9M*bN-gZ^C?Hzqcj6AnOy%JcH zLwTAC@vCQ>Kem%YZGl;IQ;5|JjKJoV5+6i>3|xKpwL3872b!G=+HEsN45~)28gagf zL@6;BNu(~028uEw%%NF$6AW>9Tz`Q^VimEuG+Vr;z9hV)HMMPA4*wnz(u4-@(9jqQ z$XIn;3;-&Rx*F(lV7!+MYn5WMu2+5xCW5n~|443va6eZ0qk3+!W)x8&fgY)6)%q$@VEvx|-c=%(~ah687Sl&F-~E^ltDX zjJMt7tg+D^%S`|C$p1Dbts2GOdWx5^GBhu30r%$@_8WKhFGI2-9937Eczu;+3$HqR zD-2P5B1D@+FjjECgPTz{mDOI@Dr-vWR%g)N)y1lWqXdXb-~Hs-p{K}=kzTtVIZE2} z115d?FhWjD8OJ$qX^s@DNP!&j&L^ytET{47>raHWFO;<$E+1kj<V+4jWhAkeRY zK~&gsxTN;-FV57bL@`4lX->aV#FeI4Te~D-88R)rV?HW=N%?bSv_0s5I`~la=eA1(==YiEBMPGt+9orA9HCjh z6c0=?h(?lj`1skO2}p3mHo;92(IP<}x3nA5$NnQV{&=iCIl&A8F$A%w9gsc1ShDIQ z(HN~C8G(L7%}CQNa*VrtP0aosSwcCjlmipe=HX=J*67H86rOPULBo+>_GlNiQAaGvyAs>}}2XZtJb#}R$>bkQ?Q zCb;Gy@9H3dMBdT4c_lpgNDvDE5Iwa`h$bBuo0NrMJ~EC29{yxbf_0n@>2pji0PzSJ zU!xFN_+0+O{g+Z2G97gX;t<#p)557LW81K$sBIRkGX(qS#i?uVFR2%o4J*xL*>mLQ zNk4PS0IX`>*w7uA&OZf=gw3P~8#h0Bw@5m-NN)JEulWhl!(B=@OAW#Q<~uF8gP^-(yM-edwVWB?ezRmQjX zzfLqd;V6lCW;Hvhji55?GQu3y@}x!V1BAJe%+8ZXu;GrtuQ01e%egYDG*3%Zlkg*X zy*>aKB8}WdiX5A6M(I=%@t%Z3s(ek;Sag-V(LhW>ak#l?j&BH449Ttz$)8}D;ozio zo$~V!T_x$~J#(;0HxqQp#r<iH!cl~^ljPk3sk>=xl(QeKJbe?thPqq z5R?MY4_(6a)`bSZUEHvP+?SsUM~tf$dso))czhSE{E|iPT}1Eutn3Ss|F<2yl?AW8 zLe9FR?Pu~BIc#TM{!VatfFg=Os-9b`c0RC$VJb@)0l-Ai1NW(e%$9Ru01aiM@YyC_ z^OA$9pODl%g7?ZM8(AJ2^Hu91Y(|=m3oY_{i3R@G8p{sExzMTpaXls z7-5C93b^ru@%J*s%jn4oEtwIHbUB#V8tptCz1TB)+xt;LkWn1OM5zDYZuF&9%+WML zDAFRCftAi-tu++G|01|ZWwco(mB3w`M!Zt%9cd7)#2)u?fzND*jli7EhU#sbdz((k$5fkI40$&=+D@N-m{5c%a# z$Eaz8Gb6ky>uK2~&6h;X^c+SlWD>lkeA5UJD?$ZX zxe1s{tYLZt zaeNtYoU`&Bup0YaD^GCwxBL39e&ABgTSniGd$`u(f+%{4BN}K}6;AQeO|iQZCu+#} zC@=JUTIac&AnQMBc)na`b-B;mMYMBC7;rZE$`9PU_no}o^gH+2$UshWv0Ba}n&X4r zi~`!l3&GWwsW0*(G+puV%mjP7`QWdA^Wy5klCh3Y<>hddxoA~5vh0q_AWr$2Fs4|= zfh#5>8I3mt?OZJW@s(C$=!TN7&DCLI2(#^25?e-6O3IjFgwy+|##rK~2kh(^4B9{r z0LImW(Nj$92DOJ@YukX9jDvbE-B~@UADA^1cByi zBB33)UtE{gX}fm(;@EBkUJ`q=3^tn_pbY3X(jHh%JVOZ&mby**++_s>%7KR@b(^Z8 z!BfT+2u)CsZOqVwFJ2?YIviUKHeC-9ULu)jURI^STQ1V(+3fc-=#0iGuC!czz6^6hss`Q^M{TXRUPM=)yVKKFVc|F?qx^1rLQ_j&zZMC7s$=iw;(?dbc!5G$vDKFUNv z`hETR;Iff`^zOTa8^8+^03+BAum%s-8ORl0?ZnsnEilnQVwWD>yALqq=?_1T-W0aF zLv_p~^l139oR*Yuj9Q+6KT;6mPn?qilQvqe-!!IS(ag`unJ6twy9yB_hJm4>LCpln zP|+~VGVqD%8mp?IwS_Qbroq6B1!F>!WwTr{D%JFN(z;_izPx_C{rsBwP~?+-hsazz zH{TGuIsqjY5KM{8=dg06JxaYAnz8mVU9{ceh?_(0 zddx5`&Zb@dA~>B&LUZz6$UyS$mk)$Tc)}o?zybn2*dG^JP zS*fX83}5*@_XcugNgMOM;{*V4bNLMS>-Qd9C84YKtf*X_~t6r7}7f z9D=jWln_}vet90M4ZC`9I$NRlcMJ@cP|;4WhNo}c%DxJRdKGX51G%;P9t;NXFo~9P zO=%*j9Kjy^?aUqO3b7H8Q|N954-+}d!c&KN{*d2HpU`_|RAt(4V=pngLK)6)j|Vx` z8btV%r=&XN)aA4v61|5mh5uZ1H@x(=O*V>pyY>cDuHCOJz!cj-0(nA7gQ&tu*D&iw zxh0q;D|B4NVrb+ohUF53f%zRO; zp0n8+|#Vc%fExC*J%9g()*?5@M`Xcw4ikXo+4sk_KP`#uL6z z>@W-x2lLSVy>zo6%Cn~B1f}Z&0(5?*+dq|4fp;h&Xw%!__D=e~xiIUiqB_ZEX4Fexs=~v7>nCDK$ z#nwHbt@ z-cJX`eDl&S>P-WESDxHhky5W2V*2sqZq9phs9N>HYc+>G5S9C7i zekMA5=9HLV;+}6kXI~EIBUs#{xpY=K1=wm>80TU8j5{s?4m!Ie~y9u|E9J{X%CU;oh z`nw_=ACn!YxBC*LU2gy9Ih+HM&KD~5Jn!2!Vkn++DOy=Cl)9aC!J;mRgRd&rG;G{E zo`6C=;atxnZu*j<=L(EPe=_6ZXGZ_1CL|Kd^^m-jFGRWQikvLR0!d9nkWw6wd}z=^f?ZUmXmV9Qt;CWsdby{Km*oVt^PxVQBxjvy-}gx z$L}j{tnv!nKVz7HMc#5N5T64~cAQ_jG;CMZ5Y%ak zf9FhE=38~>E`?0R$|9IEOhLNgcN0=2_(_-YR zKCCA+ma##ZLLbTis|i?ml1hhcqxz}u2~Mj@uzUg@n8b4$>+0}$#1mG~O2iohW)d7I z3>D5-0tEg%zZTu@ke@{qNgS7B1EZ z9$s*v$bbc4dme22A`IW*<~a^v^-#_vKe%&MJliAXoB)wCCHwd0B@w^}aK-`@QbxHu zuL2nYE=SJXNR#!#y<#v97IWyfjD4lkuBM|%q9_3;lJaFi7+`= z3>op6&&K#?C7lkUwCbFhO0C~px}lL`zT@DS!X1Uv1Ev)wPrlEadk6$^F+zp*%jaTW zc_6{wG$Qr4s;>l%6vqKx9iiI2f}(9QfcT$NyeZ!dazxxaeNaZ$^}mN(x}WK1X^qZz zp{EXHT8#CR^*-A7-mb)wc#saL|Dnr-^Xk-(HgXna8NZwmGq~?jXQ_H#{h9j}dX_s? z!0}~QBfgh(YMdeNlNqvt!vgLKs> zon_0lxL)I=I2Rk2l_6#nncH$LyFA4PjV8YBgxD)W=aiU|L#%n-_oxuU{5k+SEFFpLO-vBw*ZWfGNfr_*jjl^?Unfr|*@ z#>@DIP!aNeM$v-G|JM-zL7w83Z_4<2)p6f(zE^&*rT~-8<`~IQcG!Vn;pF-LBiS@S z3Kg;rsm+{q5=qIfoX^|G6EJ{)q9U5e2{t6hhy&^zg#MO%B{V z0cIeAxG-u5-U3_gWNocbBf!{JRcEHho?E5UEtTI8$>33Ls@}u`MzN0amltZ0W ztzlEC5jC8&+>~UYdK&!u) zt$4ffLC$K+dVn^5!nq(0IkJ^mSD9J;C7B|Gz_c$VRfPmu-NLY$R4cH>UVF4_SA^ zyc_c_sMH6KCpPTRgq{L4iF&?Co84FO^iwtW0mbmx_yQpZ1Nq@-xegAJJBK`SAowJD z`$-hPb(5KY{s!MQg<*K=Ffa|rWj!51^# zUS6VMu>J$rAEg&ch_=Va^)&PzYKQ^$Gudv;2yxEO6`9k-&c9t{f@O}qJ5TVA1+N!) zCeX%WpDAd>mdInJM8NHW7D52j&wkX4J$a2#37dii%k{u}?n*u~dV4{6D0=k%3h`Z= zbJhY;DauxD^VGV#y1HhLtCClJ8gzLW$lscl%|qt>w8(W7#w-vJIp>k|0uu(*+rrTw zI1CEdgSn4D}KkCvhN6mrB5pid4hpq0*YWa;KT zkS$&_YhNfAIIFz&V^K<^?sV96$(%)X6%ku5D-xg^qA<{{UjdG zn(%DpBuUB(&7mf5mzYc1N+aOB!w5BW8{y$!B;W{blP6A7NQ6rBWzfgEFy^`OuC#Lu z?a-c}#+PH7QdIxApdlj{syc7EzT7uj^C^A2%zs_&qrCH(|6C`)NF6g{;%=#?8dJu{A;FqbY5q+dR}g?-j?BB{s)g&>1g){M%CLk{=9C)oxe={ z$Bu5VAMxl)JPQUG&cEuPQJ#TzsiGX0K&msBstb`pye#;w3!n+Kn=4Gck8;O>LUEiQ z54~i5c7y7b6y$S~^mW9RUkHzPg|^P5cy4HN&Tiz+&+Gsm;_uyuW;+%lB|J&qYu-vA z=E7abuNetan@Fg@>R%wTgAeGrRT2E?W_|j*Fj^ElhDL5Uw`qBo1W&1o#x&lSvLc%j zTd_fp#W9k!#Sk>#TUuB~jF?9RYA$v}neI!RCqgM{zHpVMuTsIPwYU@{IB-lYvJQyW zzK*>8VQa>H%Yg48>0V*!*SiADRb?SDQlnoe)i% zm4v(*ySj~4=t-x?`rRD&0WTl#ljJq}RFwa;&JfO|k63mdD*3^;m7masd4(_q0+`B; z5znW`Z(*@c%?DN$tbx_mU-d2Zl9Pmk~nbCdv(mXM?_#`e==%+ zeT}Fl$2_L2mvR#ui5I1FOl0;p`JXf$v%VH~aaqxE26prLsA~NungH*2eF-ai0sAm<{-W&v=RV+%`k`R% z)#En{XA~%jVA8n_qE`63Ghnlx?{8(-pjh!;r5kk&J%4;X5hy0`0xg4G_WQ?vT{Nmf z2_tmb3C^qRq!I#W<_MNGi2F#<^pHt$TM z+Yi$NkP#d&$o)-hexZE?5p&Z{JxuY!MLAB{k<><-JI~Q7L_F00m+2olJITEJ%)Hd} znF_smJSNS8I-TB-v5Y8t1&hE7sIj?a-mYszbwu%0q=|z>Sj0zA7`~4UxQ-a?vtx7n zNK#eW^|Omi6rRy08=C`l_sj70XA4K7sUutqFv8hBZl`qBL1dAcw)2tlU*EJNN-zwO z0=1ZFb4TU9&>#IUA}kuV0|w8o{*yiAUZH*_?;q}Xzwn2!-6s&*uS|m5wx;9gPR|67 zTWt%nLdTAzus+zo=xCt~5tR{66#L8)^+v@RC}Ld~9P{Z37NaA`%c&z^e#V;5c|haw zxIN4q{1M=Lo&Vb-&Y@vZJXc%$K*B(lv52;4RR{kA!+u0@vElJ>X%71UAM$6V^(0+} zSQyiCTyHEME*%SGC9!5KE+JxLvJ-XOGgLhxJ>f{fd2VjIk>PE4ND93#>J%&TgIEeu zD%ALcWn@$g4FRiRU)KY{A5(|zq1_O-|5*{@6c7?#hfU#gFO2ouN)IO|hqK+ND=FrU zyb)fto;OSg6FoyF)^M9N_pIDt4xcMvdG~M) zwHcg*<4?JWqn2rD4v}6k9;nf%1${g3*qC)f4>_hb6_cr8@R4AN*Dedz-WvUS_L+{m z+HY0QyW(I4Q$F#2oUkGms6Om!if7GCo3Byq_u;4Xlz^FgfinuU)`d8qW}r2D&x0*T z!6%hFHG>>?_w(Y(`y>%<-YqG*x%;%x4t<18DQOrXSQ3&xCPOT+`^v?Q3z3R&rWmFs z_w!2~js(8U=w$&%^M|CiaxC*o;I2kt)iuekye9aH{nW!$r-vQ<)ft3N9VUYHj9{^K zLG)+C@m2R)#Zh$r<$&uWs5|Ucd=*6HIgzD4Vv{Q6A`PcmI(408K9kBEYpQ-CEAbKe znGCg3T4%$!`{VV{HSna(mN1Na4|u8XhcbElS0G(u88`lph5>b+4=Q|E1k_o&{wbNL64LKY^$w0|i;7i;c$TjxpJ!#~|H-QRrM2w&ZEp*w|` z{81+mDh;6aECVEHI9SzCz{R9Z`zqySm9kyH?|3zb7kON%{qc1zBgrh7=PduZlSVK@e#I`a(8;VW@fCPsG4 z?Z~>3L7UDW_$Vm{(semDfgCmr&(xr|7hHX2`=`|4?i8e;LHsxYWektqg~q++%w_au z@BZoz`*=uE)`aK&XT)5X&$=++Ep@*EUkv&MSgWX_mYE0Xb-XY%#W^CUFWaipTKe>{un$Hu-Ak7UZXnQ zIz!Vqr9jX(k;|n)z123lIn5gNX+JU7wBjaLOEwj4fE7QpRnC{dZb-BDGWgL(OcSUg zntnNlgR~sk>K|#J$%8@2c`@2gG|Tt-ya^70fZ1Y%w9D);17MzjJH~!g{NH&Zr>_^0_vk*r1{dwDK!rh9a@WM+`2KLg9J6SI!B`s$`qr6QpjnAin z$rAOoyN?|?*yxh^PQ+BgEypE zOtWq*fM%E)+8Zq3A1s%Kpzp7(c7K<}#*>!s>taBM;q{M2MU`aj%-;V*@uqm&>^jJy z>8i(%sGBU22f*L9rn4MMM_CG1)wB9NjqcTFc!xyxHhjuv^-95sWI>w<&Xk^e7lD$( z-L`aa&HV8K&7Y1^L*1098M*y4uMoxyf{kK-a2k-(z{Ad{QIiCr1xi9_VAlB9!wK+! zQkapr^<4|5_b&#GM>&|$l6wBJwubrRkst_<)Ndq#Dc38R^`TQUsQ+w!IBG@UdaK2x znDmLu(4p8Fzkvh4g_hfRgxsDTzolh&5OpabX!mb`0|b$NA3OErcH(4z-Te@nUPbzH z+iiK}pSQn2oU*!~w^Q01u>Dyowzv8)X5D~$)a(w~(IqtSDsHCvelmENhS^rW%KR7&lU z%9{6q@>oDM%@TrWakChwIhO`6qY?Bob+;<@VwxUZ`n5if$R~%2?k#{Vp$*rNr_(Eb z*5-Gc?T&BM{-8~SkRMYRD4uW@FWX}eEri>Vy50YT6MA_Au6a*ZTUq$YTZF$coe53_oIQ+PMH% zj&l!y3~^p_lsqK+d-wQ53RjS;ZH&7vwjG7x=y7xC2bA}7e5zKW-V3Zg~Gbu z|ClU)JUjhp7tagNr{)%w;RdfR8-G@;xDVL8s(m6dCJ?Lc38dK0I?Flm%bLg6Z4iTL zcwed&IMkMh-q)VAi~?KE?MJJy?}s;QHCgX(zTso;JnB|*0vl-U7X`!lH{l6W&v=8i znY^cQL;2YlJ>2@G_14SeBrNEFK%xNjagnofAXQ^LsKzPdr!C zIoH99?~9;YhDcUGCr%x2yvvt@!~4iGZPbHFk2N|3QgV=rNRrca<5U#N&xyJVULPT= zgMrH>mv{vROoQ&tmo|%;s_A+$wyo_w2$MEiuZdT>e%HR|i<9gM$jynD3gu)e`gM$xr7WH%dsUSWfYo{|-;k zmz~PR{g(T+p@)sq4(<{XVc!R?s%m&e``pzty$PZqYlo0*sdWozUQk6SAF=~QV;?VF zI9(z>350bwb-n(6xO4n-cO+P0zf!2={2$!7T!HZ`BI5kh!}jXSZNwO@5T0My_}~#-p_h_kt+G4Bc`n6H^VkzfVoIaJ zQMe-;RhX)NBl{RM0DnqrlU2Lfa*cnKD9T5PL)T!M2N|I|GI&CrBIHY157fK7I+>Ff zIKZzri%4x+hm4CUB2;T9D%18%eziD`FvcDruGWeP(NmSIRWU`G(MdFS?hej(cxqg@ zONcLVo37(5QoMr=CskcO(k$6<`RaDaE~dD@4<@D#mL{&XU<5^sxDUy&E}U#_@0T4{ zt$H`#^PGfobH}chf>Na~Pe?_TdFVcTfo4`6>=Y;w41U>q^ifLcSgyacv(YxN8jwO7 zwO4z2g54gm=$(i)xvO~DZpeEoRGga+nkj0r8bAt4cMr;N4M`J`(HB8h7Mlg+?DX_U zlwlArEFj~?#75AOt2Dpm(a2CDj0>;%S@gqSq>~Wvx;!J{9N;XlaMGwIf9?bCpAU&? zB4HRr^VOMnzPS%Xd60E~)b&#itzUi;RZbe5ot>aNA(A(5`EWC2qq^yHUUJvw_{Zk$ z`FV0T`wK}o&kVeblx+nPzC}U1Q_R?2F5Vg*b7_hXD8e)u{kVXKymXkk8AFplk632e z8x9t45O~{Byw$;7?v&Fj0yaAl_?raywO4VKd1n)01^Nx^nGL~U`I{;r+|i#M(hj)Q z-l2Hw4dC;OYJM&i`40;T@Y!tJ7+Z^Ezjj1^5~+A@LC$&a2|LG37AHvq(J(1$87up3 zk#UXIX9u<*jX~#k7_@e&5$p!sFo)lh8TtS_cfX_S&_@}JlWXL}jYv;?M>72>o7fF6 z4E>HHEYWRT@`6@N3|57)$y;hwJbtBpWUPm92&II6uT+OU42eN9moQUWQzYbr?~WW9 z5~ECPX}6;%izGBXR#{@aET70Z5I%hZqW1zD5)_zCk{N)9R{Q?D3tIy9*+-Ie)Tt|| zcjE|*7e#@^iAP*_lJ;4drBdDUGG&CRN%=v8bK96o%_2+n3RZ^m&lEi5XMXm@6)Cbo zZCC6AET3MI=Lg9ou`DT7GV^#9biM;wPB$;$UfiIAI7fSFx~-kyNA))6+ca@PqEZnPJTRE^^`^qe?yYIv(q;M{ZP%*h&6vYEynf~z{87bl5R~cm zkLmDFUgV{*UxA48AY<$78fEu2r;6$Uruc+0v-Ugdb$wu_Wx94c)6z6PBi+E4zQ5Um z0i~!9h|ds5em~V5R`vwb8vHNtlgfoGg)6{pTT}UrBVn=WEg8z78)QqV-@r5OXBNsN z!yaA3AHo`6EA@jOrD_Bb#N;zn#gP*?!90ZN;-pkGG<%AT=;lyjoPj|fIqYF{KW91% zq$&3j$vy*U`WR-IKt7r!H)xpe7mRx^*{Af7KEH)x=fY;olh@RUa#VQ@rcrLba)kPU zv?m8JRH?keivGfir6`n~iG$Bsk)Leesaa&Tv@*j>^ED|QQm-69Z>MECPL0-XNQ%AOjwxgc@-H#kmaF~B+w;J zN@A?CX@y@MSz`L+JO{^@!g*v#v z#mPv~cEs!QN#5>_pC2*O_sF|@XEcb0lX8IE1h)6V{p~Qui1>B#UgXE0inuh%Y{AlH zk9uYfXE9X>Qjo4(%mB51pt#@M*HWsqUrWdINc=56qBW&WYnWVk|5nXqG-DVerN z!{T{6P#4Ebv%^D_m>--z!ovtUTmS+TW2{}X_4T9k6WLS0(M$isO2D(@33rv(_)W;m zeI49pYD@5a`+>0M#`C(z@z@%}%{U``T@0x$*~M%28LS_$ctuH{ z*l2st6^X=)Y@f)U_!8_I@$<_Ttu>{M!qBUJqR6>Mr`E*)f5m~q`~H(NRq$?V8acYM1?deEbjTXuzTQW zVNN}XQFh&TnBN*;(B-(Kcz-uSDe2|=TFf3U{lM48C|CpKsPKU&Qpxvc`YT=T`%xF7 zS{T=yjxP$&qK@`AELN6_Vsn+LTjk!cWqKTo{TIu7T7x3NeWZQmW5(=S_-5(9I_CCC zZe`8`ud6;kmsW&(JDSCm3S(~$g+|2nxAH5_e%TB+n|Guli+w-uKj`ZFqWI}nMZl6A z3pJB5J#aOVxN9`U4*g{{(4T^j4>QZ#S>_fcm5j`@bu=p3&mCX=JI*v1;a$Z8B>&4t z`=ezSAchcTb&COXlC0PpI(`xxCwffCEzy;=)|Q$M>4_ZS&$h}^x&G*KV2Tr}6veo? z-Mw@4Wowv6oiSiA?e}(4v&#V3aq_Z;?ynHf{`-fBpUseSHuTY}$DjpTpp41qH!~!U z2^Rv#5hjB96lOV@-TBD0X%5U*jt193TVz0b_#4XsI>m#lh~>3ast(A^e-XeJOUmITcobWJJhVkLHGu!G$b4J zg`!aALUb}XXZq(`5#U1QZCG^rpAHJp)kXL9-;)UsRUqG@LeFgfr!Vb0WapcL8;=t$ zgCUq=G|swgmMl}etfIagkV$d=6D7E;7K|J2lU&#C!r9BH?2RCyG^Y3C4JYnz>pSnzqsWL6OER{Jqio?}85tk=_Ylg5KlB zwGVs52GkOe0_HOeP-v4&%>1*a*#-*R

MjommEuo4je{zo?S1V2n%;NY`I))BtPq7)`}Qk%8eeoIxe=T=F%gl
z`v7bWO+4r79oaduu8SS1Gh3&P@AU$F*d`IoH^mD1v`Q4y+e8L^fyF^Q%O2W=H&Vk_)S|irQ{!QSxM|s#t{m^%t@(Lu^_3OmR&=
zm}MTs+cN;1k?L7e-_F`X|}E2Eos#T^ic2%lNU>S@*@3-0j_
zttRS|lw9RStHh}JY_D(5REAT&2q75m<=rnnj*QX!pnSDtVG@R
z%E$cc$L}voZ~YBydbaz2P;l^C1K?##UR?laVnvElps;sNW90+7=CL^gCgEC?SE!T`
zxbalw&jL15mi%1!Q?g?|omRFpciPW&X9A<32eg;I@qm6&%N1```7>cB2+-+J10&Ju
z8gto7+KNYd{!4-IHQ22BOV!d--K|h@-VDN7Qc>v&-b}Q?+?;6&Kfdo|c>i}XGe2$`+g!HbgPbX>puD8QPeQRGbf)`lPXnxCioW1EjH#xqj
zUr);V_?MAyN<`-(7LR|kGKZI7pO=8>&!ol(y=Pa2y~TBTU-vPeZw3@@qb|W0B7t5!
zabw<)i>&6JNqmY{U83~Gy1B-mgd&y#n-Ne&Ul;C%2z>^;ID7Qb2AFAEt)Aas-oLGH
z%o;u02G}d}|9Lefs{1GPxy>8DU|_ij1Ngt^T=jJqn~LEwAe~BpD!7XhfRO<)0a$X*
z4Ulh!XD9soBG4C);0M`_GrZ-XweL{xC8(lF)d)(P%Ik8upU+tc$Ma!oF(L~Y!k@u!
zxf@?X1y$|FrF3}rpArr0FJZGaW4Y&89Tk^d&#G~>F`U~)r)Y+Xv2J&J3BDD
zLiw?O#KjVI+~D)$ucwL4Zj|iix4ZH1C!>Dkn}qnUN)$x{(a!Z?m|Ge7BhR
z`u;CK|#
zCVhw#w`PuSgJETqZn)px@|iG0IBgic-fR#YocQAZ+iHtl^1!<*WbmUQidtmChk{dioyz-R@RWSzmfs`*{6#c#k2w|bmDJzVyiBHlAj=kzjuazjk#)DK{tW4d;d1))YAOmeZl)Uv
z6lAh%^97c}aOly6@r|xO<^BJWw+i=e=3!K
zdUmswrjcHUaoWQuDFrR1-~Q`VwhC_Gs@Z-ygQ?N}2LChQe84Xl+)Li7Hfe$&Gt%9#
zL_3`AD6zmzvpu7KKfF;?{WXp^qGn5PFiWS&kjZ6o@(Ar%JkQlVtV@)~g<9>_Vl&67}w
zF$kU&jCB@NbfEV;CJR0^~~|=>3(%~&1IXj
z!fDo|lL$OksaOP%u@}5Ukhvxi3n_DK+9@MZ2y9G|hzwmHMNdlHq5vTfXgnd!AJAAu
zep}RcRES@8XA~3=k`H3E*~SXp%;K(S(2(Z5?JIDoX%dBulyew~Lo
zZ7_l_0Bnf}39C4w_aLj2v7zi(dSY1*;2%-viL!OxuOCvDxAJ`s+1eDD*(c3HtZues
z3Tw9C`9In%OwLr=?M0$ef2JX@%kDfC)82DyDiGbCs#KMy+
z)tTT#6hOATdaWZwnI8LC5p#+1qf;7$&A*{vtgIZ&51DS~vkDbA{Wi6RVdx=Uu9NB3
zIE0SVg5#m8k`-&ELpl`hI<5pW#Iugy$ctswl~Rk{i|*RWq5rwaxbEFXc6P=G^ICOm
z>=|XbuQMSI^wphi&2t+Gj>7&u)KnZZ|Et+4sM%#+>VC*$t*qEh!J8e6Ec={1fy8Uv
zVGv{wKNLMYO$)rvRA5F^7uu@Bc5^C4!H$R9p2wS4JjklwaV)d>Hh7eAix63knncQKo;35zzuZ8k(@sZlM$fCz>(XB=+(SUATfRwQl$-D(
zBbW_hWdg^XEtCRcdS~>kpbyYP;6H=-Vgj6frCpMgwu^Gz^IzaK#pgA}X}2#ZKH-JO
z^8d;z@H3lHm(w}=*5{SWe&@B<_1x5^EEr}bKqt-7u1$2?0*JSV>G`g@)Z!Pu*QS5_
zsY%@-SI3;@kg|F}6V|@*K>raU9CC-Vslr3v&ZqqL@#t!i)2>0z(tWGZ(aDGt_?w{-
znm&GQ4sm%gum2WGS-Nh
zA~H(pVlPP#Nw1-Eo90y`tn-%#(TPAPUs!!C_*hBPq@6M(>=2F~U9#nk)ipCxeb`lO
zr~(mlc4!jVA)y6PaD;H)zWc}XTgr7G?U;l9J5Ml@k|sy#fWzFQr*3EjMbW&R5VsZl
z;$tLQ9k<1_ZriVf-(Sb>%-l2hWUl&j385zLAn3(bx=2q0L4KHhj8-5H97_6Ab4J<1
z#-8tOIQHQ7r<6Twh$|c>E4&i0;D=9Q=_xe2Xo9U*PgcW^=Y73hy5s}qtC~AT>@9`x
z)=gC5Z4@n^zDO8B_CJU%ei+NA$uePJnR}!}wZ_4hzX`jr_V+^Qr#v+5P=o0`c;!
z-*WTQJG*_?KFwHZoERENeEkXkwaXMb2|+S6+__%2xuleN)(EBb-If8`{m$E(V%L;{
zvOLpNK5&0$G^|MSG+IR%bMNWl=NZ9Vb1lr*Q8IV>Y6J0>QuZ9#AH=3rz&`Rn!J?Tf
zTIB@%CT8(-M7{1vJ!wi&=Vgx-mhrEjj|djQ>_xD~p&
zAL(za>ij~}?wwM95(J5RC$P6MeXm#`48`tUquLN@JdBbsEOqWAe?=Pnq4kd8363BEdq*6f>wVnq_L>*fH${Ag
zUTA}D6L7tsG@H@UelgNQJ*p?_ka;H()MELff((&@s8fZUshvc*$xa;_(RGq<5UF(s2ooh`G|C{N^XWE-s{qt%Q8M52cIr+qcy8NmzG@OK{Oq!Ju)JPYakYZqhFfC;4
zu&xY@#PGl%4G}HW<@(e;{Jt;z;nJn^6~Awk%A5s?=+7Jy`BCuW
z{y1GU`F_
z{i5xwfRGPAOMyYnKmp0_ZH&=|>ugE+_Qf#2>O=ez>?~eDZY{Uc#5<6-O9)C70mXa^
zGv45^R`2}PPLLG^J;52X5HYB}jb`y{pi$2+b~yBR{u8XHoM!^}+wRCOogdtkKDdic
z0}p)6oRmWVYl2x5N-fYMO1w9K=`aKnYUHd;9>Hr+)2s#GOp}0e+d?*~;OtRdk9q_i
zu2X}@iXc;<9h|4(mOHyiG|2_m6)up`@0(@^#E4@4$ONYQRLZ7r`-g2)_zw|gf$%SB
z<@>)D9A4=Yt+y)Q$1cJ?SNA>FE8g}koGXJ^a$X_BxC3v-zwaNUo$O|nkd@)dB^}$ep@!STX5pcAnRtY`RAyp?1
z@_|-;sK~kW_av+>Q)1SnfzcQg#fB%9!$eJQR@As5*;qq3IE6+4q#;_s#f6x8=gU?w
zu!|v(K%}26Y&T1Oft0}tI}lT@KLdbLJfw)+*0&39(<a$JQd%@4W$>{HXF-LK8*2OKwqqh
z?h6_RQXvS(dN`q
zj2S|jIp`?!I@cv@fBk%*)k)umbc2Jc#%Zd}IE}+84GMK1(HHB=tMc=m{;Th0J>9E&
zUIQUTAT6-DBK+}cV}x1r?xKlm)_>#BAo5`3Osy#U4ce-z|Lt$cV)k8UVR_Ze`W1C0
zn3@6R7UtQ;7FJX<&d0~waAU=>xcUnMzdLZxH$o4y(eQM+AK(Tn=N9W_=!Zz>K+H@;
zkir)6W@C-|@8ES`_gw${p1KZmZT0?)9KJ6%CN>qM(lGL_p?#+THn^XG)_6;n
zW~#Rn5=(u5EE`Q~7qf*Og(?cG2{@&%*j{;)jL*i6O*W>0cIqfLa3gHBrTWc!SV6py
zXU>thhB@rR$0vF0nb`*vt@wK~Hn1
zeBsJNmDaT-7yghx-I7h5N(>bsaJ>>=
z9I@?FckNL>{7;IsB9+*?4Tm@IU-aTSgXQ`^@5`P=_mjnI1K)dt!*dj)bW+#P88pd7
zIEK6ea`!H_SoRe^|F@yNd-#O>I|E3cDRNj8vxpHVdUgm_2cj{lEIWKGCChE0$eGKA
zmy$%(BpMzLD8dg3L{YndFB+D%S97HF(#YNRpOXTc=7^PX+8z+0ZzVAmRsb;#L?0eg
zN$f7_CMOOCDgvKxAr@>QQBQc6@?0YoExxpzeQ067fK#^5i3n68thriEBcYAtkR&R0
zAm~B$cz@=NJ}hJ(*Zxv`gZ|YCQ_7nFxKMs#VqS5QSS;FTSXkdb$+QHlm>I}2u<|Ki
z^3u7ix6{dxayIzyy%QmC!&nPWXBYW~BU}FHJR9A1o{%vMQqJ&Iq7n+M!|TjCHZ|WU
zVV~|n)cr8YvwXd~u(mFFzMsDDk#gDj`o>lW@erQxG;#iOsaN?GzgwlpE_P8|~HxT-MZD
zmhqHu`0DWq+NO!EI@m7CXsFWe80OyS_GeRM%~OaebYPhr8X`wU#T)RB34f7qA5fsC
z`HmS9>m2Wd%Rig|eP)ENG|4htzD=%owT7shjrbt+DBw!w@BTnP6oYd!NcHB#Kj&dR
z5k))lX`k@bhYn=+&YGPYS&{+P{@Kfi2sWR*SD!21B%g^$uHOUTgCg-lMT2yqz!Mtd
z!bpa(j8yIKL@|c&kE&%Qd9g*C+65$+Wot>q=8G8SSa6F`;u-B3rF-etHXD5*=Lk^e
zzX)A}=X`#yh)oEtr8-DZZ%^3oi=5Af7iyownvc?DvX`7d`}x_^pB$rpSPxfHa57lRTt${YbaeO?
zn$4W}=SNed>pP2CDfovJ4|4Tn1d(~XaV;{kI<5eA;8(6FQ|W;M$7Am=DWd2JV(_UG
zSm5?0K5W6|8x>`X4D<#LOaL#j78`IHFa$`@Am#Fs5GDxp`>U2^7iH{bBBVasa0V#r|W61lg?ZxYMuskraL$}
z9oU7lne5!u@^4pZ^qFdsE{S0~EolUH!;>RPQze$s+F}FO)@d(vUDD=PM`!RDpTko;
zF}*|dU2^qZY3VH_wsm2eOw{TmFZig7?O8sL-Z@@vT$dF3D6GFCJ%u_Phrt}fS>Ozg
z8L2%#M4d-d;JZY^E6MlFcN^tlJ`^fEN#KIgo*gk046ioc)U|a$28^Tj&L4eC6Vevd
zXJz5-p;U`R;tUVxIO9f-HzK#o95c#fuzE7Vd2RfX2l^rHw;et)hPIiys)o<-YY2%2
zO~=#p(il<4aFK12$P5>ur5Ap}xsjv|h2B?X=I>)k7B#%`>$v4>2+*CSZ<@3c!M)5p
zRxCJw19HzZruS!W)@yybjRbRF|tr=9P4i8a~4_2h_{9k3(V=FBMIJ+K~r
zCE4sGO;WotX7#Hx|FOpYxed7|ND5P9L$JEw^e5xgvZ)D-%4Zw1YZmUBCO`z@YS&a9
ze9Oxi{-OyP#Bw>LEIppc%3|#%<8g42h4f*W2S*&7d~dfiZ<*GL6SJH&LGIq{V)(E8}`(HXMZ$O_dm}vq|v?oB4$O
zz;xda1LaD`PG#q9l9>(0A^WMi9xk(=s
zfO%JpyxPRKWg%oU-yo-kaJFv1JqJ}hgZ@{gf6Dc~MEL)SO}+6L(-s(Ey#Ir4Cwx9)
zzHe`z=ls{-fnSnp@|Qtg60#nyL92T`i1zF7Ax(`4lC6An1~FI7z*yvPORA4m+}1L{1_rw
zsLM9zfMARrXV_+6$RAyRNBOCBR3hhp_sMgma*6WfG`2yK3O;+`BNprI0&@cH%{FyR
zp8NJvAYz5<8pNDOJ>&K4S31hH(j=LbptazMa3n{5^%XFakf7N2s)yK%Q@Tk54hxOM
zrji*##wBSJ?n-ItW0fJzEtx>p{0e3vSIAVMFuue;3HHH0%~*@(PVG^t!gptynjnY9QxDaQy8>nFHxa(Cy*oPF7BVwfU;tRx~u
z`&>2A7q#IAuuCVRbF%NzJkI8B>_wGdHyz51EF2h(vLz2pHAFK&pX-0d8te^lnX7b8
zUh`Njo2x>Q{Ec^5<~Tc7)_z@`UQQwlMZ1NNH=4kF&lMaCVmlf4qTE6F7)d>8b{=#@
zEr*ZKXTXieF6?+=Y(Q&jXv`)%TUxtoFwq{*OoekROb|=%P|fpRwb$N>ZI;bUCRB{l
z0lj3(j3_S|Ji+JZ10V>PbXt%r>n=aE;m{Y*49*0)o9?S(Y+2-rUse|AL{a&UUD==J
zP{idhXPs&7@1Ud0XMCA!I958c%BzM`_&pX51r
zJ=HaIk`l4#`~Q6w-nRbeHQ&a4Ug`HQRvU)TUTx+V;(q9$Jr}EqH%3~JZWObvSJr?m
zW>2{fI%H3vnR((X=_|Q?b9Xd+OM3frQ%H$EQ_s+T$ALQR7d40}U$@v@PU*|HQq5$T
zpE+)78E?-Trl+r7wOkWg1tU=@Kxahwkh$04O0jFIfIhI=t{<}_AE*|VQ^Ndr28M0s
z!eW>f3AI@$%KA^@f)#g@gh<*$8qJin>Rr7B{smWB47pxPP6|@lSQ0BzgnmN^TMDd^
z%n%sM-$O)DnVL}GFES?-I$et9uLdE1DkQWxl2YhE#@cF+I-3LRsD4Ct#ai#Nt(21R
zKUxS?_1YJrwW2}8d2*JET*!z1RR}|zfX`*yuM>8$u)+UdxjgDzM
z)`ZeQpEq?+t?Zx+^fgWQvILZA1Kw&x*qW#dcVEh-&v;xqqv=3pOCG*|gw+@rr
zxOgv*E5~RgWMyDGq&%ZMzW9b?zAcuhU^R*!=&VO^xJ41JvG2fCc<@h6Y+DMf(B*QY
z%~Xm?iI>>Ft>Kz>HU71yJ}da^`|$wORUmna_q+pr%=OJS+;t*V@^3OZ-N1D1
zz}(1upYkmxQL7xu4;Vjf!~Re6w(V4RGV+D+)yvnjzWwDq<*y@drk?2o{6PouA_?%x
zS1`#I5WA0-pt9A%ux)ZnMTmBmZRwePK@6Eh!m-%JF+vu_cUEA>E+IfWQ8;%rDvXWu
zAb$IU1`>e4VER_7PJ#?DKH?+-yLN1u$OMzwGSf4J4AzZ90y^?jM#XO9U{)~O{#7O_
z-L(q>66RZKFgO)=dUE!KOH;2T2Mk9uvMePRfGf>5Dg`cn#?UvW;!<3Zcw*GblxZMF
zTeKv>yGG^$${cY5bS8A76i|!*&Mmr6?kfeeQO(xxd~!<@X(E;hH9Ms!v~CEC0|+Jr
z2VDZNDT9MMhp!rnvCf3kmC}7vq2j2e_8Z>BwF7c$u8w}l-d?5^z4mauvl3*tLp
zEi#{K(Xn`DN>b`qN2M^&O?Lo0T2k?>%1-e=)#vH{sUcrl0$zF>7&7j$RfUZyd2~l<
zvdk;KVM`FR@BY3_u)+ZY4{>^DI^6dooPUpJ=l)@zC;l~fz=uEJehGTg5t73
z0wG)n_=>G06-G~`J4gbwCsok{u}URfXNnSxZ{9u_A@A?y>!qCNB&X%o62mv0tgs9V
zUm|^??%ly2Px-Ze`ULk3Me6`w!kv9UHV;%l!ocvK!wj%KwvJu6mkOW9nzM@Tw~Ax_
zo9@Av*8g3XN^LIk{4jv;6M|0?&+!&d7@O^`&%2&$Ab<~g4*{s_-yJzQddHSvY?b+n
z+p_|^YS#6?`$D+QA>5XtH;;28yC&i&z9sN)@LVU$fYwHOAM1o
zc!!LjXl81>w3!d;TN%JAI5YIUaaXVF1MzD}g6tcD+qVf?fCH!eYHYSFS
z@n%g3R1?=W31n{4NwJQT7YwMvMrEM?bEru*B*10g$)xgApPQ{pIVCF{obyddqRLi6
zPq~E9Gn48ihOPG;N(V0m`N=NyA5sVJViQqh`_S!=4x_}QbZ#N%Yp${PB`}9t31DgB
z^0mMMOj^uRvE};HgrX3^2WG1t{4ji~UkPHW-|1Dn+9PuzYvmZNoshEu2=N*I6oxLO
z!haA#%@4C#ko{Rkyo75ytBU$-V`e*r7F(5-RKhioX7eqlYj5|`&8y8^Tmwzm2>PA0
z=|lFoeJcPSiIP1i0B_I)xBhXx8DM#7hmhy>?$7ndr}@G
zydZxfggS!=UME6XoO<)>J@5Y81OV5F8ByVjBm{#4jt=(+L;}pqTyt~WsAszs+}bkc
zTFQec&4sR|T@n-C5n1Xsio%_dbLpkvF?0AeAou4G6wNda4@LtzbJQqS
ze_>@NP(M1!_%=tw#IiQuKfpu!b!Z%5yl6Yri$PPTnVVs4Aw9BfY=TH%Ob%1oT4K@U
zE#{>7NXe%+vLTp~=gN8&Td*noTCgD6r#3+$e|d3(J#)2TFiblJd<9DTZsobsme-~J
z$Ufy$B`xVWCI|wE`y=+pP!pi_q`JthiuLBumA&Y6aNW4^t%}j)=STZD9VY+EG&sHf
zuA4f^9uDT#t~5DLot(HWN~UIwFyCTFrihpI4a$q>~P$@jjrrzCif
z$0wEA-U~IiQqX-LiEN!K3f(>GE=oAoGiA9y?17&UBtq^sweqkG+G2DQP!iG{yOZnJ
zMlnhf$QRmj_CgNV0m(gt+QbOF3FUY(zPf!u)JO>2hM2H0pal4++kH68%xBp|pqZJn
z^|J3SnQfP-S8AAz3Ht{}3w(%;S6G&MPjz~{gOdI<=?<(kMNlrhOJA26-76nHiAnpu
z7zd^TM@$Lv@I8yKDqw$X7C3jb3zGSp%sZ7T5X%IxU6Tr;&qPFb|L)I1KFSrfsZd%9
ztFkD0Bn2ig*du7ExAymnx3upfVNEt`Wbx?*pb4lN*)
z!vXyJ<3}iU`qH{R*7(2qG#97wv@bjY!Y$nP4cvSgUIN0DX4LkCdpGLG6;P>PRHL6t
zwDxqwq;TLZW_y8G^xZ$l8*6qa?Y|sEG0dMm5sVH~l0-z0SrcZn%ow&?dP-D<
zMei~aCUcRj{DJFgBKf}c2$$c
z`L7h)@>isSRy+PU)k=Fe2+M0Izmsm7unwPwuiI&Hl}O|nt9WPJo`U3!V%U^;OFjrX
zV<~a=5=p4k8UVdTkIH4LShIsfCXoC>V;EPf<+p@|y(#yesGA!uwlC=v
z{VCqx+AsjK?AsY2kI~#Jve1-QE`FJl7a8fm_jQUL9K+X7=C=&BxheC^&4D6y&W;NO
zA$quNw?E>oIgM#0qE#PnvUuBmzu>)kadP(N+r(Sjsnh}a?gSB3rg|=^&`~4|C2FuU
zr8S)8VI(e&MKiz1nhk7}u5@fX-}>B;F?;c3T-c!?KS+-N9y4tl=+<2{YGE!?gsXon
z*dtT}sj5MJ_RsI%li*N7j8WqzXhOoDD3tv}bgqbF#opD2oBB0AjmC&w`}0(z=Kv-U
zp-yAdr;l5ln8>fUD}^tgKwf(FD0MNoDwfd1dkYTvC*9txUX4f|cEw}$*5H`?ztxqT
zf3DfQ0&zc0c`WERgGAJnP|zyGcO`w5iqEWrdONd!mK5~VF1gl5n7p^#R(e%l+yMDD
z0O%D|K^`J~2|#WtCy{a^C+Z-@JbIuA$TE`p`&5*Zy%zd#ew^#&pJb-8
zG2gNG$7H@T2t_fI!$B&EUBiols0X0Tq&UzSPuUWKVn!t`(kxPt#ia5uhD_xb
zrPd~4^I~!ZA!It9I!o0Kw$$9~$Uz$CL6QxU*C?GA9K6mH)%7!zyyxvX`;hQzRw>os
zWW)FnDtdbP%;PuX<2QzDpiAg|gTi)Pau&6tVtN9*FpmiXaZT;^>2J=P!6YV|l>e(8
znUuCpWtASHL}4!8u$kBEW2TObF0q!hFX0658jVO-moo(B@%6$7*^#75Z6Gd`eru@<
z$lHi&)F43S(g2L4sB
zwcAO!9<|;LFyfjR+J)~mR(SDN0O4rDk{~%WKPd
zpFjIv!s&Yytjr;1rR)_}PlwN$fDX~xy2$)t$4LI7Ez&N1!K_NgWCygz6U1}Vz%Q%u?O?C
z0Ewi{T6Tdj4>T?y+`mdaFQa(;%NOqlD&w%_?l2`kSrT={m6kd^F|bXP_H)Zss4YPW
z1?^DfwyRk-2=Yz523Su9zlgFgwtMLaXg%y8ZwBCr8pQ`@gx
zZ*M=7vm>=3M
zH=Np*)A?pkwQQV*0pMMSBN$8$6C)w5j<@(6_G5#NZafK2f2Q9w399n2!Jwm;u#dEj
znYkxu&;W*b5WV=cKb89G+
zpMA9f@T0*x#b7>#H32c6q!^>GJs9ejH^0Uw-qOs=DD_oG*Nsv^@BU?HM^3Mc?ZlnU
zpQy_ihE`;)YX!HoK|T+tk2)Ae;Vf=u!PC4ZfOL8C4e-hn0~0jp8EqX`XJ3k-|4NK=
zR43jQyEkEKAc$MVmZU2UPzQ|8OP8W&*{2T?VLCg*st_<)+8|v@I*d12{Ph2=X35bP
zZAQf=16R;-{u=AWa`OmtXKBtUF%o=x=PcYrCQUS+8a{Cx)j0SnSE0PhE?0kh-Z!;R
z|K>wBZ#RtN;WvPSpP_7RIAA=n1>q4Glhk&T)t$zPO0qv^Q9+}6O!qSsAi>%Fbu})k
zrWaHG#`BX8pMlXQ-kS{F`nObjS`aO?i9_D8(jCPWK+%+P4WuLob_)p7W3#>r0pLo{
zBh7yj2&NVX>3qK}?{9y<`_#z170SHTK>Ph~?5X;qadAb<`d3}?bL=t)B9~eFxF*(J
z4(#KDnD=%^sbeNvXdYMhSvLlb`7RAq3#ozY?ib^=$;-+qWnLLd(;;Nt^kZZ2mYkGD
z7^-@)wm(G4@%{rH5|+>(Bflj99piCDb++)aWvOvU25do-&N)^q!UhX*h8aP^C~0C1
z!KXNr3%4l}%ux09&u=~tAABn@7acHvj~oZ$J$Re3l=~OBH}KJT+Wl3`n?L{pCbaD+
zxJuoc(7oQnKW9Shx+k
zSk`~%WWX*;kROsu8Y$WW+kkCB4FFB`Q=1jxFA>)CvdjtC%}!_#-1|ji?I|8zD}ooK
zzn-e8v^H}9edf7^uCWp4l2C+&=7)|Xeid6#j8dl+~13E-K4
zqScLn-E;dQ6d6)_iIBLSk7P)zvdD4nv{noZHVEWPCd_o)j%oOx!v39CS{_&n%fmm4
z;fd&K+I8FdVhT7wAY|?7_v+Pf!LC*0(&>yz;|yXU66ps(hY0DXGEO{;0gSeu-%yhY
z>$(OER#g#GE7j=O)4-B#)uv7U>&?fDS9lyQGdtMJKcwl
zgk!h&-96TOsCMV6tr9j>XMA~%ByG>zy^m2Yt9oUj3%@)!9HUlm%C2lcRfo<6m$!Km
zxjv$W{E+2yq@Y0&jV_Bll)8vKM_Kr4FAv={=_1O9Tc%$!!k?>_{5y9Z+#T5RX_4&S
zogeQAyz*ZdbkEGp%Ez4;B>-wjtb%act$vSiQv?WEnhupQx5Fq>NkhLmjAqoLtir!!
z4j^*UBy2^vB`CKMnh%;1{;2Lk5!lqJRD$HI%S@@pD}UL*!g{w{gJUSVL;G-pa0Xk)
z1Ue{tVu%JtbKyYS>u+MdUt-3uzdyVAHm1GdjDd52drD$_=<#nWx2L~9ruT8WZ*knd
zzdn<)X2LhPfNy*NH?IIbsS%TMo^mlet2gd#9uM@Qd-iO+x*M{OwD8+`c*2myKha)qbbg(zz&lcuq4eFfi^GwGYR*=IEZV0VT;0qIl`^6QxK3bGKsTm?FHV$
zMfex+@k4i2Wry8j|3^XSbnSC>6<{H~v;h2NfOh7GyYEFa&oLUj)z7IERe#=%)W>ls
zPsLCUU(kPTt`OR(JmYrol6O$WgOT2Bz}^m`Y*oHF^m@b58#8~6dS>+_SyWIB(n`p<
zc{&>!e}~qO6-pvzwnK;GlhM*xErtWdgOdaJ^lVS%PsnOL0Yc*VEJ?z<5^3(#D1I&O
zzf9`!KBs2E?u}Nl9?=5u?q7{_vuB}zAY9LPX?H3CyuZwe{94<<#MjBFtH2C41?Rv$
zHV4I4v;raj=Fn`2I@uc8X7OmpxC-VZ`*RJ-X~=|237Q2!Pky}fRv!!3|Z-3GbqOA
zSx}w0)uD<|x?S2N{elmM?a{M9ab1rB2PGE^6>+d|Fc&aJ6(P|#
zKvnIdF*9Z+fPgfhR6E!8sD2Iw)x*0v8QIk(R;7WQ={F4`E&DliJRobhb)1pv>J6nO
zKu1lvwK!KT@PMI-{q%duLLKYsm>MTvYEW?~XJ^)GO{JApsNp=C^0qc01`hZJZ-{qf
zb^XL1vEzjJ>;zZgcdKq9k#_jg=Ez)#mAn`zOD(mj(>I@db((@@s6?z^xZO%$
z{SX9{U-?=iELf#5Gy0tzZmxsN%|qMM}drJepmr6`$YVm`Bf`iIGbRN4GzI<
zj9wFfC!nWs&fMJ?uu#2M@*iA2KMG}16(f7N#k
zSvrMgK3>}6-`pH$o_wGjB?>8vtm9PhD?hj`1Q7}*)rl`)aCUY+%;49dY*;XHr+wFh
zgU(1?==37shgt4qY18ep_Y~+hX|(XRV3IWnB=TKK!QX-&V7yQc5NYZdbTaWTq+T5}
zn-Wrc>Y_8*UczQ0jW<*QBKMtdxK-CNgn?WFI6wh&nbD6wD-m^*0W8;L*LJFzylY2C
zf@fNYQ_p!dMNaw}%7H4USc^fKlpYg~b(TMnN)t@d|7Iyg;lmmX+f*gyOMMqy8L1#
z$>i}S(_S)bI~u4L>Y!-nz+ncd)r<^Hb`2!!4G@m|-XDiKU4RYkmZJzLID3n;iT1
z4Bf$Oe+>FIt6RkfWzrotYltsuY;F$XgRd*u16bvI`M=4
zkF-86EI2L*In9JZ{x1-#Q#@+eFRNS;@rUBzTag8?Aj5p43C7=SQzMfH=-zHOP`avt
zIOF4>Q(-&ZptiMCPzk*>PhHQQ2>3=50O!b(+Klk8m9L>ze+eq+81<8zRiGxs;$
z@^siLJ?ioej
zns`%TcQ4)@xH_HK^lqoZkMH{rwh~-?4)r+rxtvo5gZ7ud=}ZTcDw`a`CBEWmtd3HU
z-5@A(Aw)2gvUX`Dgz^PlZ2g+WxOFV!dygJhgKev}a+CEG2)!0Wvxr``R2g8zdJE!;
z7Z_X&NA;<4@ss}^l|SjY=L&0Ql^PCmffKi$%?1c!SRhzCi}B+78eM`EZid9al6wT0
z>mMWZeSo2c@Bgg@zE&$kyBsvi{5>w5qFXX7m(Cd~O27x2yKOVkq+TTkBu_{ZtN
zrJdasRYq&)YCoZgaf5-k(Of`FyRpFd&s_qYM8eWE@tFLUJ;3u7940paNPQrz)o_bXk+Uh(}+F`IUsv$-v~JFIPXzS;X%e@@)og
zo2>-vQkOF-@4*!OYS10MiUIC${+3A0xO>Gmoqn^1KS(1MK$H({Q2RNjCJ2X$M+Qc_
z`sl$|P%o=p(lSjYG~b($$`HtIs2
zcCyKL@;>g(R_5L$P30(TC*|#o7BCM{AkRHUT?Z>8ES%PL6}|aFLJ71Xp}o1*+7UMl
zWX^}ju!l3MDZL6SDuLNHaPLkd1?lA
zTVv7vJ~w>>62N|2b9AMz4)6qqKil@riU*;rNV1Z1XZ2zB@(61QWP9WnC+I}=7mm-+
ztT9cze~{mzq&y)GqOcn4ZKH2)CEN)4!=0$-v9xArW{v>IC(Y7OF=^7aB(J5eNFN$51OH%
z33jwJk5TDJhS?b$^@$ZiN@Tef-%8ApDN`5(5n_UAUU)8VLP&W6|7s2PB&Yf_`_c(-o^w_aI
zX@eT*rL`lM1Jet+S+4=f?W_xes&noSMf;4g8OL;x??pB{k1b1ys|Y%dElB
z={zu#__!Lv|C3cgOUx|D?j(-Qi1yy44TecXYOc$ts@7=oLWz`sb<(_ZhaQ|-{=BUm
z$R{$z1i5RfS^3aX4DZ(mjg2q$Eh2<@|B
z$Qyd#r|kVO5QNe64cv?LAG`(6je*fDo79
z$j8?>@gnIw5V)^4E84;pXdJSnSsk*#K`ARHI{!`+=}wP+U=peVwWPOlJ4F9w`T3qR
zE=Ri$JsX%B;I9?OEQwFz5O7@KXC@?P8z=C2srz`3K*1+9(9TCb&Y~xR&FUl0MkLTz
z9rSRmAv5Ip*=Qz+DlAVbnDgQfCXSkYldnsf^kh;(o?7BC+2%w)J#H11?ldGb^WKmph?+FITJIdY
zy2)uJSZQh@mO_d=hfIYy`q*4VY&?TpdNGrOYG5<`ud1l!VEm%-Prv)Cfk;2*P%xzC`_ZB
zS{9=MC}7cil2(mP0#Y}NK(X7*=Ex-FwmeOsbQ{-y03(PLItUsgwIPJ*Y$
z`O_QS-C*4Fd3?CP8c_9D|33f+LHNGXW&?1!h}0W(FG5ekD}gwO_u{-3Euiuu5G#eJ
z5=nd_TD0Wa`O+2wI?>8V>Jv#82Ht2n9!;h2Q_&}sq)bJRwQ!TjTqgRq!f=tv&eo2+
znojZR&d&>I!3%_(5y5{8z;<@h)#FEg1xoQewH=RZry^%47Rc-QwJ@PG7^Se|{6~=8JF{o5c!@^PuW^h_V15N>|l_)L1
zK((^}xJKz(Cwuk>H9xsTx-K`6RnV~}@b;?#43xf+WnaBZ987^sKlT|{%pWT(VF%#m
z4!C+AxNp|Wms
zOpFIal5oi&KF(F#m5PlD|6LSF+DnCa`AvM}oaa9w(Dxq`uaY%b+dxfx)vUv
zJyeI&=Q%ML63@L&BT0cbUbC2<07=%mq?aFB)Cb&*dGyT&GOC)3n@m;%rJYWo^*~{A
zr~IkCj~3rop7;l5%u7{%R9Uqp`Vb@?8bt_tFJ3&n*U+Lwc}MT9uVw^&Do~V?g_PEL
zr65WxNnIw%!bm=VOoqphlZ7|a1ST<}ceI$qAbFUGIW}^3coq)_Q~CJl-@qkac#e>f
z2tEklZUX{q^=v#I<7a>NXXTymd}oVrc?tlZKK`9N;-S=2CEwWSaT&n31Gret`aKG>
ze%DT3;5%n8L2QnLlOvWx3wO=Yr4Duyf}CCMSPTndM`7%?xp^|AcLnoN38x%wUeFOV
z*@#1z1mI@^@Dl-vgef&CqMR>jwGhxcRoaL{Vdr*VDD!kzy?y)n^jo)YB!4vBR5!#e
zK_5Wa(B4srAHK`x#q)bT^L%m|J14DOwfHrX(-W9A)>crh{EpM}(OBhnNJj)?3wOl;
za1Hy{4KQXb&8`7|_16`b3$9XFE=bbRS?kfErZz3~+$j~!>go0=$vR5L5J;*rsZL0C
z{4|d0Me%F2E`YzcUkS&+dMw$hSMCzWGaxgMe{Fq~9oMmT5@rvt
zT@YM8+W~<(xRM_ohv$_iz`lGEY)n**9{~g!UB%L9;PyS>{y_k5knnGV3Jh)zi9sDR
zQ?-(OwqQ^IEb;&bkER}ZB@=6Ly8za=U*kGOU~S1y>r`%oK~@nwMIQd`#xn+2p3%5>
z+u_aEJ*XrA`!z<9mFl@pBuxDr>nrA>?`^&&0GNyvyp??KSMoo1_^SPYR@hM)H^n35
z22wmEBr?=y5e0fHBF;IVXeAWmoj9>5yr!1KC*q-e&RnD{g_>ftk+e)DaYjx?3pwVY
zqz6V4rlLkl^tMKNl8Syq$Yu-leHy~(Zl7CE=bH%dC?Xv>n;fhJ3s`IN?iR+lU)V~0k<1X_VY
zhmtmg^=U2INGY>&VILynVC$LW_w2ry{wKq8>USzl*hOUG2;*X^X7~h6cdW$BU(L9k
zHq+OcvO=80Orh+xnuyjS-?iZya@zwya)!oZhutqQVi(S4kx!7qJ
z5H?L8j{|?9UyrTh8zv=X_LAhtC2G
zIteC=!->aaE+~p{P<16+b~nQDrf2!OoFFlwFZ#?Du{jPv&bz?kN<7KR6;5CYxH-bv@R$SE>!-;AQ1E)TDsH(c55pt>IOJiLbU7d2jbyMgn-ul!<(
z!$ZMf#AxGKC7;yB4y@@JR#Ed$Yy?@G9k|9g5}w$pgxU-hW_R5`fAEWo@6C_gO*7C}
zs6@omN(BTd@FH{qFADSk#Y>Qe6Dse;h=mm|xld@s_{WX0GNI@4lyj3jv?ys2b2-NI}cb4KLXIx=uu0)2Ed;N@VNkgft0%fq`>*bJMg)a
z=a|?6`zMDj)~`G)>1Q5g5u{zcnPIEg;&7U>FgeR%Nmp1}XGv|C=pi$w=vXjkNe`it
zlo<^nURjiM6lxfwsI|}Cu`T^0v&BniUP%AQndg)5Ot;hxZvi{^5C;bZLZHy8HWOjn
zgb~Rrrx`IM0*TA)Fp(!?@LHLEXaHh&6?@zw9D&Tfr)HlX+y#KKy!u4oueu?3Ti@7V
z=5^q&s?@9Ig_@vZp}>Rw@X^GXzeG^B+sO^ni@
zMMiQu*Tmz*;6^%>JBiAK;V<$&Q+uuccgKd
zM^~1>vzGT5-g0cj%0r0|&Dk8=O;P+q;xcv}Fb<-G9
z9}5@8Ns*=@US?}d3^Kyh^>I&NBB>9BQQLDeUoHNDQruK2w;)nf71&PTgS9`JF!!A}9;)5ovbqg&_pP2coQynFZVs^r^e^hf~yJScNOnH29j
z{&HR~HZYkVVp7a0mp$w`OFOf$$CiHXS(+T>mglD4;l|03;vDlq0jEmZ!qQPOOEM08
zN-w1U&I8*g0t*C*
zcL}tFE%4WC=#bNHv~|j_^vJ%a?6@Bn!Yu0-*4A^&IywpwNQ%_dc!0bM0K4Fi?FFG*
zixwLnT7ABZ+_Nf9N^W-gAVc3V057Z}NhHKz7=>X*Y;6#ufm$|NOmc^lxu7T`QkF4+
zDy>$78d;G593UB%p>j(TW6#W7bC}ozt~w!r-Q(U3iC+2(q$3HhMs1V97;$C{yl|=M
z+%+ov`N_LPVWk2*{ey;l%(>GGihKZIZ@Vnm*=U16P2e+kfXS3dlc<*OR{;h)H~^&$
z4(PYt2*=xbV2}b29sxJ+2ZpVd@nav5cj4HOK$3)Ny3KL;vktg^5);W144S$%MKGBP
z4rd;-dDXH}p~-OuY;OSD8$_Cg+h8p58iS?dc%B1C6T!hmFkgh%6Pr|4u33@Q2&mKK
z-q!pd`tMih-mf~QGHE3Tt=@C0NEcUnj5dj9o;A4ktj6R>@bO=CIN0|X3>wM4YwT))
zz`Fl89_i?-m#gm$kfr&f#T=@3>A@bL!E6yNex|sbZ1kEC-f$QPO%(V=@jopz@A6OIlh5F-(}y2xwuI
zrKeWf7-(%5?zqg|UUoshbpBm~KePR;{!`S1n|k;%uzgaqeccqCpG!CG$L3Z*nmUCn~A730#afNO!j?sHM1IX_n9
zn^cq7gp&%qh)0qJfHxe3p4m}G3`c4ie=?m3_D?(xk3D9&gA+oj5HnGevn$!Q(q$Vu
z4&jt5u`uijr!$-xsaCJw#*Sh;tjja~CA!^&yxu@)G#uoxtvDo&sv*
z3E08TVqfR>y>MBuISOnfQTHJOpT0>f@~T0k2jTHo!wxdU(rgTY=dL%vZIA{h^3A(p
zrfk)O+Q^Od>lO(hY&fi>;^C@^vY}>o+vC
z0bYOA;q}j0hzQbDtv06+o%!Jk1WL>Vu4xwOWD26i@L@d*hu>3?TrcfKc~8
zS^QrfeX97|AO>cDGrojnNO$nU&?OAd5LGVl3d$EE9%9ANctZOexsc*AWC9pJM=r31
zPX>usg+i7O{NZ*k)*nf7kV=q)wInu`^o<0Y<1_MTbSR%ne-VC1f*kyhA-EY$%~T-p
zN#+5c0>Gz_Uo+P4-o1PH#&7(_Co_8dF#s0;{sJfm01}0lPTt8E<~J~3OmH-x(w}#*
zmn`kVhFQN^VEu|So+IpV`*=)9!NsVcr$xDNM55JD4{5Ao$(*IO^bSmrsf45x%aTr!
zS{oSSb9Y?iZf|%|zkL2(gFmzNtp1Y(gUoB;>NXCMMnY}ER2x~h1^T*CF1~XUmOAYC
z^blBC*CBdp05f{}+IkQ|N9tYXHjA_uW42j9wtbFhw{|=M_=~?@Gr_H5(D3_pCHaZ~
z)(N}>yJTWCMnhseQrH|5g8`AH3Py(jU*|$}$NrJW{;|V+5z_pWl8U8iW{P~pMl%kE
zt`K4KUfEi2#0R!I7(z|~eJkC-eFwkO$J;}~u0*S?HHFB^?^syi@)q#Sg}``v1o?M5
z2R?N-%)rI-Y9jqCps*Kj_EKTqhxh*CHCe{e5P`XJ0=#mQD2f;a_9MK{1`HCF^gRNe
zzmDY?z#s+g?E$y%M_G8iiHdA}zAgf1gDfzE8zUmi!p%S`DR&(h41}MD)&f=g|2sd!
zYF^OVklS~3BA868&>8GHMVG3=h!0$FTs9G=50&Ds|FE?
z7(xO9M-82h6y|&G!}mWn|K8an`w5e&%QRFXQYu9!5HBL03f_U9&WnL^;wXhHyz$B_
z7+=tOf%OTEHijt^E>fFKlDSgE*j=30DSuRHDUdJ=!bp?-}PPJ
zMWAQauWR)9CIGhy{BjlQEEn+Q$M5Dwu5oa3z(rEPU3avZ4G!O_gDWiaVL`Q%aeKCd
zY_3>l3zmsvnU{3pnPvlKE+gPrs9ag`G?Fr*QK*8Q1==La807AFQMkR~dHweDpF8-T
zt!MNfCkZ=i1HYK%Te|6dZ0v}3$BxYV3+4%+)=6HO!lN
zA7%pYJqYHI+8DA*%XV-_#17iJs~Esw5P;xjH8-f(2L=UHKE9d|wHGd*#W~=?Bf+EN
z&`oSiI6jK#k9K0$c`iK;-cwYAYBWP08y+A3+-mbsA7~_k{9hCv!=b{Z%L*4SYmA0r
z<8kXPk6Uk8SkERFs8?_}9g8f*qdHTw%K{=g(A_z~?#v%}dcQEEdjOleoF0T(_ymofy0v{+Orn^
zhG)4bVUKEuZwb3oa-hy|dom_`VErsC%c7*#35R+}?Z85nEMW`@#YveBP0car6f-FZtSXhmr^qV=&}o3
z0Yj~nYXUAMl}3O2w0o|S9mERlChO#4v<3vxQ`7|tkUQX+3mzA@8W1=zz`aA@
ztvxmlU7jxc%KEpkQXN;iV8VFmiUjtr0!fJpMwD0XRJM8cgO*iP_84}s0wQ?1
zTxm=dSqj{G06g3aMihB$I(3`jW@O^1!EIJCgDo&90w)%|0fy4#zt_LhJ77@?PUarR
z)5u9oKxy=5NK?95gFWZSX|gY5*}x;+S-$Q)M&e#>S?Lc)W&Uvv$THy4C4~zY6$XRw
ztM(rW-gwR7cp~jk>b^~F&(s5BMWU{0WcRMbl}4ZzvloHDr5X`Ch3k;{Zq!U~)pTC|?3j;5?c7QduX?`Ls;EE#WP5
zZ%ChF=nLb$E#_hp?UOR`+KuFB`$+uBRLpE3$+q!kU@&-dAOohdy}2X*YxdKyXC#Hw+e)1=OQu<`zrvUKjS;GE%9E1r#KGr|`8X%H47L|%m`zP!{ZhxWDCtBvNHbWtd+|q^?gTETE#WQ-o
z1NNjZudkEywF
zk*0GsNkVPaU_gvU;qPe{7>{~0TECRzW1uJ$wzrAI1c+9*9+1_bJ&4)dWADIY|JWmU
z;T2{&fXh|{1v~6Olq*;RK4G&UE@NMKN-+gRM3JhLV|e^8c2oT!RmzfvV-H)!_=D=h
zZxQ^IR2iprsX<_7fWs;9>OC%5LR3AmUx)x*wz=T4r+$42OVLf#D0+!upB9WiK&8tI0GM9G!Ta%mroHfI+H$1~&dA
zM5JAOcuK3!>S&3y!KOd$djlx5Wq5z%F>(GparSHgegYt005{+AxPR9JN{|??g3UFb
zt(-;#u4EBO=X#Y^9^guI2s%vQGQ2bVsX8oT3;d}FSXPw1$rO|Vj$bQ(c<+<;uZ#6A
z$@Do-aTH$?%6nL+gAU{^ORvSag5s@qE_JDQb4clPrxg8w179fdWigdxkoa_-c*R8a
zHV(w>izF)bX2(dvM9dp0&I~u?aOmZiwth}{!9f-f{6G6o-VcBH!}0}R@C7S|kf#9f
z>EqXy^@}f81>oBNd=JBi)BajZ%-&)1S^C9<(evvZX-Ie#tS_C$t`K7F@KEVZS;
zcJFQtir4~x&Ha>7R7<@;aT#n|GnU?SIS^k39YQMwlMsU}1n&+JW2cIFV8Dh?@QQEle7Y|
z>(4Q!E~^jT`_O~@@>RhwsoFv+M((xy#QyZjLEt)uuzRX5V`+xKix)%awnQNC;W6;$
z1GX~)Pm8DN1r0qQ4Z-Yk=`3*hd@zaB@Ab{Qz@x+dTtec>*}-OG!2kxUYd1{-7~C2Y
z!vUAMb6$GR`3{(_oy4{TW{c1~5*+KY0vOlkcgAzL9Wc1A>$j~=biiNSOY8&VrwD9q
z5f{!A+uKB%hE3Xh4m>*WcyPyKHV@z*y2&SOK;YwnYJ9p&-_c?-J1ffwsfH0`l+3;o
zA=3i}>z^fiT*fPmU@arVLqnONLOGS2`@d3r-{fxjGsdX1OfiC$oMOC#bvht)C&*n2
z;};@+VVoNvb#?)7%iJfLUSs6vX5sb1dX5qq9cO+%R&t{De0Hcs4-+xlM$$3t&?
zcCO0*mc5GOtxpRt6Y`THxYJ0%bu7%g-~DcU^rIhLF@!t?fKMNfeZ&K#Klp<`i0}UH
z?|wY%_YMGm6hH>>=RlbOFbQ5dewlA8p2K{;kE7X~{+fe5YiVbeZsOqPj^!Yy-%;2q
zb~!vrX_K7Au%OL@!#7O^%p{}0s$Avt9!!xbL(;<1(iuaO$c+2WxxECtnw+#QQ
z(XM)TIrDINRnbNezB9Wg5|rEeCgs}zPFg@QV)s_qzE1YvX*qt303`8*AyJPwX5Y!Tk5HUv%hY+8{moeaShRN!N|s97i*0L5ipR4mWe
zRdh>5mY|Rr-YULA2I}ScRr9x1*9HM4x`9vVF`5+s^NDL^^J2P0{
z@pVdNQsVfQ{fUR4$p4C;`iE+yE|MY&s_;%c9Xv!iQMpU0ycO>k%DTi1TzOJ@=d4eB
z;&o!&+@5%2Qm;wL<|F^;%v5+V6XQ}zwvCuUBIYxR>bU7!hGbSXwDo`p#ov6Yr%A&lNUF5qif8pRSZ(K`$pU;7E;lr*?s{5{w!k4RP16gMK
zwHZ0_Se=iNj+3_&&J*X#+ixu=}q;Ud(c=ucEAGqJ$l4&O>Pn@dn2e;NiZ*
zWac5BNK7?f7_nNhB-ac6I);wMf>~G9)j!Lqt)Mz~9;>rO&BsenFnVZzFXy~doY#LY
z-%;P9L;tf{jfh#zPh%g>=|f(pIe>|_+`T4VFkUE22MiP7UzeDx+UU0@jp^hALCNoNNc;)*nZ7oP==r@+I#U`jf>9Y!HOo2>eHq_8tn3jvc&HVXT9)
zCOYPnj6tlCho9gaSbv>FbG=;&xbtUgMz9KzUbYDJ1x=&fC{iI%M?#ySg11=ge{%5`
zPu?j1kta8hVoNEVJ2~1E5MIytkbNE-oPYSkg39b?NfC%mb&=9!B5&WnA)StrN{F{GM
zo&vz9kIzc-{qZ0FaeUjieH&-9*(&SzxE|jOxHfqw-#vd0v-}vx(<$8<2YaK6cbQc2
zE@=+CO^#)o+ebqdNzQUq(&Z%!XPIUL4&9I*g(_Ik3Yaoe28tHBvKq!XqudmC^w^Is
zd{OoncVA4uTRc$CJVJ6ibc@NWjU17ycZKn*WnXExb9BqoS9*EZrtGhR0j!mC;xAVS
zTOvlvw;4gt#_3nHc;44?cEC*@gi;<#14b*PX^?P+Lt-=l(m{y3&>FqcZ4LA!x}h)A
zT-agW`aoZ;wN}4}DzqAi7kD_NDRB3`;I%g$vMekrT7{73CHNztB0UzW5xir`mt3{8
z1ZJRN`{Kx&SO)CYPIbr=3gJh0-Pc1TQB)_>i~2|W0MDx!1h&|}4l`JR%=-AQNW<)?
zdVB&6mMbHlE9X(YcyEtGUSFLNm>J+`4t(a0f;Li>+{AoxeZ1wfVh7`wnOoq>8Q|I(
z!NN9cry=mlJ>q!r7!dfFC+@>!QURIgFAH`yg9)Z?MtS9}a4gokkxv1hk7EakAU$8Z
zL|nZHOs2rCd%(dVFc<)vqaYQJd$I=mn8B7zTmiIsE|^R`PNsrI5tIw9By?N1epWg=
zgtoyVeiBy&QyUWktIzHN8{}DT*k*Zt)b0GW4>qqw}X$*|MU5Q`#2L`
zR9Yt`{K8Oqad7l-nsio9yfAf68&^&j-Y7aFnVZ>w0YCbq
zKZ?KdSN;k=@{y19vwmUa58wRt0DdokJ%GOmiUpKP@VSRy${TJAdy{=Gki*~bC`Tpj
zNr-pxxo19FklO~^({mio!TB(!)g{Z^(Q9yMhD@zdrOH{LB*dtUp~<6QNu_j#+#LC$
z+~0b;`429C(cr&NM(TWVQaO7Sbc@0B(y%|(-@QmX$1etQ)dKBn5GBpZ%!(=UQgwI6
zUFt2?P+GDuq?_>-{>`rdyQpAZ+Q17Psj6;XP%5x~I?+f>2*OPgVwe%>Al%H;6wtcO
z=Cu}~2<)+Ars#gHo=s9J$Zp=p8D?zmm@$RMrsMSJM4*&MHWZ`^xbr}8^NwIR3;;G9
z-zLm8Hp*7cyq1GE&J2t7qa{09-Mw4DkDY~y?M72+2K1_;5}A+g`QIzVHoafK=rbqR
z^gp0oMj5gOe=C`Q(jS2QxRBwsK<`NbVMI|aO2MUF;Kq5uq6}ZoYBp{HWJ!M&U?kkP
zg1qH%C{UW&yl2k|&TltuA+=oi$-6|}$q1yJ!jwKCJ6NC3Z@Vhk8U{8pO+swUr*2jO
z(CRU7;z`-Tn3b(A+!vk=^RWc5cL3bFTYYQAMveyo3YvYt!MU(Ar;-Cb$ij^G>fHPYa+c#)}wohh){R80OI8^XyhFs0lvjt<7$pl97aFkZzlPm9qh8Yu3St;lg66KBf6Ms87hwGQVZ14j+H`UF
za{1a2!3y*kQ}u;v!X$vMm@=({tdger22DF0@u$27taXtGMrD|1E0E0c)wb`)gs|yTPoYe
z<Aa{N`cg`kmHU%DCss*4H)PUpa9ZV_5ZyZ!Gp
z(Dzw@L1zJz0x#UC`g;{{JOSRi6Lu1H7<3&xJO$-X34yWf{PrHpJEjaCSR5nG+K}r`ZBHJQD05R&{h9mCPG&YS*Y3eG)Ka
zedzs)a#9=XWvx0Qa>^(I<8)KDTSa2?NKbrB9M)a8f-DUst#0xPOe*$9#-NIfF+&AA
z_Xh{B%>Ux-E&D+)$e8d9v??8ZVHTP9oH|423YEGAbC*oC2NJh1h0g%5z42K&kb~{1
zm;JdUI`zqJB4(P%_})NdXN-?z|5~sK!7~63A@~Ok0IX%;FaPo{$A>=jA$bY_pFY-t
zziai$1p1G><%r%8Y9x~frc}sA31Y}0w
z;_&9!6|1BjHXS#XwB~){H?JC2iBa~lv@7A*@=v2Hg*pHl9`{H0-Fu<13q=LMDC_Sn
z&YABo#{8X2DL7i#R;A!b)?WiI`q;Hzu+^CdT=_ZnvxB7tUbrgQ7zaR*CBWV>@cMm)
zK_aI{&j|ZuxK13&8W89`@b)Xgk!&Mp@X-SJ%pEQ_KBtj=lr_{?&#@%J^B4jzT^A$@
zC|od~>`#E#?}mE7c!So8nfWZ)!B~|nZ8-N|xKUNVF-WPe-3;I?Nt%P{U10PSgR!cX
ziiZPM{mtv=25ad!%<(!X0C_=7=L(al!^y&-EJBr{CNLTTyW7OhW?=pVK%NIi{_qGm
znFja0(oIM4=|R%+SgE&<;S)Li`_Y+e#3>A6@5j?&^T{SUrWL!%mKUV@dOZ)=Ru@{?
zq06Y4>ddb;oE5+nfLXv@CueeZkufe(CO75FuGweXGqA%JfH@Nod2LDT4Q_-<~L
z8V8fA(c?zd=y6;%dX$d&&VqV4;_mSlbxAD73pzTM^HMR@9CAqQ!CWn9;gv?pM6~j>
zv~(%0Dg9jTjIQywT>kRm-x!@UUuLHct_X5(?CkCS85=xS{`Af5MfqTypac-8D+i&`
zgsxKijZsLnRDd!3w^AX*l@KVZ<<7Qd5yks}MSWY|joG*|6iKvl#G
zsOaUb(S7+=YFv=;L2G&u0@IUA`oH%E*OhI9Kz6%>C1wJf#jVa{jH7zk!*Hz3iSqPC
zuws6^0*XA0X*7juSc1WN1R_a^@gTI~j0a()Lm}!FUIBvwtt^yc*q?}o^}u}YFe^MZ
zN5FU(j!9mI2$$okj;<)f8_~K6xb9{5(9ib8ElJDkYi+INYM*d_;C=gdcQ`RY*@g0gzIO1=4a$9zw#^LoO=oYf3rVoD){K=2rs?#5+6Kx(3X3<
z;O`QG(c>Dxj}vlRh!nUse+S+8eAtObUWkIiWhN*g>Q;~CDlKlCzZ_mCD7AR+4mTTt<
z;Hz$6K8kgbHv8B5zL-I)q+VH;w@dT2$XLNDskNTDF;xtLF2;jvmV$2{o7XV$J2e23ZF31a@EPNGatHKUg1&P`EKpURj
zHMn$1V`HpClZWjvj12v&&Jp_u4i6qW%;o}WsVc9CyadjiAzplznCBsfZZ-!#@p?61
z#0GW*#;)tO?C%e)^ZmMsuzl5KEhd0$WUWpeS~M@{MM0@TJ~etM{}D8<*EFw)q*^fX
zhC7o>>hDpY=qvo#Qx(UkPnxnCddB`Bv?myVS~vTL6|h#DLbf)5=dXt9E~5h|_|#ir
zvs2p!q-FDM=M2Uni498X9zkE=K0P0#NKhoh_Yh#=%3$w93ZUwipN9XZP&wdstSO={uVILs|X(HKfjl(
zp9FaeO~zw8
zc_93(tn>>npWjnMseuATFum>m_QOw3f3Q4OzvP8yQeBQyE&e#MURmw+)cA#&JEM)y
zT;l0czrV33$s^-UY9u+Eh`FE2#w3+=_mX@l{nx;FB6uf(pA^BbtjfS~Kk!ok_!Ru%
z`1lytu3h6~GFcbu9IlbK1Nbul4gh|v%JxeP-gW$id~SXghxrjsrZf8IJnW98omkov
z8yY=EIk}Z#d$z;joSYAGS`)w@jN(v@lyO|fyAXyM66IlOX%jjle#V;{&)|!%{I=mg
z$hP%M#j#tOJP^(C#UO7j>(?9W(gfAk-^-36q&96&q8?k`Zhu60SJILzuM0
zK(NdHVa-4o)_>1Ba9fnX<@17z=fmfcrNEts#J&BfK8=wOjtD4|?LqsFa4T!9;Wa2a
zyCHb)d=n326fiG=Pu%8mUbM9jmG&%S>tmI6^i3a$M+7(U#U0?8bAm-tU4I(*^c`Y4
z5AiThCNn-cAgtf-#sGNRjiy%4BQSxBMPOe=R;l}Ca4(wvVUKV>7-V5)aAQaehhYwQ
zxzQ6JfZ*~PRq&or5u2qLHiPp*aB?D;%msN7%FGlQSVYwYgVMO=@wm#$X!NF|c=WP@
zr*seZf=EhtFm+V|?w%JN^B35h*X>OC;0|HLcsHOg4vlVh9*WJ3ay5w5uAd7};-R3E
zp@N8DcHjS#=_B{|iwEuvcd&SCo|W1`+2kbgbHDJ$D3|EOr}KdvZk>2}w2(B*yxB35
z9;TA)CvtK7JU%k|l9c^k+?w52EM=O=lBi-co(Kg``1L7
zX-!#b6>2%RqCn-LpgHD)hBBJKak9j>3eUBMR#=94Oql
zW^nebfry~Ur5!JVuy~OH_}zQpFr5Y9mkqGe8S8wAoY~wY3fssglatUuqI3YL?Cjj7
z%kB{Hs*#df299-^G|}Ks?IB(+GOEIkEr~O-faoPSJE+xt3Op1=!sfs53C^Zd`4|3B
z{@!AT|FJGlQ3$2EF|*}zk;wEQz4*|9xGwU!s6}d&FoY*cb-M^5U-G
z@Hl|~B>+HEp;a4Lqy~TWN!tg$qPffXSfmDccpO5KubvU)Hnfy%WWa?T!Tm!9My>;3
zrL+Doou6Do5_N#@AOY?l00SL>;GzT^f#=Q(K7KpI4z=8#@)*jsvr%aoRwC@4Ccw!8
zcub??elO|ac4AU
zAg#+#>KLrn&vLaxJGx1PX=sRwyEZB*bW0u^3td6aY#9
zNzY2&c{~MxzX=~A(gJ_S$H%9GziQr(A0y-yAqKz&|2g=AhtJWu1@0d{px^bdS1e0c
z!tPg+uPI=6g=g$p4iAU4>72#TvYeN61V`DJi8ZQFIZK9kmjP2ktXj|-C5gfWZ=~nt
zZCAc}@c$m2OTMC*IEaTQpxP#m8t@?ke2t`wirHJv`3ZW0p!;VA+x2ejnQ2)cWGWuL
z6b-B0`;u*nX7Rjlz!+BCkX$CQ)&F0rxiMEEE4pyg(JEy9#q)qFl%K2&*RyKM@R80|
zSU_vR^{Xi^Tre;y)Kay`o=UPKiGw4D`}Z7XQvqt=hYt9tUUMmeOIrbWENsm}0J9uW
zNgMo06#WtpX-n&V&z7v&I}s+UnP3tRnnyKqjDdtOcJ|f3YaguU$w|LVy?}TKy*Iot
z*!Mr;Q~g3Q!f&lZqTB9bwwO~1L5=NK&YlmeGaJZtDrHwfo`n+%iDsR(G249cL-L)uGcX5cC1_5p6<>~E?WU}D1+Ngt
zjEq{X;ZkX3_|>XPm+cm`rQW6*vYHX9jbxq8Lwf_sWoZ0zYbmkWES?YK>P1y24lHw^
z*v=RYe`mU(%*mbNCm;Un>3d6OHaYa0kd)d36rpH=rh<1CpisPsqXSbwN`ZKxXb~@-
zUPNZH6*|##0G|uspEVo6dfm6y;-`Q5r}4F4`?XI2;BU4^?e;x9Jj9I~H~N`B4Zwj&
z0Q^Y+p9An;lk!l2QG$0KeGZ?SKZE0ZAG6ty$CZG<{ML5
zI+lxqOj5OhA+>d!tC?~lOqi+!nie@lBU5>DBBkFu`&*K4zx2h~-x5#ehpsLsP;nfK
z)E8SE@zNs)$1NXn%Ix3rLXJYAB@TjamH9rVvaJLAmN&gPJEJBkT?0yL={T+=Yb1M&sJm1cO14k#pOgB}|gAyFQwD
z+`I2EnFy2tOc(e?5=%W0r%0UL;d1sX(E
z!ECEpJS6~mMde-dy*!lzXx>_)0`R(Z2YB{+03th^z?qE@U1Ab+;a?O|ElYVUzKCQ+
zerMz1VZ-fo6fP-lOgsmAwc9^K{rebBrl&fH{dJSm`9Gn2W3p{%{%q1pC!vtD~rR#V3^opGs
zy9PwnBCk@x>Fg^&IGGBLPXv4bT)7CGKO5wJRv=JS^KISCLGOWuuU*B0jSXUJLqi0}
ztzbG6oJ@}CEA8Q_OVITSE8_}s&<;`MoggZv?8HmAE`X}2xxLGAJ_
zneUWLhhy#>ZIdWD-zr#^C9QWf*?>crQBbIvDk(xW*=CF;72{<$cCECZguk>bp*hP8q`Zv#K2
z!i?B-F1T~Y;potTnn(xj!h!fT*Md0-SRXosM?)-U2$c%eT;2mTT-$shk!%ys@i4OW
zNeqZ29;TNLV)F6icRLNb*I>d%ez&skJxEoZafA<_v5=sbFkWdipf?}NcO75mKlB=7
z<*F(|wvlLy)0GaX6rmk*75%UyKk@OSYHda~Qk@eG93K)72Z9S10x-C6PH;RS;40vX
zRUgQ5CQ2HHx@*Re9xzn@Hm!id5^p>V<_z&6Bk=5oVE+U-nh~jqObEo|^)2+Xo$*6g
zkwvdPB;Ikksbsl!PVlKaYv4MUD0OhuCvEM`-}dIX`J)qOhdh<85>2
zjOY!2XOGWGb$&LM$t3bQaarHf9$~4z!wZwK#_?PEKREno@m)z`uF*K6^m(`l1wL0a
z;^7E*U4&ofeEm9_L#e}c>79qt3MZU~m!tvQYlFY|vA@4h0P++7{w9)rYw-8p_r8}0
z2M5qv_sPD&>H8-EYyrdxZ%%m
zV}C$vau%bK<-DXQa9}o6W;F}7U{uM^jJD+4m4{pNfmm@1BLakR)mv|=d9SN&bs1uuP1n*WWo3Qn3$3qe
zC))E@(eG&H;@IBAcG$NSiik~H2UvyCLU8ed!Idisj1FC+-NiP`09z6_ZG5${_Te^;16`31hlJCMVH)Nz0E^dT|F%3(M_0mLkXuaqnK32ONz;UfkJTVDAx@QgBydW+(2Y`A6waqA*`Tro)RKCS*UQNW@Ia`1EK
z1Jk`V0M2g$4<=a7AhIi;_qmbTe{B2MK|ug~_YVT=dG%a)9a#oEcP;c4*U?C=Um;D(
zN)1%{!628PgJPKXy?G~GPG@$)HJ_#)uipyKv%5`f3>C69nS&|L9@Ck}bS_xTD?nJi78PZlHf$I=Geb2yzwp^@j>X
z-xD>cu#u$eHln71NS4Q@6*yW^k!GlH^rrn=`@aCVKu5ove}6Ji*Tc-NDpd5k6|^WY
z>~oVU8&(tqL{8Tpcd!)rAWmG8t2k8m01F^nzdQP+U-~5gPiFvs(}2I41*t=xNw(d-
zHJ&&J;QIkg0sJdaJdh+;@LTu3fLXb~{o{SQT?=>Jv7DADCYG2vmcyKKM&r!%0*5nl
zwy~h2WjPCy?-)bEJ1*2zg&yC5(n6NZl~*cNi{x0uA71($$$x#}U4uVcoH!ISsU5zQ
zSdy(X^p>-Ig1+p(rK>j%e@0t6j#h36f{o1(2~*3x^=k|U4`A<+$K87lc`hM~Ea|#t
z!(G0%y)GTP!ti>l_qsW53^u`R5*R?GSAoOoUA&fnurm0g&_j`RW_Eh#jjD5k1}m#A
z+sz{NI2Z3
z#Ozg|I+PS2qm#BlOL#Me!0lVa+g=F&aN(Tb_<-=X&FHj1(8_s=mE1h(g0|>+MSwIB
z+<63y2LXiT78s_$r89zC`@s;>Jtb-Y!4^gO1ouTYcr-P@-Xxe$&TWT~=*zo;qXpqy
zRaX~1F?&JX>UkQEhxCEL@Z7}RM}Sd+3%h}x8x4TxuL7^$Y5-ghIn@S(@hC@i6KoWO
zaH=H=cu%?1g85ProL(bx)8c4kl3n)QySJAaoV$T2}U}@l)2tK(z*h8Xmz!
zw#X|$Sk=@OHlUSdvk)7pGTz3tL2U;hw$3{?=AYJQ6HI|zDfsSwqpWbr?A$jQ&AcK8
zg3^{&8^s|S!eQ09t4N&^(>Lu8AANf9SJRQcAtDwcHiX+-=#t`;h!+8AkO*)h9tjmt
z9b@G@e4)TZfttdE&{~NGu;5Ynppxo;Yc2(?^-}=&n+5#U0Pqj}p+CeAe(-~5+Z7P_d69#xO8DioQdoZz-TBj>LF&e6XZpEX~xI0{COR=i7RW>0E|
z?q-Dk<#mE$XkvNJ}=hD0Vkph`Rx#T1q4
zqZ+xY-h7?BkGdJuIm7eWME)l+a_(eT{aI61_&qw$Vxxg9+d{gFQNJ`MYx;!yf>~O}
zM*7cjt$|_z+`R)_dnN#f3l{{pZxcGL82AqOj6}RuHm)nDNxQRk$)-pEpKsnLUcN4s
zGz?ta5geQVAvLPs2=9QyV~>NQV7?io3gZzm9x4p8P(7(4Ca``FeSlCwFdh+`qc$Ks
znR!g70T7nfL&^Zuw2GU3qOl0olg-#sVu^02H=}ce&8AVJ!Hd?6O&1785iimVX%Otc
z&!f9}U;dW}Ns}p@yqW(ulh@r3s{x+TqFgD3kP1RAB889|Ryn``$|rz!0_}xHgO+g0
zi!%!-rRq2t;H18P7(7sqf<}=7xL+-4|C#y-1{?j6%*dh(tH6--0faD6p7lW7n
zLG&bL5xRD7TpM6(6DUe)qAzOJ&xFDAyZ0>a-VbOk%h;@M?9xo_;`An?uadDf
z;0t17Gc0I}D75-yQ6VU{!A%_R5g(K8Y!z3v_s+*4D|1-vMMh}r=&hW=!D@xsiQ?E*pM$#WP#8rqV2C(g9dp_wsv&
z>DO&g`aog*-)RCIJ|Z?Y1ZU0$+3?^|s4+90#*FUokuKxq(LW~8L&Rtmj0$hvCtkP`
zdWykd2>Hz2x|XalQ?=DVSq814Hf}NQS&`K~V`wwqxh<98PSOLzCf&CL;vIys_
z^j+Uwshg+V3)r)PtiEgv@aBWiOT4oY0@`=C0sy}CuxcrZKmXI_I$H{4b5RQftXg;8
zxJkV5OxWOQ1w3~h_{=U(B~ao1tQHDND@dYc#xOf0wGm{^BhT}v0Pr{Z!#M}7H9qix58!?8
zdmq=zzV86=rvN+z@Ud_%pD(@;UvhMrlky0Y<0<6@k78WV?peB-gY^Z=3zl2uE;k+x
zm?v|V1Iuz=&?V%Uo60!Pg`Ne;7eVs1$d%VR)eAkf);_%W+p<4@@!i>9E@vKPDWPYz
zSITW>{niFP`-UBiv;BG*!uSSVFBIMG+}^HBuG7w1TYc%1-g*Lgy9SLmBN$hN^^_~H
zQ)v``sFlmN6;r?}MAix}oHw|7IRTYmk+)0H$*}m(7lOBLl{h{TqzT(hPaVd=w#MBVF5q|(7LAsZk63X4whv<;_>+E+7yp#3GC{JAGHd^L$lev%19T3N
z41^<<7s5f{33xBnv?-frP{pKNYDA#GAu|-x@rOAo{fz$z`a|9aP!}2-m5mD<7C9d^WVx>}-U%mcwaf2tmhCvf|8bUypTWXFCkI?V3q6FfV|&_JQZlg^aw*
zX9UOhxL#OR=x-&#sYKBViOp*K^|kxN3o7I><^^zhHvrT7`#_e&K|E_hs5|!x>7YXa
zptQhR!K-fpFFX^Pii`=dG_SphrPME#vv;5>FozHpeS8wG^eiPt8L&~y#c43~)EjK;
zyM#p3Xu=8*Zj6boaX6uzBZ|^vHV-+3^SMW!dz3afS*TcrQ!feo=sK77xz=$9vvs<&
zbFN?o&9QInq~|`|jh0%@Y>Rj*C>Vv~&n&(-f9U_Q8mSvzd_k|p!HEv>q27Bhx=J?l
zN+j_isMT33N^7Afbgrcw=YS3Q4KzUoqh*-q_XVKl;mwXDD0yoh&p-eCQvmoI`B4Ww
zf9zu)!+YQRUdEDe*k&WRea~0S--8PLu?BxvIGI1fBwx@yZ)rys-!hch_d9%RfEbotwwgI&nYOnVI0AtyIesg-er(Si)hn{#l%!a$-lXfU$w&ud
z6>GwHm)epcR>?%Ju!rrE@@~1gt%~QLeI~`39fh(KINN3o6oYm3-UElb4=ltJgRJXD
zZqLHh+w*p0g9I9xZ8jj$z{V&n42&eBd0x#~p*_zg;QFJvGVjxoKjrjAc-^!ZV>z)M
zEKE^=$+1UoXI7hSO*o-=dU~Na0-l5q9*3pSMDd~k7NR9FHa#3Yn*X0Cm-c^nAZO{N
zj2J$I6mda|{p*51h=g5!bR4?lrYl5M#F&w7q_QF-R;#D3D%T*xCj*w}F%6
zHVer3hshOi*JWFUbtYh&@r`BvL<9F80vp3H6KFkf<*eX%iuP<5y20J6Lt|XqsMkge
zf?)c1ctUIp1m`w@%@jB{7Ce}Q8N?M7yQZFQMJ~n~lTHjKs!Qgz2gJ))!nnl30$0xo
za!VYYpmIZF#pMu#;l6WUI&!%&KxqZ9-WI%gBS^!eA#md=@cON&Uk)p47ePN0UOR+zlL
z_)dG^|D_q~8_v6h7J3JWDDg(LSP_8|QO<}LD-aRo67gDj?VXrG0?b2Z#6r)Y79sOW
zrAl<6K}TeR6gROCq(!*KHw1Wn&8`^0$;ru60QehO_N{}Szv`>LDvUlT1-~qcMHBV%
zpLS*68vN~H;&QqdEp1{^9#-IQSio~hiG6MS48QEgS8x2d&Uh(5^tD=}WZAwU4Jh+m_U^`jE}jdNx|_}Suzo<)
z0@86H#z1eKv$sbbY^`;Db5(tORUB?wgS$A^rN`ufuF0bV{-g$cm5foxy7bKi7KLDY
zTjSa5DYOaEF5O3B0CB`?ZL!ACCoi%F_(}i5%U&jmtIZl*Vpt`D2Y~ikc|eq-(1YHAbRzH!
zGlAj-qUupVItsLcp!7y|$0yq#oKEk2bH0&$WoCDrmt3=UF)xSOo4GiNB3~pz_abdc
zv;M5QfQ~(LXe+oS-jLLhLe(h1?3j3TPjKlPaN&|*dfddqw80Kn0H5?+99=-R9G362
zmM8*m-6mdqF1*jdAmsGje5VEOD|xs~x5L`q9IT
zat&@x5~3)B+2rNx;d!>UfUB2*n|FaMX*ZhGPqB=eQL+SX0AWkuFc%ygdO!(Mqc9i%
zKnzj^qeEkomnQVy`!++kBv+L{DPm)ch9wlD$USBY!F(>5%_^4Ag>Yn$%lH{q
zttCx!q^!&yFs95`oWZL>T}x{gqmJPAgo%TphDdqx>f%qkWBHiM^cC@Tp@LfAA=Vpc
z@1eX$E=Cfea^jp7Y6DH}OHRW<(n`#Nu!d5ikhDldB}$kPdagxziqaVheE_7@o;iWw
zmDO{rCV>9HANT`LtKfd4g1RpDkB4?N~sdL@>C{qi7OW6
z>QJe#gZx8ob}*`E#h@yz>g$>Kb4)9|)M7eR0)Zn0g&0dJnSX$A0N&zQ%sNqV$)vDVS^KSJw
zCG9ZYHhx*#$=a1gS5qOl%G|`-j{>yko4)RRrv#}7^c3+PbRa#%`;Y@8)nQYl0wJD0
zEJ>SZAD#W4+k@Lbuawe8wnU_0J7TB_rCu>}EZ4BAZNNuKf;~p)KKYfsRAD6bNAt3Y
z0Uq8ZMjL|d9bjiyaPSZ?S-Y2w9j&Zp9a|u=J9p33Yp8zygdrsP&OPGUYoXiv{I1~O
zi103ekKXDqiDlB&e8*OMNuNt!h0V|#4}q623kC+bv@N)KKxFa8K|0uL-3%IfzRnf%
z_3~vJ9cKSty-&P!MMC$l0MA_(eCj4q+NxW-j~?&#>FtgkhgM
z6E=-^_kcm#s1U7Mzm*F`LiV4j&)wjlo=gNsM-EB}60MMBKsF#oS(qtK69uiMiMy#r
zMe1JmrP;(cps;2McXt4YL1}@!@K{u`@gf%#H7IledMm036jrZYp}KZ@v|O~4{yNQ&
z?R)kz;6S`G)ZWSA?5*-Y#ZO0^==mPYp3nd8a8-
zTG6Q%lA={Avup}=!ch5{hCkIKg~S-pQ1;ZTfB|G6Ap+*8d+u>L|Nl+j^i5A0z~5+(
zI1Kdbzy9m_iBEi@ZThHB-VDI^0T@=`kHGojo%oWY>zvFVV&WEbFIBZ}N0xT#m}d*}
z%$OIBc3_J_725^ftYit{INM-SYPB$PTIW@&21Wude(sV+DzoPBils|SDM+~;I}
zdU50cSJkFHL
z@?%7&(yS9Lz;+<>^558kuN>)?V(aqjhi$vTbYz*<-vj*pO4T_@2G0bM;;Jn8?
z2L@SZh!1f?1zVx4vUC=6<+V#xx#TDiE!Y~g=XOY7GOt{g9an6Z9qJa!qcg(QiaU&f
zVc+bZ^w0Bj^Tt{kgoF|TCYLvqhxUo~a85{whlqmlg!RFKL@$6>LV==)4^)*CMJ=>8
zDTi5+y|R6D_WKWZZ~f)5TocPD(yrE`Iy
zQfYHs&;!Vpa(N$}AIZZV0xf_~4NME-?jdmftl+{1@aQB&(-_qW((cSb3Qie6SR)yC
zf8Hd(Bo7TK&s_|2kckGKza;q7UBauL*q<(rk;k)xf)MO}I00_n3(n)x0#`2(MJd=n
zk{~-rd80&6AMf%$+gyA~v8sxz#yub?=fLqaWZo$ioW>?m$TX2=ft54~kZ2+?q0Ta)
zEW2&%dv(JU2Jko@5t|!<@AE!@&qd*pF9frB_%kmE=RC?%mZh4i>PA?y<60tB+iWOr;
zIHH(^5)sNwm69$fDpR5oCCVvbu3!cR6J4Sll%NIV5`dpZqxSjrnBge^{0;Od%Mxjt
z;{ES`KmO@I{ip4q=Xg!{;{YxI{AXdN>3n$&Uvl(ZCHpquFF!0PQ^#VkAkPeW?r4V=
zIrGhuc2UrR9GkIHxo~Et$~tg}p;F>h&VouMnVet`L$9CzhVeh!xMaR&vG11SW~;3p
zb)Rnp{<;p{B@m3H;og{+7(hz9J}ClyYolBsE8)*%f4^)zT+KCkT`fZgm!)Xna%Qh1
z`NoT&sv9DjsG3p$6wQ5IDZr$_C=D}vqY;s%z;GD4P77NCN|s`Xc(dGb-@Wf};k;mH
z8yIF`5W8*=i1QVioWBP6k!?s@gC<$dAvXMAhVc7+JpX4ytua>zcqUXCl>%fi)?i~}G1HsviAO*i#$HFYnKj|Ge
zSRvwM{f47&M4`?ne0Tz+3306o#~u%WOFM$wbzgBe4rkrwriH}YyMY=6K0FMr;EQJi
z2z=%WQFvgskPyGKoVjFQylJ;Y8{Iq{4TSk~9W|FYqR0gcFThE_kc0;q<_C>ZND?41
zm04v84nttIHY&tgx$r+$MhtC$%~WA~D?GCx{Cio3ko!Cb^4wvu0E%4ToV07|x^F3N
zEMa>_SpxW@oyv#vyYBnK1tUA~SSW$>6c30qR8AC}bsyb3@}8{){O{$d6oJ##-J=q{INgw
z$Etg;eF^}7BR$eI#ZUdzPc0q4E!nreN4*!oy8!-d0Dt519KQ7M^LU&eV^YrP-d4%J
z$0g;&u^8sWnIX>|>{3k5VqCJE6vP1BkddMn=Gj7tBL^x|^j0lsRicvAPULoaL7si~
zJ>&m58LMX(q02W^i2C(rjyUAGFW9-&=j+>H&W%LO4)|+7&+-r7vm!;4=+d)A?{zdv
zJ3FtPB+>vt~A{+ZD>L1gt8&UIM1XZI?2m_g)FTP&-fW
zmG=(HdheAZl?R+BbU0&e1@S##jUWwdNTvyW{=tPmap(G5|0=h4RjRIv!I)kZ%X5m-
zo^gy#99%}7NHq4qs!oelUSBiEDXp;Es0OYDq`3^Ambx;qGGrwgaPUyDxeZ*n7XI!^
zK$%suPN(?3Js;7NX(y*h)tccvzIB^;?%BZjT)H55?M*I+{$nuHJ~w08vUxwj^bs+p
zHG>+BJSZ^CAwD9;so>mL@aP0MUNDM&5BqvbCV4MS7>y_l3~*;Z%>A9+4D+*>
zc7VfakjJ&^p?G`7S-8%E9nC%_DRAdu=tbV%2=|~H7l2Q{)#QiPyN!lf@7RqM+99Fc
zycUV#S18LSAfu{{phuko7Gz{EC>PaGZFM6TQ6PPlhgUIqs@X47sYW324U?}B!sb;K
zHBjH)>PQyEK@J5gA{GwLP&q5`UYt`Dr;+-S
zxfh62#)~P8%o6cFFD2E980M0?Os0v&94C@kBWkEb4V36oi1}RRokw@vhu<_oh
zB%lYYpL3l6^5_2CpOab=ehL781IWJhV*F43$v?q2fAcr9{&2nbZSeOk0KOLBhd?<3
zM!1MCI{Ffxlt-8>CUh@4T4PZhmbAyA-2-O^Ja<%qzfs9zk`tNYrfewZ9T#e$V6_^k
z0UdHxC}$F6x;!Xf-*`#C=h?5>_$MMri-~tc=<+=^uz4l)8SR#jN@D1;hwa(FNI#RF
zSwFNxpj-1+W9{Z)*fl9kYxen4Ti*E
z0Ay(Zfh+l29w<9mT&l}-iGnc-W$E$CYXtzo<%>F)Fif<7GIE~w0KXP6~nDxU3&(h;R!{#)nxU8w?&X9_8;vi6=3V-E#Qk9`($
zB8CHJ#A@rHofoH-w^Uw>cth*0DCbq`HLQm?p$r5n3|~s+0fbVELb3jaA8-Ef
z;r8S^nBNkZ%T#Iu5Q}c|Q0xv4Q7~+qDyqyqQibb4q17`;k$xsFQns3q+~&9}!KVN^
zA?~~(*w_Is-T-cWhSl6x&oS?eF|;ytxm&d{J<9C&a=mM-2J`sezc+kIQ%3%%H51#yjf+BZfwnBN|tC1+Ux<_kvSP#bZFo9!9nUN{uF7zX!Z{T`;h?=~Xn2Ruy`y)0~Nruvh;cFYqq>q(fDHfKEz!1qMYC
z;w1W9!a%R$ny&56O{L+B#iNROaR=`2m5==2(uTX@g$|MvuoPGYIw7osSnr*qC{Gyg
zXq^}D6f>_Jy)|AIE|*LvqBHMJu4Fbee&&zF94Kg`p;HaBX<%*{Xi_$^O?*s$5*U?2
zN62*%{GH|fUz)kepi5l3bO|rN{BpI%=%)bi*Zadc2V)F=;0JyH-}61+vph|g>|f0M
zeJ#L$Maq#tC0Fp}55IsckMZdEgzkB_bo;s!$8xv`%-_*2g*o$4!SbY_BuZ_{h*lhP
zE|iE?1Ek9OIYp@?aj7rz@{O}!n*Qm_Uo`j|F8A;S9IJf4wuvL^@%7CD)AanV&IB&m
z!5-j;mLx2ltiO)38>Jb`=~%DD5DDU4Fqffq@l8t;@QTYiCV$K!|uS$Hz_c;jY)`J8z1
z1-%^GscZA<8(}NU4{TMZEn_HHEtpk5xr!H>xKmdJN2Tw~hs_st-k7ZP7{_cut0rv?
z_+uA8%6j>+O%bh5<}YU>qtQkWz*yX-;zUG7%F&B~cV0w$C-jMUBfb#$gyNOVy=UeX
z5-%(TVgU@HQ9v}jBWOek5_^8@@XY_|XmjyiXWV)3?)cPPRz__@q-a>WZj6cm)Dhbv
zVN5`3iN154w5Ix66(ntmxD9~W2A9>`mMw|fuM3`e33zl5C}!30f8XAT=&$mVenM)6
zX^AjvVt|Jai1ApkxdoiRAefwRB?3s+DXc9m9BnqT2D`NbdO0#eq+0N3O58mLuI>oV
zjs$yE9%1hcAsR=t5FMbj3jVq{rCax=svN%89}(}kEN}p}$AJ;tJBj*=`2?)@s<*3k
z@RSal(Kqf8FW(41eEtloCKfbJES)1>yRTzLkljfcGBWE(0|Yypj+OI5PMPlwQx#EL
zOUE%6e=yZIQTOli`sOm5%|RU11y3DpZuX)5ul>aRPb%ek@$e)HBXl0H0&xz`fwV^8
z$i#W&ZRx}btTQy8PB~{vnJ-Fjl=hm5&*p`|B(lGC4BU3YQi(C$!KGU
zd&bGb!A&3qWLE<7_hz#ZY}SMT0RQga{ku|+izP|&6afBue$;U<`}_O&p6~e{l0-}T
z4Rkv3B>=tw;Lj3rDA36!e*2>@rgBHvpPo=&^svJ!>Sf|sWb+36sT%y{l&aI$xaX^aebm
zv*@jaIrq;QtuK=g5=A{rOQ}POD_Tf3;Hh@5d1-FWPH9Hj7B=?ku9Jl1>qmEyj{Y1h0Sr0dFnCI+HuED^G3Jo
zst$mb8u4|3LnIqh1$NUgbh`RzQE)yCxr>q>=B|RBovzu&eJQKu3Ox)U*O?M(d9~(g
zWR-&I#KU-KC_21FfrAdccH-b&8X7&&8H
zBiP#m(u}L~Z%@E>wq{CuGKA`{)X^|IBjEb3;9$yS!^O%Rao3q7E!`lBfm(|_x`i}>
zi7bFO9}&-=502<7RbO!&PqQ+6*)LzLGO-aZHo9tKc}P5eIsDSA=YdymR)(Xv@{e&Z
zt}IO^jB=LPVKnPa9NC1kG$Wa8@r!-OhEW9R^8Vk~dno;16P_{`+{#?-M0wR$o`!;O
z?jQN@#T*}FqA$Tq4#Gmj3QA=fdcxidtboJPOx_{p}XNwj0=|g
zf%(e^3v#Cdf2e2vYVbFrSGmenNe!b?Bq8QSt5nU@k)+l>`*p*g+PIYbp2dN$QIJ|L
zRyCOO{jn_w(NO^;)M@b|OUB99ps>CkedE9*1KX|q((sEYo~o%Clb+pVw7B`07>Q=8
zTxWp0UVN2lvak}PkR*Y2J+In)HuJ!B~6}greYiueia$V(MS=w*;;I4AlQ3MtN+v~
zaO-vA<#!8q&I*q936pk?c4rVxI_xf1m@u}gwpJH^L1Kt<0o=Po+;~oK?mTd`A7)sU
zlBGdG)<~S|*#52yn4PXTQs6A{nFqkcNA=@KhcN^G022#UT
z*0!{A^{}j+TYgzJn-kTN!P`OHj2J-n+{>0=F+NY1^0Ta0a){FdyVw3$Y|yK=4Tef`
zdCfoa-zQe~k;nyj*5I!MVU@swv`%1!V!iU#d9j+baN1F{^QLr#w;sibCyd81af4~<
zjW=?%d+d*V?$iBLXeb<0k~ER@^;C?~vN7J3U(m0>?o5Q1kar633kdBWYn;Cy{NM+r
zRt>e*PXXYsclNLD`2E<&J_fCI1O8(A_xk`$0lWfY0KD_~w{z2{cyRQHZr7na6S{rf
ziDQu!P`e7}jw&dhxTS$8a7vH|9>zhv)jjHnPscLU*6-%H%
z1?XC$)nUlpm;jiJ39Ma`0wxJj1vS8UqMtj6`N4{MB|M2Ge35H;ODgMqQYr$L{<
zD+|CY(uoo;g?N=JUmAGL!l$C0Ei-SC_$ie)E|;G@VNVKOiGq_YJ(6F${
z&fPPA{QlP6-v=s9t;G3zgt9Q|JVe}b#&T(5h~?o3*ij;YC=qb<(Tv*)OCEJ=bvlPz
zAgOu|r2~6>=S|?kRp96lXltBkMHitZ8+Q1e71^*|Ytp!S!?|Ws;BXJv*aXgB1kRop
z+`micjJ*qb3y^gko-uBSgTI#sn}*d)H87bGHy;5v&ItA$D<
zX9bgp`D_(cE*U^n@mA3>sTunS;I9Vm$B6>%Y@H=zxI$mHk2^ckbBi(Wxi54B-+O&B
zjD&InU@AW&NAg!GFi5Z?o(mF|LMvqHh1SDa0j#4~QXIWlqm-kA^Gsc7rp_(IIWImN
zYVT%=&x(Q2Wis8l>C1d3Mh!$Slwe31?hGZpor;2%v*R=PlzIh+OW*?%?odkO%59nbw~t?|*1eiZL}-}~5_`HScNz74=dfd5}m2Ef(H
zyZFK^!M*7|{jP<*Zdo3cbTfxi=a3!p;^aJS;Z!~@Skho1pZ>xievI
zXi+o~EYn#7G}}B`-Dq2VKB_&eC$UT{4Z^OEpGTPgYXNZr(*m7}igttqBPON`{<u@4=5{dc&I@Ldk$wK4Lt~tLPQLFnQHIFN>*5}-N0+3
zy&a9@C{HDmV;T5`Ofx{HXR+lMIDn&1y`$q+QjGVu4tM^{;hBRUNXkTniX|SvO98{n
zAPj`IVLiDz>lnM+8}kMuP##hWTLy*t=Trm8mLcj{%Lva2QaJU~fNJ=+K0ee6XI}Ta0p9X3b
zdl5^QaAts8kBGAyf*ZTQXYK=ow9^w2$4*7NI#~-cI$x_luO7Nesc=tx{UP!4WkI3?
z3;3xA?9IG9Edoi{la<+djYb72_@y+MLeB3BZap9dN#{8joo7AtnzS;w*s8MZ8b?H8
zx4101`ehyBN|j6d7sZlr%?|REA#bh{vhjb1HBAG4BL4#>@^_$c24Sv!PQnVrdcul$
z3(`_x11N+gjI#nuc(aUT*nrF?M?P81WuXV2qD3VTJx(OM
zlZly8&Tj7Do<5PA92XK=l;GL;J+lr3&!OI{FeE1*jwx)M-F?v4?`TS>o*Z5~B+^{ph1bTugXu#vM8L%TzYt(LZ)Pfe
zwBR#hsMdkMzD0(zhU}Ads8CkykbQIE5bptKuuq=%t5i3|T>7ClSn9Z#jt>yX>5o0C;
z?%WP?>_H8}RKKfuWuj|cRu8$_yBKzH%lD`hU<=^(8^GJ%37o$uxcvs92K@{ZiIo8C
z6(?@%HOC0LVO+yKNbs5a#OGWS+&cmmC81T6h{;ZWON2-ys+?sn=#0z<(&kN5H9C#?|>vwkTS52MQ6-AT}>R;>|^U=U?69sK@fU;_RZTh{%74Ly{I8;M
zuA&?l0sO(z(<;CUwDo|~3f4JVfwN9q=S7??t<%)jvGj=^xWZC~rEv?Sez7wb`-px#
zn~2Y}w`Yx{4=BoL$?gtdtdX6qUEDJ>`S|$ffB^(s)!g4-ZS7WC;7=)q*I$2K>NQcd
z9fD5*;ICKd_q)F9ySTTv*Oq?cxxfDiz%K#vNWfI%i;up5CyOJ@u%Lh0)6OmY%)`5q
z<%N>FvkS~}aIsaWa#ql4a9cK&w~h;4P}8UsMwQ4Fpi_S+Z;W5Ud!GHB8~=-40Iu{7
zfQ}6vE%4WgZK-2RyaXB8c^@i!L_%SB^nGEcSV9v}R3ZFRhq<>z2RSH7LP%($LyEkv
z669GkSE`XzyFg8(e_kjCX`Solu`FJ^b~qn)?4=DLuPg;c4$KQdQG^gw>!W~V)#Ozr
zN!-Rk6ghD2tig>d37nUX`J>sfJ0ae9tHgBbkfl|gTlHQBDKHvU<_}fZzyYNV$FL>c
zwK7=PN++&o6I-j3s*N5&3i3W=|799WmQn$*QZJg-ZodWonjL%F@F8n~USG=xdZb5b
z)xfM$B#g%>8Jz+ODw*Rmv^enzwkya~@!IeqdzoHm^e*>aO}zL4{mD4>z*Nr7j%25B
zk{oTwQ8p5r4kVG=*s_95A3)89EZwH4G&O_5VRvuiKfHf=@8@)pny@~m5Luw`uOrdd
zKs5%WXvOL*gREu!YR@XqkChv}4o0rs#EkwYot`{Ws@R!M+lUTxsE_uDv*&?(w<{Jd
zI)9|gw5_GW)(vBILlDFFm=u^E6Ax|+E?x!p9|FaqawM~zM<}&pKVs@;TY7(<-9CkWTn{sh<@
z3NCK}S9S!)b2hPe(gu?2{2(g^imr!80;oJZ0qz|D*Uts>$*Xr`HK5;E*ZPP(+eop_
z6O4ul8EN$F&Sv)7oTc+mY=dTDyRB)(5hfAbW9MCiP*AjZgA@Ekv2u%s7sVs@qz$(*
zu@qP#EP~D7LBy6K77!~={QsZ5?~b>mtj~YG?>jT6-+u4*LRqRJNEO8rH5z-Of~NnX
zQ4<52_DeCCya>*dmBVK~s#xiV6aPC{hG=*?#x-(`MfC{rxdBXWp4JXLrFw
zLGSG6e(v3K&z;kzJo9{?0ui%+Uf>%jHhxsK#?-7YdRBYJF3MHw_bOcP8C$7qK0Fz)
zFC}|DV!0Tgg-VMaEPL5s!aWaw6rUfxn^_s-&`SRDN3S
zxbGT1N@V$?$U+wkN`tQ^=asaX)Fuso%$$vcWkpz{ETb!#Bg0~uqPTZyT!3WjwGs!U`nj=0gs~=Ba{a)c30O=KS_Abz0H;dd;<0OXX{TJ&*@t18sIg
z$_)^53TzW0t;<~$fgtDW%7`+prQ0q8O7rrh8&0_Qc7IjYr(pGsZ$9JgcaJwj+!ELv4y
z!x&@#5~1P^NZlb*b}_&{2ii)^GlK{oAK1T0Xw?|gCWh!K*Kn#RMc5w&tF*_yz!UAb&U7~0O7uz_FY%4%S1^&{M#A-1)e
zt$s!TJ@8bk#jWuTe5?Ne7Mpi7c>rbvu$>uir}#WC6Wt#nmjZIrO*iq`XP=!jeXIk(
z$1(Hgc^+0)R`Al7zI1r>n{Mux0+FUDdIForc
zMjx{?GIk7?oF9D;2o>XjhZK}XZ1^Y~%mo1x6R~5`E&1s5lSF>&UUfSMXvf)`Gkhen
z1UQ<>oaV^_bwB$(CjhV)r6*&jcXj~&kZ%&<(Ieh6@HdnJnB&QYsSpO0+?E@M2>|f=
zd^Z3If=MD)ZQKl(s9P!7x>>Lc$V$&=(_UqV
zfm(lz572PGd
zung=zOgLi)W9u~I?he70Jw^e?mc{Z2F62!XJ`8q}wuwqE{>okh4_`UBBV%&r>w`F&
z{K{+s{XiZ5BMNanOPT>7z|?23A!6-;lqDE4&|qi)8YHy@3>#sr6-HVZ%R(D%Eqi48
zUe7{E+wO+8*6(t(R<+cWHZV=DwN@-w8Qn(9Hg1
z%OIQq;0FP^g$NNa-JPMcx@Tgcy+CTxAexCtEi1BJLt!3A{yba-
zhx~|!P1Zk7Hap^wqrnp*ZVK>3++rZTcr5Arse3mb8F?}r;W8+xHKRdAkTNvrk&G13
z4`aqJjh#sy!hsKX0l||5DJh9;p`nXbDrAKX6nf4vEC!W~om&FTOi8EKEq^=@JfPQS
zJg{5ASVG`a#&#r_QyZYs05;50=Kf6{L&yP0w$Uw88BGGc?UVUZ>NbNV;Qf!G*e
z!vs+AvkX9A0*99g{V*N@lXFQv7{MM5{PFO3DaX`|h>_4jDw=iy-jmW)qBz3b`ZQ_FK@eX
z3I56)ys2HhI^M#HB&(xNbxXv38<_p=R`_C}1?M&ok^n+5uYlkKqMm*_27*Oy_+2zP
zlrT{2?lA5LKDgc4c8A_08eHs{gp7=tXv#?hxbQdGHAX&bt?X+ko6-S^sUx}HiKQRY
z8-RsFltd$?ARym=TikxAus>4a8jVUoBocjGHv}p^p;iIbx`-Y5$worX_hEZIm2`~f
zY{;br<8IRl5{+#?A{b=RFbf@mFNP}=AIah03QcS+V*kv)mP&yU-=3=&x20WdsE$C6~NB`xPyon8Il?}yL%DVI*Zh+g)loc
z=|xSZYe)rs(1b^=l}P}G4uk*!002ouK~xI89)+YR>MP*~4GKaj`d&{kgKFfHA>}Je
zTK2tzo1g3b_0*}AH-w8OB~>0J_(LwnW$1o|R*ykjND=&5_dvy2JH-%1kZ9$cQL%N8
z5;Q!DN_!<;sxhr{vy?I#g}gnH%@0sAe#$+hdk`Wjn_9%0IVPO6-N#sq5Ju&bvA_e`
zJ;ph3a8W&e@waHU(SrE3<61mC8>B11Zo_sZY;%V7&f6R
zIgvdwLovu_)`}$uh^m5TtJZj^Gq|gfCvYm+x6V
z0|zI!7r~yNL)D&^M9+8`P33`M+339_yzYYVHj)u`N-BWCmWc!v
zye>mp*J4Y~K$bzd3ojZKwC;XrOdu~d69pb1JcohIMV(}hPAZN$%hGf
zJpi@i!wuqC!u53q@bRPjyYtRF2cuse4!op6-rqeS1i<-APo-L4VcE9Ho@goRM$oH<
zlvSjrh~_%e#8!!@p-A;23hGr+Hx&{3J<^6nm8!y$_LZ{Q3;lyzpX>kQ}
zzoJg5DD&Y_EC&srz+Dy#1%|7f1vJ)!@It<|(#HE((l~%~^N2`D7}55}j(9H?RF`4XK1nbU7&aM!Q~cjyhL4Kd
zz4JbBf{^m;phM75VWXu0hCq40Y&$oD9mQpn(;4yzR+37d3kv&<`?n)%yZc?j#;uIi
z1sWJXa`WO*)pV36HBrU_I?*EJ==v-Zv<6!B_<~A^a`q4fF0bq@#9)Mvyd0#+i#cdk
zP<&8s_Xu-iG4MUIN)9tuGWTW5k#4D6!fjm{KxZl*Pk_}9VZ&6+KrXJu5|rEgA4E!h#
zb|ye0CR;T?8qAs~IR;oZL@*>hW392CsIW188(7KxV1lJM%+rGSfvACCY64sD--)MI
z--myGb&tMqo&e?y0ib;c_HngREkCCD$2Tz~IzHZa9RNPYb$_YL_w>_Gr!Wj5gvbD3
zx=FtZz%Bq^il;%l7N100%@mHb7f5e06a^9ViXq)sq&H}q?9GuEGKGyus9r?yJ<+gr
zil{Fl)}l%^K`>t58tp~Fp>5Ce-#xy||B-0f@?a=d2L8%My0+K?G6MWrN9$LJZ9xJ2
zk=q-@!?jT;J7_yh106T`Bj<$UoV-vNW##m8sktLR&B(>5qz8W&{3S1i5`YwVgp;>>
zs8$I|mjj%@2bR|ud-kbVXDEkHhUr+@S|F%0Hq6q%jZ27)FNc<5Lx@DoQczLjS5~7S
zDaXcA-VhjPcpIQu1!l&x1`v;8_V37Aa&ju`^F1E$$0ehqGNzCUV^GTH7P|RtDR|-h
z$kJMmM9}8zydG|bK$Btsn4Ad6Bqsz5kO8bEAuYh{6FB5L2i_5Qs{tRHtntL+4t`4Q
z%lzQ^Yq<9!0{td{dl~k_-~&(e@Yy#B+`3cI6VzTjdH-E@!)o8d(s_sG{q8n3vGiom
zcm{C-l6(F$EXZSyW;fn9{z?IHOSg$ksis#&cW|BsZ
zYsxAXJ3yGeEl!bo%jlHoHj5q!!t}
z>O#@tA(Torgz0gr9}>201eR9`DslDa2z4s5k50=EWe#ZK!l<|q0aKi|xCf2g@uTeG
zp!{MZCfFnZgFF2$y~#7U)e>e|z!E6k$FnbXe~!VQ0OI}MvLV2*5Qc=ZRtFXoT0xc#
z#;jI{cq18psMi8*p5)E;eA&xhMk^~T@H{UweaK{Uz5u}Y0d#YG=h^laI@#>Nk;Qq^(-wMC
zL$7GET}9EPrly&qdXFd^i%5lv;1jhd4tiElBA|c-S+8%6mMS>3?Rk~=j_vY)C|b7Z
zgdlU?x(;0z+_~V7M}t2u0zDLND}upXJO$+(`;_}C#{wh!AL%IL*+K0=UbmF?$da3!
zDzcr=J(m$t&Lv0W0>M1npfymf5Ki9dA*jTx!YJ^!w8GfEPk{st!koDP{?ctlgVC&I
z>|eU`YXkK9$>!u%xlx*+RSfx}TvP^?kSZ=Ft5@?nm1=#TYZxIDFR?%2cjW1H?WTdGIsH*^Is9!ZXwJe?x-l-08d
z!)HY@&X>t|k=#bv|5*T55?BIOFsz{L@7(*!!q3I^NCpeaZcl(<_WM{%%IW%3tF^P9
zA-2*1?Op&JIFLA!>jY!+G!W&jx5IIRg>8-sqi}LJCY$}91f!ei;UrOfF~ud46zi@p
z%U2v2J(8H7tiw6)#-Kq(CTFod$?7W}VPS=Ecm>!#%W+mJ=fNDoc@9o>o9k9~4He|<
zd+t6MNMKlF1yY^qMGSjY;%O*pU5$JAc{}HML;;1sUC;Xk+
zuk&UZ()FqeSV>-df`m;07>JYa3FvZ9mcqFhaO40?iB3!)0cr792G}SEB-3?eK#_()
zp$j4hw{r##DG&Z~e_Qxnnn8H@Fkxzz^Lp5viHQmqg*-ehExnQ~Y%a;MNN_9yh@$jL
zIWeT!1PofrgGV>vz~;4G?afA<1Bm_
z31Wi>gEn3xL%fd}Q%qa|&?AOo;uz==#cduMnh8n}v;=7g(hL|t=vWU-1_2pJZAes&
zrO
zWXu1?vJLtl$Yvdjx&Ul
zUfw(~b{L()Jg6*1A<0W9vO7lyf5?MB%D@^8
zjmsz>GayPviy|*yp`tcX#Ne-02X<`_Ac*s=83pjSuwt=izZv8kW~`gTI3#BhO3WmI
zM`+fwuxX35|2KXg<8EXw)S)>q*18c2d0ibBrtB$0C>
z2{GaIc)nL*Z$lG}CBmlK1N^yj0PG={{Ti)S6VJHh832IGf9i64`Jp@b-#-3t{EC;p
z0{CwLPf)gA{SQ#r;nP5|J9|I^Ju!HHB6$N%sB4h7F9xPg!0zFO`#B{w5Aaoc(
zcfGb02vQz6CV-Puu<9^_8EYMHZ(abjJMmby*^HTP_jNIq11cIJCm;;VQF1`gF>(w7
zf{GO%oaye;eU%vHA*_)TYe_G$i
zu9Kf3Nw6UJA>Lc*;B`{dUP#PAAc93mgoqgtKoJNLtc{ouK_H^IdPf-%cmBq?e{8^H
zNW!qvmN+mv>aeF_l^nMr4)Z2j=7&2iRwqvI%tNQ})50(CC(gSI@4nn;%o((LO+4It
zn9n%%jBh#kTL*xTQRdI{Jgly+4on~ENI18=9>6$&uf|~T%$0MgrYl%nTPAygC1n)M
zih*JUHO@5Co`U6&R8^CTLJ?Fe6hxlr#aVw;r@)W;VaP1!cfGLwq2@OEifGv~6Vo8}
zHVtNWL0Qqg>jFHcA@Ik!9Ke*Fa{4n1Bi|e#O#5z_25jL_mKlbbAtoBu{ZYA=rwIP?
zNg583&P(H0(~2n6$E
zXevCu0|JSLSV7?di_1Wzo?IwV!PMlAk7-z{F-j?tyM+sSRCj#ojBB%z1m|)W2V9&x
zO6I(5F4a7{GgZQ5Ti^o(I=#K?I~
zV2*!^8v`N*Oic)!xY>^rg>CudDe!@XWs8Ro7zpXQ3@N8)BL_{TqfHB-RZ9T;kp7P$
zWFa`w1!YNiw41?}WB#a6)#Pj|6)%;lCPA_kXNXxneB3XN#;9NbI$D_RkOzTF&JBa}
zkV^@;qap_oWY0*j0Q??*#uED!<75M3OPsZVFvCI^OU7qo`!=8|cT~t@m5|rgs*IM0
z>H}lEqwx*?!cG7^0sLbO_I~u$KMDZwJP&@-!q3$^9tkCAvT-y7a^`*FE4tgoUDP8Cq^!)EPL2er+=Oa
z^gUqr!I=4P)Bt6;bS0DnW`(SvqCnfS19WKs(0mWre~{2@P|P?E<*xJK_0m9l$%CBL
zLhodns)WpYf4hJfr188bJ{Mm+a0^%c>LBLr+p(+zz{e2yOIf~4FTIqOmX?Nlei?+*
z0lW~PTZx!}MrVdD=$(kg&JyVfjc6<)y{6-^=ZPNGF-g@ZV2-Dt7#e
zs%QEp)G!OXUevt4u}Qo%T4hUM;WBzQ$MP}QW%h=Q9h_tSz(w$fp^CWS$e4`VVdNdB
z12;-JDO3*jsARlT2L4c@??dKL%vBUoHu5d9VD5ucA@+p{u*3)zV`f5P$0iTvDB!Q+
z14ouE_8g4IzHxYRHpj{il-UzY!C%@IP_HGO#*Y54+mG2e;brW9PL}
z8RLS^8uY*<_P9dWs24<$OkGD?`8Y_@U-YfJ;PfFKL_ecS?p
zIs=Lc>FC$Q>>tNfa3mNEmcHRg)!<=;8whZaJ=7c1mz0C9eYGWM~sUKE*12M7v}(AO~#6ka@vhCm_iX2kcR
z!33kWEgpcjoHM>;WSni&c@sxIsgj-T+^OtCVe|_}J6Li66ck@;~;
z*T@GH4$1EZ<8#hT8bZVdwxv~IY8)^M<U$W{uW
z?v_Es5)hhhueAC9_Q_K(6#x2S1IO$7Gesbmg{LjC17$02*V<+Pc
zuY5iJ{nr2FMz!&68T+mSz{lt!guvBTUyW<8y>=M0QwpcFEFHO;Qa1ISnV!S
zkNVKtG^rIux}zzog(RyD8egeW)aa9nBB2;mqlSRhA|yo~1ro~Yi1orrFBS0d?PxC|g=;^U#2aEV|!J$a|W?!{Pv!byG<_{$wj
ziaJ2YC7T`E++b18=K~I9{>86bE5gQU58F3NXoF*dzlRTM_%aTnM#_W|=VMerPHtP)
zeOmE=S|y8O8R-AQA!J^ldmjdos%$n@xW0FWPj21DyQhI@2Qgh8GkkBp{LOr<<3XzbHO64q&Qt7Pzw|**D1^pn3tYXqJt_;B@K*6TZJ>6GC36)&9nBb#1FepE5
zZ~@Io=DNgHS9JAeO6ROKDJNwpkaH;PH-uP%vAh}^y(U|+1fy)fDt&%5;`e3Y%E>5r
zWi|f0TGgrN%>8X<$)jB3Ns-nhXW!Z7RHm2F`+cNDs83KGZc;U
zN*LHFxtFO^vk$f=ZFTKbKIfq&zF_Vee)n5@xa}@5o)299!IL*p1HRldmnaSkW(Ff&NQ4&Ll)G_N5f=Y%%+
z?#z0JGsI}X6eva5I3uuSPC}VN^h6Q-EvDd4AWZ?bj=3dw<`QmSYr+6<%>Jd$$iYre
zKreDaUklnuLcWr%7@4JUH|%;%AzH05QYx6(*Lm;8yVU8E
zyYVcqPoK~U5KOcRDrpuOFm_oyi*Nv80fbQ=9NKi8TjJauVhbq&fg;l-4s?H#<8iUG
z4qId($pM|tI^C?t+_>9iJPWSp;>ASHFobLz%6V&W0$j>KAeB^=6*teanq}<)113@*jfnL%=PcyM?cM
z*HxT?+2d*ISO?c!OE0BYzVelM(}&BHzaDV~%pEZk_{7C?X-ZXbq`N|Tlc9(s
zn6`z96zM6ViS8tk2`Q>7QjsFRS|LwM(G#HnljoU$yWQyUj_+;!_2fyxtHWi(AQCw&
zbrcYn)BL&Ph$1-T5@5&~3zP$k11Sm(A_F}y)-we9Q)Mt+WJ22ul^Bzu
z-x!Cq_3MkxiiXn^6;-a>U93V(J-5?JcNn8(V$>g(0aTkTN
zLlmRakBz+DdoTzs=Dx9O2g{zHpqTkv=^#r2codm&qmZMM$~DL`4WpzPBsWSJ9(1Rs
zGal-pF8n|3SxluZA{~T~WkPK7Fu1R>f}gH*@rMjp2uy+yg3tpH0tm?>GC)McA&4U|
zD-wuAK*|QJK+q(hn2a`H!?4;KG9;`4Swlux74~hVQZX_ZvqrAimTL2|s`AR*MxI;T
z%op8%2ig~Yp8xh|nD@ROsQ-B#AGr1deBQ<9K`Z^}-uwThg_wCAg?*crwC3&l>#xU4
zUh)!3H;U4xkBei|2NSS$Z5KVccPjQT>?gg!BHA2LbSNUz)zq7as3|6?)efjP))P@L
zB>28)*&2nSFBFVdMU{H1>fpBLR{mh-iPc{UmrSxLWR71h==O$MI~)T?G5%#3{LxVV
zZ@%+4W5?X4kAkvopc%>74$8}~QwJ}GO&l}?@~BiF=z_muZ#$L5#h`%0@;@g=5RNrS
z%2;gM;9+i3B2ptsEd)L=zi6@lu!WzveR(Lcw$Km7W#dkUHo&Rd36%hY1`sKLo&xTD
znBaNC;BTP)rs3B%(s<(>;L~m4^lcVW#-nFX08#pwg_RAWGcY0m`Y0zMhQsa_N7sdu
zbO!Dmu;+|@os&B=fvg8i?Y3tM#T_dsAm%X9{%Nu>7HkN@GLeDlT9R|z?TagKeAWYjf4G0Py}x!Mj%?JVtBVi^7icRh*s7rw=@Y^R`CcVp?paSo
zZL&abqPn3yC*Rx~qt{!XCxvE64S-28LxNaP!7M<hfmv`FV3y?)8
z=<(lrA+9F?R?s+-AZIeHc~IR3Ljs9;gN=>N9EL%fIBxPFLsnE^V1zMjEIhKhXRX()
zSYl<#_L#zPyUHF<`unV>Bz9LPteD+|onN2jvya@s54~nT{_+W6TnKD9Fo*lP_j9Y(
zdTh$h)?wJUXG!B;R#sN<13&NsgyIe~sQK
z0LofypYt(0DbYU;@ONM&_{)cw<;-(Ap>!N46I74`e>MSt{V<+q(uk2M3VOezfxmpn
zV!}=c$Ej?y2pDS~1^62k3Pwjc4;R6ovk|yaW+mV+?*Em5h;Ww|@;(Su1z05?rD4mK
zi7b&}kZ&z|T$L^Ev*OuW#A|DHHk$%&?%%>EP2bE52=S$7gXQnUdY{+4;WaTrQ|eJM
z0R)0!BLU!NFTC=y1KmD|$OCej)}DwgDqiiUufNm_{^X}4)j9EIdWQWMzHr|>&+R#Z
zY5Y`vXmTU3$|koo?3lM~$y*5{PwIYcys4_Sv3ff?H2q-jS2o?HrY0Ybga)zg
zGPnnD$dV#>6hg##ehfqmqpX2qOUh~}R#pShETOGr9Wm?37(>1>6v2=oqkC<`ZEY>4
zY}f1Zrq&_bGfm#pnzqfAQ~2!9Yre4ZE`I-8_v0@Yz}ODF`8jXGK|aK-TI&%p{ol%E
zy$kr;H1GG#HJ-PO${pAe&727x5mJTlV
z`?^LB7c`cPeK8d8QV#yoD|k+hKs*9*3=V@X`$taK#}Kfi%*>JN_8r0e0r}!{7YK=L
zT_n;dmjd`p+_Y&`oMDDGjO`nI%uEV|YP1Yy0RHAJJU
zMwm*vc+=y&FM#?c3Ve&ByoqaZ=T0uZN7pS5z=
z;m>UT`odSv9ji$S$p6=`X9gfFNJ(~3-gH!yK&ay185zXK-8YY
z%G?YemVlKWdn-N61R=CpvrHA!^@6Hkzb@I>YCF2SK5zc1zG(j+q~FtZafYg(&VYy$
zkJu!mw|FmetGR|^SIA-F(=jfFT-n2)7s@+_3+Ak>5^Q*+$Rm28xscOYD4cNU5*mzO
znF<$y&utk`m6lQL5TlkLY0Y|42lFOVn7j++BQHj$L`%hk1vE~
z6NfnqADV~^GizuVA%wA3SV78qm73MC){`LzvT4^$i#>CgC;EL}GBsY_ILi}DC-8aq
z>__XV|HXg#>mlF$djNhJxb~gb^3T2X=LTfYx7+NoJ_3G>0YD*IaW=-tn8#
zM?QeJ0$4*F_Ur>^FFcdxdW3nsOy*=mVH83wYf>g6Jk&{hqgYw{_g&g83ZwvwRjATf8CgtGRLpY2R)bd{}yZB2H+1_H5iyM
zYLgs9zYMg0?&ufgkuL@2uPo|?oP#nI^X|&VzHStXTaQMWm@Xc+BfrN#LHngkFRJ7#pmQ
zhg#o`GWN}$Tdr!##zEMp?}$Ht%`pqP|1jb30uTfllROIil|C?|REUlO<2NMK7c|gJ
zVZb&~k@d@%B>*M>CimFy3p#wW^)UfP2qdE9Q``M_5=YR;(S_lQiCts3)L*=Kf
z4@FA@bM9(maF2BCIzkeVyMQR$R&t|c&b3`+Njoe02OedgRGQhBu
zp)fNo(K>K$wCnDmvAl$-eBXG4XQk48%*}l!2b&((!yWA)LZc5Xlu-cy!+=Oy5x<8r
z#Ahm9yi-K{6()>9q7G05PI`G6hT>_r0mmJ^ATqFQxC%p%hLy3fY{(Cwl?iWhhL?mcYadu|qUeg-=*unHIaaUs7h
zIU(5iN`K>Y!t$lc0ulFh9$ZYAIC^y8&!sIW*SMUFnE}jBWPz}r1dc2dqA)gxi~@h7
zM!_RTzEsZs4Uf{uDTJrE_N<&0w2&ZTEVmBZUuKC$l4@g!*)jgIfEE(lR;i(;?#0g4K7zF!h{PC)j`y9>Fo2PfP3iGs
zi0yLOv)nooz*TSq=Pn?{C^pi4-eruUYkB~NbR=#wN%4Npgn?b>|M9Sn&Tc#0YhHNc
ziqE}dUvs0O+(}50(JbpwFJlNZGZr%lh6ut+5-b@q!WSy5{2P@H{s|VVkeEykwtWB^
zM2Z-S3@av5@Sq^$_6`ZskZb_bq*#-Lfk(zDwnWwhfp3_E(b{lm*g{xKQIAPgxi35`
z#Sw0qE-PE*edC*X!r#GXe{C7FTW;d(U%e04-wDQxf!9C%b$H+B-_NyrZE&7{EQ7yw
z2Jl
zL#p|cG`?J+-gs>KU{8n!TBNBb6qx|4!GWn$=viA|P`lB#0izSYmebUcWBrPO&AAG<
zEDEM{EIcrMaCwXj@@!x!_$y7h=fdb0NA2{@4oY;?sFz&UUkd(&vr3U^bRd)0l7Lui
z^JY{}QYv`^TVVS}9}}%OgKN|hc);SS#hyb3zN0l{=ZHFBAzbZRE>(7@&K_(CQUIsz
zu4kqIGAw1*yW>Nd`dCldI^9zwsLxPW;C^T(q#
zMMI>)&Wkm1Umh
zo>{cpf`}iSZ!(`X#*=sK;3toNkQFcEcmI@_eq4h8N#mUJ&%tds-^P!|_%Uj+up}T@
zS%owHrgEU=k8KQORa;mud26g-5-V~MAG`Fc^x12_gtz^{AB!)4{mb!N`Og5J=c5rS
zTzE6+dA9)AH;Dy(0zEi!CXP%PbXsdvQ_E=d*GTju1Y}6o0flLyweKrsxFWe7SOtv`
zy$Radne=|B*YbWsSL7+eFoXeQyb&r05SV4@hC5)L9JY{$TP|GsmkI`{tW^WUI#QQx
zE3kw##58hpjG~gq#UP*W*jazWlZ^Z&Q}&0<>4hjGdk1*HijfoWUh2XqWAGj&8Cd?e
zuGwS+tvB4unBz9`2l(u@frw)!kGxb9>P7tdN{9bJM!3ZiY9O@YBO*rtTaYkdwqO{D
z*xW%{SY|c|V4)HJUI;_+&SE(Za5tohg-=!+YqcU97|SN;SrJq@>W^E9h{w%g*eI|E
z>NSqc2AsIB&KKD)@Rwh{2mkavU~B`7@^lRNw;Zhukr3$_aw%@!b$t6D=5%yFrqBV`85z@HoI
z!DZpj&hhh`0)L!oVMc*Jl*PFm5BN)ffpj!~)&j;P6p)T*3q&!iR<98z#t74sgbh;y
zb2EgQNy7Aa{JmZWw5E|qS>M-KTqW#1Xkx=hdIjustrcUh*loph!5?Q=;gSiOA
z&$PGk#NGpV!sJ)+Cr<%7y8!u$_%r+1_5XA1pEE#(VIw`^v9an)|Ng+oe|)++MhrVh
zJCf4Zi|rM0xc_kYE8lGqjiG}(y@Zj?U{MV~34xQek
z+2{aH-+w2z@As(HZ6MMcv0R_Q>R1(_1P369PMfQC%><%n`ecH>@@ooJFX&blT1(<{
z1ThiCCvD3~B2z|l57qGGc3eV%xf`Oi@)rkO!aU`q
z0|F&FLmrADaeKc9nRIC|HA=RxBJ-EK&oIkIIVRHi*?H~7YD3Dg-8{5TCLU_jD6(#8
zhdGy+-i8>}ve$@Xuzk+!8PaizB(9#w0xYaYBG&lvf7Mp`*Mm0RAuQ%uU=jizh(fT9
zAV>kE!B7y;04rFbAz6c=3D6{=NyD%tZNY{NEJ$i?trf7ASs24)wP9NkA&WY!l2dGZ
zzHK&_5cJx1iJClr!Umo)yZAW|P4lkvuEU4^c%DD}H2}{5UUlIs@t^nnCpV{?&?b&}
zdAxwXbq4TTw76l4qC_faiIcGblBE%mTO)z^z0$$dDv)$@24vduvz@SIL}a
zC<-IeONJt^M?C4%%*reobgA!0q_h@|N>c~}>U+Jwtoci=Nq_8w%l!MH#hC50Wpcou
zP14$P!OcAA=*@TgCd^*aCt2R_TVNAi1`v6Gn3a&1fWI8TI12c4KwW8MOBwh}iy(xf
zopGnuDJT{(gXVd$eytJ^Y89Yb1%iME4qZVRKrYIKtO1xug#4005HP;6htcW8jG1*p
zAgI`CL4`tek+;VU2ty_aiZy?mrh(1VoYVjL9&q1*7yx=Q%kDZJ!-ot0GVK)Q^g{%K
zF^p;eoU$#Bp%Eg^9lY-WIzI3>B8p-tlaLCmXzA$J&8XucLxRog0GS2I3SjyhW}9cJ
zZ-^@dL;zW^G7xoZxMM5uZQr!4C-?FMRqfY%b)G(T2KCR*@YA-umv8eUy!-dS{xdzO
zPyO$(e-3Xnh=qCPyLNu+NcYgw$ASrCU{Zyr6-?rx)x-MVFT2@)(x&qVZ|CiI-Ht2Y
zawT2&k?Z1nRsj6A1b!N5t{9wqFX);74Q$v~!@kZF=N>b0TYm&z14>$pWx)`If*m=PknIO2tlA*g$V
zl0SF<=Fw`3qdZ)>G-L389?lXyK3HJ@2rGyn0J03fj}HeO{zn<%ZcAuDU@V~*RQ#Rd
zE^Z6U0tPnD<%9=A5iBGuTUZbqK*XKh1Z#!0o+Y-DER(j9JZs2fVYSuW5VqE|CJMMF
z+Z+UI-0?kLtj=+rxAIB%_i!SAjlcZ;_u%~pG~;c+xt$B}mw$H^U-$(tFiIuPkWAp$IbukVY4u>|t5Hpc}3sgT7+7|?tv9y5ke3mCh$F_cMi2SeZ+
zyW^txk>HPq2SmB^%&~I*h5#UEbze!8$0%oM@?9IBJlV6KnSIbc-FVmrLI@@USj$El
zA+=>FD|w37^n%^mQoQ@{7@JdTJbBN_e5(BvPu1?nue_Fk6=r%`{M>K7^;UlJlb<{|
z7W|LPOW1glr2g=|@7eU4kN)ufQzth;vmR{azVOYS)&24nr~lv;fBKyFTpg;=ulSXL
zEopvn9>4QDze6{D=(D(W_wDhGPX+KZ0q{(XQx97@?JnSw+W>EV7xpc0q(j@c;&4@>
zJ8ht7l@P8X==7ryF-%Y_XLe09mlIk~cqFI=(<#*r6lTtLh@qgZ;>hXKVQ
zLY5d(W6|&8y?&3clZy93P|FfpvFjcRJW#OM_(A~&L>A1JJ+h<|29d3`L{`{j%uB`+
zd)9!h(D9keH^in!79KHaZA~{o6x6KGeQtOQ9M(OamlI5KGj=WpyyNcsvG}wv@xMOV
z;NaW9_0P@VPk!dN_@{pVjo%U2WE}v03r4>}2wZpFb$G=qUP0;DH`nw*AiOoX`u-dU
z72wQ;vuInm1&5XolG$k}YD7?rigZ^|G!xQ<-9VMD5WRYjR2UJezG&)-h`dOK%9y}Z
z7f*V5(7aOaj%Y@#*b0jmE!?_
zB$8TJx6X?*9p0dcLIA=80$;?8UInODX~5`Jf*33cr$NJ}Ko<^>b=N0iaKj9Q3h;kYfgN6?SrXKP2kFyM7U<~l9#;%AO6sX|5w<*qNE3a`H>Gl`!8?W
zd*e@UY;HE%Dj5$MgjF^ap$Xexdd*_1BCD`$$r{T=K>Cr7eFRtj@|AS+S8mR3{38Os
z-vdbD)Glb(?ZEjr0Tb;>EXpU~aB~~YS1MSpYJ}B@bhQf+t)XRl@YygM|pBIdl5WJ-&b9GGq$a0s6hhRE!EIndkiu=bIGQypeF8BlS&P8Hp9RRK`rHfJuzVG9P8*adh
zU;N^{>BCjU{s@5c0DKAr3CyjXN#}KT;PC1}(kEC%jgX>wl{9^X)bysPwc=B6tS=%J
zktGsMw8&Cl^o^FHTRD8f3xanxPw{?2FSBK0fuw#dr{^00Kpp~h!_6Nh_ep1_CH=p7
z)5oymmzhe6B(r0SK%!!@fDl<+3^KxLFs>a;Z3RKdn6ax=2$c#@s}rgfpi(1LeL(v0
zXjcfw$dLe7TO3uVZdJ-Au3qxD7IEd#S_fF|SWLEjG^&(o-bxlB0Bsmj#_X>rf%|vI
zq0CYo1^f|}U;K{%f5rlS0Gzg!krK@oK-B{dEd#q3$R+Pf
zvj&{JjnPj4;NlXncORkRJ15k_i8MWTFr}r^znwW64c|h*)S#s2OcnZPnIz&8yfd?dM6`uwM`BJhfv2jW2BHi%$3;@97=E
zU;H^S{Tjem#xF36BKCd%e|=1p#=_jU_*FdP-A~{hV;f-E+Eg&$iNHRvyiZ(l-Y@*%
zFF*B<-)GqPlB7y6RE;t4eSfgN`K5XM%fGxIzw>jyP4oRD**^N-062vaY*2X0B52pG
zz)80Q)ul1$sE!413muu@Ve
zbs(DXx3z2D_q8X3m-VaOGnlB(hTs`MYMV;R6vy~Zq;~mSE09C+Q}Qzv&vgYeNiP0n
z1XGyn#880&H2w*3CdLsE!bvt0SWVWg3M_=1ZZXj(ERFHU-k
z0633eIlg#e&n6=Xq0#n3{!q~7>tux6$v{{SQvm!p@&!6EI45dzidnzd=)n;2h?fW!
z91mgy5wpjZw6vBDi&$66AkT7WSU@vco|SFOeOY1XfCGPtYof=tM?4=?(Vm^*>E2d8
z<*pTM+WcAm_vg&xQx|~o3jqEZxcLL0=ks5FQSQ9H&H%12qZ#+)YQNLzU}9o|wAK(p
z6eC{qscU
zRHcTHtVNHMPi^nu_Gi_9b@FU^Wwgjl#FTdLG5|IxcjsCLC1c$b+>r&W<-zEaOu~kl
zIP%(CH_Au2F
z(026p5O~1S8iRyEtC5_r4RGHB3F|l@BC;bc6Ac}4j|KkH@$Wc1ODdT7DBOVy+9(_O=c>3kdtGA<;KZ$rei*Z@hYk@A9g6b~%UF_;HBkeXAaZ)Y
zlJ<@y7K5E$*OU#U;gPQk{$il0jR#MLbldC$>Rjt#BQq(2H87qfe#Pau>d&v@Zxvf$!JYu=AN}xi
z-t_4`pLqM$)+Vc2i4{T#49E
zN=4=`H!9{5dM?LC=dHG7Z1pI%uk7Nclu0W=V>F6v!_n5kg}=+C1`feD8X2oZd1ikI
znI2O+7+0ZKwh-`;w6hQcUdUezy8Ldx!=I2AM_8a`2@@a)SVVEl4lxt6;DlC4nZNjy
zV`Vb-jXynWljM6#M3yPx{7AE9pNTC~jjZk%mdxx0bq?9Euz~|Dvylc?w0LiSf~VTs
z_{r4(WBvc;FF*SpT(=Cy!@ybhpNnU%UWB*&?Qihh);Sn!A&4IH(Jt!%@G&y>U0zDEvzh2zuJR3SyQwekzUc%_j^PWHJV+S
zB<=NL(?_I4!)pm)L4B`VQH%b8tryf^z44jed!wZoZ7~zsl=(BsSad|lb8ftA7@Urb
z9Y!z(b8Paa4_nj{4o1N?t_A=g*e1-37*rpLfhj}4^K7EW6OfYN`+)QS-;YPNUO@1J
z*vKF~0YUMIlO3&L`uqk!uaJ*in8svgyTs5TC_4@+4fLZJ=ym&yun&Yfe{eo=v&2|S
zAdE(jE-PLP8uuMG*tH{Z$$G%@3b1E?2F7p{@K>x69RhzM14fYswoEZL6#}3o0e2rD
zD4l@g<7EEwCq0L5aK>%!Nl~i=0B+9!;KL6SmY0))_~ME5D2jG2j=D!wNTp*X7F5vq
z<;vsBfnz)-Ho8i(b)uSg1zVI~*zP?84Bg!w(%s!D-5m-DD5Z1^-Q5kMbhlDNqqL-SNY~Iqzw>{d{T_RN
zg|+VcT34OF(^uj#J$S!22kFy`Z-aLUxaTi@1q!P8R_WPO;Aa32@@MBQd@k4sRyCH1
zE2v3q6!}`gn#O#cW!+~zujsK_>$&+=tu?GP(N5727w~dK1uyNok6aHX>sNEueDJ^|
zFi0G#h%#b>$a~?6CKM58VYh8WnP;BqXaHPvv@K@ni>SCxYRI-@{83=06}|d~EhiV>
zrkh2AN>0H!aQ4*J{KMQYuqk6Y_tg3LZ--m*OMmggJ3@JVf=pUcDE=BsqaZk%6G30)
z#12J(=|OVRV%$yEdGnoxhiW+|&G+M5$FewO+8g#WhIstUWOT4#aKk9_q=2dG3BHf}
z7)~eR?GsS&J0qtCe$g&g)g8ycYzNE1wpi}~&CNpx#U=z@Lspw;Fn5VOGP>J!!QPo8J_r_dWS{D{{ny>~Ax8a1&xFZ9kPBgY$6cnHA%?U~E0Y9CHyV
zQvnyPZy@$3U))4t?v;hqdS2}4vq9DoA=`YLzWI_yDfNBqwvlkRO+o;h^%
z&kW?Vb&}@NB+RD-(nn%=mENffF(weP5of^M!Gp@<;ENTI!ia%(IiQ?M1qLhI2RC3b
z2D<29*lM8>HP#C$!n*+LJUv$F$R64Z9aUf1-Fg$_viOTvorg>LTY|
zd!$6*vfgAw`>n2+4>46@1wo-D5&4uemN_J|5zWCdC;F7(vpU6Gs!cKWA
z%Pi28XF#J-S&VoeS7EtCBa@C{mFC*bqIHZWv*ejAB!MZH2iGnXcS@(G0nN@8&6+*i
z27+sCW4lh589d_2Xm6kT2YpO~+JtmWiBBFav#?>9M?Jho@)xCPoe@QsJt(bpwSscX
zbj7;F^!-}y=FkwYOYZtG%lfR6UO?tz&$;X>EC6csf)05F)xkp8q5F%^qMdwPth+mZ
zwmPu^y>IQT0K0;&hlR|*CoXX7+y%RP-!_xL3=?Hy=C8s}Z**f0!UiUM2fYREEuUz9g@icOtSr$
zM@UayzzmLOq%An9yoTA>c%E4r-DUEt$44VsQ)BaSQlaR{I_m;_7WRO;51tQ?pTqN{
zq6iNZ(WB{=xMSBUZ3ea3kiQ%*EfWBK5gw$@mXbLD&om$#Gvrdb&^w3};`fkQ&FH^U
z&O3L{>uWO7|CRukj*udmK1Tf4TAFT8AukQW~RG4f5NlC3>fX
zCj;aqSA0CMr}5n9+0Op5rC{-X$ho}~P<}HL#B^;DN8oA|~
zpxn#t_bblrIja7(jnZ6?xS`%(t)dBp{5R
zyvx3zwC3QGYQ__d>v3PAywdlke1|i*qif5ufh8QM!c%i{h>MA#&in0FE`aVJC+UIe
zDT-vvdAi2fI+Sr3uq6vI{)mNSj7oMD1ZdVc@l!HZ;W4qrZEnp}jnx;VPD+PsV@VAg
zpuao<@|$_^*m_#v+MA#uC3I*Pw(yMo{GIQ|udx+t);m+SlbV;4k7t9bEHqnrUXt;5
zt|&V}09WLm*OROr8mY@WiN^OHfTte4&q45<$PDQvn@kS1Yn!OP__(gK&gBF{Uk29t
z@6`%Wf-PaQb=V?UWfSCEIER+|)fB1q+po_=HxBaTvwCv}$aBuOigV`#{vnQT2{i|g
zYdubjM_eri&E-URjHTEtL=h1R{$}^v
zcHjQ+q6hcd6cC(gx4qlK>5gpWcWQY9jv@(>A9HWPNqJR8mnMe%ZR4CI5yi}(4v)2GO
zepeRR5hLgK*qaEMO|Yb$#;QggVcX#tN}FRW
z!k9A0Z|iDK`ka(MttYA94M3pI4WcqIi3pb&st*Oe#f*GUDil_mAnGleX&!@KF1&=6
zpm|3X$596%_G(Wz_k5A64H(?aJ`51+r!v|1?Jp^NZzd4!*4KJMoeaVNB8O+lxm~I>
zk=!0J?l29E~u
z^kJP-A2d1!6wkv!$Du*a#!QNj*`#4DM2^Wy$HCuhKag47zoP;()Pe{zLu
z<5CpP0@;9tQ4}dNNG_=e`A)p~TL~^r91nU~)KDae95R7#(fp?pXrqigf3LQ=w?;N~
z(82jLu2oBW0_{mn$v#qjJ~)5bD~CM$FB!gfq;2G%0@mk45StX5(_k6)1<(Us7~)R?yDz
z87E(uSmOiY4$!(N;HUQo>6aJK`QQ6(y&$(c1{tN;n~P6`u;z7evJdo3t|ogoc0StGbC3?WNq8v5z26
zsq^k=cpBtsqg=<;*@hs4tAWJ+!5WZ?$u39q)z#1V*xTB8z%=Y|_(a}evcPxe-fXh-
zrE;b4;TJ}mWrw-3GdaH#^iA%5kDxjdM4kdc5a1yVo+#Zl+u$67&#`DIpM(C>n86W~
zYHIb=k=vG*SevZTJC=a)FJ3dCXMUdE0B}F=$VF!rYfXecS^b~6KS(#nf#@IKq}w?8
zVA0hO1>*VH&x?Qlb2nd4F8$V$nzI?iw25;sW50O7%M<*qEcqJZm`~mzry}5fgv@Ll
zWkA^w6Z2uv1Ct}9BW^)=d%Kl)R!MbYxwzU$dz>~E^nGVvfr9i^BdjPPCWpz+R@+8z
zgl~i;D1>wqO_q#5yM|r(&*#K0{TjZnC*%(^q0)5QcRL|)mjYWDLIb(T{U9l!b3rye
z{&UfJhQ32)LZJI+Xx7gh2BP+0m)ubb86=?hc@q1!!i8&8c5nZ9%-HAPbc)BH9K{PV
z&hd?&{(JdBP|MKkONa0I5(OCiuH?WMaDFAj#tELMfT*@{g&%uc1c0Xu!NiQmNb_{K
zKEgnf{l_2Sxi%uRoy6J|H8(KJ&z@&7L0`XpO17d8mwH}ZNp~j0^YC)I6L799=?HJ&
z+`}6lb)=j?)86_*L;~w`%a_ImP9thJsw!@0*-2AkoSW;rpmP%
zT)eK|ww$`{<06pBprWbbQ>(_`bE@Fo`TEJxC(mEYv10K|65W$#cl=uTQJDBWl%vB%
zC@+A3!HPB{n*&j`TB+umSgzxdGh~y@4mTG!5^LcBo^ja3hlKQL1n!NtHP*JD<%-?&
zleh*S?RzDjcie>5lGJ5b?9;OY0-wOq{Q+iVAX~rH{rg%(i0f>s6R7UT9=W;K-}m=5
z(zMmSop6J9gzFEu?IDMb$RxG-%5kSmNA2_#RI&Zvldr4j3=RpB?gcve)R&KS|2d|X4?Pk}F)%b+cuS5@Tg!=yT#-E@7Scb5sMaQm*`iI2L*9FDP(#Ve^>6qyj
z)0DeyNW8rK95os=zZjB|kTHSQf~Esm*z01JcSqvV?dN5uI5iTVooJtDrGMESyVzqP?D39
zlCk0y=oR@ys^Q<`pY;U*lWwS~t+jD+;mG{hk+?zlWC7SL2mVZnUL@_G+%{n+Nj+NwMVB7Gjh{fj8xdH8T6viu!{XL!HvtQi`X~jRpiMv&9?TC)-FK+Q~*P
zD2$S^!a67+>`HBfK_d)R+q#llZryqOWp7u%<{xN!X#NCN>f^JjHS(BzvlE@HgMmic
z(O6b8C=DF}XS&w=P6+A{8X}nu6)4O0A|6@X$7ZQA7TbZ5iUGxCmCI>hn3ptiFoKK~
zkir3s#V79WpoG?cquu8@{-+~Buw*m5eY8sKR-A{a
z)%(!i`%aR8>+)oK!hm*7k3RsyM0G|UR6bgjRAgl;$WK~#qIT-8ZqtlD%9QNR4;v)=
z)W$*9p7Yf%@AoE%y&m-ZrDg>T1wrp-L(Kq32#yGION;B?5;^_=)L}<~Fyu04{stFu
zz%s&IoW|#O>dsev%|iLD%4Xf-xP50NMVH%Qxi=^*JI(RnbK)HKV*7S^6#{3=bXvxKIqA2>572*=RYx7#n85*P$8vOD{8Ty-SyjkvPHD0Fr+
z&jEW+r=Z~m<6|Knk8hA<{zc^nPXrK#Pbi-dE6NLxMC_MjiXS^G2m@J&!RgPOBrnpq
zIy4whI!^_F>x`j26B%R_GEd0
zOX>_<(Te`N7r_AOi$ar4{vy-)&|`ilGXo8=5lWK%;g~g!yDbDxj}MBNt&y`vPOHN$
z>+RF3s#o-OsuwEpHJG1iVK=;dw+mMEj;E!E?#a}lW|9n?MD_er?pEn{@X_3}RJ?~|+q%z52
zV<^YmNm3hpumOr|e<7B*Wa{qkyN#RDfp(k@mn9KC
z{fMW@k4*ZUxtA-4yw>}EXA_7`iuKZDpX33}D)>Q=#f+>l%L9{#FPH`INq8C|zj(ZI
zgQX?Jpd@V8J1yQW(5UQRE1uKVKL#p9>@@8{)FO21wO8>|v(1;+6dDTn^hV%nI%X4r
zapJO%G+*8JP!J_E4hWJkp6FnI2c;FeCKl~RNnO+ZcWHkQP$$T#ePK7{7B|D^zEcE2sV3!Stg45V
zRpGBFMUOu=;0=i2r$x!j!3#c%4Fe5Ta*DU%-$aKp8>2wUsOc3XR1o8;693dgGA0be
zqJPHV$V2I_Rclv=1ZQv8ty!Vf!9b!d*PvLi8Q^{)JN?H|RW(eJ+fV0%-LTyrTakow
z-})~-hpPQT=<0^lswk!vj2Mt^;9+NnDAn`WyY6w9vV!N@=2h_GO9C0;iC1yRn@sI0SDH}s))zW*nB+UW@3@&nEeaa|JlOzV
z%9tfw@-p1Rf9XJq_7NZVIf;!vVn2P42bdK9E$;JwqacBdT^jo0iUdPcYO!G~H9Q{d
z{Z?eRHWlVhXUiYW7n6t&;_>EyX1ze(2nQ0%*p#@kC!Xk>blsSHEN?ye%iIrQGw*Y&
z%N4}c9he)e%7`C2p&6UWLjCs=m%qM*--hwpiC4uEd$;WUdLXZ_6Zp|Pv40_N=5sXK
zy=2mh6MR8PD;DwBzX}B_jHK%T)bVsVMniIem$@VG@aliD66E|=*14Jql^BUGVvagw
z-FKwOJjJE+IIYB$%31+o7}<*2_b^K`k=qMU@EGw0+};DnIK9e3vz+|7y03Lj&CSDc
z>7DQ0b}TKUL2C*=>BhEPgCi;Ao&{;QjKR$hph!emZA?w+hk(AI)$f*Y9n2~#aX*gyM7_?`H*NN
z4>bY*=3g+6m&k)+6A<&~A7N_mzxzLhr-JH3!{)&(6wQuOgCef`WYQ4Ooo!2ZhG9DHBd{&Cn
zWeKRfm~q4V9cxU4Yvl0~3c`Y;mt+SVyXl-na{k{RaAT(!9Gm3o$?*2S8Yfab%`gCi
zMWmon5-?{$#w?kGb99K$-?|;KxSBhZhec`kY8@Gu4Xg35$8fd-qeFI2S@R^8I8Z-~Q&Vc8i_m
zL}E6poNfNSm%Q^hF!u{O?=!RP8s+&_5nPWg`u>%Md#e%C8L;VHbTQfM3|p70=#-N)
zhQ!7$HYodb@2&J+XBx4PbRBbSJ~aLJ7u+ymed&gq3tW^5cgIA(!FkbT{d)zJpeg3Y
zbw?Gr=HN2*$8UX9o>oR}HPQKRP%o%$*r$OpUZaVtr=nw#g3W+l1vF@7=`ZF^53L+6
zZh!Xe!@_lR$BERNjoP(Qnj*W|Q)++T$gOBNMJ!h=nuN0oOWa9%d7?oIhS4AgPhJ@z
zR~RsQxm??D?jIe+)|bI^cy{8)Bx9tAiyiR2`X?9tZJm$XVIi&VcW%EoGZeciNnq+_
z9p(ZvP`6+nz%{*h&DaJZjAC&4CkOZCJ@|t^8`C1W;Vka?$cXi8qw6+@}
z$&$1KZ2{Qx17fl7=u=ILRQy476=`#|;g$aMUdAr-T|4rsSXYLyV!K_xIJh@Z5d4gJ
zUdz{w`mee0Gch%W%~aBfHTP0ON+A?l>d<}9g6(BUtMK$xJHNC_InsIdbR~UObtZ<<
z(NhBl9=ZiK3MKj)o0#&TmJAk
zBM-C1+SBJ6=h6RBuo3)k+VvD$am=PT$MSKBq+oM&ul&B3Vm!9|K#1er>cv={P<{5z
zepBe1m_V{V@}G$td=oS{HGQC4S4REcNsqB~<4KMu7%WFaeV8!&?B2nMYR=93Z~~!w
zTKFgx&UE=MWOu$bvx%d?iWX;xDEeF^q)J>2D?$k-Rwbrunv(hgP#)$5|Jx*?5{8Za
z7}JRkVm0jlz7iMhiI!G1*MBQ3A5RlWF70ScphA|t^G|*}VJu3iH$MRkvg
zu&dd`if}V-3J@$@aJP^YZ}9IqaE%y2&dgZnF4v1y!0hGacEew(AK~{6KjeQu;Pc-R
zIVd{?1ezita2((7utG$DD-skpgvLIU`(iFbz2YlTrjgO83qRo@D*RILoEeW6^%-JM4Bfs_f9fR>vH3((asrX8(c_SvEdm)oy_kw$Y4eN
z2V~zjrH}oPdLG{KrYgN}3x8qC#>-=4Pxd+EE1rU>Q02x+7R$@Kna`N_O)XgAyiJ&I`?ruF=%$g7A(tXf-n*0!^tt=
zp+em*q8}%5%1`66D6(WOf5T4jG?*ZKxsL^nC}JR%W-G>_@ac(~3V7hpw!>UFu~}wE#$V2?eza(8kA&R}=uPs?)Ha=E?s#=oWo
zXix}W&55Slx>bsaMJQ0qt=q&73?H@ans=Tta+7VC3b*|DhMpM3hrr9@fk`>=eY4&T
zpWFGre)wH^6L=5UL4h1BfbcX^3JOk72qe%&Wsd3j+c=~AT`p|7g%7$9H$hiCCjlEMwS93sIL-Q{w)&uN2OibFz1H0v$!BrSf%{nX
zZ{;BdM-=URNiBUYl||kxruhjIX0pWfdb3V>ob_m-ySpbAgz=VD|GB}0sR3R$A9BSSdS+os=YxYH82$&cx0)K!QRcpxt!CH2zr
z=Q+U|_@y5qsLAA_XMNE^mKWn7!HC&?@#&dl&F#EX3u#+w>;Hb+Rf^77^!@O=2GAtLf_&n^xB6R)A2_Nrfk;VU{m^VOD$
zikY@>P9}HzBgtht
z$%ZkS9mPqZu_MlWAD}4W3U1~-mXvSr!{tCRJ^7Qk-sNit^@pD!e0yfU=f|6DV2?Uv
zqvF#>i7<-Eq*Y0+E$P$6^c!xPn|@ztmVY$t4qh06pi!7lAv<-;6a4skoFULRyKjU3
ztUOKw5v!X|dUQ772ICa10iLlHt@S?{XWf$wvTokP6%*cI
zX*wi$@OJA*V;S7nr_(;rVD7?)c%~*=VF-LRk@y~rZYZw&=2||R0JAa?4pmh(BI04<
zX%^EQ)+02)ig?yWl8rz(jnlqHOC~ykJ(`tIGtFvMJsGwT@BbLEcjx9hU|2kLR!;E#
z(K6OfiZSqGZVht~_o~=Cqa(bME%p()mo55fO=_L;O4(Q27!W1U5e$6NL4R?~7FCe?
z=L?-neN`gPCL?hl%A;Ppq*KT*xPt%@34lGHFQ#=MRtQ4Jl`l!~rA1QUZ`^PQ!|W50
z3{8fOE3$Rd#qFk`whMr6#5NBoIyur#m_SpCNdwXGM4WZVQ8U=t#QVM2qjT>iP~qXp
zMc%=Ku0&>*j~HSyCxC%0LmV33;AOL23_~i(Mn#^Wi%hed~)Wvgl^=)Z<=gPnF
z$1Uy4i!T71_h}<~@hZ#cl?j86`mS_Chhq~*^5Sj%%9=^|HCz-Cp8T6(6G!URvlkh_
zR~KalPrm=>==Ztm4tGqZ{D^C7Y9Lo#U55-`o`Ps(+Ho)FcPV@G5rZ$(Cn!tIu_biFhp?}VqHjkbRwl)iYO7uONdc_D
z;GvOGnSTvic7PWFo&{Q$oH+J%r6z`$9P2wNM50UguwEDf0%|BnGFc2_2MIH9dgRYj
z%D~gbOpf%OG_gK;BPA=j#!*~k5*^gY`dO`yMk%B>v{~eyqBhd`BsQKZt#tNt^(u02
z>ELEcLSURbH)%uYF9HI@LDgjxr>G0$-tuDBn$Y2n`Yazq@LlbK_S$N=cT!Sw+uEqG
zVMrJ^g1k3z|Wv0KPXEHaC4vQsXI?Id&y^CEf@`{q}9MfFOcEo
zxG(ATPhrNR%<+xe@z?|0uAtW}bBwDq{=a!cz(n54#iJ6yo4}_KsI{G%aW#7E-GE=4
zB08TO8hU7appsIkBQT#=qJ|2e_UNufZ$5sFBv&L%v1ec_L$97+hO^V^(sbiONQ9SjVa0$I%Fz&~|Ndb@i
zO)ZmRYTPzgs7)gNwFW)13p|E@et_@j;SC`tJ280y%a7v_i&?Qh5Ho31VZ7w$C850_
z$6IybvtIfOFclk#6wzb|jNoSR2Yes5!p6LWVr&s6GYh)qdQ4R=UG`O)30st|?1+;-
z+WSdyjXf~12>2CqGXi)F@qbOPi+<4#kTG~nKp&oCbEdAZgD$6tc?+pfTP^qJ4fx}^
zg&zm!gO34^hp>o%ZE2}K8A_zr0=}0oIUWPUSBl_v^QYUzDeq3Gsvi<6>$enyZA9?dof`0s9^=UgIwPzM3
z?2sV59=~_nHz(o25e?xlOHv;0eph}mel7c+v;p-+8!mDJONZv|!PQRr7`|RTBstRL
zlds~I&=HlU7syhhPAH_oYYvSUS;rrTyk(IzLmBXb%s~kDW2%%<&mS5_SVN_a3E4u1
zv)pFD((NYgq{A)*-3)jcpGC!)aVCj8|0#DVYQx!g+x+YST=_g-4Pz9
z+$I@Qheb#{fe{24X|w70h>Tw#q$}(}(@vl!Ij1_)q%0o}^o9)#9wAYT^J6;AjZ3B%
zm`JhK``Zm#n?8~KRZq9uzYbwJy*o?2^l-v6i^XlkY?*hEFRKIsT4n3JfKd@dI&fDj
zxV(BXtYq>{
z`(-<-QuPj#O6-tLkqQNV+dMY_XrdhOtB$z(V-!qFih4b1npB`EI_bb!Vem`^e;)ZQ
z*CK1xXVy^sTr9z^Na&Kb)vYS}p{im@CEJhF)Q2x(E!J3hh4UZMO$M-&0WUvI4&ANYQmg#MuHwMDjCrtC+=J#d_h%!YfN&=KYI{qwFQV;YemUL6EM
zN05v`E;(tAlniG>S0Q1_9B|AM+Y19q@Zq*`~-7kUFD10wwMxp+lyzd=e9Amx;}LMd4&H40#aGLAX>R
z`Lo!!z2XH>*xjEdM&JZW*=?*9=JTiTp;c#Z`mln@Y-{`C2&mh?iVED;Y<-)+x$M*g
z@=R7dW#b@2yWr>_hoZn+Z-tYwizYDl>P?uH*cZS3EM4Mh;{s&)SGtD(=cwJ^(s29#
z9sB*32Cx+Xm_j_Tr?;1>GRfZv#y4EPn!AH%CPeVeWVZ2J)ql34vttC`0ugS-c`zGwVWkif+s_w
z)Z#(B2v4B@IG64R(TYQ3qnup!6mYZ}8HNvVvm813TW&20u|VA9<2zQnwM3MsAGy6S
zmc-5|&i$gY=)R)HNlnYqTXuL!pWd0J0|@34Ho?bA?=o}-3SAuJVdP4ZoP4(~un^{H
z%+m=>uiIo4V=j%&iHX1_wZqxj4U$HH5Xrx#h*d1SjlR2OM-^Js33dzBT7!$HmdV}D
zU+IW@RZv$N#SeQ8?J{{mA)A1aYm$c$m;AMgo(PUA
z2hO*!$klUmggIH_eqQVkBq;aW5D!$_y?G`g@P9`IHA3?KF4>LNOhO^mQGCPB7i~U@
ztq^k<_PdV;Cro;}VUIg1Bi7FPH-E6No^lEA;5`|9vZ0VJ8H_^v21`Q-Bs4jgxS>;i
z5sSi6%ZEK~rr)igw-+i+NdrS1I;GE`UBGK<_WZ)Y64j8L0GkNyHLm_8KgEAa&838r
zVEYi+C03d(b0-~-FRbpBHvg&K^-`P{6S9Whe!V{jJb9s+G!~&jOG^mK$^ICD%W)yj
zvUhPG#6(#gTXtj;_Mvy6V2J##9Z906A!cOxv9a|B4NVuROxV_I3=Y8O^w=^ED^CbQ
zdPPO>c!_EZSwyfcZVZePb?hEz$%
zgC+pv;kE)TyQQO)Ujc-DyHtH#uu>NZRYHEN1U8#vWVG*NRJ~zA8=9-<$78MtPfY&0
zPJj@8dtsqT0O4qo-)u+L*DX6#hrYmx^k91p)lH$k%r3R>J0ES{Rd{}~7`Wik7l;x$
zU*GJ}f9b)s1vptGl$u@b-QL;y4323YE3aefo?vRe7D5JzLy_Vw3f4J;bd7%UfgK*(
z`l+$qEsQRBK#l^rxZdjdKX!WW)7T*)Gz#M{bO?a1=Z~(hbvCcRjUmDX!Mj?Mck-xo
z-()E<1JC~;a`(au9Oi}p|4o!C%=&!&cs~^!Wc@H2()-RSW|g!Po0zh9Czsql@<>wFhM$p&^($B*&H0_;8+u0_JOg0cT-^0`V!80TsuZ&Z>eygt
zt=*rAU6{_oHLv#Fi1bSMb6DP8lmvwR_;vy$1!sZo((SPZ+k3ZIgCJSn&_6uz^1WAp
z9yH3Y_-|Z2j%5poAylC}R*0jA*%6?+)H5@c)P=D*bqBUAYTO5hu%s@xDWkn)|Cx%^
z#>wZh1ctN4*rr50if>L?aAry9qu-J$%4DwEl7&WHbnyLEt2Ev+97g^6&ztFdot7{k
z9d-W88GT&{#qSda%|6pYB91m6+{kU)NVe^K_Nae9P^kd5aH9{!4{fP=p(9_6>Y*AF
zm+SN7acNHGy$%@XH5+J4sOK*>2rp^YuZ%%Dz5cuBUuRq}5w?1(HId=rZ2xdp+*Pdw
zY?!P~4Gg}HD0-X-2brUQ|2Mm)307ae=xk^J$8q;$>n8KQdw|gaC;+Pna)A6U59U);
z2cBLDEiYa9w{I#0-?llwAy2BOY8*2R{9vnU+EP^#-(Ss#AE#?)cR4?OfPfy4V_NyT-!xV1QF17!OhA
znD5I6b>)ZV{#L2k9P?dKR4x-twEypzE~~oz)5W
ze&O1zoMbLET~Fc{UY|Vg06_GzyZ47^wymCTtS-!gZa5oDj05g$@)0m#KO-zr>FHYM
zJ?sJzr7osNg13&9KcW2J51cxucW%b}H)}aAZuuh)q(~z%j0E6AEMpZtGo&Akp?O#s
z&rks3YbJI|qlZ(O+OQ&8lb=k($_$SP4Lb?tQbNo8v`MVx1MyPB2@U9;EwySFSi-Q(
zxG>j=YX4@BHEYI?B{#QQKdAJqC`^rf$D&E3So%4`^;b0raJA(A1UGQU;xSZR#n>dJ
zL~k}{19~&9^$cz7LpHQC%==-#kO1yA-FjlwqMz1qiw*I#g#vqgjWe8fsFz)BTqu{|
z_cr4W?hU_GgP$5AD&TWz*JI9)a3V=I7&`^l6}X#8lZLIQG|o4}%OgDw8HeSJsojIi
zcz~*$8_Q-V^o)CC5-9dnwptB&PsA05TX&X}YA(%|6a&1>NmV(+X~ShCbFruXN+UE^
z3J$og>`&eM5y6I?4Y0GbgPvi!J+x8W&q{9gsP|neg9I?k_RB8xTw#@c?%SQW;mJ*4
zme)-qt%CLYoQ!PHJ1rk2eCTV>Wm}P2TlW|K(f@7Cj=-r@S^vG0#3Uqer(M1tBmiPR
z2mGDvh=|T2<#XE1Z)MRDHdRQXuc$>F;ZCOsVFoc9j<8+|e5h27P}A>X2F1Q14D2(E
z1%w=Us<`a_eswtS-TA0G#^?Ig4q|wIfmXzqpR#ho
za}(vF{^uD3>o*pQfg6jhcb$H&_z}}i4
zS6d>4$kje*=bT7mRU!RWH_AExu}B*O3MuM5dV1XC-q<@0zjuf}AyEhGq@EJ|z;nd`
zyy(L1P(M1ufzZDkhz-}z!Kz2ZJTAHqYURyjFKozDX_)y#CVMIzNB3O@V
zG-~f_L8|7S6M|`3QgQ%kluaIRDFV`*=^GVz~5
zjh|>~BKAwi4b>U3PuYeLYD6byo0egQ6`J+?U+Z2s8r`2j^p`NtVspx(`a|Q(8Us;0=kjb*&
z?ehzDzy4;QJY(FS->QE%eZm!>f;Csgwq;y0rmsnsCzD0g`wP0iq$b=?!!lr1r)=2P
zMsNy{{vPcUHoI(afBT77n3jlXX6=@fSkCy#$s2N(+GX=1@?uj;F>(D)$TF6|L^cb6|aZ4wb$&qf#kw!R)
zv(7T9P%bll`xHV+^U38UZtD52+<~TQg{8W-%@h#eW|YbZci$>{T-}Gp8g+#-V!%9c
zuB6edu^}X~pTX*xT>G>~TPKb=O^bXfNWWssVldM{1B(13lPV&)nxsie;WSl+XZ(g}
z1iV#Yb@)?AGou_6pN>yfKEH<|cN-?z$`c`-zN?oO_}iUs+O0eJQu}vgl$4cuplAi%
zD^u$CFAJs=w;C#g(iOh>B*w1Q`mFmD@rl?30{U36LV4}SDMVyR+gZv+=j#3tN%(~j
za;;{CuEVdVpOWX`dnWtxw-kp7RvM&|V$#h~oxY>tMZgOiZaTl7Fh{6chFTVn?MU??LsU;o#_qW%M%6F_KPgED{Vp-NUzg_
z0>H{sEyL3vTW_XoUGGJ)@nmtoy;y1mKg^D((=atVU~K0AsDV)V;y2b;zh$YX{oMoZ
zNl!n;y`z)$U^9EjPFfnk^slD+bS;#vfR<1$5`m4yK*XR!C$HG(^sWU7zwYEIaT5`@
zpWGSX^EPtQ&Bdzfcj40Ihg~lor<|U;?M2MsY{xr#?D0k$icBou-glXU1|LpM%(AH*
z3LJcpx@Zfsj>Bcj5wCwLkmA~?z=D3tlr*(fPFT+@ZC|J%o1|I6YEIvU!?n()umqlAKHBjlcp#lKD0}tIxFPeHpT-3Ud>R&~ciH+d+9F>iYF}k8LxhW#(1`
z*~>I$uwc@@>TfH_(}B=wQ}i2xn}kidExRAPE7s%|1}M$`b&R+i>s5ti+oVG2brpX_
zVzoxsKcx64VTF@~^L2QZpJ3K2Z*c5PSpha1Ag>>3&;#yAmoR#`<$VwmmFnzO_EYM{I5^wSM>UX5AEH|V};Tl!`_D`-&XC0A2_stA`{J=T2-
zSQ#!}3JsEhM%lwk5rfb8A~AxoYj(kzBM{a3tNO3kyXth`eWk^M3ohSUrKiaQLe7BC
zkI-3ub&ogLLiXa>>V{vxxEx`=-yN5k%<>F(4KJAEaold9nz)7x_&+%0AReD=a_fJZG5w9n|r->YNGyPp@U
z8$O3&WKR()SyE@ff8pSesB`lmM&%jg$arfnQs#kh`!!lwBta5eci+Sq>91w>e1A@E
zk*^8d29gK|jpzb1XwexjjUMBce!xbdH-7Wjipb_($mWlYHw*XcTY80ms8b%h1}YOa=5rbC
zAYpULK+R-ua)!9{+r5E8?#}zh<(o
z_}c!jv-EDDzMb|v19K=mB80}G^$^ZU+P6EsOFb_%wE5T!`4(2>Ph5#8rxIUYNmJZx_<@>
z;8|8Br%4Fvnx$V1)i#&yB0p9=Hvy<}Gc#3s8gQ?zRkpYukf;_P=IxiVwsm9s%FZVe
z0;ZTk0XTif8vxj&=Q&eEC#_L6&vJoDTG!e0EH8VXsF!YR`!1Wz!0;DF7TEJjJ@c4E
zA7s>DtXu?H`svq^7{g^JS1e57V|h@7W6F>BQM+oy7SxFP?fxW)spEs{Ubi8VZn&qQ
zTl{_So*@uYRTi4m5HytnOPDSD7_>wAUGQI@#ld-0n9|g@D%TEOsfABpLe4&0mku&3
z*?cw`F;nXJXSOW+RFczRb-Gcv#J#fs6%7jPjbmr7^PRkv#-0jTzcjf%qb<(29KfK1
zW_4aQ7&
zYw$-T4E=R1J=1qRv>$JdIZ3LUEUgb`NvyG%CMnaiz#h1sZe*9ckOJj_JG~x<2wCQ`F*4
z+10c|x?NZ6H9T_w^dO`;?HmS{o&8>66&mr!1ZyV`l{?@Mn0#7q0YrPyaz)PJp>JL#
zGR|Oiv;ZxBVor;=*u}AQJbVEeB=T0I@45=xd3>Whd+uv~PZfx{>YlwA87w0OfO84F
z^QPol>9RMv`Gx*E5yL1Q-TOoxB$h3XzUq^X^F?swvkqS-``E-x)qVR^tX@iwW2Y&y
zO+OQn;EGHo@0pQgq)7&e(lMK;M=xcoUm->d_2slX_`2kAxr*
zQ!;P|@UAK^-?(Yo1NSvM-nn>4&Xz7X(6D$_Ixv-{M(+5>U%uLUol?BA{3L1
z+-BeF2B$b(tVgQf7FDFG?pS7a<^4WIv^ltVIAU`$nk)lEsHa(EvT+nYWBEt*Fe`kt
zCIG4y$I+o3ubf)V(vpb&BlH_sIsCafK>Y=Oa%_2g^s_SZMX!acm!OEnq`sP|>dRPGYUUo0hAsN&A
zem57Joq;@0cDm2{(t=DBB#D0p4J|uX>I0w-DNou@574Io$=miR8;-v`4Dm;yaCv|a
zu#J#eDsW+mO*F=gXu{|uFOsQk;4&+GI
z!Dbb_jL!t)Q|KMu#cZhU;6`t9y4mpZdOE`bK@ubSo9L?ejHij=ZE7!6he+JS5#)Fb
zY95e6tuZ*c-O9qxEa(AxiwG(Y?{3&k^t_y@<_2pkSna2ignQn&UkI&9P68~kdpyuP
z@BN!==?vVs&4oO9<_(tZ0D55pdL%4j=Q8i9v&}5Dg}w|=tk0**@AK=cH@XEI(T0k4
zeG^~k7~m0<8|P~WraE8k^JZI?9m#v#h8Q@VwjQKY)6&j^Hg1FVvNz;%UV;gF-UOS@
zu*6631Yt|yehzF?4T!R7NRX+evRBF9f8J6v$$w5d1n#ph)1S`yNSs82)Y1-|E3OTv
z;)s*AoSzu!^+S?TJ_`q-kfHP6zjJ=;>d;1b2r$D0Uo&fn2JgzGPhh_QeslpQWxndT
z;TLh^i8HM@a1TENb~k9Dq80dX8fv?)0#ceo=h|LZ3Febc54W+1=i2E~w=L;OsV6>f
z+GfVA(@qYxD8&Djl)Wq1tL%4h4F}s&5QMxEy7}PHAu`{yn%wtYgFaCORtm@gM0}@$
z1M9>r#_3J6&`P*?N6^EdoSpicM4Um$6i#VN_M%IO2t=de6U!tWM{l0+%{Sxv*piOt
zIt>>I=b$&`0IQ^!1spJ1c_`nJMKtGWY1<{_-HPbc70(PvOeC1Mw+J6n#vENlwAfQ>
zSDn4;UFmPKTU}>`=BBUdkp5sjo17>=j1?L!m+^4nx@6t`^~g6cjVRj58PPK
zyCZpq`}qHg*G)=ZmnG@9ar=0`v5rUuElbTBHs)ZidR|NmNe65w{iW~P8BwcdQ8#sI
z2Ea8qNT{bSB+sKXi{^iJUS~0En`3P11T$b3qaT~Jf9?1IJT(=6cTC1iDqs6z*+^)q
zNSwiig>1~1(^gQG>gMM$TkZ=?rfkIh~@
zG)Bi!_j&c(JJ035*UNGWy{ez-eyy}n>-htR@#!e^8Dzf`4b3rOXUMJQs~s;NzO0{+
z%hV~~SYNxPj#2EXIdPydWG(D6>y3D!k
zks@NTpL8rM|6Y#nQg`>s^XCACS+j1(S4QR#Bnw&LgE`OBRC9J?Nz+qw#Epa;v7%et
zG`1??2z}9rBV5K;T31b^&fOYPvTx<N*__3s?%Yl&H;E?mjI9&}Y~a=S
z{wdwt0`jPsQAh2p7XJl2{i$^GBBx~P{|j)OA`rfyH@tXOt-+
zwHik6?5WXh_Ec%-YFD>i7XkGB#!GGOj>p`^d(Yl|1(j!)ikSZTS2-
zYg$O|f$!ychP}LqX7$+Nh0MDNtOow(;LUp=J@{^8q$?uC2O)}cirKkwZrM10HfDjm
zn86-w=?+DI>v*|s(Rq;IJKA0PG?mo9!x%Z(YY@0O34w#tS=RW0qT&jQ$$(5@{SB1ko!H&5?t?1xV
z$}`lDYBERQ1J(4akwj^<;(-bb1FwG(KR&p(v`#=hFKxEm6u2CY3{`Kq_gY*Ij#$a;
zj>iA(rSc~cxW
zzxYOg*Ptz$Y5Z3i1&!$B08fJ_X4sZMLb+YH<=G7&*U?;gq&4GA+>xKQc+>`(W_$5h
z^Jr)YijFM$fZpV;+
zDt3#9uaLC~H+abL4}}i>+5gqRYV`37vZ+)mR_5@Cg#|=T48^cS?>TXpJS$d6kVz)#{!jj~i4@V!!SK4iTyj7pyl$NMXX37YmZs;>oT{Ct
zP^g)OESplz?%B{NIsX_nh3E;I-`5PwjT?Y$d_{b7mK|QH(s$~rn&P|eWwge|w?wK(
zo{dI#79UnxN1c-rC9`X))7%v7*ap92TM{B)I5Z@7uvT#e#isFC3K|;4s-#8D5GLcQ
znJ?kLzS;9YfF0uk2t3H)x`c<86qHQg1`~0nfRM7Xh`~|}Cv@%J@LNsOQw`);8FW3T
zFIhYbJ~PW^&4|8Af6Lzt{es;08T||M5QE&9BbHtfODTQj1GFWt%eG#xR6s0(Y%YTi
zQQM3vu_UAQ&ZRD!IyR#QNl)%$t
z>7NS|)i3iYn{;en7!X9X?-v9hIn@P4KU%BY(ST@4j+ZF%XH}T~W~O=vF|^&b4bFUH
zywV-yy25Py@*EKe3WMt5K5%YoW-_=%?ImBv9SJ78fRYB+wO#y*m<3X|0;vk<#$pYr*_au0}_k`73
z3plI|qM{0%YJ_6*LGH$87fQmQwPAQ=D7!zyU8aS&M9j-qIkNn*v;EEZ8vzebT?9R1
zay8Yc;SC5ox*cXWz4~MdWr2c#^|(E^z_#3E9M~0F&0-tC&OlQrLoI$B)jmj<3CDa{
zKTf@ClpsK@btzNACGoAW`x!GAY4X)9Tv*w@Jeg>U;jQf-It-yK`oB;0>&jA36&}WS
zBqp3ubi6nQD?eSw7BHpj^-{w)n~C6
z-uN|HY6VUGR_DjQA{;;1ij8NI*Z8X}9?1}13HAZ46+KU@2=~WxN7yiSK0-fV^F=uB
zB`&&Y$nXGK#mmB)&r$M4ol7g8NLIK9xTN70ErTPtWis>hZRFt$R_2L?9yI~a5x=4H
zeQIl9rAJUwGDu7)IM_%l`JB9kVVkV3`=bP@dTjw&OYuHVL5
zpT$nF;gH&==8a#;eFkXG{}DV;Fv}||vV~IV>+=fc^z0aA9*$Si`X0!2u
zm>Ha9CC*-kIGetIew~5&9^Ct2;~?Hk)1B7?faMlh3WB!dAc&o9Kl-Nm>igT*oS{}>
zXBiLX2n)@)aK^=qBi`-lnF7jn@J;kfKoVCN3b!`E54Ly!DJ+HTT-QRRx?y2_$)-?o
z+(+VIV}NLp2V|d5D&bN2gN;>~w`S^PhodEPNQQ3u1OiD4%6T~YDm8=0#C%0O(@Jl}
z$|+M;Wf$00FnQB@aj}FSnl@a%pI0$?q+(;s7tz5A=L#_sdCy8H;5-O;sm5p|qM3vR
zA9FSg9vUPtJn`sA&7MBw;rL>|=wDqPF<7;|=)#-zLkPFd<#&Hyr`(@>1a9zmqHOaP
zG4RYQ82)Q6Gb-TyBX>AYWBJJbQ#U7E9y7ioKU*rQMP~2(GSiw2_aZ|e&9qT(h7@BK_RKm#PrOmgs$oDkKM=fSMEpT7xqa(x}81Kk3
zJtN!6ZsxkIDi{17KlOZKH5X;GSx6-`HqA^3*q1k66~+d8lJSbeh#L4!dh?`#k$Iej
zHOekgfK5Bdjos(Fy|h*b28%ps7Z$+$Cekn{u;yq(DrO=1%r8L`B}jj~gkk{bP4aU7
z@8HpTgCFwPp7$Vb9&|m&Y}^uvN;UxalJ;m8E9Fc$VYh*D`^uXen>x4?UD3LV9A5R?
zOK*7!4{M=+=CdUoyy|<_v1}OiEg452$ATp$B~%l$GA3N9cP3RS41%E+89ve_{Ou0p
zQ0G7LYH3p7(q}T(0voCD?d^Befgiu!mxs#mb=nX_mzr<}<
z^V`0?qDhs0Up!^}oWpdosN+Zl`?z*nqw%(?OGHnWD7)EiVe;3chWwJ45L1MI0rzpX
z{8N(Y?u^S>S_aG@J0#up0jAV1y@4hzGimGD+aUTHq*0h(a9UgGveL(@{wxU~28
z_)jOhpK!nG;IF+6{M$|RILdE~J~B|){MF%q=TLY`X^^wC^QPw0mFAJs#_GjhF`!%K
zm-6Ncux7Q5xRS<>`kF8??5n@=tSi-!u0Vie=9laEAF>K`Y+uhB*`!z9lBLjN)Q04%K(H=Nh<;kG2Vh0NMt%{D}mstx_mXEsCp)U4b=t=8H_a+V!8bQ|2CfkW3FjP{Y5~pqQEv{?d
z+?pfDuygRzspTP0Z$U^3s{%4QOf#t6yp=li93T2{b$r{X4_tAq#O$dx+k-4x+>IKN
z0{Zx?ko9a}G#P@;c;c6z21l7Pm`Ub$ULK?F00j>7gdah`5^_63+jP&5tchCDHgQsz
z1DxSDkuon|N2u&0^QC@w>lf&o(*J(U^S6G9#zlUVs#uxkSV`#xCo?rByh5|
z`Ly<6|9a!wHrVDHXF6+N%u1E9H4Wz&eUc2({xVt(=T~O~(zOg|{WqhaF9}1wu)r~S
zk5)Iy_EOyb_D|wbSE-X6=kvC^^snQ?q96XPwHdZ}y7hFILxvb!v0MW<6uN@>)ebZ|
zPh8xR+S|pMRc3et1G|W5^kQu^%$RkLpwakL_+)kd=G^AlhRr4FUz{Vv;E}l73H2Qqgx7wM3rQ;X0I$_
zXyYdFe;{S4SUH#x-Ha5#wZQ!K7x|A1UxSnUFrnLLYi4tAt7$oh4cv2mQOOS3aj`I^
zdiYjt()aulTxX;8T8mn&wb)@EIt1frI>MjXbSK+F{)nus2^@m^yJ1PBp5G1vElL4j@*>7OP_$Ed2Kr!PySa-vw(p}hcsCf7>wBif$ZJoKv9KIzI{OPozcKm*(FNsKl^{hIRL$hQRED)oN*KoGGK(i
z|L1g2?F}@e%Fdj@%E)SIw$}DUrzva<`{Cn`A*bTxTv6Qe(3$uaU)ZzqH!XUEnQQH!
zKCgPGeV5ehtKjI4gr0KSohJt&{-lVv+IWyZgWP$QH=J*&@UPy;Y}#PW
z)I8gR_wQUZ7p`TjWMzi$+ThpCf8Cpy%q(BSF>vmvDp$;n+ZU-YgxBe
zufEX_WpxZ&`+KRn>I%JjKpzi0kX-8Y$ItzQWZOgM>Ul87?9Bpn8_UY?VDbe5Ymn`g
zAF5qigP;kJxC3KA;P?$&t$CBf*+x$6J9!Q_F_g{ka0uj!InDc}>3@?D({&tk4HW6$
zd1Q8`3JNhG%*(^HqzukN)xyRpO{Wk?o}j?TTHB2VYgu#iT7tGp{qvt#`=%0>#kUbJ
z>Sqe|)68rVrb$P!Q^MIT?#xNE$V};%{HiZ-DnD3WW`I$YFQErS95GjASrnP%%P8PR
z7MqLec>oSJ|NP$kr6>yza%jD&#q6rZGl+dK^xW%ryV(e3Z~+goZ)nhplyA4NVkf3F
z@o=cbnNXbyp1V%-$CtC(s=$)_K?j9pWHZJLZV`4F;&UH&e)0$7icb
zL~LAM(wsYX5X}4!jX3!OWq3MgVB2)QEk7=6A@8{af?r3*AZA8p}B)F8nrHrCuAn?0Q}*LlzwlbaOAVHiy~Pf@@QK
z4wfIIp9!)Jb8or)?nA;7_W>5?LaE1=&Mb$78e=ajUa+L`<<}*@=9U|fvOHA3T0Ut#
zpIUhEc-;GaV13)Cm6*cOj*pIegPs03172z(-KtMRqy+v`j%j`5#azJeWaBcz`AhNl
z(?-y3)Y$`ZLd*5Tggy`*0Pn^JU(A(?8UUv!Z{!ejl;BMk;fGpzp`L$^s2>hIIo
zz|%|IUxQH^C!F3<^%5aQB}`AHJ{&R(*?P2!Ka
z0#B-$w|&O+jIOi{zP5B1|BIy`S(9g-MUB5AGG1aRWcpYO7{G?|v9p=hC$8_fW>s{L
z42zWSWymmMMy8GLbu5BmG#LbITFl((asmq^5pc5&KA}*P;rFHi@6q`fZ%dm
z5;xUi0E@^&em7D3~R6Vf71MoS!-{5`Fkd2b?@4GmZ_BgaxbXCVUM_b
zClL}KM;H6~#7&2vxQvZG{WwF~^WkMiMutNQ6dN5wu=(pYM3)>&RNfGs>EC$tAo;y46^e@(4@!?^<+Hh;!!DPpxpwtYB7du
z2+A_~__mGGmCa&iMI!P(wveTS5mUm7UM{4u^WkaeJ!Rj1Wo+&jc=OP#W#d(&b%j?8
z%Fo=(vQT7H=F
z#GXYo`4Q%}Ke9c;gF1W|QsP!c`=0Iy@kH?da1V=bESLvWk55gtqD01-Um{6KaDRe{
zHrkH@kpG-LUxaK>8v~Jt(GZx>5_U=p;s0?0His6j2k{Tcb_zy7q!L;>wr>Y9J?vMr
zl8zD$RhYn)fksye2Wkp3@UXNyi2K!+r=^7Z$Y_}#L@uC1Y;gxmQIxX?v~j>;$5f4v
z@pazn+Z;yFQ@Rk~%f*TkvvLOM(GyBrz0gfLR5jCwd1*WX!MW+w!Qva;M0DqAUuopSoJ=?rsMR@f4Og}#+xod
zmt%};za9$4AP2XGO2PF%J8bw-o2DNZpknItTfd$De-mi!W}Irv-UA!tg3ZXnBI4}9
z=2{cjhPSCvL}kgj+&k!tHAXXrLLrjGLd+VK`=}}y-0NmO{NXZznq8IYE1-|n;HA4h
z`j0XtlW5a#(YQo(g)9q03Z5LLxLX1**+mw{YK6zrI6}%$>-)mJKkb3+v}H1_*>At%
zX$W&dSakoY*iKeWJffE9$g+UiFw(h0EWx=7=p8L2_?PKrh&w#7z;R12Gh+Wwq%$uz
zHNQQ$@(}yWlqSig>6Blzk`zZX-Bf-B-P&0L|LC|6yN*gtQkbc~82sA;RtsjE031vr
z^mP?hh2~6P>|ZJc_S!YJP|#d6*qAw>?vxzI&Rpw-w0axA7LdVIsOv
zP#WzNM(g!v`6}t((GyMcpT1)ualCQw3K%At*+j!7HhlJ1YLr3D&0~xxAP#L4y-f1L
z#l?m2KhXLBZ3_;&k^}%5BWAs(x#s!$?muOWWQUwOrjyH)(G1P@EyapY&kA>cs3MdA
z$35?le0M}?5Vp-ls1~P6t!k;b9@QTGrLrqtDyt{bx@2nKWW7$u;{F$6D^Em;jN&!aeU$C``H7G+~-_=MLwJWuh3PKb=u}jxHg><(!FLSay0X
zhbD^!QLD6pb3x^gU}@c;VArYhCtaCrz~{dqxB6U=@4@rdP8PY5528Cg-)~0-Jw!CGNWB05ln(@;^-Mh>rpN%HjLISG
ztwBpzo75R6(b(D0&o3W-5LY_VdAAmuFEq)cIQ{M97j;Q4k0s$#FHr~^E)!;@UVJNf
ziwpn9j05MnOW*Z6t@jk&734R8&<}i$smD1zsN+%V&#RZ;&+99n{UuHy85M6-A3Xn8
zX%f7GGN#7x`C~l_=A741r~>ND^$5X2n1*>Kx$)(o
zcpr7XfNrJBV@e-#wuOs>W5sepxO$hEE7P#xU+^I{7lvUYv_;uzzicg>CQQI*1Ckrz
z6nw?!d%TsM;&uAwT!LyZsVgDR5baYTayu6h)?5?C^Yxr=L~&0a#VGg$yLY$|*g&hm
z9k0zb=^)+PZ@&+XosA{e44u$}RxX|+#{3&5juT-?(QWoq*t?sX{N|;>txqP0m!-Md
zoxe@s0g*C{4uH)FzNfvoXL8)JSNz#$+?(GUTf6?v&x#Ts2r6@}wfuLrx~)aBsDwgM
zYZu3#RS~xE4dWV<_>KraBbe%+ff1b8;`6+)osba%mISF+Pw<~xv6{>hAFD)U3RoF=
zFOHZ%)lH%5vo>Kk*34`aytrWFJ3LnXr^P?rUK%;WRv~j#Vm=4xdyMr%Th_Xe^cR}EY_OE1<~<+9E=()!DLtw378&|dqKg10JNR8
z4VJS+^Rt79k~XKpW&_8XHaKpAp9f!WeZ`C|nLojRd+5tK)P3L;2^j;8)%F|hQ>tao
zb#i8j;mwKhYr6hFzP5*?si_XB`{X
zfr}p!Hu#@D!fy-TLhO5p^HFagze<|yeeZMn)*T1PCx2g3R4a`FxcxkbAoOmwYUoz~
zN32ZUsgMF-eU#mwXz%`(LCR0YiUH7MUN9}KxdPoF6&A@=Oo{n?Q@xE~(kIqTwra&0
zP5UNWw&Q7ZDxnXXRMHPPDIvw!#RH8Yv2Cks<7#%3_+Vz^RzSf}6um|?T}vlS+rY1A
z@ghYKp<;9Dc9FE5J!OVkFM0pT4pH_ZQ97GJm^CCuB_fvN)wr{{))G9HG&;kWEEb3Qr1-Uj_1UyibVh&f~ciD#|8-bmn)C>40%+aEd3(DmIWKTF-J
zCqa&pMP-4hLoLw$G>U;4I#0c7lhUAwyXfz-SE441=@D$MCOr@U8ou#6uJ
za6Z81Z?$ESPyfk?7L8nYS2{KxPp{&>3D~TpJz>BMbcFe(P_eAPS-A<*I0C*7y;zJz
z>4}f8mP~J{2|pfwkb_IhlL_jOy!{2}R!yJ&QVWn*(Uy}fW3IQO;3c%kp%$khAx_D*
zXw!-qRjjLS0#DUrzCT1aoC6tbPW=w4P-D=~ll~|-gFP0h3(6r&5wcZ~ADqdyd~Q0f
z@vzu6p;TD>weim910eg2%V$J#m=7Xa|GIbAZ>A6X
zy;tL8bT$AoN+JKnZ+XP1G^v4%V6Z)`;$F0X@covM@|QtEA%?*L_v{c!YUJo;&~RA`P@22$6^4MF*D`tu$N>Z-AQ?yh(M^yyIN9mL(`M&t9GAw7P(
zQ#0|#r!Jq)y^jF?k0#{*sr&)XaP&lD3B-UVLP7k3hq8hm-;yG}W9G-<;Eyr>RU<3G
zJQ<(YR}Ce^*0RD53;I8>jUL&P~N>{%^A7mS17cxen1)a60
z@>2VyJb3fEeXdutz9p)Ry93;pE5Fy
zr~A0~9;U>$T>S4
z{Olmmm!9(2w^q{mc6it91w3h^ggFhT4ztJfx$_O~*@+wEq3vX4UcR=;o(KT`cVU4%
zneE4+my#d{Kmv~Po)+{luS{|O_m^`UcJDo$`ao$GEFeK7cd3;SU~n3sGvOY`K&+d;$#mo^gN^6;l1U?9B{$61
zxOP`Pyr2pp|NU{~eSzb9TRg)wN{th|pzg?i$ohSdzN>Dxfv&vB<-ZD9d$?uj>di4t!;5T?(P9r2(LB95~WE
zmPD|3{&jWfSy}ydpa)~W-_hoO?h#VSM4Wn9fZX~sZ0Y9q4e{<=Zp^Iv71#(9!$U$p
zS8MT)h8cgf|214IEmUIi#S&C?CBj!En1pc{lOH%4cWdPr6lEI`RuXP3psa^B2~Ri9
zD>!8qX1zunEzy&aYn#@62@bEeDr5+OScM8;ZZ-0%$aaTAAgcsdYL$t&9oNnAzk
zy^dxY=1zXm@iiG(0YokWAip+=@cxAj{^bEU$IPs`jA0d2H}smif2Q`(^;l`8=#az;
z_zaH17^N6mXve*QzZn{uc6asISFCR#xX|b8UcQx#s3?U8Z`L{=X14}uJKw+RsyR-r
zK9?k)&0PooI}SlNnWQz%Iaw3hP-{8P>_4`9Hi}r%^+hnPvp6YPAue>uU6JIGx0DL7
zD}W#x0YQuNQfS9nw`oo1#i+>o$xDcq_QwH?F3aH3v!`CCcW&8l|J^Dw!zNAFVR;Q3
z52>dsjz?MVi83wZtOx=(hR+_?&t9sK!n^Y-Ae>1h-srxZJ(`K6IJ{yH%HFSH_bf3a
z+=ikV{8_i0JHw`NlU(KKsJ-8yR}6gmH%PF^G{~v(AtHBXT2+=qtuk4gc+vN=_;Eux
zN+!lWzFRE8HLQ^B`ijVO1Xxoh)gBau24Jb{lhYc}duM9Z6Bx-O1%JVzGc+XLRO1!(
zyn36KKr*GT;9{n|JrF!e6oQh2_v@`)emU+O#r4cj`jR!6&4RUPl+;ANqQ4i5p>%N}
zY3WCY^0%T_c)qJ9K?Y-EK*ZC1e^JO383CwS-WI)AdF$EP=(6{aIfs8(k)6zt82z29
z_3W(<*}p*Mo-WuTt*S-x#wXU|zV@+dCSR@l~Vm#U4lX
z?w{QLF>KMi{rpYkjMu+epf{d84r5jgAA%)A!1E{weSE82-ji9>!74Y+C&
zqcA{S#pYWD0Dm)b-TY^>GM`?($Fn4ie+`th%*q*D9^$l-MIq00CibkBtz)O|Jw+WM
z%qq$oN(&e0Kuc%umO!aF#)U}tNEJ-tl=1+IZ+LP&R(Ldec%$f&pfC|l
z;3!+NDue=ydeKX#4quWHM~6kJAU%bwJmSM{VB*HUmV7fFY<^R)>a5ajQRPn(5-!e$cRj_kI}deLo&IvCgt
z-*Vr6)howy6ao|pEgH>HoZZGR03dtfBUkvJ5p-;P9=q#-GsG+N1Tn8sOAL@RhH>-k
z#Z7E%&uGo1A?IZ#?E(irkJ0!3V+TAl4`p#`&jO8X_goQoOd*<3s?d$+7|=5&<5{Y4
z0$9M)&h74~l3CQS46k}HHW(a7Sm*WU4E@oNvKdQERTlf6#Ml3i&`5d!je$vj4*+`!$
zeInd;ZCWvWr0TD_B(^rLm!*SZxKwRv46|x~Q8YuL!@u%pz2kx!QIXiyU+KsD-fq=q
zC<8*mB1zdM35)MQ95ga<#oE|p
zh>4rUA7cUoiHsOZgucqgKl-kQR`)Q_Qz1Bt4tMnUFh`kzfuN2!kwfcg6R
z5etz9JP77)9U5c;mmYJ`<~!#Otz}%wr7#Crr)v(Ec2u=OWkeyKWv-@Zdk-eE4)=QB
zlod?!DOKUyVo$|I+M1Qsb4iVWz^APg^e+;B?kCp3qMdc6qH8UNSZs=I7lo~(qtn}l
z7U~2He0^ygzi4(j=WW)Q~Vui9O4aZM#kMTnR18s
zZ{9H2DX}?to3bijf_L7Hzbl<8PYLcvMye!F6TKlA+>fLw!nl$_CFNO0C^qSgQ-CB>
zDj`z`kc(
z;US?6C7d}I>1c&=-b;GMG#+-W?Z%~D&N&Z>LMb0BHZ!=>!~|ptF@pmfk#D@MB(Jc`~xdT>*@$(&8
zWNq*sbJr7?-Y~pyP@+X8p&`Qiw~3GCgjrp@YCwhclxCD%0PZPC&!46(sa4=c|-bcng(%9AB-sZQpQ*!PclwOCr|9S_|blZYTE
zxqPf(JG#Jw4&?FuhG0E?*kzY-;5IA(jMZ~ymm9o`v2yueu}ogT%;27V4sX{wv$dg7N-n0x?)v#X|!8hv-1oW_+{?urmrB&jTE@o2h0s6uI0
zSE9V0hy*q%rzr(6Ua?^hR)&)$PmF0o7NT^#aiSRvN-kW+=(%U#BMy@blke7iltFbG
zp-Y=Iu#vPmfmLd%Sp`g?yrs|*#QZ5qQov!Pw1i%}NuhJB95hZ_%d*saqq
za&Oso4sNxIp}APt{@?pIqYU``-5@x6g#n)pTrK&6xlW1qr`0u@SM-bZmLD5yoi+m0
zfq_Cd6G5^!E>FTpTRix~f)?yU$dhmw#*4K_K+dpkwv5#^V
za-@Y#g2(wkgg?H8A8cdmQ4vklw+C%CN_ZS1d?)a}a*BFWEX)^w#4s~KqaK62(@{Q%
zdkNrc&NKkyDU5~y@jo8NSkCSqu$MkE)+>rCA6NRqI0pv}9khJcRzhkwCELjEvmlRtD%2)NAf0{Fp?Gd=d1-+Hdjpt}&`sQgb|Q3hH&e)hRUHnzwMoJvqhFrRg#}Xu8hzfTaXe
z$_mZ`G(rQ~2c
z{+B0P(vg5pubxIhgYOkl^b;cdDYNb}3EWx(CB#X{v|bBv;4Mb3Dj8iUqYIgjgiI^8
z=T8}^+SN~)R?Vw>nbxdadfR>64wSk4N{$gn7pD6znUXuYm&Oz@>boK;&&p{H!=_!N
zW5mhYnz{}7z&t%~i_hs0AReV_l!XD&z%zXP^G8!g=H<7YCp%{SH!1thiiXD+X7HrM
zV*^0?pU+LXgSKNsA+CMc&dcH6rftP5@ro_grT%)0jpZj?lO8)IUNKv>$(Iti$P4a`
zP&u}~ylK{Mose|R_nt>H#cB~~LH`itlN6BXQ?RoHefMLR;1OLfgJeeAK^o&>1a2n@
zKXK<~7+;Uw(_SMB-05hgRMP(iAh-RArPY~+o7NryA5qQ?
z#=Tg4O$(#zjVF|b_*tf}RAAV2ie@(INI%#%x;cy3?epd*hkW156W>fAx@}CQ*Lg=$
zfYw9;$8%V@rG-((V%+AaZ$3~z=df(kUJVgI%!SpWg$@+F)DQWg`VW`xhn-W%z{z$)
zM)NAQjIw~&E^lC6$sh6jbmK1JW)J<6%uMD-6ILE@{(&9$gPdrv+s?SfNRx5qmYYrs
zU&Gh9^TXFUN1w@cfL}>5Rqqs`4}GSo-Iu#typ!f)|6ISf9w6;nH@^ijBu~@#R(9vL
z?RC8EWFx+*oiRm)#yaiNEp*AhZ-!R8)sCjhq5;lr06rZ-^QuPDKFvhi{oY+?GodSbOb8n0Oh4R+z}Q2}7h_*OytyN2{W
zK~`jJiV3f_|HA22%0#q#4If>4k=Oy(D`j1{$%ny5nDCt8WNmijjWKXzj2Y
zfD!l^UNueTw2w_kbEL5(l8oJHxhu37^(6=`>{n&4w6R9Ngm+dR=G;=p+XroIhC*)e
zsjt85OB=7hNtbf`k=+lq6G~L;-FD5-UHy@`{!nFh!$^3g{8wbN<_z7s?sbvF%c^LvhujVlqKyFBgWH%VS{yiFsMzC`w>-6vCZ
z9fV2Tkdbde6{K^3A)8SMk{->x?LP3h-uXirG~y8OJUo;K@~Jyt(N23d3EE+iYE4EFymuzNs%DPsj5n(z%$wpdH1Nf;KS67S$z!3
zE)hVwrgd$@J(DJPmFQbla6}fi{D=dz+htqk4KL=qPD~_`xY<4=gUu$e7rN8W6~ebG
z1F(P!e7Fl`FhV7IlNp?U2^&=d>8&oNf9*0kc375qO-?5x*HNOOSiL7kF<=Qry1ei#
z|L`4ZX|LL1m;HJ~d?n4`h#ph#KF(qDQpES7ZEvEDn(J~u&19^KgDj&l<#BQbz4+dU<*0aaiuNVy^9aC291Z+i5eDIJ(5T#zSyf
z3hIR{9kS0L0<(5HasY&dn*Mq`Hw@QNi5~;I<#Y5QfDT}`d$EM@T^uz5uInPK{?{>H
z4`-{U#{+^w@6>?<#mtDovpB3uQv-9)gk$cqf*)Ee&FLbF9$#97hRTUl=`!&&4CV_g
z6_||SgXHpM!E)9v$rv=$xR{wq*%@2s!gc&r51BF&FqPT!StM6YPOEb=E1sC5C&*;<
zj({fFSr?PgNfuq6$=T$|QHC;WIv@ROHuU?6_)1&<`Oj3cXo1`Mh$fh*cM0}&Kb@t|Xsx!*7%pIB
z$wr_w
z`jGTR$HjNR)v>MUIwHg}&G9Qhp-FANXfnp|j?ic|##L7|}5AQf0s$OVmw;fS(o
zejH625WId*d#0cPIL{0H_|r7W8AO9CePSTN6&2`Zl+?b;mbHtnD3^=uPp
z#plpv_DigYAORAua1*|#$n~90QGFUn0-?{jJGLb|d^)@hI3?mx8X+iamm&O?1&3Qw
z2##xt_QrG!aaxxbK|c3;CTbqRBa?Hn=Na@zMRAU_le
z=-6{;(XEiCfCbRny(GExgcq1*dah~Ty@dt%L*ySaU{HLE!8d}3hG@;B&CF3Lu}%|0
zR7&?(2KNY{bWR4J+@Jgb6((9n+I)h@5dyuZD;pD>P&sQ{QAx<^{)ee|!pAG54V(S7
zdzij|B@!nkI()q;j-+k&cnh!|4+HD+(5ks{2PqW_y7nv!U(M=e-*i2`eXm0v6$
zwID??wfDjt46U~B_yr5>FVu;M(h<*F0J~Il=hkApY8hURE<6YP9=5iT=O&`E%E758
zs}BLPt`)L<_J7N{DlNH8KEtBQQ)+^#F6zehpPlFPO=&{#Q8@#|7Sj2C9GQjOXhWSt
z#5?|G9cDsB?L7U3OS&*L}|0U`W64>_rKt0#9DT{iKWW
zgarfXo)=gkPQJfZvW~%-6v%O0AIYZ`my3*Kr$H$gkzMqUkdVI1DQY7`V~T^iUPDi
zbcFYt?Rz6&J=~5Al2XDaAuJsuGcF?0X<9bl1b`#La-pCEg^dW
zR$gx89M|106SO!wkjDOv5gGAZMoHoFzPFdZ$bB^lA>--2uOL=nZgO+}XTh)hF7yUt}gF_tw;p#3InsHvz-k7jdFJZ3oy06xFFRRt`e${z`
zu$In-o&|g7f7Wa#k+RdZqHGC!tA{$G=1)l0`{;S-0u@x=2W6lBxKxj@yV<~GXUs5G
z4V+pD5uL9TD3ghD9Fd^GkEZ!S-@SX)*_{WVy_6;FpdUuA8zSt=1MeNs@!+((!HoaR
zDJdygUR&Hg;Ip_sO|A3$Q1rMgCvW?DdlIYfb`k3f`aM}C_*)YJ2-xk3AeL98V*oHN
zi0m2*AQ;FSj1Xinp6<+pSl_#4wvmu=6nf|9ZZA#4SP)n_
zAYx<9c%2el0>rUtdSFdySwK0OCPDF+l>RyLh?jq;(gWA~sdy7oy7CsB
z$0=ayfuGl@^wGPzh{-)W_WdpQ!OOu|UP_R1YOi~0uZF$rZi42%vPclBDC=>L+4FOp
zwEaHAJmJH$2VIW2WdM91{=*;NLuAj1`04SFvcRm5tjK2zk?x_8puX2vfm*-ymbp98
zlA2c9R7^#H=WtK@>#CmluIlj&Jj5T7ML6}%vL%oD-(f}yd_)fT4EG8M9D(l2O~J@8
zTpN@>H_X-*7GJf`$OyGu6p@GGKXrDu7dc0-sHmth`SY1&Z{diL;&up~j5Lm5zfWDO
zy3kV&2a2;>W%ab`n99xRBvNtq=4(Mt$vpRrfkG(T>Aqw1hUGPu5-GQw(}(kCTGkK
z9nnP#yLDVyI+5y<{*G?h$`H!bu}u`*pa#vLC5CkE-F}^0R6j&Dq_igOx4tav=4>T!
zS}nK=`-k0;)bT$)xJe7#Ixsr7CI;%Y(?pRhZC@U2C?8DeGG8yJ+rW`zR@qekGTEKO
zCpR-UXY_gAi!{Yk-aW*_0JW{U!09fy;70&h5EdGG`q63Gz#|S@NDuP0&7=ZE1qj%0
z#|U%J-}8ifv#fCGfFdqC9?GP>Nl3eSK0$QTq|tz*{%uWdgGH18h{;|PKmdD(PG&aP
z*x)+pdS6GEZ^*n!lp|TB?)%Ch$1m>e_`^Pl3|CaQ?0Rf>LhA%fY&8M6LIMg^Qomp+
zpd6-DkOnmlS1i&lEAiQDWqk1;b=#YVs?|=J-P@&B`D94d
z+x1gICm8#tzzno*h}!o86zcTsx_n;u7@e3vXogxFk-if~d0B|pS
zL#Lw7!loTZJnyhrAZu8Mw2lkTixDoqf@|DP2#kY28_gzBj)Dd2c_&c;qm@L;!kkJ^
zgH%AeJ9uaK0o&KSW?5+Wz$$#A$IvD9NnPlR$x$8QduFQWX#87spAjzk9~WjnjkS)J
zc9BDl3#t0C9oDO;ki*U1>Fu0|Nze7R-;JiS1D49#b^70U*hO%x*2gbyOI0{sNQq4N
zd4f`&b0f3OXuq8*h^Pm@t-@!kpE9Pf*)nabqnjdjZnKN5Bm=IekvYiRll$F(aGllc06;BcZaX6yU@v8>I?eJ
zv)Q5F@fhc{Z}CA-CJguO^U0)Ima?X>B(EXtr6Aw0Tsi4P!#a$*$pHR!qXRH8w$
zl4h!Z;c_dsS!TvgO`I39O1CP1i_8pfm_76I(<7i=7!%LO2^;zwQ5q}_qVHGFr?Y6aBYxV*
zk~i5}^avaN5sVN5VT2@s9!U-l#(u>Ca_NSkBIS0cEl+kb)KZ{_QO8QM?zC=3T$HUb
zI9+xotS}k&Auf4~%EZ_tDSthxzO#_5OlsPD1zypWgADIqy3S(`yn5I0oN%9M!BD}W
z5XUr4Feh!OGP_mV2I<*=U*Aao#q~Q%$HP>r%{41hgN;Sol}ad6U6+;;$r|Y6$qT6z
zX3Ih%@-qrb?rrvAY`T!%eqBx7bAEDL(6rC>NGX30A&qTL`vtA<#ftFTpYOhS)a(Dq
zQUB_@4fXFJJ1uHzvw!FwYrza!0(ud4v;ZDK2!Y7ypZ6TrAr>#3Dcv?}5r&IwQ9*`m
z8Jih2&6XRp3WcHmD;5Mkv4pCjD7&0VI=~*adbtd5j4b9y?Z9}_RqUq2CvCUVMXl3`
z_tcuFVu;%L)i3#-7YM^J2o6|XR{OQcPxs2b|2*dmRb3wB8e1&il_td?p5>~$x8p?-
zoM<+GScmg|O>6p5Vs$7A-h=4NDr%sWMPZe-+6g^C`J<)CCv-
zg&|93$hNS232tl?&qKYud45D|ji#p4wuFKA`^Dd6@JbZ!`M2mpj|YwDbx9ec(J0>%
zp@}+@tv_EFwEcd*E%)BJIrY|Zzo?bgzIXr1aF)6CG1cM;D_Cc>gtht(K}1*3o9%a6
z*Suu_`Rs7i@>l7fVE9|{@j}se4gnjmJEg9B9^-SLFXj(-2TurTk^9a0f^@n6v0iCS
zwV%&W#3kM`^laAx&wka;F_wl~1SUe&poCEfl$ccPFkw~+s2~o8NLKTmP3DrlYYWOP
z3a{{iWyR%HvP1kQ@7foXT)Q?I1L-x1l3n_?sk88B2w7Z=r@OytewBa=knJdUc5;Nz
z#j-XCKs5jprS43(*Zmdhxf?~~S2%pL>(JmJE-<$gAe}UWw4mYB@5nf)pU1+?jJ!K|
z0QUPkl*~b&O1j8nqnGozCIFV$E~&qS7gBo}%Lll>f5uZc7f4vH2Ne*jxW@Kw*3mh_
zE6ado9M_R#Hld%(?v3m|8b8W+%lS`SFG=ihho!X-8hqIjhf?i1ezOnmvA#xbU=u=W
z&UkcA`F@LgR%vW94wZXfZMADg_L1=)6-mwW@=`B0V5D?Lng6o#qlGV8WdAr9-uLc`
z-=B+L`312EaxG2(GO~KNoCZ*ncUdn7-{1ln0*&Biq4CmrZ`q$sbo7KrSLWF|v5vSE
zn;gnRLXSeTb+at6;;l1g2*!I(u!q?!3vqn+Lm0zL6I68Bb=|{N(==dk{)i-;jjrAX
zlc79+S7*3~rf+ejs|rxVe#`U%1&L@j-^%&2VZP5`Y-?4!Brb-cFLb{#wo+1K(24YB
zwfYGnHP`fp_sFfcdypzY45)IACq!MZ=(*1(_(&v&PsZb9B}3NGUkg
zF$gECwN4Q+eTNXFA=R5nb+wf<8aiZ!SJfJ2@fc73;cHk#SfHQ+B=J&hq*MOX+CCKL
z2Q6P?j66c#Ir~!Q`O`wc>r1$>8Ls9Wv}HV(>q)Im#L3khk`$baJ7rc@br3nTYG5X
za~E))f5E@c!yf^oNZl-bn!w;qNP32`9nz+lF{IBB0B7`&w;vn2x?<^spCEAvB^sz1
z5M~H08}wD4>@_f;Ia1nA08f6PiCBvLOlZIHR&0r|QnNDBf*lc9XX#5Jlk5M$Y~Z!b3YW%&RLWuK~Y
z^QN$ZlPN`Ipa~XIg)2V$Y2>SX;}uO4mhJQy$YG7;W?NMMQqQa4l5S7Z>Pse5y)$DH
zr#gu8UW^vt6dQ`D!`h9xANyp3Of5Uiq-Lm6&is-)f7)A#@Dt5$^{&pi>(L!9ZPZ}ADG|Ddx%w>SJuY~}5E7)N%L_i&R%Zje
zj(}%oGITTgcBvvt)-NgJ_YSsCTi2eyYl4`GJRc`ue;dE|d(=r-vEfdvnw?sCe4Ngr
z=fMM{6p$hQ*!RZJA|437+dX~)J`c<(YI`g@*WAdFR#2WufyzmRFp&ZRCi|E;o#8EU
z6lbK9Fo=_xL2=B5zc9TyLZ<%gm8Y{2(jp11@=}=LGEk*a@FC5Nnb%t-(klzV>cAE>
z)<+jRN^l}+uy?)JAG-@@q1l|x|
zRknIXK|FLE?clW!ZzP7-8`nU(xM^!B6j?iU4{A7X-;*lsHmhF?izCzYH~yBpEaoL_
zV91=MX
z{b(_sV5%*UE!d>cY5i-$!asmYUNG`F%x|jtF5^zB8N!dPKfGtCSD>btUt*<_J?hhj
zk{2(LVML}+oqA`m9;_T`Z-?GxT~#f3FZtDb0qm9g8iv2Ka;Ht37!3_&QIW9s)EgB(
zDUvp%7cShW3(IUIP4fxH0-QxiPrQO%{9Oh5Uvd{Q;>B+|Szgbot3yEY?`?D5Lc87l
z^xlmq*k-1T#qK;hJNZ25_sWwjoKZ5pGJ7?ezn}GsC=r%KR6h9<9fQcm`A5+P=buDC
zH`Qj`TZ)T&n;Z59gfBPTgFT9X-fOcl*1Wa^PH>Y-Az|TRj-2~ehx5?J*v2zrs=_qP
z<1qBzXhF$WMApkO(=KgqUIKyVzaC?29es{H(O8a{p7Rooh3ta-Ap;S}VA~qQwdZFN
z-$tIRKC<`q8F(!Ilh1dS5O2{-n|08?lMVygc=~Xw^C6i!zQ>0GI|Cj80>8HAF6Pr+
z@(e(~_Bm5vgSH9^(zz#RX2=V2p$?ZVZ8ZA_c@+vXa+DGnX|Yos-rOol?jQQDG4ORAr{KZ4!_i=WCcyJv+{Z*Owqn*li{}(v6Xw&$f}!0bfH!
zA+LUQS@x%3S!ywQ2jeP?ZTe42I$SW3y1V=C8BZ+iV9NTAV$Ji3+uVH?=CUoswu(&)
zuZg_;IKLA1GqWA}~Erp?QIp&%;U*}#r;-8C~&+U+s`PQZXq!Jrc<
zqyVV?s#51KmeXctrpqCc-$bYd4jqOvOFYzBqKakz+Gb9g;l3w6fia_rnLO8^Orw4T
zx;#Cv04{3x6i
z4R7=7&p?3)V91&A`uX2_0-hXLdWRKw7LBX$ALE#m{4o(Mcp=$;U=xVN)=?*DX~
z+jaog?%v#o<}yqfUMTs2-6!^!RlsMMD;pI!s9LaZVGr@Z5w)}`RFibs*Ip`UBK^T8
zcCkCQrX`bw1Zyls`SH)*a*1p~rSN$`nH>KbfP8X`FH5Z2&sP7`!a6e_Q~v-k$D+xy
zb;h?bm!gem&2i#qHBGC(Q;ysuFtxBTKGwM~0lHNUNC72EwWmT69jlxt+w@RHFgn@V
zE1jHy4Nx{K52$`SXO%m(1G254KC$=8YG(PClH&PDZg}|&DL^?;LjX}LqRb}b-svp={WeF9>sSJL%qo2ExI~twV9j-6q
zuLdLDS~gl7t};>HyKLfjFV}4AQlFllcy^0w9IX)t0iZ`>-&OuNSd^a^b{?NTe%!r%
zU_u;R^kzPjLspZ#xB!>lUfbGsINlAXf&XH+Ss>o|Jg4PDpaGs*k$mjxT2vEW{ge1`
zUCw%O`5La(+b?Y#<6mT~Qwriy-|D4}LXzZC5D3Xt5V0)sQ_v+*i*N*Jnk90VXA=rk}gWTguK4vs@Z`KCXQ3pzYt#~oANK0>`9dA`Y(P}QrdZZo-XD|$$$tM`OSWfMm@nfG_>n?;r*Su
zZ5ImoBdR1P&&5HpTh#T&l=>*?e`zhE+JJAohO*s3u!T4sxdMt19OY$kLVT}Z?+#Jt
z`CUyH!+V~tXeBOi%zl~1%0l?nJ&q_UyF2eN!98Y`j$IPJHV
z5&ybGQ$o4VJb9V_((ZrL@L0QbQMM+|55JSpg0ebS%m3bStLH}FUHhQ
zzWHpi_1rRpq%sy#f?1WKqKhfXA%o@f{rYuhL^Gl%&NvZPTxMua@{`}YoWsau8tX4~
z(#ozcCJ&C)ud_kDW2W#iea+7t2xDcPJ1K*pB}LMQv#X>G#4#g?;>XPSKOtz=2w|(y
z5_5sG)_xbjXqRDh33`0$$g8uCY*1{qpeD9S-SbAN@u=FF+^8J91+13-fNToiyh%>cV1=
z#{Nu6|MyI%-SC&w8`|rlx-FS#M+e;_L#2VLD4eRN-c?Xn}i-GQkOSjswezfSNldQ^ifnAiWm
z*TVo7^g{mMEazqO5-xDGX4?t?#-T3&5P>8InCf$@Io2W}e2DML^L7L)NnyFsyZ2%f
zb#9ojm@Le0g@iC9-k)MabfQGuFz6?Bq7sD!Xn#7q{SN^yL@Ad+bPdIhfe*>k0NR+b
zLt$y1==WSeT&B7BBBZ0_wd1D|bc93u_Aa^ZJPs54pbn5^bortdQ#2@1-JS
z);nw*IvrcIe8m4easqDxJ-41=1M{Gq2zHQw=qrssgbqs*7F#s`q^Pid
zKjKCu($y=mDZ{l|wyaPT<78W)QVbR1=gWUE{X~VbLSbAXc|@gxC#6fj59F#J!!BW#
z@CtP_?VQcIc2~Sa_2(nhiwu^-=hxASP@(s=*gHgY3HUoB2R#}4RLoJx>+ob5@=~H1
z@(H1FOGxS$tvU{15MgSa(D=46LRIZjg(>ymX3MW`_@8y=4uDo=VqVrDE)>}~dM~1u
zc(ML_X>~@Wb0T7OEF8KB18brNEj>wCYol9ENay5_z$#h0xkNrnH}R9TH)g`mc%-9luX*BYMJHY>nbBszNCMdDK;v03m95vo*b#|x08jep8
zhp)zS#uKooC#!F6xQ+@lEvWAJH2M#Mbd7vm0_@8}xXw3~$iE#$ay!skk^C1+I(oRS
z!M@H#g~jcRDQ*kGct1-)4RX$XJi?vY^fqgyUj2$Y@C&HY$6h?r+)qnq-oMZ!k_KX4{n?d_yu&E!x+gNP+5RI2iM#cOSGV<(5|y}ScFR@?
zBYAExEyU83UrZ7qq?VIl50r+k!4Y7@w5Zl>*0Qk`K*u^-ad0hN^n%Df(`m$!5pb#(
ziZ&Tzpr3lxVgjnhB_{B3iUS)f^$tIK8&?DP%*-$PBZ|iQbjt%P>4T#y*7gz6a`8>w
zqazFXUfph76T}gD!h>g~$tyB-c2O?lI_Jk!`HA2NZ5a(q7WHyIm{>5iMdGWA+^)a5
z#F{#2yQ9RfzBS?1ckG&I*0nf)ssF83(Hfvhh%$bztAY2mxcQYr@oNvnT#a&{s@s2D
z02e0kQvgQ8Qc<)|@RscTi2?6u@>ji06+!N*e#M6gHc>XWW#l7Zy`gz0=Btm#JL`QL
zztemCHZp>OBVWcqO<7$4DS*C`2e%kf
zb5%e_RY2a;gw<5dyC83v5HSTcPH2^Sb|0k{Pa1uJ%CyZ9E-I0}o=&E&lfPLS4)i>4
zGnL{o{ewdK@G{rZOqsG+xyjM2cA%f|}CwqRPktj=p
z&Ey{v9JV`(U$AnZ1L*YzaWSSZn%3X>RSxHTEMN-}Zv?+Dc$?u>T`E!L6Z
zr{Q8*GI#TeGSl!@Wk+%6g&2l4wHS+?djzxc0tRwu@WMied?!$--e3ILX7(Mw2r-z@D?e%$n6+cLrkXib8T0iXCCz@>G%Gx6N6
zLTAxhE@HUmY2KH0abVkufk`JqM?STES+q`LYT!`C2n$B~eOcZoD2*b((ej5hfwVDk
zYIwb3Dq&d2{}*1`rYavhbqN8LcyrTJ;dY>{lauG>>#{_VAnlj44Dv|ACv!H0~_yK
zFoF@%j)&&Iw_wirW{cv;mp$OsgdbonUe~Yvo`?iK+HDJPbZ>o_T-VY!as*8HeQ0TG
zU-vwAJ60nsNu(VDBZ0Xz5d1UzDybwy`A)Kl#
z!aH3qR_{M=Z=z%I`)aNi-_q1pZ6++w=sBihG%?Ci4sm`oSub;al02>Z?>_yFL4)B{
z@jmDlJruzgua!<0R>-(|=fQ_dDZ3RR1n0=kKj-r?;zxDsM8I+z0rYX4p?@lAU4uefpzZLYor+7$QXRiz#7P$^BS!g{{igRI(aBXg
zV`T$!{HiSl^F)ED9!5RTZ*O#LV)Lfi-s9@fjswLmW8$u>-IL)&&;ByWAOuyo!x2;Z
z@XkeWI~cEs{>tfkc+H5$!{+tivC-x1h5R)Euw7`(8P)oad`AiRA1lm4pY+3n=^6pR
zhVAaW7p2^TV0~^3VRaBeXy%jSMB8Ag|4#CLBf~r$TO}pO|EgOC=*lk#2d>&(xOq_h^|nO>^G}J(q{VliQd>QV
zaC)%71zkV^!=>`TJk5KJgzM94#`XR^&o=hSPxSPgG+hOLF9%ueUjpX*zo=C;1+kKZ
zO^*IBrMbIIH6T$|%FSe#=DBC@wtAD+ln|jfqYGAVi{H9g?}a+DiquMgzS8=C+`%4#
zwMD2A0zBs~s)Ckg<7?~Ok04;Ih?zd6j(
z<{5MpP(6%AVNQuK&zeilbyo_);#gesgFxbr-Q$A^HiGgssG7X_WSsZ#IPwX=xWzFM
zg1NGW%)d+}V)EEJ5M$Bd@_3b}dLi!V2~vbQI7Hb&P-&4JO+f{WBkU$3j5P{$
zg?TSWlLsaq%jVA?n5=gYevl>lrSjL0r9TOfkw<a@S+hV
zHOHRvM@^ufjsiCAQ#eLKZb2j4-5?!H3L0~FytFt(JI;txBtXB<@a$Zi#&^40(tX}{
zdryD+mQ}0~*9MPtP~Pe~@{N2Sgf`MZB^^b~&M`x;kSfpa@Z?KA=ZXxwuwG2xXeAj)
z4{Wu6toKMqw~zj21jKk2v4e@YSo-2WMtKEPPEA#?WX#P{_*|BB#xPYpeLJSoJ{RIxUrRXi_~Jybv|Uc>P46kiU+h>}?AQQcM7g@(h4!ImhLM~N_es!D08
zL}rZ9fNj=dn0=qy2zzH$mF0PXPXkD(wAwKU{5lQnZ~U$m=Th`y{vUW6eIwd1Co+a|QD)FPg?1#NNZoPhbX(oj8A
zzkxh>?pt9Ku_>@0?#@+uhTkN>`*d<^e!#7X3rYJxtfYCm=2@XI?4kZFH_l@JPxD59
z?H%b?8htd9<|bacdi3^4_h&Z8L
zkXLt}@IAyNBZc7-XF_ZBfOlOJI8zhZw2UR|9gPAfvjilZ*_)1D0?Q&_;t4mrBtpo2
zd$II5NW;hD5=!jiwO0pmlYaO#%6e5jn=KopjnEOT`#PIX`}sq+gkdDTXuf@~{^Kf2
zJBlYFx8Ak4Jk%Zqw^$2jg&ITl6r*u_UzLqN7AEa10R7dW4mrOd-xXdZ=?!$C-(Y_$
zxJ5Kbg!a>zOAut2V%%3dSmo|~61w>x{10%hO}mG(QEN7DLSGrW@w#B!2t4TrZzRtu
zKHEcqm?xs=%^y}2M_?eC=V(kzqw&H8fuENN0Gkh&V`FmaFT6F-05t5s$n`=yhRmicdeARo{EjBP
zb{$Wrge!?hv3v`$3_>Q&6#Pg*stY}(@ijN8g`gRgBM$+Kp+r3m_%u8*kh-1#>~nK&
z3CLk0hpcOC7>eM?nV;hjCq|E{aqYzZZ)*o}W{xyWG!(bi>lX*;POZ-j_~vlby0#f;
zPmxq3Nuje)=%7A766Ohd303DFC4fZ3&O;|<_Lo$Lr-L4kYS6^WT)2ZzOM8uebBN|F
zmQ~ngCQlGudEi=ck8eqm_~@>3qh!LtVGH7?EV*KxQyD7&A}l;82j7|bUFrK9-vhIn
z|1O6`f*ZEgB23~_MDR^`{VlK$2?Bey<)Xk#pKC%e{hrPy%XsOWmak+fpLvdP5oyxQ
z8eN>E`cnzp?Y*SJ(>*N8);{MXI3&OIp>A2g3x~fvKQOF4q?RczWT848CDU!u0&1V;
zZG+q1^V;I_RBi3oAM8&l^q+`#EV9S~ynE(_agQ;}yH?ae_aj1ADX(_toDk-kk=egL
z2pJdzKeydj`fw=<0D?@Ob?wVm!*Ufdr1474OoryZ%V+7F)LOs;Ltth|klDrLMgO1;
zA=E5V`+474SJS+v)K+s>A{zn26BD_F3PSJf2@)nMD$e`VpJPr`d7$!l68z#f7Z5-V
zmPvfQ^~4`q#fhmXFJth&9pf;}RkFHFI>QX)Lrc;H@B2pB&QPI2{ZH`XD9M^Ji_FnOTqM2#`EC4~NVd
z1hqMQJf`U{Y@`)!x#`s?)4f}FB#2UP1q<5p*iH8?UmOv9_4}daaQ;y2A#2o1yh_)7
z+UfaUF8Vl)OCH2lA704W>7s;_3R=Dd3&r_#dt|x$_}+0~QP`&?Hq`)=eleQLUa(jm
z00z{z_rANhrBM_GtTh$UF)mq}$&FwdX4j$q%a
z%UpsXQu&k+sld1z)))^BrjA3893yME$AYB|E;VyMB`duO++TgW$0=I5OdSjd>g85}uW(ex>(Eq<~UUHkcEKu3i{-2ZJ`99w)?)hB64@QuDv4b;&Ts^5Q9WWb#a;m-4ICSdji+?F)-
z-HJG|bYgr-PGh1Bxt=i}oahmIEYt}(kb;X+BUhO~o+=Zt8&n^p0yT#%x&0l>=D%QW
zp$eI**kIFq-ieCUoIaNhk+I|0gemqa^=XFp}rlH!u
zsU{?mj8y7}Bl_XGDQuV6T+_*RxVIC8Ay;x$CP0o76o=YZ<3at!Ppb&K(s|rt!skM>
zlf`}{pdKb*PnsERr>PiajC$vXW*;qo`k9ZtD*B$Aan@%Gt&f!$XrppSq@3@4HbL8(
zrDN>^1DDSWxBvOnQ-ib8Ol7~Yb2jd`&Wi@J#1)aQFF1EfyDjUEsy?MkG-L_1|SlOgkjYxA`lOcAgg9T<^owy88{b+hDw7M*@&_$Zp}bRjl+;13fF92E~$$^K@q1KEhM{5&!q7)5>4#-fE6WR
zNJ8z7vnEBOcms(B{&R(@{8Hg$*&{@fe$8d%-orc=r<6j#Bu6;1yiaeQdb?j^gh{Rh
zv)%@?(nc4^4rMl{D-8Shk7~&J<(v$bD4hn)YRi~1^SuZ%m1TtgMWt1N9V_zvC3b$Cs9p8~$D?~?~@7Ecd0+;>qmGJV4(R2pR|v$QyV&1H62
zWxoCJ?y>9kfmQB$)%(?I)K5kRQ~PFy^sX3bV|=P`NMorbQuQ;{Gjg0qcvla=##X5*
zy7s)pPtO1i=(L>b?b(A~8;-ui#sV++eOwiv*_{(Z7;|s@RjrI*h-p$zn4X47kTkT;
zbo?;lZ^Wj^WXxC@q`;^!f}pT4)F^T^V`G^-wj^3UA%SzwJ_M=I9(qcQPc(PU(nieE
z)G5~~o`}0X%~}ZLDoNdr&;3*AFVK!zhHX%=+*84+P|FWw4N(NQzXnzYVA)pKJs
zj1Z{dzvuyGGkPor=>QqOQGB&<`fMiPpb3rbe41ND$b}GWGD?o^Rr)rNA;jQ#wEEKz
z{%YMQSMkO2)wi{9e5>L@USmvm?sw(<2p%
z-#+`}({NWo4WUs(Mi-3qBhD9Els3L}0^H(nGR_RPd
z^D%duOmlM{TZ=GORWMK4aoSZoqT;;ge!*qRi?lCdIItKP$y=C7a9V8PQ+|JL^qlYL
z4YN4qWK%n6lfFjR^r>sjT-l0~CUsQ+l7uz_MP1H0yH1NRb{2|$tOj=*QC4A!QvH>@
zu#Q!ILQYi+X{&j)!RlLsR;1WDhO(})wU{d{tHfcsEhVQcnd|+L4c)ln0p{k^`sEr6
zGFI!9Qm%>d8ZPePt8W{@YJ}5o*8RG@)Gx~3DP9r@?G3(`JnY{R&qg=wEg#+8|E@}O
z`d{2Yoq@j~A&_eBi6PdDP5*w<*e<<$Q{ctccHd_^K^$8AS&^nr<}g1iSGa#1c-|TA
zs?9w!mqdeiPBJ?;4M)Io{$C{3=lSCbn<+tr3(q3@NBX`W;vGXo2_DM+vze0neWQ!l
z?()eDX^-)>!X~S?51@%b^B|~Rbr_7kD)hJv^GQ&W_EzidVT8tjzj};!yWhyP^0@Ge
zB$;s#R03v>o|%ug(|W7@s;G1AW5j5bk)Rb8+TUXMICWoH)uO-HtU{XCLD&j`#fjmD
zT$&4%Ne$MS(cY8KuPA?G>8>IrhpI$<$zeznkhY@wB82YsUzSt+x3v^BNzmBNWmnw2
zG&{QvZW{jB{b=30vTLMt6yjjcx%iyJjX}{=N@_m*AZfk?wU~3WWUsV+ew$vL%f?l$
zo0BAb*+*dVqBNcJSRAYDDW{5e&69P^Ok8c!@jPo8u49?*X0>+T@yDpGtHR*g#=gi-
zH=}%%d5P;|Z%6RU2vm1;V?DTxQyh1K$_F`F*diX^h_`~%#oq`7@Yb?h7hCPlnXAi}
z>R>js%!Mujy|Az1se4j58e3VAmM||
z@g<@uz;R@WL_)NkeU{)bW2np*8dQO7;ZM;k610ujj9QRj1zElQ*8&}hNaBzTYtlxuT^{;V_R
z%1g78_N>CBvw2_S!Jzc~KLF)G8ow_AM!X2#TO$^{c)=M7kia=6!oFa2@BY!dT+;&>
zPnRW#wnsMr#)}YL?6$_7I3;sP$O(+drUO
z5}b$Wx@X%q&ve}p27(Fl_pdT*%2wKu#a*giJ23>az(5Gho8A@e8cfj{5pR~VHxr=S
zDR1s`{99*A%pKoFpU1#0EE~@MbzU>$oK5D0CF|U2-dU<0v!;>fs(tgakd1cAyxo3`
z9p%wa+|JQbv5_b;UlNQwlhV!OtHrq+zyY!vvm1VzIWlp$&-#f
zniqd(`D-F-V0_T=Lmv;TW+}p$o&82B!FZ`$7w`FP^XN_Adw4b_!OFN^iA3unPu&9{9q+zwX{?KMbxN(>NxR+TkJ&fP_y8(#tPBnY?7u1`3}I^0vty@Y
z?|5b?-5K)GIaV=q$RBgbpJd*KDhsfuS>&(%9y=Z|%xcurnP|3|;Tf6d%hI(==M9)3
zkb1!{G*Get`O~hx$OWmQ?1SjR{Au4gqU1d5mN~;Dl9zC2h+p^TU?xs(uK%OveSW@V
z0u-(8ir-(`9{*$1QfyD9>e3#WPBrntxc1p8?M;QLJw1A_lweh)Ra>F5agmm{N9;Fr
zuO4vV_3TQgIqz7w_T{1^ig^vlmn|-D=X?3fU(SF1*M9-%{bTE7>-d(F7FU^KVg;MV?5ZsapH^EQoSsZO6tUe>Qb*kK(oF|vBrnZNx49wo
zd^-}IB}C~Q1uWwVGTRPtRzKP7>0s|6NnqL1kd-R~S}ih9znvaMiGsX5s$H6*%od$G
zA^jIg9en-l|KIGkFd$p3ZyGZZbOOVGl+8
zX7}99CxZ)40nb(aawTtuIJSvw7irGfv39vo>l|`VoA`wicw@2S@xS$LZN9fQB~zwU
z4I8C$Ijtv&mvJ4eOldh4#`pH2X+-+#zY%C-l<3Q`cj
z0>8Ti5TmLZ_LoMIV@99xm78|_^j#y>WxiVK51byX8zXQfZ{iOwVVjsVaCcf(6BsJF9s$
zG=~l;|Fw4>5RYa~Y#kfFZkei^fhY*3tkjmd
zgB`Q$_bF(gR)W-8Y%9H_Z+rdyy}R`G$ku4~^z_z!D+$>d5A-&*;sYips(LRWZdFP9
z%Dq$`SgfU6m1U({S+i=RDm(bmTKK_B(dMYY7oqg}fEGzk{@~nm&(-(5=RKXb;nZQp
za?_5V{$4FK0DdZMa?GNqe-|Lt)C3X~1hByGG#pL?0-m$_HRoTo`6usMq*CrNRd&?3
z9l2@hURKoBpsFHL^uiV>@R$kUgT_cr1GVgcUZO;=sj=7Zg-Z4;I;rAQ6(YshQl_C;
z&4-8;V|}+(iWrMXl8Jw)5sV;#N1YWb1ZnKH46d%cDjE(Ca+5yqe$x)&>n4BN&cl_w
zGfHMlX`S11#iw&63rJD2kBQjsQg6<3+FT=Pc}f+_+O;9x!5w!rnVMEYYlxzJYn7Qa
z5N2Dl%vRuLn9R)JZC5F~d%JGpqqEVCebQnKSqz-|`NUYe
zH=6sBGPl=m_EheI6TNePe~@Y4nK#(}n`B1un`x+=9R&y;QRA%y-dbp-SM+abe6VlA
zTo<`2&2pu-hnA0YdpsJn)HFjHtpVK@2HIL0(pMRxv|&hV+YATP?$H&a*Rq2KUq1wH
zcq!U20^b+H4_cC~39X#?z2lwl;G-Y;s16SgX9qmzFxH3_n*iLo`-T_R!hSq1iangT
z?2L;Spx6Zp{BEj%d7HyCSDkayKSpn#id~}?1wCo(2yWVb`BPWa)?8Ke0Tw9m7zm)M
z5{4lFKmF-XI|rh9YEB)blJ)=fYdd{VP{87)0Xuf2?AYP3MzTJ?1qL2uHU*sftTTVlJQwC};dBmJ(m4YvZSuD-
zKfk#|bY2r;{!TlDng#t`x`Sfq>K9z7J+b}%+J$bHQ}H=FErN3wOvoVn6B
z?={-*VP@Z^K%jvbXAP$1e$l(7@qvNe@-ySBOhsXJuZt<0?aAUwtTGj_d%REg_J$fP
zD^qUt)361dt1|sR`w2R>>9QfnB?fi&sf)eU@TDJcbWj^W#FEmmK-(u^snBuKrkUxo*Li()UhD$-
zt`=3_sTrzfPpO!$Zay$V=vw~1p(DzF8c
z{)x;E@a>pYcfG!{0NI^mhB)I3sGSn>zQ}Qs&W^vE+nYCM7tn27J@@%^A8OwGzCPx}
zz0GN&B=7l~Gtkl1`=_7|$V$DDAWe63@0R%e1ADkU&|apasM27{RL$;mq?D>n%er%K
zFS~j|4G*l)ACG9|t^r2tO;%N|(SdpuAhaU$OD)FER!K6Er7UyDIzjAM)egXaI`-zXDGnw9CNHUj3Rc
zT($WpZ&iF$E%kES&Z|!c{>+MXMIT^+0*?a$d{89azbwgYHGHn-`0Quzd{(ISrP&c|
zbDHQR?2a&yY>>bjMbxGZzoU0aa7^C;<#(n{50ZKQ$t+SdXQV+C{A`&@I?Q86)e`AS
zoLC@#c5biV+@?91qYPFmLaPP4cPCgYluG&Qw9Aa$o_^Y;%F#8n(z#t`sa?|5jW?hN?a}W#Vv@z=s@?F!#^E~+GlE1l09$h|v`zqtA%%2LL
zXZ5l`nOM8*erAZFcm=1Tp$0baMlntIKBmfT7oNO+m`be_ex>~
z-`2WPQp8P-99{coT*fh&)k)T+1a*<9?h2sJV@WcHjm#dvm|G#7Tj%UPvz(>k3A9?^
zohJ(OEZ(l<4YZrA&MjKc&SMjuZO}Kvb!2`@hs=GD$=^OEeLF)OwDWjpUZ@@4Hmi>@`wvSML@m}^
zV^GCT#sAT}C;q#>F}p61UZylEjhU&SH`tl3z`N#TNjJG(>La0+27BqWOaLe);jsde>Z6
z^Z^zq@arIeZITiK`vH3wqGPiUONt_~
zM^^qg8nj2mlTH_YHJK%SNoUHpOJdWx4Q0$rm=NYO9a)Iz?6dls?HprgJoVHt4bNSa?me=Jw(`{QfyCN%dY-@C;PqC}#aUpA%Zui5veTwrGQC&d6Yt!t7+6dW4
z8CP`v{XEEoujzhMI_q!m40v?+X^PBD_-22e0}Y&&fY3mqjc_dfWOaA^iQY-O+Xj71
zMNze(Q}o)M=_;#9(kSc3IAVGz&~ntr@bn@bx~;^r#x1O>-J-jPntc74aN|j6JqY1r
z9zN`7>)FSjd^~^tp+DEN&Nyqxw?W0tFr=0c@KBIuqa4#f;Uc^+p0UmN3!VgDs6u_KYW=?{R_0_0gzA
zy)B(`Rl74?6{xnRO1i<7X)G#fNDrf%7wN#R5^HY0D9=r0HJy)49n}i6F5X~5b
z`i!}F&Fx-PQJF-h
zl6mtcm~M+1?Wl8|c(^V@YBkJd%%(HFtFlicXEie?5x)JmcHJ*B^WOF~(c4!4)F{T;
zR?jq_FOS8a(aGj*Q4`ALUYRtd-j>!~)$ELysMECGqZ{KgQ$vCFkMy&6!;qFY3oA!9
z=<)-v=N_5n^QXe5r=omC;O&<1-fSP7c;d?No^|@dYF|5A@!_9CDQ)|g+jd-i
zMy=cnDARG1V-9%wWl;406?kHz-QTyow$=^zEWUBtO&(jdy=h*6h_%$+?sRV-P1v
zWhhu`dl}w(P2-)o6g6r^BV$mb#)*otff%FeM8OKyi1Eg#v0j`J35+Pl2u2KoVlW~?
zVpK4O?2U>z$>^%nEYwbn7gd88@VWkC5K&U`7>v&|H$37yW!KzWurtolr2y(|MN7H{
zAu@_$3@X0M#?YvU&#Vwd^NOzl@!7wj5pnr=aNyOb;O$Jw!vvaBC!<*wbGH?;X}cY_
z(>l7kCcS6Y{I;289i9DgGvnYoQ>@lD?agxSw4=Ye{KMk1Cla4icb{vxKIfP|4^8m~
zoX?oKNAM=UT~MD-?0B#0jo>`0`M!49+cOH@BcfgdwbF84M7%H6%dz``)~91*lqjfG
zT0PZpwR#HDBc
zbeWpfr|Q61S=Z*)JIV%s&96`
zN^G2ni&_z>xG=HK`><>Si=@UG4FZX*h_j%f8nsr`8jD4JAT}`~gd)};Vnx(i5hF&7
zfc4^yBG#IG-omIAMT|HRW5g>M+opIP6)#3Ch~PxA_{_AXQ&Lt%vY0tV+i|j8ifEVm
zm#c>Dc0FlNCx{|OAd$Qxo
zNl!V6Kl=avNY8rySy-_TySMM*pnU+lar@;bCk_G=y41(E62Qv718>Oqe9`|`;E9R0
zmH#tVz3kiHzUM#wT2K>NxOU4Ao_F%{7v2Iz{kK4YM@<0R%Ef{nfZgoDLTnOjVAW)@
zQKs<(qLPT~1mkt{kv6e|{sc!P?;VoqHKFviRQ6WG*5;FPoaYH%-0C*qr3bpmu`p+Hq_h^4H~FEI#j8F(L-ZeCzU&
z4kP&(i)QyIqDI>O#)1bG6%oPZu6AT?at5(&>l5!g;$+)yCR6UT!y@z9V-@wHzGKGN
z>AK8VmZM!^mYf`R6To>F*LCeOiLOoj#N`ChtHlX93CxI}$L7Q^>w0tqc=fp4B*@cl
zE%oYEOx6^jsYk2|AxNs8aTofMS~HqXBob#?y^~s#fXO}mx~&qZ9#~>H8Pe$XMGQ{g
z&p|_%X}P?IpX~=1zaDLj3Vg%Dvs2O?8Sy*u#1r}CCqJnto_ONyFVCY?`}U!72*7pQ
zesE?f07T-JZ&v!E{&lPR4{d*_3I(vh6B6y=ry~|U?T-G?)?2RLQww{zZP%4A06q~&
zQ1k&7DDX%LV7v5t#u;Y-Sr1cYnyhnA!Lr*djLSG+E^s*0aaB;s#dM@-k_w~N^wzOtl%VZX;2ceVvLAtsG`O>vBm^e
zoLY=p2iAHqB5Ku(6*0yb3?3_j&B>k-#N{1s?M}7qA}Z46S7K0HHcu*&hmQz~$I#Z`
zOy+^8?M_IOtAyIsQfNd~QPI4G&9vJ9B@@~5mz9~MTG32WY|po$siKOA%lwi>LDMWa8ZRQAjGTIWyHsp4@lw4PDXCyws*_lcmKoHBl(dyh
zX)PS1->Z&~*Ys`^ksc6fuj!|H>tY>Bo2=>oxi0Ftm7k5kf4>MCM~d=wi+N{?-<=V^
zvtM#HfAq(Hq$eGJQfDu=RX=$g2M_c9KL>Ezj;l|vmU>a35l?d1=u@uDn7a>+n50;;
z3Oo^!x7XNOIN+94*L;6RbK}bfqG8tUzU`DvlXtVC_rRhLut0%FdSdl3zIhpjfhhN^
zGqB6-B$6o8t?GgavZsWz-a1I
z#abWutPw6%?^Q)jHvZv})O&Sa#dyIwo0E&2WH?2gW<6yNkrZ&MWVdI`!HM8R)QgDE
z6{bvy67NNF;*pgc9kjO-pDSo8St(QnQ5DT*AEZ67YRGlFtTZec<;p6-J|Du(IGoPP
zaFeb?yICHKnp3WP&Y?r$aurWhq;tvo?L;(xl}tU$N{2oxvCb%T+27o`q+|)s`Gu_M
zEt}s?vimweCv$$Ddx=33AklqnqiE{EA<}*>m%naS5|;eEsHTFZ+EEZw55|d9JT$!5
z39V4}Vix%^mnvqnE-mfVa;xMwO%LkUB~|TNJ*
zoUrV)%QBJO7pql)Co%yf)zkny=YUs#bE?%KFqPOV+`RoKC+6P~TkNR<1s;I{_^`L!
z2`tYiHbZzI-Oi|4N*EgTbrCaSvYtRENMh9Z6c;2CNr)s4DT~^cXzEhMM%b277aA?4
zsm79OWUTkjiv-4}X^M@EsLKktPE!>E7f6t`gBi^wDaBxrnaXKS!c+yZxmQb0j!+Tt
zna(CAn)v8<(?`3A|6#odvGLsO|Pn6#AKvfQ;)F<6)&{ZF`=P`
zDt1sOW3S$9)zO|_2p`u3q$WHdGQm@_Vr5$)fz1
zV9x}%Da8XPo_r#oJol4&;&EB2*E^3_PY?u;Yq@tWy88c4N*#nI@Cs4l;fRrwugW(o
z`u_?%(cu7|yyUq*_WBoiTu=(&`t3h_;q%wN^%sR7V1WX^E&_NLuol>*NQ9>KY1w5w
zqb8u$O!GK5QL&j!B@M$=by_RI5T<3&vWf&&NfK?@L`sC}oL7mA(rl`adNq*1$0SBI
z)zqmsCdwN4@Hj~kwTJ`+s;U@N(sqa$UQuH}u_`mIZkjdRX=YHEjgCrQTg}A2EVIpL
za$0UFoOJ@`AssW8%OVCu#p65m?ry6;(VXFR9w_*XPZ=~*22C~qA~{vfshz0L#JqOD
zoy^$Es7O9^(kUv>C`WWu!Hi0_ZC1L8Ui+!Kvs&hmzIng5!&&B*eRC2g3k-mCDT`UT
z*lD)iYyz0|66Pgg$+i`pHB=&bjaTw=uXf74>QkLitD+U@*D1={Z0*sZ(xmoEz{Ku;
zy{{T->4=EY@g-Whc7(YkRL9O^3#aL3N8UI_fD6`K@&fCUOXN&+}CGQzH1yB6*NtN{aLb}%+08bRn)5+g

7_es+aV03YR5(lfoDpjtt-Kaojv)WsE(t}zvdsiUaNU;w6~@mNYs#9UV#K{ zXo;z3R<61?M0F}cB{X)MSBdsIAA)Co$71089KLsRgi}Z7WfZX z$&FMk;CM~)3d23}(HH8sz0Iz$04}V7&}QwT_ms)+#f`^(+T()cJB0^4TEKDfSb!!6 zl$;gUKugG$(=_0?ClLY0!ZpbZxlSTujf1SqO;GC)>aQF#Qt=eNB=V8+cs7a+ZXuXn zIT9=O(hEBd?SwVovuybRUO(nvHA!3*458cYvS+gI<-9>zF}svEC|8%sXD(j_h2~ly z(s0&0pLR$(G1B0OG=iVOq~EW^r*d&dApgx4`!(mYbRnOgTQ$Dhn@jmac%-x{1`d>A zKd#|X!h-fU?$)>hUUrK2Z$brM$#c#tOVNPE4Le5)1+l#vTM4PxMYbHnVAuvkM74Hv za@Czzn#^Lb$K{akf=)j_UcV7lJUbJyYGhF_17FLv96*w{eG9nW>=W&Ouk_x}UMCoN ze-bn9aaSeAV-T#|e31J!+}L5rxBHf7T|n_lb4!vppNyq36$M@7g!A8*u?`+#qG}&Czuj}Z?1#iSh+)X>ca{9a=3Hs_3jsFB=>)XVwSSuZ>NEVY97as%$* z%1wTH?}xPUwK%1!69IkIyETmHUQrP~ukd`Bu%A-#qMTMyH1W=C!Uxplxl#q-oyzw@ zAG#WeDpIHU`4*$4vlLd?g38KjdiWSlX!FBvVP?4_ferq!Vh0#NO?l`VtdDpkJP}*c zK^^9)yrrS(_gL%Um%wNeT2nzh0rR*citex36yi~$2q$a7M>y2v()ab&&xyT-NcDfi zQ&aHyUV{RqeCkR|BOgGZJ|bxw=2tRzXgyF^Z%ulfX|7eEa$(izviHigb>3XUuTxwG zOH#`VPBJe8mI?X+NvPcG6wKG8(n(SRPA>0GU8}L$h7A8Tcz_~^nZH;(6l-DySq5*d zwB(m~np~bz9cz(He;OVdO-IX$jNWBNcW<`(8bvR*krHl(b5np9L0YuES(E#7`Dk5keZ$*v+8!jn zlN4o3MKm1sZEBAIs8{!#vW|ckl&|!{Zou;14TLfW`j!;4q?x?Yck~H`;x1?MD@WQF zvyKe@u19KtxTXc@X}p@h%~SF<>Nnj0{1CJDIJcuht%ui3AxEz!JYGW}5}#~GS8%?Z z#XaDZH>0&lDTfK{mhlB@zNo$}eFhqGk(L`NX!AR@)*LlkiHy%U5|i-J z{`zdtATNVi=7hvk>eX&Hu0YQziw;?y96Q|O3KTlV-2R3UNVZ;S+tbz9-GukE#zB(i zP7UM6gN9jE3$TrI`|3|8g8?KA-0cwMe2Vhb3I<8=37ZRJMtq|B*)|H2Jyw1CCZBJX zyB$AWo;{VgJrKR%|Cp8(r&1CZ;NWnWn5)sXI)0>vvx`D59+6;Zt23)c!jUg{d1B?U z$N}2@1`Uadq$$;L$ar*bb-V`(+wgn(YuLjA2U&5Mf&HDsJzP+s_N^V780$~D;u!QsxKanMc|;nwqYgR+w_{J z@6f)+>6vvGv=^*6l7&TZ#r+C#eOAAkCv$fm{2gF#rydHT#ZQ1E%VTp2+Ydgpilu>W ztS`(Jv(V_qIep5W>tPtcK&^cv^Z@ok^K}`uG=bN5MUjm$5JQP4fgv(q8E`UpIW?K6 z#`+jhYNxdTy*^7Mx3@OpfE{H6Vc%tiutIe`Lhe3YeEeI5@ntID>}(+*MLTSVM3`bG zbmxzO_Ius%ARM0B)##2}rwvCm({|xO(F4USJk$ z0AJ5F?%VvR>gB%Ym@0tc4csVddIQbB!JQj_>LJu0U@QECj|H{5BYAZtE*{SzCpQ4) zn-q!%*Gkw6g(MK{mJh2M-yYTaSDwZey%~*?;%16h!7m&g2+7DUpiJAQr*~SQ#5MW+ zbacv3_8sx8=Q)qt`FZ1mKIkZE;z*2x{_f%q&&7OGDtr z+R}5$UA6a8vkAUtXodC1`WBK+$FQw?)SmnI;AHw)OZ8m)Vq7RgIvH`9-#{Uz%x}4e>&=wr z{^3Y$dTko^!Z6`+`AdVn$cCR74W6v&4B`rHOEpekSXJw8Mg(GaCH7doq@)BBRBWeq zN0L=Sy9M`owmnoS^;SbG+9xxKQrpRql)RLA^VqG%{5>DcnyW3QDh#J8z~A_jF9{}I zf>i=7Z%J)=4tgN_c9BXD9nccQ0uwTyaeHbiDS<+s4yA7i7cNQ)yL5j$U+aqXWx&#u zAgwd6OBOXBvxpNwCWB*(u2?jov5$rMadbi*#usv|7xo$N2umfp3}$A)wN`w(`4@EL z>CklTNmr5{K7bbsF`Ze{weOI(zb5SoXVcJ1P+_UKsi~_hDn1DBe;=OyfU$-8V}+40 z+LWqZ$O*gAh)|f$g3u_WW1*WK2mIk=@Q1f8c~fdGHQk)LW~LUC4rto^FQWCL{`81! z93oPdj+2aUD+R-DFyd*DY!9VXAaA0jR3OJ3esOtC!ryyo;$i|aGhefZj(w>^chGeU ziAv;Hx6E%#tS4?A~T{sVEeg8NWHahoLgM1Y4xR zq-=I?cOp`fOOOoyJ1?JM%-rxjB%>dor^VOAprs$^+D_^gw!{|Fd>WNVI6D?B_~lmo zROBc-uB6|4-8^6V;17fCwb9u8goKXw?C8rFQ2`m0px~bS#p|oWy3LcbhkfH_N-}aB zRr6n`t-M_5|f##cy2nRicICN81Kw*1E`{eil~WsOM5 z)|rQIH4fwVzAO>nq2~iblR+ldRrCc8M6z9d5jr~s>6HXKjjlWO)%@RP%V=1cReV(K ze(L^O37IH6GuJ?Eri%5!WjT2GP9JUctDH1#f2YC-Pf+fhi134~cLp;aUl1#BhKEYU zy@P=5L5!v;i zXV?geA*jZuuA(elEbwLFD>UGJ$)qZi=(g%Q6UrIuw%?UKNBo9*$w!_XyKA%>-;`Hf zyJ?Y78QjjMQuLhj`S-k!mCKJlty@{Y7Gj|+J9~v2ijW`B)M$w;4H6K~1PR!dElB47uKg~OWhzRqJ_w9r4Z_Ges0du%I(w_n?E}tX5Rlb!Wefr}26=>1?L*H<~hR64vF-Fj!4$ zULd$r&k+X*yBOcM&MHzbac?~BMF?YUJQF*ax0As27obv=5W3M?>hRQS$zxQz zj_L?TGU(c+txeL9asQ{`8uJl8;lw;+-UUehcf;A!VW2wRpp$K(Nrh#wM;MB}@>wdALUh=+ISD~59pL0BgP-j}-88kEfYj*M5yD zt$my8^1EWVWHBVvG<&yp&Bs&0Oht8O7P99?t`tt{`Bs}y>$ED7D3yeDco=P;V>CpG zIxjI76*g31RSP&pFYSL#y-L@;UIcNBfri?Q`iaFo0K#=9rpqJ}5NG^~fDne-H;wQH-XI;r&JMa7nhm_wB^iv-z2+ zLK&tALa(&OGNP*#k5}JBSGNKxzS*)y|9&Y!`BTSX2179M>v=!wYqQW0RIU_Ra-5Xd z7MwBr)>WHoiNzSsXL(VAPoE_MIz#=~)K6VJ_77>6RSej&oydK-HFGdxB=qG&TtP4pfcavN;Nky~}^$)_gd3 zCWj@#tip>;%*6eSafGoUwDR^;2JGT9MVy|Ecu?!PrLt`|ct*Ony)fxuztE#lcQqe8 zrc*O_O$Vl<_;?H-1qYxfXiZKRoqow7L2ZXoT>Mvr6>bO)MY7`>c(P`2Zi)}apHHDgkSRO5DV6C zhvxAXI%fCyr@4@!H+Q~<_D!XqRV+U7u-vP9hYg=KCLU&YFg7v^J|lrb<*Rv?q?Chy zg7`tIg|IzgR4 zC*5aKoo4I#MQ!;rR7(Slp9l$lzZIS2bx^Iy|5Um;wPu}iWZY)L=)+eS6-7ZNGTHc4 zVbJ@T(9$>CQ~%2EywS-*?QEv@btU?f9_UTa0jt@)48Cu6D$}KzdLhxZh3lA`w{9H_ zwcZs)p(9Q|no(Ioad`Z46;P1bt*5n_v6Npiyxqjd6-Bv9@UBABH zBeGpxZ>{CYpJzQ>3OMrg8_w50MpYbc`*6i4_pV)UHo4PwNw`0Y)T+osk!gLK|7RQp zK{$};MSKc13T=$@CCdzQl@h$z8M;nHB~y5W5UEYR6Om!@4IlVj6dn<)kaFAgv8ds< z+tAWa-PoigA{GQ-I9X~%E6E0)<;iC~i56BoUDr{;9#@CfU#^b+4E~NY-`k|L#okcM zzczV@k_e}CE}T%{V2`B}1K$?3{^EY)b_IkU-HT4Mp09LI*xVn^&_&q@2^7pS19 za(h9RP?NjM)cS;!yR8vB>LoJ0=`(Z#OwZb$q;H!97y7A7jPn(v*ra_o=ZnX#3{HAQs$GYw$8s(?WZ-U# zf}Rzq8B2r5s8Y=A@qUu09bvAqoq%VeoK6U?G z-+O3nA@9P)U)G8JWQvbfr=Y`1xwmN34Sil7xB!e@z6!*f9Kx?Z!sl_nhJ{yJr;-vD4u{hR$YiYV?X)PexiR|H?tS0QdZ+FUykYk} zyK@&*Z8&@MMy=r%lF(1bQ0xqvwGjR8+ukPEJ!4|jr&1Gz_5|tNNGrnQ^WG3vA)X`i)C9*j>33k z;WH?Z+ZiJyNBf7FO7UImAECo_`*M&ij~{8i3iMS$=5pg+OibxfQO%|qSjG9ub`f?5KkWJn533@-L@G`e5q zV2gxf4E58+$biqEzng_NoT_fS4dadPR9Q2P&a^~F)aV(r&U&09=y+xvcTWI6U*b92 z9;~{lNHl@uSUXQY{qac34%dWy+&J&cRt1Rn`;?4QzwjGqASG-ulUzw`3ABqp&FW3W zD-yx7mNxVOb0_sPpI$#0ti%Qi`Qo;lWJe-$>J@CEde-#7=R_U>UN_G_S}DT;@evgu~ zd>jCL>_+EgEr_t}%|h-VVyk#ExRIV%sXubFMx36Y=p{L^&(7%N9#NVoXe4Gpp$`o6 zx2wl=Q@*x*Cz-|b`rr@*E|U86t(MIW)E})$K&j!Yj^>Y(oy$!gA*p?j+|MeI)@#*N zdP2O=YWxs>b;9B}Npn?V$eb(Do$InLuCGsVot0JAUa9D*=mot^fqHov0~UYT=aY!i zNRLvT(Jji925TuPN3j5x_2Jm}3# z21!;=Of+N6tu3eS7VFP6H7}c|5<%pkb0;uY@e6e}TVM;o0&J6V4-F|Tm5|h|*7@k) zb3q}DDyN9L9ZEM{-705hEH5et{n)|t_Nd_uG)wgl4Gn_z2ZE1D=_3>%W7_)n*{l>W z@D-X7Yu$J<=+N4(fu9Zb(d}zfX<@tQF)_l7m zE=zWLB?@oD*-vQyIE9IWoBUseYO+o^$49&KYu!hsRcXgdmHbskwNMVUu2RjTJ#-+v z^pneiin(;S5$jm5uByskT!64_ znZdL-8Wy7U5T1R1pFT8Rt3e^a;v}1Hf!Ola)fyM~)+dG`>gmyTEh1_vsyk9D1Q?sPC=n>&Gq$Q*X@8e=8_T_gNEbO<(`x zC+P^dX$ci4aRCaQ$>UqMc-6J8 z=S*JBtaEv`M7zO!00dzO(YK&OkiuDgn&Dn7aTBAg!dP8_3mG`pGFojAW)tHlvttC@ zI@=e$L&~KsitAQe6y9FkCOt}R(rUBUquaQ1H>67el?9=r18%#DwOi?niJlT?P5hmD2lW^WOhZsk-gYuA2U=E{ zz=U)lRe-DeM+_MXWzt1jNB#2q{Km@8_|`mc16*@w`?#vOC*f{-D?II zNYPP+-QT6^ZvTLmmv3{PcdXV9jHs*oea0i_?5i3a*tRf93^vK*e75*Uq_HFo2c|9t zi4MwbHis+3_r_fzPNk%1sJ$e4F*&K*sgxvqkxH}DFc(%Poj0{2CF`jf#p|gpq&pi6 zHag-CUqq76hZ?_JUhEDPVhz7!Bs2H0EtmqD(5UG?!J4w}{_$0z^V%A&^ako8%=cdv zdQHTz`VjTI^0iY?8>Ywy-hh;clDy7YQ~JhGTIR9Z*}t+xFxbYaSECO>Yq%$S-%Wn3qzkwV|&e1B)H zMYp=$!1(RerchOh2kX*J&F3qw{9EK^dhltYGvmCUFQoc?P;`7QsA^OaW88E7GZ!M% zdG+ZA?+;3N-+xG}E@j6PbXNurqWZ>cc%nz^q%5>=66O-!_O^=d=&8ref2f|_fBuBM zMINq#%s1a&^Lfs9cd@PQJ+~MeS(&kEdZPlNJi-~PuZ$bE_~H8}vq)xe@WW|ep8CNd zKkhpi6W5Q~3S)|A<9M~6H*a_m8g;btuldX<|N>LD+tQ;vVDn8SEXWU)|S|{>N6h)omD+^A$9sM~1=Z2sG z+MI3w@u&fvk5$n%IivYead%rS@RV)O>DO&W(c(ITWMWz6FZc*tn7qXc#r}PzEO&HY z4S5_9n8a}UF z74fy7zoa7TLSwS}_rw=qD-?KPxWt3iAo*4gB9&lgXhdi1rz_YKei=)x;K~@}Wz?x! z;D?W?IqPxMo4A+cI14l7E*}m0cYXhS@dfIINLLqv{>a7XP3fQFyq;znXULq0Ct0W< zj-lHlX{j5rytu)ENncP#)VZNys(H%N;B={P)Bb?)-N4*L(DAg}_C;vq14Tt?PZ^y4 zuKp;FYPaTRB*Hl!D>&AfcHQ4jUV=Dlo{!MJu9*PV{+~wt4r^F-aXVf99^mNs zG%6}cU5zT=D|F`P#mlc*y^`hiI?OEDU70<~^JBUa)yKEp{WIiV-J?PFxw6thK}jXe+2&^? z=Yj^>{8$MERmjk_++e;kbKt70>O!^e~1R?!#ygQDs-_)g_PI$I%Zs3kCjk z<_4VEFAilhzR`6hcw)9;b9o7<8LT}GYZ-PXAl=!fXqJ>zOoqbiqT3X8qSo@4U|MB zziJfMKN4UI>rZi}WQ7$#2BNluarRN6jv7_p`?jZQ zbJsuRsrqZApg1A?1>ZQ-N60eo#-#B>3tyZe0XFHJ#!od4rW25%MmK-)QZCczM2zc+%b$1<7^ zyO4ro&#yM#-4q{z%-Ss2(yW*HrEUC;f+6K@DT%tSIS)uM;H z4yuzFjx#o^l_iEtm2Dk?T_D$U8X$yh(72$RGmxY1$w z%aQzpf#iagOP)77J9tH@KPpd6h2bjWf@Uw;^q)^!E34#?Mo=yZ7VI zR*L|IgIfj$nY5!k6%h03;Fpc*;(q6r(9O9$sBGM^JtXlwZ&2+rDEDW)&r49jl$EI{ zRiM>RaE9h;r@qok?c-kEG^1U0cU2fP*YMM&i?-Piz6w5{Sz+2k0PRQSvdRmt3wp#} z12!kAm(f(fH~S|nqBx?D4h4MwbOty$1||Nn9~qr4S!=uE`Gh*GSF`H#Qzm$3BD<-&q$~aDT{-N6ndHZsJ9*K$>z-WSXxB>_Q@)Z zR=;Quo=eY!$%2Egi;@p zQUI|L=+-Y;)Mh8@{dqkr?6jP5=Anlr6)X7SSaRxRFh}mFCDx@YwmG{5GX2giDT zUi;zLC$DcTQVY1#vtQI>LU)LT=;J>I{hOQMiHL}pwh`&SK6!v6;IZH8URHU0>_FW9 z0(gT@poIa@chFRt|5KKYJDqbX0FJvOc9P3c=<4|V9c^R~l}d2zQ`nsNTB4HNeX%yc z>QiA;R0K~#<5qIjURmj!e?ti-#(s^_Zeh1QfT;;|l*e_>hWxUy33 zVynM7@bodMoDX@Zk69>|E2G!789(XHZfOK8!bpgp+2ba3ub^%(c5T~_TgW|$-}U-9Wcd#T z;iAv~87#C{fAHPi1wVL$ zF&Fglv@8n31rXtPM>j@AkL>>}*r~;w9gBtp3zY}C7Bp3jVt~J1+^rJoX+EV6k`yHd ztJ+U$wCEl{q26Da6V;y?Zx?e0t$rcNuGHdX85tJNb(-JQN~zk5l@P(v(z~pY_-N#O zmlGRzo(~~rnsJ@;FVR9{*MsQx&YoQikVE>YEr9)^DQk(_R&d69ye6o@2GQ7y5L@;Y z2yjjEv#$7XJTi<6Qna1B87wMBoKrQ1PoJZ0Msy^+gDA4V^m)w-80|Iu=&OPFKIv30 z^cflpUflU6`Ohb5{`kb!G&j3XuKDTM&CRIpHvdxPV4(GfjV=0+*Yce}>i*xS78yX4 z(fg{0SqT^*8Z9 ze9Z3r^h%NK2I@1|14OCau2=MuB5UfaHRq$vIJ!>V7$nnsaxAE8aACLxPr)Dpwdf_e z+Ks>5yxJWvOXoRN*D?|OmJ3T0n{AdXKMK_uGQ_vdUGj_apmTbyM8d zwV(^_KiVIe>X%fhxTIp`P|z0l;B3QH z;#x`h*y?{CFZd$AtptC>o=x-B~RKShw57y(K>;7qLZsgd)R%?u5+ zb&>!FJsZ!)kr>2e=5m=ypWEdwm2MpXIu$~E@98zBmv0NJ2BD>G9UeG83(c?1*g0%o zzjvU@G%BkaHrF%NN!YQZSIP&ftgsbx(M^*DoSiZ~Z6xJ?xPxwr zMH3vj?PEVOIauBC_G(wRW_u?Voz;CNDaxRYTpP2K-((cSi{D#oa=KtFwF*kGEXhzu#BXc#=qFI)zvjTnIDVaah!;r_Brhe zP4&j}h^NM%zU}K1bc8xA zBRm}CutA&hLscxKKr0l`Q+P@t_fAQkJTDhL1^_sj<=(tjLB4WlRFE6@1`OQAWjp`2 zhA=qdP|+)THp)WfR2LLtY%d=8zpT4EpSiDCgamd{keS!D5nL%iAm#@jM>-6!W@W>9 zcNzf&)#%_~XG}L2`Nl`0xo1&ipgbes&5L5 zxd;^VQ`iu!-O8%ry0^VUYSVU|8dvDyksR(x7yxbXGkg<+L)+yFLpWZIXb!W$% zGwKu}dFYGcGOHl)-~jpcN8*XW=fG_r6L^6T$a zyqrKJn04Dop9RdFTHvVsge{V%uAQ!QQ&FugOMb8iM-qYHR<(*$6Vf?Yc64CxFqVYl zb~GR@-(8E=y+~Y6A6GJH(Wi;#1z-&EVrU1ZD4Zq7`TDOvdJup0=+Xwm`_ zU8k)4Ed}keG7#lLUXiAMy6*`SN&(=IhGrA zcSK)#mfr-y(^brXzY?1{F4lR!@qT)p`H$G?X?nY>dm_3>E-hE4tuT2VZ?9{^#J2KD z02@|cd6NH1QE~J(tmUvm^d^tHrZV~d+lvVn0eJn0`#&MI5Dv9m0VF(ZFu;rmAwV6X zt`UPJkNZL`CM_ckTgrw#H(X2GXP8SV|GqsjqRS>Z&UQjy<^`AQk)O71KI@b2prVx* zHcJOk2{=Q-V>km)svlD57{K_o$*s3PXA4zf0EE>Yw1elShUfo4L}?(HFNIF*r)Z!3 zT$K=W>p%XDz1GrD)j~;SgP>K%TQ4FE;UwCD=L_{1_n?V-_5IL%p$7Ld!(w46#SaRP zi6r6Bk?o*d$PBD)=d`yE;6C@71hA(gLP)?_&_Z%iELvAGvJgw~*{%>EVIR2kv8lTp%cUjJ&}{JNgz;Qh%f^RMqPtEaGq1!;xCwGL^P7qAB0<;_%C#cKf`%DlJcC!$QI) z^I2%jSVDaM@5m-9c|< z+m2~iTqoE}V~LI1o(ixRq&3fr*z)Q>b~k^3zJMErEuuyHZ*~~q!7MM1QVAN1JzE@3 zNwK}o9lJRKtJ9o*2m5{~6XZ28fNwUdbnfzoDhnEo7n%R4<#)^GZBXO8ZYer1@y4r} z6a+|Tar|GlVbI<5hKK!?tG|xz+!`enGs4f~Q%NcLWNBPR`BzkXla|y<5XLM}`@?8z zKr#f1dWdk+5#usf*-6dqKTsnB36t?y)%&V81y`Nvr^@|9C>wPOu>dUo3W6B$;N% z+yaWvhd+8om?Kpl{-{X-b^Rsc%WHB|IFN%G^*4i6R^b>D$T~?4k zK6;jFb(VDn##>oM(WBH0+%fQha#BhVQ<@|^&Vx3OYlmIX4B#+frhezEY>9JAfTWgd>ydPe-UVM+795&1%JBQpAi)lL}pKF)-D7_gD6N`y#zL?M8XT_ z>@ICCe`jJR4$4gRCLU+5EH_thn{uZy#I8^vItQaeWps+CLe747t9jX`m8)hzSPxJh zbVR@}AD?!>t7?g`e3lg-R7(OEvsWH_cO!ORkSdM0CnRW+!o=DCw-Oz2K5i`SZ^rAL zj|T?wOSa8X%L%_XU7OHf+C{5+jC8@NNjcRLprl8wL3YIQHpk_t^z00*Kc(R@(Kw={ zr>$KNs{J^SrN}S+{3iWcCCeiwLWbJN4=VYi=TfX8sfe9oj0mq$c3>rN^vz!iz0+F) z=jYMHP1yDnlA>#0GNQ)6H2cUr)OFdw2NI`V7Mwr54}Aq6K!(GfMX9^1?M7Ecn_78dC`pp zFzIYw-dCJjM?;EzBf5-oX(pV^9oD#UJlFmjc6GTnaRt{744yz#3J1gSqB$Eiv49Ya zKV&wGH|t+4e4}_Go5x-lq;&0>fe#Ta8!=*ObniOOMKZMuaedm-h z6@>*{)NaFQFy_MyRqqF;f~x}5(NY<*pd)DW1O*x?7k=t=UKa#Zx9;uDIAa*|e@g#z z27xSOt-7r|CwDyM|EuXb9HIXI|NHDclD#g;p4nt3UBAakTD9NVCD4R1f z;ETmgUIeKJ&d7+KzpIkhQ@cwk(1 z7!JOYMN!uh_HC-wQ#87Xg5|TO$q=1BjG&q%S2!Vo=VqEH4>Pxq*Ji?a=7)iZ8#4P* zviEHZ$dcpWH8*KM8A%*kz}dj}lrM^4-hNqlvX+CGB0b<-OgYHW{jG9ve#2rcW(WHk zn3M)b9KcrD4S5Dj!Fv$<=EkEn@v?>ktn=t7uH+2qLDNra73vBvOFNuG&33CjsV*ol zA>5f&3BOLSnPA!qoqzu(%~2w9;q#}a+Wp2zeEoIgb4_;1@-J1L@^&O?qrS+Q3#5dn z=>dT7=N5--vjcL30*e{r1jl=Qa#^P#<8~o|tSJAfr}%W%NG@19-@lTlRsg~GO#QZS z@VNrBwB6nWP6{!uu;t_9;aL4Nj8R2SB zU|EspO7wSoL$cHl$1jYwFxw+D4zl;TQp~BB_1J)i=kuh=i}COdhuZgok!|jmVC4Pet}@8c}e?&|B|{JEtW+(&BQXAuzAPE zdwtJn<5PrRMST-xZ|%GN4xt4D7i#kI`^(gpto2vik$1lZ^v;Tg8nb|{l@t@A$2s}E zunwHu%vq}qb7rky-F=YrLl7{|C_kKhf=q!gZw*&*@C{ZGwmgM2kU%NbgpkDp-e{Kj zX%HuIjs&G9(Vx7ocuP=}^C;x*Nza`#H~fp@T`{Nrx)IA8h+^xf zcs1oX@K(h2hI}OAilGPzmL=Q~*;1cta=Ds0gQF&|)sq4aYBlPluP;yEjR`tB_dTx+ zh^q{MEQ#L-;p(*+Uv?HTdj2-7BJsD{0Ah0gs-^+?$Mh-<*?=g2_>;<)UUl zm_`K!(2Q^AZnC)Q>DOlMT2{i2(0Sdrk9flkEi_O};OCF{Sucg$m4`;*_5 z!!oLFRv|JEsUBKLs_Cr-J#p`07Z7b*h*s&p>XT2sLpn6M`)?)kKL( zitByFLjVDQ2;@#}E8V8_&pHaBYOQ|^K5mB@h5S9&6Av0XQ!g6T2LDd?tzt(OnPMr} zg!kaDwZi=5yBbsy5YG46p4?x?GY>I3*B2dcw093@ownb3 z4ROj#s_`h=&3N?ZuC^#KYJyDr8_s@!2~Y+UA=ad(E|l%P#{TU5uIQxSMD9nXMjt4^ zF};2#C^&`&W-0?ZVJyh@^olT6wGxlz=dw1oS$#e|$BlfYPTg&Gf7zvC{@bnAFs_N3 zrxLG1A^Li9MQZaq>1Ft@!^0r$v@68}_7ovvASWT=COMSC{CYH;PV1X7rD^i1Fe(`6 z$}~QiNXdgiGW;i-X%^kZa!pJ&e5a%9cA`m-il4e8Iv2%K zIZRyCcye5p8`mHaFmukjF_^l5Tg3G)r^oGWkIL|U9zZrDNiqC!Ayjx115%CtJwNxn zg;|VMWNxumQzDe9I9R+_gz$fMK!yq-Obe5lip-E?9DVQFe=p?c7$PAhMRsYB`BL$8 ziKGMUEP(P)B|VsKYkgd~%BlUufZ_3zwHW7kUMDnI3fT9JqNdN}2uVmrWPs%D%9kW8 zrnnyh198tz=I&MZ(dIg;xe{ZK2a|>P^oz~@T{%ea6B^t0wqYwAG?Y1kQ6Li%_eMt8 z46yg;F9EE*4n_-d^YYX&Wgukzr3$)41Yb#F<&pYQ*t(?HO-!szflso$qEy)Ww^r{wnIw{=u}o>2?vJY9GL6x{7Ibd@c`vb*Sim*G3?xZc z!P(yz{Q{t<JeeBBs8Kt&>qZI8aA1u``*s@nYRH7PG?LtcWK==knVoR)B?G z(oNO*@(XXg>75(SUutXi)hJb69Qtw&Y9hxQ*)2>TskTcsT_B>4o(-PIR0=~ytD`Xo7H2+mLM?j zD8lZ=uumq=-qQwO{=%X440CoEviW0G{GuHm;(yV!UOveT-z)69wA zyy+A&2QZD|mgMu4fS`F5tb^5brmUyH60yep6tlK9TVN9~@vkGl#2|!aS&ivo{`>U} z_g&+Ck6TPilH~%rQ=!?fcq5mSKE^cFueGedRo(XlDjo+8G3ka^R40gKeI5RLJbOn~ zv8+~>gik(I(W8liaI_fm)6!_?jc%95JF2Y4-Dzi_B_fVJ0rcbrR;li*vK*l55T`XQ zy(Wz*+X^AE-RBx%;{7P|`ki~b9lqw~ z-Vhv5))(wZ9^zr!q}3iu*j^*;iM2WGA}s=vyk>L*9ah^+faAC2xb=I1+|}y?>8^pT zqOR`7oaCMeiG<~Q=onpUEioswrhp)EGGowdMDv~r6N)-U*S`eUc5(t&2P8W~+XfRi zgT>%i)!2JQ;6h{45+J6_A52zK~~}rO!Ud52N-wT-5R# zVDMj^gNh!d(H3D!L4ZooZq6svLHUK%b;LEYk$u9r7&Ov>BL83C&3#y{26=}vQg!?17f9L zLVJKNf8`{}geoSdrisl?7}m6dF0gA3vedo8(Ro+Gpy(g~2EB?fxxTrOUXIK3wMxWT zcBHYMsNja?F68VNm%*~L#ws+)tvgS{->fM%RTc7Iyz*RmTx5MFA)8USE|6eqm@;v$ck z-&GIhi0_Dr*hiH3QKk_DkU1m!`4zG^hk z)jsf~X>B@Ri&)Q`sX@c+SKMh!#;9eRqrO(9ntW6WVo65q>^>9siX7g&wb$TAaHuMB zl-hL2^1j9IP-j9Kq9BSKSK#^9*&N>Du7`&i2vZ0%{MXd(y3QJ-?m9f1-q;?S+tWw;>Wb}_^N@%` zTDy&IwXu#K+`eSgoQdKS2O^OseYu7G^-ulg;15tSpt zyTZlrhl342zfk|TXIC@{ivH1uBU(V_;=S5lQ0Vu+lZCM(9@&gqfaEpGbft@_dUOA! z?*kV>m7h^|MOO&e8KU#gM5Di(xxV3A*nY%p>(QYH(4IcHl=KI$Tw*9GEoUr_)GM&A z>@$Sd@%2MP);zNXTQl^>rOJX0&uysJx=kI_WSHzUw9=@{KAFnYXS^QH zHvdUZqI!Cy1eoHD=p3Zz!<;OQZYu%S%1EpukgYth@ZYxb84MUYBj050KQJJA#Y=Aq zT1sgmC(WmZHt;?Wue^R0TD6Ke(MAyfFJoDcp4o^(bua8yT>hXZe}WjRq2ZOSUj2(A zfLHo0e>5@O0V#?;p{ht4HK_(TMiYGo$avsLDokWMx4}Eb12+KLxgf-djFGIB`&RrQ zSu4YPGX~Rt=BPSs&U|9H=i`}#$S<5|&3e+b`~#i0u5RLz-fB9At|0+PXgPP9NbD0n z7}nOiCs7~}K&E6L?f&knyxK#@AQHd>`Tf)vz{YKqOp;`)yUGJm-+w~p-?K{P6Z~hq zhsDMn7mSBog2Rdo*$nUjh~dKSB?td$><_Els>97E06Jg zyc=cnq}Nr<9KzJC@#^7#0-CXCxqC07&;uoli;x(y6e2XHolkDKb)Hv7^C1B)#4pET zTU%N7q$2C0B?l}eS*8M6kZPI}m^HnazoV;f4)6Sx;3=9fFV{;XE}f{9iPfGBTc3N7v>-=2Kh>l zchg6f`-MhjfdBlWk)FQQa?$J0EcJ>R$2wj#Xi~3}yVR1)jWxP1W=P z2Yx9wciM$oO-IR$RZ!$UIb3}$_%kpcuEFiZD{O|vGZPyB^(Q00)(z25S4b=|1I>QI z))3|Zk+%srQlATL{97pYRs&=BnlOHJ((Cu{`Bv8g@o8HOgf~x?b-J2n!UgYY$r>G{ zd5cZkVYQ!e4J$zj*zg&gju1oTNLDJl@jQ9AjI&>bo9I|L9Fq+4I+={NP}5O*e~PXlZso z1<#{D-;t?)J1n_gF_MSOs*|6`!p@bu*Hc6}S-OdxP@3b=(Yn76Y+Vc zrG~5M-sCFVC->u@k%#^|!nB%g57ibiKz1plTkfeUk1(%;!QPucL-Ck0*kbnew|+%d z%{b)9=Ygxgr5{g3Ui7Py3yuZ=+Eg6!zVi-|ql9sWBs2$?>CAln#IvNZE|=f1X}(uj zxHiDu`b(Z?$z|c=VwdFFY<_UivC8Q^?}a}I`C*^@9*X~wUcNN0H7HC+(K@+O9?7fl zhJ1cvm|uk$in~TtdRIvt`&!=ePuzdw=K}hj*oJFIH$MOZNK!-l9;iu+-khv zpC5z!UChbe>nWULT`Ql)!mm-9S8k@u)3BI7JIYEe%hEF8sb|AFeaw1vijmPGg5RjFVOs6{IIS>PvNo40$&cqYwUuYEuPlC`5{j%}tW6$)nL?mj)Clj*Nlwd~Ni)ZYZ{P670Z#G#-}w z($3GBcwPRA3?uc&94?k;-Eo4=&Fk^nhwGzqCkC$8=$e!v$-vKk$QX#d4bPhB$&{Uv zZOEUr%}qrTD3OJ<=f1W{v5xl(Q{(A{(be(f4^c~9S#HjlYG5#5`|Xho3NT*z8^0`j0WpPWI0JpZo8gdcT=IWHphS4k!J_5&;3`b zJ-@h3l3n}m$uUlLEqpAqBuV@0@W_)GdQ0KRC^g>3kc-WT*n1h$4-M*+Lv`MJ@leOR z3$3Gc<$5z{04?Wh;c9vy>$LUw7)ev*KX4`ZB+~2n+xjwE!EQ$M2;Qp zx-r0nx|VQwCS);Y$?}O95X_U-h$8{S={r9#XG#VyOh*h{_4QhKpdkC0m=KWcJn2&e!K$qLgrub)~20Zmpk3#d@8GKA^I3kly6nuF~BHy>*&QR;N zv3#dF`Uqsi!+P7K>wL>i)v-UL$#$a|qvBRwG3t!XJbsS99#W;8G?fo8=RlWtE=rZF zT!e7>?aw+<;a(k5YLGb${r*G%2=(_0O72%Z&81Oig};G;@}Oqf&Jy${Np#)Ne*lwvw_Hw;t(LioaeogmWyq#UGow#@Zxzl~_?dfaP}hA}!zMAtj-sU|8uBzPeQTE?9d9+p zCP=iVB%Ud6Kij^CI9%g;x$5618(6?t3P@|-|2Z zSr^0(%Hl!wmiYsQA8Bt!%>HzLMi&ZA3AvUO3(&u5vwU4@EIYZx{LxJvl1l}hWKoA( zu=2>jGe_C5Le2&~Le62~V;(oYB>P+0nm68W<|5@7k*->|QtkXtJzrBxd=QVH+`=8t zHCN6boPFgJMg;yAh@*Qe6PByF1$kjSf+ppV0|d$Gh|sszi3r>|#?4(dZ@W>~CO>Jb z9io;su`%E!%3Xhjhp4cp_r3Z_R2O`174HzF6>>bb92|`N@ zZ>>yzu?;$k%?y+_Cl@ek-MdxYH=rHaZ$sbR_hJ!Kp>>VTP1Eg;LUB*eAYC*8KmZ9# zPfpG_7{oLnIRu?=I}`RdIJH$c)2cSIbopDK2A0R)zN~Jshv6ffp_6*^rm{MYlo zaEpNI9D}hVmotw!HOTyS&@6R(PNH1fxmhpYr?s zPZ?D?F6Li9E4)lr6I@7#Yv+jKwM8weke!n|uLHcEEnpy@YM3S%f)E#yw$DhCA@mRp zR5(hK37vKOy(X_TQ19V+l_6jMc&1vxsF?&+TBE8s`r-dpD1f{g#X(?i>o*^3cx2;^ zn|cBS?J0%l)WCfCM#ME>oqm<_Zi0If3q#SJHU}+sv-jt6amN`&_(-O{h~M(e;j=d}Zpg2hZ=2E5;}2J}L|&5l>}>`J>- zH|i2$Xc=cxA(Sx4dxB*-i$0;=AV5XSNY5YcX&VLjUwn*ggDhRW8Uf8KsX6>M5F{dy zXQsJimaJ_&1;i+aY}^=EIi2RXMilJynBYHKz{AAZ2_masC=U)^+)m}mGt-E(GG$fwCi?wDYHO68%Ss|(P_ljTk^n-`@wKoM zM=@wzl8052STgl6qHq$_P)*6sF2hmQSsUTozEY!Xc~x4nFFhpjt}&yNY@%-}zj}{n zL(O@LbmRwx{*J*rjcsW6H&gLD#9wB8y9Om0Qchcq2oMD;ZvV;M9BbOmFy!&R4IX5` z$fSBSk~1(ZwYO_vhj>eh+7N;A(~>=0&G(^pb)|~=u@qUlMQO=|N*KtUb z8zs%l@0+qO{CqQvwW|D<&xXaiiNB7ksHN$LU&fcEaU~V`Js4S7(o*3F(hiNg`t+8Z z@9#gfb4r_gj6H^>MQY4f09|Mr;Zpbu)zkNu!kWd5Nu<2egM75Vr>oY}J2PZ2q8G7Q zxbgm(GwB1E;HE+X$7naB?0=F;v51juW4q0JBU}ejUTsoXG`;YAr)wx-$h+jM+^WgT z-TUN_u*tfzw1t`oW9dp6C!&&9jF5CS0LeQ}FQ}A`%NM-JJpw64IsglG0t$lF}uilF}gv64D{v-LRkU z^XT)w-~7pS{SN1xx$l{K=FEnxsmS7Dkz)Y>09<)Fga!ZrLIMClT?oeSzwl9`SOGu) zKpr8X^=4+b<#nc|zBc#$^H({p2NmC)g)fv;hr?eW>F5JV{KweR4 zc#gujl?*yMkrtHN1_K-t01SNrQ`+o*U+nr}yY%x#X3Nw;Y|F^gn_%x9o!#y1yDU{@ z-Fc_u=^O9XR}}{^{EmSTc$5wZRL3WyI#@Avccs{NQ;#}1CuzBUHS)Y=Kl4T!2meT6 zAsqR~h(oL`kHw^51o&maLSx{i@Arm{zRNlOyHyurmn|D3Ljb%5*E4f2z1PEcJWPQr z44DIeKV5ET4?BzB6d*7+gJRbx08FP^baT$%;fbO&{ZTQI)H4@L&qqvJ_D?^~V^BBW zuya2w=BEAEO!tKvuyRQW%wf;~J;s7OB7lY~>Fc>uNAc?{?)#j@1z!{uNuw}Tx&CWD zp+LbRcJ(hoXkQ#>umA-xAQ%u*M+W`Zs*fSL02oIPOEn*&ydQf}%;`Wob@6;J_U<_A ziO&i%GaglL%~7=8mm^B#k8!!YC|<0Husn52F_%Tl{Z}RC{&aXefA+MLMhM3TNSZ}~ z@bOEC5TQgAfK5j4!$Z+2G4l=OocsPSj`wr1)C)I#wjqK&lMY|yGoIMc;+ucQN5EjR zC$tDjQ|f6V6%+Ws)?UMe)c)G5fMy}*obJmYkJot6bo7h6<=1s=%W=oEs=N4i;g|?p z%B<1E>iYs$^r&$)0 z+myffR={kP-+j=9&q>Gwk9qgep>YNSTPk7m4BpQ+Z!x+^M+ee^-{S{GajN2j`UpgU za7pP>lO=!PA5&BUNXtb*`&f|h0s#mU`&{4mo&C2J4;)Y{*wiyu(KJsl`?6y9 zRFtKp?GY7^t)uOFex~n*7l0Fsbhgm6d_(FA&zyz4|1KFR1K^xS>q7v5h)UBSaP^h< zBUb89sB~An-OneO7xU-S8@sI+pV^C;9_EPpoFd>D2 zI8oMtN0>S0E>E55*})0k0XVcllAmw~a&EZL`AGj@lt&z7Z6TAePq*v2*~7fwdhmH; z&i^Jgy9V`smYUyn^ZT`NRis=ryj}+XwayE>GvVq80*GlYW+scd7npYV%0Oj^yg)R8 zFWy`hP)1Wx>U*^aCjGe*_x=9KUpo1L4-@^bn#-s^ZG>8lC{Y4WAbFFdE5mG2mHKa; zUs4Q&1n?37F=Q^xAQA{T7FTo?9$EhSRCt$P(43V8>C;%GT~>;C=zZH?H=fWTZ)n~u zO*=QE(`TsiBCRO~h|$gaHW76BMgqv66PFpMx}bjST>?AOCLORyHKYrY8^%NSzvvf% zn2r}!$~W1&RT-xYV(}C$Ia80)gAgpSLxN?<75uK_8w9dFBmj3x8{RLbbq=yHuR|eD z1Dvk^qJI4$wW0Ue>%;{C(=Q$ZK4#U6*$_)AIEOm>omQX8`4db?kDttz*p-j(*RNpn zkD(DWcrO_qbEcWb{fB%nx*ni@CvSpwL}>Hykj)xlwr%7Bz^P{X-|x}! z;gahmE?0z$H!1edxGvkfmfub%v?~}ka1_kO@TsOAn_YiEu8QQB%;`SFh>{x{*tuK& z*q;l)_;cqRQ2+xzCNl^i8?iCTxwD#r~&ua8`_L!$% zE-is*7vC<4+gK#|Yq~$gpf%+JLut)w7VACN} zz@>rU*3)xc$LaNWc+R+Gj$=2nU*w+6{+9(U=Mahjs)u7io5QbG8eLKXet_rqI%_Rg z7~1~VF(Cx)!kEp!exD}m>@^|bm$VW~cev_kP=uXO(>O=kwp-QMTK>QsO#VH_TetA1 zD(+ajGiS*(ZrIw(TL0ZG2*{BL|9WEL)jQ%a?KRn^M7baxA{`YJ#tC`R+g;F4P!#(- zN*3oWf9RudgZ8Y~x4#DW1bdkNR})FYklF-q)&}=4kG{` zn4k)E{j933zXLQ$%|C8`q~D#tnP;bR9fxARSo(XAZWxjp(*k)INYiph_G;3x)!lX* zUpkBfa|k=QKLO6_bw3HoIi(BTubU(l4%t$q!Id3lVJhZ1Zb!@UD!(gz_K-j_bGM#jC*S9dy$L^#wdb}nW?Vr zsL?swijMu3FREV-0{q*c0E8r|(BEJ#|9d}%lcxums(yur5gf*#0DQf0)G@VQ^*0!TIdFjtX88H}qcwF-)4vw3v1OSa256TJ z5CrH=>o^xqQBAyJ!8rO71%V8lI^tPH>0~|p)p{d#^1~xT3xf9GFZYOli%&BZ;L=KO z>q$^X!)}x3`lc96$0qz6=I>?rbcw&;i)#Wi+U$j5dM(W)t3K~FT!_xP3_~#<{?##j zAP5xU1_s3XkI}T0&ME`@SH%Kz4rQHRu_&h98n$8y<%&|`yHTPow(TAGPux>&IT@h+ z6@pO!5P}UI&YW|7e30$hk&JS4GsD9QvW`WQ!Ov};xUx{Q{a9T9GEgM#hnQgY6xh1C zQR0a>{lYt#zDxcFKrpO1+5Wd!*zckxj1JIrEAM|RY}UT1rEjoN??+hE5}2XY9_o)S zEguetJ~OxWFM0ZaF&WUV{N(Pa>eDNVxcA6j3AZo;5vl#uDDOyI>uxTfIs*1fq6d@uWLP=^sANv35O?X(g0J`DpJ~5GRLv<3iMP< zm02`5?q8ld^A+s4{oM>L@?;%Zjsq}y)9>hG>Z5$K@NR*Q>7^!A^no@ex-P^ddEwJB z9t5nQvBRZ#mChSFyZ5;E_2T^xhnBN>RA>CxT+n|TVg!Qa5N?R^j^781ZR6p8j25^Xt}7d@x+slWM5$>C(YP!+!x*11$msRm?0wfgRj~v*&R@W2fYN5aE+uLD zpJHb;=G@G0ZHb!du$m5RXNR3&BnivzXtqiibD0LIrIjFmwxJHE8yBwkNdW(61sBj} zVr8$`y?tBeDF8pFw47@S{HsY4haI(!{Y|Vxtrd&K(h&}`myt#8RQb<-*6} zdZ^vL=?z8P-5ch`W{LVH>cjmQ@2ChdXj8x znfrgEC?f+h#cevfIo9*`0Oj%?l-JSOT^}wbZb(|%V&Mu@t^_HBfFlY7glBr9pWJoc z6cxXA-h4>#x2(hg$FcAMs(pJ0TN~YPJWW_#fY_xeI{^hqAvUe{sLRJ6kV*ck8*HXh zxoHL!D(OYm&oA~GTVFjr|EtND)KviiFp@*wSk#?KBXLKyJ^Z-TxVDWPC|znamciS_ zW*baS=l4(jRME>% z&lo}7rR5+EMw9R6UV$#sJQMP?tT6(z?T;5P*YIYvSqSZ3{8iCFBeO6De1MVLbcUaA z5i?X>1$`*#nd}sf(c3t>eoGmUC~@^Ri#db#ulzFSMc+oTi%<%`3ri1gNeQ_>g={_v zLoKDPUeSsBQ4L<@{PfP)J9Vq^c2bP1EWZ~wtv0w@g#arIe+~UdOIPq9AVWc1f~^rh zU{tt}Ve8xNkgB+lAYbi#7%6Op7X8n`M7FDyuAEj~fU`}TwI--{amv?d-W6ERu!art_g4R+KSKMDXq&=LO$K1-wFmKp#c#Q`Hw<96_^Ahn#= zyt}%HEv*jv$M=TC7zyx?7+$Ov57|r=qNt_UB23vtio!|XK2%;o*Y#W4vdTK!t|HGT zt{YqC`$M!h0x!rcc?jYKFkqQ}>ye93_#fjI$ysrHn*yO%N@pIE8f#9)MqqtFSUv78 z9C@=Ske?sS?Z5UoCq4c1gCT_nj(_0`2c&wqlLNSXh8$bPBY=rayjaV42_XUeHF3m! zIK^rSH+~$SsUaR7fw0hLS=u&@?61UcrZ@aR06S_^x&Md{c9Mr9FaWX9S)NY6)?HEV zFV_LrA*S7cFrwhTv9AeOdX2&Txd^G>P@LBNsFHtl^!UwE$1@YRPF&QD6;h3u@(-9H zOBx#O&7yPWIfrlC9C2tR85Pr-NxM7&2^uLl59{4-{3i-P5sU0X@sD509IaI~?;TKk zt|~qY)1yelAoxpW$WnqDT!R&0Cwe9Qq{6uF{M_M!Cr!JbRG2?B0Fq18M;xA{|6CiL zV<8GbZ)+C4YL8JvO@%J@`(!>PQ?n1&Sys{h7uEncBQOQS|=CC>}{{xTg7Ai>i) zdbT&Ddn=Vm66B=3m|tG?c3`G+qTk|(VoiY#XbLe%m~2}Q36$2T_c~*9-57qAjrueq zdXm-6C#C)e=5ShMBo>SSVC%L!RPxP`>wZpYiW`G2r)*k=ZirTwUdaQf)1Mf~w!Y}@ zj|Jo%^OBH5@3A)i;z8`t_KV%|ZsB6#f(-x*Tq2Q6i(eOlvZlgQe24g+si?`SS&4Xgq#A9P}q& ztH^PfGsj^eAPCq?EYvMtS#eiX)CU$pq*KRmv%R8KvpD;_gu<-h(n21B3p zDBg5tW~;-_5#JH>;b#Z9Pa8f3A)YvsY#9cjqrWT(;(J)yg+_HVaHYiOyd3 z(T`r6N7!~3JCOXuRnbN_2IT}e^*j|nlduN>^X`3O?5J~3v4JFFNX9m65Dxx~TzecJW)j;2qL(@^eI_7c zsE{YdsJnx<4QWJqIHUviw|@EA@d{XSaGHBxt?NXH zDGVZ12ueQY2dft>iCrN*mBW$m==JMMgUTxJlU03gW*y%IJr|ASWlEF&tKdLQJQ#9j zv(?e2I}KJoUPazS5y?zdcKIJ}?JrwR(2Ww%O5*2u!Bh+(#kr`U-Pgced1sEYsi@`j zs@ zyj2Q^K>p2M`k4&W{(2+!`T5dC8|rNpfEK|4d++b`N952VT|@apisDE46Tca9e-_-L zc6(u3`e@6`P|=r^7PlbCPe>?Kf?`HGws6cKrrqKMgP0H*{A|y;&h{I*&sln--|C== zU(W*oZk`;Pngs4&tpav(_|0n@Fd(BrY;Q4v%XIcDSyCdZfb!fP>q>`&Q>zZ^RNgcL z$Doo+NE4L?c!_*BhnJhyZYQLpFq!jFp4#WK&E(DzCDytT|MvdQ3@}p~AWSOz$9Y2( zgEr54*)3Cnrn4~{{+eJOQ_GuA@82&3vV~9^6F;cUZa)LX?wU(~3&Z7VjL%bM^3UNv ziv@HeVY3l>yb?7~`of8_2GSSxM~WuCTgr>qzoR^75jM;cI{r6yU&V_zG`JGjWFcU+ z1wMf~f&DdMbg-2DQ_;&QyevBB=0`(jhQN(E6}W*^7gCOr`(r7s+HICQgf5mF<~=e6 zX~}!RM9U}>YsT}maI~cZLE9j%WU*)tVz&%?S6oEhVg1VO;uja{JD$VL_1JG!E>9dk zCiPSMFFpYP4bcF(ievfrd`ygmE7AuF4KO0Oi>Xt13S9cWOn1YQfQ=U02+2>@C`)YHq(Qla$~AWEKooyGUCl{@of^!450UYU$)htdVDn{fD%JB9Q1mH6Q@ zHuc5v>wTeF8B!|zsIV@m^g5UhX`@8M_}U*8YjR(Y@;MQ>wvG%Hy{@#;|Z}Sc`$I zduz}mrAhVXHjJJ5WtppO zewm}r#(I5^*D8it&%xp0@XXLb(SKuLJL$Kf0m`R7y+36aZ<5{?%o_jLjw%$qiO&1@ zOj=X(hIWfc&`$K%zAMeen7G#*-rc?le)P*oHCPYys5xv73xG9Eq*!}oI-=;j&dX`9t9%%+Iaef!6;eg2jdJmg3#5$W1{U+6# z>4{qVgiJyy+LigggGAuq@V?Z-mIO;T@V%@3@k`d7wajw(7~i}?S@)X~&DYDz6bkO< z-NX?Z6W4Aj58aQFe~~JJ)o)UoMlb5TdOj)Ma#QO)H2$+;xU^nIX#hN6gD0>4ePD=H z9nrF%B0P<3b03Qcz!<>|m7Kp%Q8`A}tUcFLjeY(gctxS*Mn<2dB^Rrm*bH}zEPhwiy06JK9 zvSGO#=*>i14E5gG8-a)!gDw_t4)CfAfFe@dh?Mm4fp`hAmj#`PnX~^h?KtemJg9QR zhjp|P!PF%#RWAheh$o>oX!!~6&`eE_$6Xh%@+ykk&J@qhzANQIAN|{?5ONNu!N*7Y zeldSDLSl5+tvhEcz%yoSev0UN=>i^$v`dO_t__W%zVd%rRoYj;&u_bOh^FT|c8w-} zd3@1!7=?}6nEKsDSML%~!!?QrAF}6=&Ob{ulZup$3hkHYv3X7u03eQSgQ2QE9CChs zs~5m{oK`8rc`jtuI5VVRuvD0jq-h)&zG%n=rpes zyZegQ+QjeIuPzJDdTsirSP7T9$FYi-<9vcz#;$C=uE;T{W0NF$EnrH7Y5Ey|D4sX% z-J_pEl0V=e3epUgiLv>u{L$6r2hKg+s+X6pe#gJW1%+GD0D4_=ZFB9(2!QL%X}xOf z!nC6EqZ4baO_q@gevBk0=*#h;?Cua>iqA+3`vtrGZ0s8^aGV_F5qsDR+!k42erl$2IGlE<3uANnM~>h2#=*?h-bSTK8y1vv@&m%{{HqEuG>mz^?n`Gdvq*0?-nJ#ge|)19gDD4u zsGIZ35q4J`JE|!vd8H*fL_DU*IbGh{K>cF>70+KM`*w-y-+IQ$C|2J$v4EAE_4Z~ z*DVp{_M6w%wVONc^5!3wjT!$RQvUFd5zEERQW7x(r@O9O;55kqsFIK6X|F=)q=68% z;J~uQ{D?xumQ5!=JbDh3xSQ&#z)j=wijSsZ?cT#=kv(p zupak^(guK5D+c58>0)wAB81BsU^u)ok11WX z#;X{8{KUTP@`w1G{>jJZ=O>|34*#;TeIO{TsU5aeQsR9WG9r3_eIe>J>pEFU^*{m# z@sp&Kk6@G_dVNSt7J^H+*AS-?)v46@0-;~Z&{+_M8AhKUeK^{Qw{*)aele1BVxHrb zRY;Vs%K&WNdzFug2|En?+0zRG21L`2kr(0l*BVvwyb6_L6^|9skIi&;&BE~#4J{mC z>Mm=mgTBkf`1i8QiH>!( zt`@vU-g38WD^}fl&2(;FUK-FdIg7zqIE+p8l?U~Xb&CmCu*AToH{L}U+xhu&i9aVq zzr&9=M0NpiQv8RzU$TaqcOSH!ebx0}$I7kalWKof^_&rkmKPJ2R=&gC2T7VFK8ub3 z;j%UZPIxMx$xTEoXA-?^BitUUcr?j*KM>ugbiq1`+3ci};JCqISVdy}iKPF-~$ z0+W*9@k2^}RCqoctOU{JZ^KfC7N>Q9*h#FZ;}N~3-SlqK$~Cezp=wHXiHu_E9P!E} zy4RmgaFC?r_{BW>CA9)4#{qA@l7zDgGG(dRkm$AiVqUDi-^FVgc`i{Ok^QF_U8D66 z*=~G&FeT`>yiMYBwG<#lQfb_R1?2;On+{f8v*7#4Q1jHEB~ocMFY6u7ID#}7z<||1 z&N4L4qVyybnSmDM2Sl7FL<|jey`VOnnywFom=Xl6xLtp@8u7gB*;u5GwMWX4#NCnx zcH_fiZ!O>QloiCYeIsX6QZZhBOT;nf+xF4ueGeMvQ%pv;?`Vna54RMLF@Ahc7{Dw9 z=8tWWsTJSNN2mJiupa$n{DE|~5)BUiH*BW_ltWD+)%HehN71@%`_~lr_ag?pJY)LB z-3$$yh=pEV1%5XMR=olp%?P8dW74qGWn2bYo>QeLH(R2uQ%GEwJ6ro)6Poa-fZtf3 z@+g*YDHx!XMWp~#N{CQPy0}cv6E!RvzPj?&Zk44C)792ISsQc#01e4A{c|~JuB92J zmvPs&^DeJKhNC{SM zE&TM9=-+g&C%Mhc1Y03ebGbbHR`$Ca#q59deYwB4O2361JZVPIZ6VdHrOc0(8-?LL zU=n`&w4Rl4Eo`73!w=3kh_|XjqMjKz`+T$Cnc~qS>JON_z1N$k`qUMJ8i+3MrDX8ZjBS?lqf;`5^%A}VW4UiE&BH(Q`e<_ z{l=Jb8d)Y_?X&8hMza9+gc53bV3_E;Dibd1$26-Np9IzH?`C%iHK9!2GwS))P8% zo#blhGe2mp%05~&@mwy(qZWJ9vH4SosGIzy4DZ>yo-6_q3fxDU4+SQT-~|cS+9mRZ z>mS}X@i6paj+b^Wd64+HfrZI}PGK7%c5MY|XQ!j|qw=%EO`e0Ssx8iI(BIO+M6~`n zZ@Ww?hkk^IV?(rIKY#oZ0b9wbCrSu^qUohG?3UCudP;o@Tlz)J_}4Bt-83Jj*SHJ? zIqxe{o1(iQsjj>7!Vq8>xqW1ID@vbmDyz}^wq~(~hun8a3{C`%kovbDy)JvJ(U9U- z4&2NqY?NKRU01zd3;NP}SLfWN*XWUt|AQXC;+Tj}VEPAspLMnMEHB5w8hatBQ@H#a z57$o>nOd0UA!Lwav5w!~ZuGL2pntd9PH8X2Ja9zCIA7u`^ea!-FU^yPJs5xmV6R}3 zZLJO>4vI@KnaH5Rb%_}sZ%^Ux=4pKCZ1N~JT=!|#NO^xU;na?d$PLM{D_-5Xa{@`h zrLqDJSd+BFKq=6dZ}xye@UjP|kB~t^Qe+F+IIyAyP^hn?z`a+>-2$8i*nSjUlCEbAR% zDxBLmrWbK=$ZPm0rB8?->u3iuIYqvo5&hs1=;nsuRU2ecN-vz8mfSO)+IpL_cddgU zc2YO^vN5|yZEBWl59jjOj^Ip#U>V`Pj~GGgf7ZHynNaJv2#C>Tw(!Igvsu-;a-o>% zA>%RFe8H(~E>@d)O8>U70a@@OYD^Q5b2hor(Aajuw%Q{=$@V9fT@Tg5Y!E~{b_$|R zs2%#>1%R&OmxETkJA)@c8R4>y(&TgjZGc=RMYzRSrk-Ei+8!pj0Jo2*wY$3w{drPt zS=Nn`1XF=(lp1-u+-lD6xtFnl8>}Ee0anp0uk1y^9GSlVg=+IrB|oqnivGQZU$l-e z;oK}nHh$-wRuNo3QZNT!@v%5Ja~OJAKE}g|RItuqh`J5Q81x(Cxe6BXV1(TF#79M4 zrb(Z9a%H@pSSON;8_r;;f3?WdHuW8$@u7P>KUJc+aJFF)0tcc0>0hgTk4XY*AlT?4 zGyy_xhck(eU#_D4FZ=dip_qxj+f;OH%E`W(H^-;qH5_A}pcG}J=!@q?7D)e0Em#$R z?MG^{YF0ZYPMPLO?w7uQ!9B$p`!@IU01|*C3FJUQal>a_c#g+N4d~L=6 zP&aL;a<`%OFK$QU=`U_`5$)TLDI`oQ++*pU7k;R=7IgSZOaPBmZgOe$GX)XgZW2iv zX`FZYrYiVxv8;ix*uW!>lE6k4$H^)Tu4tfEx!rX}Qb|6qO}W|9(22i{D zA8&oPolRW$>FF&GrbL$nYY4!9Bk3b-D?T#?J3<>$A% z@X)XTmWBc~7H%Bkf!XVI9eU}$MxzgG$pedDt%ST|2XaX;bGYi5>qfugQ z%elxK<&qEP)5Gt#o{Joi-m zXV*Ui1R@63CfT#H9t-?{>Wz*z?=gD3`)`iaKfU)(-XmEY%=b#8%@7~u$R(gwpIpt< zzKe5DEl%%tyb+PqKpQ3hx;h5J?0K3*3MI08VVwwIWJx8pFe=>kFzcs%Oyb`pLsak~ zshbH3l@{I#PpKhk<0!fJ5-?mC$ z5ISMK=^~nrbU;NR^B~T1p+{eKuRkSg$PXl~gB7%*3U1KN6|aIGe<71-Vfx}>aHE3} zyGhn1XGgg4l&bP+Hg|-;7#SmmXzSs2q~}E40U&o59cpLxPYR3io_ruj9$*H<>Wpr| zyW9J5A$mI1=4r9mm?MQ1X28i)MU0<_H3os{&vB7t>y=HZ^pyD`#uUUe*PUHkWBAX zpgv;{Df&=#JDZu#@}LoNuv|gp%crREY2)gcrkeIsa1TTXMvBi;gA(=@)TLaJ%TinD zE{}`vdK4;zWpMalHKgjw1K-;Rffcyf9GN^D6A0GR7^KZoD)za)5m+_mEOCn}KmWS$<2ig+1B&RY{v;4?t08 z)>mJHf6bO{N@mouz-`87MgERNX+Mv@OKwy~@ijZ{+M_!MAT3USTCsE!3QsJK`qQzxp( zla#0)N0ihZiIyrHpeFiO8Bh%~R8ddwPu_G3m63hlXy-p#?}5^$hMDlTAQRD0#|T-# zt254ba7E%GW?YM@Cpx={4*K_rJcd#WxBOcCS?6-OsqNF>4Vn73VYs=$wd5L!zjua%mJrOj9KyVc>H+VUoMxJg=Y$MxRSv6lZK zX|lwv21p3x403`2itzlFSMFZ7ZCw=OE!;{LBI7-%W=uVSe@N+uk>3^HW`Ds4BPo1WbLWcAkXT`VUJRuA@-FGt6DX8T)7+P?>-cv&oohXu~J_v*X9*yk&;eF-cN5Q6f1mewD@b{ z$s-*(_78u0`{mv6(xrQ=SE#OBhj=MYX(z{O%bBiQe$d8A01KRAoM~T$-hO8KsAHqT z#HHZqxpIHGvcr`(I{5n2M?Jzn>NEy;WRApa(3H(f#H5@*X%zR{%x=7Om{A_q=H(F< z1ktL{hJ#)vSrQ7w*}#$IQsmD-aXWSnU%5&hT4Kyp=HAKMMMlWcU0l^Y^-Z~*-ef24 z8QuRPv()t-*2-GVG}d$X!c?4I(zCZFlT=49E|+qPsOG*8pFave$0{sMKnKU}=j}(; zXW425Z(?e2qZE^qSci;F(oB+mpRiy|*?N<@AaK{$)=U+sGY-n_0mg&B$Bz(RuYJGq_27reX{@fQukWSS z8xXSjpw#p_hE5^!wuYlGIp@pGtmh7-pEV_%MPm1--}+8bb)jOc(9LV50HTWWuBTdnK``EyuBrCSyZ7C}H<(am_*^D6JzQ+k>k+()@T)B&;9 zq?~~aAbAmMnIPFba(bl7)nJ|@qoXLO>nCQ0oToYD z-7nKbm}j9`YyWUtd^%8D2o6lU=Hbgiji?`nG7aD|O#SjKeAvNAz|^@4(vdTDc$DRi zI@}rTH!-APtPbeIB6KUr{ivUwQSosMM<&3mGb?PZRs6De^>8A!Ys3GBla_d<_n+Bm z4)h~e;+B-lZ5p>~leGqYjx~d);P2VNK{Wm@61fH3_V2|CN(_86d`mV-b~*dX zmROEN$&_d*8o$)u&lIk+`)U*Dc}gD5_L51{zNn55S+sauG);m7ld$3(?bun!TyW{I z+`fI4EoGY(K#Jk~Cxu2z+>XsPU42g#RGL3Qwe(VcI!PXamnj3>3FHWXqHC&#d`^5a zFWPrU4#>oz#}RB;@iMh+#y_)L5Dj`3eCj+bF88}wwHA_tJwClpb6QA?L>O>VXPF&7 zkxhT(YEB>=+2v0P@e@58c|*5lm(%r17@xg%Q0GblYVT$1MkHi&f_IzxW7gL7vW5|< zk6tb2;=J$hQ&yuWl3Bsx%0uV=;N$@B;0X%Ha;}B)3#R%9EUP#pi9A5 zVbPL;yV&Qu`k5eE#^ezK`67-~o-!sTijP`?T^z}nT-8(`pnlho8j-o<_{>YI zg!1#Fvn*K_p^+`Z5gIit|8@=O+Ws$nj~fZj6R-%R!`ulmGreCmeUjie*ug!0Z-1S_ zetxv&e=e|a`MGNP8&1~0eVlc~Ee?wcI^5+llBD?J{%g)k-}4b`X@Cs9-jg^1kPZ5H zr0|`*#`Rcu?FzGodVt#McS{;V{8xCg0I4|A9t3wNJhyghB3^ts?>aCupicRQyYx|? zbEHx!!HP!TbVJUG)E5g(n%W3cUCvBd0qhBGcD(?hr#)0jEDg41lj@TO3)L##qQ+m2 zjt_{8V#kOP0BngEG7?Jwu zEP(Ijw(IF#)!j47)(zH_OIFAdo0q$h=9Tri{y@%>i%FZ(maA>tn_$j5gMQqU`P2e zDKZio5W?t;kS|B3=u+~rA$kt556SzQ zPcsBx(e>>o>Az*h8Wh1!<`OR%%iYKAPsLb6OL0LR^PMUvlIMI#W(xvV019p1H~xw{ zNCJ&xjq?f2yf|sUSuDo$y{|cvZbS*FThNxch$;V*e}LL6R+LB2v=>n`ZQ5@SJUxie zNG;()=wo5XH)0AQ0%1HW#qsf0^^*FhY9iRFQ9k%Y6iN)d4|hn1K#xYUIY*dJ`EL2J z$=Dp<#vK5y7qu7-;X^Stf$g*E#(qvGA#rkgh#8(Y~i(v<#f6Sch|TRC1l0?ebl8`BQ=Yei+Bf31v+Mh*dq$ep4cUqnk`735oIq`+`TO($8sWqUYpFFG z_Nw&4JOH8`*2f@}_K_#K0qS{8=!~zz*~M^tA2)Z;s0jO2K8mo}Pf5s4Wc7*|q!L3! ztaY3{9RB*_$|d-C?kk7gQ0Vsv{#y3#YkRQ*4S-$|H8}zj^9eVKvgJPFlM&v^1qO8i zNN~DVi#?Dc&HNkrOKJuuH8Im{9yVA0@RzkM;BYX52zc4h?nMkho_Iw${o9b7*9P}I z?T^>3yfa6w7s74rP=f#Q;hR&aIE9_tFF&u#QeIya>blM6vQk%ng=AK(szCkyCFekd zVxpJIp;}C>Pxy8t4B2klBWKKY0YBRTwPVmpUYG7H7$R2?YNJ{g7Z3PpkQl3wa}By&_a5j zI}a}H+?3@}We&U+lxRzMSq@dsjft+tM|G)Oc%Br^Ka!r1IFz<8EJv`Pe(!W)syWuf zf4x5CvL3K(@uExhdgNf?80)L-8Ym&^R{qFu(nbo~iN&5CNDupwOM)M!6s~w#$Kib+ zkfaN+LZ`WJcy#YZ=FV|;#_4|17iRii%YaxzWMb^<7RW;$MlaE&p`~(Jn)mMOPwNL+ z6S1ycb)Q<#f5(_ci3AZo;XbtLTdH^31#C(*>c@*^egzFitgj&@&)uZzv;?lv)=Biw z4raRN53Qsp#>??DexAXM*kn@zy6JF!v#>%^bJ5?=>#nH9XTO-HYSPHFs%87{5o0gO z6mKC0%wKX3ZcGkxeRFPcG2rH$VIP9avlK;`SD2*`)gKmhKWMdu4;@bL?6A|u0ZO0` znK(&_e0}dIC2n-zLn2bAHZE@JJ^d2cBa=8)x8tn|07`|G^b7dkY?NP6NqN4Fv!mc! zbbC_FjNQpi603m~%WLQH%+!pRu1$UFIitiwM{+>VS z^*>c-CJz+u29D5xz6!`~Jdth-^Ud*U1N8~N`B*PEfQ+%+d}<>nKFjnLR~45?^@^R% zg5SWZpAP#w;a57UH9^*C4%tuQ6jFV;Y%7-RR_A>dGIt+7EPWF*u*FL?>~E^1LloY^ z&y(odT*IqnEvTLiX?6zZLc)>*NNa;f>l0nU8W}d7<~uariXA80)X4UlGSKf4J5>rV z!>C-xCvi-IYno)~A=hdW9pq(!HVzkx_32GbLXigcB?RInj;R86j+26_WnEMag{1)M zby?ZmnB`%nJ~Y%uj@P39*9Yhrg4}9(g_0dg7|6a6`E*}2zc*iMYgJQ_>p6>WFbKJ>Eow~Jo-O;iCUbF3vPc(ZvEwo5_IWAn{ zYuHci6M|0)&uf9Y9=^!uh1`}C4GgBLm=-P#&icbSgQK#AD^IF4Jgx#gJoiOmJhj^< z{U%l}+U*R|mOSdlbdfM3z zlVX~htD39|N!ivr%`Nx**BSXHCJ*w)Uv3pqV*L1@Q2Q(7k`ae)IDE0w(cku9c67dJ zqfxAq<#|xNb`L?@$AC-DF&}zM0zD${IPD#u9fAG`F-i%ywnRE5vXFeHP#4Y#1rMHG zEfLvmp*mMO5FtsR;!EH!2xGvWm8g0sc8u**e7xMb1$iv3iwX~B7g>KD-E&0@^xeL! z0edsjuBa4HSbu`}?@?1wHxqMk0rNpxw87EQYnvjLSGLOH)(&+t-%4p8`^2S>OT9zg zf!Q*I9yzLu%GLyc*E7`U0?5f_&b~K>D-g08mFH|{aixD>s0`RVU0pAxl%u(?psD{t zN_G?c&*V(C3-eEbi(|Bo&2aAQ)Vb=tS(gh(f9)DED*7^9>!GF*b^cF!3@!E_$~J1~siqNKCo^uzTJA1L!~( zzY&*XUIjd-JW&Ez1cqkI1C-%xVbGA3mj|c&2!nH}yJ*M+RD#?}Z#Ya0??YRj?m{8P7i@qILke!2O)DS#HjlrU0o zu5uBT=QMIWf~Y*-T3*Z_)Q4u1w_2H;Tz$Z!^NBq<>A zym(BVyA_o@1qqac zq#fzVRwSo4W+%BnpAtDX7adq6*#&d`HnH6Rb1#-zz8N7^ z#z)>v6aius2qvh30RaI4%RUFYG1!_oo8*3&``+;TX749{ixq%)jmx)6mq;X%+28g2 zRK!hok~=H=y>bf!=AHp&MA_-v_!Cm5`k`pzOPRu!wU?mWsV}SZ%~d|B_4X)>OH}vu zkPjpg*_UZBSrtLBwE$CILwcf-3%USwwdU5S;X6DL&B0L+=<7z+!{+ z^-jy=;Rv7*p{G_?GUsL|fYslnPMhngenO?^j;a#3V4_6z&L&hjPt{U%z?Z7Mrq%gj zHDEIak{GtT9xV&$8+-!TfE1&9KSXuziqE_1X*~9{UC8nVgBlnR5D>6D(k3E#{+{tYg{w?pkat`|HD~S%O`gABRUPsPh+j8A1m*}p3kp4SFbN~&WfU}y zQ6*|!Grjfc52yG4%Fo+-TDby| zAOr>k1OzM{@k=5r5~x%F=v{ArVedPw{dnll{*v2cjP^+>gaznl>9WvyVD_Sqtb#Y6 z>vHQC_Q+pR<(p01Gf?P)!JZ)oB9yFIh>PM4`@5Ipmlt)As|to&7L`j~h*0{Esz30m zh;7wzR>VObg(xb4ovloz2qpWQ35ZPJsJi;KQ0peg66A%y( zu-LP0UfG+10CVWypOAcq?~r?c`;!b>kIs4nC<7!>g~iO(31WECCv~eAk@9CG7eq4Q z!%?1GB(Yw9T`*GEidnxcFMHN3wgT69L{JL9KWDeX9@)zaN4%(8$=iT{uhhV}%v&kvea%?}nOt13M+40h zi%0?&OFR;v;$j%dx0mN&b^NnFHkz=m7Q2UfG&2_$~AuEP!d`0TStB=Gu zKuDy;@dorxx;XY%$}K3By`vNoE^Vu)7?vu7$@Vl{7ztbq!q-m?Od0WJO=`2!_rCEn z$@iZ4Y3V&kP7Ms^(E$Mg0rP?(o97o95E(Od?V8@rXM9}WcI7=Xb;py@*(jj#)Q+*j z$ODS~e*B;l&H1NqsF$b+@p^f9B{fi*muZ;LbBY>!9XU$M95PQm$wRT$oS8ggR@C?A zgigHgb6NRAc@`@veq7ogJ}dRsb;~bZzewM`CRVTgqfm zBw_<_`^*Q2VJOFPlC>MQ`pWy<-$NS(lW537{O-KOPO8Lq$y3rwDqzLO55S_N$cp%6 zP)Z7+RBB?1e8BR`OPsZ&1Tp{(%|{#w&Qs93{D zQKwwW0<6SqON!lm$)HC>rLR4VNBK&o(NvNKJvW$2<+A}0LCHGgou!wN;}1v5BMmd7 z(0dp%dhwUyGym%OJo==ryH+CSQxy;p5D-uuXGP~@q@V|V*N?qL_Wj2n0sva;0Vr*Y zJLWMqFXnXM=Cay+Tb+lc5Ie*x{?IJYF4wI*|7Ao@av>+L@Fgh=JaE;%B{S&(ho!;y zTHH2dZgDk#UoT8pa`qs~8$pOCMwN}Ii_bERz)%NDPoSgsLxk#|E0j|MV^{=-T2GL5 zSs6_~3z%c80Fur5qtVCp5Tok~L1g&rNY8Vi0e)3Fu{~LeKk;4>X z*!o8X1Ox;G*g-$FN*+b2K%jU1{!gXfSu-R1{^JkPItgfR(RN-nYB5#4ITr}#9k0s8 z9=o=xSt2m}&v3?l1*j@#WVni%xVak0kPl5zxKUw&fS+fDu_=Vqa zA2P+ zgz7}Gkpw0%bkM!17XM~nIEiE+CB&OFcTR`d_1?cuZaVK)bL4ZUg4miyOB#wq0s;aa z<-{+EAVik<0eaW({!nuL*u&<&-}xXYZlk>=wOT@=P|7%8F6*yKl`j=!&L?@<=g1>` zd05zmd<_GJ#j19B6wYhCL4}z!JBHNJV$ah=C!H2B>}ZSL|gndmjBUB!C2W zaRQ@Hxkn5jtYoNeYsm5dW!|f9{3;FRiY0}&!Nhq%yriNemhu7nRR*IdASrnS`oz+2 zAtww$0z-!uKmr$_@(ulC6ac}<*&=%X1?l&mcW-a!OWz}=YeU7MNF*R2;L%C^d`lNG zhd+Bsa^sF0&Aq>O6(Qb=&Nc%YF-{qzD z`VGAswomHa?|wFlA`!L;%>e-c0Vgu|(;4xzmM(`rwXJu{`B&-hKmSHb_FRII?E)G} zEkP7MMqaNq@+W=${W4!a6qUYG4*#0SlD|?_W=8%vm+x#9aK3mcsUvkoGFGUvBMuAC~6oAed*SM{k zHBatX6F_@9S3m!5W9Gg+B+0Bqu`hx2h>`e(6;0lNQn@V1FT9|E3gWy~Krh5w4ii(I z=t(~US+R%7Z=#F@9&j(H1(*5{Zv!ybLB&K6Eoh%%h}&cOzF)h#d-J9LWhTGA$vS&R z0?|r+TFOJ(meTYqK# zep1jcKfIf_UlXeT05I$#d{Xh@b#Yp9svo;au&_ia=0xGLDkHT%utiZwb7Fs=`8gL} z{K&d^!b^=Xpyu5n<)#o+%1sy!kp- z08FChqM>C3aQ@7*-hA0t)kU3lYF6@BcG>WizoKX)s|~1x6RErmY7%&A zz9$4i1mc$6ZarBkneNBrlpqB#{_HP0#W)^Dkvg^nFs}r@d=d)NbEyQjpVT%CT$A_a z$^;97RJv|adtfMDqp}T5Ze&Sbqw0R@<2;l=K}80ahNlUseW|v>vd19i#Cx~P}#ddJJ`L5NbD@S#I~U_d~?@k;!nocML`9#40^ zN`Z&p>dj44hBbsuS&dQ;W5MO$sUfUNRRs-A zq2S>SqKDcvPnz~UlEhOTtChip5-80|AT?D9D*)3lwAZ~cED4>Bo<^72?a6u~b0aPYgYBud?oHt2J;ZcJ>?Zt zo?@6ieU(f#J*BfCfss=J_f{^8V=$-;Pc8|PCiguJ2;l=A%mO$iKX_g==AD9_Q)2wz72vN?btpsaegGXF{?xnG7*{`y7d z%6@?2+0LL63LY-+uYc$_TVETX7Dy7Xo*Gj9V~rHxk&~{c(Z^cGI7I&6${>K*Wwh=U z*BA{rpU0uWNat?{(?s~IRl$7>qDx=&)WdROVS~yzj3PO38@<@FvxjL+L-dru>f((b z?#@-i2!a_H+U+TU%dPCqYds7}2)ric&IO>}uIKf>|LpzA&Y$=*baw)T)cObNI1s^r zfPfW5{MaLY=IYC3@2&aZ0WLeWAjktk_g6ySH%^57{9%n zBY9biHzRQE+$>4coI=Qy=18KV&N0vRE9Lu<*S}ZF)the46X%In5K8gLVRcR>7a9iY z78{j$w{*+}p7z%uBv$&#&Px8W1`Tb1BTza8N@s>7K}ui%+VF~hvCB{5VJlLPT`Ra8 zh5!~x_p$!&Ms0ZqNx9s0upZP?tGsgW1(LuD$rCiFdD8H!kXKnOjY{x*Rlw%ORlSR( zF{f8(KsrL>MVW%o2Fqrr3@%j%wxzo6lm;1v?!z!LfoRJw|7yJBz3(not78yZQWy{r z5U`wDhon(vtW+>VSAHK!BQg(1w7AIZ>nt(;9T~=g;QV&)u1|**#7Opim~z z>hI7_2+jnPajh$cg60l1b+D*CZmT44K##z_Bv8=5_1rv3V95l%ntWKPPU`!#L4(r} zED3CZu?0Z9cqDMyt~C)m$ZCb|{g7z&RJ8eZzZh+O^WTHwKm-E<0*)>5>)mxy@BTNx zTlW9^PZ4oO{8C6y0ib2uu6fLfQX0#tEP6DNJ`~EEp&o?NyebzpJ|?+mo?qQaIpJ!` zvzwj#)dZftRxgztzw9;gd;v+ytNJGZ$6#Iqs8LXI7;5IBA^8j$7-29T z=F4UKF#UghtbhF!)f=Y(j5+jgrzW>t`pNE%=kCLS|M)5D>;T%QC6+NI z$G&^VY(*cXNr=6-TA(ViG>QS^3`ICGi&3y5S&~Kgmp&$8^Lit+| z`2*EHGl=|QPUO$hFhUGa8%7K$Jp#y(Viqfn6u_G2e~dC=V-8L#E2K)&?ksiA`;4=K znbWsfG#GkuHf7j0abBpHP)`IUG?+BY!p4%i5oOgLhRS}1wNQ4sGB{5qq$c7U0npI$ zFn}(AR-Zv*frH9o6^AqvLjuwW+%_0F*AS1c)4SgJ(U}`h-IeZo+m(R`1_T5w!F)!! z4;!fz0L-CJT-?3+qA&Muf7!h}R2G-N zP@ZL}&s zi$@e7dQO_zl7xYaYpJX%_fgcuf1Jq+Efz5!u+R6&PwvaiFZ&j+)TPbAIf1T43vCBs z#3_Qy_yoPEU;~N(bCl705E8GwFWUSIuZy<)`e&^75<+M=ARu6#!_@DM*|WpN@!A>vTRmCt9>>;3jf6s34?tq4}KFe{J!UK)*k6sj_Jp z5}5y8Rsy}R6k*{S2^0`*0b$L8lt5ZBm2GT5u~h_<2O-hggVDy<{%W-CEq`ASL5Tou zhOMd!2ncvIzz{^D(u6y6Yn1MO|C{uI|9C6)cCSKf3!qjRh?s>Fza<?Ni{% zd{PiYDG@=2z`)QHY+o|2b~bhMS23Yl@<(}B4Wd4iqX5KqTZ}Y?Vh1aK)p?uzIBiY& zliXz^cMi;oKxi?FJ{r_NjzPUgpt`$<*M*6JDFeFbljrc77v7mgQjbFd2o64;~y)=1zYA7`p>12q`}l2ls_4h#pQi3FB*GzHNn z5Hzc@) zI8x<>u-I4qP)Go$y`4Y)9_ik(8h`;smi&c+k$`|l6YH}!E&>H&15ycO z2I;PMzG&vw$KKT2`SLr=k*~g-+NVL2+J^QCJW* z7JB3bA>xWW2nJKoH0kz{^F@1RF|NYb<@hlH>^-pOg?rLG!5WYJp~30}&DFkA6ci6Z z{-ks`$Rn(^oO=Hk8gL2+P%okuK%)>MP;C8a?0zTFd^nH+O#7O#wg0p)_@)X+sO5R*gAXQRA26zNg!^K$* z2lq{4mFk6`fUp)sTivlX%R3-1DcIPa)H*WVhX82s$XTC?w!Y=pqxCQOez6%k21tX* z1XVB~;Dl5A2q=en&GgM}{m7sFx<2&jH&budC|a8VwGMzJHWzT1PVh?un(KO`Y`iQ| zp3D5OuXv(C;qk{1BrrJYI(l$jnD7W5rAZ7+?>K>3x4NcnsA!vXv+Z$7~A?pGADMEQXIzE8C$B{UmF zH(aZ;7lrsFa2!OZxWCgyKG4VLX}=^WMk#<8$pIL>7d(3LP0^M&yg6Eb#dRww zfs~$01y(>nz=~siWGi%wq7DGi2R?Q|y6+#~ZVr9%#Y}maS3^=69OgZiq1<7KmG*W&WzQX*Fe7Ey7u@hu8E=}G)UmSe zy@UaP#-I9eq(EbDv)Oh?dXS~c0j!X%GLafoej@cMBU!{TqMsRbcH?>%X4CpSdVEPvMed5IQ8>l5yr2PAth>D~3SpP#<*l0&`wUiVuv zeak2S?ZU&>Pf*Otx~~EP0%noI4Cf}g6r~_&)4dbvu0MFy%q@?*t+(^#w_@U&7jx${ zpnX;X>KI6(0Ey->o?zt|I~TrvdGFt>PcNL2v-^z6diuiF#2F+oI1ItGZRgKu>;Z=qUoaDlU6q8W{`7`3>9X55z^QwXel0Q`D;;e$#_w>!Hmj|0Y&zbxI z03r~N0o;Z$)8ORLT(8#%2B1wp|1SGyI`8n)%2EJb4?CH@VS~Quvb`<~aL$>HDUHEU zTvh>TamI8 zF;Y;ZV5Z0q)Mp)J!y|Q?VpnIpihjQAUY&$s$`LRwk-n1p zC)VIOcl4u-WO?dYJ||Y%6l4V*QYL>Dy`>VX$w)0ZWll;Ijw%XBtxr;1;O&5V*Sw!$&Ng_aEV2zFbb9kN4loC4jyk;CE>!%-s6|+w-B&qg9~A zR05lnu*Q7A=KELrk-%9A+`>p8`B$%>I7@XBDAnSRIgvmO5QAtt2x}b)Y`Qa+>3UoG z>)L=~4Hy?5J_Kr=v@6>9%0E;mz4A}FeTG;3rei>~%_|JKf&l@?nDi+?35fErnVG(2 zR6p{b*XhIm{VUSDe+%4)xMQEnNT&Hu8VnoVMx)z zwZf+=d4GM?#aTnY0H_64>p*H9jG00-eHX|~4Szm4N->j0*!I8Ptakk0Kc0{G-wGyx zZn7kmq&t83z1aVS*P|09FmuZTBmg~Hf?|+CDxiOJRVp*YyBMqO*s6DAt*B!WxL`jL z*wigVnhKldB6pLqUV*e3kRDE~;*dsiDb^ZBMbHyu(!GEfL~Eb1VzM+xk?wxa%k;rd{j!<*{?ix)L>mDf7eG>5S-BiH z=~58B*;KzW@hfuvGJijDx{E+C0l^eX{eSb~5vnL+S?^wdjaypi9FIs4NVVf4jOK|fuYQvoBjS~Ygfu39tX!80mPv01K{4nb3VJK3q+5( zzD*;S^=$5WH17*&1rop{0>!D`{r;zzdtU!F>cl3?4V()!+R(H_#UKq`LQ3~>gGXP9 z1d{($Qwaq(eSfY)P{aDm6-_8Aof?QJugcxvGMCwQtkpl#7C1k)-jrw_y&eIbO_0{`yq>mXts8yN}erQ_B0J`R4rrL@iLX z5frTf^aOZLmA@!Df2@1r|5fLH;}@}j;*XU}0CPK-{Yb9gARK2DUTALj0J$*m65nK% zlV8gRtnde^FfCasQbWz#OT!pN_hFL5RR?D`WeQ*|m``=DCG*_P<1tUrQw3$3Om8nB zN5G?(d{3==!MmgNFZnxapY2P;3P>5mp$Bn5z=BC%Md<@zCcb{D-u=GUriZ`yGi;_h zP-}o_JwR;@(OIVsTA|~~?5n8zprB^x>?R!Y6v4vOIr~>R!gs_KdAK5xQmPzPh##z% zo%eTE?OX4&;mv?jDV_9v{>r;iKaws~+!QgR>am~!-n(8)x~w>*{JF&_`mm+Ytk!_y zO#l?Adp{`IHJ3}ouBi*~CEq@U#~$}!Rx@#e5kRjk+)bOlf@JSAz;kO0mm#GQ7__m} zVaTSE^FcRj(?u?eZ4FadM&EF7b&F~@$U;fr2$)X?Fan_4rQmudKzjFH=|Kd@Ac4RPwi30)#-oGMb=LTi`oIaQdqz6Coc)jmm zUL(`D{DdS2#+gQd)<%HZOBCW=ArGr1B2^}MPr6(`+s#8t6s;2Ob-Ik7 zW0xB}muC$}5SR#zs?DFP}moJB4EQ7e-J>_ z21T2}(Hcl{5Il1iAagK&2B%0(g!abIN0;vT5qOmZCl~=l(H8E3H~ueq_`UykK5gML zVP(;aK`!eGn zRK07=5txIYe6rd9Z?BPwYk%CB$q`a(K)eP}9Y^|%nrl(vihfuv<)KSMk%yIR~lm$@7Xl7&#Hl!l_atjn!?VlFwkN=dcv%QZ=U+DO@dl`Xham zzeZsrk2w2ze*>6g)xK>`!?5+2VYL<%Z?><@+zm?i%`FXp7??5Ov;X1>-tY_Gf}~mX z`iV#YogK{74I7f1F5AoPc^`UoX_dR6myZNC_ayA|L{ka}%RmCR7$mT~%~Yvi>SGZz z7ZTW{1VU_ah}sU&wxT#hWQhjQh9|$3MJ@$UDVP~XD@pf3^bwF6gBp9>r}?B8{WY(9 z;s0YEuY60#wrnmKP6s?1RX#$s;!(P{M|$#GFEsoA?Uj1s+82nKR8VWd(K@H}>C`fu z`RDb~iq1Rs$z0`C@pM3u5<#@{zJiE`$Pow~b?`pTcnOwB`rl+D|Zw^WU+6YpoyU+C&i3A>-&E+0`<&4I3v$HEEK%b9tf4@LmE`<(Lny{(@m4tU)i7oO%=cWias#^ zq7VDs7!;pmbN?g-&FloF`{$_s#Rk&}(;LiFyq9dygvJSa} z0mqfX2XTZCRLkW9ATzhKK61^o%;Z;Jq9?!kKV;^CZQwST*8tI4fLTL~IX+0AEbOcP z19~k#PHNIwUHMZ0W?Z;;#wmW(Ao&$lw1rUMD`J#;{1xPiAY!Y5#Z7+Y`GHE?D%F0Z zmBZsJe>ta==A+qY^xV)~s%3s-| z(2+cEpQKdXT$$ITvYw%bQ37!r9B&3iCqeWic;*fuIWo7Qm|}yOglYRP{fyf2{(rEY zYdBr3D|6)%z)~1^>n-R$a^ZZ#z=aA}VKc{s1fnrFaM_AN=0E~#{f$c5 zL3}CzZ4;2iWRI>VAmN+$x?BN?5{SgmQ!x4vV5UGEgQE4fsZ~$^q+0(YpWyMwe~Z)x z^e2QtAq-g7Yuy!XK)D>gI^j!pL#A)N$Q-@?*>dEXEA`~Jo+V}ypiwZd2BOul*DZ{_ zj?FMly^sHgMlUbBF)&nlU~Vq*$nx!uLU0Ho34o}1Cd~Wc7U5oBF(WS6r;r~#DtpmL zwdcH_^XDml)z3-8rPDNB=01N7d27h|o44cyfD~A*1Glz8z@YBE zpzcGMn{8jN{_T!0Ke&a|+C^3WRyYBK9|ryvdHB8Wnr|2w05r9ru~^2?G&>3G7YfeJ zFPl`rK1$#+kU+mOnPww_i=qT(%S%DL9u%JqPzTV{kgPyN7E!U4T=oRhqy#o}3aJe@OQ-~9Z&a&;myQHFzd&k()wuw#1JHv= zY6;+iibPJBzQcp|&r=6UK@vuK6vi9`kbu-$P`v3Hwdx61t5r|GidR4R8>H4ZEGo0d z$O}slNMXRx${t9XCnpU(`K@g-bNds_#5bO8X6}53nYr^K=qZ3YV6_@hV*tefA+h)T zTypuA@e*CC`&>}-WR-fQU`_dxQbn)d?o9!bKyc8uaT7*kb#J8;1}dE}2z9lr)-OJP zQObFIPDSu@+A}hkbFiWdUFleeH>)&FQRTU);!*3*xs{6F(!SKngQc(XSM~Xwbz0>X zNNohSwg4spb?*dvdoi~>cdPzEuwPwvaKlole=DB=deQgvrmbH^_mQX0HwM&|N^LVe|wbQy{elP-EYV#vb#Zyy~f+Q>&lyRqC8G(Y)>w zDRfF<$R~XC5j_Er6=@KfDs%I1%-lL=rtf`{p7`=J%)~dICdr;BNpi3SjsV19waO8` zmIjHj3ZGGf3Ev5&-uGFw*S(|ZGa?lw&CB!4-?oL0B8Th`465PY^7!4{0?q%sl>0{g z=vcGIAHi=kN5#lN?%BT2<zvT zv+YYs{rg{P$NT>RVq(9g;iH5AqUa6$z#D&D9(wOb(TO!AQS-g$(&bVC8~OzkW-kgU zh+?@ixP0r$JW1f(n+nhB6WE6Y&ijUv1Qcxm#pj~v9+Ey;*JTNzt@cxp z9zzlseHhS30ggdx?64ZS@Y~cm^{dgUXIw)gr+qUVyd zj2CJhO!NSOp8WdBGIPfzX5t%9Mtb;iJ$1w7qK|Hb>4K>PsMP?E0Nl3f9)RHp-*Vn> zD`h-s_VX)lGhg8oFW)ay{KTq#<{$*U67j2(B&jq5C|CFTYFIwDSB;V@t=$U7R;~2) zSXl$JtA%~3X}-%Boo|MC+enr9CSO#=>o2cbmP-EOBG|p;^Cgdf<1L_Q17IdVQ?~== z@EjlHUGAUYP<+|JbxWoG9UlZR?+tta$qgq7t4!sXU%9_V8ycNv6_A$T9v|orSpR$} z*P+B3y$8X{O}o%jSYJlDCaPZ^#Jou$2FdCKAOW}yj?Mvi3&07WdzJ(uZHOD3Xp_NG zuZ(QS7(_5Sg6TobQESN~(*U!^ z!NjjLIn>&VP&u)ks+XB}?f4(@a^LH77L~-328|9SeXyb8HzSFKI_N#iV2GlRA<19= z##b>YTAvqw@XS3x@*rU5n6{Uxf2aKN%_YV-GToKfw<2WFIaF009>Gv=HFea}5 z3ACaVl1B5r9aD@~OB)vHX!g6&8we08H-nV#wWf+?|H+8Zr*p_cw!IGtth;VDw2do0 zEtUrd@}B~Ss<5K`Oi^@-D-dD8^qd-)4%t)qgjV(zYn|fqx3mo#XQZ$TF_X@sXUdVn zF`;ysIX9Dv9K1UAo)8m6AQ;#b^mltp>6$;Bsg zRB5*%KGUj)g3F<4YE=9hy49f^GH#v;i0a3;R`5}IjMiP@Pla; zxN|ayR|DxI;HjMuIXc%UT~_&fPki~oGnP{QJAMeD>w9PR|IK5~oj?B_bTUt)*;rWf zz8SJqvx+kjdH*P(ZZXPNPA&X34^ZSA-gGe(8tlm?(MGOg=9z$uaB#;si z)`D6W0MR)%MNO#smi(byC3 z1h=n?*8Pv~iS!=f*4FRR=%pH>Enyf8hG?!l|68JHx20icPb9)9^`|{+cf!q&mI}@= zdG-@;Qh+1K)JqsA%7w@dzYG6*i|k` zi&j139+;_nseSs_)aoDHEqd=x9(&?_6mJBOqF>I^07RCL3?v~^dhWB^EORR98|K)E zp%RfDZYuG%Z4P9v1b5s7&=X%A0rdHx@y*h`XWSgQ`XZ=}7wF0FY>?hV=R>XDEa^VL z90f1}P-K0WX~czY6+kTkNio^XiRe9g9l z&HE#Os0EHr0=KpU6oY2&2D7l5KQ0A?UMU4pRiN>m+I?8GWXE}8N#h6u)x z9RxK@I%x@uq>d!cfYc^iAYdl;Q2XRN)#zgn!5rBQif@S4z3@Jv=qSwOJ={9wUK+jB z6c>rXEFtIP5E%*1^6qX@rg#4i@W@s`ttHXz^x!8pL3-za$4`@F*SMbi&JOU%86axO z%p-2>1ArF5mf$gu+d>Q&`#O0_UdD?>TzLKjZliWg*459;uWEWH-gCSZ?c3n^Hw;7$ zLS(-?by2_B+#83Q^ZcrnvxO8UeaIj6nT)FWejXXDY1|Hj}x_6sWd zfHQnv1CF37DBf+&cLPjXq|`(SDFr?WXHwFU-+zbikuyfQ$j?*f=UW z0F46}1&v11y(>0HzO)H6vK7DvfYtyQ1CO+&_ps8F-`ND!IR(HPAcp7z&Nw!6U$HhS z8ObARgQD?*OsJ7;)X;ekFu++TW!1eh|4T_u^a3eayz#v;;ms$0WlI++9be;qjT{*~ z3^9A%wI3lX@FmC$+mg)-kSl+4DfYk+%AZJiZfPQa zrM7kOyO(5-G(&Xxm^1my44+59@wOuLJ97un+v6VS<^rewjh^~RbqUJmu|_#%Mz zU@!pFyJ_<$xx43u))P=7o2L@HL6R#{TSfp=6d@yVw;Cg%)nIZt47qB!T)WfIDWuQ1 zB(vQ>%R~Z6&^%!DQ3CB*qgqi&qrcOzB+wCiinaprg`j8^fF4Bm92wLLR0B`+!jKg~ zE-M8fY>LpbM-+hwCN2AD5do&_2qSrCxF57a_wWaWm{>Vs>H8s_afCa zC5ap{JOao*h)lU_OI65PHK5v0@dIkMVbpv%Qz^Z#Vnpi~hlpoaE%iC6#(mMG8a9x= z>J%q+tC#wq)!g6LA1gAVx_IO-6YN@`XcJUxo6VK&-V5&C=L+X!&R3A>0`a9cY@^Xj zcV&XtQr`i`5dnl(4DxqRFn9j!H}hf;itT`z6Ts@RbxNS5ZjvZ&xD=x>G~%MK#v_SK zOZ>7Mftu`LsFv?qA$-(4b}pw9Sd-}+wvPI1DW!pDzBeQ#0Czyq1)$arTPUS_5R(8# z+rF2>9)lCI_wWfpE}ODs4Zx@q#%zuGbipXHob0A#WRe!TIawZuE0U<+2;$_ohJC31 zX|g;*ZkSCeT$d}ETs9SMRNpR#d8@?Fj`bPwn*d}l1d}%WOL1i%r0lFv8bDD}!b%V2 zr2)HKNn6iNq&^Z|x!9wx%?pMje~rWaAo5quQFJ7jtEIe^$%!E44kn90{y+*Gt%HhB zwtkn%Zt%>V5Pf9sA`+<-T^(WVQ~xA7@2hWeLP5v!Rp$6qgjh zYCKZJQvp+}1Z0&}V5GFheOHPWWXGT=qfqv_{x=$d=d5-h# zA6!)fVL)mN(7DLv2KF2gOdS~%%&iU2@vLwJayk13(<1MKG|7W2^jHQX^@T4=N)Ov5 zHwURoVC6o&$dxmf=O?k_E=M4;2O^VB?Tb+o$)!U48f{Ui+4D{^g-r77m?D3?I!#a? z`L3$`QQyb2M)D^ORmwnPe)&N1m+gL2wJ&@fyxihVuoyXxjMtKahvt`*%<*1zDzMb0G4Y z17^{Z)P2H$Wg00~fl1k$WT^{6s!ubOi`!4Q6R%{wME0ntB%z8?G!fZ-ki{{IF14!@ z>#-!hV|z)-ECt8*WRHYbZ;Bo1@Vb=dj(p{jb1CaK4pw^jyYJpT2q$7y#6}B;mg(pSIde%HSNlkP)V}JQ`S@2>-AV<1 zd48V&h}{r(7-Br)M{V!EmeP1g4L*Ju3F>d@lKJ^b`N5s4&-T=x!3mW+6ieA7cD71i zNb@0`5BVcP-Tk>~zdiDYMI(Q(C**(irNsFSOhseh?yiA!gDGSGy^_#Z z5B2u-@@p7htBi|kEk+v@@jk^KjUIo}{|c8r+^o@ALMk0T`jWrm#d^U<@kN^R95M`I zaJ(L>eKLs0f%FkzCae0LD*<$cADu1NMi=jT(jsr@iKqYqRvMLvqBSY6dD?q$=&Nr< zhf_e}=0T#O2sS+Q3k)Kegr*p_(k_Ax887j`<6Yo+9x>IQHK}62NfmcZLA^TIiw8G` zkr!JDEZx7^-6&q}Ma|z(^44)8_0!a-iqbF}*Mg*bAm(czeHPF<7Zivnx%VT)nDr1iwo2gj`EEyn|r9a7uAG_iX1Cc|3dBk>z z00U^%?g?s2qNXzO^T|(h^_}GPMx}AN%(IHXsZ{wVmBwnn*rUlhw?_V?u@h>4@`u6X z4-Mq66yTF4rJ-Tt7QnBF6iBTC#~VSs8e)!sdJh8WQOqM{Pe6!F3Pju9@hbaD!k~DW zs!)$x1rPvI1|lOn15z4?&>9m4{y=?Yy#f^r#@%M(wz?6azP4DNNkO0p>FuxL|=%x|YJ^e4EbN=i9!!j0r zoB#ySN`U}Odgn7ggo9uCNwh~(5J!bq7R@qb8AtwlE*zXfKuG8$5W6;UW*Q>BWg~u7 z5?Hl|DfJK^)Gef;a(_9)!KK44eV*?8{jMe|Hbgw;cLS3>#{^L86j1vjP_)ht$hvC_ zMbaJw$KFIbkjp?WA3YBsD~MbQYAGSJ6F;e33N~-t4zn6U5lCVHGZ3>Mko|y6+y1?X zDjs&(zEkBOl#4$4hk8*`5oKw@BU?5T2&%K*R+ptNrE!TH+kP4Vx4ca4t)hgvgxlwWRL2g`X%Em&6@*y=A{Y#G z!#)Lad93dNsvc&NAvQC!Xz8!^*-)=>Yfx74lWA+-EPI`QWeh---5JnS(d(&URJ=!h zh+lbZZ)nv^O~kEVu?Kncjnu-x`7)?Z0{yNA(ud4fohnKPyt4iCC4YTax)AaQfH($6 z8}e=+NcVtd?t~-lW7QjYMvZ)mblYNA2vBx@Pd+F`|Fu|!Z(7Zw)1fMXLZJpxGy z*5Eho zcbO`YKQGc!_x)>b>*jyIU*F!L$shU8`jvgIGzgfL{8c6(S}O8K3dHN6+S@?!MnF#h z-8+F~7hsZkTrS!ZU{chs*TNpSd0*9s2~9tAO6k)T}={ zbx&IY=#)T#LP8rsYSb!(X0k99UXHxy**pTB%}Zl%-9aR<+I)D4Ngx^(zdj_e-@*oY z1c zl1hSKDePMj3Z+Rk9ANHTjrwH$j;s4qYK=<19!VuKSoiv?5Xl9l3{|c(Vz62Tj<XoLCd>Pq!MqAT1Y~+ZeCbWAXyoF_5OiLoHN<_0< z4dO^(;s~H^Qm?TdQ0pw&GLsNJbqpu3!nwV6%Srt{p9=|G6tn2YtE+!bU}JvHAT_Yz z;d$XtdYN~i2C3CR`#ezRESn!F-GT_}q%e{eT7qj}Wf7u4E(5tdF4t92`z)`LzRf)R z7Hx&eu{Z4GHY>`heF{Q7K<@)&pNkCHYTqn0O#Sj#YWd9rx^{R3r`7{^mT|96{)VXX zMRUkEpHG_R9jR}QH0(ydoIk<<@|WlJ6)I_o{56o`LBh#=<}Kou&HHO_2k~kk*#qj` z3F#dGkj!JDF7z9%{knS0zNb*$+nI1Iar_g&Mip>X3Q|#F3|*hvs=tYE4P&|hx&R_* z+6?d*APGbtu~osc?7Pb*!1`(4P#qnz;1e?&GQ16lmuo2 zngOu^qK%-=g`oCnfKq^-aYQf+4KIQ}q&#{FQ6QIL9~XB$4VA3T{v@c|CP<~1y6-Wk ztlEbdU;@k}klOsdJSSYZ5*4Dp54uG=vcZKN1FcL3sD5SgH=wIWCEu^+?fKrY`EJ#+nTPtAH|cLllZfW z=96G21)$v!}T73kgtjGPZ@p91QPfb>S=p_>WYO14%SbLm8?~i4ZwpiUJk8CoUagV7x_^n}RTN|g6J`)8fLpMw+7gI9 z2=sPA(nHonUKo<62J8OBkGxi#?oDb^{A#RD`akFnB7eh%e31>MRYhTN$k+ca2B?13 z&7fIKw)20e(x${alQpZC1^1921OC{Vt}1l zvx-58EoCtiR_)Wffpii=#+f?zdBAG$=*z>HROt^~x|quSI0m++9%c@xnZs5{azmAG z(`k~1?*qf-`<3^S-n|fg z*vOf;|Uq(}k;bTykx4(E;I;{PwTT6#& zIMuHy->-By`{eso?Oz7{-XvRA10JP}q`dg0zx7SlEo$k=pDX&HF{t)daBG|84avhc z5|qq0@6T2Jc7f=^FPy}ypL1ZPgnmyz1u(k;CeXX(w5zCl;D>BQa4Q1ER@xs*1q5u* zMr}*I%`|`nf>9XW4vIz~=@djCf|%~|@1FO&40wVYwmNvpmB1zvSRFT;a%LJ%PeB;V zYG>8$zL`8Ogb2EAQf*NCG)DwCx<(^Mof_y7!G6{gK_Lp{GLXwz6ubK1)j!ih8q_{F z?;58l5!+l|a^YPSS;dc(y)N`&Nb(3Id88=n$chIC+Obq0MCU^M2K&}k+qX3pdQcX^ z?yLGWDSuQqah^^2lm1E{H9Yc`6}^Ubp0%7mPZJx|+qn9`zo_I-xr*P-Q0?sije*iV zK<_R{ve$V8&nNWDf*C`!?H699cKpSMAQFM-m{$FszyuJ02!qJz{eOFQddJV*!DAi! zlt=d8;Z;BY(AN9U%s3S=g`xEj-U?C?Bt2w{LQJ}hyH~LS=tlypcj^EVSTpxr1`;^1 zbzD^m?0bU`C=O{FAm%$0mJ~&@>7=RyYM&13oDGUMJ4JBX<_M+<#PqzX;YX2b^JpZO z%Std$G;%2o_qLQ;UdoUvUojT2m9bRh^7***pZZMsV_%)Ee zez|UaNX)E;#kDb~ANj-V#?JX6F6a9Z$|2yUe81{42a&%f(oR%K_wygpy{GhkT|xZ8 zzq+hN&G{n&p$%?r0LLeT%DA8CUJU|I7f4}^6*ms~<)ccP>OdvJtibT!lKcBKNq($G#tOFSu)zuAgC z{Li`P;zo04)Q5Wad%e3y^Ou*d!$-l>THxp;aO-4HybffJ0^NHd$wSWXZ$9@08Hlh+ zkj9tZHcp*$yT{t_`B6duQS=C&{@zA?(}jD`Q2=!W+#yixR6y!~rTUk=7}o)$YeT`3 z0Mv%zQ-F9ipr>Kd1Fm22a!v}Ey=7bz3CsrAn&j6&5SN(*0<(mJsn64JL;JX;%L}Y- zw@(DO1D&%$t*v(Q(KC?rC`{UgB&j8WFkVTUEWmY-Vh}4w{v!AMuONnOzIJj5NO!pq?}SV3Vdw2PONh7Hvo{}K2B>{hF6_v~tbPU1 zL#lqWjp;cZ6<eNIrybtMknhL zJmS2aFoZdD#+JnTKA9P(0%{1Yf>Ap_ssl+UY#2d$#}x@IH}xJOClHHh7(FK?uoz4S zo~i~lFyGZh^9yX6B-jx_2B{HHdkfGx3)I>U;^N&}4XB_`+1$3PU@A`Xr~$`U>nf)Td&mp%;X?Y0FS`mlR&=W>X* zpCaEx`uZwWeFn8b#R|hdoYp*?`#Sxjoa>h9Q4LgnWITR%`3#=R#JFab5NE zK2xy;%gvwrkz}Do7&{|yyxMyGwKm)R=sg7K-Rp`z=9$_>N~5P0#?Jnm=)yaGex(zo z6O;fN0$60`cGbJ(ylIXQgU1BiB2XKY%l>`YL}?HbNgV;4whf@kKzJiWZ3kFEl7n{8 zSx%Gag^)n6I=J34sLV~4tbcHAR2k4e*jEGlv_7Jyja#Y~aNsW;KzjoKPzH$1;Sow7|t zp6{2Z4auBTzeW|X)T`GYuj^s&Vne8s4_H}YE&^1leV5?johSlDtH80X_$6YXw;Sl) z4N3R8qK|nkS;L4j20P=+C(kAx%ehD(fXhCQSlLxS^p>A95B||#V`S8T6oWb-YPqX$ z*iun#6NP2k5y1qY7)EUa;?01hkYt}L3en3y{w{(NNL8Ipn%YS&PjLuI{{&+iz}0iV zKmG(aOT>Qqp)9-^lq=^hw;)OHM6 z&T5}wEn?;p4sLqjTxm8jef$CiWCtE8i;IijLT(r$7~4s#wHk=GgW5ZQc$3Q$?84}2 zNN=XFkTKdmrIRdC-{C+mgUUC@bu|&bQhP3$eUtJ5##E#va`r3=#IX(QW+C2Owj#h7 z7@b1&1kl?HNp{b#_Wb;$;rI^G-D9!FXkw5Whl;m4@;72TeRc0~ z6~9O8Ce(9SHf9WH`|JLvI_1wkV!M6Nip=|aln_7wq9c$>&HfKRCE5APukna&@dM6O zz<3VRow5CZ%?x0soC*jCuZF18Kx*77fXO}>Gqt>x!E+>mBGP!X4I+WdS{y=^5C-ZM z!i@>mLsSVbpBm^dP~{$E6pe%0n?UW8fz~zTa|-kVaHciHW>=! zawV;IfWnvMq&bCb)-H&RDxVkDWdm;0!bzcrBCm(58`4# z6hjt7`sNnmowdMhn6bIf_xe`&Hj%%6s$aGoA}<__=B^&qQ!90@Teo^CKU6nWI#-py z{x&b(_}tG7n-){~W3UQemJ_|wpT9E zWD*GAJSSiRAibNmf0B9+zYwjC2F0of1rKWwEdY!ofYVkg7VSvj21s-&NVOozVVHCu zL{BgOWHEpQR(+ys?TI|AsKR8l{194xa+ATmfEG#uOHbVm_E4xijrYq7Y-k~eWmN;c zg}Mqw8`c^Dwbz54|tZkU>`BNn&&Mz}dAQ+0a|0JZmnomAhKIf~muf^gUvgKACakCLUVp zt96NPB7HRbKt%IV`}&P74bRt2;abevi?>|m>)X3{XRK-9u5C&`@>ky7X627aYE{0~ zXYl-ieHd@Vg;e_XE$oRvJdztd6ORFA66ihvNgi-^FY^`aNJEP z)LI3KH&_dqXd|G;0Yflm#^nljUD1d&moD4MEH`;L(aGg<63k;jE*qF!&JhTG2}ob^ zm@9m26_l*|2617};?f}UVh&H?FY@`OVA6v?vImmx2FxLdnQ`}SLHeY&VbU;U*CnOl z^7_i-$v{uhWm5gb+oQqCpHJ?jQT3}`b<+5(U70@0VHon6p45vyh#D$=8wc-(is?nR zdC7|Nm_|UYO;D{pK4p7CQqrx)^UCM2Uit>B_n|YY+}%$1oj=zeG=Gb;3-uJFS#06*)L)cS|HT| zMWg?Jdv6|ZTUOQg{>GeZ?Y&QT`=;)#DypEQt15a_5F0Q;z-JdjK8h0cMNFdd9*Ig& zi3*}f2vGvWBp<}Y#E9`pY!ZVAN>FJ{=!zh|~C)9$_3nsdBA#$0Q!wf5?E zbDDeaoSzS$OP#aN-fORB&hPw;HlfcRKEB; zVAtJzs=!p0)5jJ2^s@fClR;l&N1Q___i_>dO$T$0r zWvbtp@`rrLcT~&9d*<<%ws@l+bmur!_ePLDD3QD2L%{G$;OH`@wtE3Gd4K=Ui}cNJ z`rWG~@9%m9Kmv%_Ze#ed#m^{($3S&0R7XKA2m~eu(Ns14W@pXVg@QL-mk^h$r53>I zR#12X%-gVob7Bu;_n`e>Nym`#<$%&1V=K-Uu28D+N27_aOJ`5mqK4$}$FBpMi=PPIv7{v66%-6D-cum7) z4eXVI&m;<8#^yy8fX}IXNmw`W=Tpjc;81{NR}*I39>z z*tfj12W1O|syzO768=;VDmVt!yAets0`U+$d{{bt*h^yRHa+}V46MS+W8W0qe(%e6 zM=|gKIKw>=2cRIfmwxA|(dWMZ|EL8QR-gq)D7ZU;HH>xDnp-1-Xg2cq>Hs)+BuF0y zn{}Az9IzMmFl7%G3V9gZZbB;!375Xb?iGhr3$-mwqYEM7#wy`mdA5@ni*z}Vuvrfj zE=l1?co+ze0{RFLECV(KGiP8h2FI=kF)Y|5mBe)}wEI^9yShG$ckZpI4lcP?ePUz^ zHX06-m{W6R5%!#Rlyui5@wgm?bOWi{)mki%+}ue_0)3XjrVoy=&Y!HcHO1U zz~x`-!b4u3pGW1gUwKy!u7|$7m)#tm?}l(M7uC9woXhfV9(nM~O@~amSF|bgKmq=^ z2^T4^t|nEyT()s8z~6ZFUPZnic24<|{=PRtg$LyRjvkgyA2WIV0U#A4vH`+lAJ$Jk z{|q_gt0(X8`UJpaZXC`dmyz4>MVnTgFtu$N*{*RD}e3Dg3AL}IMSC8v9(f3$17rF*!X`BInOTlKzs=|-jqd@YJK#_s}7orehIs&o~A0Hn23rUS|2OY-|5YM?c) zV%Nm5@dglG0uRrE&3V9F25et8D{z)C+0brRuEP@#l^X;DhUNo6Le zI#Nj>urJ|Y?z?cX+=K{Dg2P9FR0lk~3=^LL$D7lan$KAYEN?Onj8zC{*Px0X!d$0R zG(q4bN+8CGudGE;_P~fx(?=NN#W2(&9JJd?zw=9j3SHsI0w`P*WiU7h6&?obLjWy- zRad$r*a#dCz;@_D#m2Ruv$AwBOMH&z1%bXp$wY5cRk2tr*NuRWD?y^_@!^rdFaxCA ze<%5Qqy+RZYPFVxccBvCb4nm9SZigoVK$@_((nQ}J`Y3}!Po+9?2gTuI8)8{O1>7g zRQW2W`3y(v0PJ_aO^2X6waP%c9E;8FQN=QU@lMz1t?N3pMzxU(dSc8JAD(~+)20)BD zgq->1=g0T|^LMHRX9!IT4ghu?0{5Nx+ct>VCd3ITm1ICum|1+dXYaC8>d zY^RIxUO`~CFr>~au*g#&lsNon)-I}9(B{DzWfj83IbiIdE7CeELKLWY>z(%uY0BkKd9s)L!5VP6JAfs&(T5INkuF%VN21?*3Qsb=I3hFFPG~_MMbdW zl$AL_)Pi63%5Z*8&%ocvma8h{n}^3r({Ar$PFl98z>%;BR;qKz}v? zhBVv0A$`-!ek8c@jlThg2H~oOzv~kKGq>yTo;!bsw(for!cHvN%ZniD0ji5!RdDU> z!EO=lk06i}2%qRS?*LP$728I=%QVdAMQ4jF4lw*zWm z1q4#*WY6`2L3Y)sQv{kj4?Vg%AVUW zkQym`vT@L(|7o`YRsj?gENO8DuvS_Y8W+-yE`Xy8fVnJ%8#Z=!M7oeW&6STURfKf& z`c+$%FR%1fKK9gNE}0kjp}Lbt$riJ)nXWK(#$>sEDCg0N-&a@pjw^p$2nhq#`F6KUIYSgYL}2p}nApP*K&l6;Zw7U40@%U~&%s9L z!SPl$?ooL69lWV(9>glIz{&y%u0SiU$qSsP8pst}{?ayb1!LE$uuX|SA{8r%XRQ>T z>*b})WUXD!V8`VRE{Q@IECJz?7@+DEfEEE-0MG#g4*p{4x?r8nj7chslMN1olcEw! z06FissW0R;m?y}SKwsJY$GJ4D>JP9WD9P7V811^U9(-E6&~1>yUXs5D3ZS$GLxDiB zmc_0r-T=pI;OG)~cmXi0(%r~xgKZ4rM3tn>&XH@rQnjaQyW)*;m`eZOJSzB^E)Ht=2g?r1q{qk$hc$M$SOePP16PY{jD*O=;od*vS zQ@&Nf!$o z*w}@Q6P1uNDxq6YQZS?m;AO4^hcAY*Vm7fU@rGU1trITw~=ba|2Kk zwoUT&+|NLP{5-1spK2N_X73%`TNrn!HnL;KUGESi~kN5E)Z3um`?@6JFfZxa`qIIy{ zO4U8tyk-?A&N#nuW{Gc}3QJq9)jk&$_(GLDxpU9h)Zmw&0lBO|qp62)5&p(Lk4oXW z3jW4?{mMFeWPg_f!~BPo8#@=^Z&!*vvhcS8-8~E)o&v%{^7AbGrBSx2Kg5DrAqMmv zA3UiRpK-6CPuy!P&;QJ7L;e&yT-3=mmv`O@XC1SkcwUI*vvrrkn(P*fi=Y;<3Hx|iL#|# zOogzx4?(bSf|6O9G>8H~b<)aWgbSh&svh7BsiC?8gtQ=O5vl{WVgbTTk}qhCGeTzuzAeC*hC==ez zPu)cA;V)7BYFp>c{n}}$U)Wy8~~+ z49>s~FGylF?H>p%Z5>xN<&@?HmZ(0+hlR^p63wgza`kG`xZw^*pDjmdkHKlMZU#(()+a2ox!hCdzvGgDgp`EPwaUwY@u z(d`(3HB=@POku-JS2By_asszpVTcClBjE5h>FU6nu!A$O(RtW-|3M&^fLa?Ra5CfQ zmNQ!$U17}XrpYR%WFo8F{g>wkR=nLlRs(B*Fuk@3qy*B}RgDzEkwVy!e-Q$@Bi2XM zm1iZjQwjitqZVI@eP#kAYy=RIR39fjj^%eFP|SprZ59|a7uA;BILXhI`<=~vS5>`H zNrx)rFDM$pUiv!{7-TU}78?~B!JF%(k+x1#QaMXWyf@9oGAZN%v1}Uc0K`LBJCJ!K z-gcqeJ`nX?D84^ZUTvHy+Oebami2I=I+o*lj%zhN)hm3Jp4YTT^IgTpcg!rm4Ezee zAGg)YhkJA9h)d9~qU#d3o&Rznj}q0-!Qc2^In&EGoeR0Xt4dQ#w>C><>x-qp2oQt^ zpgTuEol_un5I`gzl+nC${s53>-Zq4Tx4*vg_`6>*dU&qxieC?al|w3emP>!<-J$5%0~U(~o}Exan`kqpTzNS<0!VVWp~6gX8dbfM&K zMnUX=5CA%KKp0B(DFtFR0{1f{zHvcjp`?)*I7&biVLd52k^cZ-N8#nic$YzHovFOo1X$1cnsJ4m)}d2*H7<4b;ePD+ItLbWr^46s-GeC?HmQd`BZ6vnE- zZ~Si@_z}i!U^xGNW$?#n*GP$5!CwjZja6i4;cvX~1|{kt?aGE%Dt#GU1i> zH%S7j2B|Gnk_rOj4B`#Q#;|Mv6FIdra^c!2HR^^HvuWXECT5>9&LOYY_>{Ahss)Li>!4!b> zF`)A(uo4KggEKILbCNrltq!I=oG_d60t*mWoFo}DK;W!uVBtHAn^c#nea!_T`I&UK zurOWKp@rfOfkr3Og+7S_7Xl4k0Yf0+V+0aHR^bQ`-S3g+$vF#?)XF4L+f<>?pU$LD z(C9cgfyENj+L9ZA9Mq2#M9zf5+`r7u1UV0U42EJOfR}`}ITCm?F_?$)FXX>P{fiyw znN-aKn~~C)N!2T@O0T-lldoQQj>}-L%8j%M_G)LpJu^w4PK6(Xx)Sh1nd--Rg%xG0 zUzwrv*ePun@};UTIX351=lW6J0I(4vQ}~-UV?$sDZb^!!zLM z%i!oDfbBUH5vmxm4XnXuJ5T=NW2tj1z_9`a*IeG82f!9%c<&Q`i#G210dztGU=#{g zia>}3ctAo}cmY+fE3_NB4 zkyNS_CSVAqovn&0R6CZPbWF?UP%tCHUnaj>daqRw{luF_^_1 zyR6|+Lv?RbcEN-O6YvU5tjY5myANvm_>R4KMlByJ*4gnKXW6u=AVd(ZfVwvU`UHr& zVBQ20_#0jV(4WWWC0>6Q!#h8GgIfHW_*(M%^8h%}Nb&(A3_serUlDFW5Ll2_0)b1; z5+eyowb>G96_Qv&K6cZEgOlpuV?gjIKub=b8J>Y1oCBLJ?2F=~!ivIFVdYjA60XzN zI3I=Mw%{~_8d&D($EfKi+@uDU9dH{pa1R&Iy@5y0t8xh-TF%=o(MZXoBn(WH>3X7E z=sg3K81bEguT71zDgV)&`OL9k z93~EnRRu&Xs(YJ_i^{rq0Hr;4b3bUV z@U6=kM4>B4?K$3odw~%k3^i1E1Qgx`gvUS#!Da&-e+7sh1jm;FJH#BMKk@oAfWG}B zH>$<2ehADOMAwwvOVtQG@D+z*uu(*z4Ilgd=R|iu>prDo1;q^8Cq`1m*G0ZDEZR7v z%EG03k}yu>*e(J`7e&ngfr2B_&>9*xItz|A!F$-3)UJBG6P>~u z)Iby$!lvB7s)@8BEL`!H*GQqreo!Cl6u4W0d$bF4QoA-7Fap6=3)fIC>BqT>%iy=k6hp-2(J2 zFMoD$`t|R-o|HcifD?@2y-#{Gt$*^R=mxS{s2)fyyP}XzCK-K_88FEOa^YaJ31BD* z^ZFRjxfM{y0Up2(&%+EK21n~+?7AOz+gZ`3p^tFs3fRUsuu0@=QUfQQq{=!SG?+(o zWuQvm^pMZ^GXH&O^pEMi0nJPxph9iE4c&cF^=!HD**e{kK- zyTLA|&NHwH0>>tFY5`7@EH*WZOS#&|xfl-BPLSmVGStQb$AjShgvU8tC!T_HraHc> zT}_@sB`w-+Vgm#GXcy${N&(y8X2Et)w`9PTZg7upLm zdj%+qP%BV)6cpSHgvZ5ClqD^SqX&TDIWVugiu?J&UvSGS{=Po_y59z%ouAY7HxGIM zY`R^XKj7y7?nL)~^{UcX00kCGEAaoEiRzY@ZR_ z{L?Shr+?+&;2Q4o;Q?@NlaM5anzOHeN_^idKB|_;ZNa+EBzm!=U0fUR%YB9m2X6po zLy}xcfr2BT@DV_83Je7sU4$K;g&kf5bANA@z$!Jau8Oxs6ZKlln1;1>W)PfI4J^|e znk-|=R-!^!I2T&RZtTYWn5#Nfdy`W0-s4(^x=A*cZ8krZn?@dIWG)nU6hggeAxD{y z4r(fUvv5-g&zD_C%4~M4iaT=QUMj$5u~%<}>Q~v#W6xAS={TZw1f`dO;6_k*8WbFq zYAU*+> z8SEktfg0tda#bXe%oMI`0QbRW1F#za57OSj6y6LDP6HHz%_>a)4D9g2{;-MJ0X2}R zdbeJztZlt8bL%;(`g_$H;8v)Cbs$)FU{upOtIf{bgW>)I!8v{o(Fk5Dd+S~cN?!wn zR2PtO&3{tKv{M6q>5jAl{J4AvSGKGcp^z$K!c<5oB}c8<0%M~5Nu!47LeAQyYWmsn zA~b?h5i|kRISLAH0)i8uV8!+PUIT^?gQKs2&1Jw2=J?SX7#Q&KV_qBH{+UhEJpRRf1n#n70i4IEzE0cjL02y(7mzE*wV@#!DY#s`vu6 zt=mRN$7AzBb#?D}ULY0Ez#gQPC@@(BY6wkTpmP!woCbp9Al;MBH}Pdx=bVfBGkABr#m~@Z$k+vKfm2lA@4%?tC}4@BS8qfpiL?9!M_%YFVse ziWZAh_mmZ$NE-omV-yZX1h57Lhk@`$Pjf3eyB2I0+24Sd<%c1B)<8?a6?sqG+>j@!ZQb-oxXyy)w%oU-gD^1eH{*3NM-OsD+)2ycd^zjYPSll1(TVTMd_EurWA32eW+^9AAbtLxA>oNVu{WW@&2?)D(%7pTk|k*$S^8D!bXU3SK5@kqUD|eSrt^ZQR;`_Ppkb-29_JWT4dmN-IDg2Zc9+f)hY+ zKwfOO!O?jM`9|je-kevlM*;qB|F!V;yMMyNp9jEsL7)a{W4AwX)ZFvr^UxqDZ9z(j zJu)ICr2WehA{nmCd z6|`1qB0YXi8|-pRKDS;}sD#C76u~xO;ry!B3IuDv%k=`T^-|t~?v<6@>=jYhNp9jF* z85)3zAO5*-H4psKpQs)HrV#|{C4iOy)hQH))IE8HhP1X1m^D!Xv&tS3fCW$}(mH}0 zz~}&W9d>vQW_V6Ihajp3sl9^0!p~|gW17Okg$cjZ4uUIya|#$7vv;VtboKc*lZ1tf zAULir&?JiB^`;7Xc-;MGdn)KFzfq~?wN*;pn3v|*CX*`W3@!z~d`OxmDC$V2YRbjD zsc8GhzafKo2#)7_ zHQ4fP2AomdZ+Nyo!`@TZ<8#nH+ayf+Ase`Ky zIs<=H*=2-lzUN3)q_WU$$-_#8`HKoWxzsa|_8a&ms$T@H2d)>w0Z?!p6r2LWV=m+i zDef@mrJrwn39wu9UXuj=wheILj@Nf?|I{ns;m-r$?#zbb)D(UC_FtimPyaN!0fP+* z1TGXHFidw$)x?mEH&`*pG?xLhHtvl?B*h_g5a^s1Zza6~W($rkOXrZ`MX=cts~EDF zAaQNi)xc6PtJv|@Ej-QYLW3Gu_X28uO;uR9oCIr(q)QLI83arJj9Y#O4}%^aE2p|C zl)l>MI1e&h^V~NEGD;Oc8ngSYR{TZ};8>wm@mZtl??WXmeTwGZ+yeaa3LsTB7|Q+M zUF#sEz+ePw8%jkW)dT1-sB;4l+~ACzL%_xWUx6JyEFOPm)ipVoH~fLH4e-IozpC^2 zdtU9~&ja9YLSSkS6Mg#5-=(#?zXuCs!BC(8P+eCTlI<9xtHCe#)>aZ^&1L70G(@TK zGX)@h00>TjI;R13L?#Wh4l_6hJ2(%H*T9H(riC0${K(esP;>cvTt`>)0m0I>rAZZ> zwe9{p9jD_7^53*_~|FUmp1QuHag0J zS%I|c7?R`#_9QP5u77Y{xQ|Un0Za@sD|Sz$N5vt*jX-!5Ko4xUVTVZzxy$<}B%EDr zN>nedor|e{qAtKyBM8>z335Btuks-)*0U7WnW~N=MTMXq%IZ6dv{D5<3|_~3*p^UO zcH31!SdG$`dnU)-i!0N9sg4^9`F&jVB`0kS*`)Mg{J@IOZVnK~(lyHMp0eMivJY^J z&Gc-0gV8KyK_IpWf0i_CSsL%jTiTwjsbs%U zMRL)}J$ZP&O6$d#;E=Fv%I8@*z2N6F@v_At*+!o5QTY5-OQ&@xCL1%;;o zeF79L0j#CUmsi2VGeCR>Fsq^j&Yv>`{wInI)P^ zOGPjrMs8^%<6+PPUmfrjpPLrYhnnY=+is#t;g1?VmD_DHYoKpzqcjQh6@FK&=;f+6 zD7>zn}V{-|(t;qlN9OA07aAYqnJYS-X9g8s7872NdBn0%gHg;=QB=_^2aQQq*z( z3o=iz5#K+%1-9D)f;?%z-vAV>fb|ijF4%0t4lhX`;rJ3b+6KeyTQxAZrz?rv zR#ptRI9JRiGe?oiCV;>(xZ>vHo>UENBLKDr!Af;v0x<9}c+CPI(6)#p11v2zX~h(a z%KN_#HY+2#JlST38kD{Q_?5vOSG-ka)qh=RxvIm*E`py__gd&+8;T4-%JsWH;=;Yh zLBR^ZAwZE-`Nrp@mv3|#z)m$IAOmJ?w*h_Y&p$Ib_3977IV@deK$PFp-Cepvx>1ml z66so6y1S(t>F(~3Zs|t4SxQP$y1ToZcm4g}Z_mf)-nn<~nKNf*zTbzg!mJCV`z6{^ zx{{KtzVsm^^;~{Mk}(a1g%!aRzFVVz@GKrfqeA^-I?PZZYBNm(-mp+`!_F1+GnzM- z{Q>EAw{HjjrqDiZJOkG>*vPny@P{LOTL@568`J*&H8=z`n&_~r5_@;~Ng3v9xK{%w zbHqPpWU&4tUsQTO!A(FgLifvcyNt&RGI2f!^T#>vKrP5O)iyiJD-yM1Nb{+WEvHbU zfl$?&pOUVaovM$1|F$^$_zIJMPLL-8;U#GxpCty`cJIqo1xhf4eWG@sXsv7ROB0jl=!@1h1VI ztbCra!Gi^yc1CI|E>zJc1!zPgi~e*}qWIRha#fEp4MCz2w1w?X-it5S6RX7Fd^&85 z)%fn8`@0-6BR-+}M_npx`Chf7@Q*-XN26-1jXy^JgzXEld^uF4(peZxrGggn1xax> zCy0Ju+E-<+viOp_v}|9@A|qxtZ?!RFq|}xHPFBR6-CmXrgvki(#zMM-AMi7PTL%Ym zwIPY_K_+{vCXB2+@_v4In1=r~IlC#dH`ZobyqcBLT_I%r9JCHRr}u-%XA$`vBHb|r z%aMUb8qyz%zr^uPbOW0rd8sitoV#82ry-6tlW_L+8^_;nCx2Ul#A-;|ivZnH1O?&f zgw)^^Y2jiIpW!c9wE87dwz!sUU>e9jS5*0D?HM5MS^JUPOxwG44S!Jevpb-jo(-03DtNMp(G~wkJs&rc7HB#ZK-Wy}d<7dC0l_t+#X~w+pq3Gg_eD-v`UQ)0t3{ zBY~iiGwG^kefrh(mR)6f$2;?5euoN?zqpCJ^!ru?$7M`>J7N^LJZ6OVxY=};JU6@# z&)ZC8phV}5)xls-k(47>nPc5+);+^=pcTZ0lm);0f{>yWuscfU@Ruen;R_2(5H#PF z-*q^iUCt9LHK#0S=muy;fX90};D9642j6Gq&B- zEOvf2?Y{KTB!LuDlTOKAJDqBGnV5COklD*m8C-?=Vb3OqyYa%7;OTmBvcCcDO|lD9 zNhrZCJoUK;jHtM``LBayYcBmiiO-7NMZwbT4COto?BlTPw%PRASXJ&SEj|M(@KGx2 zifc|DmdcdBuWl_zGw!gT9Yp-ou=XiI{Pus70$%>sO{@FmP0E25fA_HuKH97fP8mqu6RF4?b~UzvHpS@_YOy2CcSNrsD}RZq}1U- z3eadPsDviIvzDRgET~2^tWv&0ZG%VCo^uHGs;jEP&PRL;S@41^^$}F#v2IlG6A^9$ z@H9f*iU5=ctFXn))(C$fU12a{@uu&8Si<8?R_2Ag2?Q#=2R@f;r4L*S0D5g34 zSHh*PJ*?igvu1fLCwIAZTT%>QE6S7vcmpkW0ym5Tz%_){4j|Lx-`D{iT-A6^r7mZ#&vENLYRboTW4%8*yV5i2tvQPhc7Wf6sbQ8D>GU$$Lb(z<^!~EkIyD zCrc|VZ#zY&zbT5fjJtl(O9kR=X+WWrtR`{7P$zTKkmBAgo39Nmd)rSF^#>xl;B-Kx zby5Yeo0Y)&ico#jI$Y8c-4eGBk9yUe$-KNkmCh@vR_kfPb|+uOs!bi;=MQy8N||=G zORtjQ4?TzKXi{V%y;b zswiapc53}pg)$RER__06Q47k1>ho#lJe%bVE`!NbpoWx2P2Ghhi#%<)aunsN-;y%e z+AI{(z;wM^hetvy$GxDhXXVlgjb`c*$2Z7lFyMuB)<&ga!zwbT{y~HPD;8$;>hOux ze)viY7Lw4*DC<$JY!P=2FD8Jl`zzJ7i($0G;XB4zX`__x%*!ke+zt`0i*T@AyL~`< zF|6&wp#92IRNDtLPMAWpwvrbyTI3WJBeWTn8EIT8{Z~h#ZN78}y~P}4T$mb;YzRhP z*G~<+!8*q#Kz!Ozl`&vadLBInZ2yRc?R5;CBj?F<44@AHN|sfB$~oI$%rVW9&=2 zy*x|+FKVDBMdqRIRDnR1dVVu#j5g<7o*gr_#Qj(xu~zWYr#=~W`t=!DKO4upBE%hs z5BYP~hg;a^gV}fRo+&(q)idh5hY`2*_Zc_c1Sr6{WqIzMxJiNb5n5xvFDjDqi-smm zkXS|)77{}4K!D3kheh+1qHeY^tX;<@MbQfn6ch2=|-{Q=A)E4fFq zR`WZ9cYaQ&f>7gaVeWf@&JINHmM;k3FGo;0bZA$rXWjtNC`FGU zmMk7nO6K!zDD_EfRLlU}M_7MQqtCQsQFGi%Dh!Ju$8X?S4%bW}UJWhhkicaToms1l zc2M{5oC%sO6>3<*+FxpT()V9@KQUQSix0pAK~;)b#W@1-N(jIeXI^-^O9Mwmt(LS% zaC;6RI+9K4OzUJ{7TE5XElL1~*1z~xp&;Jtm9Nx;)2GhJ>9?66p zw@(2L7lKjy@R2=)k{OA+#i26KpWBGy2~>Zqje{AqQE!Q0Kf-noi`9;q8qK~>Xzks* z47%qa3ou#N(8g3!5KZtM5boBDtqZvMt@;i=yI}46h-cbW6koRpWM-}$?s~?Sq_x%F&70 znMS6a7+bI$E$zZSOXsy>j3Rk1_r!5)yUX3Yra0?+@vQf{CD`Q4uidA7Oh5Hm@ID{W zYK8dgW8i#6#t1N~ay|Qb#5)eaK;BqofXFp|CvFp1>>)CF0-q1+`xFU0)R6};-<|{Z z2L`u4KmPgaGhX3)ea4NrY;^KT(X)WFpv0fXf1MU_#BU0!{7W1xqYdaCQDU^tf2o_7 zC+@Vke{!*wKyz66F}~4Wp=SAN`-h{TD#cz>qp}3RkuH1&b3fv*Ph42ttyEZLA1H+$ zES(p%C}bw<+Qr&meV9F7<|y{`&bAqjR(~f$@66&HYwQ!f9D7s(T)Gb7cJfCKQPfNv2B0u6nK`|*}Zibu}=PYVZ$-~9vKg$jqZpC(Mk)%tzA)kb57 z=Z4+`ddR#b8HnqVQE;K6egEk7SnvJbJsJU`Q>>D4wRIHU?#ZCZ+lmo z41T1|m5(UrO9tY8Wer;iA+6#TJAco$it`4pWiMZw$-`5v)yPn|5cQR>M32>aXLEs3 z>Y~eBj5pn*|48;!12ERQA5rg~rSs-SvwWsk(R!zNl~m4l#H13lC;ZEN<6sVR@l&}# zQPEQfO;87DVP*%jk!iB(D0t=ic(l#0^2Rf2v9VMqM*rKvdvr9!nBnDebieBW95)Ea z1<Uis{PwIVP zCh!xFqA2YN4g@S+oFm1@6F{G$(d}OdSn3ux_=_M>uEa=E9gvR(5UI%ujsJ3TO5F|1 zGH>s;ynA+J+$L^m;XYi}<0@-uV;El@EO?yw-1RLq4Edhnk-!03&Iu9}cON#hnN-Y! zJ}nKXCc2{Z0Q={G54bhZDC&?W7Q5{MmcppuIcmn2Jeu&ZGll*9}k@i z>53L88v{2s!d!X`7sv`YZVmE)mOXSFUp~J-c9;$pf<;Z!*kao-dfO$myf`R7hjw{} zJ^^kG$bi1xVP4yqGtUiv*iUCD)sSB{ji6GoIG*E06lz053)a3d!MIV}1KQ6zNfCxI znKux>HCB#Zn zq!wchK{M4Q%Xw&kF?;=}GzR>uM?W>nwL_YS0Xv+kkT13`I&zq^S=-zzbs2T=&zYN{ z>wYS?ArfFGOwq`(>Le5N24X^OeD(ETG#yJrez_+cBIF*A+JOUJ+vEw$(^J`f|L&Mf zyMqNLA*#R}sn;QE4%Kg?iJ4;u?%PQhDIh)OoV&Luve-4<MSMMPAsb8mfMLgyAtY z;uvBa?>zfYp?wRQFa?qFw$ClaqOYZO=YwfnR5eYpj{vizPM(|Uq)YYWy%Z!(5ZX)& zBcNvWxTWKfV2-7MFX!{}*$8ucR}KPL&{U`U8yYey zMpwXnu=WGu+5!(`_xHEl@GX6%W<1uG7+51Y5K6HjClm@>&F#xT?Yl_4*Qfh?RqjZCV z<^rRu{fwZW4T0;TV2v*Ln4Bf-8*@;%4Yu!YYfsqkvj+8)YFX(j5FokK_wtHoB>V83 z*@W+gXdFXcytDEaJ$S3KQ=-{pPa$ZMXgwoywdK0ew%ueA&+M3C|K0hA&k7!hmHCt2 z-N+M^eqsvt3LGO)-&MPg;P;-cfUSIU%Zv#snSr2xo=nvBoj?t%Uum2`Aba!dwmEws zJIr)ZWFYw8qM)+8BH??q@z~D$OINAyVU6z_&f1p#>>w~TTQ(Twt~YPj$7L)J@?b7w zpF#F(pEF!=Tg1UN7H~OA6lprL`3o_1qe~}E{jS)6Pr)4teG*k65VhGD8%|Kr0o5{* zhLmh#9eF&v0#oBP!$3ot?fdjypRO`L`CR$j1u&clEv`wYG&Y^4Q?R2%rvDW%?zAX^ ze4dNBi$U(B4bXVxCyOJvnn4p$AI!Rl?zjG%{Apu-*Y_&pG9x~x5=vRVq`uYBsK608 z?qJwPojsklg?)EhyT+`76+%==4I*w~6557$_6Yup@$|72T4NcYz1ThZg?;k26BUvw#^Ky|q`94LEw?g~anOs~(asoZ!teIMdR~fz) zCSB{SWwa~@fUAb@q`UK9m*x%vefKEuG*wj;H|jPB3!AtZNqrN7wx$4=`}c zo0n0l^=I-#NV0;2fb9hS?qf?93vYgFB5zLFeP4D+-ZlALd&QG=$7%TVDKI3*A3?Wic zi!=IPQ|{$>5KN4qKa&W4huyV-aP^Pt0sge6av7oP`LMmTe5NQr;mD2k8tpv74NW!%%_Sr=9&^rin}&lpl*lkBeJ*D zgv^mb`fLMmA+}ZSYGOmB6Sqzx1#MJTzu#EwLhxM!hVI~lU zQ{45Wdhlkt(*S0f(n|%k-^e9PSo*_?VW*{x6~*RaXe5tQ90FujgbpO)a*3d ziLU0W>q#c1^b$nYfceWzx18H+b!Ytco!Ep2SDEYAp7wo!$M-L>rGd6&M-ibpN##8R z08i^8O5^ndwG(+ouKSAzxxVXr%+Oo|ECmEzlVwE;jj^DR4G%O7$OWD?5s}_IE*YVT z9(e_y`T#J_loZWzO^Vv+r5i4*Nuy*7DE!ylk3i}@^4MRqA zj~gd>@;&VZp$a_o*Za6zrb;7z0;wVHc_~8ESmpSbegqHziCuxA-n{Bui_w}NIlx3n zfk4CF4psAK(v16ygTM8mQC7~aU+MslbJau8#a$(8Li_tS4_UbKclc>GGg z$6MSy)#h+E+^xiCB<^{=o#DGJ{W2O$?`RoqgM4b9O!S#I=G8_(yZ9~U7{djCq_1Ts#L+Gnhmj_ zA$c|FvEPSr&%_me^TF=#`s7h~XGJgSQVM^jGy!97bJgt_kF_x0!ONiPAlkk(jZY4| zUKBh04EX2An=L8g3i?oID_-yNCtubcgg!r;I|;)F>gs&UspyeqP*7rD#==wy1^Yw$ zm@!JF!b#DGF8EcJ1Sox}rFRbqk48OyJ>oqEI-J>cxjUIJoZU%7lfTYhj#_DgUnLbo z)#8H=P%Oy$AgKd|6LH-?bH4C89x%VfA6ohe!^o&n2z&B;Zz(f0 zPciSHazTC!yB<@Ku5y_F&bSayPf*>P&VFuhgG1IhIaU@xMpiA0nF)t(5gO~eR_grp zva5pat%|25k+774teX%5TEQJeL67jw;h~*G=wMNL`c$Bru>fzKu-1e;&)~NLx-uZ& zx!dXNg8S9u*9}p#KgxJZ7Py_l;C?^rcX`Y7Z$BULo1uvWB&3`d^)-R#DfyRQ$UxW* zB#|E84w?EE8qJTkN)*U|Pm&n2SsIL=B(tH_c;K{d5|nE(Z3D-CLTNj{EgQOzX;kXx z=^04RTa$;k`TX}@WdJ^3$1x}sNr5W@hgBcZ&BHwoM9i~hnW<$E=iPpfA-Nciw;w3k z+ipDvtUH9*jizx+02W@{io5c2ns@zR`a$0BVYwOH3Lxkbf^7E+aKH0gdr zz25Z6W{K9x(-c$zY-VO$IMyQC+;Jm~Dkw2}HC(kQ&PhOXTAe!^T=Vd@zq0EJ;NgV) zZy&3~i#!JxI6Dp8-UMHAu(9mL=m6{P+2F9z5S*yKqZ*4ax6}iU&CpN@!P}P_WEs@LZzUA)rSs5!!xW4Y5@VfW z74x?pOGmX2Sbi~C-`372SUO%umP&zK@w|38M&%J0*xrsLCUcel^$dBsbcWtCEOdcj=oC|_M4!OK%gM?2> zNTv@)lz7*JU{R{vtZ|+VVt_W7WJotD$Weyt>^Qid_p^CVu>n9S_dyELr; zOZv)nymuFP^pn1pQxVFl0MsJRBXT%Y?nOazqdEI`yKfG+`|y+Yoc{Q@xn1Y)C@`tc zfh`h|F0lOo34c@k1)KpmpI|h8>}B!fhX+*D8?tH3ooK^kFjO@gp@3njEGVDeUJXki zJ$;MlfDWf#{i6)uE8b~;e4XSq4}GY(4SI3DN_?d9x)9_uJ@5BD*MpZUAH(kBvU@A_ zmrXWN+1Zw^<%&CO-9E*&n5v>y$DB?&-25VXY`{X+bIHMlO;CRkvW-Gij9NSNCE13F z;-Y3BI2DUW#Ww4?K*%1L7f4X>A?_O{P!yQTL-8r#8u@E=^PVSRu2{+(jhd1JDQfBm z1n+-(NOy1aNAXT?7bgm3UEb{1HhC|*(o{b`1UwuA?X~mqw<>{~bk|l_rxm{c4geGd zv=|~mCn~^Cnpm&h*>ss!d#&dvNB}Ll;eQ&;x>uIPeO82R>9^Wz03-$qZDLOFtJA)Z zUXo9riU!mveogZT z7IUKmo^MT%NtciM_9)iiM1;$ zonRaSErFuaKd(zo;`9P=+;3p-r`iQRWPG;feM)vNzN`#93Bhr%S!yoS|8cv2E$@{; zh@)jt@(ayg-Mig!iMLCnlJ5+N-~+{D@uB~oU2`=559|{%*AT_=oZyXC4U$_lDu7aJHgncBTpsrNL#W=EclC^n*4oN`9l`!zXfpD_9LQ zLXhk{`XdAXRzK+u315hj{o}lhiWX9p*;#nrj>Zqx?zYZ^!xZ2UDz|@w8$5GdAgq%( znQ4YCs6-k4jpW1*++bggfN@lMk^7LqCuj0d70J|W&{m+}AVb=|@ zSLw-!%Sa0*Y;E4Zu_{7wZ0T|tJxTq5lb3ba#stBU;o$d*pBSM>I6>N6k@WCWF=JOzS5vCKze%@Mt-EDDbNo+kh$dL z11*5kUP}KxKG8vg^yx$Gk#{Q3e`ZFkGMoEvb02aP(_A|V}hutYt#9c<{%y%me ze>dXUkH7z7%@bJ6C+z0Q+R|=8O zrqpu6eIQj26C+SP)v{05ZaZmzvjmUU=3I5VLfP2CrObxH#x7UFYMaI@LE8>8~7s(5G{&rThTz|Ql$2>vXZ zFlH+!nf2;#sOI5_Trp>PGY_=DWg&@ z-4dPLW5)G{-0g-pHCN>>_X@4v(l$r+mo3NUcqabBulLx)WC$WELV!4*J{+g4gkNz7 ze6_S?dB~Z$QiK%s1`M6X3B2?8%%A_dMlM5cn37Geeqw@t;QiP>F*W__-`)zo)bg3S z9m3I7--jGz<_4*U0Y-nG!XX!kK;N;56*2r_=kegvC@)S&F;&)iEx(X4CvReF&K>S` z=hE$+?h*&i(LJkG9FuWq10Te*K@~0UsX&5th`4tg-1V=FocakJa=q=LstqDG5^$Mnp81NVue3Cc_m<|})}qfDQ*xZf z2$dLBq=IEP9a$uWR$OpAPr{$k z4Ie*#b@kt(suZ_pASiDSrAv1&ker%+v@%yjKaTaUbM9A3Ge-5nwUP^!!<_b;!&|rV zn!}JjsULztwv;+SQ~a3Ry;?JYKVwk*E#{y_pok0N-{_1;Fc&*j_P$`zM<*5|r)q~)GDg=Oiu0qf5V26}~qma|V z-B1vwQ<0SLCo!S;HhqMI%XPollg8^U4j4fE5~5_GeMa;sA7vH2D4#E6n)Rzis%$M* zZi?O0)#_;1tH|N{6`2$9DOfJ(|JV3r*#|odz;g7$f)0RwL7Dy)RBKc+&D-%W-koo$i8D=~~~1)EC|_cJONrVx*+A`;H5ec8EkR)<(jjY&dHvdh{^$54Fx zbmRnUe}PfGofXhq$VG*FVdH04^sZ}8J^EV-_9PujHG=|@x z{ZXF2sf-4KFimqO@YZWiiE#~BUn0Z3$EuXwt9Q6JKX)fv`fviTSq4o|sCa4NKB5(} ze+|xMiR0s630A7Qf^V%F?ntyX$fX_K_@IH6UYVpLFt&ZcJwIZr0#;lF4cXY2bt-Ba ziLJ^j8+i81qhgG<){20GyJ502^saidlm%Z-uM->!sPQNE9v(KJ;X?U0jf5mIO#lJk zGjmtf+XVA#C!uwwQU^4niRxGp2ENMdA)aYQF4{;pqF7Y?&ftoZZ`luv2s4y4HFfku z#jYOlD7(Hwy2nbY#iuy`C$=0 z*|_Gqw{Ogk!#!8%DieUphy|wkU!>nk91n9|VkfO+0he(9VVf;W(oJ!@gi^bw&Xni< z+q9+^9z=yKBLFS@&)k~;UIvqGoGwj6*7Aq%Rqx#dBKZpy1}$E5wcR8y%ldrnyQ!Dk z;(jS34h3(7iBTKF0eQ$6XQwKulHnH6b>z1?Q3z?`_95|T73`a=BY4S`u;WOe5PHhm zAK1k_2%cKp?IJlHSAVUQ{KwMv0;it&-&2c;Z?`iz@B3AM=%|J%W>TiDDdqvtBpnW~ zNYoZ98)$rk76%ZlY%VXWV^ZEJuUMQ3%ukt~5Qnm620*H0{ zcD;SyDqkGWypV$Z&|`s7sfGcw?w-?|orMpdn4@b_wQ-t-qSkR7J}TqZkqdu#6Po&o zZP{e6JWv|6q9_!8T4dOYCEB`a9Xu@%sQW7nC#DbNV@ey+<`TDSqe%w(IDE|>Ln@=? zFX(cXr1OCnJ6F8^>s1^49Kk0!825s&={E(r#gzOrpt!@qmpl=QePOyi)l%_?!dk;P zXl%rEU}gyGnTdm!Rv^{HOu15UKd8F@d7xI4;t1U}L7=VDMK3XsMD?A!@>3HBW4wf# zf{Dn0-xQ0Laj4&+^O%$T+hwea+{-k%$N7KGd=3T?I~DiqCCnCs@As?S6yHnEP<4S< zMjZ2!b1sM?>byZ&hI@d%LN7)_c5WR9hDAAjj8A`38G#uU!tjm+bxY9j4z}e5MFC)f zl=iTN?6)rMp{WNx0^u3E;Scp9_*%&mWO2^|V}QayX?x`G zs!xkMp1AU}+i`9)0mcrxk|v$54zhIKPE-S9rS1g&+0^MboXi&0NXO}G z5#s4Dhf9KlexlWMZA*EIZBwR-Qo*-xDVHL~8_Q>F(W4H3OxzAE zq}+}PLMc5m=m|z&IrE2 z9ivRuUCo31gp(E^a@-{{@tZW2ld2-Dcdj1G)I_0kF-*FeEgYWFZy6t7Hecw#G33v24KGcB!W%XZUj#PV1L`yXXLV}`S?aA_q1`mk=2#crZ`kdW)a zhmH)rm)g_PoM#2#v&`?(6^wsx=J$>OgFJ=p4NiXFtC6mA4mJ(`N*-MWdxDzp>U&ve}2LtWOq4^Rr)r1NleQmOpSN&Sptvp9Zny z^9L_t49s-p4IWx*b0I7tdC?pY)(QUWK0)o~ol#~Kbg!)rvgc=Lyb?+-`}b1@Bv_7u z;=a1e=t{cULwQ-hLo8TV!41(M5k_d3!_AIx)vAKOK#7|%XN%K_{ZfW1#VjAI9l1khc@T|RxM}~;COUK(_vBLe*$AB|rnQe)r#UtP27tNmF%#JYl5^sv zkU#&}|6Z^%H%%y}U;_Re_-+usRwCOC7RHJZoYpR-o|h%8_qZm>D*i+9h2#tGytK;H zFNM>n+>|z&7WA^_%iGNMtKUwdDRA7jH}}Sz$n@}_fR$O7W;9I9s^tgX$fnMno$hWs z5A$nR#dYuh-xy{8^^CXK-!EO~$!<@VTPno}&~CH_M!OoyhP+voRW{WC4ndf|IH}tr z6Mqd1QAW~{^1e?A66&)ihJ655KnijbVlbpos4P#8Ma6SdK}PB0$@2@edvr9zDWGni z{>X&LG(WXNGj+a?8G|L%%@8>Da<|b1v4~19R(O>~OPRvMoMGsmB9YkOsALbcZ1W&1RY{W+(@kG*itA#Yhq#2o`3yPoi1m6oQn7c~7Z3%Co9wX){_j+r zn7TO3vT9;_?f!nLe!MY%no3kf+&_l};QqQtI;sTQVU;OMS4l* zPgC7NCse>!RWDa|;KckjJk~QYUHGgP*yNIe(mhfVL%UXq59YH$Mo`@cv#fVQm!uz3 zXbxVxj*8+nPV5yoV7X0x=p2gtbeO`CIyYucL+LYFttDA9gp(A08=;*PamT2w8UCDbbzzrx`1FokBs5+| zVfZG(MDbntbjcp;=YD!5%%Y@9|B@idxgTHD#~MCJzb-8l1AcH)DN4Gcs$Ra>e8it9 z5==OrvJQ6mR+fdvMtsM1)Q%;a9?Nwp6-9d7m#-s^5Psa#4ha04Z2pxYH&Q)=dn-~i zx3*QfpE|`!FM_1l@bLh)&vd5dCB7(lcHzyI2k`JAIg`J#a)p8z4Gh0e_LBbA;5oI}vD8nPKz#drS?TVn{i5W(g*+~sJ!^$5C;8r=B4)xhQQNaU)F2W(vo8S8#*EtsR%}U%&?u)nPXe;R?!_Do7=|`dKLrX#SIgC)O~<9 z3XSi1G)l4lBlFGWUv&vPoX`Z6l4s$=e_-)>-W@XvhT_Ws5m}b<(OuW&PKN$NbPgM9 zvWgj2t0RG5^!#rNx8@`_)%3pu4?VHJ=92CZbER&+VQXX-(WmZ#qLXU)jtc%d=`^e{ zyqg`}_53KtV3MPT{86boBiL2V{pEL$P)Vhme(@C2r{o3L3pWDCPwL-Wt+YK(r6P!- zvcJ*lBjnFTx5m4Z+&!oibFhw;Ybg-yO|+p!#?eV01HZ8iUV&z(UO^w(yJ_jQvz z8w#%6sJzya0p%`Z1GKS;)B)7&s~3bNWFsFccvvOhY)$;Z4o{mSH6k#i6o+KquU&fW z2gPqGCM1H5Zl5kmo)OApuqyFy9ss*BGC!2D z37VdXmNzqJ*2lMvx#;?2&l?l{b#B6Gv)e4hMiY!`6!HvUeU`>*R`Vd=DZZC1U(8jmQ6OB{Sk80H=Ura8k3v_aMdB`0AL~$EEpVqLN-kAuFHa zP<%ZVkUv?}-e?N^m>ZwHh^PKV9og|wUi{j;fk=%5mF_iau@_*H2^ECN=8Fyi?Dh1`1mgPXb;{&2gxDPjP{T~ihESK zwu{NNB{68W-1~n%r`(FlJwS+v4BoFhSg_UT#b4ihXST4*3yUo`K&<2(6O7X>1@|2$ zM>SL!g^X#zvcI1B3}-_&{Zg!ua>IJ-Z$fZA`?8@;^hKX+F;`d-Wb97V{s zMpDS?RqzNeOi4!i{rQGwa3|whtPqpKusA;aAwjEiPNO2t?D@5Bl+!c6Q`U#R<-(3g z_tdofddE^ByI6RTvHHcFO~uc0culR2Jms5uQh6%EB06(mv|F?*2LFz3V&n==Kb%$w^IpDGLNNLvA}&QIL8Kfg(wXodO@IGg z7fpJTj^Ou)?*Wrt_XG0td{_E93UIUV6I%bf-8S_M-@wPIif1OQyV4Wi^M##r_OwO*ea( zkShJUE021GJYenuy2|F91aN}?e){fHj>kpUS(e+yS$RRKNcMNMzTr?eR^AO)000F` zQdCIg<@_Hd=mQ{WTQ&B;c^||4?dXr4py$;_)7#)}5{7SVc%CE-Js&FWCpO4;&9U{q zW8oV`c8P}NX*}!Ibj8AKcm(=5R zUZx(gLblzpur?ZSsJj#CX!9F9^B^98M`-qIRWNbqo8YG`uZuH9w@*i^`FpO`#Om!*!bHs~%Z4 z;9!F{5GEoI1OxVuZk(jI=7ZIyIKE|KBzbFe{gi#**0sX@9PL}$^Y?sW@4vj*xzX

{dl^%VfM1IdEk347*NPN9<_o^0*5(*cbmoi z{J-OUOpU74=m!h1cEWp+_I+@ELGgWbZLIQIUkbIl6PW!Bj>zr#pkN79;7Jf;n>CPb zDRf4?ZziR~#mRqszoyAjTS)Uh8b#136!O=L=>(negv*?B?sQE0zT5_Rc~eBHjzD@O zK9TC{H!xwqw~wF-q{@|`=-CYbX6w6KPX_si^3%z^cE^puH6OFRbIxTH*kBB~h)P<# ze+T_v7`idgx!J7&tQfh3-x_W6c#%HyT%8RTd^$a8i1o5+_r7fgOO{1}ckCWPcOR4E5< z-JW%uhK?VjyH9q%_%_3R-V6nP*GsF!WRD?FKwUSQlo5o_6ep?z|Bv(4|9-uKAD9*b z_ITRPyX{wwliRM``J$-_J|CMu9kT+3;c&?Ul%(VOr?oUtAn;5}l_qa79x5ZBfFo|jW z3`eiqiE4u3)9}o6Ox15$5wh>SNq>&ShB40lGSZ-!ZlnJzT8EYsUi+XK%OzHDn*X|i z{E$g-W4u+O^8zLdM!r=#xLB$)5^0BEe(&O8<3CW@TxA{y2?3Z7CDFt5$h(9P=RAeH z2D|dRK3zU_G9CKvq+Qsv8GJPiM@9$3NmI7M-Ti)- z7T0S420~=)gF?-9pU@C7LrO0K`P9w-oan|t5Ezjqq}tu^+9##SxeweTMoBI z+mj?mqXBhIK>&>3p-?FqEfP750f!u21qP-3l32b#v~?HPmlX09FW`4hf1Aa3B7>oJ zNB{(Dcw_DWc49xm01X4?{Yr4@*q&!-&dsmW%Pikj-e)xOvkJbO4>;K+ERWJN{I|28 zeEx@ApHoQ?ffV*&b71N(bulwmowvRd#kY|rJN@TKJF*JzXQc0M8`T_>mUBeKZ>8XA z;Thlo+=WhH5`tdO;Bat!an)5S>4n=*^@$j-9;dbNy=R{~!~Y9m1fKhBVzuHR4`iT{ zPKAotasaah3x}O347a}Uw5{`h{B#p-J!|{YU)*U; z{8eUfNt_1>01=c<6vHkg$BW|R^Vk{y(9-7D78r(SgT5L28Bbm=!aH|WcK?le^e;S^^1{VqVBWqGEZp+3?#ffX683I>-@@@1+()*5cjw6S&eR`4qUt$p zl#K@OO(@?FKm70j=!YMEv;`3YvkUE}U>Mc?RkV4RGW`di#vB~mJoDR61j46nuYT}Y z+<)LHObdsit#e}NOqs$AwEz{YxGXZ2gqJOZ1T%Fc>>|!qyPvBJVC)H1>=IzIQ{~{! z2?^Ax?9WGs1P)*gn75q;WDFav!KDJEDjqDLyNgiaLQLRKE*yQqmlX}a6fQpcuX;!S z_9e1|dpbv+d$#%LY?u*{8Kk_b=Z7C20R8a8k82DJUD0V0LUzni6GqOC;pKOqWa{1# zZGL`v`~06gk;0>QMq6K69<2WLZBUDkww86&znFIY0Oc!qRj>l6g_K|vbpX`^5rb1H zv+g(;V51U%Y~QUoMW?AqIx{Q*1PX1#d#cg5Cs^JF><}sNS-_e#fQRxfiE8J5M**OF zCqQ-(lM3$b9ew`&N(F1M>mOS<_O17XOOM?`eCactgWvElg@@aG4=v{{JziIZ3lDmJ z_~C~KKtKGrj=@kMic^J-GH_TMP9B5A)%PB=#yl2!X|aFtT?eAA&)rF?dy7Ty!0^fk zmgDUQZX@cPvJ@^^vkp649UVmqjiGql6elQXPJqsBVE527&V{{Ow~03&ChFd`aPoT|QbDH=yLnc3AMv?h=?*i&VG-B_ z8Nd_5P9e{SZvF7X4-bHT_~FMia43L7NR>BA*@H+Kw2;`?Yyvza0E^1?b;OI=a@|5$cd!r>D#sKvJHl&vU3R}+0u^y3LIxI->D8B9i&ksNRn11~K XK1-lqq2d2R00000NkvXXu0mjfMBlld literal 0 HcmV?d00001 diff --git a/imgs/colors/yellow-car.png b/imgs/colors/yellow-car.png new file mode 100644 index 0000000000000000000000000000000000000000..cba4a71765cf65852e3fac4825ba291f5caac5fd GIT binary patch literal 153630 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 z z@#!ygaM6X`co$(T2c~@%{5?Q24~g*O zD?|R}YdNmF+tSzN>Fr3_zCBg9Y^|kQnW9>)@}y@zXW|LZIB%#rHJMbZRcEc8X33GL+dM{E%OpGyQ74@M>5MxD*Rd1Y%bwn17 zHHa0w1sfoV6*WO35?Ub;CD3Ug7t96l<^zAtSqM|mI41zy5fC(c76{Jy$d2j+XW4%{ zc)$H>FcTEE13zd@v1tc`+LCEFKlp1~ZUKbGqy??jT8@cIk$ezw?2&hK_G#C#eCfLE z3zYEQW-MEJMmwK|kH7HM<9y}w5&Z`lh6cv?=BNLILl0WT*x1B$Phj<|ShSc6F8v#> zx&B6a`}*2kwmS^~Gr(8K=g8+8%OUw(j(jelkT25L)j=*FvUbxJuD;z1)} z$)YsS`hXO?cO>5f0PO%k+tF{oAD`_J62KdS_!RWnebDyb1b$%#{OZDwe-rZW-^%gl zJ1yNMPk(17^X);ynlXm4kr7HAWnOU6B_qe5e9FY=@DNGjV`HSX8(Gu@e<`4A1A)z1 zsG?FuG<`&y##Vv4PYtn=6^)EHG1w#)7keTXsC9|+&X=tVRefbD@sAy`RF^a_p_olc+;XjFlWXgL9rB$fYgj6u_v8 z!H6PW)o0NulB$kv&e|E0?rie!v|Cs3Xv^y<7<3s3oayv!m4Ii?b4kOdg`V*49oZ~iVLv#G$X`fqDjkk)Uh?Gi9MBL&mQtkmphq^1w=1yxHf zOjz7IMid*azx4>Nz4=HEUcG^{PQ8KSj=T$Frhp=NT#v z`F2h`<{^xZO*R2w5<7x0;9)19$Tfew8k6nlU84Qx2!U>702T{HiuoMtwru03+wW%c z&@hECpu4jZA&ty52&1DFy1Poe<-*5s*2zb*ZEy(1kk1u}>foKj`{~(ck6~CK2y<;a zQB^4wik-v@9sDpR>tTG*%9R{*x&@JL;D9Z7zX5-H1VlZ+0Bxa6=)M4k?>E@o{o6Vb zA;CaquymI_hb&F6Madq#Buz`cgB*3-@yYXF z{>t&b{>9PYwrzniCNbORZB3W135}*7Dy?l~o2f6_cx;TUnkHqWX&_caomV0;id(k=oRd{Q6rz!93+ztf}5Bn>N-cF73our-)5JPEz=5f)K5$*t|;t z0v=J#JP!t}LA|!LLlGMALyV;Kvq)M8IPHs8K{TtA)66=uP_xH$OpD+fpE1wOPQE|u zX~*1M6X$RlH;V(Zno8coffRqab%Ede*;}iVl=G(dH&U=XBh;pge%-KYQ#48iy zRZcu=Id6T@BRObAAKQk;(i1&9;WK&^MRCsKoJ+&rQJi<6iV=gc7VnipA* z%?u3>Gd3{^UdiWj6bl79JIeI+bhD_po9@mIx;n~qmdg|xQnXFGrlh7BNRpVTN`>Lk zaYjZ*snsJoOC`=a{b&MvCh&8*yKAWC4mgAN3CVYXAZlM=(DntX`hKx$Jn+Vv`vHa> zLX08FT36=1+h<(7+nokJQ+h%$i_)9dAN(T6CI4RJW8cp)RfCm_lu|xjZ%>kz#uzG< z3iWD*Cq3&q_2<9*l~X3LZen~4W6VtAsWH#&I2N}&w$GBykh*}C1j%M_syG$nOc=Yw zB;KlcV?v*}x?)1LaiD5K@1#zxI;ufI8Qogru#=ADs^L3%@=?dpzij#ZCXm^Fv~!O0 zp8sNA`{T>`_(S{n=HwX9DR=SQ7raF8z3rWH>vuoHp%-1OM_qBb{Bivz4m)&}n&Dw; z7V?21@^ylI;9XTsVw}%~A*vpA0#;Dx)g=kWf;E9UH01-0QPit8z@JxDBPuDIr-FK& z!Td=k`_IAz&c^aNln_ye5@u$R+1Hz05^gYkejZs^XE1$c2J0ttGlSA73Dr5kp3cDv z${c{c$qLFGNOb-_!842?nN6kjF@x{frftLI^Ersq)^0wV6PI9LcNdHLdRex35la^@VrhRLeSJMF>glGpw}*~W ziLQ?HZ>%+`M4U;*QIrrx5kn)}D3z9Q*IgH|e8mR|?8*aRZGQoO2LReW4$$_TRP9L3 z99{*hp3r*?`|gdK`g9<-1qgaPRD|#TILE*LUykeUv2=I%X3t)?heZfu3|^Jtp#c^x zS|Kku0=lX!8$5c+R6ACg1wyEqvXN^IU;y6!U?< zdzXxNb@B9zFQ#(&?Bsi#(~5HlCxqUF-8MXamE;DU4ju~ z4XOapKrg>(cVSU0A{LKDBtU(DF&3`@lGX1i0n%O@DA}^kY948wH3Vs`DGb=Py1+eE zA2@HFpw8OIqYVr)9~hjj!`ogWp3@MLEzepPIHxg$R%Ux1V@PWN_V&wyf>ENnVSK8D zk%Z$PvWcS(zmii=7-wSA(zSe)zLf#P8#nV`AGwStoO2eNw+<2nDGL}U2?wuQ!CU_6 zLwx;f-==^0(p_={ix`Ue9HnBOQXvlt!{ZZ-j7^{l`CQPJt0&ne9Ir$y>o4)#a}Ve6 zmA#BrVnhORxsbpH*dQbb0*pzYcXxNt)78Pqc%3V+xt(wR^bZ`iW(6Pnhu1MYUd?I) z^Ozt+Yhvt4zJNge6Pf#nR>1qS}GTfo8#bR`NXn(DoTQc@F@z z-Cpn41bu0EyKS(1`*=H_Mn0b{0o@)(4gY(2$bbJJM!Yd*Cd=1g_GZ@qwVFVx%vJ-~KDTr_lNxBGXk}gbqrsP9laJ9?hxuv7(xYs>3DV3Djn=z!;Tuu2Bl+Z)M!5U#uk+s@SjkZ*TGnm=tl^ix`xDQ6;$snOnstE27~&}5F%LhDuYcv6 zyIj3y3|O1iuWlO|W2#a`y(bKV>2sxd(*#lCsYafYkL=@#r>`Om0yYhdXE}mO9H%Us z@u}3?(;3iN4%j>}%$L4@6_@|{7AnINP|P#1;aaZv!!?|J%JGa$Or`RTcZ|j{haP+| zryO@Izx>s2C@)!zT8jh$`Fy@5vZloi;uWV#k|a3q8J(PDV0aXgIL%C$6)1*ucb4et zT*1;_$M1h?vYO5Vu`qiM{5{CSo%bhzHrr?G-rSG#Zx1IzqG{i5QBUZTeIE2RfS)Ls zPN35hZ8m)NJ9$3&lN@(#HuQCR4quise#u?{eqsy)j0_D@>geD_uY67Xutz>Ro}3(K zba)s$-PL2Eb8Dxt_AX&MYgTbkGUDVwz$3E&&O#SLtl!AbFwSvG`T%;#o z`77>PH%{NGKHTUeNv?p6>%=BN;she^Rjl#WdV|4=N7Uh*MS>LH88NC&DLA8yq~SNE z0r)Z_NV=>o?b=juS&YmqQm`gzgiIr4TQjLw+JT_7v4D-g-w_+wDhc~p*ua^9P-c;Z z%^WPCFhdfS8P|eV2WS)AwcCE@G>vQr24?`mHbrw0GsyI^G}%JQ zj49f3BjTJPu%2RZgvXq{ir@S!$1~0wp<`JmTCm#q;Ic*8YAJW5AwT>qu z7X(=+98Z#X!qC&*5l|`_?%OoT^gpJ2VhesDfImzwBI7f|wy z+-Lcp&lmXor2#yRn{)AU&{d`Z%`Xo(*g9u)7r zZvlVog52vfxwl!SrqVRC&hvMwh*6_ngDB9%s+yp#Ndj7rDCUdUa*bMDutAYHE-2Lr zD1>afVH>?kneE6Q-Gw`Y27Nd=Ri(3|B%E^&lfU{EWgtotE_>%YWwfh{r@!JNYFGVA z)(@BHSlS^>jL1l6q)Z-XYbK}%V)IsFfo80oAdTe!(KPmD7O8l8SsU4cL6#{PY$pi|0lJ+OygOv!-7F2OOcx`xx9*)4 z*v$b3n^JGf`falCd=W8oNWrsZ1x`!B?fHN+ms`G1+p<%oucw<&e(wKq>z#K|E_UL5 z+Ert0+W=qt+{ZcX#N!wk8g80F66ZL0^-A9I-VgBQFMosn70Y%>25#I8F~q1#q=U6RBK9QB4OJt zT`XRbI}i)A%iwP>nLYL=fVNLZ(>$=o8YOMVmZ-ry#d?QT-ETmj`n1?S2r`*BgpIdb z{^NT&zV_>o@rtmd$5Srs*&M&QSijMcVTz>^PkZhQ+?nT`>#LQTR;!b0jBRT$(IWpk zrp+Buiwrzl24HQ5)LR9uf;1j$?GkV^2QX6A$RV+{n%Kz3iAh`#28mN#>>?kUoC}D3 zn6rvC-XSWJlX^$4tcQ;e@}di0s@{8TDq_2|kwkDwLPxnsrBYF@ypoPbJ&GwH7X4WIDUkSkTNpqp?CPl5TKC(~TxXD0NgDVT!d`c0?`R;3nJfn(Y+L=4>6! z9)%i6ea4P$%+V}!yn}g0f515nE3?Ji%%qhSr0HnR&|r(76cv$l-che(on{3a^K8-7 z+qa361-paE+5jT0C5x?&;OS*)Irdt+ZZwSa#~pPnaV470tuzJ{zWIZnQZ5#mnU^y) zRpB{Lc>)BMXcuD-<^+ENv4bd4j$2dUQO9>+@C=XFNs@#(Nr>Zw#3kene9Kf*8b2`YN${r&2MszOh|=xP{8?Yy6@a!2fN48P zRcB}HX3bRCQ{ZooZLJI3*7I)Ho!E~pO{Wqg)YVe+1{ZmPT1+vC$@#1$+ddBd)TfM} zLqN@$;fqgLcBfMx67An8w9u{p;&AOfmI-H1K#!i%XIO?7&meK8#wVKW;QhXX1nM#50^y9qb39~4z<4EQvKr%@qaLTZe4+6K;<17@eg&yd77-50V7BR~WwY^_buOz5*EB0WZkHfZv>;VNV0JU0~4mNr1*Y08MuTK)b(8=mNm7 z&cCg_Npt#Y2sJ18x+kp16r&9E?I-a|&SjPMC9um=j^aB%%<<$mmU+xO%Y6Tj0exM{ zK}$V3yLW+K<3@gXZ~za;W+1S1&ZGD) z5at5j^-uqz=bp8aYrphSwyioSJ10(CrDQ4GN|dpH5oBPn3HqciGLr?A8X_~;!ITM< z1_P)KP&kuCY-1RA1PJ3Du!B1SfqsE=OV(j(oRLORn53^Y3?ogJZ}x+Hb}(pKz~GDq zCG7xFwgZ2&<^r}cfIDCVTl((CQAB@lFGn1D2$kwoGrpu;EHbra8$bQk@96F6O531i zQLO4G9ijRvGXL(5n7Lk=dMi^zV+L!eCKyt zSU*^ytCXXwBZp)FZ-*Bx5eP%R{?n^)NsT0lh@u)Ut}`$+$mz!&O4!{&EspniwwEzL zN5CuIQUM&+?%6D^2M6o74+AvaUjUl!dA3p)u&sAzhZd7cyAg&OhA38i-IJ@v6zVDH zGqRt^ykxz16>P6ZR(K}I;iI1^aO!J1c*(yPxnZraX0c~=zsE=h{PyB^G{!JBImPJ6 zFsGmONZ$J1_xp!E@=-cAI!tA1N;BX$>ru&Exxzafm&NaZyh&s1+Dswo$Sr~fSw%nA zW7Mc8AqWBuRnR2BkuWv}1)HN_V;1GRC{K2C;wdNSZUum?Ah294GBH_E^Xn^l<{^*d z+f!hyrMl*{)9D%9sGBM|x)&ETN$ToDqa_X02PhsT47^(P zi1Da+G0rQ-gF0336m_U3Ac-~t6WfCor@`O$I($8oaBHekb~!91$V>_&P6jTB0d9czQrNXoZBSdnP6~^(7@^ScP1#hl`)*j z2Fko_U@HTN2r7bC&q*g9mtApM!jnoxzW&3XLT1!x9=9S4kB;%w$2^k!qCTc-wK*l- zg~_6+ys>%_9J)w}5@oXHNu0-dhsB{j;hxPketh*9mtQ}^z*t0Q$OZ9sK>5^NdvBu;re`T`Ag$_p)kWt;IXX(7-nO7WH$T-x$zcbr zVPte1o5jLRPE|R0)e4^X^e6F!&;2juRV#K0xFjBO0W9nCbQWMT5(4q$0zs^hIAQIG zXZ^5atl|kQbQEpVD6*?$nGpeN`OYtI;KU`-^|{i3sfOo zZg|`K>Rj}qh(a+uUF<94N<~bT)G#_cj14SLe8zb^ z<|$9tAeUosV4F6;A?;no*a?ZZUCx!cKwz^yt=oZur;YkRMN@LdqaGCT3I>;Wau$tZ zFeXpk)d`|Jt~1o4Oe+20IyTbZy>z>CXSZFRZPw>tX7ik(sng?6MIMS4d=aYzahD6+A3~9>4(yCX?BLy#{ z9FR8wF^veLV-vjM`R5^B9aN)e zrvZy9lyl1BjFmsNBU|KkX2D@kySRjM8 z5b*avFlg*XCREw8#u|2!36(UIIl@qlgt+E0m6%+mPNANVi!*80>|f`N`f1U{_IqTh zXJkqn6&>^ z289jT^Y&I4GXO`L8A#SIIE@pO2BMxx-D*4HmKi%i8?|&9x^G)&N4kGIMXXJI-_JoK z&-Nbkth>;D!?Tio8Dwkw3;~taU^m$wd`(BrupJo)tuk+GO`ytr;BWTVq+L?pZdvfE zSZnF-?&7LHU6W<(rFYO8gxq}RU7Yvi$I?+K62);7I96&k4nKGe_pRH=^;cgyK%&A(Mc6bV3{9n5HXrU8hiqUhwJ2etQs=DW*HEcPfDqLamM-e% zmb*8ycGEVBr2@K#3-i2(pi{W&*D=p~mSM@_9Nz0+cQ)X@6lt>GGHClz_l+4ENrE9( zA&!B%!$t{VoDew0NS1Lb>=!kCGub{AOc_kS2LpfpOTha+ljp6UDe&XJ1Srb#KBZjL z=JoM`C=IsOk|YTuLqjZDvXt{*cCkM7+0P@F&oeeM0%_w3TKg(wO-kot|F&;4E8FD@ z&n(@FXAnFQXbjSPE~$4RMv1fDzu7DqxsyIB;zhEOE{9Jsj`4!ea*{<=9kH`?g*pCG z9cA&vFlRpE5nNG+LxMd702=_IkrVjb7rl%Vj$FfgFL=6K*L?)fI`agU_AlbBb05Qo z8?KU@ulzOslt=TBLsp8p>qa)lfpjeDAXkZ~6)ZWtMlo2M4fZD8B>|?1%8W3bGnYw) zf~tr~J6o&CBJnhfGD(48wvNvVE9XG+Eg(=DfKL^X*5Jkz95#Sq^KaCH@pIf6%tamV zjIDgOc`gt*TjKb%7Mt$5cHrCw+-6({n^;h$`{B-h32TSvGim|TP2aNO9KaA}GlkH$ zEJlc?Ve(+D16s%{vr7^dp!B_wC}tcs(m322Mp#E_^GJ0XcY)Er?w zCKo%bcg>#U?1$%t`n2_$v0%DA(yP>mg)jXu$D2Q1;Di5{=Z+1Q-VSAPw~`Cf^&coh zn6VaBWprd15qSL5pT!F=ewD6Vb1)+#!$kFZV;snKuI!Afw;cesDRD9r^fgVY(*Upu z{-PP+FhPi0ybTTibRx~}Wty60RZ{RL;#E^T<0L^vv=D?OQJt>-F78}A#Ul>tbo%e9d^*2-Q?pjcIvXVC2 z_CV}~YGjBKNmZP^SiTcjL$#hzixN&dY8jPU1OnbU7WH&+#npG=oF_1{$M3*Zq0|L; zUacH^f^zIpd7RU~zFNQo0B!cq-WR%W+@EmgHil2}BE)J)9K?}FYYtmW$VCZ3;;@Zt z;(k`o*ZT9l%jkgy+ZVv?w*-9fi+SGgi2~pJT}U;CWj#tyM;aIF^Z^8Z#()SDW24k+ z6;3|=OkRA+>p1z$hiheOlBtOaj4_R|N~Z~sS%3aqq>RhdJlD?FwFN@YR>GA5KAErN zD+7NGCb7Z%sT0(p-isQa`azoHl!`GLs#mg`5MPZcEnmYezrTi;KIIX5UvEDj{P5d& z)w9kg@s701#-7{}B6zPn`}`O2muvo{^0RlcXwiv$V?2HTdCz}|zWJS(>gFGRfnR?6 zdpdB;6ZGUG7Zcofw{D2g{&GQ0l4#upY7HJ$FY3LBcrjUFq)D}Q5$jNwwtsWZfhH=F zAU;7Q@gj+eCXhzQC=#n`8XKc&ZlECbba}hv?&;b+)n+yznk9HkYl=77a`Sm>o#2cn z&)Wr4&*dPVD@JB67x7$<;_Ye!1$Ck_7kKqT3)3m>*@BrfBmexkrcz7q@VxhQmP(9m+RRtJ^CK4Z^|i^o0*sGO z@upY27z%l6wc1WyAe|RtpMJ*&0_Zrel*@UpxotD|ZX6=CN>q;+8=s)JBgavPE~8Sd z?{PP9+eTSrczmew&Z!B}xJ4$@!r#Zx=Zr;9* zX*cf!l>m^{@KKqXWO!hJLk@okuY3F7@#5EBN>^W>4sP2!NGvWEoC!4aQyO;!#JY{HrOWyA zEiogvj%9;JW^~^3J4JBLani}BF*Y%-k2}b4ez$PpFMdt}9Cz%A{L6oSOb;s#@yic? zh+9erY5zHo;_&K_ZW%$dmESfb}=xjX?~zeW*nIr6Vm{M+qHt3 z+dQH>G>q&l5S-mKqLOAT?#MJE;zef!OpAE3NEu1{wyCx-jnkpg+k-)ARg+uTKhw+? zG&-LY+-?v_>khyETIxJ!BG zKc$9{zY6^KfC98#V9<7Zxbp)H&~|sYvq{T}5-~(xs6`M>#rW}?vpVl?cH0g zGPrFkz5R=L>FX}#weNTr2OV)FBZC84t4wBNf!P`Gx1)%cMx;v%kdxWKUu)vX?BlUE z2${y%t6p138AUy6R1lv%~PkSVkK0gj(lh|(14CYnQaxP{mw$Uo11@sIkItm z+s_u=OSk6Exn{S8?|k9YJnJPF3uiu)Yk&1^9-2$n`Q2}S#n-;@6$ws%EayD-9C9~b zB^%alrnYFAEH31UqDU$tQg(`>5_uJ45F=I)FA4^)qJr@bv4Jsy3W`w?Bk3t^KrQNx zq>;78gB7p}RuHS|ZQ6TStcX}u0-Ak?XYB*r8V6(3NEj2K8X%gzP8Jm-GyVoU&!e63 z+_11d!!x5~WVYwpFxR3cOJ0%2YdU?Vw8hC}C6+Xo$u!nx&)`PGnnrqMb8wO7c#;u^ z)7NiJ?K<=I5B6CQdTYO7ZS*D9=DJQDg)1#~qt*>15fm!h<^&W?%1LJFofT0hFrurCz~V&A3BJoRaEA4v8H> z;;~IUU>;Ns_eSR)n+Lj5L&xx1!&iPC^0g~-+_=_Y4J__T+q0=Yuz;`iB4Z`ZKb;&O zqqlz%k9xwBc=)-GCCufR7#mY{ZZ=TfTJyIM=C9SIJCoI$DeunA9-gE9Y=Z!j>9(^f z^(v`Rq z-l9jm@%nO^>nSQd>k*IQ zpFi|(y7<0p_};&Nh}*jk)q~GEi&fQO-Mn=xKA+c4?=*IGjSOmxQ!!y`?C`1zUJPDD zoW*z%oF>kLI8>cib)xF|%!zo*%KIA4s+Ojd9q^6*^!h#OLP(_JJ;R$xlnd1bEJMQxXdK@@FfE~>T` z(x!ps%~%;t`w2H|FlRD@(qIl}i;2ltLDLe0KU+kM6-%{RW9gE`oN?O8OifNU0iZ_- zdb|0^r@zGD&@dh4QWM~%xquax^!4)AOI}JcGPXzh=*KVTi^T7Jo?E`BdXUK9Uj(ME;_nE@VBFkzxms<>a2|$ zS{=PfmPMS^`DM(ZWF`;QX?9T>eSy7K@#%n?b!|=Amoy77z+jAMU=(#8jVDPuy1D0u z^_+g}F$!?k_x_JpKJUUd#&3_9K<1i61Y-;?NwB#bFMh?V>9(HBUi&P0@2z#7_T0yE zP(IJukA5scJSl(p$`{z6ogDgvCv%XWV({L38Sm_)PzVT}$9apjUP(NOg3Y8RV-1ox z^=Td`Y_-s{JGpbcVOL=>=(0fYZ|KbOuPejhjXe6=`HVw{-T< zS)Ih~DS|U)VU_Ixp`hwnwPFQ-_|r9{@jnJtrC2O7vSA|;!qcDdXhy~-Qu!tWfm78Q z4?F2Ze)Ri4vT?&E%H{HcV`26M9AX2*=79>wAKXJOG{mu^5C(WJTzC5xiuqu#$+6x; zp$l%jN_o_y;NXJ_IQJl90S_=}_b)wNaJI>7XKuyDt%0U!HXo;QE8!2kRx$9>x@J(-iYkjuI$JbJ_|WgK<;`cN zfrT44Zs6Nr{(@Y)ew}KV5ed&wJTx=W1^l8YVq$ERV!4Ae&pDT~ANK_M7cXIQY@AxHinUfnvQAO6o~;XF z{$`RY^BFpJB>&DQ0k^AsN)3^^s!x3hE$W>pu^LVAlBkdvaEfzaQ&K5WZvs)Z#@i&( zDU;J>rmpLA%XILnpYz^-e2;$ezACReq#M;p8)Kx1>|F+M=0F9IB#w^mUf%Hbcd+fw zKg;{y_)7liZsj%Soy)SWE>1t|Y!-C|{POFcm3y|;>3PJXIilpGy6$eaxFTIWo#dj3 zigRl67VAA~EH-0-R0YH$s#ufyghgGdm|IaH%Plmbf=Ok{v^-8lrW-LgVq&zlcW&Cn ztR(}m{os)%+t*k!SKySWw+)7dKJm!SxrqJ+vg&+Nwux- z2{XHXG;h4yFW-{&4sPM}B!h`6(;+kM67cpcU~7_=%wiTnRJ>DGuUx?&uDOQ9d2H4O zC>MrQ$Hv((FvJDVcnT8}lg;DN7{g?x!b!&+#Ym;fRagFwQcpL!pRj-i5G!mOu5t9i zU05U3qlCWB0_z8+SU)g9DIe~&-=hkpGHkk8dB`#S9Di&D@9q9Q-W~{d-Zg->%m3a2 z*h7k7c{cDeWY1Hh^!TvR8nSNa$Ml=SA1rkLQ5t+^a z6lt1EjEL7JelX3k*ao7BOFObfl`2bDtl-)kZs+J_B~Co~R9^GRPqJoc8yCImV&XV% zmPN_FFtD|iRtIVS6$B=&sYh-)Wjs8|KxwkUv9sTL!WUG#~j=zx!bR1 z-PSRpzU9(iGEj@9>X5J?P*21MBC1{>FG8Gh`qqeZE)|Ef;Nvn}$Hq*y^>|Zbs6SyN*&@6x%G-OO@x~wK^ zO4Klem>EoOtGo562 zeXYh2?>+tfy?o=_KaijO?20A}*no*+TL<|3CqB%%4?mqv+Xe`lwStfj0y@ei9{<9N zx%=Mx=A@1s=qsD}IJxVzf`+JSKAh5mL`ZNIIQ=>y$mwQMf(XzY;4W8#F+D^^>Y zIs6p_Q8q%CgOIcrZxI+5uD;3gzrPIm$u$8RhYh7X^mTa(K??TVKIn66bnh4+9VN`? zIrYr5IQNN9X6cI6R3^u%R4UDqvaD2VrbIm#>jygr{^pW|V-l-aA0^`+ruZR~=@y=5$sg4Y2@6jjmqc43) z|MnHn*F%nfD01YXeBzat=qum)b{YndeFgwFrX+C$K{^Ou^5XO56JPuWJnwJ0=Bt-+ za<<|k#~nw!}i=Owqgi;lWVT&WXVBgMQ>OH_gc5u>7B zg&+`7FX~imU`(Pu%VsymknV`C&OSHi?OmM-e&hFkC885dqcxx2G@*R(&dfc3;v$QfSzxPw3pxgf-b zmjC+Btt7GEYi?j`EhD3&9DVpf{O}9kXTzosbN1Q)3#`blp$}s4ccA;mu6=gvXS9d{ zs1SQdVvmayjT}MZFtH=>zD3S${_jCQH5j`f0LnngLshurR?Giq@4VwAtE%n4_Bpp= z=brA#d6;2_FhmK81VP1siuvJFG5($?>N97bieSQo;i-t|Ga?`$O3spV27w_=4m}+! z-Fwd7zdz26)zvdS1Q~GZ^XchI9jE%%x7ONg?KA$7!}&LRcyJ9tE5ejcMq43K2)8@# z3sb$m@1rt04DIEx_x=asuvZ*~nRDi$RvAU5S`9}zBk;q-mT%L%pCpddWNKcSunGZvPnNLGek=s zS_aw3TrZGSs zhRaU)IDO;O-^AJ@{sTwN?ZWIib8*<=hrV$s z7|nZ!De-+n+g4I5e&aIf*vrkl^pEdI&0!E~k_U(gK@gz7cM5zzz`b|hL&dhXC`N^H zxr8+juYl1WUUkHw7#tdo|1exCxPsl5ErxF_{&C5bXzS^IP6R>(fTsyVl>qG}g;`UI z7^@j{w`r^!Y+%i%8VUvdFB$6gv_frg7)KoTVjO+s3-QF7*-&&ndU{47Qb;eEd5&7X z&m^Ed9d?1$cK)&Xq=m*HLg{P>=&V7FG zA8Z-s@PH>)D4cd~0iXSO5htCQ$F&c5U=d930(#m7S|=*u_Via56*!wlBV5}?*yn&3 z;w|rfKMp$LhB0F~ymM@a-SzzlW&lX!s`br3bSqL-}*u4$3YUBtN zK5`pDBJ0>#h*1PXAS(i^psWCf+;g&39vC*vc#~bM@m)wh2 zz2nW8ozqyh+wRzN_dT)U_Uq`j%Pzp^yaO<6=`J+0whqG^*P-6tg}hfljssNLikHiQ zEJKNf2!xahUtns1_Cg~wtQuhpHY@@Hg`h{;rG$l??39!f2#Z@w$0Q`A$OWc^g+QTZ z6>iRGu2UgwX?5I|K+kUFep`dSrk3&4oM4!Oj`kZL-1*m-sdmIX=? zh!pOBd<2F3zeXWZq);0g#(UrOHY{E^6TZn|HxO)is+{s&|1OYQ{EN) z3<28HW>rge(`wo;&`$X=L@<_6Z2*l5qcUQ^!vQeTK%vq=Ti~N)0~E+Y6J=An|0YUb z41MJg`bxlt)e676AdfHnqKL2lv4G3&^iU6g{%$wdm(OiqDc)A#*QnPqG&qQSv48^) zJsfX&_xtd|!;V0{P{7FGAcDY8Qmd|=W9vZ=q6t(#noQz%;^2oG7yf8v1^Zh8!SG`# z+zIS@{uCjAxS$6J1|*ikO(R5P$>n*302ULtnR^Q;4N*BG6+`GXHEAqbE_YsV9^Una zS4#KP8FCgWt$_B`BfjEReSH?DgE2kyNuJ+gKqj`-HEapouA zfvzT7cyqZAyBzg)OjCnYe*8f^wz&%FnMyq+27IBqZ;A2>o)wq=C=jG>37#f_3bPMN zF)_h1i8YFaNO_(TfHXvrBE>9jeo&KQCaqW$2#P_9MBJR9uqH*y6-!GCJC?Ld7jJd0 z&)dfLTPl(s|K?`@n$N57`%>ZDqLK;I!%zZI;YQ{tIjlnaS4A^|E?q3qd1^i{>DfV7 z3LV?SNZG_3GGN9M&X!11DjiHw_hff>C+@!YLHfzhPNmN7?vz5Mv3c`mEL<=jm;C-0 z7^_s#FeWyTthMOs=s?|X;3aQ)4>k`Dp{Khmo+aF#Pei~-#o{GXYJ|=*qq_~rZ^v_e>Ei+sP_0x^85=|I)P5Xr(4pA>kVDbeHx<>& z7%Jfwr?gtNt*YM^EZ?nc_htcD>X->s*W zfCz?!0wEX@v80t1D;7`|Vp*(Z6pEq|a9~B+^Cj6hR+F83a&l+2TSjjF8@~FDljH#a z%ZM#ANu6y2>ny>fxq64pX@)={cqaQm4ZFhTqDy00$nX*^7u@_poGPapzKBw2ZNm2 zI07)m&&O=3x2G3B`Q@+aw%hNdp5C4q;e#7}<&E1p;t2STD3A~UA- z294_<@Gvw=Xe$A| z9sHbtz6kt8fJ$WyjcOIsX3fS6UvfD1J@6oOc6FmNI)YlQw(a286!b{IFQYqeZMSc; zyVjz_IZ^&71h*C{-$d}&e7U7EC_tdZO+NrIB(UVc2*X+y)~*7Eg*6+kqyVt>ji9|< zWYtQUcjTcs`?tT9BbP11Yu@x`dDE%q;r!$O6SdliG{fI>1_0e3M)J)EK^-4>>oN4p zv;P9T;f*-!7k|dw~CBihxECkO;{0JQ7my6qB+-CiH;8OvIK*YZ6V0Y#5AiT67qi5EU-4Rfl*G4|hUIo7VQ5{n}z|%){nU4>mB+#v&J3Hv^ zqX_&4=FVS;gARW=_SkPfluKodjEul<)F%YLiS6ErR6mgkX4khx`Lh}24`M{3xxI0A z@75K-Y%pXT{7KmN=jvg^h>#(ID}olXAh9CWDy3P3*$6~wkHxU$*vfF8WFCBZuzR^| z_{*vI&bLnx6ic8b3-Gm9zgE8R-S218zt1@UY-J1Ie$#b$^HE3B!y7hW@d>}gZ$JNT z>=)ke@kbxS-_Q9I-TB}KOndRcc)^QzL;3MlwD$goFj6d2TVF4{1{1S|)gG}8ppB&f zAoe`cq(HDCcqjs_qG(c3YZA6fj3riDX>zawh;kyJD3Dbktwd zCw3MwAyN(}1hr^i@kA=0gehWxv_L%Cs-if73Mnycy3b2+%BE0k3rmY~X$dQ2GWKu+ zh3WKgVih}hQ^=@)VZ}^J2~2F^1O`*7Vx(?!=Tm@)us+6E#?-!EoPW_}>MwseS9SOG z#VVdw3WLMLm@#!KF8k9jAp(q5Dw%l+7Qy^kGx3QNzK!4f^0(-jI~#U8R{@EDM!@K9 z_wdp^I>AE7dm4YaZWDYCpLCv~SNmhtDmvTSam`u3hA|cm-wzM)46RET7-(SW(hpT&M1b^w_PT9n~yt6K@q_igVE7p z2m=du-Wi7+@pA0C=RQzcqcS=I-}j-3#?|y}UG*FPDBptWw=K$Fi`8w?ocf(8?9rIS zn-8EN@kWqD`6Ho#NCFlZa{YgXh^(-<@5>_=1}kCq$x4p$Y$^>Y_Y}kqZIbrId*hM| zuayI40`Gj^adO_~0laofAL;{}rO?}hRtn&D7Xq1_jGPLIeDag%@6O}5pZ*A)`jwyI zrtbalx&!8+zo#27IPf4Wm@^gkUi??Ob z_Hyt%Eye^e%urebWP~h0N((4T26I@Q%%YSMQUn4-RQO7S;7X-KAFTlCDLI)Cpua*C5mG=DoPhqSRFuU_&ydd zT8O(I_$O@|*i5BTDMEz-V4#FKb8Y}p>Di@&?Y-Q2i)G8tUb!=oJCbzw3;Nm{_{~*2Ve#}jrc4_E z{9;`0{_hdh*uujr3~{gk+5@P=6*MCctY4$>=Zo_A>aX(n@^6dy%k?>I7}n@&6HM(A zluK?t$IAAX;BEE%tdxS^XkcV$Gpx1PW%oVt`nMg6R~-E&Or1Uxm9Y_2D`WBf)AJuu z$YYXrZwu9Lo0Pwa;4gtdaRCiXob;W{TXtqpBp{+VL?Vy?Agf3lhFFlewQq{p3b7($ zVe5MAbWTV_v{qt#L3=@Clo|b+P|>sH@qe6y_r3Ss(%#jLgWvo)EHWGLq0f9~T=?TT zs{l@<1_HnjPxt~p^2M(c(2sXreKWrQ;(6!{Z@d1Qf8fIN&ZV_M8>S!hax9qJO;a|n zKy||qMoZn4FBg$BH8KVerHRFWB_L3q6j>09TPMfttV!)UWC)_5HNjf4)+nt#3JaB; z-N{gnYm_TkR-%-U;&4`wk|O4?V=yX}ru6ybI)Rs3L)Str6b-19MI0-KTM355c5>=# zHYQ43S{aA^6aRKs|VFf}76v2C0#oDP+~XqQPxRi@9de|bxE{S0fF9j!i$!+A)ixNH*9hB-J>WM)zfYRE2YqA zG+>!=^;y3`XL}pQD%H%ZPiqaP_D{jzFMR}keILP_kDdw3)-7V(-YwrJqXs^2x&tTr zdH}i`SocI8C;n*{ylUrlc=;ap0mJ1mTlViK{Rum0BLKP(s(b|iRl=i>D4c(bD`&oA zg~C{k&|U(%+n!rWU;H<(HG~}dNze1 zSSXNJ?m&SJ!75b9Ck;W4iL4TWaa|*#H4!s06sd4tkO5+2mCAVpfQ*RJ;jUrVa-tN3 z-2x(kV#P`cMUdoX=t$g7;&9stQOn|HX9ts;5yaL)Bt#k_DI3|@!{gx(m{edtlb?>T<3pnmD`ST=clbZP%MGk4bU+7 z%I|kUUykv?LvH~Z1P=00^!$gw2>KMl-MeiJU-(=!FNdJVNo1rj-GlLx;^*u4`%-&2D> z5d*i1EtmuVHh~}c;dYNk2zd=j-H)P@XNE6CZst$KDUE=EA`2D+h$Rn}ZRo%W*b-P1 zSc9a>B3(Hx8^^57%~fRGg1zO=)4qo(h!z<) zBdF6ef*B}`05GYKi6JnAyyo}msu-2sG7``JrPRUntf0e-?ygSy{!dQL-Fx2ys=K!v z9HoMl!dSHiYb`GR{m-#z-W;sov^fJY)>?FSbU=jhy7wNBf8PDTb`609pkaW%4u!oJ z=1|OgxZ}|V9^2rfTvSh68dxd7_YJDm8m>C~H<&hM3P#4pGU^`#$SH;PwlWTV^RZZc z?h=U!J`X|6J9N6OOzAIj;h#wt*Dm z`E<(6^C`IXYwheFxSI*r-m7rljX7L)r-v2m+-ueDHb!U3&Hp_Y(z~q`ej-An(LiN% z1lr4C$+BH>z#%We(%pAQzEH&2=qMWXT5JhFDe%iGeks_?%=uvg=$i=qwnh1yOvhiV z8Nk$a5-Na+>SrOoA{9U+0ASoMU>GrCNs|%4!m<@j454u2hcJkRNHaVws_F}Oc8Xo~ zgiJl?Q2g!8i)D|lF?`^opO8lZETj(n>^mQq_ka9xT1~{Kos^sPASa7o+L@+Or1?@g)+8>vv3$e-?-pN z+9u9i7uv-VTg2}77bS|DU{Gc1WRmwW3`z)tYz5_FfhzSHPWaaMO2$|eiv=)CVg(Nj zV$PhIxbU|>gH{?tqod;>u)C`R)-aAa{!_T)##^_0JJ=5ddoRdgMz4o;LxP(guA`iP z`V2bH^RW4eRe0a~kHyzMbvzzhy>?vRptTm$`lsN!oA1Ce?>`{^>zmduZgnM^Oa4Xm>p|Xx})mzq3-~p4`r%2ceoqGewgiBU?0NAC zlu`T;*2O5mXCNSuPr?C!Ku8&Z1msjlOGE|)DPga-8|eMEw(yasLm`TL65rAb7(ym*ax-FQ7H` zHq1NX1=xMrVsvg;PwO9EfdP}FTyGybG{gFqd@le8pqvm1GvIl|6u2&L?HZy5AT0q| zC=wB+lp=$>0U^j(OT9haa_en(=6?3`Ulls1^kg1GS}P2$+lbxw*bQf&`UCjJV60km zskJ60FrWAEu8(~lS6^}!x@XVaE;|Av6>v%iVUKxEjJ@uk0jw1~9i7lFNj-{L)2HH! zGfqR@Z=hZ`<32YtWA3aOIQG9kj|(rl98+fWW8iVY$Bzy0o%avHY{{_P0;8&y z*xD_J)^3gP_@fFJ-R|My+ca)_*u%gmp_l`@+8Avm!~qU|PC}o9IAaVdl~I^Rfax=5 zVc&xe#$E@$5Pg09Xw+(`R4QAV@0+C6J3ipi;{B7gd{giz7NFK$e{mH{CiD@c6ugQ0 z|NOA(#X+CICqg6oSOR<&37}K}g#cEZ@&_?Q$_Tsghx@+70>q@r!h+q?oM8xwPmoR+ z8KI(dZeAt*hrM3TI^`4`dFXCx?yMQ)oVEWP*Vz(u`L-SfPkFUfC0kvF-%Ec0jHlS+FB3CRB zD<;hb9JmS@NC1K&MMMlmfFUhJ*3AMEn3Y>qOC&4`Dh!My+cd%ui700kivqbW!Bp@< z5s`v$5*QIEA!rqaF^J+S7fKc{O)%%zI{YCb9*8uJ|G2P|aKajyFaVNK3!~YkTY~ET8V`F3RaycwqvNQI7@gdk{`Ccfsl~EZTL%lw}xVc&Jn_zX@lLbF)!S3DC zyx&A6&o-s_O?K`t`$p7&NOD==J60oK2tEk{0tFBbgecno8`aAg_efI)fF)vPfpyIp zVC7Um5eN%NY=flOk(c4st7OsMyW*z7iVU802EKjDDdH6hnE%yZxX@qu3qYD&p`r120m;}lgev|Hsl2$VFeUG!b~tsq&L`P#1jfXZX6V* z!7o(!2-!00@VsP|!VvT%vwb9O3rBN;O)#isygf`Q7|hNGMo=g%EaIdz+FdU~iiq0V z+vNv8J+z>g727yI;qKO#|?QU>pRNibYK6?Z)T7^+TNg zi~mERe+tT_;&!z*E>Qu2-DWFn8UyZK>9z?xl~Yb@3_P(4N5AE0{Pe^xL5C!8DM%VGDlrq*mL0D^Hl_n-gX!{C-6ng>@4_xzEddgZ>R~2@_ zung?`a=G*yU&Q<0`8GM=MK8h~6=1J+!uercfeZPQjz_)1i*#~;Su|Mqvf`{4obk_Fgz@4e7wh1AB!F*H1cK`v28 zcNfZHsLp~QXi!djuKiCF6ic|7T9I&rl+FP{Bw|R&sf1Qo>97otL@0zdB0vd&NZhJ5 zA|i?s!y)uhYL+f8nnpN3D5Aqz!t9*h)djo#_^)F)ex(x`LAW%f0wZ`lj)9~vv&&4Od@-2V}y}dm!#%x!A z2gU-s%m&&Egxen%Sc@lZ1A9tg^S}UhTCx-VcKT1?`vGcx9ja;Ai)E6aq;aQF1bzNjujq;#t6lHXzdo=!S}g3&(~7zYcxhuUAp4Rv{Uim&U!&da~d*L9!RyVE0Z`?!2}2Zd+6SwhVye6u)qfuP-8j zBJu?YoDD1ilnw+i5EBrTfsi3m#;|WSX=4di3o$fX7%(YfVap(oSy=Ll#AlYaJjrIx zOZUddW#-FXgLBU~PZsMD9QW~0yYAapeHQbt`zanB9GW!L{o4Ux`pGDI!j4WiU48|= zcJj$|{@*V_-^)LYvran+2hR+pk@_&sIOA-(=Egfv@12ibkK7x(_ROIAiia_nj?(WzGyBmwuMEaxxu7jCSwUl`-r3TZ~}_1E=D8@l*B=t1Q0>SFm-me z%f?L`b0>Z0lr9iZC=@b2bbtJmUf$NmRS{=z4*e$xQz^?G(&2s?D2J99d2x$9oM z=VM>M`jxBEGjn=eV7^_bfEMU&1C~w)9@+qG9Kn;afwk5c9vww7pT{MC_$8+G^-fH1a>@Q-^uTztF6wfA{=WIe%HLPrtk4Ey<>>(*`x z`=GTOQK?ia@M|@6^>ky`J@>)hFFXkI7Ayovp;j3~qtS3SuhvaDtONkZfu9R_!BJgq|K}A$ozl=Wmh%9-*F1T&9EbD&%BYgdbr$}45jPKvE z3IDxUKkmNm2H9<|{U_}G+W~;hFG)mTt*B&p#3-+Cbp0$Ite$@($Njv;*k4h?!V%<k;1LlI$U)f&9^jjzFvPxu0c zN5?Q$t&Rg8Yb~br^g`qV zYUNbGre_XPh(=`q3z#}#V?B=nDWTS01bPbSo~kf?I-w&M{U3(U9R@KJlEO1Q@AuRd zwC&ESp6u_V#ph-wsIEFH8wmgX$3wB#oKbw>MOOgT+|xc6m`UvFl*&f{h6(pQqH)O` z9xlIA;jTwL42%&99?)54w3nPR$N<0FgD^QLU!z(VuKW?~*{<(1w(-$0wse3QQ;?fw^9)ApL zHdMg9Q%IK;Is!$$?<2?yd4UGyK+0HHC(^kW2jsczuLzL>u>mPXBy5S4A_x(YDB(~I zL^AINaf%?3Qeaj@M4YyVBc)I|*ps+s#_cI~8$L*hvw0OY_4!TI2N>@#mMv@#X%!G@ zRs~9PhNLaw>~#_JDP$oqDVmOF44qZX;d=mNtyNR{dhNxRUfFrZ zpU!IU=`Nx6Ri}w zyE^gGW8RC0AAS@)Q+g+yjZ_K<0-!RaaMkzfIQRv1@Hz$MZP8asfKV9l38Qrn1AZQ( zDi70|JP7j_Er#-PsEv)F(eR;E6zXWQctZf3oXy)(8GN#e-&0ZjwyOM5sM>8s z{R<|5zx4aSC3{`LvmqD_3Sh*L7Gs622hS)E*0NZ(!cfXG0#>5gisoDatOF|zWuy%` z9`QxG+C|olxt2SBcL3m1 zw1-dn;-_)a&rhdO$>XT^o`PSU_&Q7pZ(G0OA^iTVv*@8!187^c0JC>`A?D63Q2T}z zSh;co>iHa%%H8lhf@YA<7RCsvf+l4w6cjND#96z95c0r=K$=K|+}|RFTP>U8=K~YVI5jsIg)@Ydgg{8?jzLH(B`~EHMu84$4t#7;ElkqD z(p)SZfnEIhlG(txaz@3s$7){~B1tKPNnj*ZGb7DCgK;<{nhR7SLQ|&n@L&ISQP(-= zoZrzorFYz8BuWSGb>M#Z!;iiRPit)4JcwMA`em8nX^mOar{aM}9>ph5I2kuzb3O7? zdePoie%5CLEdvYt83SX4p&CtUD~RWL7#MCv zjc@(*G@ShHQ_wSa7VK6Ar?du!M***-u=W>K^mh5+;qgk~R$-9D4Qly>hOaPUH7Ys} z+mVMirHE3GLR*(cE>Fnoux^Ioh9sk>lL!b|vR#DFV?cXG?d0gg1RxJU+X#Mp!7^O@ zz;b;3$SW|X_iQDA)f=f%5Ih~ zQu&_C0gj2lPlymSYN(D?L5eVI&O9vNcYo}*_de+9>qijysE<`)*gzA3lukik766Hq zY#~r8tu8mIe@_SawVL(Y68LR7@IeT|EgTcUUof%ams0&gh$JA;BE~WYqLopUGc3Ll zA*+=#T6@--z?u;LG&F;RAwILOL=_c#Mu~3&3ED`enw)IVN;)<^D!oS>feS9aMY`_0 z9$)#vDWU*;@3xKj*gjKn@9j6sE_?1fso=*B0Ne(9*cg-P(fP;u=i&9oeuy@XtVQoj zKZ5g4{SIC@_YEHuxN>nVgBX6qI zXjoXSi9CX5g_I%~BZRz1WPD=M0GI$p3ZQ7mt6=$fC7$kv$u$c#;G}T!)~8u&6gs(kfrdCYJPm;mmcC zQVG+QF%pMMLi<>8c>hQp3}G<3oUx0;_jTe z1jZ1!W*wI7whX`h;Wsd2T0hpT+tBh4FfayFdb-e7Ea7LrJp(8G3k+Z-+P7dNoCFBGQqZC2(#T2&RK*lx#+Eccwx2le&YASlhaMR6G@tw;L z!v|k<7Y?Ks7Mm#3vUZ6U0PVX z$>o&tM^7F6CR^{)O7*iT%QwKpiQfR@d;g;OzFx@+<@lB`)+41R|oDODrYhNnJ#8RFkn{zZ4!@CA0QkhI==c<*~EAf#W~- z6Ns4 zC5n-*lpzOB$=W#%w~r*Mpir1RmKN%tv<`u^0zRYzBN+%x<^)C3+eI=eU=k#WKrgKp zCM)N%Nn*)t9Z7WxiXtM_)7@=;|L1e2U3ST(?OlCSn&(_xMa;$lbo6xM=imG)4u8>p zcw+T>u-I`jeDoNaHLV|ytzL`o{`_>D@t3~?)}m`_A3P!i&jJVvfT`__O=Ajn0vlLs z4Py*O*RIE+-Iw7fCw>{bE?$V$>()>Bij!GTD&~f(O;6!NnYOQ3K^1;1Rr{a$B{5WL_ppbgT z0+5F*V$K7o5eC*MTz9X=Wp`;@|A2=_*Ap56pK>il+tq($L3SRQ;k^zog`OOQDY@up0+|@s6 zVnAd)MK-WvEgSZbx7r%^JxtbSDXUpgO;^v#yP zf8`{6^kW~C7woq`1VHYkUxm8#%kU@J`L_cApAN;OiLwXQJc1vedu^o#P9xe7CpRv0J?htX1r)`>^rNA{3ljpYAXfO43yr zLtnHLIZhCVbA=HA#*mm%15*$<4hBV8D@tpndb+youmAMt=~rKNRYzBU-#7^LJcXf= zF>tMpFMR65_|Q9#!N!3BRBH8>%9t^Xu8ubJ_H^OayY9nDKmG--x%?U+=b@vw2l<=_ z%m2E>Ff&jt2!w%JK$$w2XeM@Wa2QeW24DW@aR3CHHV;iWY|P>E_u13?aqP#w zhzrlZ5IwVIKB-PbB4Bu}!Y{w*qrJ!R)81ATK28B-8Z4WkGIL!@ zt)xk+l22JtoJa|kEYNYH>`}W9)O>vA%){YR55Dl?3(=daxN1`X@B~AHjQdvQaOoX6 zTz#L$1FIB9tAu=0c;or1@}>VaK?LLbs8%XqwwN+)I(FG}FYLDG3ov8WEC>koY6ZUE z04WuAb5aa`X#i9$p)X?tPkO$O;3k^HJ?U&~viHf(`n6L2f-vk6D}WQt{H3n>%iq$I(r#< zyav@DdjK0o4NO~}a)nNmG>H8Gbr6(T0x43&U}K2j!73r`9A8pG5cuRazkxs?V?atX zDN-ctz)wPdSis>CKq-n>t4Xx9ahwvEDw&RU6RWTTP{k@>tOkm9HgZzq(q#Fj11978 z0-NUo)0d?wERv{-A@pT#3)95W$7WT)CMZmbrxTShnkRJgfJ!Uf)zNN$|L1dNTyfbI zT^+r>qLj+~?P#sh@O@O*ZNTf^^g4X!OP_=WVZ*=xbPHMD&6xsIdb&|A6>-Tm*WqWs z`!lY)?k2z(lzO^RDwSgO`Cp*|Y9+87DqA7=jgF2Y7#zaX1@m#@r$3C>zVvXc*{}ii zMq`V!CdOJUnmZR?`@v7~!|(kR-E(I>X`odKsMmpdUE$uJ*09Us24s_Rk)vn)SvLKj zmLg_OT@EcV0YS8TwzLJ$>GFyoIR(yZH#|WEBIjsicgZQblMwu(0l)oT^_^*T!BHZ0hA8J6#}KNc+B z8KrU=jd~6BdJVz??U6flM_?BNUP|rTD)dD!WKxeBO54Ltj}{_fMx3zi~ z+rsh<=lsZ!NFdm{`j>{o5cV^-O8%s>2E-tg9UJZbpb0f0{v2wH11bAmTtc?rI9(s$`^7vBu*dH_!R&iC-y zBNxZF|MQNUapA?6)BUT5QChGB3wGTLOJ!y7Ts5Xu$1kuT(s6Q3G&15t`t zGxE@60}Cn?NZ1nC0Hg_?Cb5Q?nLIBK#Y`4LmZ7wZ5Qpo~h};}tvTjbq^$h|P&kMTq z3G|J#h+_pXnzthdO_U0agmZ+MEg;fdHk~eiMpLRdfj|-V($JVu2qm>O>J(hXfct+q!JJ6YwQ^2?h5uiqjHl{7HDr-=>WJUw7AWYp-0I054J;t-FF`0^7HR zf=JBndkKecTYo=*2tjKB%2goHfXTbSJ_D4usOS4|-2e9C{0rA%&QyjK_56lDqyrrd z)T?74C`_F-8@uhjFP84U7ka1mL5xMUT7fYp-qJy_y_>Rmi9)rHCYb#j2X|SuZ;SJN z?&S$VBz3=upzo=I-D}8YA7YMlqfMph+iKP-O(kRhR3j1-b(Sshs$42 z{Uy3aNAZcTogk%r9%qgT-qfLR{5#))AD;ee+1Aj<4gh?n6qFWof{+SM{QUpm^Cx|m z&_5GL9{VYr_^soyS9E)I5Pv!QT)OpvN3pR+n0er#SUP(udOY8$f@1+J6-jq>KubWL z0jy#eBJv1eKOm(vA@4x~Ll7cSd0n6qHBUeE%R`dSn3?f7=HJILsbx@6X7JFJX)+(Q4IgLO0X{YVP6`d6vjZRf>2&<^j6p1z=IXondG=J633Svd2pR#p zdb+XGvfZ%j-Y>xH`3sQC<zB3yeGxP|RZl{|%Ya~{ z5(*N_SA>%DPf_*T+N@uq`XQzKO&s_zm|&)_#aj%1AZPa~MBv8;N*NKc1Q;T+B5bXN z)t<5FZur}|(mr@U zK7Z25Qt%Wm0PsrM4R1cU4S%}o#%SH|HqZU-0KjMXS^oCX18 z0|IFwcmx=BGl1|&0buwI|Xb)5>p;Rg$pU=Ai07Xs0 zOG=%Io(#hC%z{P`pjN9vDm5T5@Opc2$N~G{^+&!GhrV!MOzG~z#=&7!DwS+M=0qbA zL|8C;CVugUv+%huorpqj56byG>{B?#5CHN#RI4?Z(LwCC^Fs73J{<2k_CBPS5C*c$X zB!RsUBA?2f-{dUc@f9x9ney1`D#U19)?D`6;eo1_b(r4<~e)W31ou%xYE7Ys?mV)}goe$7yro(t5LS@-pH z2ai6nvg?0;`F~3`ZywOyJzc__eTt4=!4GcO1mrw?=0oqp2j2b`kRq(#xEaiL3kh0= zwSs(JqqDsO9UWy)-e;%KcMN@CvZCPeD#%=V*j}h z!i;u7YrFj`fjdr5-?5be(hN)oesM-OKJg=9))a$+M{z~Wb4~375lj%EULAw67E}7C zV##iMV(Id|Fn#7MfD{_F3XI=?gcfgepo8K-hmvvDZx#-P($GiQx|h`LS+$QM;LCtr z2!l>maG*$AvU(>|>$0uger5vj3*SqC#L_ieSNtRZkr9ERq&~)oz(B!5U?}zdXwufO zVE~qhSOk_l!>}GhAn-gECI$z>ITmG&G@zs)EbZ+bGO&3Nvv@>?mb?^qUv;f z`}~jaxkGn~Z-4lXn{oB^H_=^>tc2e&2Rpy`MOe_ODd!Jic*QD=G7#j7q;ffQ<~3Ox zpy6APQk3@qzY&n8oQub?30Iym1d5bsf?|RKF*A`kTUaR&DRRYGp(-c@6|06siX==B zyE+}a?3dL#FnKb*Pq9k<=y+1}F)t@Zenu-49A-LMHe?Y=8M`=R&X z6^FeTwR!`a28SH%Y~hdDS_ZR&!S-?++R7#5avmzx8rH1afHfO7VD0)%czpF5JhpNT zHVqEJS_8ujYYYNo&|WU1ueS%&`};6;N-t*3oQ7Q&FT$+p)6iBfAqWgc#>Ox@Rsq9B ziY9Y_iTVvo#S;GKP#wHqt*i@Y661j1CQ;!vpr+cW*4+ZBH-}s+BP) z5;TGw0;Tb@*Z&1my4C?>?O=}VuN}v zK60BmnNh1%;ny1|mdlvG(-Q2m=RTOb(@rRt+tFy$(Wuoj7H=!?b4p+9nLmmktqBIx z$zKP1@y8|Go0Go37z#nn0O-IjhCdeoW;Zo74*0fI<~$kj%K~7S@(n{8A>5G(3z}1~ zC*k!8@MS+HniZ6=E`|&shCqRYUsFJa;8Z^eRX_K0!U~jCFbt)cSu@BmkzyDl$P;VU z0)glv#IGw+L0xh)du7GrtFfo5$>zl`#T}R3F8;%3;sc-fqU^fMGK>J|I`oUcRVScQ z8WUcV7z4QV@^G8bby0 zVAv-MMR_7((!|D+@|^P)?IcFHi9`q#*4t5-3U>En2YX5>mnx2{RU-AUIXsfo%Sc)k z%qEJHP=}Cen%{F_5j1TLk&ON82}`zvP@2zYW(Awnz^0UOs*E}UL$<67rM$G2+W5jt zFJEx>U;jQgm-En8ZWm@dUJV2=I5Z4YYk1)yFT`g)_+A{a_Z}D=8o}V`D5z=sOiLJK zj_uZ*)~;ANUqB(BgAQL{NH`lPB4A;#WqA1h#U6*0+{q{$`tpk;jQLyEB zhKwK>tryVMR>Lv-+>XQNt^f)Zpiuw^c^4#5yyJlLZ*fosFq3h~rA55$qyoCy813cl z7XsbiC?N0HZWm2T(<_la63mU>o+7lX;uM~ za%YP6N`cZAZ+f;b2E)v46TT6^&ITq4hc}-tySG)yBkB4}ls*$GeN7-3D}XWV31C!o zJ_?DDgy7doStJ+o5V3$*5LppnMaqWRb1UL8#AlEe5@Gffv#*4_hFEx#3rN`0QVaq? zdxt!_dJXpJu~Itt?Q-@n&cxKljd=I*pOTr=r(+Dj)K~oqwZFd`4?J*>?7Z`?FhKw> z#SS|F@Oh>R-f+pqIN>`d)88(>1z2_fK7HbG`1I>ug=i1O=&HwX@#R<2KW@Dj^(kGL zzWg98o6(1ETc!HimDo5|Ly#|$RXKDP6*QQFz%?jXrBF~H69lkUND~Mu=kz(ZUJg(~ zY&mR^CSn0G*xgry#Qk}bE0T^jkhpCm5foB%go{8hsgDWmGS&J!o%h!*9+y7hnALkI)z$L(kN{CskP!gWu>7v|q>4 z#S5_43-(9v)aj^>jluUDP+{?(L{%gq{a5`Qh8hJ-?;6FC%O1p0i|50Kn&{DhM9K|NZQAeDuVV zX!F_vdS3cU{P-uIz<(^5AKzug?YH3ki!P;m*K9<&e-Re#y%%Qnm8sMi!|2*4Fx2p2 z@?DfG6`@Uo^5mfb27-W~bAT2%zQ;@iA!312M249NiaZc35s5H~fRvW-g(4BNvx(h` zIF~RE6+zd8>sHDUMYSqXsRdD7xSW{{Y}!#AS+0~--&Cg7C9!kk07nFB(o*ruo)-}> zqXYuY^MYP86sAh3Rl1m(nZ2&AuAovGE1r4Y`AcuS@z$wcK9Bac@d1&@7WRVxV;cv6 zatW_G;t;(1El1;kz4m}*i%kQAX!t&qQco%7|8$+Kb)ebR*?}qDUAW`k`*Fe#e}=0s zy9)W9ZnU?xZSy)i2Y!OF(P3!6j-7X!kA3$$08^&TM6F&$y;^tEq_G?!sgR31ag5Hj2 z7Xs6Pjz+D5T&{?j^XFmb-S@)6otL4#qYK9PXw+(P6F~I$9@%_E;}g8&mA)j*K^c2D zV+BXxC`ra6xo#Zvg+Y%b$xG4%e=X+xh{KO%BoMf*bADS3dZgYWn>SMWsM!J@KMzP@ zL3G>|=&W9W7zh~(l|@N?eM)_AB(S1{0kW=)ftbj!VaYE(bqrcj0uX7pb|kcRUFI01L@cHD4^!3xPKQJ!r3ylU;skNF z%sEvrBk}&?Ou2MCL+I4HMEw&Hjc_&)nYlrCKZbY|-8ZEKl6&tp0cO0Cj*a#5g`#wH zlaimZC#zn=ksE%Z3%)6-$!L&5YP(y?Y9r!`yX$_5eM&&a;c2b z(F#V!#^Cz~O4Al+1)q@@CL-{ZLQhu*I@;Uu&|^>Fr@#Iaes|WnKw!|--v^?}SJAj& zj7B2}P#qaU9u`X$&BI>%yZ}>Y%|X3UN4;8uh|9Ai^?B0NTbzYK1%Q;G;VTT)N`MwD zo3S3R*!e*mI_FVPaSZT1z%PJVyNnEWz~J*z37pP&$pkw>`)0`h#hCRm3`z0_KbpS@m z-{|wiYvClE>x;gggsNWxd!SJ96SCq4-&p`wM3zN3tk>YM-rNN~d?Tz$3YG)~NTtz` z&XU5Y^a&n+SeEZK8}}FYlYjjBdsxs>!>7OcP08mJ#sEw|`j4ob^B*|t?BB`jk3I&% zl6fJ#0|5VxV6a*8z5e3!al&^`p}${r3$XM6eD+%(!l#aU1-irAM^-<9i!ZyJ{&DNw zs26(Bx7T7U-gO_$Zj92{`qdcSJc3aHdBry5^B%M!5^LZyldu9jqCB}kzYzgRsQM8g z%;ZElB990xAnT3?4g>`x5&VVIB@ia}RPL@9L^U&@s7eMRB-x~J7!*m_$C9yym85Lp zD7@idF$!xW9fH!j2QaJrMfVkWKsG%rB3^5SFuE;K7sa}yaaU)D35>~Ibm^5#F1q~6 z1=bjJc6LH*CDvvYK?S$V(^!j<%|n3iW5LqJc;(>-;}wS$Y=$ll?r@g z01?;Wr`6MDZ%SnGT7gnPTd9QZ?oJR0cRlb={N~Ja@u%}H1dolP+~1F4E;nh_Pig1e zH|llNM~Bf~P}p_Z&e(m=ebCe2k9xgt>~m#|)D)(5F@k6Czc_+E zHWu|p6+zucsl5$zcUpp_yYGov3l^bRD56oX!*A3f!qDV}gE7rYAB|H0n*dPaQm0Jf zH@+fu3 zN(u(jSuDxJwvMUmR?5`9mt(M}Pp{`FQ7l9WSLq9-{!djyx7}(XVm#nSYR@ z-|*IFO!?aZfX{V{I2gnKoq9Sxdg3=|^Xk>;df5l@lb?JP$1F@z#4GN-6<1t&J>B`p zYS^xR%-(rdEZB7>dVNcyk3EdxF&_=>k#1{8nFL@!;$--$SpVxOQR)B6NjTHLT>X&m;_E>FqsFW$QqV(cqE)9jJ9;7)Wh`d-&h?? zZyZTh!L_h@)4>iAFT1N)!W404pRp%Rn@U34*-P&uw$|vJm!t0P&fu{pR`ve%!b^6& z`=0yzAV5b)8$3^s1Hs4^6%h=Nj6z1ofI=QimM+07UUCp#dFVmdY5qL4mCG>Jpi--$ zQmG*bf@HoAK=|L(^p{Re+bF`INT{SKMaboHXe*V_(bfjigjMU-;p!W1#h=c*5I5a? z8{h{h^>(9FD#A=cQi;^Qz#3G?#=wm#`a0XNeEDwJW%-_H>+C|MT7_S)Lqyzgd`qyC zNhyKNw<+bCDQe-Ipi+WG{R22`(IYry-U@VgZg#WVetriGJ|7{lkFjZ$#!Ek2#=2pJ znZ1m_JpJG&B5p%Ry$0=ROr1F!i+9@-iun;;h1t1Ja)(*~1&Ec~NCc0(}(PxoO}FU#@2?-z)$!xo`)&^)EERd>=8<7S%qU zl;YPi=}RHFWxD+SwIQ9`&!z^5`G;;2Fy<73jvVa%V4H(?oYy>OAuPy z4hWe9B32kV68Iv>34=)l1_qwA8xh-Alua8(F{d&pvtN8DE*@if_{U$ztB-g&-u$2c zDS&IEE*$zFz*T?5?YCbid+vE4*o|a8qkktm0PuNW5wCstA^hk^Kf;MW`VpaPI+nie zQ~2MH{}&FKSBPj4*Is-HuD|6rdTh7`%v_3D3m0J5>7A4}BdD%gkD;Lv_+E)}J>AHA z02xC;;KPRNd&v{ZGr*dN*(rk}QDKx@Y$Y5z3`!BX@0ZwE1?5GVgh)-KXfDu&M?{6e z_GCR>7$8a6$(fl!j`t9Y3ilhk9mUaXUN|op!dZ43NE9H6Lmtv16`ZJhsf{F_h$~f; zRCpx%+#CWTnq~vrN+nY$74Xo*k4?MeiYu4gb%>%%49O%Xirs2kx~Td+xRj3+K*8S9`nL7+{S{5BdQD--n4lr*OQ%ixk20 za>#ogaybv4*6_53z^#8<@x&_JeAnH$^154a-L1Eyws8O`7SPe%gZHJVAkX4>=<%u&ip)J^02JJpJzva)OFGPUaIPa5MO4RFx4C0M&ne!bhu-3c5fWG zh*Y{}@RKGRm|B%UM{|5l04Ofao2Z923U`RW5&#H6_rAG#KNeV0U`Y7$2$&RDSYnG? zkqdhm5!M3nloDeCp_~@jycCs>;r62Vj}6I^J|B(UUWVK6yj}+Wem-9Drq|+?uYQdH zz&WG9(VhDOxD}PL5h=HIz*-JNK+o)H2LL|bEaD3<#5Yg*37vbvwLs_IIO@a?l6GtZ!#@A@a!F`;vpd04RX3oy04MEP}(!yg*L=9&QtB`W1|AjJf$!B7z8 zhldFv7KT`HQBt^chdW|8H-MqZUB?7w0yIVOR02q>5R`K$LYp@PN>?@=17bKINCYJU z3RkkJCd*g@tfJk$NUfbqKrv+tr&qzXPy;i{U#2%uJj5zr2!oV>VG8_GA1m6jcm&aH zZEYr>&*7nm9-V&C6;~{~_x=Z`z%q*E5(`a3?oC5qyupAh~gPz5Ij!zLJ1PQVDPhml4eb(2F|sexUlt;dVzKZ^Zk zu0nVFkb6!s8VGU_lLJQ&(j6g^=hVp>K=(2l!wN6^Y#H~h(wNitWM%^0%0y;{U$3Fj zsH0FSVb=UbShCx4%vrDq#d13WzYgDTfQ@JwtESPtlbRwg*LDyP!#&u68J^%H9^8Rf;}-H z%Fg|fgqNu){X1b1^mrvvU_sH^HnEZlc#x2l5MV{bk|KtHMVR4c{@mrz?q!H5HvlNc zh!pdXx>e%AN}-UKjqIVkaiz>(Fbf-I?JhT+c|J<(@54Jk_yJkAbQu8P_%r^9AHC({ zc^#d3gs}i^MAlF$&UYNuLumUg}66C_y zm=?$@ms4YcoBI=YL=lh&A%-GX4wdu@hB>qFeR!Sg|D&WbCWJtdsCO`0H5Z3TlHI-O zYME#SU2G@Ey@7&k!E^Jb5M*`=N3(&UvPWqfII(|`Y%K98DVdJzWeB3JWe)`1(cWgY z^6=;rEBkM`?T&eO-gEEV!GX=1JP&QDnV<4f`;}KJkNvYDb#BXRBAP_9{|4Zwu5L5cph}Qh;pffd`^Qos*d3nPlW(! z_v^I6uBf&$24aK$u1+l4X`w7xvIH|`&x0-$P_0(csMi6vY9>?DoId_!&p&x3uq7xq z*~adb1_L1sjy4LYS&ecb!2I4p>^XBaUNB=7cJ5yfslNj4j?EfM0i=eN(2+z)rjDh6PJ^K~HZ#SS%XV8jJ}*M4{T(Vg*}V z$eaN{NvnMBYf@^)FPxkSZ;m&1q}0I3@}PWNIQ z{G}{jm-@91tiVKDobj`vt!q<&XEAO*FN8tYy%z>KR1ja@@-~p>&uNL=-ri)sFI4}8 zEJ3U&uGfeM)BbH;1eJJ5I+6VWoQrYGW6(!IP-58(!GzYMXjeD{mT|( z(Zapa&ZAUVzZS#8BN$^Ml-iKXX^;&_i@>t0iqRe+$3k!~?FdQ{vxyEp%We-f7 zJqKPcheo}I!1rAsOY0EMT5RAL4}db>`c2LFMSvGqz9fK`*u>#0W@@&1Qz~C-zK=4{ zH|~6-`f&n)ao~efmqWFWV(=q4J%B(~VhD_tKHH+#F9l{|WBWEctc?*~Mu~*+SR~kyUZ8pRjZgQB$U3Eu7zzv)hH{;LfUroSj*3_z?TJ_; zT0w;JQm^~cRo1AMJEZdH23a!2AlUsSxb2R6W&H(b;#F^W1zvU3>jVJKYXGl3WPjks zn{dZ1*UKLJ9N-?K!tQwdFFfr4z~?ax8e^eUc3yDfibwGMAN~NR{PtWL-7M%j;wXIo zhabkVOLva%^VnUt;j*j#LHDiRh|zK{<}O@>Q{axCBHDpn2=S;n#QmkEs^y@xov`!_o?2zUt)hF~Y6L8LiM3R7$WQ&>jrY-7oW zM?4YH49*Ed<#RbImrF(|((Bf5>{{{I6Vo1kWW}@jpaqEc|r0jy99 zJXHKVd{!tG1I+6g#9lL3VfnPRSkyCsw(=;T0{2uH^3KUQ`e=eUggxhOffUXY2J*zOL1a1O#D(3>PS_(Bp{fDzVP8z$zjmL=Hv~TfR&JD)h)D`bPaDG;2bCA>v2+=3Onb@&@^ z8LKev4hRC{p&H~+4cy;HxzxbS&S5O+AHXhs>#($M1E#eP1G%~rN~{MM53m}-9vG=b zEJ}9lEPl2iuuXtG@Sd-gaK^PcESfIx0|UQa14Pi>*N+7|FT?z$yP~gu8U&0+y#W*W zAkv~WWnNUZ-n*Nqe5u5*WL}uX7A-(3-PacnPqlYBmp0KhB1_A6ZarFY{8 zCwx&p{Q0lC@dRU_|3&kDI{n}V9-}>P%=$wmh06OR5RquKiKKqRi;6?HM z0^E4UidIvLhaH0Z=NH`mauw0rFJ6Iyc51|^E+)tWpV?aEytXU)nKxxlYg?wIe zxg4~olntzI_lnfdePnmMy(+P>Z%DHMwkfvN`q`Sk{wz)wUC zrP2ULA>g$HL1%SfoCTa!2)CvRrl@U8w@r9?VjvuUT>^#fH^{E0kSVl_bEsPn0W0J^ zgZ_>R=JgI>xBm55*1rL>ItS5~uL8LMp{5W+A=rbkY63%qLduTQ)AHgs`d{OuUWFO( zN({6yjz6i0UtYvmG~2_}IZLo~*JYSKZ!YrrB7#N(4Zk5G0z$%4L1REX5m%u`5eCTp*Lfn_z+gdbr)TRf825htsL=@pE?)wmhOx>{hd^* zkDxlR0YhU|2ZQBycqCBP5($Ha+;%sK+XVP|`0LrH3U}2DQW;gGq=aygmj&j_P2-iWr`ZA{g4j z)RY<)Bu_%#)vl;wYJ0LnT?Zq?AHOTbu1@Z?m19o!r&YZrj`2dCHU??&|22LLmTWBbvbBUwg<2$^zOZ^>wU(5&=@cU@}vWi~_c;nu}`M;#7HS0G8eeo<`8U&j@ zMxyYDQ~V-Z7fKllt!S6W06SIEg*`+pyZC;_!j86iFcd@#vnYrsimlsz5WeQOVilyQ zNi36?K%~7$sH?J!Y#PEWH7xDB?~Mm4p4@Zh@362Fc*k)cl36om0RWD>aV>s&z)UQe z-i_N=JTB$ZvupY80KgrmmM3EjLFo zJD>}Rl6bQ)C^R~(5OcI`Bn*gz?;#*zmlTd{WFjbzt7WnlF+&u^!4ZVLgYia@XkW38 zEaQ0VNUQ`>ayb(M5e=be{hXKDBkUm+4vC+O;xCDiYT$7K%{dyFYIJwC04XyRzcwFAh03uv4SE} zap6QXuNiefO5$6|`19iAzBKS9AeaTj7zDHYmBG1jpxAuunwMf(q( zt}U!!SfODx>c&H0-E3eXXV8}SF}-U9GdhN`Q{P5RE01Ab#}L}`b+i|1fER=gS+rD3 zIZIgx;Babzk%7eYx01jj!sk0|chHzjCs67|>G)u|W_N*MAxu(r~VT2MsQc8Jb(zz+iWb;o2%QL1Y%8ANVn`>LpdC8hi| z&HSaU;AAUD>V8eh-KL`Eq{4-oLLHgnW=h$<;{Y&D@JbTqNM`)V!CfZNo0|6vEnRB0 z$-{vciA_UaXbGE%;V+!|i_^R`k;<1|1!v>p<_P>k)lUE`EF5OkETRrSf`!!#vLWoj zvfJIpo+cIx28%!wYp_@-cHRgHM8wmcSZhUCL=?j_N(yZS8K^1bH?NVob9*tgU{AT_ z>Kib2$$j-(c3je!z&U4x21ib#aX9iqfR0}+V` zS>aR`mRz|sftW49tu-MMC=M4OBS{l0PR|L31=JA~I#^5A&n5eaDYSh#RTq=Y1wz6= z2r?FNQXVbvB1jB72qWb$V;86H?|_g}&?&K{tQn%2IV!vM!ut~u6cOq0XV!5=jzC#v zol!$W3!Pk#w?dq}P61yMzKMDpDN*WLLSZ=j2aHn*TYzAbjoexl90!L_76vDA-30L0 z`nHx=I7ExBcfdwq7K;IMsfL;D!O#dlD3OBp41%Gg88rSnoCQ-A*Ulx4BZ`}V4z7Na z;gnKaMAa1Fa}Kp2hmDOMjQC|VY#w8N8SAS(81>swvqcP4yAf~>mOU7ggHp~i$Sa0Y z79KGO#x)_SSd^Op`jF}LOV9f?TfWF{;7HWHD6!jQ=fd(A5kX3+XR3d!lm2T zktl-A0LZB_=hS)1s(s14UmWy^;EK`!NMtB1P!89$S!$i~ZJPUw6~2i!e@tX0Te!Ww z7UXPaVYqD_1S@V!iBl`J3h~YbJ7TpD!p2zfv}SRAWXz<6V1$%nwj$a>d?oN;MJOkv zAw>}Co+o3Q1~7{n(zeGwcwo$vd(QeD7Igq`Kkj&$HDe|K;OsFUZ&-R5u=+au^~^uW ztKaa}?Z)!m0f0MB+YE!vn@3=)IQ4%|!^yuqogR2>1&aIahvPr=L45YrMMU2@pLr4r7poQuxu6d*eFFR6)% ztm9Ovv^Yqkq-2^x&X38!ZWQ!p4_pWa52KxVSHI9*?Zba{269%dBHMdbqIiI_zP87X-;*=U`G;xAhIBc6vf5e2OU1uuYBjE-Uh-K83eUVu{0$ISL& z^p>kAdIsHv8m6}mqm=XEDMn5)3Oaz+#-)`h1zQyTfYA@%3Iz$Rvnn#~ZgJQ-){0Y5 znwX*PI#B?72y7m{c(7I@U=5!=4EgOCthb|X@~GMZHdeYYSZ{~Vc{EHOLydO$K>=0> zRy3^j08wGE2GGhPr^NmI+K5(RHGodOK?>zC_ux~ZfEz1uX{$H0W-T-C7t&p<0>%&* zAC;1VXUgo|jX|(!14k>HHvzqj0thBjA`l@`DRnQsu_FOMqNuBnY;-TDsKhy* z_oJlBCA}B78On&rgj+OBr2fe`7~CS{P4qr>-YJdI_aV&T_vpU=DBUX%tKw-QVK@Hi zR<oMA-`UL=v{?niEx3|6(M;y36{(j9>lGBCl%JSU-fICi48U|a{%Ai`ssi&QWlTZ64 zJ@6Q#u-`%W@Q2=u&%S!E7zXPb9>>KOUrjgOb3Zm|g|_)~Fm3*BnA6!#<o}BVLu4s>R8ikD-uK=T(xzj=CG;GVY8bm;hli57-QUtu9NN z#FFbXs$jE4oHAr52ZOEPZ;RJ$4gR(T{3g7zNilS~bXqH5R&EW05DXIn>w!gqp%5^^ zJ@g1ff}CgJDObI&2*_!Jwn77?ypO!L$SI4QW|VRP+Vgefl||7r$SDJ@8JfbLB*jq5 zosR)exqb{F6|ji-PY4W+fEDUN9#xY^Jt(5aIasT}qF~|R)^H9Lzkpg$gkcp6&MXSX zdan09wA8f{cwv>iQj9z?RQSDV0*Dx~#vj646gVfi-%A?c;%>ckRZHBzmq1*yTQ?1W z$^2ea&yv~9k+y(iwXdnDIji=?5Ajr|UsGXov&t9u^@a0%l(l!0um@Ad>Lr_$Ifo$V z;3`o7DG7F@RJZW5SeL}57zR8M(gI@z3Stx_ryyiRj8Y&QNHJHGp?m?nZnexS zGxYLz3|0qm>S@2h$)}w~4?I4Ew*3ylM?ZEPK9ee(uCG~%OD?;TZhr6)tg|_k z=I?~LOLoGHc8|)#4hE~Xfq>gcmpYLv0Jd6p_3{E@4JaKx*;_XuBf=!2NXP(+T!oeh zStCSle-Bv}XV8RzLQrm2&?SB&Jw}PJa_~V;86;7zn$Ybh4gpUkp%O`Y0~4Dy+%Q5) zC^IMMA-0iIpceumWkVxgq!uP0n*zOLKCtO}(hyE1i?efzncACl@;NEePD7!}oEO9e z-IB71Gr%X&CYRXe4OPMTJ}pBd<5j^d2xefAvv8QEGD(Rut>Lc)ustdGlZofrWZR)n zT5E3;L!wIN`Y0{dF(9Iy7$;8Z5g}M{>Y{sgbRT8mfRfxqh3mm<`ktaikEv&ja4BB$ zUAyvHNquhw6^CTv2KLwnCvshjnjEMSW!LO!Ey-7i61S0`Ea7wlB@dtU7LAF{t7PwO z7W%R)(-7CMq=-+ouyw&7@BWNMo2L#Xm0HRDG~=p*c{ zbN)HSX;8B>{`Ma)#M0R_ zaLp~ZN#C^T+pXoh0|0lN{zWjj8DIXNuj4zXok`Wrg7Qm`!pA=TL45jUyTmZ)uX_|1 zTzn;6dCNT*Eq0+}r)8MEcp+w#6%|JZ;BOc}&06>-PgE=*r^Cc3GaA+qG(merVi>|g zVl5GJ5HJatSP2xEh&*RQiVX(|$t8x_^$EK9VZ`7<$U+|>3Ybs`fzgJML=6Oy5@GGY zQM6lWMf#dGi+A5Z?swV#alg>j)lFrR)VDtH8 zZC`q2U((l@E%{D^per4mq$-&4gj*(vCk2D8)WHdWuoXCN2@1#Gz75c~Er(y)Iv6Hk zBN=a2!D-pqdT@cF3@<0B7fD#-u5*;rd_S7t<5KO$NFXZuxue$*$OJCNecrebIk~OX z`6jRvYEt&xeUzX{^^5J=B+4rZSSM=Vc!e)1aE|);5O3~?Krr3e7g@NJTEQ0g_X$aS z9Vc^tDYXxjBzGsR_EA)9>}LA}He6vAgI1^@HmQB-xju5>My*x53Dm!d=lHU_fYUpI zZIs>(10GhG9kh~LR1`v;C8q+qW@Zp80>ka*Wq`tcy>4ohjS=@sL^Ht(arpaZ0c#TD zk)UCutTc3cSq6s2&^9tCGiOajZP|Wu`;9ka?G+beuU%&0Ki~HO>1gi&0Q_{Yf#Y8D zHsBv;;Y05_2B)0%I|qgT!d<>Q0C2}?yNAKG58sO)|M+M4;s3eqBduU?(?9RR#g|+~ zw>`WPgSmEe?z9ZE7can!HciEm0ho=07#ymQ$(5i>C3qS{*1!Z7QdDG|^g&7(WEH_n z%?64Pkq0GAmQ8e|CI~01=l}#hXHOHWfTx?F%hnkDEdwl(mDyIYOlDNyM8j)jSEg}?eb({uOq}rS zp5+TC9;5j_WE4P3QoCsG@QdqOTB&`RZ5^riX^WTPwsdlOOGkL$xV|NRPZ_nZrTQ1m z`HcrZ7`Ij}vWT0YFAj;M)xP8{gva>nGBcA>7NONEuCLFE5Q_qn0+SVH#3^Q1ArY#i z)>_tD327~C0ujSP`5bG4G%Q0%qzEOJNvsu=ia8NwWpjm4tPDwir-$6Gd*HF*VY%Z^ z7h`sD1aEx%+hw=i_5c8E1n}aMeuD=;_f9OC(U0qHzgwnEoA#Vh{dNH0j?=#c2CcQ@ zUI{hBVEfCC!pA@PVSMWFol%|;2A5*?;`x}-k*D0Ib!coDK&>uh+6$n30eM9PYY`aZ zjuHffVLxc4$OM*z+=LX{Fbv`_hHN0@5s|=<740^Ukh43P!}~hFm;|KQva1FQK`&Co z5=epqiAq()C;*y;H3_NM9?pa|L<>k$vnrUH6XZ}G46WhptYETf#6xrGbkodWb2udK zIE<6Z@oh;kMB*BpRFEVFK}zpoPVa0^r-qy60;3tirqnPdqY8%4q)~7|s42^l**MbD z#FZ3Gj#CX=KbE%)b27=liEUE|w?!7DNlAlGCkSRFx5N&0g9cImcUO2lA_ctDc9K-CvHPUkTfV%=%SgvY@*joW(rfO;J9Zn zv42yuf=Q^PMTi73EXEdbJhvzUP1z7jW=l#`m6M#GAT*M;hQs+mBsDR~Wl5=mXrT%| zEijm+uSo&n1eWn+6~XNNo=)IpkG#}AD*F1O^F1!31y7S>DFr><8 zU$8S4EtrFuB}IB{Gb$rP7^z#TkVc_YL{5RUF%Tb zDIiQ{^+LsuQgeQBl}r>Kffw7tNx8I#Bxo{j9UW4$hjC9~Qa96-V2%PJq{5GBnH)}8 z!xO0UxE6zZlFCH4iD^YwF^QK6hFLjBigm z_>%jD!Q)JIOKJv?6BqIFb>C=~FIE6s ztA6CH-Hi3?X8DLHOyW}W3}99PbXIUu#7vRuN14@e>A604omdHfJ`Gq)Nq3)nZ7ob7 z7GVL1nIH&+y_^ayadC%bXtA0_85Uv)aw5o+sJaM4i(!VxEQL}YHI);;ZqQy`Ez{;L zKz;r`a`!#g6quV>bC;` zcbv9+82rgkevT8qcM1VrXn*C~@x{-59G`m8y!bw=|9KbAJMTieYsD&f6*S{=(>0aRY4XQm8aHsajr!o0l)s5ozAR`2?bP3KcEmr4Id z9e_>hA4U6i5q19&$8|8_S~$wuy-bR12zFt8i@5bI0)}#74kch##1!`Tx%<0DaDp&M z3$bAf7LXQLD@utlK}fu4;kf&M@mx8C(Ew_J6!STlVp)a;M$uj!mIZUCVxVs)-1)>N z+4zr3Fr!e#k*|4;9QdMx006@PK6dRtaN0p{1h5`IJn?IC{Aa(AI$TJ4zw-_N+;Q4* zdM04-ma8tpx4-iPI^+C{0CZy6E8mVUf9~UWO9}?>y5S-{4nxH+Jrfw(p|5!x$vFE-=A87qHGxkCsF|um5s*B zhD|^?IoJaLQtAJm)aP%mammc|HP^Ca)jp)IclVKIOSjp|jq6(yrLSqu&y_7lGk|I9 zmyub;hLqZuQT@0{_2X1&p2yZ2QNkk16D@8R zRKN_6AOt0FWvx!}%P~B#z!x;Uf>cNA=%^0MoH_ka%a-85dpFDdS6qy##VTI@%2&z( zFFquGbp7zA0es|*?*~?%jrY9e^*H%wKbNkqDbE|#ZwCPGI6Ws}@P?}{!Z*M313KsY zivVvdFE zQ-cWke2(&BK)!;}LRJYB3xSCg2nLpvRwULP_gTUap?k?outKC=r3^*u=bZ8v!VMAF zD3D5QQMaNl0VJpFrM8TyxK1X4KqPa5DIiPt2qq=c;)T%IqEC=o)y8BYFjX!s6sM2V zU)PJ(z-;Msx=&D#>k!PQhEu9(YTaCH9k;NDCu0#$5(cyCU^Xz42EvwV;1;1U;g4oj z@#zM>rv`;t)*Z)+6G2}J{3y97TZBAEbV4n@QnQUa-tL_k_EPq1YMw7q8PmYmO6?m5 ze<|Qghd2PF`uNf_d=3N!5ip9gb0wYLb>RdR&*+7UUl#VH3HBl@ms9h5ncLjlTwr3=eJ^lzT6_5NgdDy!Dv3$Uz6cBz~m*Xj2u(|G&2ZXP<-JW>3Xcx7;qh z)7*MDYuW9HejccPI{EG{&XCn2}-zz{(b1R($l5h-F3<=mVQ2$Nt)JTn*tNt_B8@8Q*{4J4XC ziiI^%1ca{SIfTQ+E>0(UGil&fp^@yIU`8>FK90us3A*qKn(JdC%QzKSp|JWUvWTf= zv2@lhj+4SFwu2*uFbji`MGShHV6gc%iGgqe*lP)e-bZaqB3S88``xtmE28l>4?FPqD3*{6jC8K=SKjuBx~%5 zh}p1&FB$}j*aD)B5h!+tEhS=$JS1`Wt!OsI1egivAn~Fc4bGGbrz>7k~&uzbY zu7*5z0N{?(^BxATKL0!%|A|l2T@OA0lon&p|Na(!{q@&jd31;24Y=sSOX!m8Z^Tet zP+YtiQ)cag*}We1a|L7THe#?+qgt*Vrd&do7=rjPfhHw{KwDC50i_8{6m23FQ3N&w zr6>-D5J)&)CP2cZk{!7cLQWV831j73##CRMEK0uz!Tk}Rf0F&i8nDEW`Z6qz9=R48+UtifFpgs z=J3X3VK05Tsb?=c^Op{5P#nrgl)l)aZGyjaL31+K7hAgF{9Pu<5tle;i<(m)n6-G3 zN$|!nm~{7LKrmAOGLRSD9$uHScLnL$!11$xEtJ6V^MOca3SAkryBw)}L}9;HvYjJ@ zLxx1_<=oC)fv`X^3A=@zA}NIwEFvNTQA)8OJa0wB3$u4x35;=5IBvU)Fp+>gAZSRj zTtHprWO#549saP)nKc!((@wZ={RX-BqMIX3JxW%S?wJ8_o2Yl zsubptj1?rbi>SBcfROr*U^O~MhGbh^LheP0REhxUiaDe%5f3?q3ot18-e8_1xJ1A- zl)b|Yhf6P(iiJf^;^Fw1vUiwD=ku_6qz(Z8`+#sUDEuYB-G2il{*rWFE$H|c28oM+ znC$VgWdus?r!EGER8jg;0CJf1tA#7G6xiD%(^r>$wIT~wKwMtMR+v0WiMKF!keU6% z-d@2BWMqvDN%Q=h7u2u(qwG;9%jZ`8F@I@(ripdUp#yK|P&{*j?qzf;7@T>HIma{2dvBtN_T z9@6nOtljSr_C53v8P{Dz)00f@o{~8tT(pdCoJveeKTX8$^Peq2pj|B}4sOp2MICI2G5f_s?XT1&0Bw9FYgY25c$Ve@yxdH-*!ls9Ur73p? zhs+|Bxq|h$nBo1vs3JWNv4JuabY0vRQ-VP%HFUL5=_(kM%rufqzg3C2a9`gq7%b0Y z*g$fB!0-M5;ZmTm1`Lba*I$a_`&GOP{{jr4-rtpE2$VhGZB+at6_;#&qKgvaq)Czz8&%tF>#q5P*v&9DNOWxN8YcHTnC-W2*W0f6I;-Ly zr=N0)KKysXj$a>m#>JQL*|Yx)cI@DtuYHxi==J9nFT5m45#hH6_%#5qncrA2XpE^* z_d7P-$_L)@K3?%D6>!T*mfERRXR% zhik0iQaOZ0j7;uE7F%%^SBxUMm=(--AIr;_${t|J3>JHUxeI$JRC>rfqSbuh+CJa| zu!Hvp2=50NE-fMd3YflM z^3XEZF9&YL?q4qD4qYw>k@?T4fW3NLOwKH3fGz-6tzIVwxxvkwfz_(HLlCdobCmb> zqMCr0>ujnF zc1*ISmFk*<4`BD|1N6VHx{X~|eVcWi9;cmliatCucgz6Ky7*!~d-mA@_`U9R`l7%8 z`wH+&h@$8>&fL)ez-E4{XHQPzAAjfTocHFp$^{o+3ZqAG;tO8Nd9QgEPt2-ErtiLm zi@)(L`O!5$V~39!UB8jF`yMF!?K47q_cj)G?q)_rW@rnZV(uk@_xR4Fpoe(NOImF2bz~v&a&;f@Oq^7A6=fEh@PrUO0v;d4iRF z!KJ}q$qWKDNAV(da4A6e%gVzK1P+%5hPuShc>wA4|CJV$`*;7=Z@u{ zyM&~hUq@MLkFUb=X&v}gclCs(P=6STU$-s+bU! zDrur7wunQWN0TU}Z6b}F#kC{dIn|@zPIHd(9p-h3@vZ~8HZO)TS)k2+Bw z^5`do_i^Ct4}6g?zxjo5_dUGhHLuYZzu^rH@M{2IGYuF7aQx>-KE(6?_SLd=_bxd6 z3H*PrejTrV`lC27yTs4Ge>va0;sSZfs-W(61R3l>##OR^v#izzS%q z$+=PidKGtX#aXN+`&R(ioarm}{5;@|i1#_$nLkdiiV+_g6GIG+3LdX2R@5g>BWnZu zXHZpCaVjQK@u*i%%ZPeKy)`PSf~qF5C+?$hx5ISe6tA>qW_9(LFtPD4?iuaqk1xA{ zg&V%d(Hr;T_n-O{U4QUlKnQSt#%sRBm;d1$_F4s>|M&OnBcF6e1N<5Q*i0i4FTF3g z``){G-#gyPtKa$#0a$*@i+Rm?ujHjC>=iE1pW^FZxkxVk&i9#2Ei$n$>o+`z75k*J z(k+lq?O^9@D!uXLSfkQ40`ol~ib=f_Cn*LS-f?^?nz4ZrY;a=2+Kl*u4NOIdf*C?p zMAWF4Abm;(crr$iB5)dmiq)VsXVP#H!(tJP`aC~StkeLRMu^y2U+_?S$l`G6+VKiN zto9dIE9j^0 zIm{9+!Pec+j^HB8usjd|+#}}uMc$_OAl*J7i&#jxfnHm}$y)<_GJISYGkcUbST}G; z7Pw6HSS_AWB^*#Gn7RtHSID}<(ypkYS~fOn#l#_@A);XLN+z)8(yfBRY756uexEF6 z#~k(JuEGT7@@@@uh`D34h7ronox|3=A5Ad)G%s zjW?vCO60ZOH^@k=i8vM}dvxZfb;JI9GrP|^?%s^vedYIX)3@=U12^(}r~jVrwg15Y z`~dj<*S?x9Z+sJL*X+mVKlyHb)DxdvycE+k#ai0{zXkv{(@Y5lhnIe@{lVqD@gLqS zpa0q=Ft&n+zTmC=!>j+IkcfBO^>e;_;n(DvpWnfZvrHU#JnIhGPu57nSbrzGcFfC^ zg_MX^+?FnV(m^T%6Xak?RU`thUNY-2`9538Sb0&+;$blP=b*t;>gWcv%q!Ve$`SFijldpBOR z>nHUGP^SXRCOWA<3|Ruum7r0pCXOX{_gKX66(Pzsc^4LS=~A$G0gV@uZ%zKyERZ?S z>}B>G=S*P zbxT>;WGtTsmaZ_16kt@yqFO4Z4#_ImBm;(8+~*>?rjWuz-m;1*_aO6A6;!;aL$zhZ zyUgL1Z2+pos_Kp6QzU9B1E;hC(5KyK{jJKG&v+#}FMS*Pu3o`sKk-R@_$enhz^?&- z%{24hk%-}6UiVsF|JJw5?)f=5;)y)#wSUit{`e8aN9W~V`MiAZ%AauS-P;)1a1>+f z_GZn-6|#1A0YANi-Ser;(Snf?8J84IJn0~jG>XJ#)pP3e2pMW_R>_$w)l4qV>gKYX zK@l}RqY{x^9+d!qe8Ci!tXU=pt7^@VQLu9vBPV-o8p*?@Ww9A#C_Gw*j^~jyL(HI6 z)kt!aN+mL;A|)FZ?+TWAi6tPEJ;=nRG^`ciR~SiZ=8q~MEPo%e7!)$BqSj(zhS61~ zyOt)D`@?^-r*rOq|4)Xf!aXv9<-Jsv+6mMpIma4^Q>Ys_@;bMY*{eK#1w)+ClI$Qs zf)fUJcXubaySux)1t%~#1b26Lg2Ui$!QFzpLmqqY+x-bM{hf2FtE#)s_S7FBv2eJl zSJ}TldmL*G?fLvLHHiNBB3|2?K8&E@)KS z#F_;}ER|5wKS9~Q)UDMu>L?L3bwtKyj{D^j!Bt+Py?MXl=(s$dAmbTVjR!NUelJHo zDZLrHcqoa3ZH<(G%8mMJD_vrUZ!S z1HBUH|lMV_(_v`|Hoy~2BbuTvuw*()x zovtae+*hsr_C+t3l3xkcpnmk&$8P@5d7k(eD8}!-CD8d)JCzXkB5qPQQ2(*_3F^Eq2h+SQjb|i)dlj z@)1R%RHjkrwS^nKBs`|B z^VLG;J1uxTUb$#F53oJ8r^tekpTD=KB=skjQ`eYS%`_Cr| z&v+(Ej_7$Bz4e}rGNAFiT!*Ja-ov?k1vtL!4JWpu8UEP8Isnnt?zZ^08mClSJ`W9O z|92R2kt=l0dregOMmD zX!Yrld68s2lD5i_oj*r$t3!o>MpQC*MeCl zb6%tU?_*~sNHBq>>~5YBFv+X5Ccw@T>+cxi6%y<>vE8^FQ{N;tvT0WxPT$S~Jy;9J z`Sd9t3?|P`-tUiuy0Rx*{c^q5$m6)LrGES?S5#)}fDEh*`txrC_G#|fG2GtsHm=sc zxO?~BaqI&g_6zJ&jN`f0CkCHS#)|Y|36=S4@AjHKuQPeQqViEON|`KJMl+s# znU(`cCZU#1Y_FDG29wH6x~nRt6VX9z3j!%Cj}~u}s^LVV{9!Y~Y~`W++c3%XmnNNskjT=1=^B5b zJ2TSv*!o5s%FA4oD58ZXrwJR;?W3)l>Q{;52PD=42r!7~ zgO^z*K*`$;a6F8piYM1pH8wZY%e`~a%J`|p!us&&SP(&p=auQ7OOzxQM~YYe9L2%QTA_nj4~4FYpl znj(+>9jq-o|NX7~+Xn~hZB6n%LD5IW`A5wX`~QEUdxpLmJdMU(zhQNYU2HZZNFX2K z)cP_Vb-i6zO;7dg7BGz+2(^LMI2{M*4X4LKV$D`=q#n+763=zh@XO?QNO19z(Y9cL z()yqzDZ~^wDuZe-d1#QF*ITuo%YnbYWYj=`Jw=%+`Wb*roqc6?HD@QqNo0KvM zY1Db&2Of6(E&TdHyY(j;*LU-F-19org@~!moX*`*J-p5g%9bZE9+vu*HBUQa4>RlQ zW|-_`(z5=U8I*)%VGpKXOz zJRlmm6IHz81mJA5$Cy#^kO)!IqbsS4R{4jhcPT;LuHE(brpthOw1VT|aSZI${uZD7 zA3`swrvaR&ag>0BfBcV^M#D&1?qlDcN1lmhKA&Z+ByT)ZNhm<3_2EBEx;A$Nrhr+) z(Vs%!v_w9x)cv+U`LK3LXoTyDlC`JZ)E-))?rRAPSbJVP&IXtFkA@%SQB!w}FO9A) zTfw^>_PiQJru^0c#N8Z_*0{Y9Ity(8rG-c-as@RxP?>T9ew!2yBSAFTW&~(d@SHAo z6%qg7cQDvneO_u)H0!4<7G=yFyUNyHWrk!0y3-IG=1|;sT;yB|6I=fQaXG~Fx2#L% zF_U2@8epa|aheciwZzb`I5soplzUeZ+LTVPIX2=~b#HE1ul53+(zPa)6b-hZ2sPzQ zMkHh!#|)o{T#GGWs|pEOB?Wl#7Ry@+Go(wH2)W)n?4LFQl$&_NVt*cKGl4+$;f?yf zE#sf^amZ8k*GkzAO=HN)?I!3f^*qfwKOOf=++b_bK`)j9YC#l}sRk^6z&<6ESAm4u zfC!QWGW^bD;(gbO5=sGJDY60xybsM54q7O;mz4Tl&DIEIW*qLUuHQ8+qxCz1uhioH z=+DN`cC4-TVvs7~qm=)`UI11BG9Y*3m&??e0XWw41Mgd5ie}dt(_M0{Q0+sj>VMm4 zwjRu?ZB4;v7K4Y~)UioEkN&{~{_A_9eJCbI(UKm|oi8r4tvv%%E1^YveHo&$rr?T} zs(KpU_K<8gg~MY~Q;i`A7y;>s{v(im{$Jrv4$>3wD%>TxEq=n)upfxp#*Um-DqE{6 z5Z66IYwW`~ffxaHW%(D$xCyPodayB_et&XGLI!?TNMk>P-bjxMWPg>9f(vE+*jG$q z7TApMUE1Vp0!_(Py%Yten9_asaOq$1v|^%10fyDaMMiLq^Wea`s?^Geip0Og>UCV5 zZ(Q{2ACO<2keUT%x^oZ9)NFnIab}YEZ)9L{LQ*MDkRvf;H zl>!}K*wR?MMJ^_xa$Kz&B8+G0xfErI)$06!+O0!x&m_HR>d6PaQ9JM5xTdYp%x(i) zC_F*>)o4YuTb~PRbPGs|hB!g{lt?zhijCu%kGK?3RcJIgs_;`tKvRBW_%<_@X67D@ zpoyV0 zerGf>6KnrLS@)J-0z4*@J8xrZQ*W7`Y`Cv}xjxU78ca6w=>s?o1AthD4+PJn(*X*( zXhRP|zh)OJ%{Eq@B`jK4du&BK9>27j{HpOZS5ThNs3Lw6)x$odwrA`8Wz5x}4`dNMC? zexjb;`NgX0>}kHjG^E&s}?tG;JV%En0 zXcXw7mDNg3)2D2;cofI14~^0q!KJ2uxB}H#PZIU)-r@_2cfx11V~K-ti3EqbFgFHw zh}u#kdT*??(BU;vTzh46%dBnx;;}IlKAScya6|4tvNvYet+=tWN0jsE`MJ$O5=R&6 z=;NUAPW`A0t!S~%9|>SrlD;LUarN%V7uVW(J?Zjifxb#Gaen$A+$GN~IWhoy;_6(s zhtaU>j+OEVCe0t&*zMBa?7Z8zzNIzE%|*pyvUp<1el;Ok0lFlP-b#kfA*uxG8hH>D z;WK)JD<<5@%c3=^SDE-ZnSrf*Kg5S-x@cCFqTCk|Zk0Ykkp)3H>Io48O*w1ALPA+$ zcU{IC5%smL!JHhSkn!o;~Aw!aMf+gw~a=TP|%(JC2k5S zD`j9;UQA@-PrE;QeG77*Z?R`8Fg1Z6NMWaKOnc4TW0ZRZWz-|StZW0ns8fDCBAjC; z9_l?}4DdWa&eMR(I?bP?Fx7Ir@m94Nee3McT>`+Rd&78D4K)BNLe%sLQ*@? z{y_o2-#o2!duFwpDT5OHtaU5g71F`c;&Ly^sONDvhHtR?isny%jh6vGp)ABxgVIcu zjeMt-(VpG%^*A>FbwVEF8?baGm&%6aM1A0LT5aP`Lbw=qC9OdWgP)X*iv^aj7!ph_ zsAVmuTSs4tz+=V|v2;8oF0p1S&RVFZ)xe!&&EX%8ZGj+);0;`k%aZokGBkiM=*aKN zgwbnp&G==Q|DZ|o8k8!aNc6C*YHOEU!O6n--x^0t&$}ttY%A8jpk4ah;vEcN`F+6- zYn(nXB@#?+T-$l$`*8!s*mh;>GVIUyHy!!B3)$#=$i1P(9_R15h09UrnT`83CQb~4 zed@?}p)d33z~Zoo+ww9oQm;%26j$N@BqroJZZXzwQ;xb%#95my&I>K^g?nBeYLs5HJ`P`8pKz}L>BWwSriS~4tA z0OPRdko=9_ESzL|e%>_8U{4M!`|lP-qui|p7K~|P-I{hc*?29}SIl;gpDVrS$7(TfeW7(_A+0TY zC5Y)P~*3S915%TX47e(mVstbcSqgp-v6j_a-1&O(-o(PtHMlC355M8T}i+?1#Qth$t z7<}ea#9wMPYV-jeZ?C<4Hd9cC$kQ)>aC%iwYBqKWHTE={R)=+8YpaasGm3N}eirlV zngZBb>iWyn3w7P#1{vyaH6^mo(2mu!del?uXu*uEk%;Y~m4S5;iV4Bl^myEuTSOe_ zX8L1Zz+46#=$3hGrm|h7`dyX+T$jun-WJ5FNRu1XBh=a83SNE~JTv{y@KniV2h_a< z?8@&&272A=I)*4$AQlOV25vm-+Fasyh{C16Pg0qY9KQ9kpWWPh(r=M}1!9t^qHzBnF;@!UB9VWYagnXtC<7i6jCyDtUp5 z)WlUnZlO$s!nD81Xrd@WSD7r|lN%+gW~pWIbb}own^D97iJlfS>Hdo*z;GG9DzG1P zrYj({W~`@1p=l1FYY+5g2jz)3O2Gt1Z3rdFo(?3ihB&?FQf;v7rj;5@h0-NoDa^l!!Cl#)4B~;%QWO zez39XQ(AP&s1I>ps_jNd^IWlkm^u;Y<{81afKLUu169FFfvow2ld7A!1p=n<4|Ohv zwAt+|?`q|eGxQf!Q@V0u;)9hw97BgN$V@QcN>a+T(TUtgqal_E-q12;kFpA7itDry z8^*nYGO9Pa@qeVGZy~CzGk+BEe;5Zj%>B7eK(6l6$Sbs6X>c{Te0z?WuEEB`dEZZZ{+-$>M)c#P9BJ)8w3W4mS4wnZ`ugap zfnRLrX<;rrETJDJ)AJw2>j%>i>mtv~YQKwq*?mc&?v(Dx$j7zbkqjvF+GI4kqmuN@ ztVDfjF{YC-FFc*yD}-`Hogl0_4GMSC;KULsd@@GmJ{Z)r;qg%O@0NKK6$<3Aq7?@@ zdJvEZOA~o2&TAD3I`4Xa@fr0xWfsqM1#0JHqetb*IEb~*P%Wx*Qv&PEKHRvOoURRw z1lW{}BDbxo1A2y+;z`3{Pd55hoZvc)@?}i(et!_X3FyWMSoOhGQ(m6^m#?`c8dm2~QUAEJ> zC-=)pp*J`xw>;qC%o5AaXzD@R7LUsDf7;rTbaB5aLOC)bzaw4mSG-MfuFD)~4VSmI zsUra<|F3a?BoqaTJZ+~y@$;NFu99YvMltPd1*K`L&LYbp*Ua5YO5kcG0nrT2&NVAi@(M8aqDVi=g) zva||vy;GE>EToAw?_#ax@s;igj>KDE9ky^az&7)z`dKTh60C#dFjZ(EBf(TiI-c?~ z3#UrDV^P0H9C@q4Sd?u~{Qd>#&Bh%3<+V5nJm2v=VA)w#TNg$MWYBL-{xB$ljte{M zkV3BcA}m`CByaO}H5EVL6#Zd9IVt((U+CgE{A{eCvAO#5oshcU{Pq_f=%p+tcvhUY_RgtbTQ#|WOHaHJIBoBvC}RIZa%h{Oa_+f zeSr);Qb&B=2=xv(l7%q$WrE#g(3Uow|6E30AEvd+2pSFP%qUDgiQbfRa0pr= zUS=U$V}A!%s?n-jR%`8`(qPl#L8mf!Qb&Qld1C-y%c8fY0Y&S>uUv8yQF1V}EtQ{{ z*Hsp)w+;qCgD2Xs*A7uMM_3RB@DuV4l>JCo>NIEiFrX_1r|SsyY>w)}dN+9GGJR4Z ze)`6v;g2s(W@Ak!AJwp2uzO;FkT3C-(k(h^+(m$x?h&X7{5p&VN8s|o&M?rrl@dbp z;Nb0{dFWVV(VM=wO81P|ru$ZNnttMuurj(F;~c*|lG3-T1hC9Afc5a&;3rr`$|%)N z8G56I<_^QL32oTn!$G;Gz^ri%B}SS&Ld!U5R9_|*u3@GIL=VCJwu6aj^*boG)pXTX zlTD~ToT0JYq2s{A!l5hSV3d9szafZ9@UXt)qRbSexz)4b1m);`>D&I74vUqQu5%y9 z@`UGT;qj&O(d!Z~vh{zIzxj#U3}9B)>Lk_XE2qJgr{mYl8e4^f+JEN^osV~>178k3 zuIl6bRcg9+G%R2Q&c;Ns11R)BmS(%GvgmL z6hRbuwDVuJK}V@S)LB55hm3xW7)PWzk>zqeZxFRJBBa%qnNa!dxN^Rq#~jGNNbi*H z;#tehwEoC{)xlg~1=FL3_?5HC$t;>0eFFc}4p@MjXk0MUkzcX2Z*i-%Pi=CGmB}m5 zVzQWV#d_xj_N{8-kp9+@U>3O=>?P+_ zYc_X3E#z@8QqeEEhVO29xA|c<(_y#Mvnwi-sWTo8EywdP{pB-1FV#Pmx8fngj{HBG zo*dgh(Z*la`zJ(xKYRRlZVwtNYhWdK-a0jJcT#&2CC#nbH1+N{o~M$9c58lL_Idu9 z;kf}URW0jkWQ1NUIJ8XPnXfhxJB)r+#xM6GO0ejqZ2A!{!=o%x1tKa#HFsteOyUUXN$|rxf2GE@D7X1owRl@E@j?VklQN6I4 zc;jt2QSIJ zOj{6YM2Lt{s{$zzpz>VJ;9-(HZD&~3HJ*jUgzlaytvsT`a;&CLo@hI11wgR=9E=TR1_WSJLsn%pW-`KQTZWiob^ zvC)iKx1z3ZbgL-=5ka3kz3E(Zz4dVPMaP~8Cg;|eOOi`J3G63$C9JNj%)7+na^A$+ z0#6#gxB&buvx}L2T)3{ZLj0Fku=seipz-$d@!_iV`MBNpCz_TcL-EEXdKu}tIWv`j zXglhtY(HMxO3B@H`i9UQwo#X0e#$v=VxHpf<9fE*q3`jW)+9h#SdS_jELxl!uDHiZ zJN2`gPkj=XC4T(?cL}=7%y>*2ACxvnKqoO6WnnZ84I(#%5M7AICOh#bK{|5SIV(N% z_7B>@v$$=drNFvz?4x!OGM?d?AD;VXp4eiRScf}`-A}*Yeu7@Z9{y`6e*Ik+B81+( zVlmig>@y<#ByN7Jy{}c7Cu>7Z|AJwAmlQ_}G=fDNZ3J`j6+jh5vEx#zIBFslnlV}! z!J%A!@qsj6*>{iUV^a?9|J;fzLvo)YkDa(Bl<-+Dwi-kzaRQL#Xfz!}-d6~?aINI^ zB2o(5RM~C{?5aB~P2N}v+g)m5W5UF2sIjwJ7~nnS^Z_PELfIqXwFdZUX7yNAr&{Y8 z-l|A2oEl9XDq-|1S|M`dd-t5G#6)0?_;5;061}15R_lu27H5~`_(qZE*1*R%G)err zoMHZl`i{fx0f=J=$L=#q!RzVE-3Qt3i4mC{?*NaK?k66k<%ysCU{F~qXidoX z&&<<(c}}tB)R=LX2WCX+-Sag37nLE2DBEI~R+Bh7)=Jb+|+ zAhpv;&;_uNTRes~ff!1?9&@eXBnd;Vs2^}j-$L*g5L8zD9!7X)f#WD1?P(gLS!Lw# zx#p|1WJO^9&pFpt^jYUm_dNna?>Ck#zp+c&@kbaV2(NK-uG^)653EDRXI9h7(4%bs zl%@+^y<`H0nI7ySgikSBoauBXmHA^0-3}6 z3$>xCDK1;@)po7m04(cVWajHKUa|etz;Dr5+FQ=ZKW=F`7Rs+Vd-~gY;+IQglTWIyJu{)ZVG$;!1`&woN0>86F4kzt!8fW1t0{qc^4`B9H-cc z#Mu7pTK)C9zj1oOb;_IZl|Ao2o}^D?B1EUf5hEvmzH55vjl$%2e+mh+awKQqa$V}R zQcsp|ZRP+=^m<&n|B~ro>_8Hv4m%@g6|myD0=M^<{wyo;yfOBZ&Pw1;89|QkmLUaU zF>yAK(rDXA62_U#x)D=0P<%TKDMpL3+Lfn7J-TKwHe{?U9$)WFf3rDJrq?b)T)97) z+Q@ny7b(JsCIJGp;p;ImhkK>kQPO?~R8pdH03{uFpb1j~nsbogfLKl~nmlG7)cu9C z#ni%idI#h6MVP+>o4b0xwvA&#HFw~R>=Fot_ihqS5ZyFi&q-=LL`wW~n0 zq)ymG045@AwVPaVS|kPX4TdEGD>U)wi8#kdGhUmb^Ki=tQ_>BV?ISwT$N9fi$9fD6 z&qg}8bYQAJ+ReU}c(Ak`5e{wO|Ew|`-y?d36L{N+qch;$0tj9O-9Epq{rl$d%s9?V z@NwupJ!AQP&vWK~^*@KHOlBgY2M2-37i!W#NjvEYFF%?i-5#I`U_e7-;ZY)waKQ0GJST(L2fEmy ziGOo}ux(9d0Tr`|vmUu{GnqnTng1&vol70JX%i2c8E|IC@hNKyxb^F`i&CUT_>ulq zXEx|(86S=N-nw?)fsG*zgk@{t0=ZFBKNa%Pd%fGAT8*Netc3Y>I2CuqKl{ezjUG6n z8m>2tf9Y#Hplr`u`hOS_>JeZbseRf%YEvPGWE|_uXot*%GzUC_MHY{U8Tl6Nrl*&c zaxt+*8Sr_(TWt%op=tuuqiHUPz|$Nng_AamO*bT`UpR(#fjYYjK3B?D{P)p`70T)I z$1Uh7-~!4ER0dsN+MLtF7NzklJ{azaY=+tYQKoOUR%q@Nvox3XU+hLv;E7ECkt7%q~dyOW2VZ<$jT zS7Cz3HOi=n0CrZg8Reh#Mm*}&nS;I+a-NbrJY%MeejkL~E6L!AiZLoWKCKpO!4O$c zi^fYFZ39{`Gyl*zXPYXr9Q~>)x@ibpR@d&sUr2XJtsQ$}cqRgdGn2IxxqyD@JEi*? zrG1QhzC*&%fHugFbJ}yNo)z*mgmaagp^l{4!3Mezhh@P$lYwbg?nFv-*Oa1DJGdd5 z!BUe4J3f3;%Nuk!JhkeDVtpOupfnPt@{>U;S@mrAN$jt*Lss?kM{4p2;IJto%TguUH8#` zUM(l(mJNObtV8=93Nh}T=XS)G*ZN^hU?}q3V|={DXtn`D3J4huasVorBUj$EH0y3KTUSijYPpb}I??V0&ME)!(J z`J1MNW$=~`|GgF0_^mTYNwsXFOf~-w;Mg{U#bjf+nGpcP*R#8u)GvqirYd< zRPx`-?w(SXg+9Nt2xSO!#Ck8DH@e~tna)U!J%y$=U0DFncl~s1cakvO>@poO0;|vk zM^$yG!-t^B+X@n(lsc)hyqdh3T9;gZDnkk1kHn&rxY7%9%R{l2{ z(>+t#@u9yAO)CucoLioiQ}!DY0k0M*d)zm@Nc_iX1Kv;HekfXh(fGjJZp?k>bbNkF zO?w{efl9)6eL{Piyv;2v6?z`6T6NkcO=0@SwHerL@gIF?lAoB4o1-}@F5pU_^9opt zkehNEdlZfGBO<_iE|NsXVrCEYIq@0Q@M&^rKR3^pT2g zZ7Z4;QVN)@17R2vx$P3-Y?E#A9s~DH%fj@K1vFTY&FsWjc{SV@vYfTthu>#R!qO3h zM?qEvR^(-$+Q0XG{$J8Ok>+x$NHJYx`KmJaiaFMkZ?(#1?9$n*WyL4o2AkB_l@(=? zB54yq*C4Jw++XQjVvQ{}6i%JqunlO{S83k#a0#)EPCM)2h{jD7-b;WOBQST89iNb^gV^xM13$nh-1*~Fp*TD1YrH8ZX812VjmT4kK^*R8r-s<=nQd1 zF7-#Gzb4$s(k>6vOb-yea#Z_tW=pea>H0?ke5vcvetzxx`vp_Ks3T(EoiM}k@j%@v z9jbLE>1QCZAVM%EF{~#sx0=00%at(3GD9+ArH=^N47=xFUUhr;1kt3K)6x~l>=tMh z5pb9ULT;IitQstGBpJ9EG)S9R<`X5BaefiG+l9%A!{I$4>qW^Pg^M+-gu7Q}cA4Be zP197B*rtS$79>(ntw8)8Y|hF^2@O{qJEF4yO7v07!d>etm6nhY#fP72Vi%dgP&ry4 zhbP07(E0A$R6R#vIpvmi(we^RAE#iyG4}TGdQ2{`L~rZ5P6F#ZCyg?XG@PULX21md zasMs%5aHjQvqjB6h`P)@WTEI(p?}^!V@cCS2dLvmS#&<0ng0KK{@z+GXy!*gCEAY< zFjKN;z@4dApgWb*&`-gUo~)eu;JdcnO002;tq;bv(o&pdb+OY&OE5&GxnsQ>?0nJZ zAem{+a3_JOTLFXfE^~QO&?D+IBB{4?Ia(&e3rR2ulQWVR*vRQ582U_AnT1pX8Y``L zTLgZ^Ph5SY;9paNE4Byx?Gic}juk@l$eapOWJD8&wAi54k{9|9DTuGY!E*Ei#vnvg zTw-OQs#{ms=>dWV51&@t6J4+Y`PN1fDPQr8&}c69=p*d-QY)%yFv`&41Uwn|krRV8 z$wDvX3k-L&$)e4HZ7Cu>uDP%K6t+&eCRSvHW{j8=8t`awD1kC0wD+*Rw@ti^5~Nl6 zy}(Kq4Xe(_Onn}MT!myZ2G`8piKj9Bv<@S7qtlp&`Z&LR;MGW25nww;F!HJF?Xlp} z4CUjNgQo2^jH8$uKx_<73SEz7EKO`&@j6n)#hY{v+t*9h`!8;C6JB-^YXr%&Xoqr{ z_Uo3l^en~M`ujoHGrH3UoxZQBGbi#aTx+QW?+`T`2_BV`X+>U_6w+T{ zNj2&!b{C^yqqXWG37N_wRH=sW>e9VGRZ4GVx@SgxMhMs;W=kjz#|vum)q-xu8EXR< z2vkH`12HrzXh4~i?Ds4rjd*e(kv1Apla*s|IXEH|H+sgO%B1g=ABuUTx8<0ePM%n& zMBq;hvB7t4d1S1R`_{ln!mAVI-i&Pxj*22}d^xk23WRmDir5tU@}gLFEr*B&>WoC4 z%B3isOKGw~uSGbDnCKUgiuxESFdYpp7;Op(1FL*+dtMDZNJ}1%OTk&es9uX{OWVs} zdewk>HnE={fsN$SVs@A;XFk%vOvzYgrK+TT@$VTZRj2nS zeks_u$Ax9DMfl8D;o3XzL%h1YIS*guN%HIct%BZ0-i{L59Fm;!#S{Ad)W{q_WlBcJ z^L~x8_gC@NUtmvhDxBIu>;KN?mcFw)oNoZd-4LZEsul;jEbWc?y9&m_79cumR2wfaw83`NhOPk+gn9aGTYnSKnuxu zOsfSN5UPBJg^<=4Kw(r41+|FF6ZxGjP_p3iQ6yKzOqI!i@_`E`L@DGHtlLVK(3#Fb z34w~LMGUy#_Ob@V6JD+=B{0!B1SvrH`lKCX^{WZUAzslzlxG>|Y|RMS8$VD&M$emG zKI`e|x-Wv~byYv?GBKd2!aEMphWFIJ$oD*QBsh7W`$4?!EC4_exWG1e(wttJ&vB!q z`*ZoH&To?aa|Zu&D&*emOKtbf*C~M`Zx`o7;zJU}y#vP=UxTMXvhQmVnMVcFKQwAO zE-dXfIU{4`jWh{Ho-(@355A7GW`~sHq-UM89P~v;%d`S#ZwOVA)d;*<^L)_gK)1Av z@nIx#JfW8$AX#}ykSX2i3M=O{G+Eg+5`~~Aw50)RZl=hHjxcl<^r!>zvKIS&#B~8~ zq$dsM_g^Vi8N>jnEO2l$98h*!~e#R}+krprMu>scAT(zLxyajKj; z(*bDA5(^O|;P_nfz$Zim3P$brvXg z@nr08#h_cSm<4S1EVQsZQ@=9%lq+h4W_i0?11zRIFsOJ-o`|r9l z5YIH9SO`r~mW*H|P|8$2iC7EhUZ&MsHcA)Qwad_i;l328D7|PyPk7I;P=ae4-AY3$ z;j7T=!yYpeCZ?M}c0*%Yh^A~QChr?c?!cDHSm&#gw#riIx^@AcbTIxEs&1+uyWGZv z!t()*?7Kh){0k{E*L9Ua;I}`YyYuqz4Rsy!LxBHoxzKB;F{ijR`+i^C*AHp?zbwor zOC~@Eca&NZI>yCeu+C*aye(CvcG>re!OopO!KwGXR@TGQZBwd7F6%?_#h zos+r#kB;^{OI2E~iLs4Ni7(V4MYx0RDmofj*&T)Zb~ez?O1*iB&B;KAvcG)X513!W zVO#ob5|zjdjFN%FEtgZC2oLUaBBfP`mf*1xqW}!#N%D>I*Y4PwEbyU8vz0;xF-G&- zkoMs$@D2KsxEPTQwhmT~lg0y4v{3pc5ka+BBRuhe9Zs}bwl@uW(W7>w8p6IODiDs> z`D%)yyfUB?%Jt3|HM_40%If!8RpQQqQS9(b8T1HYq!p`4$*ops#psA_5IwkL89v3p zNJ=P0d_4KYU)-_HLfA7P(nWUhLaFMXLCU-~&62q-O&lcP!`av&)6URyIs5X`xO)cn zxtXj4E^glt9rZ1&s{44jIeCs7h6UP$^Ur)dQjKFKL{t%72jQyl1kOP+Q=8Qkkp+^3 zw7*{lV(l}fu@2oFj@Tz0Ow>Z(HJFalOpyJk%d~ks{f%r4T3dqv*Y|SPJ152 z(|Ukc{CCHNUbC*b)si_*_`?FbEKwilMdhN+3GSKJ|J4-mdcPtcef_xWsC>TS`;gvz zyv$`J-z77=g)w;DExnS&XXsLCXV;Qj`e`f>d8jA8Swh*bHvd??cGFTa-^Qn`S>rxfLPPgUNQuzov zGo3LS{@E|1of=YIJuCbeC%3p!itrm1u8)4>`F9fNqNnKYTXZ{Ov`w<_FdxwQpE`5Y&2#==5f4OjNe|yf+3dRKolc61#K8`oCdQg6%@8MuAu4FGirqyb|_EE z5dZuoQGe#x94-09D^cCL{}*_5LDqa5c9|VYzfgd zVyP-bOnmG`jXA0z<~a>J+t4X1S=c%A3R7wH;Tncp@(`Nr)h2?|l1NOLDt*lQ%T;y$ z{bN&}i&>OEOCWdf6xkJ?Kp>7;*;3clICIPmXs&%!ah&e&h* z3Jg92>Oks!2|f{|g$4qfB7Ct;T-c~MQOyOn@1fTYy09S-lRbW!3KW2tC}Dm3vQ`5O&H|t z=Z>RbkFr`a%Eavp#CB9t>9m4NQwBYy*WDaJTh1RRuA`%2}!^&e*o~p`3`Os(Q5CsV0R|NSJbCM%$59NMmj%(%%$Y@hWY` z^q9<>)@G&nRbAn;9g6Jf8{aYJucOr9Ch&$Km|j$2u3n^H@GV2yP0m& zF146RWkGpis+U^++PT$u@F_}~d`Oph6J8}EzCWyg5-YB5%nRDBSA=iVd@QdCdU{E5 zJuYvN1!gX;$(nLc@UW*5ni$cD+dGCC!gPV+)2^*22G8 zg#tFm_sI&Oj8@T4giwFL?KoEi1RU@swb8M~T6_||1;tSIJA5h9_Iv2VDfVn)2z>50 z-5X8oh(CNXfTn14Hb$4mHj`HwHSg=sPPZ|=kbpS;4-x))5MwU} zJWiMw(=z6uePM7PqnEH0^Bo0vIW#4P{iIpR^zSIZ6sxYLQo~fmxojeTm9nII#*!F0 z1WBbDF`{#Lu7v2mIXjrmK1(|C+bp|>6nY4^UXcx!&dmAF3z|KD4TH@Ql0_Ivx`&u) z!Fw3CJ;My18;b+Xy*>e(YlQ9WxtC5!7=g7dU2NKH+Jn|$$_Al3l!wEm>AJ&4^IrpA zPVv&x725+iy5IV-LLXX7^tye{ajyg%8$ht?gXs2{tjA6H@18Lfp{p-Xqa3~2fld?o zu-B!Ef}%usW#72ZCxjp{g`T~UiG(r4k(U2IwEVQpf3>zM zSjI$b8F2~m!W@IS1({oLBvu(D5iX9T-La^Lkq8DZmDm~PHKj$2lfD=qk%|(Dmo$m6 z@c^4dBrTQ5M|k=qYUyfA22l^^EgffY77|j4jKIKy=@4S9J(yICCZrxzM`?=%^>|eb z58wzbqG3ELLTUu>`xxyJMG<{xuo|h6&}3(1fHR&{4H1G(je4sj7R2@GxHd@?k;*{Z z&Lh&MZyd1?mYKduiPAP!lwPZkS?FqH`p^~9-G=Uj*8v7ItHdh}^V3Rq1fBP7WYEL4 zTlkrjw7o!UVN6H5Gw5uak%=BHGmaT)X)CtO=osx$&%HZabVvK#b=wX`MtZvS)?LJ{ zX>@m=POHa0e)QdI`L8d234Zz$;4VNo z>X426(HUpx@eezeC;k4PfsOB%-D~#unrQ%FGtD&9%>VG@kut-~Ai&T5>$|-3EpL_c zzwqU7U~D6MpZZ5U?RBr<s?&&{U6BnKf94Tw`^ngd;((=L~GVCGO|`C zRxf9HTWH6gxHpfR?n~nP%=eT5N)pA8AZ8>EDs1d&ClNlHmsUSw&J7rAk1#bmkdbkZ z>&2wr)9McJy+{;`b{sYlEJETFaZyZb;IS?6#xY0|)Q%FV5T!|onCU7h4(Eb|TP*-t z6b7AFnnadJEw*pK7zXMgYN?k5aq|cfF)^tseXF$aNTRgjw)R{fwSpN$SZnYyi;LRI zLJNz-jHC<(5z)NTSt;5}JxoKqGGdT8?7-s2Rg<|EanxhZw6HS{+nvMBEZ33FG`KdA z%(HCSD04kw*~+%|eM}m)NxI6mov>`A$DOx%x+A-E+pW{Ytx0rupV-c^Zp8}5;)vrO zatv!mmUF@r9Rb8o=d*WrvKQ)wKseiZnyy$0C4o72l2;eK3R`E?rG}BBo{|n6EQZg~X^tR2M|L%A3$ zaMIal^A|7uL!LcaUbeUEF0T0Q59G${ZsfKtTiH3A!00G;#d6|_eOS3-TsoZ*R*Zt_ zrF3M0!2;-DR%YgvG*0PHT6B3E1}bJWqMbVCu`C-^(kWyR_gT^DGPm2)i{=?0jd61^ zvxA=4Q5dn1^jjo-#YBSZIJy@4g9Wj^3mQO&5pYg%E(z_lBZTbf%ms`BvlKzlt+<8H z&qHy{g<$A7)-;TS>~e-@pOc1@4&g0+V0QM8XI8d#);aqjE|16FfdH4Y-?X5=CsZDGS8hmV@B;H zyLWY%o8LxEs#|Z{&e+&Ies_=9_Svvv72VkIpobjI>X8+k@Vh6eboQ?O&c6*@aPdxl zvgIPa|Go?0r$2*U$lDuh#T;?uA-wo6pQX$9Ud`|A!KBfEy=Ize0AMrCH1lf)26JX? z*i8&@$rnDue}3|l@`Z~pW9QsF(1jD8$nU=J&v@xcf5`70R=KU2ZQOkI4RYl*KjGHf z?_&GH9McN|6JxZxtLUy?g|VZuX73IoHe$5p>Gd4TWP$0)L|P`L-|sWm>ku#NF~37d zR*uuvY3WUm!z#;&&f$9<1_GT4&qxx{9~k=cvm#@HjSOQ>k!TsSvkUYGa~Kt9gBdrF zR9L^^x8xiM#^7f?(g!u54&u%j<70-@%`+SN@$mDYCSt5>bT&$GX$!cOR!j6Sar;E#T&F z&hUv%7jpA^u4CKOm*D2@z)rw$^r8E6!eK{o)>BW{$2{@mCG+-{0(*^7qnTzJ0N6}3 z&HS2!!5k1S#SWq=U;EsD@R|SktbF;>Z!$Tb0m4HLZWOlH2aRgIjL6gK2f#w__HwY=V?7@#+r?RU^V#G|uxN7@)4Gw6fw!t(JE zb*gObM~t>RjEp2~*&Q>zkg#U;0$c8lncOwSnzeJf{Vq>$`d-FHJjwPHF;lD>9cAt4 zD7Gy;;-L@4s^zFh9j_B>H&QiL+zH&-gA2ZK4L{lSQ@;PM>tXtfaLdjN=)qwdH?Vry zN}m6$XX;@OKAPiCdcyraC27O#HPcK30Gny1ncprzcz^65q+Il+PjlT5uHmDf{ZF~^ zj=RF)&i-)BgL%Yr&*JPyoXK%VOw>Rj=>n5?-p)_2zD_nzZsX_I-$uV>xo^i#`pF3K znwZ%+Lp-vEy$|j%xqCu7oi_U)D9p}8^cK1tuumURNS$TAXBqP|j6_1}L+x7>!OTow z=6jBDBSbDl)XH` zjx9U8bUV|GFN4_`!#%h6v8}t9STUhH?n#;3v5nF3S)#cP>B2N(=2^FLH7nv415G*R zL5H#L^1U&g77sr8@rsPpK;9j|-N4P?nBxAK;FgE;Y#C*SYGZdko$nrQ%FGtD&9%>M%*gsDyU@Xc>r#FxJC6}jS?tGVUw zP1!jc;K)@Rd)9L}>G*a0(Wz(B9)m|N`XO`N`d?SdwoO}EFg>oi@;ZFqvmnCe-8)J8 zpp0UcwXhvweqQMJSFm!OFuJl$9JQF4o|Arm9mW`(aje~F7&jnME6BmYfxD*%30CkZ zstH@~fw^gqu`%d0$Yz!=Tcf50yLR@NxmWQzNfb>o+8x8sCHT1%)j4cS8S8Y}cYF*% zNJ%;V=p)#BO}i@D|6oB7mNE|k0OyoX(LbJ@9v!0}xke9)5_`=g^c${fTWpZ*ZiHav>p($3I9{uig(4ORAn|q`rsubKpKg7WGY+ zFYt-&U&i(gH@){dHub&)cL+>w1-1gPytA794_wYztIJEC`&>2Mh{vCNGRxL&e8AsN zVD!RbV*~V>X{G^y%{0?YGyh|NP*s;?mxgC%=XSPizLy_d`CSIn2_L`U0_i6M?%OiM z-J7?-gcAAVS^kjy&~=^@{G-|L2?wM5DQ%58Gkz5Dqq3h1oB)h_Pp{v{8bkH{RtPaT zciwqt(U|f;kHcEa0S6p_F=mlhL`A@RX1iUo6h%B>ehznUndG}%9YE&YLjUqR_)8m8_jwFgAM&p=2ed<#+>PGClaRVov@JPIPCRXotzxTC>w#mjA kQ#`%~=rz;K|Bd1!38g!whteU89vvbjIZ~v%q`NyLMt4a!2yF1q@9+J0 zpU?9==RR?r>s;qvq`ImC5SJ1c0001$6y-Dl0F+t)05t#`6Zs3-VKM~(FdV8RC#~(d zc!coE;8-xBiO4=}BaSz+KGvyRg*{Xx$Hj+)NTDi~V{m>#3zU)xh_0qs`i407?6>ss z_w1bShpRUb85-h!w-2Vk{I(NHQ#%BD{=@OQ9o#X8NM0;;jg0W=xKxk>$y-_LTI=jQ zgI$4s$*Bv*odfGEjFyH9yLkwvP$T|o$gg8qJ2Unf5|p-%cSZJy>&kR zD^XpbQhe0-{?X1ggrVy*@yUg|Clqx0BZ%FICU`^9kfK;E;VPSjPX%e3AJQ`ds;ci@%{{2B2RqZB`X~0tR==p3pBtTo za|v*x64Vt5{Cf^Rd(;f2XytXwYkKG6=+QWBI}HlnNkM(AB^u$Ai-eO+6S@)Z)*Y>r zqf$YVfvC@N^hl5NF!KS}<=Q0Lnl;kX=h*WItddy;r@|6Fh;+?*1geU=Gri9%z3{+( z!jN4bf7!P?y}$cW%%luw(vV-o##96Wqy+WX#Op|2*r?uiiV`op!pjGyno!xJZeXq} zJ2mc*L)ak);&daN?bpS<7N0opWYc2SE^_ zYs$$;rSF4yQ(uGsNAe0nl7RthMTebzgZ!v0ZU4pa4+->Lk#Tw13)Eo+=Gy)>l7jdm zFc5^Mp1;@HH0S@*`5tjAGF{pDy)hMy0A(sCRsLU!Ig9aXG5A7k9dhf1OLd9}K3JK= zd`@JbaRv&`0~TcY$JX2%8qNxyitvP(V+6UdG2?ji{&^>+U=+Z+0dnwKB6M|o zzu+Hd@GSY4WhZI6ykOURy|x9XzrT==#d=>l`G%EkJ>vkBuvQPdec4&6$V?v)Fz;+RMb zQY@b-G3hur;%ZW|L$)ASyQj^f;Cr+VHSZGlUsn}4$iu}Ms9BNG7?`Yx)9}pjcip^8 zqVfHPt0am~)g1rX3NP=g9?~(Z>7v&r*^|?d`--nge?gn_quxYxsonsm7e{q)q9fyF9bge(bINvyE?}g)6aCUbMotiXfOgw>>C_yn?PkYKAf}5MxB6dd^G12~b}tx~mNkBD zF3v1gOQycTM-+)ycj{UcGz+KDkz7B_NxQKn6KOADJKBKYq1;G)kK)d7C7{ zWCfctb)nGg!L$n2>4fFD+MI%IO#NcP2R;&&7jx*5TmOS1wy*!Hyv4-Guo5d@e5Ze7 z{)X^f+NSaSt)@>Ax6vsL;{FO_Sjc zmUB8j(necMZaHdahCS+@((aj0|E$u#SrT1Ome~6GE4T>n#%l z{jS8c7@!z@NUAba5$wA6v1Kdsg>LI>yYDkKRU_+OOm;|%0JZFo3Xk2KufdGHP5Fx4_! zOk+1$l~!%AM~JC!6qq{iuKqO#?~6XZ*cMQG4wcUXs~}NPUIBEjeQqYde|pk<1yXY)=&a7z_+dM5o0=N9}SR!vC#p3vsM_Hp=-D zR}Ec*X2bZ^G=YjroG$kYd)^8r_hv1H%D+a6l&-=nwWG1qHx!wiilhXk-A}-&g z+-de2#lU05qWRS$3%#P+~3dU_nf&o?a zeq4m{4}uV?s(MU;>#3(B<&G0afrtJzjn(&?pSA+%3y6{FXa$4l^IV-6UgLj$_ilZ? zG$RgCB|%rZwJP92Y~Q`e8OL6Bus^q4YO{9cBJML+8`(ouK)i2)!*L%*(VuXx1lmF)}h3I@F2$)GAEW&^E>7)*`GtES=%9`+eG!u@K3~l zRR?u9P>a46Y=BQ=Fdjyy9}IsL5yi~uQ#a>lS+Y%4(XYkO)S5WFC_R~tTDwsaxW3pU z!TKL8^B(>fZ=~cX(-}LW<%>892PRB1A~2@He$aGc1(j;p89u_FW_I)-^9J{w+yygf z|N3^2ef&Zu{x|l371VDB@(5q-pRPWh-63-nGWqc32 zu|<8iVv3Vv!7OL`NOqYu+U`mtn*`voWTvZ@{aeslzm=V)sUNtdshX?!^C_g z>x_LS(9PMY+v&aQVuOT?;ybY4`{#};s?;Yz<^STtgUai(8xA4TgWQmuRiKzD$bKRX zTYB6t|KY%1cNA_NG-=q2Nh4nnPifysfPr=~{zP5}KL(5PIl&!-@gj4h(K;3X#p?wD z^bOhsJQET!JMn0@?O473ON5eugJZdTY|$X)nO3p24r>S~>UR0=Eu>eQ?^ z*1AFBy_=q`O3e{CfCSnXRv;PxL;L;QBj4!3(#EJk6$MI8Xi*qmsnS2cT0yeJz`F4uja) zyVrVfz3A0GaM80t(C4FkH)O6%4;&ChIvIdgcvWYr?&j1!VBkBE61Z!_{2%{7=z{R8 ze$zWt-CTkvubYi%W0Q?tG2&pbJZuY~Fi9E>KXt>bJ^M6G0M&4iZ@>-Y?b$=Nu@Boaad(KXS2a3l&=!9rKUfI`yS z$A6|wAHIF`ewz3L)ssx4uR`MAe^Uf?@+hDxI?dGd@3~WNC>;Wg)Dc7YMb{Xv1|O1; zn)yqY61DliCvVu)k24ZM(twa1T*V2A?a{U!rt$6u|Ky8?8Ith-idUE!8i+!KVkUNV zU@C{$cM7gG1LTH7M!t3Ei0UCZnRYDQcwf12XQ3s}95Dv%>qcy3w-Ev0A+zgy?Nuh7 z$L`7fv$vO#DTOY*o7_a$-t>F`dq%M3aTkTyUw5iO6Fi>SUVIDt&wf3U0y{4cRYjoJ z!8~EowgXL%;+1uzKRYd}W;G~Wfq5g`!qaQMm02x^3EsPPvZZC0?G#7j~+e*aD}m$lB4akd521MEDKdF}|e6i2Ag zd8A05;cc@f$d}>$m-|+*_)!@QR}R}-wT&)42PUw1XKqAujTx*Z{n3E&r-cuZ3k=70 zW;f;yTiqXwxC0X-v|@`NUmGCf(1&E7j6N_#zzdwaD)1)yUpLsF7{EnGT6S!Sw5%g~ zx#@QiUr15-T=HP*cIYvvvE>UGJIPtj@3|jRKi-e4?N3EDJRA7$ zj8?FU@%FTyU{lkmn{jzEIqH9yD03sCnm=A6BFY8*mW=^<(OUonggZRPhM9M%H(hod zWO+ZSz2&QXDzE3wBS~UlLE@q?)QXIgN`vXz(&?#T{%)GEQ}lVj81@V_)ZEE!Nm7p< zw@u?USM^$KMBh!Tu8wxtw*2WL61J#HuD<%LXq`T#@*xiDJ1zh9I@OoZP=Z06>PI~A z`cTKC&bAY}F!gU0U?XLgVd=uYxK?qv3MiNUmwB8TY|sI6YuRFGcW6@ELT~fPy>i#^ z^eYRpwD;wlEM2%7ujaq;%$au(KeA-gZ%!OjSV-o%OecY4$O|%horSVYzRUv6*kF-E za&!EIFJUew;q>LSrZ16XIkZ@=fLOoiVh$l{vwIB|y>x=Rx$dTc)s&e~yCVOknsFR~ z^G5cgyYb_`8WW@~5P0>;(Gh!1wemQu5cHfNt3`0gu@7hdfl^qZ9yL~WtV_hc5yN#a zYnrd}&eQQu^i(Hbw30Q3964I>ELeeX@?Kmk1Y&*cKda~)WYt6igl?!JMm+-HgJbjq zEYBJ0a$dC~i}39_Wf`4ID!cKm&-kbv1j&*+$%j-}qxH$-kc`)?W{|@WcT)}l_N5ht z+>1M>C|IGR0PsduVaX6K1=8J`AN4h6Cq$Y{vSur$QrnbOF6Lmf9{0GkMV-DS$t|vS zgw1j&SmL{|?!R+d#T(e8H{CbQZ9?hp#kZZR*QKIQKv+f4zS$D!VGD&-2F@|_v!ypT zOE+oq%FnmQC62~BwhCAJz`pX&9ZOhZQjlDl=f(>5g3wYZ@WIhs7!N>-Ce{oVSU5
&qp{7k>MvZ+3oq`1wz=g)y z|GA(tQJw~AcHR51>3&C;fr3QG@I2x4EoXG0oz;z7O&zbtWf zyU24nO{=dd!$ya))`pdyGhh+6iUokh7zXh5q2HE7<5?W zK}X)>J>7tsx?v4`VB1V|2|kmMgn*_%zw7q<8{<$hO^4krW-q zdU>8bcW>O|x%aEZM6C!ZoICU=DRgC`zj<(Bt18P(fG#OB9R?Ijd*R)BMV+<}82K*k z>1_1#xS)_%{o{dQsvt94N82^<%5(r2s6CFV8~s>;%%cYQC3;PtG>Nn>=ih|)_QBe@ ze)QGj+=^3}Qq-QU1fU?T){VW^q|?VLp{IUHCKJbEF#>nFkbiSDe&8t44lEw`Y%m={ zJNwX1aQ8^r7FU ztxpKj4fUE$>OCizm$OzvN|IglLmXeERRhQ$XKy#}Aa}KcrgWW{jvgoR=M4zA*|-(x z$DoMVmi5?N#3S=f^7UnNjCYnUh34BToq02~s+LJD?t4G*4G`=T<#Zn_g6vbq09M|3 zI*SV{AACH#xyoeAAF*(y7dnRNvWDF;$V9j|e1#y1@Qbf)T*mRF_+ zq8kJCV0QJ(wG?@DcwUl`Quo9C*`404zRh4xeT;Nm?UPZa@zK|khQbK(Y*?RB2~ssd zPG^7cpe!o%w`+gUV(?r!JK06SBdBHU>5p$QHHuS;XAHDH%h=}X1j^D^tEMQW%9kJ~ z(Nxk5c=XfnbO>VQZhGzVVOyDvi~gTsE`wz(-R-U?=IZ-oFS*gn63Sc1x`n3gS_&GF zZ_@oNW8cG2r4f%jU!UJ+>Sn=Zlu^tdU-g!ooEjUP574rmK_4HDH_cwj;)aaID1rzA zhzQ#*<~BOcSpR6S{QH7jT-8Z`+dk#0H(gtiuwLv)R(%ntLg0J5Olk>?CfG0M1&JDDNHuw%_dhN(>dLlVU$mk7A z?d(Jw$pn1GRQjGZua^BN|ZNp@WKdp%dv}2U?_V3Zwd#}ujHP;^maS7&4ZAF zcqeDuU!m4eA%CRG9NbZm;fkD(=?_d2+60gyW$D}z;VCj5;VPt#Kyx&<7BF9k)3Dvr zWASGNtZ^5KOx0$@LoSm%uV^44-40}e>I?0K=8ebMs|5D`stJ8ABb-xO$nqC>N_{2rO__iDV)ylI8jZjzgAXYCAw+e~{^b_CX+!h| zNm)U98sG+8HAq3Zpp@d*FS>qt+|=Gre4avU$0)5 zi(6o%^;=3hXW#?$)*;8NH7PYA?}`4dd4@LY1@R{yrK1SB`aL~l<3cl%)eb9@-BCrD zoA3D1jdQkLr(||tN9H1DNuE0^-R@kcC5qR)vJsQ25%5Czp(HhZeuAl!ZS!gDS~%ow2k06rlV$K zX)23;)1_`LmZ}Np199#?zC)-xA>A*vWJV*n95SBi#oustA4@jje`=Gl32cdsLQdg4 z8de_S$TN{xDuAl~H^{^=a^a^@%PaBcww`EE8TPMaLF6YDD#{nF499bqqFX;(B)+4sXO&jlRoPd>&cP)^5kNqg_9cL^+Q0gFZ;6d_htHe=8 z`$yeZX_#oVb1jwb?jnWYdd`eM4nZ0F1(r&GiH3o<0})hZv9A6Yf?V@F+Hbymouk~z zoHD=OKQ-}LKYi-Ue>w-MIf(rwd?ZBbyL%`+gE(6#Ke>dpEnAGSSyM+3)Qrg!7G6{) z%CUgQwCve?4FAg4eZup)ev<8VQL>*LK1j7a>cj=sy3GHjG}9e7{*&k!a8XcMZgLk5 z@w(>jaJU}M?syOaXWjiZ>KUHKsgsWwQlClt;Uv771$B`Y>7154!zg z(aWujRvh2sxxEh!_YMZSJ=s0GT?|uN+_ImL9Nr20l>);N6bx(>)DH&=qPR9(M6JP# z;hRPhx?#FyEQ_R25^F&k*Y*DC(+(`>iYVJ4vzOWcyc*HINQ9VOW*TrismmBe)bcH2&z&tkQW3^ zcA#n!v`#s6#F_eztmI$P-7`&%C99!Q0g(a3PaK_prue4B)cx#C2-A52rOI-Kr)@2l z*jYgTV`%SehW>MTB_@sa>T{tV%f(T5eL}0E?l-~NXP}SX zuUx8-iYrnKafw~%CwJ;2Svx1fZHO`N`2u#w)SZo9x5qAU?J(ApvE9l=SD+9R3$#57 zu%vRE8w@P(!7Md9l-*N<6o0u129u|(-9H_43q<0*AU8u=`Q4g$H-bC{<#RA$)owWZx{s<_c3Oyz^fEV}dqV#|{>p47D>ae*&h* zKJ{|9pACR#xtN6;K0ARKxbyPL9hQ9V`M09j1GTg>boGVVmG?aunVwdgP98*zQFVSw>hSUgtwEf1(zw1@T2Wkh)>4-#z(9vg=IlECC?dk2PlTkSr zes;+qkh(d$40W`OQ*vZZ3JOZ~TCE{kp+v9$ME3_)hL ze$%Fld`TjQy}W}qGO$_ZMMKc$Zi#!4XhP-kI#UdBuo*;Q`kF z+BT+r74Xl+biS6;!73@SR! zC6r4ZG2gmi5xbtbtOCF-9l>wVVpw1H4ekY`JGEmt<^XOGOhl^uN#5n&FbykQ19f>B zvjy=}W)Z4^Z&#bxoUUdi*vM)BJm+H1-{(G!aMi@vYXIVMVMC%oMK1NSAf7}PR2}vE z1Yp`E5zw*?D3RonpOE#lqau{N7e*x^hKgVk5^2bVkOeRbFEZ|-3a$C_EnB>C6{Su4 zBs0_9RJUU0sH&l;(4>M?u2bUXt-gP}Zw&j~+YGbsfmO)tcYFBX0kdCmb{yySX*v0c zeT8DsBR?twvNwstJ%dX=ptL$qv<;d#b>>Li)V;>2CnFTUqPNwN7Z=N7Wcpe3X_Efe zpN7fd&go9hh80wyY{|6g_-`E=;zoSV1+#BJ@wnB|$*naqW(jf@6zY~(G)qYSt)Km^ z19!`*i__%RY=5S~H?Q&HW?~oA4pS=!TTnvfc%yWn252W8ZdA=;&oS_f+?R!TcU(PB zA_rXV4g`aE90N|M;#shxv2htL-gX~1tdcpDP`C}+Rbe~$`{nxEzSnw6>&a zh_-xZ<+D17|2(?zjVN-1H;*|u(FT8dRo=SAG(Crujh}6O{^`LScU7T+4t*m^k9$7v z^GI9|IW=VhkIPS6#NrG{JNW!_H*-)Nk-h{hZ?dTM1@Vi(fZkjEAA!QXSBc?NPEEk7 z-LrZ>-qu6z^10EOR!Xz4b9uze%-@^oJ2#5+I*^6Y{JD^?s%FW7*Jj(EvkPh#NP z9cGC3vrU);Q~x8^*7CJb(BZZ0vv3UAQ+w@+mqg^@k5<;H+cg$*v&b|u4C%UJE{5*G?>EQ1Q;BV=p@Y zY_(UvO6j?oE%iK#+#`A+0!wdGvXFblXqQa=TN7l4`U;OKtZ^gEE!DtS3>B&Ohu7MP zcERIE>9^#(w}`%R-1ur(BE-qah9i}kx&-YTG2;&RY(CyE>>v8CGv((CiDB>5={_fL zPlR)~*-^06%KbQ-mi(($eS;_Yb=e*NWV(oau5XJ_GGYu!=RQq%%UBmrIpt%sKZS}d z5y5fNh|v8sAqsz_STL*gE_uc%4|6DP0%OD#d3;MX_s%;^sq>Euvau48^brHzwCRJ- zB!v={ma+`KPDPjnQx+iMWCOPJGweXtq&Bp=Y3zEjIEZoUS__C1R!P*C1*w@eQX@8e zA716WpiO*_R5}NSatiq>t<-Q?v8Gu`7Qg6@|mf9!x5F8{6_~4MYJ{!ds=u@O2DIvjou-37gAF9O(4Oj>YB?0a6X zo~0lmrQPQyj1C@@AUWOq1`m}T_u{3DB zc;B1FJ>HK(w2-A%k3RsQzOI<92>L?X1QmTep4kVliu)bk`a_GLTD0lNHF)`x73fgv znt1(=?(Sj!J{p2z!qsW;r;^dG^ZINimvH025Sa7UJMxW^SxGRjY{HCT-a8seLli4u z(BuFOcp1M^J>uC7p}S?bb8T}CjkDuPBPdRZ;Vs1zBeUR%?NLO?9Efru=#9~2Q@%}< zTjgK5yT#LvhQ_ml(xKnA*Y_SjYPzW{>EACEf=it{Zh2yQ)QL2y1HD7j6k(;{# z#@Yu*D|K4>fdI5n6koZB_ut+gm6dP&9>@xXeEU-pQKfB|#1dJaGx*)d=8tow@Od;a z$eX5N%>&IU5E; ztOIjuRn`AwCmY)K==7-Ua(5m3On~Hq-%XLZ%}#;7_TdzNE8`vIcDL+D+6l=AX0DIR zQqH5#av9$fr`l?P=1J^AxxlfOyjs|Bn#7T}%g%?#3hFk1h|q|h_NFqwnVtQa&0I4c(x0Ji6XNZF<>scQjGl&#Z{)2IFvjjtRf`Yd!qgWVn8O~3Y-F?r(6Yl&$2=4Ovu7Yr4CY1^rC5>@3hHgxB2vrJ>Ic=i~1npV;Hp<6or1Ghc8wL4UM$KM^NMrOeeEhOU11QezOC*|`d;R)4?m7@TItFgntjCc0v=>!>OPJP} z7z*Ic|ox+C|dE@Y2bvY_Gk&3pZ0s z67sD1)w;m%$W*;>onH}aPtbTZd-O&NheYvfulDQb=!)TlV4qdZl5cNq&se+1Z^*_o zO}eKRY874!pa$S-luwj7%A%(SI@{|(0W{uzspjt3RClA6`q}EtDtW^4c>n#-gA3%-{Jkd)!5m+Su2wB*8i;nu6r#kjq^yLjTN@p=o_CHmAo=6kPPv=Yum#6Vx0-J-eH zJN*v)sz6cq=~GqCj`Ney^rw`k?d_C=C=Y7SGSB4*6`=n+2K0WpUYFhh*0*N0b%=Lk zG(5JYjQtY*tnvBx6W^acAUL74-IFnBATvuhl1WP6ZKa>MF%>H0Z7U9TY?3=A*Mam1 zfv<-rw{K&8V$4k+U#5s2SR=uwbQv2aZ0{HF%l+#dy6T2l_u{Nm`~Ca`eAu$%u}*Zt zcYo<*q5aCJfyXF7n<$A!i7%XBJ_eWz)P+`K>|A*6Rx7yN4Rgt`P7+UD+?LcJe}>M^ zI}6j2+RefnpFIg>p-&tB+FVk>OovL69i)bao_g`mn!XxB3Kyk7gEkT86zzJm=kBU-?!M#YXFe zU21pDgoQ6ON=NL)5~+L)bx6)~OI98~wMX5z0(?%SRMA%`*X{do(hA%bR z03!m&Ia$ZeH#@hE4B+8rW8kwtJ%na%uf;TbzAVCXZm!Z;Xkz46+9|zTq9=ua^JFsf zkEoPB-oRkzlto(Le)PkZk)%#fz9}D8bXI1;$2=i}J#B^`5$1J3L1I`%=lL#I%0&Bh z!nDoW-O$BwIybYP$8Ow9*}wtWeLkP<9IWbUnxNSCAeYY?#puN>%5=a`m-(J1_9*XM=PmZ{&a;!9JNRwopr?#hu2zJM#g>Y%W)O9e zYt%?w3`i@#%Ktg*vb6thj3o3e;-;l=qU~_+vX)!bc(M^dK@|N9|1CAI&pL|zNm_0n zwcub`@i3C9XC@l7sL&}z`5UIbW9U&dx-?2(4>5GdN|Rak-iwNz7i-(=Av~Sgg}uJs zzvEEN&yw3rV@4$rU}YKH_}K8(XKr4gi#6z;59@59s_-{&U(!wr1mVcnkK-2y;U%~D8r-_VOarw9iilyvs0?fG7nKBGM27VOw7E!;d zKZO+y-tJ%)t0Laas?}N-S|n*>mGcNnqT@`lR_MB~HK=u)J32a{o&K5aYuw0_xrAMoA8B2qVQ}@}=Z6rPQ>xmd^T?sOI%i87B)HV4*%U@C z>k*tZ8&NfXdsX0w-u1ELdbtwbo6vE&8?E4fc?h|_tAr1x_uM}RU`J5n5v7i)b3EF1 zzQ!}V8%)Um{j-cTu#UBv==-z@Wk?8!jp7-?lE!;X^8l!#DH}AC==y`ds-nR==j?@6+5i81EI(~0qpL5w!3dkkt$y)sYv6M_1_P=j8j}!xL_Bxx_>}c`#E*@ zL4Jd=*LIev&!3KVtF2;5-!-)(O8IjG7Z%!Ue1>(bE;Y%h z5y#(0`_EabIf|-XG#$}|xmH?qjWCvQe>FI-ExWJzO)S@)KKT0Yj#s%;9HQ1&S`Tg< zLyymLfb_q=@y;@Gy_+0st08Nun|OODNXDA^BbE%>CkW3ISmW(kENWV)oKr8=Ir~n& zM)1W2l+u`f)N!=Rvd7Z(%fu0ci-6#1UU|7=_Ju69SkgVSIkopljg-aDeoQyG zl85xoxiDs8r1#u6g2U3PN0Bd%=iQ?V4G@dn<(8972}J)$W_mB{1s zd}?~1qz@yFzw0Yu%r!6x{mr@a#}|ub@I>D5Px&Yq$et=y{Fo|bc>7v1bB*8rRVPkA z&&_g8+JYxFFVf?WYmXdp)96G7vhHt3t3NY$yx1*p3Wnv^Qcb|SVP>sA$QDY; z9T={dZiRc)9Qqw}i3nEFdNYM4c{f4`Pf5|HeK>V``g5T5^a%T;1Oo~&zbhb?aNZdE zB50ZWrDzGCeypuld%xP@nfsD{YMwxc%j+}^-J$-^OYD4xBk{PoFL9Vtv>Ny8MejeM ze&(f2y*}B=)OsJ!sZ8k-{cx=W+WK2kEuCS6UFkINCKz9uq_(o>o>I9At>MdVBvi}k zFML$s^zQ0v*o52&i|RRry!?;RpYf>Z3ZnDr9lsNb4qt|d#QNuGdsS0dCN+ZIU*!pq znrP{{E=)dcRYy*UUPY%!`)xigM=ep0L^Zp6%doVed!s{J)h-9wCVW+0F0@ zYf@vYp!`1I%D1ahPHIDXrp`}fK#jQ4)tojL$TQ-R@E@}M0l zenLSkb70+Y@QjCXO>3i2c6D`wVuavzqYDS0Fsu1HN+~%|==^U*1gk*lx=5XCSE;== zqPvxmMACu(tdAoK*EwTcvIJ4(LjOj?a!W~sg1%K)W&|sqiVS3WWbA#EkX?)$zLRN=@~lj5rYimWY}*8wrYJ<;A`FEf|s>m|d`y%?Yismr1t;Iu=X z8-H4+0!(iooF>$y0~0yNx9bs;2SafNSVVI_sPbx4mtI1ndsqsTbPR$S6OM=|(CoL) zq*?3R$0k-oqD=3q*Ge43u^FvXqbXx}Ysq2`X}!`TMKmbtuCv^+nN-<-B?sB%2Qv4B z7`-pgpErydOs>_ii*7zu2-6hk3?FCTc5B(mxDjG~6XBUU2d#7a`pU|6X33n~4~Jdi z=uS9GXlN+=xoqen=OhW_%tVsB{5%bXHpW3!l;Bs4;s#IujpIEV%URKM=#;p1aR^+H z1iNUA|9j0fTLdBgJAxp3#@fK(^>NY$QW9T=ir+-~9ongJ^PWXQN;nk24R?tGrucVu z+*mQ`M*ZUlrtMGNdXJFG7*+FY^+bwaVSCLQ&Sx9s*IziEGw@pTV@Hx4;Bwa39yD)f z)NXsGOWGiJl}G+L)(sph~1Mx-)^KcGh^-K zbr?3Bl?6WtIXooVj8H(INR_-#_zDc*W zH+~o*{d?f4t5OOOAS1C>K6gARQ;sN%VXw%k zSfu(vq8h(lrOJ%yQ=rK8NEa++7|7Y#kMD$`XPi3Zgaxx*itTgBppFl2H!&D-5X0%} z`PnbmM3Xr<^;9p2{iPxT3Aj&BYJzneS5Oow3B7=yxl|}E*i~HU3i}27f68qBr3LlXX%p9-<-P<8V`ijk7_c7bHGL z*bB?`NAg-k4ccRUuRX8M+48O}DqDNH8NN5opl#%3$_LoRkL)p$C{EnKzw~0Ax{>BO z{Q9uv6iIip&7;ZY<6nc4uBoaRqZG$!c1)CH@Wm)&VY41HCk!WO{<4ph7uSMPuGle7 zj`xmbkU*}#9xZ+WJ-$!ZPcxZ9-{;`Tug5t91J*sVv+>9O*C!3Ccy}%P{q`CwI?CT4 z!!3j1h8=d9;c0Vun;}HB&Xo%v-3zE8%^7RuA(pnYbRKWDj_$UUEVc}FGx(z(2O~Ll zEbNJm4(IzHq1AcM4@6@-{6AS?4oFL!GGsMRare0f{Io-`zum)E!eUxPi%1w%cvU>7 zo@B33RcR$q;41n~Z%G-8I5w!UKd@6?$wEOxbf78YC_mCwlrnySORnE1vP>h4KgV^M z;>Z}Wm4a`rvptW{V^3xzp}&=$?X`%!*=Qm_dEjJ8UY7ijOsmx&YqkGe*~k^X2JzgSSig zygI532wi3Qg003jgbDU&>)u#R1%lr) z#t(IlZkK>bS3(BL6>yITuaQL&t7i1{C%ZIx5#`ja8YZ`NkuCi?m!P-d${%TPqGya< zmb}bg>tQ$_A@7M1ve6b^`ML}N@v3@a#mxrF^*cn;n|+PtBv6A=pv{di>=DBQ z%){!#PR1OR3qyK$;g~KihL`RhN`fqlXR{QfiVr)k{x%M^n&YC2lZ`}Lx`R4LcL}BI zdFW6b#w98>_ZN(IY5=8$n_NpJpnJS4|JQs?_-Ri(fX1YuE|b~(ucC6YD(FzF(2n`} ztTQo7Api3{#TjUDFssl9?hS2J2CqV%Lj5&;N*3^HT_Z&O&KudGP zc?Pf58#My0RIk3*nf#P?juhw9fK`^`dw_FyA@#tyj$d%Lx%_`JAv!bS6?Wf>oo z85WqTU6^Y&GHQ)V6bd~{>S=4U6er{_f}k&q-NKruUZAmMD@g49&?O|)VYi}|vTt)U zh{{XbbJ&jf5k2$L1wC*<{;SHqeN`xnfYI{sEW8glU{i^)+}s!}$w#H&Mc^U`3byah z&bXJh${ezFf-IQF?vzm8cgs?0?G$I-k2Q)$_3eFdRgER|FG)-#pj8Fl+V4rdt4hux zUGF9Nr9g-=RnKp@L{vlJI!sk?Ak(jN4@>@0|6zp!ItUc@4Q9!3{8mG=h%;riN zI78*DIAmroezgCnq#+@9S;Xj+F!P}6xb4#eF?2=Ns^^%`E+RART?c=#O#6VQ<)yS; zB5f0zhP&rCt&W{vFYSm74>y+dGT&gEfBLx%`MD8}f7{zwAZ)Z;k#4D)Ps{8Ae7(VR zh_FT~6}kP)C$^AWg}tH4HUU|1MB#y|)v`6Iva&r>WR;m^Kt>dFVWB9nIh>zpRaW~` zrRa&;$K`v4E%3Lty!rTvh)#Pm&bWykzD=tmV@Hl{+i8rswO<~jKYgxpO<5NRnv!2dkI z_x*lfC-!|}pS9QC%Va8(q7ItHp|B@?D&v49U{AV?&>cu?bd=nu@*|hs+0ndNr$(`l zSqS7~rT3lj``B(RRGEwYz6xnone^PX>X<8Jecyb88^|CZ>#Tw^;FedJjwX8$FQ1{p z75)w2^spMQf{WGZTQs1pP^fDaz!Cg4x^+d3~j=XYCx>Vc#LW> z*E{^gqok$7fb*!piXkFDW1jm(;vX0l2S@cimQJ5d*a%Y@lAn~mn^E|<>8ZF6bn9{* z1kp8A8uwJxq&LaW7uZfY!z?>1<3mLP-_`CX3DSIL{IC_mka7!$jB z2oI20lj&LYG#hO+{q3{Cm*LjgCmL>ssl}mi9g}}3-YVD4 zYgYY@@QXQvZOSnIiZaE2k-lJuvxD;r%2{aFxPQMH4(TPe+!yLpNd8PL8X5uzC)c1? zX(4}}zngn8a*=2jY4>ytrh@7mqh-ry9P8r*L-HY#Vq-R&l}Xt3lCndv!#Ge=9KF_2 zABhQWCT>|36(#OYpZ-Mo^@TrKvIdu;<^G>QtQUHTWRG-qAl;JC)zz9L!58m6py#Qq zblw|D_fDOQ(F``ni)==s%#Jp}eaCA)hqurqHJsMpXpbhAB*h z*0%Vd$96GrfEiL*56hNIM*8SAtKf9*$5;>@uw*23D&ATDVDh=dC}f?Q-Yhc?t(l0u zN@Lg)sOYmTDl6(GK;6`a30<%yxvaSnRHLS3aQk%+@35DJh;qQI)p`0-#(tqsIm@*stz2)ssDx!Q4{)K#>SLb0B`mMROjHMgy0H?Zz zg-hk|mO*FbPjC5Uq7O@zGif%{x2A@FgAJejb4iyRC>ItMR@Gm@B#+%Sl*4KklFE)5 zeKyRj;vpNl#>*=4`;A-C%GQC_W#hp$4;y*@>s2vMP7@p+f++e124TnL1(1AQ!^z(k z(jm*v?gv}KYK6e*C&DXP$-1(G1n%*-GxC%ubWF^ZN0NYSVW}^we@XtK&^3KvMUtzJ_Q2LQor6ZfX0qSb=xnK-d_}yG?Y(F zzVN%8`&2BFR;i{b3uFm~p1rq?M-$EDJn)dRaKJ#5P2|+Cd(9F$H=)}5hL(v-q*7~Y--zl2tXTQ8)S$<*`H<2v1tsgh z%>HecVeaJD=il@X8Woa*C=&vk?}D8s>Px=w_=7#~IWiC^P@6kceR144;Sp10b(KEc>5Ggt% z-Z6{hjfJNtq7Eaf3lzM?IQI6-XpM<}rMb55N^#S>v&V6r_j^thSSOUuA!o%3KO+*U zHl+Jj8yTmD^)JWcXF|bjFtU8n5G)U_9TCv*N5jMYozFCX^R&Xsm9|6XL_K}2f)cu3&I5#_0 zo22c-CiSVytBs>s&_ot+R5PV`@0GCqs&aS#iI1E2^N%IF+E3MV!ji zE{;xf-B17i$jY-dexd3E-Truab<2TOy}Em&ZUgy(pMqKz$J73znfDK6wS34bC;NSe zq_^guOX=aaqN`62-4_yctx3_*z1JJVSN+P_z3 zjQ#rcCL^BgMzxCRT_)ocWYn@D|0Z1BibY2-2zs2*>W;qzyPA%d`gcF>zlwP3bPHC~ zzk*l#XxmXB5OwW2Ve+Mtq8Ji%@%VuhE{D#?o5%4ON7E=%ydhd1%K*W6ie_36Vb1SFh4+B#G-~~K)xOni6%?A`%w$6qfg&i zB4T5_OkO08yRzxw>_~M1!9OjQ0bea~{#uDM`%@5Vi-E2C-Q&^DP$$$g-51nXx*> zeD_=SoMsFSpsHUjS6-k&WF@GC>H@je(OISBFgSJB$f9$11ZpkCdUV)-mOmqb8C!eANu=x$W0(J$YWp zX1&2_m$dE8z{b(IB_T?MA5o0x4PgEVBbRQVA)<62!ob^0g#ejgmDKj3x;^4#WISos zDE1FrmUdN1>#n^(jjw1((rOvZNO~nHI8znImvEQm+?y~U`2N3@Gc598;q>sbPAv+a zxAK(})U(cFXp`wq6us!8gvX`XGT9PqMw4VS3n?~fjlpZwh!p1oBoPV3Me^4#&XMdR!CJbHC>?~^cc)A3CY45TSnl0ziB$4F_)CigBYV z_G%^}#>?)hlN1{^6q^dUQS98F*l;xFqi`TvxXHX(Eld__$E;fjCi!v8C^l6jiPn_UG#vhRSlW*$MG_7XUbPu@nOinBV0S%R z-1JkttJ(lx94uYl6u!kL5Lk}c4`8gN$1}j;)%*4WP0f1Ko0c1)3-Kytj&2co@8P;-hVG;l`M8KTq*9%1X{ zowhNBcN@&h#pg-mXd=T1Q@js;i-Mjrkt?FU4_6cO=Md%J30RCsSPDFgd~05&|{%QUj$ zAF&HaM`cdC2z%{)<5&LiLB=-RqLyDR^VeZRZRa8C+l4yPPq4pEa7L}XC9^c-&gu8h z_YGd)VD0I6_@`xDRu?}$A%D5ES(?LZ+|BFC@>cs&AxkdbTsPzatdp7#e^PX#;MnaledwHW=zuG`N%N{?*8{Dq(gAo zW-=W|8)|!=Nj$B^Pw$_8RGsNvTi1j#lbF!etpH1oUUYz zm+M|EMMYMyk7%k67)O5F-0qJ~%xyfnW*h3j`ILT&P(kPB;EqwHm$j2=ODEGx6b_=- z%_(Sn=lo%#VZgj6+W`u@X_YpYv5e5RvS+J&St4ofKcoV~4#Efw^fu^I{*R4&g~8tyE3k0^6+nbRzF|WtR&!g7uGc`)k%z_|ax{b~BD5HICxa3Yy#+M%f$RY4I6ZfI5P>AU0WKLHXr z|7sov#ZldOa_SbboivAEaKysx3X>;P9Z?vmf*mB@NAj41$-tcm@PI7D4b!ICEct#F zX*IGV@WjC)sBRBiJoZmHF02clS%m(v*nvYH41H2b#l&Zn`D7n@Q8_kp;2y|lh0=v0 zb~Tku_vKIjfVlHuWq*LZ3b5IC=N0vO#1mA39{(pa0T)DI&XIK#M!fA#>2YX4+oo2> zABx5H?u#apR!EgLj?PJ(cu3%T<9|yeotYqa@QQ`mqWu5rR)gjb%xj-;Bm)OnQ!r(&bT2wlE1iZn8(7c7N9_6mfu&SL)mvAxeYa~oQ zWXu%DgoFiYPSE@9A_iNRV4IhX7ZEeb@1FV7$$Kq|-NxJ8!-7u%RycLaRD!!SZ9A1~ zEkEriVw2;7lazlI8;^>Ibe>FqQUT%7&~ahE(FJzBN^V45P1(SD;*FEWLuAuWOTP9+ zj~8u4L6I8#Y53&TWftVF#86MyF>u6g8DLHFO!%~IPIS6CtbY%~?K+Z9*Oj>r_NC0n zO`iV-6{bsBMrc`KSw*R5qUxX|5q7sJC6bqC(e=E2l+W(uRbE}Rxi`EJ{a0Y1R4;3R z1`sB4dW+Es5PGTVkKW;v(i{(JLqlRouqzCr%Igg+dyu5Wldd_)4%bFf4?P9zZ_aRw<7w4Ivgv%Z zTp)AX5aTk%c0bu`4Lyc1plZ&kc54l?BQ3O6n2UnmuT%xY>u_lxEhlT2rogng7HB9E z+61;LAG+3J8>PWgMysiRE5?2Vc$AL$Gx7syk}zaff}YHz{63gFVt^GCQkjf<0^f+f zA6WXtld2_WthOAz|FqiGIn?+=;ow;o`NxmTvyS6>GbxjBS8#cj z&yq+NR{eg1XVP^$jc)yWfR#OS`P=!532r@irIb17qP``y#v)8>0u(=}H=K*8@v`|q z<9jg?24{xgF1nvgVJD7;y_1tO1PGufieyom#Ax0L6!yB|rTJyLgFCw3p0CIh`Rb!n zM=&(kSO14iTU;b~^&2zqDY4Py@r1!TyrO@9 z;xU=mEX_g%!e_MxL?K?eaT>f&>jU2`XHenB;w$q-TOVSSugQ(s^xGOLz- zZWQD3Vt5nDft^7RR@%TwVNpdIUDY?z0uWWcpf63uvIri2RUBu<*dM_Ex>2+R#L_Ve z{%!b2;Be0in<`l(Wrd@s=LHxXmu8j>bhxyyrM9{5INj|*!Y*o(yp!GN|6DlYAp2aQwDpUS-8&{5x|A++y!F&m& z6vjV4nxD8nyP|RJx&2lIQdrupNY0HaMG}6L*RkkH*WcGyn!&w1(ziE+cC z@iMQM7>7PA8NO*ZEN}6pe!tAYEjSH9r&mhf&^^{JlSNC6V6UqSUDkG(=@Mbj9Qv&* zv2iPl9}ujd3+t-wYGlZA3cRQ&hiO4pv8U?#RyZ2QLJv~Z*c~{GtWf|={^fRCf0c7M z0kuMpWoUOj)auTw{Sz=a8{5>y$%n7jTQ)YFZovJwzR5c9*?$q6W`ZjxKhtlU*3C=P z)dG54w5ZL{nfb?`gVoz9_=xK4{=Cn2(n^0({|Jtjj2vy>9nT%AH^1x4B7>lpRjHhR zuyl&TNLLADy#J=;B@~fD*VQ=Yk_l~xVuLlxLCC9-$Zg|?qpQVakuSL#%=dw`yr1mN zHL?jGT$42Fpe`uM-n}oueYS$BESB;R8`)d|6$t;pBKtq*rV0gIS`cT>Lq7r?!kP*M z>qn^z3U0fPB!ngA?ps4n2xBYn`k}(mvy!4UNYA7bo_wWZpZueuV}qX{6>*X8$z%`zsulUhqFA!8&c8L zoAiH7QjWx;>jE?&|6bK_t!(m}s^cK5oS|V32g_Mvd{sfZs)loPJ{ghsWdy4cb+-r8vQo;S6m6&Shp zo0NPxz!rsFC1}sx7*$}q)O20G5sVf2duY;!1pMTWN%5kN@hoaYxmmFM#9ZT5i zQ8-C)uqrWt|MM*gzxW8BdZ<)Y$>-~Ymgz_Bib3#KLG@2ybNqH1@~Ol<@sN2`5Da@yoJoY8Egw zi>oi1I6tMnFCvt7#L0}u$&o_wNy3ydcM;5=I&R)6msHqSb-Bd9^YxL*^ zYUGrh12t@sM~P8n<1=AO+oetY=|Z@XKtN@jkjUTH+_|9SpKe@3CHB{ zz;nu2(lYPgT+z9~(A2jdiy?`j8LSa_c=}%y&UsxKW@t9VDyO?gc6ckT6|Sia9=*H{ zzF!P2tI%YJT^La&c}t-N>BT9tce_SwG>&DI@g8Y94zl?>uls%{E!L`A*8Kd&Mv#jJ zz#~_6H2mznRHJ`nS@rvtr?jcX|LY_plt}uM4|QopBpJi9g4?D^{02i~U$&zUE8o2j zpEs?Dw5?kXpHffssrSdEhxyXEMnoX#o?b?w0#T)x&&<_h1sn?v-r37KQrjpLCRoyzeDAHdOpR4>DfZ%xY-0`^kse;O z|GJFy1EWMegBZz5-oE)D-vC6o{;F0%C4@k3hcDVy-j)3AtDR?zv+Ax=lBF_Rt%hE} zdg@4;xK#ij6)j4#`_OJosJrw2PAsh2MVHMV@El~e-H=AlsIl%)t$}k#^mso zBG?Uh>*W_dQ=jLuHh=trmYK2!u5AT?1*i!-I{GNBKGv={K>vG7ko1TU8m-K8hS#3^ zeDn0`bvm`x1;#GyIboA{Q7$`mI!Bl+S$Rj*xLUh_ zzT#gmE%_mpt*fqDet@Q~zQJ2*^ZS2qJ$^h*KY0}fpT$x3?E1YkXzJ6=$-iFuwlQyE z1}Zp8Y)>{jd0T2zRLHAk%^VFcJ(ESwlydTeP(^+~|H9e(4dcvf1_j;%i$Lv>+xPn* z0bFUFXTNC@KihGGf+(qOrzw8<-dr^l($3pwWxnWJmoqS3+@1A>k|>twEYtdISkBvM z*ac~FI6PDNMx63ZwB{pS<@6#sA`=n6!-B)4)SeQgW`t(8O)D}vuoEdaobmX!)E(yW z%@7{u_(d^J3+>~Qk`RmYdg}wb5Qc1wI`lIeFfj3w=J=&eCfWrA5lD&V6tSOsaZnXM zc0o4DDiq`~4CS$Y)DHh4K`Gv6T?%(+<{y~!^z&QRLs%%PSsbQmPPdx9l(XEh2>0X` z4A?S*dQED{p|VTPP3mnooUw>orAH2vOR-3u4crKx zq}=>F>a_kfXA^#S>&)itM5d78{KUu3nK}uOtF3kKfjJQJLn^^g0`_DJ7O8H05iVBhG)LvWY7Oq-qMW;j}mFM7q6&xP?R!fUMQ4Q z!EY7+EJ}6^FWM881;>#LZoHi7m#bfw_=Z%;4(@LEXyR2MQ75DvvxtJ%N6Id_?Ni5- zkXM>{Er>7BO)ON|LVL| zy|f?Tu1>$VImv-hPNE9h%!BpW5aE~btw?u(*c{6#3oggg8XX?OjiqMB%J z(d>dU^}inyY{)Pns1>!9;_1^Ggwmehu6SQR>wEU4_>;;ErHn1A0|#K>sHqRTZPqwD zDVu?YN8eO`Xy{CYtBF5@pa6OoSKqLhLj$ekvr5V+P!H@m7{M$84iu-%0&Q<=9%smO zn_*p7;McRSWP;vhdCG*vDRsN@LMDUlLMDh;6u3_WE#Hn2M840px!14m29l$G$=N9| zdAl^u^%H>Ml7;4!uUx-i+%yk=S`bm>mvue(!z*8InqHNcrQY|3JekaSh6=5Ah$gf*VCk#QiIj}sb04(HIHr)8b4FBOf0U%_ILKSlM^ps5a7q4#nA*ZI4oE`s z{=;h*igu(&sucorB<&UR18<{o5E*yKdo-|WXpL1MsX9Ddp&!xUG=L*>;7L`@gX1Rr z84=0z?C&_OX3pM8REvq(rbHkv9E%E|g<_AS%xIjgT5faW%hpkJAN$jU4TQ_4z%%SU zI66Y?s9sw;X+ro1c1tLTQbjP`el22T6|E0M)qyDO-U+BC#(l(bO7Bm&pQ^Xir1!zY zqF4Gvkt(zEA(h)V^c48YqUr2U^lG* zisD>>@js&&W47L*Q3ch;LpTTcir>G%YanXodJHaB+k}`T0>Nf^N_7U&TYX2Y>}U6+b-&&;YKOiYDiy z4B>vmr>|0Kkhc`P9?h~yH=__m+K&v}ZnE_6q3B0dteVLY*m?4Oh7vcMAYyR&P&AE! z)G|Y>xDb+q?nr6OP+R$Jxv3E-;2D7|ug|Y+jZU~3vh$JdbYlG|&nIT*r5=a0DK1W} zR0{*2C5?2hhnm#or3APfEkE^bvOwE5)jxH7>M6e^<|(V-Aw6 z<+5@_kz(lhRcR;(^ui$AuLQoTfIRxgtvEC^c+j|M=hkCU&N*FUwBrSu#iojD6h6}> zZ4ZiE22hxL+Y+G-<6UGMq<8~D2;Lb3JY34P?z0!g{V4Sej5prpmW5 z2-gsQ5nnAS1|nr?PVjy{$%)sR0D^|h#I1K-#fV%xshXTic{BaJm$Rmkw=g*H6-t~Q zvhQvJ#k=tz+?gt4Yji|{aMb5xn0eO+CAM8!FBL2WgZ#pFG_A+nxmRx_UpaXkSHe|@ zniXv^I#4vJT)H2{Y^y?fcI58pr7e}%o8epqT}SsgsNSl4O-97jF+DQ4_HdJJ04Ug0 zZ&if=#;(}%mJ40RNLqHIKpvlWGYR(&?e}j+fnjMb4hx~^9wGP>6Bindd$+eD*q~6v z0Oh+bcLBzJ2y^2firg2g0=y@O$grOphFcql{AqbL7^gjx@1IwxG?t4fJ^`IqBVVYr_-AZO8g{V=vfn^PH_$4DyM5g}_V+Xa&yrbR4q?)>H_ z1}6KXe;^gkO#LBshf&y%abO(2>w?L%Ba#^Z&i7!R67XSA{GRn908?gw{rBx2$Q5<> z+J|hszn?=(#R+rCITJr!g;m{Bd1$?8A~%zqx*{=@p2?j7QiKwa-N~R4d0PjfDW>`>70Q<^?RXJ3ODi3 zJVWTI{&wQGAat;bwCH^H{@aY)cy#rW6rZaJ9SL(mX}0wMI}jH5y>WM2k^|-3XB_>+ zFqtHGKLXg7TZ#$vJnkl|8h%8PK5NXvu_WQ4@p_Kr5aB>p==e+X{SW%iWM$>7-}kC# zUN!yW1fLZdH*3u-eG}S_^khdOcv6?KQcyFs z$1~K4T4gE$N|8iYe-LteeHI>w{N~*?PjlgXQwM8ANRr`iR|zW?kgw(7f@f|U$hlOM zj_Dy+*Eb+EPF-!~A`b$GoQ-=hz>v6VRIZtM=sPjYfqq!F2b&RqEQ()M5DmmZ=}YeG zG}ceilhJhaFJxyagukx~b`9{hJkGW3OV@8X z5y`dXhL2q^S3uE>Pf4+N(!qefBiwe3_d9>dRm1NJ&^ z54}t-oFH?RN06~Hcd83km7A-*uCSC*t>YWl(oB-sTBwd8YcFsf*qxxv6}ATmI5~OT zu%5l%D$MJtw4>CB#6xwEJ3f2>I@5WGU0AsSItLC9NsVgAsq$(TW3((N;S+co#&-S% zJGCUlCrBix5PPcJR_rniZ`ed@6+yH^cb|$u_PwfO)$;6jJp6px+}s>-T+|;4X;5Ee z!}z+K+7gDGI;hJU1Fup6+**9wbrI2WYr7LWQXM4y0jc6mThe0gGKOIdcnd=_ONxdC zCBp;SVLF`q$dNRa^f2v&m1+2Pt~bxuDUGE1F;vcSC>+iAB5m+|njAm`Sai$Rw4?*j zx;eyQp02k!b4-mp3s9&}De_$j)l3%i91MyEA#NJ732YVE}qZwExya&uGvV97T+x*O-#%+YcCGj~k#UhTao zkVYP%AmUTE<5bY`nS37j1NrW`tXhCoUE~Oo0VBT$Xu>8G{mk)Jg2)z-7|L>t0ccCu zGp3SP39J`Fxk9AS-zKZz(?L>{k5;eLTSH}yfB06KRz`4H#tV?;Wo!=5M*IZ?QiN(w zYz65e88y)Ja3Z*dV7w1BGlIh(LrU&tqGjKSPRT{}IZ(~@++%OAO+_dWbQZ+;Tb1+H zdviQ-c&ZWwd#_p8K+b+~0q99MWov2Oap#df_V}kZpAw~bl=u)&)xN^&kz*|Kp0rkj z;ehsd#4)f}Aez{YP!O%5=KH4&Poiz=Hw3Ni7>$U3ypR`vg%Y>YwYc|_drmzUC-ESO zHAS#F;*zpf=Zvsc<|(WrL!8ARZ$h_S2mj1uCCDDKq&9a_(jsPhR6Epifrtiqm`G!>BCF&bF(B4ruM6V+ zPjRZR+OT4Yp};^p)CP=QcERp+c~)x7W3C$HPKysf8u%ghuEE)28i%JrkuS4{AdK=u zl$XxC$s4bA97ks8%fuBA15*SqvW#u|ge^d9=37@NmZ7S?CD2KKG4D{JVUTc$EJ~A= zMNzSzzafgwu{UCD3{#&xPhhhCBS7n;qSXeuyg7@${duwWwU%D+v-Vjs$OcfpQ((3? zML(sN}b7&2U*3Z0I>t{E(eJZ=!< zEceOFx0e9-F7G3z$~XNhsI6qvGbV??JMayw#-^sdIsr~tj)jGVv>PRA z?;C2KH@LR*$w94SR@1ba`C~IfAVIxO9wAuGB5F3?-?E{(BNaK~7^_~4)5@Rt4lZUx zqUNzxa4{D_0~+K3A-AeZEv^Qu-l?ll@z%98)#7~?eLc-!IV5vr?a;DMbxv6g0ju+) zFo#4Jme#HrrG_AWg}2Bhk9(dR4icfoL{SE7!CNW-lus_Xn-I!cG6m`RVss95&6B7Q zZd%Ivp|p|Ke)j8~mu4#EGoJKnwO!_K<3m!YBdu&L=KpH_C`2s+#?cWGR z<}S-tx;EjVux;v8Xmunkc!5lA`Pl(Xw!bB^bT7|_p^sf3(fpOXAOG)P4{OYnn3~pv zYVXe~n>3Iu0*SRByxNl#CVcp!Omm(hXPs6vi_)x=Cv)51l_?AGuhuI?eAG{OE=orK z6T(3UkPjTWZ+7#&EnV&+3}gICZiN?#vi#ZiI(9;aog5E^pe1LvIun8Rf=r2}q)$#E zjvKk)kHP4*DH7H;PN{tBWg8|9;OMy9n9W?YIfB0Vg%AH>T6u%p)?xOUM`J|ME1z~b z3|BP8>9oh$HND!VFh^?Qj3J8*{R#^sAt9#-+2N~m-uSY%^_YHSNf@u7LyN-OoW-Tk z`!6G}N_w$m00Ig{FBp>3-2!8O+QAY}pWNUyTl}y#_VWM&A@;!`Nr;47llbT|8TMHy znp1z`NFQ5bfVRbX*@qvbu?4#NX}AmHp1*tpVwD$VEa6Kno&7r)Ntd+K_>vASHD}V+ zf@2tll4|hht2~K*j_=QEsMHoFkeNDxFSGkYg0={@c?m-{5Q;8I$wP6Tdm`5j#p~J7 zw39ZcmlsVbg{N#yX7aRx6ACVLYLb=B)ibSnvhW_rgIBep+99UGJhz>F88FU2omKz! z9)2B8B837C#Ygmt%5>Cgz8z_WHS&tB3^BaPjSElbh1z7rhL(8(<+nXw#-N5_&{Oo$niySArDqDI&eLF*37cu#Jd(yHpV(xKTd z6=v9TF2x@7fqtCI3gx~BGc1BKZk+E^aYDO8mNnGjlf zJO>xIf?2AJBYr*>kIr|*v(bZ8Uj69bVqGF8$j)n*>3$i?AIjDoQKZ$pOG=a^EZhPj zo#^-{_CU2^)OX#KieX-y^c|Tm*j)5f3Q>33DrfGJYABW%@UHxI>;Qpd8*oSb1~YkQ zk{IN1Q)^(V>ke>TEJ6+?X%9`AUD_oi4&y1qOhhjByfQAPlB15%t?wbLb>c3mIpUqy zRx@A!rHn{M3J-S{pd#jfjtTJFT*jjJ;Xq#AZQ*>=k*pr_PGgVuJ?yK4+rQ|a-;W94 zrLB=rr@{be@m)8JRnYDmF+m@SnRiAcR=8u||FXzSJSp~>jtd+M6x$gtAo4LCkP?-P z9e4~JVP8_3N-1TK;$@Oq$shtM^_f|sTLk⪼pYqrEyj|Lcf>ja#?x?j30>+I}I*U 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 Date: Fri, 26 May 2017 18:43:15 -0700 Subject: [PATCH 18/33] add win state and a little cleanup --- Map.elm | 84 ++++++++---- elm.js | 406 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 257 insertions(+), 233 deletions(-) diff --git a/Map.elm b/Map.elm index 18499f1..84876fb 100644 --- a/Map.elm +++ b/Map.elm @@ -9,6 +9,7 @@ import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick) import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Random +import Random.Extra import Random.List exposing (choose) import Time exposing (Time) import Window @@ -71,6 +72,7 @@ type alias ArtGame = , balls : List MovingBall , time : Time , seed : Random.Seed + , win : Bool } @@ -84,30 +86,34 @@ type alias MovingBall = } -newLevel : Level -> Map -> Map -newLevel level map = - case level of - ArtStore True -> - let - ( artGame, seed ) = - initArtGame map.window map.seed - in - { map | artGame = artGame, seed = seed, level = level } - _ -> - { map | level = level } +{- + newLevel : Level -> Map -> Map + newLevel level map = + case level of + ArtStore True -> + let + ( artGame, seed ) = + initArtGame map.window map.seed + in + { map | artGame = artGame, seed = seed, level = level } + + _ -> + { map | level = level } +-} initArtGame : Window.Size -> Random.Seed -> ( ArtGame, Random.Seed ) initArtGame window seed = let ( balls, newSeed ) = - initialBalls window seed + Random.step (initialBalls window) seed in ( { time = 0 , seed = newSeed , color = Yellow , balls = balls + , win = False } , newSeed ) @@ -201,15 +207,11 @@ randomMovingBall window id = ) -initialBalls : Window.Size -> Random.Seed -> ( List MovingBall, Random.Seed ) -initialBalls window seed = - List.foldr - (\id ( balls, seed ) -> - Random.step (randomMovingBall window id) seed - |> Tuple.mapFirst (\ball -> ball :: balls) - ) - ( [], seed ) - (List.range 0 9) +initialBalls : Window.Size -> Random.Generator (List MovingBall) +initialBalls window = + List.range 0 9 + |> List.map (randomMovingBall window) + |> Random.Extra.combine initMovingBall : Int -> Color -> ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall @@ -237,7 +239,16 @@ update : Msg -> Map -> ( Map, Cmd Msg ) update msg map = case msg of NewLevel level -> - ( { map | level = level }, Cmd.none ) + let + ( artGame, newSeed ) = + case level of + ArtStore True -> + initArtGame map.window map.seed + + _ -> + ( map.artGame, map.seed ) + in + ( { map | level = level, artGame = artGame, seed = newSeed }, Cmd.none ) PlayAudio file -> ( map, Audio.play file ) @@ -248,8 +259,14 @@ update msg map = artGame = map.artGame + newBalls = + artGame.balls |> removeBall id + + win = + List.length newBalls == 0 + newArtGame = - { artGame | balls = artGame.balls |> removeBall id } + { artGame | balls = newBalls, win = win } in ( { map | points = map.points + 10 @@ -731,7 +748,7 @@ artStore play map = div [] <| exit HomeTown :: playButton ( 192, 10 ) (ArtStore True) - :: points map.points + :: viewPoints map.points :: List.indexedMap showCircle [ ( "black", "audio/negro.m4a" ) , ( "white", "audio/blanco.m4a" ) @@ -741,9 +758,9 @@ artStore play map = ] -points : Int -> Html msg -points count = - Html.div [ class "points" ] [ text (toString count) ] +viewPoints : Int -> Html msg +viewPoints count = + Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] colorCircle : ( Int, Int ) -> String -> String -> Html Msg @@ -766,12 +783,21 @@ colorCircle ( x, y ) color audio = colorGame : Int -> ArtGame -> Html Msg colorGame pointCount artGame = + let + content = + if artGame.win then + [ div [] + [ text "You Win!!!!!!" ] + ] + else + List.map (colorBall artGame.color) artGame.balls + in div [] ([ backButton ( 130, 0 ) (ArtStore False) , text ("Color: " ++ toString artGame.color) - , points pointCount + , viewPoints pointCount ] - ++ List.map (colorBall artGame.color) artGame.balls + ++ content ) diff --git a/elm.js b/elm.js index 423eef3..aa96be8 100644 --- a/elm.js +++ b/elm.js @@ -11793,7 +11793,7 @@ var _user$project$Map$tileCountFromPixels = function (pixels) { return _elm_lang$core$Basics$round( _elm_lang$core$Basics$toFloat(pixels) / 32); }; -var _user$project$Map$points = function (count) { +var _user$project$Map$viewPoints = function (count) { return A2( _elm_lang$html$Html$div, { @@ -11804,7 +11804,10 @@ var _user$project$Map$points = function (count) { { ctor: '::', _0: _elm_lang$html$Html$text( - _elm_lang$core$Basics$toString(count)), + A2( + _elm_lang$core$Basics_ops['++'], + 'Points: ', + _elm_lang$core$Basics$toString(count))), _1: {ctor: '[]'} }); }; @@ -11879,53 +11882,15 @@ var _user$project$Map$removeBall = F2( }, balls); }); -var _user$project$Map$update = F2( - function (msg, map) { - var _p5 = msg; - switch (_p5.ctor) { - case 'NewLevel': - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - map, - {level: _p5._0}), - _1: _elm_lang$core$Platform_Cmd$none - }; - case 'PlayAudio': - return { - ctor: '_Tuple2', - _0: map, - _1: _user$project$Audio$play(_p5._0) - }; - default: - if (_elm_lang$core$Native_Utils.eq(_p5._1, _p5._2)) { - var artGame = map.artGame; - var newArtGame = _elm_lang$core$Native_Utils.update( - artGame, - { - balls: A2(_user$project$Map$removeBall, _p5._0, artGame.balls) - }); - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - map, - {points: map.points + 10, artGame: newArtGame}), - _1: _user$project$Audio$play('audio/puff.mp3') - }; - } else { - return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; - } - } - }); var _user$project$Map$initMovingBall = F5( - function (id, color, _p7, _p6, image) { - var _p8 = _p7; - var _p9 = _p6; + function (id, color, _p6, _p5, image) { + var _p7 = _p6; + var _p8 = _p5; return { id: id, color: color, radius: 32, - pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p7._0, _p7._1), velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, 0), img: image }; @@ -11955,7 +11920,7 @@ var _user$project$Map$randomPosition = function (window) { var _user$project$Map$alwaysGen = function (x) { return A2( _elm_lang$core$Random$map, - function (_p10) { + function (_p9) { return x; }, _elm_lang$core$Random$bool); @@ -11981,9 +11946,9 @@ var _user$project$Map$Map = F5( function (a, b, c, d, e) { return {level: a, artGame: b, window: c, points: d, seed: e}; }); -var _user$project$Map$ArtGame = F4( - function (a, b, c, d) { - return {color: a, balls: b, time: c, seed: d}; +var _user$project$Map$ArtGame = F5( + function (a, b, c, d, e) { + return {color: a, balls: b, time: c, seed: d, win: e}; }); var _user$project$Map$MovingBall = F6( function (a, b, c, d, e, f) { @@ -12026,21 +11991,21 @@ var _user$project$Map$collideWith = F3( function (a0, bodies, acc) { collideWith: while (true) { - var _p11 = bodies; - if (_p11.ctor === '[]') { + var _p10 = bodies; + if (_p10.ctor === '[]') { return {ctor: '::', _0: a0, _1: acc}; } else { - var _p13 = _p11._0; - var collisionResult = A2(_user$project$Map$collision, a0, _p13); - var _p12 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p13); - var a1 = _p12._0; - var b1 = _p12._1; - var _v6 = a1, - _v7 = _p11._1, - _v8 = {ctor: '::', _0: b1, _1: acc}; - a0 = _v6; - bodies = _v7; - acc = _v8; + var _p12 = _p10._0; + var collisionResult = A2(_user$project$Map$collision, a0, _p12); + var _p11 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p12); + var a1 = _p11._0; + var b1 = _p11._1; + var _v5 = a1, + _v6 = _p10._1, + _v7 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v5; + bodies = _v6; + acc = _v7; continue collideWith; } } @@ -12049,22 +12014,22 @@ var _user$project$Map$collide = F2( function (acc, bodies) { collide: while (true) { - var _p14 = bodies; - if (_p14.ctor === '[]') { + var _p13 = bodies; + if (_p13.ctor === '[]') { return acc; } else { - var _p15 = A3( + var _p14 = A3( _user$project$Map$collideWith, - _p14._0, - _p14._1, + _p13._0, + _p13._1, {ctor: '[]'}); - if (_p15.ctor === '[]') { + if (_p14.ctor === '[]') { return {ctor: '[]'}; } else { - var _v11 = {ctor: '::', _0: _p15._0, _1: acc}, - _v12 = _p15._1; - acc = _v11; - bodies = _v12; + var _v10 = {ctor: '::', _0: _p14._0, _1: acc}, + _v11 = _p14._1; + acc = _v10; + bodies = _v11; continue collide; } } @@ -12077,38 +12042,38 @@ var _user$project$Map$collisions = function (balls) { balls); }; var _user$project$Map$collisionBoxBubble = F2( - function (_p17, _p16) { - var _p18 = _p17; - var _p25 = _p18._1; - var _p19 = _p16; - var _p24 = _p19._1; - var _p20 = { + function (_p16, _p15) { + var _p17 = _p16; + var _p24 = _p17._1; + var _p18 = _p15; + var _p23 = _p18._1; + var _p19 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p25), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p25) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) }; - var boxX = _p20._0; - var boxY = _p20._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p19._0, _p18._0); - var _p21 = { + var boxX = _p19._0; + var boxY = _p19._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); + var _p20 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p21._0; - var dy = _p21._1; + var dx = _p20._0; + var dy = _p20._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p22 = { + var _p21 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p22._0; - var cy = _p22._1; - var _p23 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p21._0; + var cy = _p21._1; + var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -12127,17 +12092,17 @@ var _user$project$Map$collisionBoxBubble = F2( _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p23._0; - var inside = _p23._1; + var closest = _p22._0; + var inside = _p22._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p24 * _p24) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { return A2( _user$project$Map$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p24 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Map$CollisionResult, A2( @@ -12154,24 +12119,24 @@ var _user$project$Map$animateBall = F3( function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); - var _p26 = { + var _p25 = { ctor: '_Tuple2', _0: _elm_lang$core$Basics$toFloat(window.width), _1: _elm_lang$core$Basics$toFloat(window.height) }; - var width = _p26._0; - var height = _p26._1; - var _p27 = { + var width = _p25._0; + var height = _p25._1; + var _p26 = { ctor: '_Tuple4', _0: _user$project$Map$initLeftWall(height), _1: A2(_user$project$Map$initRightWall, width, height), _2: _user$project$Map$initTopWall(width), _3: A2(_user$project$Map$initBottomWall, width, height) }; - var leftWall = _p27._0; - var rightWall = _p27._1; - var topWall = _p27._2; - var bottomWall = _p27._3; + var leftWall = _p26._0; + var rightWall = _p26._1; + var topWall = _p26._2; + var bottomWall = _p26._3; var leftCol = A2( _user$project$Map$collisionBoxBubble, { @@ -12267,7 +12232,7 @@ var _user$project$Map$randomColor = F2( var _user$project$Map$animateArtGame = F3( function (timeDiff, window, artGame) { var newTime = artGame.time + timeDiff; - var _p28 = (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Map$colorSwapTime) > 0) ? { + var _p27 = (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Map$colorSwapTime) > 0) ? { ctor: '_Tuple2', _0: A2(_user$project$Map$randomColor, artGame.seed, artGame.balls), _1: 0 @@ -12276,9 +12241,9 @@ var _user$project$Map$animateArtGame = F3( _0: {ctor: '_Tuple2', _0: artGame.color, _1: artGame.seed}, _1: newTime }; - var newColor = _p28._0._0; - var newSeed = _p28._0._1; - var timeReset = _p28._1; + var newColor = _p27._0._0; + var newSeed = _p27._0._1; + var timeReset = _p27._1; return _elm_lang$core$Native_Utils.update( artGame, { @@ -12396,17 +12361,17 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( }); var _user$project$Map$randomImage = function (color) { var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Map$images); - var _p29 = options; - if (_p29.ctor === 'Nothing') { + var _p28 = options; + if (_p28.ctor === 'Nothing') { return _user$project$Map$alwaysGen(''); } else { - if (_p29._0.ctor === '[]') { + if (_p28._0.ctor === '[]') { return _user$project$Map$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Map$randItem(_p29._0)); + _user$project$Map$randItem(_p28._0)); } } }; @@ -12424,48 +12389,34 @@ var _user$project$Map$randomMovingBall = F2( }, _user$project$Map$colorGen); }); -var _user$project$Map$initialBalls = F2( - function (window, seed) { - return A3( - _elm_lang$core$List$foldr, - F2( - function (id, _p30) { - var _p31 = _p30; - return A2( - _elm_lang$core$Tuple$mapFirst, - function (ball) { - return {ctor: '::', _0: ball, _1: _p31._0}; - }, - A2( - _elm_lang$core$Random$step, - A2(_user$project$Map$randomMovingBall, window, id), - _p31._1)); - }), - { - ctor: '_Tuple2', - _0: {ctor: '[]'}, - _1: seed - }, - A2(_elm_lang$core$List$range, 0, 9)); - }); +var _user$project$Map$initialBalls = function (window) { + return _elm_community$random_extra$Random_Extra$combine( + A2( + _elm_lang$core$List$map, + _user$project$Map$randomMovingBall(window), + A2(_elm_lang$core$List$range, 0, 9))); +}; var _user$project$Map$initArtGame = F2( function (window, seed) { - var _p32 = A2(_user$project$Map$initialBalls, window, seed); - var balls = _p32._0; - var newSeed = _p32._1; + var _p29 = A2( + _elm_lang$core$Random$step, + _user$project$Map$initialBalls(window), + seed); + var balls = _p29._0; + var newSeed = _p29._1; return { ctor: '_Tuple2', - _0: {time: 0, seed: newSeed, color: _user$project$Map$Yellow, balls: balls}, + _0: {time: 0, seed: newSeed, color: _user$project$Map$Yellow, balls: balls, win: false}, _1: newSeed }; }); var _user$project$Map$init = F2( function (window, level) { - var _p33 = A2( + var _p30 = A2( _user$project$Map$initArtGame, window, _elm_lang$core$Random$initialSeed(0)); - var artGame = _p33._0; + var artGame = _p30._0; return { level: level, artGame: artGame, @@ -12474,20 +12425,55 @@ var _user$project$Map$init = F2( seed: _elm_lang$core$Random$initialSeed(0) }; }); -var _user$project$Map$newLevel = F2( - function (level, map) { - var _p34 = level; - if ((_p34.ctor === 'ArtStore') && (_p34._0 === true)) { - var _p35 = A2(_user$project$Map$initArtGame, map.window, map.seed); - var artGame = _p35._0; - var seed = _p35._1; - return _elm_lang$core$Native_Utils.update( - map, - {artGame: artGame, seed: seed, level: level}); - } else { - return _elm_lang$core$Native_Utils.update( - map, - {level: level}); +var _user$project$Map$update = F2( + function (msg, map) { + var _p31 = msg; + switch (_p31.ctor) { + case 'NewLevel': + var _p34 = _p31._0; + var _p32 = function () { + var _p33 = _p34; + if ((_p33.ctor === 'ArtStore') && (_p33._0 === true)) { + return A2(_user$project$Map$initArtGame, map.window, map.seed); + } else { + return {ctor: '_Tuple2', _0: map.artGame, _1: map.seed}; + } + }(); + var artGame = _p32._0; + var newSeed = _p32._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: _p34, artGame: artGame, seed: newSeed}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'PlayAudio': + return { + ctor: '_Tuple2', + _0: map, + _1: _user$project$Audio$play(_p31._0) + }; + default: + if (_elm_lang$core$Native_Utils.eq(_p31._1, _p31._2)) { + var artGame = map.artGame; + var newBalls = A2(_user$project$Map$removeBall, _p31._0, artGame.balls); + var win = _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length(newBalls), + 0); + var newArtGame = _elm_lang$core$Native_Utils.update( + artGame, + {balls: newBalls, win: win}); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {points: map.points + 10, artGame: newArtGame}), + _1: _user$project$Audio$play('audio/puff.mp3') + }; + } else { + return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + } } }); var _user$project$Map$ColorClicked = F3( @@ -12595,8 +12581,8 @@ var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Map$groceryItem = F3( - function (_p36, image, audio) { - var _p37 = _p36; + function (_p35, image, audio) { + var _p36 = _p35; return A2( _elm_lang$html$Html$img, { @@ -12621,7 +12607,7 @@ var _user$project$Map$groceryItem = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._0), + _elm_lang$core$Basics$toString(_p36._0), 'px') }, _1: { @@ -12631,7 +12617,7 @@ var _user$project$Map$groceryItem = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._1), + _elm_lang$core$Basics$toString(_p36._1), 'px') }, _1: {ctor: '[]'} @@ -12651,8 +12637,8 @@ var _user$project$Map$groceryItem = F3( {ctor: '[]'}); }); var _user$project$Map$colorCircle = F3( - function (_p38, color, audio) { - var _p39 = _p38; + function (_p37, color, audio) { + var _p38 = _p37; return A2( _elm_lang$html$Html$div, { @@ -12677,7 +12663,7 @@ var _user$project$Map$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._0), + _elm_lang$core$Basics$toString(_p38._0), 'px') }, _1: { @@ -12687,7 +12673,7 @@ var _user$project$Map$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._1), + _elm_lang$core$Basics$toString(_p38._1), 'px') }, _1: { @@ -12717,8 +12703,8 @@ var _user$project$Map$colorCircle = F3( var _user$project$Map$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; -var _user$project$Map$house = function (_p40) { - var _p41 = _p40; +var _user$project$Map$house = function (_p39) { + var _p40 = _p39; return A2( _elm_lang$html$Html$img, { @@ -12747,7 +12733,7 @@ var _user$project$Map$house = function (_p40) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41._0), + _elm_lang$core$Basics$toString(_p40._0), 'px') }, _1: { @@ -12757,7 +12743,7 @@ var _user$project$Map$house = function (_p40) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41._1), + _elm_lang$core$Basics$toString(_p40._1), 'px') }, _1: {ctor: '[]'} @@ -12772,10 +12758,10 @@ var _user$project$Map$house = function (_p40) { }, {ctor: '[]'}); }; -var _user$project$Map$storeBuilding = function (_p42) { - var _p43 = _p42; - var _p45 = _p43._1; - var _p44 = _p43._0; +var _user$project$Map$storeBuilding = function (_p41) { + var _p42 = _p41; + var _p44 = _p42._1; + var _p43 = _p42._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -12809,7 +12795,7 @@ var _user$project$Map$storeBuilding = function (_p42) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p44), + _elm_lang$core$Basics$toString(_p43), 'px') }, _1: { @@ -12819,7 +12805,7 @@ var _user$project$Map$storeBuilding = function (_p42) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45), + _elm_lang$core$Basics$toString(_p44), 'px') }, _1: {ctor: '[]'} @@ -12865,7 +12851,7 @@ var _user$project$Map$storeBuilding = function (_p42) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p44 + 7), + _elm_lang$core$Basics$toString(_p43 + 7), 'px') }, _1: { @@ -12875,7 +12861,7 @@ var _user$project$Map$storeBuilding = function (_p42) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45 + 10), + _elm_lang$core$Basics$toString(_p44 + 10), 'px') }, _1: {ctor: '[]'} @@ -12898,10 +12884,10 @@ var _user$project$Map$storeBuilding = function (_p42) { } }); }; -var _user$project$Map$artStoreBuilding = function (_p46) { - var _p47 = _p46; - var _p49 = _p47._1; - var _p48 = _p47._0; +var _user$project$Map$artStoreBuilding = function (_p45) { + var _p46 = _p45; + var _p48 = _p46._1; + var _p47 = _p46._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -12936,7 +12922,7 @@ var _user$project$Map$artStoreBuilding = function (_p46) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p48), + _elm_lang$core$Basics$toString(_p47), 'px') }, _1: { @@ -12946,7 +12932,7 @@ var _user$project$Map$artStoreBuilding = function (_p46) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p49), + _elm_lang$core$Basics$toString(_p48), 'px') }, _1: {ctor: '[]'} @@ -12992,7 +12978,7 @@ var _user$project$Map$artStoreBuilding = function (_p46) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p48 + 7), + _elm_lang$core$Basics$toString(_p47 + 7), 'px') }, _1: { @@ -13002,7 +12988,7 @@ var _user$project$Map$artStoreBuilding = function (_p46) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p49 + 10), + _elm_lang$core$Basics$toString(_p48 + 10), 'px') }, _1: {ctor: '[]'} @@ -13047,8 +13033,8 @@ var _user$project$Map$hometown = function (mapSize) { }); }; var _user$project$Map$playButton = F2( - function (_p50, level) { - var _p51 = _p50; + function (_p49, level) { + var _p50 = _p49; return A2( _elm_lang$html$Html$button, { @@ -13067,7 +13053,7 @@ var _user$project$Map$playButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p51._0), + _elm_lang$core$Basics$toString(_p50._0), 'px') }, _1: { @@ -13077,7 +13063,7 @@ var _user$project$Map$playButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p51._1), + _elm_lang$core$Basics$toString(_p50._1), 'px') }, _1: { @@ -13107,8 +13093,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p52, level) { - var _p53 = _p52; + function (_p51, level) { + var _p52 = _p51; return A2( _elm_lang$html$Html$button, { @@ -13127,7 +13113,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p53._0), + _elm_lang$core$Basics$toString(_p52._0), 'px') }, _1: { @@ -13137,7 +13123,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p53._1), + _elm_lang$core$Basics$toString(_p52._1), 'px') }, _1: { @@ -13168,6 +13154,21 @@ var _user$project$Map$backButton = F2( }); var _user$project$Map$colorGame = F2( function (pointCount, artGame) { + var content = artGame.win ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('You Win!!!!!!'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } : A2( + _elm_lang$core$List$map, + _user$project$Map$colorBall(artGame.color), + artGame.balls); return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -13188,15 +13189,12 @@ var _user$project$Map$colorGame = F2( _elm_lang$core$Basics$toString(artGame.color))), _1: { ctor: '::', - _0: _user$project$Map$points(pointCount), + _0: _user$project$Map$viewPoints(pointCount), _1: {ctor: '[]'} } } }, - A2( - _elm_lang$core$List$map, - _user$project$Map$colorBall(artGame.color), - artGame.balls))); + content)); }); var _user$project$Map$exit = function (level) { return A2( @@ -13288,18 +13286,18 @@ var _user$project$Map$groceryStore = function (mapSize) { }; var _user$project$Map$artStore = F2( function (play, map) { - var _p54 = play; - if (_p54 === true) { + var _p53 = play; + if (_p53 === true) { return A2(_user$project$Map$colorGame, map.points, map.artGame); } else { var showCircle = F2( - function (n, _p55) { - var _p56 = _p55; + function (n, _p54) { + var _p55 = _p54; return A3( _user$project$Map$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p56._0, - _p56._1); + _p55._0, + _p55._1); }); return A2( _elm_lang$html$Html$div, @@ -13315,7 +13313,7 @@ var _user$project$Map$artStore = F2( _user$project$Map$ArtStore(true)), _1: { ctor: '::', - _0: _user$project$Map$points(map.points), + _0: _user$project$Map$viewPoints(map.points), _1: A2( _elm_lang$core$List$indexedMap, showCircle, @@ -13347,8 +13345,8 @@ var _user$project$Map$artStore = F2( }); var _user$project$Map$view = F2( function (mapSize, map) { - var _p57 = map.level; - switch (_p57.ctor) { + var _p56 = map.level; + switch (_p56.ctor) { case 'Home': return _user$project$Map$home(mapSize); case 'HomeTown': @@ -13356,7 +13354,7 @@ var _user$project$Map$view = F2( case 'GroceryStore': return _user$project$Map$groceryStore(mapSize); default: - return A2(_user$project$Map$artStore, _p57._0, map); + return A2(_user$project$Map$artStore, _p56._0, map); } }); From f0a2d46d84a8ddff7697e197ea1fddc1a5b3977e Mon Sep 17 00:00:00 2001 From: trotha01 Date: Fri, 26 May 2017 18:50:15 -0700 Subject: [PATCH 19/33] mousedown, not onclick --- Map.elm | 12 ++++++++---- elm.js | 7 ++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Map.elm b/Map.elm index 84876fb..f5a5eb0 100644 --- a/Map.elm +++ b/Map.elm @@ -6,7 +6,7 @@ import Dict exposing (Dict) import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) -import Html.Events exposing (onClick) +import Html.Events exposing (onClick, onMouseDown) import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Random import Random.Extra @@ -459,6 +459,10 @@ initBottomWall windowWidth windowHeight = } +slowdown = + 1 / 10 + + animateBall : Time -> Window.Size -> MovingBall -> MovingBall animateBall timeDiff window ball = let @@ -484,11 +488,11 @@ animateBall timeDiff window ball = getY ball.pos newX = - (x + getX ball.velocity * timeDiff) + (x + getX ball.velocity * timeDiff * slowdown) |> clamp (getX leftWall.pos) (getX rightWall.pos) newY = - (y + getY ball.velocity * timeDiff) + (y + getY ball.velocity * timeDiff * slowdown) |> clamp (getY topWall.pos) (getY bottomWall.pos) newXVelocity = @@ -818,7 +822,7 @@ colorBall gameColor ball = , ( "width", toString (ball.radius * 2) ++ "px" ) , ( "height", toString (ball.radius * 2) ++ "px" ) ] - , onClick (ColorClicked ball.id gameColor ball.color) + , onMouseDown (ColorClicked ball.id gameColor ball.color) ] [] diff --git a/elm.js b/elm.js index aa96be8..14a5232 100644 --- a/elm.js +++ b/elm.js @@ -11811,6 +11811,7 @@ var _user$project$Map$viewPoints = function (count) { _1: {ctor: '[]'} }); }; +var _user$project$Map$slowdown = 1 / 10; var _user$project$Map$initBottomWall = F2( function (windowWidth, windowHeight) { return { @@ -12149,12 +12150,12 @@ var _user$project$Map$animateBall = F3( _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos), _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos), - x + (_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff)); + x + ((_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff) * _user$project$Map$slowdown)); var newY = A3( _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos), _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos), - y + (_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff)); + y + ((_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff) * _user$project$Map$slowdown)); var newXVelocity = (_elm_lang$core$Native_Utils.eq( newX, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos)) || _elm_lang$core$Native_Utils.eq( @@ -12570,7 +12571,7 @@ var _user$project$Map$colorBall = F2( }), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( + _0: _elm_lang$html$Html_Events$onMouseDown( A3(_user$project$Map$ColorClicked, ball.id, gameColor, ball.color)), _1: {ctor: '[]'} } From 0809df26263127a8fcef4b47e4f6e1a5ffbf392a Mon Sep 17 00:00:00 2001 From: trotha01 Date: Fri, 26 May 2017 18:53:48 -0700 Subject: [PATCH 20/33] do not allow 0 velocity --- Map.elm | 19 ++++++++++++++++--- elm.js | 16 ++++++++-------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/Map.elm b/Map.elm index f5a5eb0..e8cc70b 100644 --- a/Map.elm +++ b/Map.elm @@ -190,8 +190,21 @@ randomPosition window = randomVelocity : Random.Generator ( Float, Float ) randomVelocity = Random.pair - (Random.map toFloat (Random.int -1 1)) - (Random.map toFloat (Random.int -1 1)) + nonZeroFloat + nonZeroFloat + + +nonZeroFloat : Random.Generator Float +nonZeroFloat = + Random.int -1 1 + |> Random.map + (\i -> + if i == 0 then + 1 + else + i + ) + |> Random.map toFloat randomMovingBall : Window.Size -> Int -> Random.Generator MovingBall @@ -220,7 +233,7 @@ initMovingBall id color ( x, y ) ( vx, vy ) image = , color = color , radius = 32 , pos = vec2 x y - , velocity = vec2 0 0 + , velocity = vec2 vx vy , img = image } diff --git a/elm.js b/elm.js index 14a5232..caf4f9c 100644 --- a/elm.js +++ b/elm.js @@ -11892,20 +11892,20 @@ var _user$project$Map$initMovingBall = F5( color: color, radius: 32, pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p7._0, _p7._1), - velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, 0), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), img: image }; }); -var _user$project$Map$randomVelocity = A2( - _elm_lang$core$Random$pair, - A2( - _elm_lang$core$Random$map, - _elm_lang$core$Basics$toFloat, - A2(_elm_lang$core$Random$int, -1, 1)), +var _user$project$Map$nonZeroFloat = A2( + _elm_lang$core$Random$map, + _elm_lang$core$Basics$toFloat, A2( _elm_lang$core$Random$map, - _elm_lang$core$Basics$toFloat, + function (i) { + return _elm_lang$core$Native_Utils.eq(i, 0) ? 1 : i; + }, A2(_elm_lang$core$Random$int, -1, 1))); +var _user$project$Map$randomVelocity = A2(_elm_lang$core$Random$pair, _user$project$Map$nonZeroFloat, _user$project$Map$nonZeroFloat); var _user$project$Map$randomPosition = function (window) { return A2( _elm_lang$core$Random$pair, From 6402488d195d9d83a616cae635240b9dd74b7462 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Fri, 26 May 2017 19:24:14 -0700 Subject: [PATCH 21/33] using spanish dict. play sound on color change --- Main.elm | 8 +- Map.elm | 45 ++++-- dictionary/Spanish.elm | 50 ++++++ elm.js | 353 ++++++++++++++++++++++++++++------------- 4 files changed, 331 insertions(+), 125 deletions(-) create mode 100644 dictionary/Spanish.elm diff --git a/Main.elm b/Main.elm index c813133..d819938 100644 --- a/Main.elm +++ b/Main.elm @@ -95,12 +95,16 @@ update msg model = ) Tick timeDelta -> + let + ( newMap, cmd ) = + Map.tick timeDelta model.map + in ( { model | user = model.user |> Bee.animate model.time - , map = Map.tick timeDelta model.map + , map = newMap , time = model.time + timeDelta } - , Cmd.none + , cmd |> Cmd.map MapMsg ) MapMsg msg -> diff --git a/Map.elm b/Map.elm index e8cc70b..d34a411 100644 --- a/Map.elm +++ b/Map.elm @@ -3,6 +3,7 @@ module Map exposing (..) import Audio import Bee exposing (Bee) import Dict exposing (Dict) +import Dictionary.Spanish as Spanish import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) @@ -301,11 +302,17 @@ resize window map = { map | window = window } -tick : Time -> Map -> Map +tick : Time -> Map -> ( Map, Cmd Msg ) tick timeDelta map = - { map - | artGame = animateArtGame timeDelta map.window map.artGame - } + let + ( newArtGame, cmd ) = + animateArtGame timeDelta map.window map.artGame + in + ( { map + | artGame = newArtGame + } + , cmd + ) {-| This is the number of milliseconds we wait @@ -316,19 +323,23 @@ colorSwapTime = 2000 -animateArtGame : Time -> Window.Size -> ArtGame -> ArtGame +animateArtGame : Time -> Window.Size -> ArtGame -> ( ArtGame, Cmd Msg ) animateArtGame timeDiff window artGame = let newTime = artGame.time + timeDiff - ( ( newColor, newSeed ), timeReset ) = + ( ( newColor, newSeed ), timeReset, cmd ) = if newTime > colorSwapTime then - ( randomColor artGame.seed artGame.balls, 0 ) + let + ( randColor, seed ) = + randomColor artGame.seed artGame.balls + in + ( ( randColor, seed ), 0, Audio.play (Spanish.audio <| toString randColor) ) else - ( ( artGame.color, artGame.seed ), newTime ) + ( ( artGame.color, artGame.seed ), newTime, Cmd.none ) in - { artGame + ( { artGame | time = timeReset , color = newColor , seed = newSeed @@ -336,7 +347,9 @@ animateArtGame timeDiff window artGame = artGame.balls |> List.map (animateBall timeDiff window) |> collisions - } + } + , cmd + ) collisions : List MovingBall -> List MovingBall @@ -767,11 +780,11 @@ artStore play map = :: playButton ( 192, 10 ) (ArtStore True) :: viewPoints map.points :: List.indexedMap showCircle - [ ( "black", "audio/negro.m4a" ) - , ( "white", "audio/blanco.m4a" ) - , ( "red", "audio/rojo.m4a" ) - , ( "blue", "audio/azul.m4a" ) - , ( "yellow", "audio/amarillo.m4a" ) + [ ( "black", Spanish.audio "black" ) + , ( "white", Spanish.audio "white" ) + , ( "red", Spanish.audio "red" ) + , ( "blue", Spanish.audio "blue" ) + , ( "yellow", Spanish.audio "yellow" ) ] @@ -811,7 +824,7 @@ colorGame pointCount artGame = in div [] ([ backButton ( 130, 0 ) (ArtStore False) - , text ("Color: " ++ toString artGame.color) + , text ("Color: " ++ Spanish.translate (toString artGame.color)) , viewPoints pointCount ] ++ content diff --git a/dictionary/Spanish.elm b/dictionary/Spanish.elm new file mode 100644 index 0000000..ea1fb5f --- /dev/null +++ b/dictionary/Spanish.elm @@ -0,0 +1,50 @@ +module Dictionary.Spanish exposing (..) + +import Dict exposing (Dict) + + +type alias Word = + ( String, Audio ) + + +type alias Audio = + String + + +dictionary : Dict String Word +dictionary = + Dict.fromList + [ ( "red", ( "rojo", "audio/rojo.m4a" ) ) + , ( "orange", ( "naranja", "" ) ) + , ( "yellow", ( "amarillo", "audio/amarillo.m4a" ) ) + , ( "green", ( "verde", "" ) ) + , ( "blue", ( "azul", "audio/azul.m4a" ) ) + , ( "purple", ( "púrpura", "" ) ) + , ( "black", ( "negro", "audio/negro.m4a" ) ) + , ( "white", ( "blanco", "audio/blanco.m4a" ) ) + ] + + +wordToString : Word -> String +wordToString ( str, audio ) = + str + + +wordAudio ( str, audio ) = + audio + + +findWord : String -> Word +findWord original = + Dict.get (String.toLower original) dictionary + |> Maybe.withDefault ( original, "" ) + + +translate : String -> String +translate word = + findWord word |> wordToString + + +audio : String -> String +audio word = + findWord word |> wordAudio diff --git a/elm.js b/elm.js index caf4f9c..233e341 100644 --- a/elm.js +++ b/elm.js @@ -11733,6 +11733,98 @@ var _user$project$Bee$Position = F2( return {x: a, y: b}; }); +var _user$project$Dictionary_Spanish$wordAudio = function (_p0) { + var _p1 = _p0; + return _p1._1; +}; +var _user$project$Dictionary_Spanish$wordToString = function (_p2) { + var _p3 = _p2; + return _p3._0; +}; +var _user$project$Dictionary_Spanish$dictionary = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'red', + _1: {ctor: '_Tuple2', _0: 'rojo', _1: 'audio/rojo.m4a'} + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'orange', + _1: {ctor: '_Tuple2', _0: 'naranja', _1: ''} + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'yellow', + _1: {ctor: '_Tuple2', _0: 'amarillo', _1: 'audio/amarillo.m4a'} + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'green', + _1: {ctor: '_Tuple2', _0: 'verde', _1: ''} + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'blue', + _1: {ctor: '_Tuple2', _0: 'azul', _1: 'audio/azul.m4a'} + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'purple', + _1: {ctor: '_Tuple2', _0: 'púrpura', _1: ''} + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'black', + _1: {ctor: '_Tuple2', _0: 'negro', _1: 'audio/negro.m4a'} + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'white', + _1: {ctor: '_Tuple2', _0: 'blanco', _1: 'audio/blanco.m4a'} + }, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }); +var _user$project$Dictionary_Spanish$findWord = function (original) { + return A2( + _elm_lang$core$Maybe$withDefault, + {ctor: '_Tuple2', _0: original, _1: ''}, + A2( + _elm_lang$core$Dict$get, + _elm_lang$core$String$toLower(original), + _user$project$Dictionary_Spanish$dictionary)); +}; +var _user$project$Dictionary_Spanish$translate = function (word) { + return _user$project$Dictionary_Spanish$wordToString( + _user$project$Dictionary_Spanish$findWord(word)); +}; +var _user$project$Dictionary_Spanish$audio = function (word) { + return _user$project$Dictionary_Spanish$wordAudio( + _user$project$Dictionary_Spanish$findWord(word)); +}; + var _user$project$Map$tile = function (_p0) { var _p1 = _p0; return A2( @@ -12233,38 +12325,61 @@ var _user$project$Map$randomColor = F2( var _user$project$Map$animateArtGame = F3( function (timeDiff, window, artGame) { var newTime = artGame.time + timeDiff; - var _p27 = (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Map$colorSwapTime) > 0) ? { - ctor: '_Tuple2', - _0: A2(_user$project$Map$randomColor, artGame.seed, artGame.balls), - _1: 0 - } : { - ctor: '_Tuple2', - _0: {ctor: '_Tuple2', _0: artGame.color, _1: artGame.seed}, - _1: newTime - }; + var _p27 = function () { + if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Map$colorSwapTime) > 0) { + var _p28 = A2(_user$project$Map$randomColor, artGame.seed, artGame.balls); + var randColor = _p28._0; + var seed = _p28._1; + return { + ctor: '_Tuple3', + _0: {ctor: '_Tuple2', _0: randColor, _1: seed}, + _1: 0, + _2: _user$project$Audio$play( + _user$project$Dictionary_Spanish$audio( + _elm_lang$core$Basics$toString(randColor))) + }; + } else { + return { + ctor: '_Tuple3', + _0: {ctor: '_Tuple2', _0: artGame.color, _1: artGame.seed}, + _1: newTime, + _2: _elm_lang$core$Platform_Cmd$none + }; + } + }(); var newColor = _p27._0._0; var newSeed = _p27._0._1; var timeReset = _p27._1; - return _elm_lang$core$Native_Utils.update( - artGame, - { - time: timeReset, - color: newColor, - seed: newSeed, - balls: _user$project$Map$collisions( - A2( - _elm_lang$core$List$map, - A2(_user$project$Map$animateBall, timeDiff, window), - artGame.balls)) - }); + var cmd = _p27._2; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + artGame, + { + time: timeReset, + color: newColor, + seed: newSeed, + balls: _user$project$Map$collisions( + A2( + _elm_lang$core$List$map, + A2(_user$project$Map$animateBall, timeDiff, window), + artGame.balls)) + }), + _1: cmd + }; }); var _user$project$Map$tick = F2( function (timeDelta, map) { - return _elm_lang$core$Native_Utils.update( - map, - { - artGame: A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame) - }); + var _p29 = A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame); + var newArtGame = _p29._0; + var cmd = _p29._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {artGame: newArtGame}), + _1: cmd + }; }); var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( { @@ -12362,17 +12477,17 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( }); var _user$project$Map$randomImage = function (color) { var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Map$images); - var _p28 = options; - if (_p28.ctor === 'Nothing') { + var _p30 = options; + if (_p30.ctor === 'Nothing') { return _user$project$Map$alwaysGen(''); } else { - if (_p28._0.ctor === '[]') { + if (_p30._0.ctor === '[]') { return _user$project$Map$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Map$randItem(_p28._0)); + _user$project$Map$randItem(_p30._0)); } } }; @@ -12399,12 +12514,12 @@ var _user$project$Map$initialBalls = function (window) { }; var _user$project$Map$initArtGame = F2( function (window, seed) { - var _p29 = A2( + var _p31 = A2( _elm_lang$core$Random$step, _user$project$Map$initialBalls(window), seed); - var balls = _p29._0; - var newSeed = _p29._1; + var balls = _p31._0; + var newSeed = _p31._1; return { ctor: '_Tuple2', _0: {time: 0, seed: newSeed, color: _user$project$Map$Yellow, balls: balls, win: false}, @@ -12413,11 +12528,11 @@ var _user$project$Map$initArtGame = F2( }); var _user$project$Map$init = F2( function (window, level) { - var _p30 = A2( + var _p32 = A2( _user$project$Map$initArtGame, window, _elm_lang$core$Random$initialSeed(0)); - var artGame = _p30._0; + var artGame = _p32._0; return { level: level, artGame: artGame, @@ -12428,37 +12543,37 @@ var _user$project$Map$init = F2( }); var _user$project$Map$update = F2( function (msg, map) { - var _p31 = msg; - switch (_p31.ctor) { + var _p33 = msg; + switch (_p33.ctor) { case 'NewLevel': - var _p34 = _p31._0; - var _p32 = function () { - var _p33 = _p34; - if ((_p33.ctor === 'ArtStore') && (_p33._0 === true)) { + var _p36 = _p33._0; + var _p34 = function () { + var _p35 = _p36; + if ((_p35.ctor === 'ArtStore') && (_p35._0 === true)) { return A2(_user$project$Map$initArtGame, map.window, map.seed); } else { return {ctor: '_Tuple2', _0: map.artGame, _1: map.seed}; } }(); - var artGame = _p32._0; - var newSeed = _p32._1; + var artGame = _p34._0; + var newSeed = _p34._1; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( map, - {level: _p34, artGame: artGame, seed: newSeed}), + {level: _p36, artGame: artGame, seed: newSeed}), _1: _elm_lang$core$Platform_Cmd$none }; case 'PlayAudio': return { ctor: '_Tuple2', _0: map, - _1: _user$project$Audio$play(_p31._0) + _1: _user$project$Audio$play(_p33._0) }; default: - if (_elm_lang$core$Native_Utils.eq(_p31._1, _p31._2)) { + if (_elm_lang$core$Native_Utils.eq(_p33._1, _p33._2)) { var artGame = map.artGame; - var newBalls = A2(_user$project$Map$removeBall, _p31._0, artGame.balls); + var newBalls = A2(_user$project$Map$removeBall, _p33._0, artGame.balls); var win = _elm_lang$core$Native_Utils.eq( _elm_lang$core$List$length(newBalls), 0); @@ -12582,8 +12697,8 @@ var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Map$groceryItem = F3( - function (_p35, image, audio) { - var _p36 = _p35; + function (_p37, image, audio) { + var _p38 = _p37; return A2( _elm_lang$html$Html$img, { @@ -12608,7 +12723,7 @@ var _user$project$Map$groceryItem = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36._0), + _elm_lang$core$Basics$toString(_p38._0), 'px') }, _1: { @@ -12618,7 +12733,7 @@ var _user$project$Map$groceryItem = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36._1), + _elm_lang$core$Basics$toString(_p38._1), 'px') }, _1: {ctor: '[]'} @@ -12638,8 +12753,8 @@ var _user$project$Map$groceryItem = F3( {ctor: '[]'}); }); var _user$project$Map$colorCircle = F3( - function (_p37, color, audio) { - var _p38 = _p37; + function (_p39, color, audio) { + var _p40 = _p39; return A2( _elm_lang$html$Html$div, { @@ -12664,7 +12779,7 @@ var _user$project$Map$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._0), + _elm_lang$core$Basics$toString(_p40._0), 'px') }, _1: { @@ -12674,7 +12789,7 @@ var _user$project$Map$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._1), + _elm_lang$core$Basics$toString(_p40._1), 'px') }, _1: { @@ -12704,8 +12819,8 @@ var _user$project$Map$colorCircle = F3( var _user$project$Map$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; -var _user$project$Map$house = function (_p39) { - var _p40 = _p39; +var _user$project$Map$house = function (_p41) { + var _p42 = _p41; return A2( _elm_lang$html$Html$img, { @@ -12734,7 +12849,7 @@ var _user$project$Map$house = function (_p39) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p40._0), + _elm_lang$core$Basics$toString(_p42._0), 'px') }, _1: { @@ -12744,7 +12859,7 @@ var _user$project$Map$house = function (_p39) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p40._1), + _elm_lang$core$Basics$toString(_p42._1), 'px') }, _1: {ctor: '[]'} @@ -12759,10 +12874,10 @@ var _user$project$Map$house = function (_p39) { }, {ctor: '[]'}); }; -var _user$project$Map$storeBuilding = function (_p41) { - var _p42 = _p41; - var _p44 = _p42._1; - var _p43 = _p42._0; +var _user$project$Map$storeBuilding = function (_p43) { + var _p44 = _p43; + var _p46 = _p44._1; + var _p45 = _p44._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -12796,7 +12911,7 @@ var _user$project$Map$storeBuilding = function (_p41) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p43), + _elm_lang$core$Basics$toString(_p45), 'px') }, _1: { @@ -12806,7 +12921,7 @@ var _user$project$Map$storeBuilding = function (_p41) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p44), + _elm_lang$core$Basics$toString(_p46), 'px') }, _1: {ctor: '[]'} @@ -12852,7 +12967,7 @@ var _user$project$Map$storeBuilding = function (_p41) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p43 + 7), + _elm_lang$core$Basics$toString(_p45 + 7), 'px') }, _1: { @@ -12862,7 +12977,7 @@ var _user$project$Map$storeBuilding = function (_p41) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p44 + 10), + _elm_lang$core$Basics$toString(_p46 + 10), 'px') }, _1: {ctor: '[]'} @@ -12885,10 +13000,10 @@ var _user$project$Map$storeBuilding = function (_p41) { } }); }; -var _user$project$Map$artStoreBuilding = function (_p45) { - var _p46 = _p45; - var _p48 = _p46._1; - var _p47 = _p46._0; +var _user$project$Map$artStoreBuilding = function (_p47) { + var _p48 = _p47; + var _p50 = _p48._1; + var _p49 = _p48._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -12923,7 +13038,7 @@ var _user$project$Map$artStoreBuilding = function (_p45) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p47), + _elm_lang$core$Basics$toString(_p49), 'px') }, _1: { @@ -12933,7 +13048,7 @@ var _user$project$Map$artStoreBuilding = function (_p45) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p48), + _elm_lang$core$Basics$toString(_p50), 'px') }, _1: {ctor: '[]'} @@ -12979,7 +13094,7 @@ var _user$project$Map$artStoreBuilding = function (_p45) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p47 + 7), + _elm_lang$core$Basics$toString(_p49 + 7), 'px') }, _1: { @@ -12989,7 +13104,7 @@ var _user$project$Map$artStoreBuilding = function (_p45) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p48 + 10), + _elm_lang$core$Basics$toString(_p50 + 10), 'px') }, _1: {ctor: '[]'} @@ -13034,8 +13149,8 @@ var _user$project$Map$hometown = function (mapSize) { }); }; var _user$project$Map$playButton = F2( - function (_p49, level) { - var _p50 = _p49; + function (_p51, level) { + var _p52 = _p51; return A2( _elm_lang$html$Html$button, { @@ -13054,7 +13169,7 @@ var _user$project$Map$playButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p50._0), + _elm_lang$core$Basics$toString(_p52._0), 'px') }, _1: { @@ -13064,7 +13179,7 @@ var _user$project$Map$playButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p50._1), + _elm_lang$core$Basics$toString(_p52._1), 'px') }, _1: { @@ -13094,8 +13209,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p51, level) { - var _p52 = _p51; + function (_p53, level) { + var _p54 = _p53; return A2( _elm_lang$html$Html$button, { @@ -13114,7 +13229,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p52._0), + _elm_lang$core$Basics$toString(_p54._0), 'px') }, _1: { @@ -13124,7 +13239,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p52._1), + _elm_lang$core$Basics$toString(_p54._1), 'px') }, _1: { @@ -13187,7 +13302,8 @@ var _user$project$Map$colorGame = F2( A2( _elm_lang$core$Basics_ops['++'], 'Color: ', - _elm_lang$core$Basics$toString(artGame.color))), + _user$project$Dictionary_Spanish$translate( + _elm_lang$core$Basics$toString(artGame.color)))), _1: { ctor: '::', _0: _user$project$Map$viewPoints(pointCount), @@ -13287,18 +13403,18 @@ var _user$project$Map$groceryStore = function (mapSize) { }; var _user$project$Map$artStore = F2( function (play, map) { - var _p53 = play; - if (_p53 === true) { + var _p55 = play; + if (_p55 === true) { return A2(_user$project$Map$colorGame, map.points, map.artGame); } else { var showCircle = F2( - function (n, _p54) { - var _p55 = _p54; + function (n, _p56) { + var _p57 = _p56; return A3( _user$project$Map$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p55._0, - _p55._1); + _p57._0, + _p57._1); }); return A2( _elm_lang$html$Html$div, @@ -13320,19 +13436,39 @@ var _user$project$Map$artStore = F2( showCircle, { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'black', _1: 'audio/negro.m4a'}, + _0: { + ctor: '_Tuple2', + _0: 'black', + _1: _user$project$Dictionary_Spanish$audio('black') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'white', _1: 'audio/blanco.m4a'}, + _0: { + ctor: '_Tuple2', + _0: 'white', + _1: _user$project$Dictionary_Spanish$audio('white') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'red', _1: 'audio/rojo.m4a'}, + _0: { + ctor: '_Tuple2', + _0: 'red', + _1: _user$project$Dictionary_Spanish$audio('red') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'blue', _1: 'audio/azul.m4a'}, + _0: { + ctor: '_Tuple2', + _0: 'blue', + _1: _user$project$Dictionary_Spanish$audio('blue') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'yellow', _1: 'audio/amarillo.m4a'}, + _0: { + ctor: '_Tuple2', + _0: 'yellow', + _1: _user$project$Dictionary_Spanish$audio('yellow') + }, _1: {ctor: '[]'} } } @@ -13346,8 +13482,8 @@ var _user$project$Map$artStore = F2( }); var _user$project$Map$view = F2( function (mapSize, map) { - var _p56 = map.level; - switch (_p56.ctor) { + var _p58 = map.level; + switch (_p58.ctor) { case 'Home': return _user$project$Map$home(mapSize); case 'HomeTown': @@ -13355,7 +13491,7 @@ var _user$project$Map$view = F2( case 'GroceryStore': return _user$project$Map$groceryStore(mapSize); default: - return A2(_user$project$Map$artStore, _p56._0, map); + return A2(_user$project$Map$artStore, _p58._0, map); } }); @@ -13459,22 +13595,25 @@ var _user$project$Main$update = F2( }; } case 'Tick': - var _p5 = _p0._0; + var _p6 = _p0._0; + var _p5 = A2(_user$project$Map$tick, _p6, model.map); + var newMap = _p5._0; + var cmd = _p5._1; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, { user: A2(_user$project$Bee$animate, model.time, model.user), - map: A2(_user$project$Map$tick, _p5, model.map), - time: model.time + _p5 + map: newMap, + time: model.time + _p6 }), - _1: _elm_lang$core$Platform_Cmd$none + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) }; default: - var _p6 = A2(_user$project$Map$update, _p0._0, model.map); - var newMap = _p6._0; - var cmd = _p6._1; + var _p7 = A2(_user$project$Map$update, _p0._0, model.map); + var newMap = _p7._0; + var cmd = _p7._1; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13530,8 +13669,8 @@ var _user$project$Main$subscriptions = function (model) { if (model.pause) { return _elm_lang$core$Platform_Sub$none; } else { - var _p7 = model.mouse; - if (_p7.ctor === 'Up') { + var _p8 = model.mouse; + if (_p8.ctor === 'Up') { return _elm_lang$core$Platform_Sub$batch( { ctor: '::', From 2877f178a8a5c1cebc6c254f105aff0a792a2d64 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sat, 27 May 2017 18:38:47 -0700 Subject: [PATCH 22/33] refactoring out the stores --- Main.elm | 5 +- Map.elm | 682 ++--------------- elm.js | 1830 ++++++++++++++++++++++++++------------------ store/ArtStore.elm | 727 ++++++++++++++++++ 4 files changed, 1870 insertions(+), 1374 deletions(-) create mode 100644 store/ArtStore.elm diff --git a/Main.elm b/Main.elm index d819938..e3bd31f 100644 --- a/Main.elm +++ b/Main.elm @@ -96,8 +96,11 @@ update msg model = Tick timeDelta -> let + _ = + Debug.log "Main Tick" + ( newMap, cmd ) = - Map.tick timeDelta model.map + Map.update (Map.Tick timeDelta) model.map in ( { model | user = model.user |> Bee.animate model.time diff --git a/Map.elm b/Map.elm index d34a411..998ca60 100644 --- a/Map.elm +++ b/Map.elm @@ -12,6 +12,7 @@ import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Random import Random.Extra import Random.List exposing (choose) +import Store.ArtStore as ArtStore import Time exposing (Time) import Window @@ -21,7 +22,6 @@ import Window type alias Map = { level : Level - , artGame : ArtGame , window : Window.Size , points : Int , seed : Random.Seed @@ -30,12 +30,7 @@ type alias Map = init : Window.Size -> Level -> Map init window level = - let - ( artGame, _ ) = - initArtGame window (Random.initialSeed 0) - in { level = level - , artGame = artGame , window = window , points = 0 , seed = Random.initialSeed 0 @@ -46,7 +41,7 @@ type Level = Home | HomeTown | GroceryStore - | ArtStore PlayGame + | ArtStore ArtStore.Model type alias PlayGame = @@ -62,239 +57,69 @@ type Color | Purple -colorGen : Random.Generator Color -colorGen = - randItem [ Red, Orange, Yellow, Green, Blue, Purple ] - |> Random.map (Maybe.withDefault Red) - - -type alias ArtGame = - { color : Color - , balls : List MovingBall - , time : Time - , seed : Random.Seed - , win : Bool - } - - -type alias MovingBall = - { id : Int - , color : Color - , pos : Vec2 - , radius : Float - , velocity : Vec2 - , img : String - } - - - -{- - newLevel : Level -> Map -> Map - newLevel level map = - case level of - ArtStore True -> - let - ( artGame, seed ) = - initArtGame map.window map.seed - in - { map | artGame = artGame, seed = seed, level = level } - - _ -> - { map | level = level } --} - - -initArtGame : Window.Size -> Random.Seed -> ( ArtGame, Random.Seed ) -initArtGame window seed = - let - ( balls, newSeed ) = - Random.step (initialBalls window) seed - in - ( { time = 0 - , seed = newSeed - , color = Yellow - , balls = balls - , win = False - } - , newSeed - ) - - -get : Int -> List a -> Maybe a -get index list = - list - |> List.drop index - |> List.head - - -randItem : List a -> Random.Generator (Maybe a) -randItem list = - Random.int 0 (List.length list - 1) - |> Random.map (\i -> get i list) - - -randomColor : Random.Seed -> List MovingBall -> ( Color, Random.Seed ) -randomColor seed balls = - Random.step (randItem balls) seed - |> Tuple.mapFirst (Maybe.map (\ball -> ball.color)) - |> Tuple.mapFirst (Maybe.withDefault Red) - - -imageDir = - "imgs/colors/" - - -images : EveryDict Color (List String) -images = - EveryDict.fromList - [ ( Red, [ "red-cherry.png", "red-umbrella.png" ] ) - , ( Orange, [ "orange-tangerine.png" ] ) - , ( Yellow, [ "yellow-banana.png", "yellow-car.png", "yellow-cheese.png" ] ) - , ( Green, [ "green-frog.png", "green-turtle.png" ] ) - , ( Blue, [ "blue-bird.png", "blue-fish.png" ] ) - , ( Purple, [ "purple-octopus.png" ] ) - ] - - -alwaysGen : a -> Random.Generator a -alwaysGen x = - Random.map (\_ -> x) Random.bool - - -randomImage : Color -> Random.Generator String -randomImage color = - let - options = - EveryDict.get color images - in - case options of - Nothing -> - -- should never happen - alwaysGen "" - - Just [] -> - -- should never happen - alwaysGen "" - - Just imageList -> - randItem imageList - |> Random.map (Maybe.withDefault "") - - -randomPosition : Window.Size -> Random.Generator ( Float, Float ) -randomPosition window = - Random.pair - (Random.map toFloat (Random.int 30 window.width)) - (Random.map toFloat (Random.int 30 window.height)) - - -randomVelocity : Random.Generator ( Float, Float ) -randomVelocity = - Random.pair - nonZeroFloat - nonZeroFloat - - -nonZeroFloat : Random.Generator Float -nonZeroFloat = - Random.int -1 1 - |> Random.map - (\i -> - if i == 0 then - 1 - else - i - ) - |> Random.map toFloat - - -randomMovingBall : Window.Size -> Int -> Random.Generator MovingBall -randomMovingBall window id = - colorGen - |> Random.andThen - (\color -> - Random.map3 - (initMovingBall id color) - (randomPosition window) - randomVelocity - (randomImage color) - ) - - -initialBalls : Window.Size -> Random.Generator (List MovingBall) -initialBalls window = - List.range 0 9 - |> List.map (randomMovingBall window) - |> Random.Extra.combine - - -initMovingBall : Int -> Color -> ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall -initMovingBall id color ( x, y ) ( vx, vy ) image = - { id = id - , color = color - , radius = 32 - , pos = vec2 x y - , velocity = vec2 vx vy - , img = image - } - - -- UPDATE type Msg - = NewLevel Level + = NewLevel Route | PlayAudio String - | ColorClicked Int Color Color + | ArtStoreMsg ArtStore.Msg + | Tick Time + + +type Route + = HomeRoute + | HomeTownRoute + | GroceryStoreRoute + | ArtStoreRoute update : Msg -> Map -> ( Map, Cmd Msg ) update msg map = - case msg of - NewLevel level -> + case ( map.level, msg ) of + ( _, NewLevel route ) -> let - ( artGame, newSeed ) = - case level of - ArtStore True -> - initArtGame map.window map.seed - - _ -> - ( map.artGame, map.seed ) + level = + case route of + HomeRoute -> + Home + + HomeTownRoute -> + HomeTown + + GroceryStoreRoute -> + GroceryStore + + ArtStoreRoute -> + let + ( store, _ ) = + ArtStore.init map.window map.seed + in + ArtStore store in - ( { map | level = level, artGame = artGame, seed = newSeed }, Cmd.none ) + ( { map | level = level }, Cmd.none ) - PlayAudio file -> + ( _, PlayAudio file ) -> ( map, Audio.play file ) - ColorClicked id gameColor color -> - if gameColor == color then - let - artGame = - map.artGame - - newBalls = - artGame.balls |> removeBall id - - win = - List.length newBalls == 0 - - newArtGame = - { artGame | balls = newBalls, win = win } - in - ( { map - | points = map.points + 10 - , artGame = newArtGame - } - , Audio.play "audio/puff.mp3" - ) - else - ( map, Cmd.none ) + ( _, Tick timeDelta ) -> + let + _ = + Debug.log "Map Tick" + in + tick timeDelta map + ( ArtStore artStore, ArtStoreMsg msg ) -> + let + ( newArtStore, cmd ) = + ArtStore.update map.window msg artStore + in + ( { map | level = ArtStore newArtStore }, Cmd.map ArtStoreMsg cmd ) -removeBall : Int -> List MovingBall -> List MovingBall -removeBall id balls = - List.filter (\ball -> ball.id /= id) balls + ( _, _ ) -> + -- Should not reach here + ( map, Cmd.none ) resize : Window.Size -> Map -> Map @@ -304,306 +129,16 @@ resize window map = tick : Time -> Map -> ( Map, Cmd Msg ) tick timeDelta map = - let - ( newArtGame, cmd ) = - animateArtGame timeDelta map.window map.artGame - in - ( { map - | artGame = newArtGame - } - , cmd - ) - - -{-| This is the number of milliseconds we wait -before changing colors --} -colorSwapTime : Time -colorSwapTime = - 2000 - - -animateArtGame : Time -> Window.Size -> ArtGame -> ( ArtGame, Cmd Msg ) -animateArtGame timeDiff window artGame = - let - newTime = - artGame.time + timeDiff - - ( ( newColor, newSeed ), timeReset, cmd ) = - if newTime > colorSwapTime then - let - ( randColor, seed ) = - randomColor artGame.seed artGame.balls - in - ( ( randColor, seed ), 0, Audio.play (Spanish.audio <| toString randColor) ) - else - ( ( artGame.color, artGame.seed ), newTime, Cmd.none ) - in - ( { artGame - | time = timeReset - , color = newColor - , seed = newSeed - , balls = - artGame.balls - |> List.map (animateBall timeDiff window) - |> collisions - } - , cmd - ) - - -collisions : List MovingBall -> List MovingBall -collisions balls = - collide [] balls - - -collide : List MovingBall -> List MovingBall -> List MovingBall -collide acc bodies = - case bodies of - [] -> - acc - - h :: t -> - case collideWith h t [] of - [] -> - [] - - h1 :: t1 -> - collide (h1 :: acc) t1 - - -collideWith : MovingBall -> List MovingBall -> List MovingBall -> List MovingBall -collideWith a0 bodies acc = - case bodies of - [] -> - a0 :: acc - - b0 :: bs -> + case map.level of + ArtStore store -> let - collisionResult = - collision a0 b0 - - ( a1, b1 ) = - resolveCollision collisionResult a0 b0 + ( newArtStore, cmd ) = + ArtStore.tick timeDelta map.window store in - collideWith a1 bs (b1 :: acc) - - - --- figure out what collision resolution to use - - -collision : MovingBall -> MovingBall -> CollisionResult -collision body0 body1 = - let - b0b1 = - Vec2.sub body1.pos body0.pos - in - collisionBubbleBubble b0b1 body0.radius body1.radius - - - --- calculate collision normal, penetration depth of a collision among bubbles --- takes distance vector b0b1 and the bubble radii as argument - - -collisionBubbleBubble : Vec2 -> Float -> Float -> CollisionResult -collisionBubbleBubble b0b1 radius0 radius1 = - let - radiusb0b1 = - radius0 + radius1 - - distanceSq = - Vec2.lengthSquared b0b1 - - -- simple optimization: doesn't compute sqrt unless necessary - in - if distanceSq == 0 then - CollisionResult (vec2 1 0) radius0 - -- same position, arbitrary normal - else if distanceSq >= radiusb0b1 * radiusb0b1 then - CollisionResult (vec2 1 0) 0 - -- no intersection, arbitrary normal - else - let - d = - sqrt distanceSq - in - CollisionResult (Vec2.scale (1 / d) b0b1) (radiusb0b1 - d) - - -resolveCollision : CollisionResult -> MovingBall -> MovingBall -> ( MovingBall, MovingBall ) -resolveCollision { normal, penetration } b0 b1 = - let - relativeVelocity = - Vec2.sub b1.velocity b0.velocity - - velocityAlongNormal = - Vec2.dot relativeVelocity normal - in - if penetration == 0 || velocityAlongNormal > 0 then - ( b0, b1 ) - -- no collision or velocities separating - else - let - -- impulse scalar - impulse = - normal - - -- impulse vector - in - ( { b0 | velocity = Vec2.sub b0.velocity impulse } - , { b1 | velocity = Vec2.add b1.velocity impulse } - ) + ( { map | level = ArtStore newArtStore }, cmd |> Cmd.map ArtStoreMsg ) - -initLeftWall windowHeight = - { pos = vec2 0 <| windowHeight / 2 - , halfHeight = windowHeight / 2 - , halfWidth = 1 - } - - -initRightWall windowWidth windowHeight = - { pos = vec2 windowWidth (windowHeight / 2) - , halfHeight = windowHeight / 2 - , halfWidth = 1 - } - - -initTopWall windowWidth = - { pos = vec2 (windowWidth / 2) 0 - , halfHeight = 1 - , halfWidth = windowWidth / 2 - } - - -initBottomWall windowWidth windowHeight = - { pos = vec2 (windowWidth / 2) windowHeight - , halfHeight = 1 - , halfWidth = windowWidth / 2 - } - - -slowdown = - 1 / 10 - - -animateBall : Time -> Window.Size -> MovingBall -> MovingBall -animateBall timeDiff window ball = - let - ( width, height ) = - ( toFloat window.width, toFloat window.height ) - - ( leftWall, rightWall, topWall, bottomWall ) = - ( initLeftWall height - , initRightWall width height - , initTopWall width - , initBottomWall width height - ) - - leftCol = - collisionBoxBubble - ( leftWall.pos, vec2 leftWall.halfWidth leftWall.halfHeight ) - ( ball.pos, ball.radius ) - - x = - getX ball.pos - - y = - getY ball.pos - - newX = - (x + getX ball.velocity * timeDiff * slowdown) - |> clamp (getX leftWall.pos) (getX rightWall.pos) - - newY = - (y + getY ball.velocity * timeDiff * slowdown) - |> clamp (getY topWall.pos) (getY bottomWall.pos) - - newXVelocity = - if newX == getX leftWall.pos || newX == getX rightWall.pos then - -(getX ball.velocity) - else - getX ball.velocity - - newYVelocity = - if newY == getY topWall.pos || newY == getY bottomWall.pos then - -(getY ball.velocity) - else - getY ball.velocity - in - { ball - | pos = vec2 newX newY - , velocity = vec2 newXVelocity newYVelocity - } - - -type alias CollisionResult = - { normal : Vec2, penetration : Float } - - -{-| collide a box with a bubble - - - takes position and half-length of box, position and radius of bubble - --} -collisionBoxBubble : ( Vec2, Vec2 ) -> ( Vec2, Float ) -> CollisionResult -collisionBoxBubble ( posBox, boxExtents ) ( posBubble, bubbleRadius ) = - let - dist = - Vec2.sub posBubble posBox - - ( dx, dy ) = - ( Vec2.getX dist, Vec2.getY dist ) - - ( boxX, boxY ) = - ( Vec2.getX boxExtents, Vec2.getY boxExtents ) - - c = - vec2 (clamp -boxX boxX dx) (clamp -boxY boxY dy) - - -- closest point on box to center of bubble - ( cx, cy ) = - ( Vec2.getX c, Vec2.getY c ) - - ( closest, inside ) = - if - --circle is outside - dist /= c - then - ( c, False ) - else if - -- circle is inside - abs dx > abs dy - then - -- clamp center to closest edge - if cx > 0 then - ( vec2 boxX cy, True ) - else - ( vec2 -boxX cy, True ) - else if cy > 0 then - ( vec2 cx boxY, True ) - else - ( vec2 cx -boxY, True ) - - normal = - Vec2.sub dist closest - - normalLenSq = - Vec2.lengthSquared normal - in - if normalLenSq > bubbleRadius * bubbleRadius && not inside then - CollisionResult (vec2 1 0) 0 - else - let - penetration = - bubbleRadius + sqrt normalLenSq - in - if inside then - CollisionResult (Vec2.scale -1 (Vec2.normalize normal)) penetration - else - CollisionResult (Vec2.normalize normal) penetration + _ -> + ( map, Cmd.none ) @@ -622,8 +157,9 @@ view mapSize map = GroceryStore -> groceryStore mapSize - ArtStore play -> - artStore play map + ArtStore store -> + ArtStore.view store + |> Html.map ArtStoreMsg @@ -633,7 +169,7 @@ view mapSize map = home : Window.Size -> Html Msg home mapSize = div [] - [ exit HomeTown + [ exit HomeTownRoute , Bee.view (Just PlayAudio) Bee.mama , Bee.view (Just PlayAudio) Bee.papa ] @@ -656,7 +192,7 @@ house : ( Int, Int ) -> Html Msg house ( x, y ) = img [ src "imgs/home.png" - , onClick (NewLevel Home) + , onClick (NewLevel HomeRoute) , style [ ( "position", "absolute" ) , ( "height", "128px" ) @@ -673,7 +209,7 @@ storeBuilding ( x, y ) = div [] [ img [ src "imgs/store.png" - , onClick (NewLevel GroceryStore) + , onClick (NewLevel GroceryStoreRoute) , style [ ( "position", "absolute" ) , ( "height", "128px" ) @@ -704,7 +240,7 @@ artStoreBuilding ( x, y ) = div [] [ img [ src "imgs/store.png" - , onClick (NewLevel (ArtStore False)) + , onClick (NewLevel ArtStoreRoute) , style [ ( "position", "absolute" ) , ( "height", "128px" ) @@ -737,8 +273,8 @@ artStoreBuilding ( x, y ) = groceryStore : Window.Size -> Html Msg groceryStore mapSize = div [] - [ exit HomeTown - , playButton ( 192, 10 ) GroceryStore + [ exit HomeTownRoute + , playButton ( 192, 10 ) GroceryStoreRoute , groceryItem ( 64, 96 ) "imgs/banana.png" "audio/el_platano.mp3" , groceryItem ( 192, 96 ) "imgs/milk.png" "audio/leche.mp3" ] @@ -764,100 +300,16 @@ groceryItem ( x, y ) image audio = -- ART STORE -artStore : PlayGame -> Map -> Html Msg -artStore play map = - case play of - True -> - colorGame map.points map.artGame - - False -> - let - showCircle n ( color, audio ) = - colorCircle ( 96 * n, 96 ) color audio - in - div [] <| - exit HomeTown - :: playButton ( 192, 10 ) (ArtStore True) - :: viewPoints map.points - :: List.indexedMap showCircle - [ ( "black", Spanish.audio "black" ) - , ( "white", Spanish.audio "white" ) - , ( "red", Spanish.audio "red" ) - , ( "blue", Spanish.audio "blue" ) - , ( "yellow", Spanish.audio "yellow" ) - ] - - viewPoints : Int -> Html msg viewPoints count = Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] -colorCircle : ( Int, Int ) -> String -> String -> Html Msg -colorCircle ( x, y ) color audio = - div - [ style - [ ( "border-radius", "50%" ) - , ( "background-color", color ) - , ( "border", "1px solid black" ) - , ( "position", "absolute" ) - , ( "left", toString x ++ "px" ) - , ( "top", toString y ++ "px" ) - , ( "width", "64px" ) - , ( "height", "64px" ) - ] - , onClick (PlayAudio audio) - ] - [] - - -colorGame : Int -> ArtGame -> Html Msg -colorGame pointCount artGame = - let - content = - if artGame.win then - [ div [] - [ text "You Win!!!!!!" ] - ] - else - List.map (colorBall artGame.color) artGame.balls - in - div [] - ([ backButton ( 130, 0 ) (ArtStore False) - , text ("Color: " ++ Spanish.translate (toString artGame.color)) - , viewPoints pointCount - ] - ++ content - ) - - -colorBall : Color -> MovingBall -> Html Msg -colorBall gameColor ball = - div - [ style - [ ( "border-radius", "50%" ) - - -- , ( "background-color", toString ball.color ) - , ( "background-image", "url(" ++ imageDir ++ ball.img ++ ")" ) - , ( "background-size", "contain" ) - , ( "background-repeat", "no-repeat" ) - , ( "border", "1px solid black" ) - , ( "position", "absolute" ) - , ( "left", (toString <| getX ball.pos) ++ "px" ) - , ( "top", (toString <| getY ball.pos) ++ "px" ) - , ( "width", toString (ball.radius * 2) ++ "px" ) - , ( "height", toString (ball.radius * 2) ++ "px" ) - ] - , onMouseDown (ColorClicked ball.id gameColor ball.color) - ] - [] - - -- COMMON -playButton : ( Int, Int ) -> Level -> Html Msg +playButton : ( Int, Int ) -> Route -> Html Msg playButton ( x, y ) level = button [ style @@ -873,7 +325,7 @@ playButton ( x, y ) level = [ text "Play!" ] -backButton : ( Int, Int ) -> Level -> Html Msg +backButton : ( Int, Int ) -> Route -> Html Msg backButton ( x, y ) level = button [ style @@ -889,7 +341,7 @@ backButton ( x, y ) level = [ text "Back" ] -exit : Level -> Html Msg +exit : Route -> Html Msg exit level = div [ onClick (NewLevel level) ] [ tile ( 0, 0 ) diff --git a/elm.js b/elm.js index 233e341..6751a99 100644 --- a/elm.js +++ b/elm.js @@ -11825,7 +11825,7 @@ var _user$project$Dictionary_Spanish$audio = function (word) { _user$project$Dictionary_Spanish$findWord(word)); }; -var _user$project$Map$tile = function (_p0) { +var _user$project$Store_ArtStore$tile = function (_p0) { var _p1 = _p0; return A2( _elm_lang$html$Html$img, @@ -11871,21 +11871,37 @@ var _user$project$Map$tile = function (_p0) { }, {ctor: '[]'}); }; -var _user$project$Map$row = F2( - function (width, y) { - return A2( - _elm_lang$core$List$map, - function (i) { - return _user$project$Map$tile( - {ctor: '_Tuple2', _0: i * 32, _1: y}); - }, - A2(_elm_lang$core$List$range, 0, width)); - }); -var _user$project$Map$tileCountFromPixels = function (pixels) { - return _elm_lang$core$Basics$round( - _elm_lang$core$Basics$toFloat(pixels) / 32); +var _user$project$Store_ArtStore$exit = function (exitMsg) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(exitMsg), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Store_ArtStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } + } + }); }; -var _user$project$Map$viewPoints = function (count) { +var _user$project$Store_ArtStore$viewPoints = function (count) { return A2( _elm_lang$html$Html$div, { @@ -11903,8 +11919,9 @@ var _user$project$Map$viewPoints = function (count) { _1: {ctor: '[]'} }); }; -var _user$project$Map$slowdown = 1 / 10; -var _user$project$Map$initBottomWall = F2( +var _user$project$Store_ArtStore$colorSwapTime = 2000; +var _user$project$Store_ArtStore$slowdown = 1 / 10; +var _user$project$Store_ArtStore$initBottomWall = F2( function (windowWidth, windowHeight) { return { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, windowHeight), @@ -11912,14 +11929,14 @@ var _user$project$Map$initBottomWall = F2( halfWidth: windowWidth / 2 }; }); -var _user$project$Map$initTopWall = function (windowWidth) { +var _user$project$Store_ArtStore$initTopWall = function (windowWidth) { return { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, 0), halfHeight: 1, halfWidth: windowWidth / 2 }; }; -var _user$project$Map$initRightWall = F2( +var _user$project$Store_ArtStore$initRightWall = F2( function (windowWidth, windowHeight) { return { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth, windowHeight / 2), @@ -11927,14 +11944,14 @@ var _user$project$Map$initRightWall = F2( halfWidth: 1 }; }); -var _user$project$Map$initLeftWall = function (windowHeight) { +var _user$project$Store_ArtStore$initLeftWall = function (windowHeight) { return { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, windowHeight / 2), halfHeight: windowHeight / 2, halfWidth: 1 }; }; -var _user$project$Map$resolveCollision = F3( +var _user$project$Store_ArtStore$resolveCollision = F3( function (_p2, b0, b1) { var _p3 = _p2; var _p4 = _p3.normal; @@ -11959,14 +11976,7 @@ var _user$project$Map$resolveCollision = F3( }; } }); -var _user$project$Map$colorSwapTime = 2000; -var _user$project$Map$resize = F2( - function (window, map) { - return _elm_lang$core$Native_Utils.update( - map, - {window: window}); - }); -var _user$project$Map$removeBall = F2( +var _user$project$Store_ArtStore$removeBall = F2( function (id, balls) { return A2( _elm_lang$core$List$filter, @@ -11975,7 +11985,7 @@ var _user$project$Map$removeBall = F2( }, balls); }); -var _user$project$Map$initMovingBall = F5( +var _user$project$Store_ArtStore$initMovingBall = F5( function (id, color, _p6, _p5, image) { var _p7 = _p6; var _p8 = _p5; @@ -11988,7 +11998,7 @@ var _user$project$Map$initMovingBall = F5( img: image }; }); -var _user$project$Map$nonZeroFloat = A2( +var _user$project$Store_ArtStore$nonZeroFloat = A2( _elm_lang$core$Random$map, _elm_lang$core$Basics$toFloat, A2( @@ -11997,8 +12007,8 @@ var _user$project$Map$nonZeroFloat = A2( return _elm_lang$core$Native_Utils.eq(i, 0) ? 1 : i; }, A2(_elm_lang$core$Random$int, -1, 1))); -var _user$project$Map$randomVelocity = A2(_elm_lang$core$Random$pair, _user$project$Map$nonZeroFloat, _user$project$Map$nonZeroFloat); -var _user$project$Map$randomPosition = function (window) { +var _user$project$Store_ArtStore$randomVelocity = A2(_elm_lang$core$Random$pair, _user$project$Store_ArtStore$nonZeroFloat, _user$project$Store_ArtStore$nonZeroFloat); +var _user$project$Store_ArtStore$randomPosition = function (window) { return A2( _elm_lang$core$Random$pair, A2( @@ -12010,7 +12020,7 @@ var _user$project$Map$randomPosition = function (window) { _elm_lang$core$Basics$toFloat, A2(_elm_lang$core$Random$int, 30, window.height))); }; -var _user$project$Map$alwaysGen = function (x) { +var _user$project$Store_ArtStore$alwaysGen = function (x) { return A2( _elm_lang$core$Random$map, function (_p9) { @@ -12018,69 +12028,69 @@ var _user$project$Map$alwaysGen = function (x) { }, _elm_lang$core$Random$bool); }; -var _user$project$Map$imageDir = 'imgs/colors/'; -var _user$project$Map$get = F2( +var _user$project$Store_ArtStore$imageDir = 'imgs/colors/'; +var _user$project$Store_ArtStore$get = F2( function (index, list) { return _elm_lang$core$List$head( A2(_elm_lang$core$List$drop, index, list)); }); -var _user$project$Map$randItem = function (list) { +var _user$project$Store_ArtStore$randItem = function (list) { return A2( _elm_lang$core$Random$map, function (i) { - return A2(_user$project$Map$get, i, list); + return A2(_user$project$Store_ArtStore$get, i, list); }, A2( _elm_lang$core$Random$int, 0, _elm_lang$core$List$length(list) - 1)); }; -var _user$project$Map$Map = F5( - function (a, b, c, d, e) { - return {level: a, artGame: b, window: c, points: d, seed: e}; +var _user$project$Store_ArtStore$Model = F2( + function (a, b) { + return {playing: a, game: b}; }); -var _user$project$Map$ArtGame = F5( - function (a, b, c, d, e) { - return {color: a, balls: b, time: c, seed: d, win: e}; +var _user$project$Store_ArtStore$ArtGame = F6( + function (a, b, c, d, e, f) { + return {color: a, balls: b, time: c, seed: d, win: e, points: f}; }); -var _user$project$Map$MovingBall = F6( +var _user$project$Store_ArtStore$MovingBall = F6( function (a, b, c, d, e, f) { return {id: a, color: b, pos: c, radius: d, velocity: e, img: f}; }); -var _user$project$Map$CollisionResult = F2( +var _user$project$Store_ArtStore$CollisionResult = F2( function (a, b) { return {normal: a, penetration: b}; }); -var _user$project$Map$collisionBubbleBubble = F3( +var _user$project$Store_ArtStore$collisionBubbleBubble = F3( function (b0b1, radius0, radius1) { var distanceSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(b0b1); var radiusb0b1 = radius0 + radius1; if (_elm_lang$core$Native_Utils.eq(distanceSq, 0)) { return A2( - _user$project$Map$CollisionResult, + _user$project$Store_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), radius0); } else { if (_elm_lang$core$Native_Utils.cmp(distanceSq, radiusb0b1 * radiusb0b1) > -1) { return A2( - _user$project$Map$CollisionResult, + _user$project$Store_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { var d = _elm_lang$core$Basics$sqrt(distanceSq); return A2( - _user$project$Map$CollisionResult, + _user$project$Store_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$scale, 1 / d, b0b1), radiusb0b1 - d); } } }); -var _user$project$Map$collision = F2( +var _user$project$Store_ArtStore$collision = F2( function (body0, body1) { var b0b1 = A2(_elm_community$linear_algebra$Math_Vector2$sub, body1.pos, body0.pos); - return A3(_user$project$Map$collisionBubbleBubble, b0b1, body0.radius, body1.radius); + return A3(_user$project$Store_ArtStore$collisionBubbleBubble, b0b1, body0.radius, body1.radius); }); -var _user$project$Map$collideWith = F3( +var _user$project$Store_ArtStore$collideWith = F3( function (a0, bodies, acc) { collideWith: while (true) { @@ -12089,8 +12099,8 @@ var _user$project$Map$collideWith = F3( return {ctor: '::', _0: a0, _1: acc}; } else { var _p12 = _p10._0; - var collisionResult = A2(_user$project$Map$collision, a0, _p12); - var _p11 = A3(_user$project$Map$resolveCollision, collisionResult, a0, _p12); + var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p12); + var _p11 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p12); var a1 = _p11._0; var b1 = _p11._1; var _v5 = a1, @@ -12103,7 +12113,7 @@ var _user$project$Map$collideWith = F3( } } }); -var _user$project$Map$collide = F2( +var _user$project$Store_ArtStore$collide = F2( function (acc, bodies) { collide: while (true) { @@ -12112,7 +12122,7 @@ var _user$project$Map$collide = F2( return acc; } else { var _p14 = A3( - _user$project$Map$collideWith, + _user$project$Store_ArtStore$collideWith, _p13._0, _p13._1, {ctor: '[]'}); @@ -12128,13 +12138,13 @@ var _user$project$Map$collide = F2( } } }); -var _user$project$Map$collisions = function (balls) { +var _user$project$Store_ArtStore$collisions = function (balls) { return A2( - _user$project$Map$collide, + _user$project$Store_ArtStore$collide, {ctor: '[]'}, balls); }; -var _user$project$Map$collisionBoxBubble = F2( +var _user$project$Store_ArtStore$collisionBoxBubble = F2( function (_p16, _p15) { var _p17 = _p16; var _p24 = _p17._1; @@ -12191,24 +12201,24 @@ var _user$project$Map$collisionBoxBubble = F2( var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { return A2( - _user$project$Map$CollisionResult, + _user$project$Store_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( - _user$project$Map$CollisionResult, + _user$project$Store_ArtStore$CollisionResult, A2( _elm_community$linear_algebra$Math_Vector2$scale, -1, _elm_community$linear_algebra$Math_Vector2$normalize(normal)), penetration) : A2( - _user$project$Map$CollisionResult, + _user$project$Store_ArtStore$CollisionResult, _elm_community$linear_algebra$Math_Vector2$normalize(normal), penetration); } }); -var _user$project$Map$animateBall = F3( +var _user$project$Store_ArtStore$animateBall = F3( function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); @@ -12221,17 +12231,17 @@ var _user$project$Map$animateBall = F3( var height = _p25._1; var _p26 = { ctor: '_Tuple4', - _0: _user$project$Map$initLeftWall(height), - _1: A2(_user$project$Map$initRightWall, width, height), - _2: _user$project$Map$initTopWall(width), - _3: A2(_user$project$Map$initBottomWall, width, height) + _0: _user$project$Store_ArtStore$initLeftWall(height), + _1: A2(_user$project$Store_ArtStore$initRightWall, width, height), + _2: _user$project$Store_ArtStore$initTopWall(width), + _3: A2(_user$project$Store_ArtStore$initBottomWall, width, height) }; var leftWall = _p26._0; var rightWall = _p26._1; var topWall = _p26._2; var bottomWall = _p26._3; var leftCol = A2( - _user$project$Map$collisionBoxBubble, + _user$project$Store_ArtStore$collisionBoxBubble, { ctor: '_Tuple2', _0: leftWall.pos, @@ -12242,12 +12252,12 @@ var _user$project$Map$animateBall = F3( _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos), _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos), - x + ((_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff) * _user$project$Map$slowdown)); + x + ((_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff) * _user$project$Store_ArtStore$slowdown)); var newY = A3( _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos), _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos), - y + ((_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff) * _user$project$Map$slowdown)); + y + ((_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff) * _user$project$Store_ArtStore$slowdown)); var newXVelocity = (_elm_lang$core$Native_Utils.eq( newX, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos)) || _elm_lang$core$Native_Utils.eq( @@ -12265,52 +12275,17 @@ var _user$project$Map$animateBall = F3( velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newXVelocity, newYVelocity) }); }); -var _user$project$Map$ArtStore = function (a) { - return {ctor: 'ArtStore', _0: a}; -}; -var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; -var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; -var _user$project$Map$Home = {ctor: 'Home'}; -var _user$project$Map$Purple = {ctor: 'Purple'}; -var _user$project$Map$Blue = {ctor: 'Blue'}; -var _user$project$Map$Green = {ctor: 'Green'}; -var _user$project$Map$Yellow = {ctor: 'Yellow'}; -var _user$project$Map$Orange = {ctor: 'Orange'}; -var _user$project$Map$Red = {ctor: 'Red'}; -var _user$project$Map$colorGen = A2( - _elm_lang$core$Random$map, - _elm_lang$core$Maybe$withDefault(_user$project$Map$Red), - _user$project$Map$randItem( - { - ctor: '::', - _0: _user$project$Map$Red, - _1: { - ctor: '::', - _0: _user$project$Map$Orange, - _1: { - ctor: '::', - _0: _user$project$Map$Yellow, - _1: { - ctor: '::', - _0: _user$project$Map$Green, - _1: { - ctor: '::', - _0: _user$project$Map$Blue, - _1: { - ctor: '::', - _0: _user$project$Map$Purple, - _1: {ctor: '[]'} - } - } - } - } - } - })); -var _user$project$Map$randomColor = F2( +var _user$project$Store_ArtStore$Purple = {ctor: 'Purple'}; +var _user$project$Store_ArtStore$Blue = {ctor: 'Blue'}; +var _user$project$Store_ArtStore$Green = {ctor: 'Green'}; +var _user$project$Store_ArtStore$Yellow = {ctor: 'Yellow'}; +var _user$project$Store_ArtStore$Orange = {ctor: 'Orange'}; +var _user$project$Store_ArtStore$Red = {ctor: 'Red'}; +var _user$project$Store_ArtStore$randomColor = F2( function (seed, balls) { return A2( _elm_lang$core$Tuple$mapFirst, - _elm_lang$core$Maybe$withDefault(_user$project$Map$Red), + _elm_lang$core$Maybe$withDefault(_user$project$Store_ArtStore$Red), A2( _elm_lang$core$Tuple$mapFirst, _elm_lang$core$Maybe$map( @@ -12319,15 +12294,15 @@ var _user$project$Map$randomColor = F2( }), A2( _elm_lang$core$Random$step, - _user$project$Map$randItem(balls), + _user$project$Store_ArtStore$randItem(balls), seed))); }); -var _user$project$Map$animateArtGame = F3( +var _user$project$Store_ArtStore$animateArtGame = F3( function (timeDiff, window, artGame) { var newTime = artGame.time + timeDiff; var _p27 = function () { - if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Map$colorSwapTime) > 0) { - var _p28 = A2(_user$project$Map$randomColor, artGame.seed, artGame.balls); + if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Store_ArtStore$colorSwapTime) > 0) { + var _p28 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); var randColor = _p28._0; var seed = _p28._1; return { @@ -12351,6 +12326,7 @@ var _user$project$Map$animateArtGame = F3( var newSeed = _p27._0._1; var timeReset = _p27._1; var cmd = _p27._2; + var _p29 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -12359,34 +12335,34 @@ var _user$project$Map$animateArtGame = F3( time: timeReset, color: newColor, seed: newSeed, - balls: _user$project$Map$collisions( + balls: _user$project$Store_ArtStore$collisions( A2( _elm_lang$core$List$map, - A2(_user$project$Map$animateBall, timeDiff, window), + A2(_user$project$Store_ArtStore$animateBall, timeDiff, window), artGame.balls)) }), _1: cmd }; }); -var _user$project$Map$tick = F2( - function (timeDelta, map) { - var _p29 = A3(_user$project$Map$animateArtGame, timeDelta, map.window, map.artGame); - var newArtGame = _p29._0; - var cmd = _p29._1; +var _user$project$Store_ArtStore$tick = F3( + function (timeDelta, window, model) { + var _p30 = A3(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, model.game); + var newArtGame = _p30._0; + var cmd = _p30._1; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( - map, - {artGame: newArtGame}), + model, + {game: newArtGame}), _1: cmd }; }); -var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( +var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromList( { ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Map$Red, + _0: _user$project$Store_ArtStore$Red, _1: { ctor: '::', _0: 'red-cherry.png', @@ -12401,7 +12377,7 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Map$Orange, + _0: _user$project$Store_ArtStore$Orange, _1: { ctor: '::', _0: 'orange-tangerine.png', @@ -12412,7 +12388,7 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Map$Yellow, + _0: _user$project$Store_ArtStore$Yellow, _1: { ctor: '::', _0: 'yellow-banana.png', @@ -12431,7 +12407,7 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Map$Green, + _0: _user$project$Store_ArtStore$Green, _1: { ctor: '::', _0: 'green-frog.png', @@ -12446,7 +12422,7 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Map$Blue, + _0: _user$project$Store_ArtStore$Blue, _1: { ctor: '::', _0: 'blue-bird.png', @@ -12461,7 +12437,7 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Map$Purple, + _0: _user$project$Store_ArtStore$Purple, _1: { ctor: '::', _0: 'purple-octopus.png', @@ -12475,105 +12451,105 @@ var _user$project$Map$images = _eeue56$elm_all_dict$EveryDict$fromList( } } }); -var _user$project$Map$randomImage = function (color) { - var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Map$images); - var _p30 = options; - if (_p30.ctor === 'Nothing') { - return _user$project$Map$alwaysGen(''); +var _user$project$Store_ArtStore$randomImage = function (color) { + var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Store_ArtStore$images); + var _p31 = options; + if (_p31.ctor === 'Nothing') { + return _user$project$Store_ArtStore$alwaysGen(''); } else { - if (_p30._0.ctor === '[]') { - return _user$project$Map$alwaysGen(''); + if (_p31._0.ctor === '[]') { + return _user$project$Store_ArtStore$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Map$randItem(_p30._0)); + _user$project$Store_ArtStore$randItem(_p31._0)); } } }; -var _user$project$Map$randomMovingBall = F2( +var _user$project$Store_ArtStore$colorGen = A2( + _elm_lang$core$Random$map, + _elm_lang$core$Maybe$withDefault(_user$project$Store_ArtStore$Red), + _user$project$Store_ArtStore$randItem( + { + ctor: '::', + _0: _user$project$Store_ArtStore$Red, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Orange, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Yellow, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Green, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Blue, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Purple, + _1: {ctor: '[]'} + } + } + } + } + } + })); +var _user$project$Store_ArtStore$randomMovingBall = F2( function (window, id) { return A2( _elm_lang$core$Random$andThen, function (color) { return A4( _elm_lang$core$Random$map3, - A2(_user$project$Map$initMovingBall, id, color), - _user$project$Map$randomPosition(window), - _user$project$Map$randomVelocity, - _user$project$Map$randomImage(color)); + A2(_user$project$Store_ArtStore$initMovingBall, id, color), + _user$project$Store_ArtStore$randomPosition(window), + _user$project$Store_ArtStore$randomVelocity, + _user$project$Store_ArtStore$randomImage(color)); }, - _user$project$Map$colorGen); + _user$project$Store_ArtStore$colorGen); }); -var _user$project$Map$initialBalls = function (window) { +var _user$project$Store_ArtStore$initialBalls = function (window) { return _elm_community$random_extra$Random_Extra$combine( A2( _elm_lang$core$List$map, - _user$project$Map$randomMovingBall(window), + _user$project$Store_ArtStore$randomMovingBall(window), A2(_elm_lang$core$List$range, 0, 9))); }; -var _user$project$Map$initArtGame = F2( +var _user$project$Store_ArtStore$initArtGame = F2( function (window, seed) { - var _p31 = A2( + var _p32 = A2( _elm_lang$core$Random$step, - _user$project$Map$initialBalls(window), + _user$project$Store_ArtStore$initialBalls(window), seed); - var balls = _p31._0; - var newSeed = _p31._1; + var balls = _p32._0; + var newSeed = _p32._1; return { ctor: '_Tuple2', - _0: {time: 0, seed: newSeed, color: _user$project$Map$Yellow, balls: balls, win: false}, + _0: {time: 0, seed: newSeed, points: 0, color: _user$project$Store_ArtStore$Yellow, balls: balls, win: false}, _1: newSeed }; }); -var _user$project$Map$init = F2( - function (window, level) { - var _p32 = A2( - _user$project$Map$initArtGame, - window, - _elm_lang$core$Random$initialSeed(0)); - var artGame = _p32._0; +var _user$project$Store_ArtStore$init = F2( + function (window, seed) { + var _p33 = A2(_user$project$Store_ArtStore$initArtGame, window, seed); + var game = _p33._0; + var newSeed = _p33._1; return { - level: level, - artGame: artGame, - window: window, - points: 0, - seed: _elm_lang$core$Random$initialSeed(0) + ctor: '_Tuple2', + _0: {game: game, playing: false}, + _1: newSeed }; }); -var _user$project$Map$update = F2( - function (msg, map) { - var _p33 = msg; - switch (_p33.ctor) { - case 'NewLevel': - var _p36 = _p33._0; - var _p34 = function () { - var _p35 = _p36; - if ((_p35.ctor === 'ArtStore') && (_p35._0 === true)) { - return A2(_user$project$Map$initArtGame, map.window, map.seed); - } else { - return {ctor: '_Tuple2', _0: map.artGame, _1: map.seed}; - } - }(); - var artGame = _p34._0; - var newSeed = _p34._1; - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - map, - {level: _p36, artGame: artGame, seed: newSeed}), - _1: _elm_lang$core$Platform_Cmd$none - }; - case 'PlayAudio': - return { - ctor: '_Tuple2', - _0: map, - _1: _user$project$Audio$play(_p33._0) - }; - default: - if (_elm_lang$core$Native_Utils.eq(_p33._1, _p33._2)) { - var artGame = map.artGame; - var newBalls = A2(_user$project$Map$removeBall, _p33._0, artGame.balls); +var _user$project$Store_ArtStore$update = F3( + function (window, msg, model) { + var _p34 = msg; + switch (_p34.ctor) { + case 'ColorClicked': + if (_elm_lang$core$Native_Utils.eq(_p34._1, _p34._2)) { + var artGame = model.game; + var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p34._0, artGame.balls); var win = _elm_lang$core$Native_Utils.eq( _elm_lang$core$List$length(newBalls), 0); @@ -12583,21 +12559,43 @@ var _user$project$Map$update = F2( return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( - map, - {points: map.points + 10, artGame: newArtGame}), + model, + {game: newArtGame}), _1: _user$project$Audio$play('audio/puff.mp3') }; } else { - return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; } + case 'Play': + var _p35 = A2( + _user$project$Store_ArtStore$initArtGame, + window, + _elm_lang$core$Random$initialSeed(0)); + var newArtGame = _p35._0; + return { + ctor: '_Tuple2', + _0: {playing: true, game: newArtGame}, + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'Pause': + return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; + case 'PlayAudio': + return { + ctor: '_Tuple2', + _0: model, + _1: _user$project$Audio$play(_p34._0) + }; + default: + return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; } }); -var _user$project$Map$ColorClicked = F3( - function (a, b, c) { - return {ctor: 'ColorClicked', _0: a, _1: b, _2: c}; - }); -var _user$project$Map$colorBall = F2( - function (gameColor, ball) { +var _user$project$Store_ArtStore$Exit = {ctor: 'Exit'}; +var _user$project$Store_ArtStore$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Store_ArtStore$colorCircle = F3( + function (_p36, color, audio) { + var _p37 = _p36; return A2( _elm_lang$html$Html$div, { @@ -12608,74 +12606,40 @@ var _user$project$Map$colorBall = F2( _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'background-image', - _1: A2( - _elm_lang$core$Basics_ops['++'], - 'url(', - A2( - _elm_lang$core$Basics_ops['++'], - _user$project$Map$imageDir, - A2(_elm_lang$core$Basics_ops['++'], ball.img, ')'))) - }, + _0: {ctor: '_Tuple2', _0: 'background-color', _1: color}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-size', _1: 'contain'}, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-repeat', _1: 'no-repeat'}, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p37._0), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p37._1), + 'px') + }, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString( - _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString( - _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'width', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.radius * 2), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'height', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.radius * 2), - 'px') - }, - _1: {ctor: '[]'} - } - } + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} } } } @@ -12686,75 +12650,137 @@ var _user$project$Map$colorBall = F2( }), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onMouseDown( - A3(_user$project$Map$ColorClicked, ball.id, gameColor, ball.color)), + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Store_ArtStore$PlayAudio(audio)), _1: {ctor: '[]'} } }, {ctor: '[]'}); }); -var _user$project$Map$PlayAudio = function (a) { - return {ctor: 'PlayAudio', _0: a}; -}; -var _user$project$Map$groceryItem = F3( - function (_p37, image, audio) { - var _p38 = _p37; - return A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src(image), - _1: { +var _user$project$Store_ArtStore$Pause = {ctor: 'Pause'}; +var _user$project$Store_ArtStore$backButton = function (_p38) { + var _p39 = _p38; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p39._0), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p39._1), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._1), - 'px') - }, - _1: {ctor: '[]'} - } + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} } } } - }), + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$Pause), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Back'), + _1: {ctor: '[]'} + }); +}; +var _user$project$Store_ArtStore$Play = {ctor: 'Play'}; +var _user$project$Store_ArtStore$playButton = function (_p40) { + var _p41 = _p40; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$PlayAudio(audio)), - _1: {ctor: '[]'} + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p41._1), + 'px') + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} + } + } + } + } } - } - }, - {ctor: '[]'}); + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$Play), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Play!'), + _1: {ctor: '[]'} + }); +}; +var _user$project$Store_ArtStore$ColorClicked = F3( + function (a, b, c) { + return {ctor: 'ColorClicked', _0: a, _1: b, _2: c}; }); -var _user$project$Map$colorCircle = F3( - function (_p39, color, audio) { - var _p40 = _p39; +var _user$project$Store_ArtStore$colorBall = F2( + function (gameColor, ball) { return A2( _elm_lang$html$Html$div, { @@ -12765,40 +12791,74 @@ var _user$project$Map$colorCircle = F3( _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: color}, + _0: { + ctor: '_Tuple2', + _0: 'background-image', + _1: A2( + _elm_lang$core$Basics_ops['++'], + 'url(', + A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Store_ArtStore$imageDir, + A2(_elm_lang$core$Basics_ops['++'], ball.img, ')'))) + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'background-size', _1: 'contain'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'background-repeat', _1: 'no-repeat'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p40._0), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p40._1), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: {ctor: '[]'} + } + } } } } @@ -12809,39 +12869,345 @@ var _user$project$Map$colorCircle = F3( }), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$PlayAudio(audio)), + _0: _elm_lang$html$Html_Events$onMouseDown( + A3(_user$project$Store_ArtStore$ColorClicked, ball.id, gameColor, ball.color)), _1: {ctor: '[]'} } }, {ctor: '[]'}); }); -var _user$project$Map$NewLevel = function (a) { - return {ctor: 'NewLevel', _0: a}; +var _user$project$Store_ArtStore$colorGame = function (game) { + var content = game.win ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('You Win!!!!!!'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } : A2( + _elm_lang$core$List$map, + _user$project$Store_ArtStore$colorBall(game.color), + game.balls); + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _user$project$Store_ArtStore$backButton( + {ctor: '_Tuple2', _0: 130, _1: 0}), + _1: { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Color: ', + _user$project$Dictionary_Spanish$translate( + _elm_lang$core$Basics$toString(game.color)))), + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$viewPoints(game.points), + _1: {ctor: '[]'} + } + } + }, + content)); }; -var _user$project$Map$house = function (_p41) { - var _p42 = _p41; +var _user$project$Store_ArtStore$view = function (model) { + var _p42 = model.playing; + if (_p42 === true) { + return _user$project$Store_ArtStore$colorGame(model.game); + } else { + var showCircle = F2( + function (n, _p43) { + var _p44 = _p43; + return A3( + _user$project$Store_ArtStore$colorCircle, + {ctor: '_Tuple2', _0: 96 * n, _1: 96}, + _p44._0, + _p44._1); + }); + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Store_ArtStore$exit(_user$project$Store_ArtStore$Exit), + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$playButton( + {ctor: '_Tuple2', _0: 192, _1: 10}), + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$viewPoints(model.game.points), + _1: A2( + _elm_lang$core$List$indexedMap, + showCircle, + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'black', + _1: _user$project$Dictionary_Spanish$audio('black') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'white', + _1: _user$project$Dictionary_Spanish$audio('white') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'red', + _1: _user$project$Dictionary_Spanish$audio('red') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'blue', + _1: _user$project$Dictionary_Spanish$audio('blue') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'yellow', + _1: _user$project$Dictionary_Spanish$audio('yellow') + }, + _1: {ctor: '[]'} + } + } + } + } + }) + } + } + }); + } +}; + +var _user$project$Map$tile = function (_p0) { + var _p1 = _p0; return A2( _elm_lang$html$Html$img, { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/home.png'), + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel(_user$project$Map$Home)), + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Map$row = F2( + function (width, y) { + return A2( + _elm_lang$core$List$map, + function (i) { + return _user$project$Map$tile( + {ctor: '_Tuple2', _0: i * 32, _1: y}); + }, + A2(_elm_lang$core$List$range, 0, width)); + }); +var _user$project$Map$tileCountFromPixels = function (pixels) { + return _elm_lang$core$Basics$round( + _elm_lang$core$Basics$toFloat(pixels) / 32); +}; +var _user$project$Map$viewPoints = function (count) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class('points'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Points: ', + _elm_lang$core$Basics$toString(count))), + _1: {ctor: '[]'} + }); +}; +var _user$project$Map$resize = F2( + function (window, map) { + return _elm_lang$core$Native_Utils.update( + map, + {window: window}); + }); +var _user$project$Map$init = F2( + function (window, level) { + return { + level: level, + window: window, + points: 0, + seed: _elm_lang$core$Random$initialSeed(0) + }; + }); +var _user$project$Map$Map = F4( + function (a, b, c, d) { + return {level: a, window: b, points: c, seed: d}; + }); +var _user$project$Map$ArtStore = function (a) { + return {ctor: 'ArtStore', _0: a}; +}; +var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; +var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; +var _user$project$Map$Home = {ctor: 'Home'}; +var _user$project$Map$Purple = {ctor: 'Purple'}; +var _user$project$Map$Blue = {ctor: 'Blue'}; +var _user$project$Map$Green = {ctor: 'Green'}; +var _user$project$Map$Yellow = {ctor: 'Yellow'}; +var _user$project$Map$Orange = {ctor: 'Orange'}; +var _user$project$Map$Red = {ctor: 'Red'}; +var _user$project$Map$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; +var _user$project$Map$ArtStoreMsg = function (a) { + return {ctor: 'ArtStoreMsg', _0: a}; +}; +var _user$project$Map$tick = F2( + function (timeDelta, map) { + var _p2 = map.level; + if (_p2.ctor === 'ArtStore') { + var _p3 = A3(_user$project$Store_ArtStore$tick, timeDelta, map.window, _p2._0); + var newArtStore = _p3._0; + var cmd = _p3._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + { + level: _user$project$Map$ArtStore(newArtStore) + }), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) + }; + } else { + return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + } + }); +var _user$project$Map$update = F2( + function (msg, map) { + var _p4 = {ctor: '_Tuple2', _0: map.level, _1: msg}; + switch (_p4._1.ctor) { + case 'NewLevel': + var level = function () { + var _p5 = _p4._1._0; + switch (_p5.ctor) { + case 'HomeRoute': + return _user$project$Map$Home; + case 'HomeTownRoute': + return _user$project$Map$HomeTown; + case 'GroceryStoreRoute': + return _user$project$Map$GroceryStore; + default: + var _p6 = A2(_user$project$Store_ArtStore$init, map.window, map.seed); + var store = _p6._0; + return _user$project$Map$ArtStore(store); + } + }(); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: level}), + _1: _elm_lang$core$Platform_Cmd$none + }; + case 'PlayAudio': + return { + ctor: '_Tuple2', + _0: map, + _1: _user$project$Audio$play(_p4._1._0) + }; + case 'Tick': + var _p7 = _elm_lang$core$Debug$log('Map Tick'); + return A2(_user$project$Map$tick, _p4._1._0, map); + default: + if (_p4._0.ctor === 'ArtStore') { + var _p8 = A3(_user$project$Store_ArtStore$update, map.window, _p4._1._0, _p4._0._0); + var newArtStore = _p8._0; + var cmd = _p8._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + { + level: _user$project$Map$ArtStore(newArtStore) + }), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) + }; + } else { + return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; + } + } + }); +var _user$project$Map$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Map$groceryItem = F3( + function (_p9, image, audio) { + var _p10 = _p9; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src(image), _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', _0: { @@ -12849,7 +13215,7 @@ var _user$project$Map$house = function (_p41) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p42._0), + _elm_lang$core$Basics$toString(_p10._0), 'px') }, _1: { @@ -12859,7 +13225,7 @@ var _user$project$Map$house = function (_p41) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p42._1), + _elm_lang$core$Basics$toString(_p10._1), 'px') }, _1: {ctor: '[]'} @@ -12868,142 +13234,175 @@ var _user$project$Map$house = function (_p41) { } } }), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}); -}; -var _user$project$Map$storeBuilding = function (_p43) { - var _p44 = _p43; - var _p46 = _p44._1; - var _p45 = _p44._0; - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel(_user$project$Map$GroceryStore)), + _user$project$Map$PlayAudio(audio)), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); + }); +var _user$project$Map$NewLevel = function (a) { + return {ctor: 'NewLevel', _0: a}; +}; +var _user$project$Map$playButton = F2( + function (_p11, level) { + var _p12 = _p11; + return A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p12._0), + 'px') + }, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p12._1), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p46), - 'px') - }, - _1: {ctor: '[]'} - } - } + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} } } - }), - _1: {ctor: '[]'} + } + } } - } - }, - {ctor: '[]'}), - _1: { + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Play!'), + _1: {ctor: '[]'} + }); + }); +var _user$project$Map$backButton = F2( + function (_p13, level) { + var _p14 = _p13; + return A2( + _elm_lang$html$Html$button, + { ctor: '::', - _0: A2( - _elm_lang$html$Html$div, + _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p14._0), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p14._1), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p45 + 7), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p46 + 10), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: {ctor: '[]'} } } } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Los Comestibles'), - _1: {ctor: '[]'} + } + } }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Back'), _1: {ctor: '[]'} + }); + }); +var _user$project$Map$exit = function (level) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(level)), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } } }); }; -var _user$project$Map$artStoreBuilding = function (_p47) { - var _p48 = _p47; - var _p50 = _p48._1; - var _p49 = _p48._0; +var _user$project$Map$ArtStoreRoute = {ctor: 'ArtStoreRoute'}; +var _user$project$Map$artStoreBuilding = function (_p15) { + var _p16 = _p15; + var _p18 = _p16._1; + var _p17 = _p16._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -13017,8 +13416,7 @@ var _user$project$Map$artStoreBuilding = function (_p47) { _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel( - _user$project$Map$ArtStore(false))), + _user$project$Map$NewLevel(_user$project$Map$ArtStoreRoute)), _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( @@ -13038,7 +13436,7 @@ var _user$project$Map$artStoreBuilding = function (_p47) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p49), + _elm_lang$core$Basics$toString(_p17), 'px') }, _1: { @@ -13048,7 +13446,7 @@ var _user$project$Map$artStoreBuilding = function (_p47) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p50), + _elm_lang$core$Basics$toString(_p18), 'px') }, _1: {ctor: '[]'} @@ -13094,263 +13492,174 @@ var _user$project$Map$artStoreBuilding = function (_p47) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p49 + 7), + _elm_lang$core$Basics$toString(_p17 + 7), 'px') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p50 + 10), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - } - } - } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('El Arte'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - }); -}; -var _user$project$Map$hometown = function (mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _user$project$Map$house( - {ctor: '_Tuple2', _0: 0, _1: 0}), - _1: { - ctor: '::', - _0: _user$project$Map$storeBuilding( - {ctor: '_Tuple2', _0: 160, _1: 0}), - _1: { - ctor: '::', - _0: _user$project$Map$artStoreBuilding( - {ctor: '_Tuple2', _0: 320, _1: 0}), - _1: {ctor: '[]'} - } - } - }); -}; -var _user$project$Map$playButton = F2( - function (_p51, level) { - var _p52 = _p51; - return A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p52._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p52._1), - 'px') - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} - } - } - } - } - } - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel(level)), - _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Play!'), - _1: {ctor: '[]'} - }); - }); -var _user$project$Map$backButton = F2( - function (_p53, level) { - var _p54 = _p53; - return A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p54._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p54._1), - 'px') - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, - _1: {ctor: '[]'} + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p18 + 10), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } } } } - } - } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('El Arte'), + _1: {ctor: '[]'} }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel(level)), - _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Back'), _1: {ctor: '[]'} - }); - }); -var _user$project$Map$colorGame = F2( - function (pointCount, artGame) { - var content = artGame.win ? { + } + }); +}; +var _user$project$Map$GroceryStoreRoute = {ctor: 'GroceryStoreRoute'}; +var _user$project$Map$storeBuilding = function (_p19) { + var _p20 = _p19; + var _p22 = _p20._1; + var _p21 = _p20._0; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { ctor: '::', _0: A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('You Win!!!!!!'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } : A2( - _elm_lang$core$List$map, - _user$project$Map$colorBall(artGame.color), - artGame.balls); - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - A2( - _elm_lang$core$Basics_ops['++'], + _elm_lang$html$Html$img, { ctor: '::', - _0: A2( - _user$project$Map$backButton, - {ctor: '_Tuple2', _0: 130, _1: 0}, - _user$project$Map$ArtStore(false)), + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), _1: { ctor: '::', - _0: _elm_lang$html$Html$text( - A2( - _elm_lang$core$Basics_ops['++'], - 'Color: ', - _user$project$Dictionary_Spanish$translate( - _elm_lang$core$Basics$toString(artGame.color)))), + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$GroceryStoreRoute)), _1: { ctor: '::', - _0: _user$project$Map$viewPoints(pointCount), + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p21), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p22), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), _1: {ctor: '[]'} } } }, - content)); - }); -var _user$project$Map$exit = function (level) { - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel(level)), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 0, _1: 0}), + {ctor: '[]'}), _1: { ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 0, _1: 32}), - _1: { - ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 32, _1: 0}), - _1: { + _0: A2( + _elm_lang$html$Html$div, + { ctor: '::', - _0: _user$project$Map$tile( - {ctor: '_Tuple2', _0: 32, _1: 32}), + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p21 + 7), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p22 + 10), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }), _1: {ctor: '[]'} - } - } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Los Comestibles'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} } }); }; +var _user$project$Map$HomeTownRoute = {ctor: 'HomeTownRoute'}; var _user$project$Map$home = function (mapSize) { return A2( _elm_lang$html$Html$div, {ctor: '[]'}, { ctor: '::', - _0: _user$project$Map$exit(_user$project$Map$HomeTown), + _0: _user$project$Map$exit(_user$project$Map$HomeTownRoute), _1: { ctor: '::', _0: A2( @@ -13374,13 +13683,13 @@ var _user$project$Map$groceryStore = function (mapSize) { {ctor: '[]'}, { ctor: '::', - _0: _user$project$Map$exit(_user$project$Map$HomeTown), + _0: _user$project$Map$exit(_user$project$Map$HomeTownRoute), _1: { ctor: '::', _0: A2( _user$project$Map$playButton, {ctor: '_Tuple2', _0: 192, _1: 10}, - _user$project$Map$GroceryStore), + _user$project$Map$GroceryStoreRoute), _1: { ctor: '::', _0: A3( @@ -13401,89 +13710,87 @@ var _user$project$Map$groceryStore = function (mapSize) { } }); }; -var _user$project$Map$artStore = F2( - function (play, map) { - var _p55 = play; - if (_p55 === true) { - return A2(_user$project$Map$colorGame, map.points, map.artGame); - } else { - var showCircle = F2( - function (n, _p56) { - var _p57 = _p56; - return A3( - _user$project$Map$colorCircle, - {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p57._0, - _p57._1); - }); - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { +var _user$project$Map$HomeRoute = {ctor: 'HomeRoute'}; +var _user$project$Map$house = function (_p23) { + var _p24 = _p23; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/home.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$HomeRoute)), + _1: { ctor: '::', - _0: _user$project$Map$exit(_user$project$Map$HomeTown), - _1: { - ctor: '::', - _0: A2( - _user$project$Map$playButton, - {ctor: '_Tuple2', _0: 192, _1: 10}, - _user$project$Map$ArtStore(true)), - _1: { + _0: _elm_lang$html$Html_Attributes$style( + { ctor: '::', - _0: _user$project$Map$viewPoints(map.points), - _1: A2( - _elm_lang$core$List$indexedMap, - showCircle, - { + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'black', - _1: _user$project$Dictionary_Spanish$audio('black') - }, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'white', - _1: _user$project$Dictionary_Spanish$audio('white') + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p24._0), + 'px') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'red', - _1: _user$project$Dictionary_Spanish$audio('red') + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p24._1), + 'px') }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'blue', - _1: _user$project$Dictionary_Spanish$audio('blue') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'yellow', - _1: _user$project$Dictionary_Spanish$audio('yellow') - }, - _1: {ctor: '[]'} - } - } + _1: {ctor: '[]'} } } - }) - } - } - }); - } - }); + } + } + }), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); +}; +var _user$project$Map$hometown = function (mapSize) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$house( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$storeBuilding( + {ctor: '_Tuple2', _0: 160, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Map$artStoreBuilding( + {ctor: '_Tuple2', _0: 320, _1: 0}), + _1: {ctor: '[]'} + } + } + }); +}; var _user$project$Map$view = F2( function (mapSize, map) { - var _p58 = map.level; - switch (_p58.ctor) { + var _p25 = map.level; + switch (_p25.ctor) { case 'Home': return _user$project$Map$home(mapSize); case 'HomeTown': @@ -13491,7 +13798,10 @@ var _user$project$Map$view = F2( case 'GroceryStore': return _user$project$Map$groceryStore(mapSize); default: - return A2(_user$project$Map$artStore, _p58._0, map); + return A2( + _elm_lang$html$Html$map, + _user$project$Map$ArtStoreMsg, + _user$project$Store_ArtStore$view(_p25._0)); } }); @@ -13595,10 +13905,14 @@ var _user$project$Main$update = F2( }; } case 'Tick': - var _p6 = _p0._0; - var _p5 = A2(_user$project$Map$tick, _p6, model.map); + var _p7 = _p0._0; + var _p5 = A2( + _user$project$Map$update, + _user$project$Map$Tick(_p7), + model.map); var newMap = _p5._0; var cmd = _p5._1; + var _p6 = _elm_lang$core$Debug$log('Main Tick'); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13606,14 +13920,14 @@ var _user$project$Main$update = F2( { user: A2(_user$project$Bee$animate, model.time, model.user), map: newMap, - time: model.time + _p6 + time: model.time + _p7 }), _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) }; default: - var _p7 = A2(_user$project$Map$update, _p0._0, model.map); - var newMap = _p7._0; - var cmd = _p7._1; + var _p8 = A2(_user$project$Map$update, _p0._0, model.map); + var newMap = _p8._0; + var cmd = _p8._1; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13669,8 +13983,8 @@ var _user$project$Main$subscriptions = function (model) { if (model.pause) { return _elm_lang$core$Platform_Sub$none; } else { - var _p8 = model.mouse; - if (_p8.ctor === 'Up') { + var _p9 = model.mouse; + if (_p9.ctor === 'Up') { return _elm_lang$core$Platform_Sub$batch( { ctor: '::', diff --git a/store/ArtStore.elm b/store/ArtStore.elm new file mode 100644 index 0000000..4baa3e9 --- /dev/null +++ b/store/ArtStore.elm @@ -0,0 +1,727 @@ +module Store.ArtStore exposing (..) + +import Audio +import Dictionary.Spanish as Spanish +import EveryDict exposing (EveryDict) +import Html exposing (Html, button, div, img, text) +import Html.Attributes exposing (class, src, style) +import Html.Events exposing (onClick, onMouseDown) +import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) +import Random +import Random.Extra +import Time exposing (Time) +import Window + + +-- MODEL + + +type alias Model = + { playing : Bool + , game : ArtGame + } + + +type alias ArtGame = + { color : Color + , balls : List MovingBall + , time : Time + , seed : Random.Seed + , win : Bool + , points : Int + } + + +type alias MovingBall = + { id : Int + , color : Color + , pos : Vec2 + , radius : Float + , velocity : Vec2 + , img : String + } + + +type Color + = Red + | Orange + | Yellow + | Green + | Blue + | Purple + + +init : Window.Size -> Random.Seed -> ( Model, Random.Seed ) +init window seed = + let + ( game, newSeed ) = + initArtGame window seed + in + ( { game = game, playing = False }, newSeed ) + + +initArtGame : Window.Size -> Random.Seed -> ( ArtGame, Random.Seed ) +initArtGame window seed = + let + ( balls, newSeed ) = + Random.step (initialBalls window) seed + in + ( { time = 0 + , seed = newSeed + , points = 0 + , color = Yellow + , balls = balls + , win = False + } + , newSeed + ) + + + +-- UPDATE + + +type Msg + = ColorClicked Int Color Color + | Play + | Pause + | PlayAudio String + | Exit + + +update : Window.Size -> Msg -> Model -> ( Model, Cmd Msg ) +update window msg model = + case msg of + ColorClicked id gameColor color -> + if gameColor == color then + let + artGame = + model.game + + newBalls = + artGame.balls |> removeBall id + + win = + List.length newBalls == 0 + + newArtGame = + { artGame | balls = newBalls, win = win } + in + ( { model + -- TODO: add points back in + -- points = map.points + 10 + | game = newArtGame + } + , Audio.play "audio/puff.mp3" + ) + else + ( model, Cmd.none ) + + Play -> + let + ( newArtGame, _ ) = + initArtGame window (Random.initialSeed 0) + in + ( { playing = True, game = newArtGame }, Cmd.none ) + + Pause -> + ( model, Cmd.none ) + + PlayAudio file -> + ( model, Audio.play file ) + + Exit -> + ( model, Cmd.none ) + + +tick : Time -> Window.Size -> Model -> ( Model, Cmd Msg ) +tick timeDelta window model = + let + ( newArtGame, cmd ) = + animateArtGame timeDelta window model.game + in + ( { model + | game = newArtGame + } + , cmd + ) + + + +-- RANDOM + + +get : Int -> List a -> Maybe a +get index list = + list + |> List.drop index + |> List.head + + +randItem : List a -> Random.Generator (Maybe a) +randItem list = + Random.int 0 (List.length list - 1) + |> Random.map (\i -> get i list) + + +randomColor : Random.Seed -> List MovingBall -> ( Color, Random.Seed ) +randomColor seed balls = + Random.step (randItem balls) seed + |> Tuple.mapFirst (Maybe.map (\ball -> ball.color)) + |> Tuple.mapFirst (Maybe.withDefault Red) + + +imageDir = + "imgs/colors/" + + +images : EveryDict Color (List String) +images = + EveryDict.fromList + [ ( Red, [ "red-cherry.png", "red-umbrella.png" ] ) + , ( Orange, [ "orange-tangerine.png" ] ) + , ( Yellow, [ "yellow-banana.png", "yellow-car.png", "yellow-cheese.png" ] ) + , ( Green, [ "green-frog.png", "green-turtle.png" ] ) + , ( Blue, [ "blue-bird.png", "blue-fish.png" ] ) + , ( Purple, [ "purple-octopus.png" ] ) + ] + + +alwaysGen : a -> Random.Generator a +alwaysGen x = + Random.map (\_ -> x) Random.bool + + +randomImage : Color -> Random.Generator String +randomImage color = + let + options = + EveryDict.get color images + in + case options of + Nothing -> + -- should never happen + alwaysGen "" + + Just [] -> + -- should never happen + alwaysGen "" + + Just imageList -> + randItem imageList + |> Random.map (Maybe.withDefault "") + + +randomPosition : Window.Size -> Random.Generator ( Float, Float ) +randomPosition window = + Random.pair + (Random.map toFloat (Random.int 30 window.width)) + (Random.map toFloat (Random.int 30 window.height)) + + +randomVelocity : Random.Generator ( Float, Float ) +randomVelocity = + Random.pair + nonZeroFloat + nonZeroFloat + + +nonZeroFloat : Random.Generator Float +nonZeroFloat = + Random.int -1 1 + |> Random.map + (\i -> + if i == 0 then + 1 + else + i + ) + |> Random.map toFloat + + +colorGen : Random.Generator Color +colorGen = + randItem [ Red, Orange, Yellow, Green, Blue, Purple ] + |> Random.map (Maybe.withDefault Red) + + +randomMovingBall : Window.Size -> Int -> Random.Generator MovingBall +randomMovingBall window id = + colorGen + |> Random.andThen + (\color -> + Random.map3 + (initMovingBall id color) + (randomPosition window) + randomVelocity + (randomImage color) + ) + + +initialBalls : Window.Size -> Random.Generator (List MovingBall) +initialBalls window = + List.range 0 9 + |> List.map (randomMovingBall window) + |> Random.Extra.combine + + +initMovingBall : Int -> Color -> ( Float, Float ) -> ( Float, Float ) -> String -> MovingBall +initMovingBall id color ( x, y ) ( vx, vy ) image = + { id = id + , color = color + , radius = 32 + , pos = vec2 x y + , velocity = vec2 vx vy + , img = image + } + + +removeBall : Int -> List MovingBall -> List MovingBall +removeBall id balls = + List.filter (\ball -> ball.id /= id) balls + + +collisions : List MovingBall -> List MovingBall +collisions balls = + collide [] balls + + +collide : List MovingBall -> List MovingBall -> List MovingBall +collide acc bodies = + case bodies of + [] -> + acc + + h :: t -> + case collideWith h t [] of + [] -> + [] + + h1 :: t1 -> + collide (h1 :: acc) t1 + + +collideWith : MovingBall -> List MovingBall -> List MovingBall -> List MovingBall +collideWith a0 bodies acc = + case bodies of + [] -> + a0 :: acc + + b0 :: bs -> + let + collisionResult = + collision a0 b0 + + ( a1, b1 ) = + resolveCollision collisionResult a0 b0 + in + collideWith a1 bs (b1 :: acc) + + + +-- figure out what collision resolution to use + + +collision : MovingBall -> MovingBall -> CollisionResult +collision body0 body1 = + let + b0b1 = + Vec2.sub body1.pos body0.pos + in + collisionBubbleBubble b0b1 body0.radius body1.radius + + + +-- calculate collision normal, penetration depth of a collision among bubbles +-- takes distance vector b0b1 and the bubble radii as argument + + +collisionBubbleBubble : Vec2 -> Float -> Float -> CollisionResult +collisionBubbleBubble b0b1 radius0 radius1 = + let + radiusb0b1 = + radius0 + radius1 + + distanceSq = + Vec2.lengthSquared b0b1 + + -- simple optimization: doesn't compute sqrt unless necessary + in + if distanceSq == 0 then + CollisionResult (vec2 1 0) radius0 + -- same position, arbitrary normal + else if distanceSq >= radiusb0b1 * radiusb0b1 then + CollisionResult (vec2 1 0) 0 + -- no intersection, arbitrary normal + else + let + d = + sqrt distanceSq + in + CollisionResult (Vec2.scale (1 / d) b0b1) (radiusb0b1 - d) + + +resolveCollision : CollisionResult -> MovingBall -> MovingBall -> ( MovingBall, MovingBall ) +resolveCollision { normal, penetration } b0 b1 = + let + relativeVelocity = + Vec2.sub b1.velocity b0.velocity + + velocityAlongNormal = + Vec2.dot relativeVelocity normal + in + if penetration == 0 || velocityAlongNormal > 0 then + ( b0, b1 ) + -- no collision or velocities separating + else + let + -- impulse scalar + impulse = + normal + + -- impulse vector + in + ( { b0 | velocity = Vec2.sub b0.velocity impulse } + , { b1 | velocity = Vec2.add b1.velocity impulse } + ) + + +initLeftWall windowHeight = + { pos = vec2 0 <| windowHeight / 2 + , halfHeight = windowHeight / 2 + , halfWidth = 1 + } + + +initRightWall windowWidth windowHeight = + { pos = vec2 windowWidth (windowHeight / 2) + , halfHeight = windowHeight / 2 + , halfWidth = 1 + } + + +initTopWall windowWidth = + { pos = vec2 (windowWidth / 2) 0 + , halfHeight = 1 + , halfWidth = windowWidth / 2 + } + + +initBottomWall windowWidth windowHeight = + { pos = vec2 (windowWidth / 2) windowHeight + , halfHeight = 1 + , halfWidth = windowWidth / 2 + } + + +slowdown = + 1 / 10 + + +animateBall : Time -> Window.Size -> MovingBall -> MovingBall +animateBall timeDiff window ball = + let + ( width, height ) = + ( toFloat window.width, toFloat window.height ) + + ( leftWall, rightWall, topWall, bottomWall ) = + ( initLeftWall height + , initRightWall width height + , initTopWall width + , initBottomWall width height + ) + + leftCol = + collisionBoxBubble + ( leftWall.pos, vec2 leftWall.halfWidth leftWall.halfHeight ) + ( ball.pos, ball.radius ) + + x = + getX ball.pos + + y = + getY ball.pos + + newX = + (x + getX ball.velocity * timeDiff * slowdown) + |> clamp (getX leftWall.pos) (getX rightWall.pos) + + newY = + (y + getY ball.velocity * timeDiff * slowdown) + |> clamp (getY topWall.pos) (getY bottomWall.pos) + + newXVelocity = + if newX == getX leftWall.pos || newX == getX rightWall.pos then + -(getX ball.velocity) + else + getX ball.velocity + + newYVelocity = + if newY == getY topWall.pos || newY == getY bottomWall.pos then + -(getY ball.velocity) + else + getY ball.velocity + in + { ball + | pos = vec2 newX newY + , velocity = vec2 newXVelocity newYVelocity + } + + +type alias CollisionResult = + { normal : Vec2, penetration : Float } + + +{-| collide a box with a bubble + + - takes position and half-length of box, position and radius of bubble + +-} +collisionBoxBubble : ( Vec2, Vec2 ) -> ( Vec2, Float ) -> CollisionResult +collisionBoxBubble ( posBox, boxExtents ) ( posBubble, bubbleRadius ) = + let + dist = + Vec2.sub posBubble posBox + + ( dx, dy ) = + ( Vec2.getX dist, Vec2.getY dist ) + + ( boxX, boxY ) = + ( Vec2.getX boxExtents, Vec2.getY boxExtents ) + + c = + vec2 (clamp -boxX boxX dx) (clamp -boxY boxY dy) + + -- closest point on box to center of bubble + ( cx, cy ) = + ( Vec2.getX c, Vec2.getY c ) + + ( closest, inside ) = + if + --circle is outside + dist /= c + then + ( c, False ) + else if + -- circle is inside + abs dx > abs dy + then + -- clamp center to closest edge + if cx > 0 then + ( vec2 boxX cy, True ) + else + ( vec2 -boxX cy, True ) + else if cy > 0 then + ( vec2 cx boxY, True ) + else + ( vec2 cx -boxY, True ) + + normal = + Vec2.sub dist closest + + normalLenSq = + Vec2.lengthSquared normal + in + if normalLenSq > bubbleRadius * bubbleRadius && not inside then + CollisionResult (vec2 1 0) 0 + else + let + penetration = + bubbleRadius + sqrt normalLenSq + in + if inside then + CollisionResult (Vec2.scale -1 (Vec2.normalize normal)) penetration + else + CollisionResult (Vec2.normalize normal) penetration + + +{-| This is the number of milliseconds we wait +before changing colors +-} +colorSwapTime : Time +colorSwapTime = + 2000 + + +animateArtGame : Time -> Window.Size -> ArtGame -> ( ArtGame, Cmd Msg ) +animateArtGame timeDiff window artGame = + let + _ = + Debug.log "animate art game" "" + + newTime = + artGame.time + timeDiff + + ( ( newColor, newSeed ), timeReset, cmd ) = + if newTime > colorSwapTime then + let + ( randColor, seed ) = + randomColor artGame.seed artGame.balls + in + ( ( randColor, seed ), 0, Audio.play (Spanish.audio <| toString randColor) ) + else + ( ( artGame.color, artGame.seed ), newTime, Cmd.none ) + in + ( { artGame + | time = timeReset + , color = newColor + , seed = newSeed + , balls = + artGame.balls + |> List.map (animateBall timeDiff window) + |> collisions + } + , cmd + ) + + + +-- VIEW + + +{-| artStore : PlayGame -> Map -> Html Msg +artStore play map = +-} +view : Model -> Html Msg +view model = + case model.playing of + True -> + colorGame model.game + + False -> + let + showCircle n ( color, audio ) = + colorCircle ( 96 * n, 96 ) color audio + in + div [] <| + exit Exit + :: playButton ( 192, 10 ) + :: viewPoints model.game.points + :: List.indexedMap showCircle + [ ( "black", Spanish.audio "black" ) + , ( "white", Spanish.audio "white" ) + , ( "red", Spanish.audio "red" ) + , ( "blue", Spanish.audio "blue" ) + , ( "yellow", Spanish.audio "yellow" ) + ] + + +colorCircle : ( Int, Int ) -> String -> String -> Html Msg +colorCircle ( x, y ) color audio = + div + [ style + [ ( "border-radius", "50%" ) + , ( "background-color", color ) + , ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "64px" ) + , ( "height", "64px" ) + ] + , onClick (PlayAudio audio) + ] + [] + + +colorGame : ArtGame -> Html Msg +colorGame game = + let + content = + if game.win then + [ div [] + [ text "You Win!!!!!!" ] + ] + else + List.map (colorBall game.color) game.balls + in + div [] + ([ backButton ( 130, 0 ) + , text ("Color: " ++ Spanish.translate (toString game.color)) + , viewPoints game.points + ] + ++ content + ) + + +colorBall : Color -> MovingBall -> Html Msg +colorBall gameColor ball = + div + [ style + [ ( "border-radius", "50%" ) + + -- , ( "background-color", toString ball.color ) + , ( "background-image", "url(" ++ imageDir ++ ball.img ++ ")" ) + , ( "background-size", "contain" ) + , ( "background-repeat", "no-repeat" ) + , ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", (toString <| getX ball.pos) ++ "px" ) + , ( "top", (toString <| getY ball.pos) ++ "px" ) + , ( "width", toString (ball.radius * 2) ++ "px" ) + , ( "height", toString (ball.radius * 2) ++ "px" ) + ] + , onMouseDown (ColorClicked ball.id gameColor ball.color) + ] + [] + + +viewPoints : Int -> Html msg +viewPoints count = + Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] + + +playButton : ( Int, Int ) -> Html Msg +playButton ( x, y ) = + button + [ style + [ ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "128px" ) + , ( "height", "64px" ) + ] + , onClick Play + ] + [ text "Play!" ] + + +backButton : ( Int, Int ) -> Html Msg +backButton ( x, y ) = + button + [ style + [ ( "border", "1px solid black" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + , ( "width", "128px" ) + , ( "height", "64px" ) + ] + , onClick Pause + ] + [ text "Back" ] + + +exit : Msg -> Html Msg +exit exitMsg = + div [ onClick exitMsg ] + [ tile ( 0, 0 ) + , tile ( 0, 32 ) + , tile ( 32, 0 ) + , tile ( 32, 32 ) + ] + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", toString (x - 32) ++ "px" ) + , ( "top", toString (y - 32) ++ "px" ) + ] + ] + [] From f95ff17b9aa89ad7baf8d17c895ddeaf67d49d2c Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sat, 27 May 2017 19:52:32 -0700 Subject: [PATCH 23/33] added french --- Main.elm | 78 +- Map.elm | 106 ++- audio/amarillo.m4a | Bin 25992 -> 0 bytes audio/azul.m4a | Bin 25828 -> 0 bytes audio/blanco.m4a | Bin 24941 -> 0 bytes audio/french/asul.mp3 | Bin 0 -> 3936 bytes audio/french/berde.mp3 | Bin 0 -> 3072 bytes audio/french/dilaw.mp3 | Bin 0 -> 3264 bytes audio/french/itim.mp3 | Bin 0 -> 3552 bytes audio/french/kahel.mp3 | Bin 0 -> 3168 bytes audio/french/lila.mp3 | Bin 0 -> 2976 bytes audio/french/pula.mp3 | Bin 0 -> 2592 bytes audio/french/puti.mp3 | Bin 0 -> 3360 bytes audio/negro.m4a | Bin 22387 -> 0 bytes audio/rojo.m4a | Bin 20516 -> 0 bytes audio/spanish/amarillo.mp3 | Bin 0 -> 4224 bytes audio/spanish/azul.mp3 | Bin 0 -> 3072 bytes audio/spanish/blanco.mp3 | Bin 0 -> 3744 bytes audio/spanish/naranja.mp3 | Bin 0 -> 4128 bytes audio/spanish/negro.mp3 | Bin 0 -> 3456 bytes audio/spanish/purpura.mp3 | Bin 0 -> 4128 bytes audio/spanish/rojo.mp3 | Bin 0 -> 3552 bytes audio/spanish/verde.mp3 | Bin 0 -> 3168 bytes dictionary/French.elm | 70 ++ dictionary/Spanish.elm | 46 +- dictionary/Translator.elm | 7 + elm-package.json | 1 + elm.js | 1615 ++++++++++++++++++++++++++++-------- store/ArtStore.elm | 74 +- 29 files changed, 1537 insertions(+), 460 deletions(-) delete mode 100644 audio/amarillo.m4a delete mode 100644 audio/azul.m4a delete mode 100644 audio/blanco.m4a create mode 100644 audio/french/asul.mp3 create mode 100644 audio/french/berde.mp3 create mode 100644 audio/french/dilaw.mp3 create mode 100644 audio/french/itim.mp3 create mode 100644 audio/french/kahel.mp3 create mode 100644 audio/french/lila.mp3 create mode 100644 audio/french/pula.mp3 create mode 100644 audio/french/puti.mp3 delete mode 100644 audio/negro.m4a delete mode 100644 audio/rojo.m4a create mode 100644 audio/spanish/amarillo.mp3 create mode 100644 audio/spanish/azul.mp3 create mode 100644 audio/spanish/blanco.mp3 create mode 100644 audio/spanish/naranja.mp3 create mode 100644 audio/spanish/negro.mp3 create mode 100644 audio/spanish/purpura.mp3 create mode 100644 audio/spanish/rojo.mp3 create mode 100644 audio/spanish/verde.mp3 create mode 100644 dictionary/French.elm create mode 100644 dictionary/Translator.elm diff --git a/Main.elm b/Main.elm index e3bd31f..30a36ed 100644 --- a/Main.elm +++ b/Main.elm @@ -3,6 +3,9 @@ port module Main exposing (..) import Animation exposing (..) import AnimationFrame import Bee exposing (Bee) +import Dictionary.French as French +import Dictionary.Spanish as Spanish +import Dictionary.Translator exposing (Translator) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (height, src, style, width) import Html.Events exposing (onClick) @@ -38,7 +41,7 @@ init = , time = 0 , window = { width = 100, height = 100 } , pause = False - , map = Map.init { width = 100, height = 100 } Map.Home + , map = Map.init Map.Home } @@ -56,19 +59,14 @@ type Msg | Pause -update : Msg -> Model -> ( Model, Cmd Msg ) -update msg model = +update : Translator -> Msg -> Model -> ( Model, Cmd Msg ) +update translator msg model = case msg of Pause -> ( { model | pause = not model.pause }, Cmd.none ) WindowResize newSize -> - ( { model - | window = newSize - , map = Map.resize newSize model.map - } - , Cmd.none - ) + ( { model | window = newSize }, Cmd.none ) MouseUp _ -> ( { model | mouse = Up }, Cmd.none ) @@ -95,50 +93,46 @@ update msg model = ) Tick timeDelta -> - let - _ = - Debug.log "Main Tick" - - ( newMap, cmd ) = - Map.update (Map.Tick timeDelta) model.map - in - ( { model + { model | user = model.user |> Bee.animate model.time - , map = newMap , time = model.time + timeDelta - } - , cmd |> Cmd.map MapMsg - ) + } + |> updateMap translator (Map.Tick timeDelta) MapMsg msg -> - let - ( newMap, cmd ) = - Map.update msg model.map - in - ( { model | map = newMap }, Cmd.map MapMsg cmd ) + updateMap translator msg model + + +updateMap : Translator -> Map.Msg -> Model -> ( Model, Cmd Msg ) +updateMap translator mapMsg model = + let + ( map, cmd ) = + Map.update translator model.window mapMsg model.map + in + ( { model | map = map }, cmd |> Cmd.map MapMsg ) -- VIEW -view : Model -> Html Msg -view model = +view : Translator -> Model -> Html Msg +view translator model = div [ style [ ( "user-select", "none" ) ] ] [ pauseButton - , mapView model.window model.map + , mapView model.window translator model.map -- , Bee.view Nothing model.user ] -mapView : Window.Size -> Map -> Html Msg -mapView window map = - Map.view window map +mapView : Window.Size -> Translator -> Map -> Html Msg +mapView window translator map = + Map.view window translator map |> Html.map MapMsg @@ -176,10 +170,26 @@ subscriptions model = -- MAIN +spanishTranslator = + { translate = Spanish.translate + , audio = Spanish.audio + } + + +frenchTranslator = + { translate = French.translate + , audio = French.audio + } + + +translator = + frenchTranslator + + main = Html.program { init = ( init, Task.perform WindowResize Window.size ) - , view = view - , update = update + , view = view translator + , update = update translator , subscriptions = subscriptions } diff --git a/Map.elm b/Map.elm index 998ca60..60b751d 100644 --- a/Map.elm +++ b/Map.elm @@ -3,7 +3,7 @@ module Map exposing (..) import Audio import Bee exposing (Bee) import Dict exposing (Dict) -import Dictionary.Spanish as Spanish +import Dictionary.Translator exposing (Translator) import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) @@ -22,16 +22,14 @@ import Window type alias Map = { level : Level - , window : Window.Size , points : Int , seed : Random.Seed } -init : Window.Size -> Level -> Map -init window level = +init : Level -> Map +init level = { level = level - , window = window , points = 0 , seed = Random.initialSeed 0 } @@ -75,8 +73,8 @@ type Route | ArtStoreRoute -update : Msg -> Map -> ( Map, Cmd Msg ) -update msg map = +update : Translator -> Window.Size -> Msg -> Map -> ( Map, Cmd Msg ) +update translator window msg map = case ( map.level, msg ) of ( _, NewLevel route ) -> let @@ -94,7 +92,7 @@ update msg map = ArtStoreRoute -> let ( store, _ ) = - ArtStore.init map.window map.seed + ArtStore.init window map.seed in ArtStore store in @@ -104,36 +102,40 @@ update msg map = ( map, Audio.play file ) ( _, Tick timeDelta ) -> - let - _ = - Debug.log "Map Tick" - in - tick timeDelta map + tick timeDelta window translator map ( ArtStore artStore, ArtStoreMsg msg ) -> let - ( newArtStore, cmd ) = - ArtStore.update map.window msg artStore + ( newArtStore, msgFromPage, cmd ) = + ArtStore.update window translator msg artStore + + points = + case msgFromPage of + ArtStore.NoOp -> + map.points + + ArtStore.AddPoints newPoints -> + map.points + newPoints in - ( { map | level = ArtStore newArtStore }, Cmd.map ArtStoreMsg cmd ) + ( { map + | level = ArtStore newArtStore + , points = points + } + , Cmd.map ArtStoreMsg cmd + ) ( _, _ ) -> -- Should not reach here ( map, Cmd.none ) -resize : Window.Size -> Map -> Map -resize window map = - { map | window = window } - - -tick : Time -> Map -> ( Map, Cmd Msg ) -tick timeDelta map = +tick : Time -> Window.Size -> Translator -> Map -> ( Map, Cmd Msg ) +tick timeDelta window translator map = case map.level of ArtStore store -> let - ( newArtStore, cmd ) = - ArtStore.tick timeDelta map.window store + ( newArtStore, msgFromPage, cmd ) = + ArtStore.update window translator (ArtStore.Tick timeDelta) store in ( { map | level = ArtStore newArtStore }, cmd |> Cmd.map ArtStoreMsg ) @@ -145,21 +147,42 @@ tick timeDelta map = -- VIEW -view : Window.Size -> Map -> Html Msg -view mapSize map = - case map.level of - Home -> - home mapSize +view : Window.Size -> Translator -> Map -> Html Msg +view mapSize translator map = + let + body = + case map.level of + Home -> + home mapSize - HomeTown -> - hometown mapSize + HomeTown -> + hometown mapSize - GroceryStore -> - groceryStore mapSize + GroceryStore -> + groceryStore mapSize + + ArtStore store -> + ArtStore.view translator store + |> Html.map ArtStoreMsg + in + div [] + [ header map + , body + ] + + + +-- HEADER - ArtStore store -> - ArtStore.view store - |> Html.map ArtStoreMsg + +header : Map -> Html Msg +header map = + viewPoints map.points + + +viewPoints : Int -> Html msg +viewPoints count = + Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] @@ -297,15 +320,6 @@ groceryItem ( x, y ) image audio = --- ART STORE - - -viewPoints : Int -> Html msg -viewPoints count = - Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] - - - -- COMMON diff --git a/audio/amarillo.m4a b/audio/amarillo.m4a deleted file mode 100644 index ad2a983eed27ffefb71dca880b84ecd822b388ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25992 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 Ym;ARzQ|rHz_AOK|YDoRJ;{Q|lFSj-ORsaA1 diff --git a/audio/azul.m4a b/audio/azul.m4a deleted file mode 100644 index 35168ee10b0adb00c6dbb35125802d906d7d4fcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25828 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%0A(s}7T&p00DWOkBX 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 as*3*zN@q_0muWwQj?QWHe<}Vyh5rEJOc0v@ diff --git a/audio/french/asul.mp3 b/audio/french/asul.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..21d1c16ce45eea9f00c0760f822d4d1e2c2a2759 GIT binary patch literal 3936 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 L`Cr`sul>IRZ*5a$ literal 0 HcmV?d00001 diff --git a/audio/french/berde.mp3 b/audio/french/berde.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..47b11f4f14696d7be93528f1cc6f67485fdd339b GIT binary patch literal 3072 zcmcK6c|6ox9|!Q?NLdmyW8cl7kY$EZlx6HQ*_W|~v1UmIDWq`6E}_I2i5ZVVL*({^ zOLrJ+mh5qp)?3{QO;W}(zsGc6&+GZO=Z|~-KIeTt=bZ2BoCB^|_W>{x`VGVz3izK^ zVUo{^ieiKgAWKU+E)h4(l)vPtaImT7d5Rh`d&n;~QaivuA;92fhCqBe#r!dt^Wl76 z573XLn2B{^#mMhoya>`SHYSHD8h$s3jg>S9cl`sBt#E5dWdzVx!YHI*5mWUtYynQH z95F-?D;CUYKTN;m^M&(=*X$0Z?ki5fpGZZ*UWRG*G6pCAQ(`IIfj4ba8a6IWNo zI7kf;^rCs}gNjmG?vXC@d?5+SiVI{h33%Dhx}~tM0YILmNWGKJ?IFj%HXm9tvGg+P z7QB1v$O_y3K44b(3vp@0WlLq!nG7R*c^9a2hv8WG&hxp2$WyN zC%u=Q{Gj}#n89E|8o0goS;4P z=8u^88p-no;jRanka-+nP952ivZ6=U7VM?P-s7~-GMb&%W~{1`W9#j|y)L6m5o9d0 z_81m>eT0U(;dxLLad1%mc0RanVN@ho)yYgMY)56)sIU z@4r?if$rK{wQ2h`@Ar|Z%57yE=`lI~AN!*Xx6u8S=hN0=s2@8crXmS_xXW_t*f6FR zcb3c-0L`kW6O9!Y0)j4J76ME!5Q*z+P!u1uq1}hb#x1u@QjAe5Qm%n7?8YiXj zl--uPn5{X2|L1vWKqpYp|n>Od9cmg<5#HZ z_;Sa(a}gO&7^gQnm$&3^-2K!}mOm9Jf6jd%^~rIW6WVH|rLPI!U?u z&+~j6Xb-XlC>SMq$%U!g*=TH$jaw~KiWbwSNSV3zZv5u;o*UppXu@JuzeAV!!kKr= zk#CI%D!+Kh(l6c|R$kNdBWG1OR)Zk7GmhPtGEsfzwdH-Xe(xYBKA7hdpf7b>0M-C0 zL8V#mH2y)Ez&Z9>wW+K~f}CoYKqAx%ztX+Zm~E3Ny1%`nFfWD?JyGlQe%8$!YzqV{nsJC9_tRU-y6irQ@&cxMEdeUx6o|$#Hlgo0b>J$ z$b%J5?xcbBW9G2x`-Rs#L(Y* z$u93< zdH=BrGvjQ)_^oZxH%{ucqXuyHJ8Ogxq6SHmV6ckgEu5VjWg7YI@hO8>%&Ls>7D z?$(Abnv^0ZEkL916WqNjK`_{V{zCcUg~~a6=?4|@Fl((&}_=&67WDz>Y&2?j@W^}JYImXHt z*Gh=G;fN`s!1o$7;wyF98r-#<2@;-;q0aj2GP7hb;V7!{+IHo0JL5^s4H(|OrU`k;wX(o4y}rulyBgN#YV zFRT3_c^V(R@^AM&luZhruT~1{WkWkd&)CCzQ&ec)D#&yV$dYLRxo?r@TObnTE<^r^ z0REzuU~I1I)s(O#DD2K*eYTdrzG{_ERtY}pLDO@u6hZm}%R1`4=_Y=c#ADLd&u|AT ztLwu2E~M>l+>=X9-P8Uhm=hdQ&WNmc)qA)+`Up@M7VSkv(n11%f_0^ z$#gr4K6>u`Fw)@4=%F`HoCfKxE!^=<#lR3#`-+l7LKXdA&~XSYNI=ii!@ zgh(CVJtFSF z(nA$s8t%||e}*ZOOtn#HA26Q1pV!5(-j}H{?7bX>uJspUm-~D<15dheO19scb5B`Z6 a{^#fYBmUnJc=;Ls^?xGO|J&uC_WuL2;eH?h literal 0 HcmV?d00001 diff --git a/audio/french/dilaw.mp3 b/audio/french/dilaw.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8cde31cbc7bc3833a821bce6295f7fba1e1506c9 GIT binary patch literal 3264 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 b`j`B>|Cj#H40-wgZ~ng%>p$%IxBdSDxdGe| literal 0 HcmV?d00001 diff --git a/audio/french/itim.mp3 b/audio/french/itim.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f24218b596a5e23b125fb58b75f68313be0edeb4 GIT binary patch literal 3552 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 Sl)wDH{@>>L{~rF^{(k^;1tUBF literal 0 HcmV?d00001 diff --git a/audio/french/kahel.mp3 b/audio/french/kahel.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..85d71a267832c5e74714da0ac9085d2f50604221 GIT binary patch literal 3168 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 TYP|ga)&E}y`9H1x-TprTC1MFj literal 0 HcmV?d00001 diff --git a/audio/french/pula.mp3 b/audio/french/pula.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..01ba38c66a1a4db62693126966d6ecef55c53e59 GIT binary patch literal 2592 zcmcK0dpy&70|)S*F^@}@ZS1%u&83;k;e>|dwpe?Hq1DK8E4d`&Bt6sVGMoFQWTdoA zb~2PY;cQfhToP?lb4kxZE=5OCPRHf6$FE+`d0x-|_4()f`hNd-e?PB}{5`${Kp45N z0a9fXBq|PR9D96QNv0;6hY{-t-x?B9Bp@kk5@7o@~;fWaI7?2xbfY8zke#VCa60JdgzeQ|1} zg_gersa2S*NYT7o4O_vJQ$S7gz-q4~Q0J>YxiuBlubOugCi)mpxrcd|Zv?1$q?Mqx z94xp7ysEf0M2=_Mk!$8E{A8x45opc2Gz4+D@v=1s`CFI0HGN=Rs77g5!){{ImAC_b z$yyuLpgw0h%dmDnk!@2biNJn;VW{I$Je4Sh&M&h<>BpKcs*#L>^Yx8u|tkPBg(m!G%6L^jn9qWj>#yV6R zAKqBDA{jp8Nk3H5h?H4q>JY`64r6#?J*<9ShJ`g%cLf z0nf#BLyjQ2@#)$$^4EK_F8=mWlXr3X03p5VzG+Ceo2CD}%TdHj;?!`2&hw{~9$28B z`4|1BI#k`KI(Z?#PI2<}sRt30X_*;zr2%x3?1lm8qu|SsB4EIf4r@+$wX;)=SYxfO zFRUc8>PCA zggIH=7%6k=DRs&U3qb0F{uVgT<02p#qUYn2-nfRY@uOm7S3;%3R?7AKoiW70{dujV zFXAK0nsDjD{$l8`>qz`tOxR)jnBVWYb`>1D+cGtCZ~orL1LWGvg%9!5JHH?OF%~gg zn-2O`a1pT#cqA>td8x1~yiP6>;N_8hc`P3>+U5CaP?olD=n0;n@}kCS?#Mo=tLje6 zVmkXN3-41F1*?C=Er>cSP7?>w)&i^m#IA z^VO^&Z;+HvB7C3BalAuyCTp?pG zU1pDZ$6kMaL2F{`G0a~7C{0ZaTmqkvq~GJCO$)Z@vSB2&2p_x9P*e4i^_hOayrb&>-V!gYo-^t?^BM>l6YZ% z30QBXS{4X3v;%!#1YE5ZNR`qNQ8j`mo9u0-ujL-&50uY(>zkC)@IN%2d|9eLw7cfm zzS@$JG|ESJSKE1yKEH`%;Toy6_l3MFtDFkKlE%kuCib3*EqIw${X27Hc8Vl(Huwef zsR)1NyFls?o%Wb>{tw-bp&}?#YS~3@_pb`WVM?}cSfrOlA#l?>^MwJUT|w2FPoEmTQC&@&eEx}P7TpBwV}i1SRMMNQJx zIj0d_6Ew-)XBX%fz@sCy07))po3*2(wLRtQ1k|@#gMJy@jrInRkT73Sr%?XqR|9|| b0a(vB@@v0||7B%xpTGUDGyMN4-`f8VV;{J! literal 0 HcmV?d00001 diff --git a/audio/french/puti.mp3 b/audio/french/puti.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..7d30fc0fb7b01f4d1aabbd8412215dcfa5976b55 GIT binary patch literal 3360 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 literal 0 HcmV?d00001 diff --git a/audio/negro.m4a b/audio/negro.m4a deleted file mode 100644 index 3c2552f6b4b5c59e3dd3d7a9881dfc44dc3e885f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22387 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 L4F3-K|B-(I1&R4? diff --git a/audio/rojo.m4a b/audio/rojo.m4a deleted file mode 100644 index 0b39f1586d283352a69b470f85eb0285ac3e5e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20516 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 GpW;8yv67zv diff --git a/audio/spanish/amarillo.mp3 b/audio/spanish/amarillo.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0f99db396d635db1e4eaa6396dad3ce255510a44 GIT binary patch literal 4224 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 U{-4Rz{(}Gde;@OYPyTKHKSsH(9{>OV literal 0 HcmV?d00001 diff --git a/audio/spanish/blanco.mp3 b/audio/spanish/blanco.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5adc93f69916922f5a761d33a23dc045e46b3ea4 GIT binary patch literal 3744 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 F|1Y)faPI&B literal 0 HcmV?d00001 diff --git a/audio/spanish/naranja.mp3 b/audio/spanish/naranja.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e802f5f27c21fbaa1ea968a7468c3ded0a47ce54 GIT binary patch literal 4128 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 literal 0 HcmV?d00001 diff --git a/audio/spanish/negro.mp3 b/audio/spanish/negro.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..76441d5e6d0f9c6aeb1c3581751f1d2091af6f84 GIT binary patch literal 3456 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 bqy8bk>i_=VzKr?bf9LbJTmSvwpZ5O+DBJGZ literal 0 HcmV?d00001 diff --git a/audio/spanish/purpura.mp3 b/audio/spanish/purpura.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..7a823d57d0a16e1188d390b9eaef3e912fc2359e GIT binary patch literal 4128 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 literal 0 HcmV?d00001 diff --git a/audio/spanish/rojo.mp3 b/audio/spanish/rojo.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..939abb595e63a7e1170051eff30f40dc5c00ea23 GIT binary patch literal 3552 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 String +wordToString str = + str + + +wordAudio : Word -> String +wordAudio str = + audioFile (replace "ú" "u" str) + + +findWord : String -> Word +findWord original = + Dict.get (String.toLower original) dictionary + |> Maybe.withDefault original + + +translate : String -> String +translate word = + findWord word |> wordToString + + +audio : String -> String +audio word = + findWord word |> wordAudio + + + +-- HELPERS + + +audioDir = + "audio/french/" + + +audioFile : String -> String +audioFile file = + audioDir ++ file ++ ".mp3" diff --git a/dictionary/Spanish.elm b/dictionary/Spanish.elm index ea1fb5f..5dbf84a 100644 --- a/dictionary/Spanish.elm +++ b/dictionary/Spanish.elm @@ -1,10 +1,11 @@ module Dictionary.Spanish exposing (..) import Dict exposing (Dict) +import String.Extra exposing (replace) type alias Word = - ( String, Audio ) + String type alias Audio = @@ -13,31 +14,37 @@ type alias Audio = dictionary : Dict String Word dictionary = + colors + + +colors : Dict String Word +colors = Dict.fromList - [ ( "red", ( "rojo", "audio/rojo.m4a" ) ) - , ( "orange", ( "naranja", "" ) ) - , ( "yellow", ( "amarillo", "audio/amarillo.m4a" ) ) - , ( "green", ( "verde", "" ) ) - , ( "blue", ( "azul", "audio/azul.m4a" ) ) - , ( "purple", ( "púrpura", "" ) ) - , ( "black", ( "negro", "audio/negro.m4a" ) ) - , ( "white", ( "blanco", "audio/blanco.m4a" ) ) + [ ( "red", "rojo" ) + , ( "orange", "naranja" ) + , ( "yellow", "amarillo" ) + , ( "green", "verde" ) + , ( "blue", "azul" ) + , ( "purple", "púrpura" ) + , ( "black", "negro" ) + , ( "white", "blanco" ) ] wordToString : Word -> String -wordToString ( str, audio ) = +wordToString str = str -wordAudio ( str, audio ) = - audio +wordAudio : Word -> String +wordAudio str = + audioFile (replace "ú" "u" str) findWord : String -> Word findWord original = Dict.get (String.toLower original) dictionary - |> Maybe.withDefault ( original, "" ) + |> Maybe.withDefault original translate : String -> String @@ -48,3 +55,16 @@ translate word = audio : String -> String audio word = findWord word |> wordAudio + + + +-- HELPERS + + +audioDir = + "audio/spanish/" + + +audioFile : String -> String +audioFile file = + audioDir ++ file ++ ".mp3" diff --git a/dictionary/Translator.elm b/dictionary/Translator.elm new file mode 100644 index 0000000..7ee74ca --- /dev/null +++ b/dictionary/Translator.elm @@ -0,0 +1,7 @@ +module Dictionary.Translator exposing (..) + + +type alias Translator = + { translate : String -> String + , audio : String -> String + } diff --git a/elm-package.json b/elm-package.json index 69c92c8..a0daac5 100644 --- a/elm-package.json +++ b/elm-package.json @@ -11,6 +11,7 @@ "eeue56/elm-all-dict": "2.0.1 <= v < 3.0.0", "elm-community/linear-algebra": "3.1.0 <= v < 4.0.0", "elm-community/random-extra": "2.0.0 <= v < 3.0.0", + "elm-community/string-extra": "1.3.3 <= v < 2.0.0", "elm-lang/animation-frame": "1.0.1 <= v < 2.0.0", "elm-lang/core": "5.1.1 <= v < 6.0.0", "elm-lang/html": "2.0.0 <= v < 3.0.0", diff --git a/elm.js b/elm.js index 6751a99..01cf9c1 100644 --- a/elm.js +++ b/elm.js @@ -7454,6 +7454,900 @@ var _elm_community$random_extra$Random_List$shuffle = function (list) { } }; +//import Maybe, Native.List // + +var _elm_lang$core$Native_Regex = function() { + +function escape(str) +{ + return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} +function caseInsensitive(re) +{ + return new RegExp(re.source, 'gi'); +} +function regex(raw) +{ + return new RegExp(raw, 'g'); +} + +function contains(re, string) +{ + return string.match(re) !== null; +} + +function find(n, re, str) +{ + n = n.ctor === 'All' ? Infinity : n._0; + var out = []; + var number = 0; + var string = str; + var lastIndex = re.lastIndex; + var prevLastIndex = -1; + var result; + while (number++ < n && (result = re.exec(string))) + { + if (prevLastIndex === re.lastIndex) break; + var i = result.length - 1; + var subs = new Array(i); + while (i > 0) + { + var submatch = result[i]; + subs[--i] = submatch === undefined + ? _elm_lang$core$Maybe$Nothing + : _elm_lang$core$Maybe$Just(submatch); + } + out.push({ + match: result[0], + submatches: _elm_lang$core$Native_List.fromArray(subs), + index: result.index, + number: number + }); + prevLastIndex = re.lastIndex; + } + re.lastIndex = lastIndex; + return _elm_lang$core$Native_List.fromArray(out); +} + +function replace(n, re, replacer, string) +{ + n = n.ctor === 'All' ? Infinity : n._0; + var count = 0; + function jsReplacer(match) + { + if (count++ >= n) + { + return match; + } + var i = arguments.length - 3; + var submatches = new Array(i); + while (i > 0) + { + var submatch = arguments[i]; + submatches[--i] = submatch === undefined + ? _elm_lang$core$Maybe$Nothing + : _elm_lang$core$Maybe$Just(submatch); + } + return replacer({ + match: match, + submatches: _elm_lang$core$Native_List.fromArray(submatches), + index: arguments[arguments.length - 2], + number: count + }); + } + return string.replace(re, jsReplacer); +} + +function split(n, re, str) +{ + n = n.ctor === 'All' ? Infinity : n._0; + if (n === Infinity) + { + return _elm_lang$core$Native_List.fromArray(str.split(re)); + } + var string = str; + var result; + var out = []; + var start = re.lastIndex; + var restoreLastIndex = re.lastIndex; + while (n--) + { + if (!(result = re.exec(string))) break; + out.push(string.slice(start, result.index)); + start = re.lastIndex; + } + out.push(string.slice(start)); + re.lastIndex = restoreLastIndex; + return _elm_lang$core$Native_List.fromArray(out); +} + +return { + regex: regex, + caseInsensitive: caseInsensitive, + escape: escape, + + contains: F2(contains), + find: F3(find), + replace: F4(replace), + split: F3(split) +}; + +}(); + +var _elm_lang$core$Regex$split = _elm_lang$core$Native_Regex.split; +var _elm_lang$core$Regex$replace = _elm_lang$core$Native_Regex.replace; +var _elm_lang$core$Regex$find = _elm_lang$core$Native_Regex.find; +var _elm_lang$core$Regex$contains = _elm_lang$core$Native_Regex.contains; +var _elm_lang$core$Regex$caseInsensitive = _elm_lang$core$Native_Regex.caseInsensitive; +var _elm_lang$core$Regex$regex = _elm_lang$core$Native_Regex.regex; +var _elm_lang$core$Regex$escape = _elm_lang$core$Native_Regex.escape; +var _elm_lang$core$Regex$Match = F4( + function (a, b, c, d) { + return {match: a, submatches: b, index: c, number: d}; + }); +var _elm_lang$core$Regex$Regex = {ctor: 'Regex'}; +var _elm_lang$core$Regex$AtMost = function (a) { + return {ctor: 'AtMost', _0: a}; +}; +var _elm_lang$core$Regex$All = {ctor: 'All'}; + +var _elm_lang$core$Native_Bitwise = function() { + +return { + and: F2(function and(a, b) { return a & b; }), + or: F2(function or(a, b) { return a | b; }), + xor: F2(function xor(a, b) { return a ^ b; }), + complement: function complement(a) { return ~a; }, + shiftLeftBy: F2(function(offset, a) { return a << offset; }), + shiftRightBy: F2(function(offset, a) { return a >> offset; }), + shiftRightZfBy: F2(function(offset, a) { return a >>> offset; }) +}; + +}(); + +var _elm_lang$core$Bitwise$shiftRightZfBy = _elm_lang$core$Native_Bitwise.shiftRightZfBy; +var _elm_lang$core$Bitwise$shiftRightBy = _elm_lang$core$Native_Bitwise.shiftRightBy; +var _elm_lang$core$Bitwise$shiftLeftBy = _elm_lang$core$Native_Bitwise.shiftLeftBy; +var _elm_lang$core$Bitwise$complement = _elm_lang$core$Native_Bitwise.complement; +var _elm_lang$core$Bitwise$xor = _elm_lang$core$Native_Bitwise.xor; +var _elm_lang$core$Bitwise$or = _elm_lang$core$Native_Bitwise.or; +var _elm_lang$core$Bitwise$and = _elm_lang$core$Native_Bitwise.and; + +var _elm_community$string_extra$String_Extra$nonEmpty = function (string) { + return _elm_lang$core$String$isEmpty(string) ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just(string); +}; +var _elm_community$string_extra$String_Extra$replacementCodePoint = 65533; +var _elm_community$string_extra$String_Extra$toCodePoints = function (string) { + var allCodeUnits = A2( + _elm_lang$core$List$map, + _elm_lang$core$Char$toCode, + _elm_lang$core$String$toList(string)); + var combineAndReverse = F2( + function (codeUnits, accumulated) { + combineAndReverse: + while (true) { + var _p0 = codeUnits; + if (_p0.ctor === '[]') { + return accumulated; + } else { + var _p4 = _p0._0; + var _p3 = _p0._1; + if ((_elm_lang$core$Native_Utils.cmp(_p4, 0) > -1) && (_elm_lang$core$Native_Utils.cmp(_p4, 55295) < 1)) { + var _v1 = _p3, + _v2 = {ctor: '::', _0: _p4, _1: accumulated}; + codeUnits = _v1; + accumulated = _v2; + continue combineAndReverse; + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p4, 55296) > -1) && (_elm_lang$core$Native_Utils.cmp(_p4, 56319) < 1)) { + var _p1 = _p3; + if (_p1.ctor === '[]') { + return {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + } else { + var _p2 = _p1._0; + if ((_elm_lang$core$Native_Utils.cmp(_p2, 56320) > -1) && (_elm_lang$core$Native_Utils.cmp(_p2, 57343) < 1)) { + var codePoint = (65536 + ((_p4 - 55296) * 1024)) + (_p2 - 56320); + var _v4 = _p1._1, + _v5 = {ctor: '::', _0: codePoint, _1: accumulated}; + codeUnits = _v4; + accumulated = _v5; + continue combineAndReverse; + } else { + var _v6 = _p3, + _v7 = {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + codeUnits = _v6; + accumulated = _v7; + continue combineAndReverse; + } + } + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p4, 57344) > -1) && (_elm_lang$core$Native_Utils.cmp(_p4, 65535) < 1)) { + var _v8 = _p3, + _v9 = {ctor: '::', _0: _p4, _1: accumulated}; + codeUnits = _v8; + accumulated = _v9; + continue combineAndReverse; + } else { + var _v10 = _p3, + _v11 = {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + codeUnits = _v10; + accumulated = _v11; + continue combineAndReverse; + } + } + } + } + } + }); + return _elm_lang$core$List$reverse( + A2( + combineAndReverse, + allCodeUnits, + {ctor: '[]'})); +}; +var _elm_community$string_extra$String_Extra$fromCodePoints = function (allCodePoints) { + var splitAndReverse = F2( + function (codePoints, accumulated) { + splitAndReverse: + while (true) { + var _p5 = codePoints; + if (_p5.ctor === '[]') { + return accumulated; + } else { + var _p7 = _p5._1; + var _p6 = _p5._0; + if ((_elm_lang$core$Native_Utils.cmp(_p6, 0) > -1) && (_elm_lang$core$Native_Utils.cmp(_p6, 55295) < 1)) { + var _v13 = _p7, + _v14 = {ctor: '::', _0: _p6, _1: accumulated}; + codePoints = _v13; + accumulated = _v14; + continue splitAndReverse; + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p6, 65536) > -1) && (_elm_lang$core$Native_Utils.cmp(_p6, 1114111) < 1)) { + var subtracted = _p6 - 65536; + var leading = (subtracted >> 10) + 55296; + var trailing = (subtracted & 1023) + 56320; + var _v15 = _p7, + _v16 = { + ctor: '::', + _0: trailing, + _1: {ctor: '::', _0: leading, _1: accumulated} + }; + codePoints = _v15; + accumulated = _v16; + continue splitAndReverse; + } else { + if ((_elm_lang$core$Native_Utils.cmp(_p6, 57344) > -1) && (_elm_lang$core$Native_Utils.cmp(_p6, 65535) < 1)) { + var _v17 = _p7, + _v18 = {ctor: '::', _0: _p6, _1: accumulated}; + codePoints = _v17; + accumulated = _v18; + continue splitAndReverse; + } else { + var _v19 = _p7, + _v20 = {ctor: '::', _0: _elm_community$string_extra$String_Extra$replacementCodePoint, _1: accumulated}; + codePoints = _v19; + accumulated = _v20; + continue splitAndReverse; + } + } + } + } + } + }); + var allCodeUnits = _elm_lang$core$List$reverse( + A2( + splitAndReverse, + allCodePoints, + {ctor: '[]'})); + return _elm_lang$core$String$fromList( + A2(_elm_lang$core$List$map, _elm_lang$core$Char$fromCode, allCodeUnits)); +}; +var _elm_community$string_extra$String_Extra$fromFloat = _elm_lang$core$Basics$toString; +var _elm_community$string_extra$String_Extra$fromInt = _elm_lang$core$Basics$toString; +var _elm_community$string_extra$String_Extra$leftOfBack = F2( + function (pattern, string) { + return A2( + _elm_lang$core$Maybe$withDefault, + '', + A2( + _elm_lang$core$Maybe$map, + A2(_elm_lang$core$Basics$flip, _elm_lang$core$String$left, string), + _elm_lang$core$List$head( + _elm_lang$core$List$reverse( + A2(_elm_lang$core$String$indexes, pattern, string))))); + }); +var _elm_community$string_extra$String_Extra$rightOfBack = F2( + function (pattern, string) { + return A2( + _elm_lang$core$Maybe$withDefault, + '', + A2( + _elm_lang$core$Maybe$map, + function (_p8) { + return A3( + _elm_lang$core$Basics$flip, + _elm_lang$core$String$dropLeft, + string, + A2( + F2( + function (x, y) { + return x + y; + }), + _elm_lang$core$String$length(pattern), + _p8)); + }, + _elm_lang$core$List$head( + _elm_lang$core$List$reverse( + A2(_elm_lang$core$String$indexes, pattern, string))))); + }); +var _elm_community$string_extra$String_Extra$firstResultHelp = F2( + function ($default, list) { + firstResultHelp: + while (true) { + var _p9 = list; + if (_p9.ctor === '[]') { + return $default; + } else { + if (_p9._0.ctor === 'Just') { + return _p9._0._0; + } else { + var _v22 = $default, + _v23 = _p9._1; + $default = _v22; + list = _v23; + continue firstResultHelp; + } + } + } + }); +var _elm_community$string_extra$String_Extra$firstResult = function (list) { + return A2(_elm_community$string_extra$String_Extra$firstResultHelp, '', list); +}; +var _elm_community$string_extra$String_Extra$leftOf = F2( + function (pattern, string) { + return A2( + _elm_lang$core$String$join, + '', + A2( + _elm_lang$core$List$map, + function (_p10) { + return _elm_community$string_extra$String_Extra$firstResult( + function (_) { + return _.submatches; + }(_p10)); + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$AtMost(1), + _elm_lang$core$Regex$regex( + A2( + _elm_lang$core$Basics_ops['++'], + '^(.*?)', + _elm_lang$core$Regex$escape(pattern))), + string))); + }); +var _elm_community$string_extra$String_Extra$rightOf = F2( + function (pattern, string) { + return A2( + _elm_lang$core$String$join, + '', + A2( + _elm_lang$core$List$map, + function (_p11) { + return _elm_community$string_extra$String_Extra$firstResult( + function (_) { + return _.submatches; + }(_p11)); + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$AtMost(1), + _elm_lang$core$Regex$regex( + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Regex$escape(pattern), + '(.*)$')), + string))); + }); +var _elm_community$string_extra$String_Extra$pluralize = F3( + function (singular, plural, count) { + return _elm_lang$core$Native_Utils.eq(count, 1) ? A2(_elm_lang$core$Basics_ops['++'], '1 ', singular) : A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(count), + A2(_elm_lang$core$Basics_ops['++'], ' ', plural)); + }); +var _elm_community$string_extra$String_Extra$stripTags = function (string) { + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('<\\/?[^>]+>'), + _elm_lang$core$Basics$always(''), + string); +}; +var _elm_community$string_extra$String_Extra$toSentenceHelper = F3( + function (lastPart, sentence, list) { + toSentenceHelper: + while (true) { + var _p12 = list; + if (_p12.ctor === '[]') { + return sentence; + } else { + if (_p12._1.ctor === '[]') { + return A2( + _elm_lang$core$Basics_ops['++'], + sentence, + A2(_elm_lang$core$Basics_ops['++'], lastPart, _p12._0)); + } else { + var _v25 = lastPart, + _v26 = A2( + _elm_lang$core$Basics_ops['++'], + sentence, + A2(_elm_lang$core$Basics_ops['++'], ', ', _p12._0)), + _v27 = _p12._1; + lastPart = _v25; + sentence = _v26; + list = _v27; + continue toSentenceHelper; + } + } + } + }); +var _elm_community$string_extra$String_Extra$toSentenceBaseCase = function (list) { + var _p13 = list; + _v28_2: + do { + if (_p13.ctor === '::') { + if (_p13._1.ctor === '[]') { + return _p13._0; + } else { + if (_p13._1._1.ctor === '[]') { + return A2( + _elm_lang$core$Basics_ops['++'], + _p13._0, + A2(_elm_lang$core$Basics_ops['++'], ' and ', _p13._1._0)); + } else { + break _v28_2; + } + } + } else { + break _v28_2; + } + } while(false); + return ''; +}; +var _elm_community$string_extra$String_Extra$toSentenceOxford = function (list) { + var _p14 = list; + if (((_p14.ctor === '::') && (_p14._1.ctor === '::')) && (_p14._1._1.ctor === '::')) { + return A3( + _elm_community$string_extra$String_Extra$toSentenceHelper, + ', and ', + A2( + _elm_lang$core$Basics_ops['++'], + _p14._0, + A2(_elm_lang$core$Basics_ops['++'], ', ', _p14._1._0)), + {ctor: '::', _0: _p14._1._1._0, _1: _p14._1._1._1}); + } else { + return _elm_community$string_extra$String_Extra$toSentenceBaseCase(list); + } +}; +var _elm_community$string_extra$String_Extra$toSentence = function (list) { + var _p15 = list; + if (((_p15.ctor === '::') && (_p15._1.ctor === '::')) && (_p15._1._1.ctor === '::')) { + return A3( + _elm_community$string_extra$String_Extra$toSentenceHelper, + ' and ', + A2( + _elm_lang$core$Basics_ops['++'], + _p15._0, + A2(_elm_lang$core$Basics_ops['++'], ', ', _p15._1._0)), + {ctor: '::', _0: _p15._1._1._0, _1: _p15._1._1._1}); + } else { + return _elm_community$string_extra$String_Extra$toSentenceBaseCase(list); + } +}; +var _elm_community$string_extra$String_Extra$ellipsisWith = F3( + function (howLong, append, string) { + return (_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$String$length(string), + howLong) < 1) ? string : A2( + _elm_lang$core$Basics_ops['++'], + A2( + _elm_lang$core$String$left, + howLong - _elm_lang$core$String$length(append), + string), + append); + }); +var _elm_community$string_extra$String_Extra$ellipsis = F2( + function (howLong, string) { + return A3(_elm_community$string_extra$String_Extra$ellipsisWith, howLong, '...', string); + }); +var _elm_community$string_extra$String_Extra$countOccurrences = F2( + function (needle, haystack) { + return (_elm_lang$core$Native_Utils.eq( + _elm_lang$core$String$length(needle), + 0) || _elm_lang$core$Native_Utils.eq( + _elm_lang$core$String$length(haystack), + 0)) ? 0 : _elm_lang$core$List$length( + A2(_elm_lang$core$String$indexes, needle, haystack)); + }); +var _elm_community$string_extra$String_Extra$unindent = function (multilineSting) { + var isNotWhitespace = function ($char) { + return (!_elm_lang$core$Native_Utils.eq( + $char, + _elm_lang$core$Native_Utils.chr(' '))) && (!_elm_lang$core$Native_Utils.eq( + $char, + _elm_lang$core$Native_Utils.chr('\t'))); + }; + var countLeadingWhitespace = F2( + function (count, line) { + countLeadingWhitespace: + while (true) { + var _p16 = _elm_lang$core$String$uncons(line); + if (_p16.ctor === 'Nothing') { + return count; + } else { + var _p18 = _p16._0._1; + var _p17 = _p16._0._0; + switch (_p17.valueOf()) { + case ' ': + var _v33 = count + 1, + _v34 = _p18; + count = _v33; + line = _v34; + continue countLeadingWhitespace; + case '\t': + var _v35 = count + 1, + _v36 = _p18; + count = _v35; + line = _v36; + continue countLeadingWhitespace; + default: + return count; + } + } + } + }); + var lines = _elm_lang$core$String$lines(multilineSting); + var minLead = A2( + _elm_lang$core$Maybe$withDefault, + 0, + _elm_lang$core$List$minimum( + A2( + _elm_lang$core$List$map, + countLeadingWhitespace(0), + A2( + _elm_lang$core$List$filter, + _elm_lang$core$String$any(isNotWhitespace), + lines)))); + return A2( + _elm_lang$core$String$join, + '\n', + A2( + _elm_lang$core$List$map, + _elm_lang$core$String$dropLeft(minLead), + lines)); +}; +var _elm_community$string_extra$String_Extra$dasherize = function (string) { + return _elm_lang$core$String$toLower( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[_-\\s]+'), + _elm_lang$core$Basics$always('-'), + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('([A-Z])'), + function (_p19) { + return A2( + _elm_lang$core$String$append, + '-', + function (_) { + return _.match; + }(_p19)); + }, + _elm_lang$core$String$trim(string)))); +}; +var _elm_community$string_extra$String_Extra$underscored = function (string) { + return _elm_lang$core$String$toLower( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[_-\\s]+'), + _elm_lang$core$Basics$always('_'), + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('([a-z\\d])([A-Z]+)'), + function (_p20) { + return A2( + _elm_lang$core$String$join, + '_', + A2( + _elm_lang$core$List$filterMap, + _elm_lang$core$Basics$identity, + function (_) { + return _.submatches; + }(_p20))); + }, + _elm_lang$core$String$trim(string)))); +}; +var _elm_community$string_extra$String_Extra$unsurround = F2( + function (wrap, string) { + if (A2(_elm_lang$core$String$startsWith, wrap, string) && A2(_elm_lang$core$String$endsWith, wrap, string)) { + var length = _elm_lang$core$String$length(wrap); + return A2( + _elm_lang$core$String$dropRight, + length, + A2(_elm_lang$core$String$dropLeft, length, string)); + } else { + return string; + } + }); +var _elm_community$string_extra$String_Extra$unquote = function (string) { + return A2(_elm_community$string_extra$String_Extra$unsurround, '\"', string); +}; +var _elm_community$string_extra$String_Extra$surround = F2( + function (wrap, string) { + return A2( + _elm_lang$core$Basics_ops['++'], + wrap, + A2(_elm_lang$core$Basics_ops['++'], string, wrap)); + }); +var _elm_community$string_extra$String_Extra$quote = function (string) { + return A2(_elm_community$string_extra$String_Extra$surround, '\"', string); +}; +var _elm_community$string_extra$String_Extra$camelize = function (string) { + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[-_\\s]+(.)?'), + function (_p21) { + var _p22 = _p21; + var _p23 = _p22.submatches; + if ((_p23.ctor === '::') && (_p23._0.ctor === 'Just')) { + return _elm_lang$core$String$toUpper(_p23._0._0); + } else { + return ''; + } + }, + _elm_lang$core$String$trim(string)); +}; +var _elm_community$string_extra$String_Extra$isBlank = function (string) { + return A2( + _elm_lang$core$Regex$contains, + _elm_lang$core$Regex$regex('^\\s*$'), + string); +}; +var _elm_community$string_extra$String_Extra$clean = function (string) { + return _elm_lang$core$String$trim( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('\\s\\s+'), + _elm_lang$core$Basics$always(' '), + string)); +}; +var _elm_community$string_extra$String_Extra$softBreakRegexp = function (width) { + return _elm_lang$core$Regex$regex( + A2( + _elm_lang$core$Basics_ops['++'], + '.{1,', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(width), + '}(\\s+|$)|\\S+?(\\s+|$)'))); +}; +var _elm_community$string_extra$String_Extra$softEllipsis = F2( + function (howLong, string) { + return (_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$String$length(string), + howLong) < 1) ? string : A3( + _elm_lang$core$Basics$flip, + _elm_lang$core$String$append, + '...', + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('([\\.,;:\\s])+$'), + _elm_lang$core$Basics$always(''), + A2( + _elm_lang$core$String$join, + '', + A2( + _elm_lang$core$List$map, + function (_) { + return _.match; + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$AtMost(1), + _elm_community$string_extra$String_Extra$softBreakRegexp(howLong), + string))))); + }); +var _elm_community$string_extra$String_Extra$softBreak = F2( + function (width, string) { + return (_elm_lang$core$Native_Utils.cmp(width, 0) < 1) ? {ctor: '[]'} : A2( + _elm_lang$core$List$map, + function (_) { + return _.match; + }, + A3( + _elm_lang$core$Regex$find, + _elm_lang$core$Regex$All, + _elm_community$string_extra$String_Extra$softBreakRegexp(width), + string)); + }); +var _elm_community$string_extra$String_Extra$softWrapWith = F3( + function (width, separator, string) { + return A2( + _elm_lang$core$String$join, + separator, + A2(_elm_community$string_extra$String_Extra$softBreak, width, string)); + }); +var _elm_community$string_extra$String_Extra$softWrap = F2( + function (width, string) { + return A3(_elm_community$string_extra$String_Extra$softWrapWith, width, '\n', string); + }); +var _elm_community$string_extra$String_Extra$breaker = F3( + function (width, string, acc) { + breaker: + while (true) { + var _p24 = string; + if (_p24 === '') { + return _elm_lang$core$List$reverse(acc); + } else { + var _v40 = width, + _v41 = A2(_elm_lang$core$String$dropLeft, width, string), + _v42 = { + ctor: '::', + _0: A3(_elm_lang$core$String$slice, 0, width, string), + _1: acc + }; + width = _v40; + string = _v41; + acc = _v42; + continue breaker; + } + } + }); +var _elm_community$string_extra$String_Extra$break = F2( + function (width, string) { + return (_elm_lang$core$Native_Utils.eq(width, 0) || _elm_lang$core$Native_Utils.eq(string, '')) ? { + ctor: '::', + _0: string, + _1: {ctor: '[]'} + } : A3( + _elm_community$string_extra$String_Extra$breaker, + width, + string, + {ctor: '[]'}); + }); +var _elm_community$string_extra$String_Extra$wrapWith = F3( + function (width, separator, string) { + return A2( + _elm_lang$core$String$join, + separator, + A2(_elm_community$string_extra$String_Extra$break, width, string)); + }); +var _elm_community$string_extra$String_Extra$wrap = F2( + function (width, string) { + return A3(_elm_community$string_extra$String_Extra$wrapWith, width, '\n', string); + }); +var _elm_community$string_extra$String_Extra$replaceSlice = F4( + function (substitution, start, end, string) { + return A2( + _elm_lang$core$Basics_ops['++'], + A3(_elm_lang$core$String$slice, 0, start, string), + A2( + _elm_lang$core$Basics_ops['++'], + substitution, + A3( + _elm_lang$core$String$slice, + end, + _elm_lang$core$String$length(string), + string))); + }); +var _elm_community$string_extra$String_Extra$insertAt = F3( + function (insert, pos, string) { + return A4(_elm_community$string_extra$String_Extra$replaceSlice, insert, pos, pos, string); + }); +var _elm_community$string_extra$String_Extra$replace = F3( + function (search, substitution, string) { + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex( + _elm_lang$core$Regex$escape(search)), + function (_p25) { + return substitution; + }, + string); + }); +var _elm_community$string_extra$String_Extra$changeCase = F2( + function (mutator, word) { + return A2( + _elm_lang$core$Maybe$withDefault, + '', + A2( + _elm_lang$core$Maybe$map, + function (_p26) { + var _p27 = _p26; + return A2( + _elm_lang$core$String$cons, + mutator(_p27._0), + _p27._1); + }, + _elm_lang$core$String$uncons(word))); + }); +var _elm_community$string_extra$String_Extra$toSentenceCase = function (word) { + return A2(_elm_community$string_extra$String_Extra$changeCase, _elm_lang$core$Char$toUpper, word); +}; +var _elm_community$string_extra$String_Extra$toTitleCase = function (ws) { + var uppercaseMatch = A3( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('\\w+'), + function (_p28) { + return _elm_community$string_extra$String_Extra$toSentenceCase( + function (_) { + return _.match; + }(_p28)); + }); + return A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('^([a-z])|\\s+([a-z])'), + function (_p29) { + return uppercaseMatch( + function (_) { + return _.match; + }(_p29)); + }, + ws); +}; +var _elm_community$string_extra$String_Extra$classify = function (string) { + return _elm_community$string_extra$String_Extra$toSentenceCase( + A3( + _elm_community$string_extra$String_Extra$replace, + ' ', + '', + _elm_community$string_extra$String_Extra$camelize( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[\\W_]'), + _elm_lang$core$Basics$always(' '), + string)))); +}; +var _elm_community$string_extra$String_Extra$humanize = function (string) { + return _elm_community$string_extra$String_Extra$toSentenceCase( + _elm_lang$core$String$toLower( + _elm_lang$core$String$trim( + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('_id$|[-_\\s]+'), + _elm_lang$core$Basics$always(' '), + A4( + _elm_lang$core$Regex$replace, + _elm_lang$core$Regex$All, + _elm_lang$core$Regex$regex('[A-Z]'), + function (_p30) { + return A2( + _elm_lang$core$String$append, + '-', + function (_) { + return _.match; + }(_p30)); + }, + string))))); +}; +var _elm_community$string_extra$String_Extra$decapitalize = function (word) { + return A2(_elm_community$string_extra$String_Extra$changeCase, _elm_lang$core$Char$toLower, word); +}; + var _elm_lang$animation_frame$Native_AnimationFrame = function() { @@ -11733,71 +12627,45 @@ var _user$project$Bee$Position = F2( return {x: a, y: b}; }); -var _user$project$Dictionary_Spanish$wordAudio = function (_p0) { - var _p1 = _p0; - return _p1._1; +var _user$project$Dictionary_French$audioDir = 'audio/french/'; +var _user$project$Dictionary_French$audioFile = function (file) { + return A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Dictionary_French$audioDir, + A2(_elm_lang$core$Basics_ops['++'], file, '.mp3')); }; -var _user$project$Dictionary_Spanish$wordToString = function (_p2) { - var _p3 = _p2; - return _p3._0; +var _user$project$Dictionary_French$wordAudio = function (str) { + return _user$project$Dictionary_French$audioFile( + A3(_elm_community$string_extra$String_Extra$replace, 'ú', 'u', str)); }; -var _user$project$Dictionary_Spanish$dictionary = _elm_lang$core$Dict$fromList( +var _user$project$Dictionary_French$wordToString = function (str) { + return str; +}; +var _user$project$Dictionary_French$colors = _elm_lang$core$Dict$fromList( { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'red', - _1: {ctor: '_Tuple2', _0: 'rojo', _1: 'audio/rojo.m4a'} - }, + _0: {ctor: '_Tuple2', _0: 'red', _1: 'pula'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'orange', - _1: {ctor: '_Tuple2', _0: 'naranja', _1: ''} - }, + _0: {ctor: '_Tuple2', _0: 'orange', _1: 'kahel'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'yellow', - _1: {ctor: '_Tuple2', _0: 'amarillo', _1: 'audio/amarillo.m4a'} - }, + _0: {ctor: '_Tuple2', _0: 'yellow', _1: 'dilaw'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'green', - _1: {ctor: '_Tuple2', _0: 'verde', _1: ''} - }, + _0: {ctor: '_Tuple2', _0: 'green', _1: 'berde'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'blue', - _1: {ctor: '_Tuple2', _0: 'azul', _1: 'audio/azul.m4a'} - }, + _0: {ctor: '_Tuple2', _0: 'blue', _1: 'asul'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'purple', - _1: {ctor: '_Tuple2', _0: 'púrpura', _1: ''} - }, + _0: {ctor: '_Tuple2', _0: 'purple', _1: 'lila'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'black', - _1: {ctor: '_Tuple2', _0: 'negro', _1: 'audio/negro.m4a'} - }, + _0: {ctor: '_Tuple2', _0: 'black', _1: 'itim'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'white', - _1: {ctor: '_Tuple2', _0: 'blanco', _1: 'audio/blanco.m4a'} - }, + _0: {ctor: '_Tuple2', _0: 'white', _1: 'puti'}, _1: {ctor: '[]'} } } @@ -11807,10 +12675,78 @@ var _user$project$Dictionary_Spanish$dictionary = _elm_lang$core$Dict$fromList( } } }); +var _user$project$Dictionary_French$dictionary = _user$project$Dictionary_French$colors; +var _user$project$Dictionary_French$findWord = function (original) { + return A2( + _elm_lang$core$Maybe$withDefault, + original, + A2( + _elm_lang$core$Dict$get, + _elm_lang$core$String$toLower(original), + _user$project$Dictionary_French$dictionary)); +}; +var _user$project$Dictionary_French$translate = function (word) { + return _user$project$Dictionary_French$wordToString( + _user$project$Dictionary_French$findWord(word)); +}; +var _user$project$Dictionary_French$audio = function (word) { + return _user$project$Dictionary_French$wordAudio( + _user$project$Dictionary_French$findWord(word)); +}; + +var _user$project$Dictionary_Spanish$audioDir = 'audio/spanish/'; +var _user$project$Dictionary_Spanish$audioFile = function (file) { + return A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Dictionary_Spanish$audioDir, + A2(_elm_lang$core$Basics_ops['++'], file, '.mp3')); +}; +var _user$project$Dictionary_Spanish$wordAudio = function (str) { + return _user$project$Dictionary_Spanish$audioFile( + A3(_elm_community$string_extra$String_Extra$replace, 'ú', 'u', str)); +}; +var _user$project$Dictionary_Spanish$wordToString = function (str) { + return str; +}; +var _user$project$Dictionary_Spanish$colors = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'red', _1: 'rojo'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'orange', _1: 'naranja'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'yellow', _1: 'amarillo'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'green', _1: 'verde'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'blue', _1: 'azul'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'purple', _1: 'púrpura'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'black', _1: 'negro'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'white', _1: 'blanco'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }); +var _user$project$Dictionary_Spanish$dictionary = _user$project$Dictionary_Spanish$colors; var _user$project$Dictionary_Spanish$findWord = function (original) { return A2( _elm_lang$core$Maybe$withDefault, - {ctor: '_Tuple2', _0: original, _1: ''}, + original, A2( _elm_lang$core$Dict$get, _elm_lang$core$String$toLower(original), @@ -11825,6 +12761,11 @@ var _user$project$Dictionary_Spanish$audio = function (word) { _user$project$Dictionary_Spanish$findWord(word)); }; +var _user$project$Dictionary_Translator$Translator = F2( + function (a, b) { + return {translate: a, audio: b}; + }); + var _user$project$Store_ArtStore$tile = function (_p0) { var _p1 = _p0; return A2( @@ -11901,24 +12842,6 @@ var _user$project$Store_ArtStore$exit = function (exitMsg) { } }); }; -var _user$project$Store_ArtStore$viewPoints = function (count) { - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$class('points'), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text( - A2( - _elm_lang$core$Basics_ops['++'], - 'Points: ', - _elm_lang$core$Basics$toString(count))), - _1: {ctor: '[]'} - }); -}; var _user$project$Store_ArtStore$colorSwapTime = 2000; var _user$project$Store_ArtStore$slowdown = 1 / 10; var _user$project$Store_ArtStore$initBottomWall = F2( @@ -12297,8 +13220,8 @@ var _user$project$Store_ArtStore$randomColor = F2( _user$project$Store_ArtStore$randItem(balls), seed))); }); -var _user$project$Store_ArtStore$animateArtGame = F3( - function (timeDiff, window, artGame) { +var _user$project$Store_ArtStore$animateArtGame = F4( + function (timeDiff, window, translator, artGame) { var newTime = artGame.time + timeDiff; var _p27 = function () { if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Store_ArtStore$colorSwapTime) > 0) { @@ -12310,7 +13233,7 @@ var _user$project$Store_ArtStore$animateArtGame = F3( _0: {ctor: '_Tuple2', _0: randColor, _1: seed}, _1: 0, _2: _user$project$Audio$play( - _user$project$Dictionary_Spanish$audio( + translator.audio( _elm_lang$core$Basics$toString(randColor))) }; } else { @@ -12344,19 +13267,6 @@ var _user$project$Store_ArtStore$animateArtGame = F3( _1: cmd }; }); -var _user$project$Store_ArtStore$tick = F3( - function (timeDelta, window, model) { - var _p30 = A3(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, model.game); - var newArtGame = _p30._0; - var cmd = _p30._1; - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - model, - {game: newArtGame}), - _1: cmd - }; - }); var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromList( { ctor: '::', @@ -12453,17 +13363,17 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis }); var _user$project$Store_ArtStore$randomImage = function (color) { var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Store_ArtStore$images); - var _p31 = options; - if (_p31.ctor === 'Nothing') { + var _p30 = options; + if (_p30.ctor === 'Nothing') { return _user$project$Store_ArtStore$alwaysGen(''); } else { - if (_p31._0.ctor === '[]') { + if (_p30._0.ctor === '[]') { return _user$project$Store_ArtStore$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Store_ArtStore$randItem(_p31._0)); + _user$project$Store_ArtStore$randItem(_p30._0)); } } }; @@ -12519,12 +13429,12 @@ var _user$project$Store_ArtStore$initialBalls = function (window) { }; var _user$project$Store_ArtStore$initArtGame = F2( function (window, seed) { - var _p32 = A2( + var _p31 = A2( _elm_lang$core$Random$step, _user$project$Store_ArtStore$initialBalls(window), seed); - var balls = _p32._0; - var newSeed = _p32._1; + var balls = _p31._0; + var newSeed = _p31._1; return { ctor: '_Tuple2', _0: {time: 0, seed: newSeed, points: 0, color: _user$project$Store_ArtStore$Yellow, balls: balls, win: false}, @@ -12533,69 +13443,25 @@ var _user$project$Store_ArtStore$initArtGame = F2( }); var _user$project$Store_ArtStore$init = F2( function (window, seed) { - var _p33 = A2(_user$project$Store_ArtStore$initArtGame, window, seed); - var game = _p33._0; - var newSeed = _p33._1; + var _p32 = A2(_user$project$Store_ArtStore$initArtGame, window, seed); + var game = _p32._0; + var newSeed = _p32._1; return { ctor: '_Tuple2', _0: {game: game, playing: false}, _1: newSeed }; }); -var _user$project$Store_ArtStore$update = F3( - function (window, msg, model) { - var _p34 = msg; - switch (_p34.ctor) { - case 'ColorClicked': - if (_elm_lang$core$Native_Utils.eq(_p34._1, _p34._2)) { - var artGame = model.game; - var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p34._0, artGame.balls); - var win = _elm_lang$core$Native_Utils.eq( - _elm_lang$core$List$length(newBalls), - 0); - var newArtGame = _elm_lang$core$Native_Utils.update( - artGame, - {balls: newBalls, win: win}); - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - model, - {game: newArtGame}), - _1: _user$project$Audio$play('audio/puff.mp3') - }; - } else { - return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; - } - case 'Play': - var _p35 = A2( - _user$project$Store_ArtStore$initArtGame, - window, - _elm_lang$core$Random$initialSeed(0)); - var newArtGame = _p35._0; - return { - ctor: '_Tuple2', - _0: {playing: true, game: newArtGame}, - _1: _elm_lang$core$Platform_Cmd$none - }; - case 'Pause': - return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; - case 'PlayAudio': - return { - ctor: '_Tuple2', - _0: model, - _1: _user$project$Audio$play(_p34._0) - }; - default: - return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; - } - }); +var _user$project$Store_ArtStore$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; var _user$project$Store_ArtStore$Exit = {ctor: 'Exit'}; var _user$project$Store_ArtStore$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Store_ArtStore$colorCircle = F3( - function (_p36, color, audio) { - var _p37 = _p36; + function (_p33, color, audio) { + var _p34 = _p33; return A2( _elm_lang$html$Html$div, { @@ -12620,7 +13486,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._0), + _elm_lang$core$Basics$toString(_p34._0), 'px') }, _1: { @@ -12630,7 +13496,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._1), + _elm_lang$core$Basics$toString(_p34._1), 'px') }, _1: { @@ -12658,8 +13524,8 @@ var _user$project$Store_ArtStore$colorCircle = F3( {ctor: '[]'}); }); var _user$project$Store_ArtStore$Pause = {ctor: 'Pause'}; -var _user$project$Store_ArtStore$backButton = function (_p38) { - var _p39 = _p38; +var _user$project$Store_ArtStore$backButton = function (_p35) { + var _p36 = _p35; return A2( _elm_lang$html$Html$button, { @@ -12678,7 +13544,7 @@ var _user$project$Store_ArtStore$backButton = function (_p38) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._0), + _elm_lang$core$Basics$toString(_p36._0), 'px') }, _1: { @@ -12688,7 +13554,7 @@ var _user$project$Store_ArtStore$backButton = function (_p38) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._1), + _elm_lang$core$Basics$toString(_p36._1), 'px') }, _1: { @@ -12717,8 +13583,8 @@ var _user$project$Store_ArtStore$backButton = function (_p38) { }); }; var _user$project$Store_ArtStore$Play = {ctor: 'Play'}; -var _user$project$Store_ArtStore$playButton = function (_p40) { - var _p41 = _p40; +var _user$project$Store_ArtStore$playButton = function (_p37) { + var _p38 = _p37; return A2( _elm_lang$html$Html$button, { @@ -12737,7 +13603,7 @@ var _user$project$Store_ArtStore$playButton = function (_p40) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41._0), + _elm_lang$core$Basics$toString(_p38._0), 'px') }, _1: { @@ -12747,7 +13613,7 @@ var _user$project$Store_ArtStore$playButton = function (_p40) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p41._1), + _elm_lang$core$Basics$toString(_p38._1), 'px') }, _1: { @@ -12876,75 +13742,70 @@ var _user$project$Store_ArtStore$colorBall = F2( }, {ctor: '[]'}); }); -var _user$project$Store_ArtStore$colorGame = function (game) { - var content = game.win ? { - ctor: '::', - _0: A2( +var _user$project$Store_ArtStore$colorGame = F2( + function (translator, game) { + var content = game.win ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('You Win!!!!!!'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } : A2( + _elm_lang$core$List$map, + _user$project$Store_ArtStore$colorBall(game.color), + game.balls); + return A2( _elm_lang$html$Html$div, {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('You Win!!!!!!'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } : A2( - _elm_lang$core$List$map, - _user$project$Store_ArtStore$colorBall(game.color), - game.balls); - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - A2( - _elm_lang$core$Basics_ops['++'], - { - ctor: '::', - _0: _user$project$Store_ArtStore$backButton( - {ctor: '_Tuple2', _0: 130, _1: 0}), - _1: { + A2( + _elm_lang$core$Basics_ops['++'], + { ctor: '::', - _0: _elm_lang$html$Html$text( - A2( - _elm_lang$core$Basics_ops['++'], - 'Color: ', - _user$project$Dictionary_Spanish$translate( - _elm_lang$core$Basics$toString(game.color)))), + _0: _user$project$Store_ArtStore$backButton( + {ctor: '_Tuple2', _0: 130, _1: 0}), _1: { ctor: '::', - _0: _user$project$Store_ArtStore$viewPoints(game.points), + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Color: ', + translator.translate( + _elm_lang$core$Basics$toString(game.color)))), _1: {ctor: '[]'} } - } - }, - content)); -}; -var _user$project$Store_ArtStore$view = function (model) { - var _p42 = model.playing; - if (_p42 === true) { - return _user$project$Store_ArtStore$colorGame(model.game); - } else { - var showCircle = F2( - function (n, _p43) { - var _p44 = _p43; - return A3( - _user$project$Store_ArtStore$colorCircle, - {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p44._0, - _p44._1); - }); - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _user$project$Store_ArtStore$exit(_user$project$Store_ArtStore$Exit), - _1: { + }, + content)); + }); +var _user$project$Store_ArtStore$view = F2( + function (translator, model) { + var _p39 = model.playing; + if (_p39 === true) { + return A2(_user$project$Store_ArtStore$colorGame, translator, model.game); + } else { + var showCircle = F2( + function (n, _p40) { + var _p41 = _p40; + return A3( + _user$project$Store_ArtStore$colorCircle, + {ctor: '_Tuple2', _0: 96 * n, _1: 96}, + _p41._0, + _p41._1); + }); + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { ctor: '::', - _0: _user$project$Store_ArtStore$playButton( - {ctor: '_Tuple2', _0: 192, _1: 10}), + _0: _user$project$Store_ArtStore$exit(_user$project$Store_ArtStore$Exit), _1: { ctor: '::', - _0: _user$project$Store_ArtStore$viewPoints(model.game.points), + _0: _user$project$Store_ArtStore$playButton( + {ctor: '_Tuple2', _0: 192, _1: 10}), _1: A2( _elm_lang$core$List$indexedMap, showCircle, @@ -12953,35 +13814,35 @@ var _user$project$Store_ArtStore$view = function (model) { _0: { ctor: '_Tuple2', _0: 'black', - _1: _user$project$Dictionary_Spanish$audio('black') + _1: translator.audio('black') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', _0: 'white', - _1: _user$project$Dictionary_Spanish$audio('white') + _1: translator.audio('white') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', _0: 'red', - _1: _user$project$Dictionary_Spanish$audio('red') + _1: translator.audio('red') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', _0: 'blue', - _1: _user$project$Dictionary_Spanish$audio('blue') + _1: translator.audio('blue') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', _0: 'yellow', - _1: _user$project$Dictionary_Spanish$audio('yellow') + _1: translator.audio('yellow') }, _1: {ctor: '[]'} } @@ -12990,10 +13851,79 @@ var _user$project$Store_ArtStore$view = function (model) { } }) } - } - }); - } + }); + } + }); +var _user$project$Store_ArtStore$NoOp = {ctor: 'NoOp'}; +var _user$project$Store_ArtStore$tick = F4( + function (timeDelta, window, translator, model) { + var _p42 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); + var newArtGame = _p42._0; + var cmd = _p42._1; + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {game: newArtGame}), + _1: _user$project$Store_ArtStore$NoOp, + _2: cmd + }; + }); +var _user$project$Store_ArtStore$AddPoints = function (a) { + return {ctor: 'AddPoints', _0: a}; }; +var _user$project$Store_ArtStore$update = F4( + function (window, translator, msg, model) { + var _p43 = msg; + switch (_p43.ctor) { + case 'ColorClicked': + if (_elm_lang$core$Native_Utils.eq(_p43._1, _p43._2)) { + var artGame = model.game; + var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p43._0, artGame.balls); + var win = _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length(newBalls), + 0); + var newArtGame = _elm_lang$core$Native_Utils.update( + artGame, + {balls: newBalls, win: win}); + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {playing: !win, game: newArtGame}), + _1: _user$project$Store_ArtStore$AddPoints(10), + _2: _user$project$Audio$play('audio/puff.mp3') + }; + } else { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + } + case 'Play': + var _p44 = A2( + _user$project$Store_ArtStore$initArtGame, + window, + _elm_lang$core$Random$initialSeed(0)); + var newArtGame = _p44._0; + return { + ctor: '_Tuple3', + _0: {playing: true, game: newArtGame}, + _1: _user$project$Store_ArtStore$NoOp, + _2: _elm_lang$core$Platform_Cmd$none + }; + case 'Pause': + return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + case 'PlayAudio': + return { + ctor: '_Tuple3', + _0: model, + _1: _user$project$Store_ArtStore$NoOp, + _2: _user$project$Audio$play(_p43._0) + }; + case 'Exit': + return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + default: + return model.playing ? A4(_user$project$Store_ArtStore$tick, _p43._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + } + }); var _user$project$Map$tile = function (_p0) { var _p1 = _p0; @@ -13073,24 +14003,19 @@ var _user$project$Map$viewPoints = function (count) { _1: {ctor: '[]'} }); }; -var _user$project$Map$resize = F2( - function (window, map) { - return _elm_lang$core$Native_Utils.update( - map, - {window: window}); - }); -var _user$project$Map$init = F2( - function (window, level) { - return { - level: level, - window: window, - points: 0, - seed: _elm_lang$core$Random$initialSeed(0) - }; - }); -var _user$project$Map$Map = F4( - function (a, b, c, d) { - return {level: a, window: b, points: c, seed: d}; +var _user$project$Map$header = function (map) { + return _user$project$Map$viewPoints(map.points); +}; +var _user$project$Map$init = function (level) { + return { + level: level, + points: 0, + seed: _elm_lang$core$Random$initialSeed(0) + }; +}; +var _user$project$Map$Map = F3( + function (a, b, c) { + return {level: a, points: b, seed: c}; }); var _user$project$Map$ArtStore = function (a) { return {ctor: 'ArtStore', _0: a}; @@ -13110,13 +14035,19 @@ var _user$project$Map$Tick = function (a) { var _user$project$Map$ArtStoreMsg = function (a) { return {ctor: 'ArtStoreMsg', _0: a}; }; -var _user$project$Map$tick = F2( - function (timeDelta, map) { +var _user$project$Map$tick = F4( + function (timeDelta, window, translator, map) { var _p2 = map.level; if (_p2.ctor === 'ArtStore') { - var _p3 = A3(_user$project$Store_ArtStore$tick, timeDelta, map.window, _p2._0); + var _p3 = A4( + _user$project$Store_ArtStore$update, + window, + translator, + _user$project$Store_ArtStore$Tick(timeDelta), + _p2._0); var newArtStore = _p3._0; - var cmd = _p3._1; + var msgFromPage = _p3._1; + var cmd = _p3._2; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13130,8 +14061,8 @@ var _user$project$Map$tick = F2( return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; } }); -var _user$project$Map$update = F2( - function (msg, map) { +var _user$project$Map$update = F4( + function (translator, window, msg, map) { var _p4 = {ctor: '_Tuple2', _0: map.level, _1: msg}; switch (_p4._1.ctor) { case 'NewLevel': @@ -13145,7 +14076,7 @@ var _user$project$Map$update = F2( case 'GroceryStoreRoute': return _user$project$Map$GroceryStore; default: - var _p6 = A2(_user$project$Store_ArtStore$init, map.window, map.seed); + var _p6 = A2(_user$project$Store_ArtStore$init, window, map.seed); var store = _p6._0; return _user$project$Map$ArtStore(store); } @@ -13164,19 +14095,28 @@ var _user$project$Map$update = F2( _1: _user$project$Audio$play(_p4._1._0) }; case 'Tick': - var _p7 = _elm_lang$core$Debug$log('Map Tick'); - return A2(_user$project$Map$tick, _p4._1._0, map); + return A4(_user$project$Map$tick, _p4._1._0, window, translator, map); default: if (_p4._0.ctor === 'ArtStore') { - var _p8 = A3(_user$project$Store_ArtStore$update, map.window, _p4._1._0, _p4._0._0); - var newArtStore = _p8._0; - var cmd = _p8._1; + var _p7 = A4(_user$project$Store_ArtStore$update, window, translator, _p4._1._0, _p4._0._0); + var newArtStore = _p7._0; + var msgFromPage = _p7._1; + var cmd = _p7._2; + var points = function () { + var _p8 = msgFromPage; + if (_p8.ctor === 'NoOp') { + return map.points; + } else { + return map.points + _p8._0; + } + }(); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( map, { - level: _user$project$Map$ArtStore(newArtStore) + level: _user$project$Map$ArtStore(newArtStore), + points: points }), _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) }; @@ -13787,24 +14727,41 @@ var _user$project$Map$hometown = function (mapSize) { } }); }; -var _user$project$Map$view = F2( - function (mapSize, map) { - var _p25 = map.level; - switch (_p25.ctor) { - case 'Home': - return _user$project$Map$home(mapSize); - case 'HomeTown': - return _user$project$Map$hometown(mapSize); - case 'GroceryStore': - return _user$project$Map$groceryStore(mapSize); - default: - return A2( - _elm_lang$html$Html$map, - _user$project$Map$ArtStoreMsg, - _user$project$Store_ArtStore$view(_p25._0)); - } +var _user$project$Map$view = F3( + function (mapSize, translator, map) { + var body = function () { + var _p25 = map.level; + switch (_p25.ctor) { + case 'Home': + return _user$project$Map$home(mapSize); + case 'HomeTown': + return _user$project$Map$hometown(mapSize); + case 'GroceryStore': + return _user$project$Map$groceryStore(mapSize); + default: + return A2( + _elm_lang$html$Html$map, + _user$project$Map$ArtStoreMsg, + A2(_user$project$Store_ArtStore$view, translator, _p25._0)); + } + }(); + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Map$header(map), + _1: { + ctor: '::', + _0: body, + _1: {ctor: '[]'} + } + }); }); +var _user$project$Main$frenchTranslator = {translate: _user$project$Dictionary_French$translate, audio: _user$project$Dictionary_French$audio}; +var _user$project$Main$translator = _user$project$Main$frenchTranslator; +var _user$project$Main$spanishTranslator = {translate: _user$project$Dictionary_Spanish$translate, audio: _user$project$Dictionary_Spanish$audio}; var _user$project$Main$Model = F6( function (a, b, c, d, e, f) { return {user: a, mouse: b, time: c, window: d, map: e, pause: f}; @@ -13816,10 +14773,7 @@ var _user$project$Main$init = { time: 0, window: {width: 100, height: 100}, pause: false, - map: A2( - _user$project$Map$init, - {width: 100, height: 100}, - _user$project$Map$Home) + map: _user$project$Map$init(_user$project$Map$Home) }; var _user$project$Main$Down = function (a) { return {ctor: 'Down', _0: a}; @@ -13843,10 +14797,23 @@ var _user$project$Main$Tick = function (a) { var _user$project$Main$MapMsg = function (a) { return {ctor: 'MapMsg', _0: a}; }; -var _user$project$Main$update = F2( - function (msg, model) { - var _p0 = msg; - switch (_p0.ctor) { +var _user$project$Main$updateMap = F3( + function (translator, mapMsg, model) { + var _p0 = A4(_user$project$Map$update, translator, model.window, mapMsg, model.map); + var map = _p0._0; + var cmd = _p0._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + model, + {map: map}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) + }; + }); +var _user$project$Main$update = F3( + function (translator, msg, model) { + var _p1 = msg; + switch (_p1.ctor) { case 'Pause': return { ctor: '_Tuple2', @@ -13856,15 +14823,11 @@ var _user$project$Main$update = F2( _1: _elm_lang$core$Platform_Cmd$none }; case 'WindowResize': - var _p1 = _p0._0; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, - { - window: _p1, - map: A2(_user$project$Map$resize, _p1, model.map) - }), + {window: _p1._0}), _1: _elm_lang$core$Platform_Cmd$none }; case 'MouseUp': @@ -13876,7 +14839,7 @@ var _user$project$Main$update = F2( _1: _elm_lang$core$Platform_Cmd$none }; case 'MouseDown': - var _p2 = _p0._0; + var _p2 = _p1._0; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13888,7 +14851,7 @@ var _user$project$Main$update = F2( _1: _elm_lang$core$Platform_Cmd$none }; case 'Move': - var _p4 = _p0._0; + var _p4 = _p1._0; var _p3 = model.mouse; if (_p3.ctor === 'Up') { return {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none}; @@ -13905,68 +14868,52 @@ var _user$project$Main$update = F2( }; } case 'Tick': - var _p7 = _p0._0; - var _p5 = A2( - _user$project$Map$update, - _user$project$Map$Tick(_p7), - model.map); - var newMap = _p5._0; - var cmd = _p5._1; - var _p6 = _elm_lang$core$Debug$log('Main Tick'); - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( + var _p5 = _p1._0; + return A3( + _user$project$Main$updateMap, + translator, + _user$project$Map$Tick(_p5), + _elm_lang$core$Native_Utils.update( model, { user: A2(_user$project$Bee$animate, model.time, model.user), - map: newMap, - time: model.time + _p7 - }), - _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) - }; + time: model.time + _p5 + })); default: - var _p8 = A2(_user$project$Map$update, _p0._0, model.map); - var newMap = _p8._0; - var cmd = _p8._1; - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - model, - {map: newMap}), - _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Main$MapMsg, cmd) - }; + return A3(_user$project$Main$updateMap, translator, _p1._0, model); } }); -var _user$project$Main$mapView = F2( - function (window, map) { +var _user$project$Main$mapView = F3( + function (window, translator, map) { return A2( _elm_lang$html$Html$map, _user$project$Main$MapMsg, - A2(_user$project$Map$view, window, map)); + A3(_user$project$Map$view, window, translator, map)); }); -var _user$project$Main$view = function (model) { - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _user$project$Main$pauseButton, - _1: { +var _user$project$Main$view = F2( + function (translator, model) { + return A2( + _elm_lang$html$Html$div, + { ctor: '::', - _0: A2(_user$project$Main$mapView, model.window, model.map), + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'user-select', _1: 'none'}, + _1: {ctor: '[]'} + }), _1: {ctor: '[]'} - } - }); -}; + }, + { + ctor: '::', + _0: _user$project$Main$pauseButton, + _1: { + ctor: '::', + _0: A3(_user$project$Main$mapView, model.window, translator, model.map), + _1: {ctor: '[]'} + } + }); + }); var _user$project$Main$MouseUp = function (a) { return {ctor: 'MouseUp', _0: a}; }; @@ -13983,8 +14930,8 @@ var _user$project$Main$subscriptions = function (model) { if (model.pause) { return _elm_lang$core$Platform_Sub$none; } else { - var _p9 = model.mouse; - if (_p9.ctor === 'Up') { + var _p6 = model.mouse; + if (_p6.ctor === 'Up') { return _elm_lang$core$Platform_Sub$batch( { ctor: '::', @@ -14028,8 +14975,8 @@ var _user$project$Main$main = _elm_lang$html$Html$program( _0: _user$project$Main$init, _1: A2(_elm_lang$core$Task$perform, _user$project$Main$WindowResize, _elm_lang$window$Window$size) }, - view: _user$project$Main$view, - update: _user$project$Main$update, + view: _user$project$Main$view(_user$project$Main$translator), + update: _user$project$Main$update(_user$project$Main$translator), subscriptions: _user$project$Main$subscriptions })(); diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 4baa3e9..4793e0f 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -1,7 +1,7 @@ module Store.ArtStore exposing (..) import Audio -import Dictionary.Spanish as Spanish +import Dictionary.Translator exposing (Translator) import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) @@ -87,10 +87,16 @@ type Msg | Pause | PlayAudio String | Exit + | Tick Time -update : Window.Size -> Msg -> Model -> ( Model, Cmd Msg ) -update window msg model = +type MsgFromPage + = AddPoints Int + | NoOp + + +update : Window.Size -> Translator -> Msg -> Model -> ( Model, MsgFromPage, Cmd Msg ) +update window translator msg model = case msg of ColorClicked id gameColor color -> if gameColor == color then @@ -110,39 +116,48 @@ update window msg model = ( { model -- TODO: add points back in -- points = map.points + 10 - | game = newArtGame + | playing = not win + , game = newArtGame } + , AddPoints 10 , Audio.play "audio/puff.mp3" ) else - ( model, Cmd.none ) + ( model, NoOp, Cmd.none ) Play -> let ( newArtGame, _ ) = initArtGame window (Random.initialSeed 0) in - ( { playing = True, game = newArtGame }, Cmd.none ) + ( { playing = True, game = newArtGame }, NoOp, Cmd.none ) Pause -> - ( model, Cmd.none ) + ( model, NoOp, Cmd.none ) PlayAudio file -> - ( model, Audio.play file ) + ( model, NoOp, Audio.play file ) Exit -> - ( model, Cmd.none ) + ( model, NoOp, Cmd.none ) + + Tick timeDelta -> + if model.playing then + tick timeDelta window translator model + else + ( model, NoOp, Cmd.none ) -tick : Time -> Window.Size -> Model -> ( Model, Cmd Msg ) -tick timeDelta window model = +tick : Time -> Window.Size -> Translator -> Model -> ( Model, MsgFromPage, Cmd Msg ) +tick timeDelta window translator model = let ( newArtGame, cmd ) = - animateArtGame timeDelta window model.game + animateArtGame timeDelta window translator model.game in ( { model | game = newArtGame } + , NoOp , cmd ) @@ -543,8 +558,8 @@ colorSwapTime = 2000 -animateArtGame : Time -> Window.Size -> ArtGame -> ( ArtGame, Cmd Msg ) -animateArtGame timeDiff window artGame = +animateArtGame : Time -> Window.Size -> Translator -> ArtGame -> ( ArtGame, Cmd Msg ) +animateArtGame timeDiff window translator artGame = let _ = Debug.log "animate art game" "" @@ -558,7 +573,7 @@ animateArtGame timeDiff window artGame = ( randColor, seed ) = randomColor artGame.seed artGame.balls in - ( ( randColor, seed ), 0, Audio.play (Spanish.audio <| toString randColor) ) + ( ( randColor, seed ), 0, Audio.play (translator.audio <| toString randColor) ) else ( ( artGame.color, artGame.seed ), newTime, Cmd.none ) in @@ -582,11 +597,11 @@ animateArtGame timeDiff window artGame = {-| artStore : PlayGame -> Map -> Html Msg artStore play map = -} -view : Model -> Html Msg -view model = +view : Translator -> Model -> Html Msg +view translator model = case model.playing of True -> - colorGame model.game + colorGame translator model.game False -> let @@ -596,13 +611,12 @@ view model = div [] <| exit Exit :: playButton ( 192, 10 ) - :: viewPoints model.game.points :: List.indexedMap showCircle - [ ( "black", Spanish.audio "black" ) - , ( "white", Spanish.audio "white" ) - , ( "red", Spanish.audio "red" ) - , ( "blue", Spanish.audio "blue" ) - , ( "yellow", Spanish.audio "yellow" ) + [ ( "black", translator.audio "black" ) + , ( "white", translator.audio "white" ) + , ( "red", translator.audio "red" ) + , ( "blue", translator.audio "blue" ) + , ( "yellow", translator.audio "yellow" ) ] @@ -624,8 +638,8 @@ colorCircle ( x, y ) color audio = [] -colorGame : ArtGame -> Html Msg -colorGame game = +colorGame : Translator -> ArtGame -> Html Msg +colorGame translator game = let content = if game.win then @@ -637,8 +651,7 @@ colorGame game = in div [] ([ backButton ( 130, 0 ) - , text ("Color: " ++ Spanish.translate (toString game.color)) - , viewPoints game.points + , text ("Color: " ++ translator.translate (toString game.color)) ] ++ content ) @@ -666,11 +679,6 @@ colorBall gameColor ball = [] -viewPoints : Int -> Html msg -viewPoints count = - Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] - - playButton : ( Int, Int ) -> Html Msg playButton ( x, y ) = button From 811f15b227c7773af770293d05c35b6eaf52eccc Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sat, 27 May 2017 21:08:08 -0700 Subject: [PATCH 24/33] added header --- Main.elm | 2 +- Map.elm | 50 ++++++++++++--- elm.js | 153 ++++++++++++++++++++++++++++++++++++++++++--- index.html | 1 + store/ArtStore.elm | 10 ++- styles.css | 4 ++ 6 files changed, 196 insertions(+), 24 deletions(-) create mode 100644 styles.css diff --git a/Main.elm b/Main.elm index 30a36ed..30d7b17 100644 --- a/Main.elm +++ b/Main.elm @@ -137,7 +137,7 @@ mapView window translator map = pauseButton = - button [ onClick Pause ] [ text "pause" ] + button [ onClick Pause, style [ ( "float", "right" ) ] ] [ text "pause" ] diff --git a/Map.elm b/Map.elm index 60b751d..9cf28c0 100644 --- a/Map.elm +++ b/Map.elm @@ -5,7 +5,7 @@ import Bee exposing (Bee) import Dict exposing (Dict) import Dictionary.Translator exposing (Translator) import EveryDict exposing (EveryDict) -import Html exposing (Html, button, div, img, text) +import Html exposing (Html, button, div, h1, img, text) import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick, onMouseDown) import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) @@ -150,7 +150,7 @@ tick timeDelta window translator map = view : Window.Size -> Translator -> Map -> Html Msg view mapSize translator map = let - body = + level = case map.level of Home -> home mapSize @@ -166,8 +166,8 @@ view mapSize translator map = |> Html.map ArtStoreMsg in div [] - [ header map - , body + [ header mapSize map + , body level ] @@ -175,9 +175,45 @@ view mapSize translator map = -- HEADER -header : Map -> Html Msg -header map = - viewPoints map.points +header : Window.Size -> Map -> Html Msg +header window map = + div + [ style + [ ( "position", "absolute" ) + , ( "top", px 0 ) + , ( "bottom", px 0 ) + , ( "height", px 100 ) + , ( "width", px window.width ) + , ( "border-bottom", "1px solid black" ) + , ( "background-color", "hsl(189, 100%, 50%)" ) + ] + ] + [ h1 [] [ text "Lingua" ] + , viewPoints map.points + ] + + + +-- BODY + + +body : Html Msg -> Html Msg +body level = + div + [ style + [ ( "position", "absolute" ) + , ( "top", px 100 ) + , ( "bottom", px 0 ) + , ( "height", px 100 ) + ] + ] + [ level + ] + + +px : Int -> String +px x = + toString x ++ "px" viewPoints : Int -> Html msg diff --git a/elm.js b/elm.js index 01cf9c1..d04d684 100644 --- a/elm.js +++ b/elm.js @@ -13523,7 +13523,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( }, {ctor: '[]'}); }); -var _user$project$Store_ArtStore$Pause = {ctor: 'Pause'}; +var _user$project$Store_ArtStore$Back = {ctor: 'Back'}; var _user$project$Store_ArtStore$backButton = function (_p35) { var _p36 = _p35; return A2( @@ -13572,7 +13572,7 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { }), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$Pause), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$Back), _1: {ctor: '[]'} } }, @@ -13909,8 +13909,15 @@ var _user$project$Store_ArtStore$update = F4( _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none }; - case 'Pause': - return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + case 'Back': + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {playing: false}), + _1: _user$project$Store_ArtStore$NoOp, + _2: _elm_lang$core$Platform_Cmd$none + }; case 'PlayAudio': return { ctor: '_Tuple3', @@ -14003,9 +14010,126 @@ var _user$project$Map$viewPoints = function (count) { _1: {ctor: '[]'} }); }; -var _user$project$Map$header = function (map) { - return _user$project$Map$viewPoints(map.points); +var _user$project$Map$px = function (x) { + return A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(x), + 'px'); +}; +var _user$project$Map$body = function (level) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Map$px(100) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'bottom', + _1: _user$project$Map$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: _user$project$Map$px(100) + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: level, + _1: {ctor: '[]'} + }); }; +var _user$project$Map$header = F2( + function (window, map) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Map$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'bottom', + _1: _user$project$Map$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: _user$project$Map$px(100) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: _user$project$Map$px(window.width) + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border-bottom', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'hsl(189, 100%, 50%)'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$h1, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Lingua'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _user$project$Map$viewPoints(map.points), + _1: {ctor: '[]'} + } + }); + }); var _user$project$Map$init = function (level) { return { level: level, @@ -14729,7 +14853,7 @@ var _user$project$Map$hometown = function (mapSize) { }; var _user$project$Map$view = F3( function (mapSize, translator, map) { - var body = function () { + var level = function () { var _p25 = map.level; switch (_p25.ctor) { case 'Home': @@ -14750,10 +14874,10 @@ var _user$project$Map$view = F3( {ctor: '[]'}, { ctor: '::', - _0: _user$project$Map$header(map), + _0: A2(_user$project$Map$header, mapSize, map), _1: { ctor: '::', - _0: body, + _0: _user$project$Map$body(level), _1: {ctor: '[]'} } }); @@ -14784,7 +14908,16 @@ var _user$project$Main$pauseButton = A2( { ctor: '::', _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'float', _1: 'right'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } }, { ctor: '::', diff --git a/index.html b/index.html index 14e12e4..27551b3 100644 --- a/index.html +++ b/index.html @@ -2,6 +2,7 @@ Bee + diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 4793e0f..6ac5414 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -84,7 +84,7 @@ initArtGame window seed = type Msg = ColorClicked Int Color Color | Play - | Pause + | Back | PlayAudio String | Exit | Tick Time @@ -114,8 +114,6 @@ update window translator msg model = { artGame | balls = newBalls, win = win } in ( { model - -- TODO: add points back in - -- points = map.points + 10 | playing = not win , game = newArtGame } @@ -132,8 +130,8 @@ update window translator msg model = in ( { playing = True, game = newArtGame }, NoOp, Cmd.none ) - Pause -> - ( model, NoOp, Cmd.none ) + Back -> + ( { model | playing = False }, NoOp, Cmd.none ) PlayAudio file -> ( model, NoOp, Audio.play file ) @@ -706,7 +704,7 @@ backButton ( x, y ) = , ( "width", "128px" ) , ( "height", "64px" ) ] - , onClick Pause + , onClick Back ] [ text "Back" ] diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..22e04a9 --- /dev/null +++ b/styles.css @@ -0,0 +1,4 @@ +body { + border: 0px; + margin: 0px; +} From 450b0bc630c3dee5b64240f0f593bdd73f1f4d17 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sat, 27 May 2017 21:15:42 -0700 Subject: [PATCH 25/33] exit art store working --- Map.elm | 16 ++++++-- elm.js | 96 ++++++++++++++++++++++++---------------------- store/ArtStore.elm | 27 ++++++------- 3 files changed, 74 insertions(+), 65 deletions(-) diff --git a/Map.elm b/Map.elm index 9cf28c0..73aba5a 100644 --- a/Map.elm +++ b/Map.elm @@ -111,14 +111,22 @@ update translator window msg map = points = case msgFromPage of - ArtStore.NoOp -> - map.points - ArtStore.AddPoints newPoints -> map.points + newPoints + + _ -> + map.points + + level = + case msgFromPage of + ArtStore.Exit -> + HomeTown + + _ -> + ArtStore newArtStore in ( { map - | level = ArtStore newArtStore + | level = level , points = points } , Cmd.map ArtStoreMsg cmd diff --git a/elm.js b/elm.js index d04d684..466ed41 100644 --- a/elm.js +++ b/elm.js @@ -13455,7 +13455,7 @@ var _user$project$Store_ArtStore$init = F2( var _user$project$Store_ArtStore$Tick = function (a) { return {ctor: 'Tick', _0: a}; }; -var _user$project$Store_ArtStore$Exit = {ctor: 'Exit'}; +var _user$project$Store_ArtStore$ExitStore = {ctor: 'ExitStore'}; var _user$project$Store_ArtStore$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; @@ -13801,7 +13801,7 @@ var _user$project$Store_ArtStore$view = F2( {ctor: '[]'}, { ctor: '::', - _0: _user$project$Store_ArtStore$exit(_user$project$Store_ArtStore$Exit), + _0: _user$project$Store_ArtStore$exit(_user$project$Store_ArtStore$ExitStore), _1: { ctor: '::', _0: _user$project$Store_ArtStore$playButton( @@ -13869,6 +13869,7 @@ var _user$project$Store_ArtStore$tick = F4( _2: cmd }; }); +var _user$project$Store_ArtStore$Exit = {ctor: 'Exit'}; var _user$project$Store_ArtStore$AddPoints = function (a) { return {ctor: 'AddPoints', _0: a}; }; @@ -13925,8 +13926,8 @@ var _user$project$Store_ArtStore$update = F4( _1: _user$project$Store_ArtStore$NoOp, _2: _user$project$Audio$play(_p43._0) }; - case 'Exit': - return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + case 'ExitStore': + return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; default: return model.playing ? A4(_user$project$Store_ArtStore$tick, _p43._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } @@ -14228,20 +14229,25 @@ var _user$project$Map$update = F4( var cmd = _p7._2; var points = function () { var _p8 = msgFromPage; - if (_p8.ctor === 'NoOp') { + if (_p8.ctor === 'AddPoints') { + return map.points + _p8._0; + } else { return map.points; + } + }(); + var level = function () { + var _p9 = msgFromPage; + if (_p9.ctor === 'Exit') { + return _user$project$Map$HomeTown; } else { - return map.points + _p8._0; + return _user$project$Map$ArtStore(newArtStore); } }(); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( map, - { - level: _user$project$Map$ArtStore(newArtStore), - points: points - }), + {level: level, points: points}), _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) }; } else { @@ -14253,8 +14259,8 @@ var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Map$groceryItem = F3( - function (_p9, image, audio) { - var _p10 = _p9; + function (_p10, image, audio) { + var _p11 = _p10; return A2( _elm_lang$html$Html$img, { @@ -14279,7 +14285,7 @@ var _user$project$Map$groceryItem = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p10._0), + _elm_lang$core$Basics$toString(_p11._0), 'px') }, _1: { @@ -14289,7 +14295,7 @@ var _user$project$Map$groceryItem = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p10._1), + _elm_lang$core$Basics$toString(_p11._1), 'px') }, _1: {ctor: '[]'} @@ -14312,8 +14318,8 @@ var _user$project$Map$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; var _user$project$Map$playButton = F2( - function (_p11, level) { - var _p12 = _p11; + function (_p12, level) { + var _p13 = _p12; return A2( _elm_lang$html$Html$button, { @@ -14332,7 +14338,7 @@ var _user$project$Map$playButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p12._0), + _elm_lang$core$Basics$toString(_p13._0), 'px') }, _1: { @@ -14342,7 +14348,7 @@ var _user$project$Map$playButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p12._1), + _elm_lang$core$Basics$toString(_p13._1), 'px') }, _1: { @@ -14372,8 +14378,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p13, level) { - var _p14 = _p13; + function (_p14, level) { + var _p15 = _p14; return A2( _elm_lang$html$Html$button, { @@ -14392,7 +14398,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p14._0), + _elm_lang$core$Basics$toString(_p15._0), 'px') }, _1: { @@ -14402,7 +14408,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p14._1), + _elm_lang$core$Basics$toString(_p15._1), 'px') }, _1: { @@ -14463,10 +14469,10 @@ var _user$project$Map$exit = function (level) { }); }; var _user$project$Map$ArtStoreRoute = {ctor: 'ArtStoreRoute'}; -var _user$project$Map$artStoreBuilding = function (_p15) { - var _p16 = _p15; - var _p18 = _p16._1; - var _p17 = _p16._0; +var _user$project$Map$artStoreBuilding = function (_p16) { + var _p17 = _p16; + var _p19 = _p17._1; + var _p18 = _p17._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -14500,7 +14506,7 @@ var _user$project$Map$artStoreBuilding = function (_p15) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p17), + _elm_lang$core$Basics$toString(_p18), 'px') }, _1: { @@ -14510,7 +14516,7 @@ var _user$project$Map$artStoreBuilding = function (_p15) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18), + _elm_lang$core$Basics$toString(_p19), 'px') }, _1: {ctor: '[]'} @@ -14556,7 +14562,7 @@ var _user$project$Map$artStoreBuilding = function (_p15) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p17 + 7), + _elm_lang$core$Basics$toString(_p18 + 7), 'px') }, _1: { @@ -14566,7 +14572,7 @@ var _user$project$Map$artStoreBuilding = function (_p15) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18 + 10), + _elm_lang$core$Basics$toString(_p19 + 10), 'px') }, _1: {ctor: '[]'} @@ -14590,10 +14596,10 @@ var _user$project$Map$artStoreBuilding = function (_p15) { }); }; var _user$project$Map$GroceryStoreRoute = {ctor: 'GroceryStoreRoute'}; -var _user$project$Map$storeBuilding = function (_p19) { - var _p20 = _p19; - var _p22 = _p20._1; - var _p21 = _p20._0; +var _user$project$Map$storeBuilding = function (_p20) { + var _p21 = _p20; + var _p23 = _p21._1; + var _p22 = _p21._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -14627,7 +14633,7 @@ var _user$project$Map$storeBuilding = function (_p19) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p21), + _elm_lang$core$Basics$toString(_p22), 'px') }, _1: { @@ -14637,7 +14643,7 @@ var _user$project$Map$storeBuilding = function (_p19) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p22), + _elm_lang$core$Basics$toString(_p23), 'px') }, _1: {ctor: '[]'} @@ -14683,7 +14689,7 @@ var _user$project$Map$storeBuilding = function (_p19) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p21 + 7), + _elm_lang$core$Basics$toString(_p22 + 7), 'px') }, _1: { @@ -14693,7 +14699,7 @@ var _user$project$Map$storeBuilding = function (_p19) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p22 + 10), + _elm_lang$core$Basics$toString(_p23 + 10), 'px') }, _1: {ctor: '[]'} @@ -14775,8 +14781,8 @@ var _user$project$Map$groceryStore = function (mapSize) { }); }; var _user$project$Map$HomeRoute = {ctor: 'HomeRoute'}; -var _user$project$Map$house = function (_p23) { - var _p24 = _p23; +var _user$project$Map$house = function (_p24) { + var _p25 = _p24; return A2( _elm_lang$html$Html$img, { @@ -14805,7 +14811,7 @@ var _user$project$Map$house = function (_p23) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p24._0), + _elm_lang$core$Basics$toString(_p25._0), 'px') }, _1: { @@ -14815,7 +14821,7 @@ var _user$project$Map$house = function (_p23) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p24._1), + _elm_lang$core$Basics$toString(_p25._1), 'px') }, _1: {ctor: '[]'} @@ -14854,8 +14860,8 @@ var _user$project$Map$hometown = function (mapSize) { var _user$project$Map$view = F3( function (mapSize, translator, map) { var level = function () { - var _p25 = map.level; - switch (_p25.ctor) { + var _p26 = map.level; + switch (_p26.ctor) { case 'Home': return _user$project$Map$home(mapSize); case 'HomeTown': @@ -14866,7 +14872,7 @@ var _user$project$Map$view = F3( return A2( _elm_lang$html$Html$map, _user$project$Map$ArtStoreMsg, - A2(_user$project$Store_ArtStore$view, translator, _p25._0)); + A2(_user$project$Store_ArtStore$view, translator, _p26._0)); } }(); return A2( diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 6ac5414..2dad55f 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -86,12 +86,13 @@ type Msg | Play | Back | PlayAudio String - | Exit + | ExitStore | Tick Time type MsgFromPage = AddPoints Int + | Exit | NoOp @@ -136,8 +137,8 @@ update window translator msg model = PlayAudio file -> ( model, NoOp, Audio.play file ) - Exit -> - ( model, NoOp, Cmd.none ) + ExitStore -> + ( model, Exit, Cmd.none ) Tick timeDelta -> if model.playing then @@ -331,10 +332,9 @@ collideWith a0 bodies acc = collideWith a1 bs (b1 :: acc) - --- figure out what collision resolution to use - - +{-| figure out what collision resolution to use +(currently only colliding bubbles) +-} collision : MovingBall -> MovingBall -> CollisionResult collision body0 body1 = let @@ -344,11 +344,9 @@ collision body0 body1 = collisionBubbleBubble b0b1 body0.radius body1.radius - --- calculate collision normal, penetration depth of a collision among bubbles +{-| calculate collision normal, penetration depth of a collision among bubbles -- takes distance vector b0b1 and the bubble radii as argument - - +-} collisionBubbleBubble : Vec2 -> Float -> Float -> CollisionResult collisionBubbleBubble b0b1 radius0 radius1 = let @@ -384,15 +382,12 @@ resolveCollision { normal, penetration } b0 b1 = Vec2.dot relativeVelocity normal in if penetration == 0 || velocityAlongNormal > 0 then - ( b0, b1 ) -- no collision or velocities separating + ( b0, b1 ) else let - -- impulse scalar impulse = normal - - -- impulse vector in ( { b0 | velocity = Vec2.sub b0.velocity impulse } , { b1 | velocity = Vec2.add b1.velocity impulse } @@ -607,7 +602,7 @@ view translator model = colorCircle ( 96 * n, 96 ) color audio in div [] <| - exit Exit + exit ExitStore :: playButton ( 192, 10 ) :: List.indexedMap showCircle [ ( "black", translator.audio "black" ) From ab6e793a3475f40c6e9bf0b8973f81279f521df4 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 28 May 2017 13:23:21 -0700 Subject: [PATCH 26/33] move header out of map to top level --- Main.elm | 50 ++- Map.elm | 54 +--- elm.js | 743 ++++++++++++++++++++++++++------------------- store/ArtStore.elm | 115 +++++-- 4 files changed, 572 insertions(+), 390 deletions(-) diff --git a/Main.elm b/Main.elm index 30d7b17..c6a49df 100644 --- a/Main.elm +++ b/Main.elm @@ -6,8 +6,8 @@ import Bee exposing (Bee) import Dictionary.French as French import Dictionary.Spanish as Spanish import Dictionary.Translator exposing (Translator) -import Html exposing (Html, button, div, img, text) -import Html.Attributes exposing (height, src, style, width) +import Html exposing (Html, button, div, h1, img, text) +import Html.Attributes exposing (class, height, src, style, width) import Html.Events exposing (onClick) import Map exposing (Map) import Mouse @@ -123,7 +123,7 @@ view translator model = [ ( "user-select", "none" ) ] ] - [ pauseButton + [ header model.window model.map , mapView model.window translator model.map -- , Bee.view Nothing model.user @@ -132,14 +132,49 @@ view translator model = mapView : Window.Size -> Translator -> Map -> Html Msg mapView window translator map = - Map.view window translator map - |> Html.map MapMsg + div + [ style + [ ( "position", "absolute" ) + , ( "top", px 110 ) + ] + ] + [ Map.view window translator map + |> Html.map MapMsg + ] + + + +-- HEADER + + +header : Window.Size -> Map -> Html Msg +header window map = + div + [ style + [ ( "position", "absolute" ) + , ( "top", px 0 ) + , ( "bottom", px 0 ) + , ( "height", px 100 ) + , ( "width", px window.width ) + , ( "border-bottom", "1px solid black" ) + , ( "background-color", "hsl(189, 100%, 50%)" ) + ] + ] + [ h1 [] [ text "Lingua" ] + , viewPoints map.points + , pauseButton + ] pauseButton = button [ onClick Pause, style [ ( "float", "right" ) ] ] [ text "pause" ] +viewPoints : Int -> Html msg +viewPoints count = + Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] + + -- SUBSCRIPTIONS @@ -166,6 +201,11 @@ subscriptions model = ] +px : Int -> String +px x = + toString x ++ "px" + + -- MAIN diff --git a/Map.elm b/Map.elm index 73aba5a..0c35f46 100644 --- a/Map.elm +++ b/Map.elm @@ -157,48 +157,19 @@ tick timeDelta window translator map = view : Window.Size -> Translator -> Map -> Html Msg view mapSize translator map = - let - level = - case map.level of - Home -> - home mapSize - - HomeTown -> - hometown mapSize - - GroceryStore -> - groceryStore mapSize - - ArtStore store -> - ArtStore.view translator store - |> Html.map ArtStoreMsg - in - div [] - [ header mapSize map - , body level - ] - - + case map.level of + Home -> + home mapSize --- HEADER + HomeTown -> + hometown mapSize + GroceryStore -> + groceryStore mapSize -header : Window.Size -> Map -> Html Msg -header window map = - div - [ style - [ ( "position", "absolute" ) - , ( "top", px 0 ) - , ( "bottom", px 0 ) - , ( "height", px 100 ) - , ( "width", px window.width ) - , ( "border-bottom", "1px solid black" ) - , ( "background-color", "hsl(189, 100%, 50%)" ) - ] - ] - [ h1 [] [ text "Lingua" ] - , viewPoints map.points - ] + ArtStore store -> + ArtStore.view translator store + |> Html.map ArtStoreMsg @@ -224,11 +195,6 @@ px x = toString x ++ "px" -viewPoints : Int -> Html msg -viewPoints count = - Html.div [ class "points" ] [ text <| "Points: " ++ toString count ] - - -- HOME diff --git a/elm.js b/elm.js index 466ed41..d2c0c6f 100644 --- a/elm.js +++ b/elm.js @@ -12921,6 +12921,7 @@ var _user$project$Store_ArtStore$initMovingBall = F5( img: image }; }); +var _user$project$Store_ArtStore$ballsPerRound = 5; var _user$project$Store_ArtStore$nonZeroFloat = A2( _elm_lang$core$Random$map, _elm_lang$core$Basics$toFloat, @@ -12968,13 +12969,40 @@ var _user$project$Store_ArtStore$randItem = function (list) { 0, _elm_lang$core$List$length(list) - 1)); }; +var _user$project$Store_ArtStore$nextColor = function (model) { + var knownUnknownColors = function () { + var _p10 = model.game.knownUnknownColors; + if (_p10._1.ctor === '::') { + return { + ctor: '_Tuple2', + _0: {ctor: '::', _0: _p10._1._0, _1: _p10._0}, + _1: _p10._1._1 + }; + } else { + return { + ctor: '_Tuple2', + _0: _p10._0, + _1: {ctor: '[]'} + }; + } + }(); + var game = model.game; + var newGame = _elm_lang$core$Native_Utils.update( + game, + {knownUnknownColors: knownUnknownColors}); + return _elm_lang$core$Native_Utils.update( + model, + {game: newGame}); +}; +var _user$project$Store_ArtStore$unknownColors = _elm_lang$core$Tuple$second; +var _user$project$Store_ArtStore$knownColors = _elm_lang$core$Tuple$first; var _user$project$Store_ArtStore$Model = F2( function (a, b) { return {playing: a, game: b}; }); -var _user$project$Store_ArtStore$ArtGame = F6( - function (a, b, c, d, e, f) { - return {color: a, balls: b, time: c, seed: d, win: e, points: f}; +var _user$project$Store_ArtStore$ArtGame = F8( + function (a, b, c, d, e, f, g, h) { + return {color: a, balls: b, time: c, seed: d, finishRound: e, win: f, points: g, knownUnknownColors: h}; }); var _user$project$Store_ArtStore$MovingBall = F6( function (a, b, c, d, e, f) { @@ -13017,21 +13045,21 @@ var _user$project$Store_ArtStore$collideWith = F3( function (a0, bodies, acc) { collideWith: while (true) { - var _p10 = bodies; - if (_p10.ctor === '[]') { + var _p11 = bodies; + if (_p11.ctor === '[]') { return {ctor: '::', _0: a0, _1: acc}; } else { - var _p12 = _p10._0; - var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p12); - var _p11 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p12); - var a1 = _p11._0; - var b1 = _p11._1; - var _v5 = a1, - _v6 = _p10._1, - _v7 = {ctor: '::', _0: b1, _1: acc}; - a0 = _v5; - bodies = _v6; - acc = _v7; + var _p13 = _p11._0; + var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p13); + var _p12 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p13); + var a1 = _p12._0; + var b1 = _p12._1; + var _v6 = a1, + _v7 = _p11._1, + _v8 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v6; + bodies = _v7; + acc = _v8; continue collideWith; } } @@ -13040,22 +13068,22 @@ var _user$project$Store_ArtStore$collide = F2( function (acc, bodies) { collide: while (true) { - var _p13 = bodies; - if (_p13.ctor === '[]') { + var _p14 = bodies; + if (_p14.ctor === '[]') { return acc; } else { - var _p14 = A3( + var _p15 = A3( _user$project$Store_ArtStore$collideWith, - _p13._0, - _p13._1, + _p14._0, + _p14._1, {ctor: '[]'}); - if (_p14.ctor === '[]') { + if (_p15.ctor === '[]') { return {ctor: '[]'}; } else { - var _v10 = {ctor: '::', _0: _p14._0, _1: acc}, - _v11 = _p14._1; - acc = _v10; - bodies = _v11; + var _v11 = {ctor: '::', _0: _p15._0, _1: acc}, + _v12 = _p15._1; + acc = _v11; + bodies = _v12; continue collide; } } @@ -13068,38 +13096,38 @@ var _user$project$Store_ArtStore$collisions = function (balls) { balls); }; var _user$project$Store_ArtStore$collisionBoxBubble = F2( - function (_p16, _p15) { - var _p17 = _p16; - var _p24 = _p17._1; - var _p18 = _p15; - var _p23 = _p18._1; - var _p19 = { + function (_p17, _p16) { + var _p18 = _p17; + var _p25 = _p18._1; + var _p19 = _p16; + var _p24 = _p19._1; + var _p20 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p25), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p25) }; - var boxX = _p19._0; - var boxY = _p19._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); - var _p20 = { + var boxX = _p20._0; + var boxY = _p20._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p19._0, _p18._0); + var _p21 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p20._0; - var dy = _p20._1; + var dx = _p21._0; + var dy = _p21._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p21 = { + var _p22 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p21._0; - var cy = _p21._1; - var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p22._0; + var cy = _p22._1; + var _p23 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -13118,17 +13146,17 @@ var _user$project$Store_ArtStore$collisionBoxBubble = F2( _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p22._0; - var inside = _p22._1; + var closest = _p23._0; + var inside = _p23._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p24 * _p24) > 0) && (!inside)) { return A2( _user$project$Store_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p24 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Store_ArtStore$CollisionResult, A2( @@ -13145,24 +13173,24 @@ var _user$project$Store_ArtStore$animateBall = F3( function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); - var _p25 = { + var _p26 = { ctor: '_Tuple2', _0: _elm_lang$core$Basics$toFloat(window.width), _1: _elm_lang$core$Basics$toFloat(window.height) }; - var width = _p25._0; - var height = _p25._1; - var _p26 = { + var width = _p26._0; + var height = _p26._1; + var _p27 = { ctor: '_Tuple4', _0: _user$project$Store_ArtStore$initLeftWall(height), _1: A2(_user$project$Store_ArtStore$initRightWall, width, height), _2: _user$project$Store_ArtStore$initTopWall(width), _3: A2(_user$project$Store_ArtStore$initBottomWall, width, height) }; - var leftWall = _p26._0; - var rightWall = _p26._1; - var topWall = _p26._2; - var bottomWall = _p26._3; + var leftWall = _p27._0; + var rightWall = _p27._1; + var topWall = _p27._2; + var bottomWall = _p27._3; var leftCol = A2( _user$project$Store_ArtStore$collisionBoxBubble, { @@ -13223,11 +13251,11 @@ var _user$project$Store_ArtStore$randomColor = F2( var _user$project$Store_ArtStore$animateArtGame = F4( function (timeDiff, window, translator, artGame) { var newTime = artGame.time + timeDiff; - var _p27 = function () { + var _p28 = function () { if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Store_ArtStore$colorSwapTime) > 0) { - var _p28 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); - var randColor = _p28._0; - var seed = _p28._1; + var _p29 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); + var randColor = _p29._0; + var seed = _p29._1; return { ctor: '_Tuple3', _0: {ctor: '_Tuple2', _0: randColor, _1: seed}, @@ -13245,11 +13273,11 @@ var _user$project$Store_ArtStore$animateArtGame = F4( }; } }(); - var newColor = _p27._0._0; - var newSeed = _p27._0._1; - var timeReset = _p27._1; - var cmd = _p27._2; - var _p29 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); + var newColor = _p28._0._0; + var newSeed = _p28._0._1; + var timeReset = _p28._1; + var cmd = _p28._2; + var _p30 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13363,51 +13391,28 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis }); var _user$project$Store_ArtStore$randomImage = function (color) { var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Store_ArtStore$images); - var _p30 = options; - if (_p30.ctor === 'Nothing') { + var _p31 = options; + if (_p31.ctor === 'Nothing') { return _user$project$Store_ArtStore$alwaysGen(''); } else { - if (_p30._0.ctor === '[]') { + if (_p31._0.ctor === '[]') { return _user$project$Store_ArtStore$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Store_ArtStore$randItem(_p30._0)); + _user$project$Store_ArtStore$randItem(_p31._0)); } } }; -var _user$project$Store_ArtStore$colorGen = A2( - _elm_lang$core$Random$map, - _elm_lang$core$Maybe$withDefault(_user$project$Store_ArtStore$Red), - _user$project$Store_ArtStore$randItem( - { - ctor: '::', - _0: _user$project$Store_ArtStore$Red, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Orange, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Yellow, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Green, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Blue, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Purple, - _1: {ctor: '[]'} - } - } - } - } - } - })); -var _user$project$Store_ArtStore$randomMovingBall = F2( - function (window, id) { +var _user$project$Store_ArtStore$colorGen = function (colors) { + return A2( + _elm_lang$core$Random$map, + _elm_lang$core$Maybe$withDefault(_user$project$Store_ArtStore$Red), + _user$project$Store_ArtStore$randItem(colors)); +}; +var _user$project$Store_ArtStore$randomMovingBall = F3( + function (window, colors, id) { return A2( _elm_lang$core$Random$andThen, function (color) { @@ -13418,34 +13423,76 @@ var _user$project$Store_ArtStore$randomMovingBall = F2( _user$project$Store_ArtStore$randomVelocity, _user$project$Store_ArtStore$randomImage(color)); }, - _user$project$Store_ArtStore$colorGen); + _user$project$Store_ArtStore$colorGen(colors)); }); -var _user$project$Store_ArtStore$initialBalls = function (window) { - return _elm_community$random_extra$Random_Extra$combine( - A2( - _elm_lang$core$List$map, - _user$project$Store_ArtStore$randomMovingBall(window), - A2(_elm_lang$core$List$range, 0, 9))); -}; -var _user$project$Store_ArtStore$initArtGame = F2( - function (window, seed) { - var _p31 = A2( +var _user$project$Store_ArtStore$initialBalls = F2( + function (window, colors) { + return _elm_community$random_extra$Random_Extra$combine( + A2( + _elm_lang$core$List$map, + A2(_user$project$Store_ArtStore$randomMovingBall, window, colors), + A2(_elm_lang$core$List$range, 0, _user$project$Store_ArtStore$ballsPerRound - 1))); + }); +var _user$project$Store_ArtStore$initArtGame = F3( + function (window, colors, seed) { + var _p32 = A2( _elm_lang$core$Random$step, - _user$project$Store_ArtStore$initialBalls(window), + A2(_user$project$Store_ArtStore$initialBalls, window, colors), seed); - var balls = _p31._0; - var newSeed = _p31._1; + var balls = _p32._0; + var newSeed = _p32._1; return { ctor: '_Tuple2', - _0: {time: 0, seed: newSeed, points: 0, color: _user$project$Store_ArtStore$Yellow, balls: balls, win: false}, + _0: { + time: 0, + seed: newSeed, + points: 0, + color: _user$project$Store_ArtStore$Yellow, + balls: balls, + win: false, + finishRound: false, + knownUnknownColors: { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Red, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Orange, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Yellow, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Green, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Blue, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Purple, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + }, _1: newSeed }; }); var _user$project$Store_ArtStore$init = F2( function (window, seed) { - var _p32 = A2(_user$project$Store_ArtStore$initArtGame, window, seed); - var game = _p32._0; - var newSeed = _p32._1; + var _p33 = A3( + _user$project$Store_ArtStore$initArtGame, + window, + {ctor: '[]'}, + seed); + var game = _p33._0; + var newSeed = _p33._1; return { ctor: '_Tuple2', _0: {game: game, playing: false}, @@ -13460,8 +13507,8 @@ var _user$project$Store_ArtStore$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Store_ArtStore$colorCircle = F3( - function (_p33, color, audio) { - var _p34 = _p33; + function (_p34, color, audio) { + var _p35 = _p34; return A2( _elm_lang$html$Html$div, { @@ -13486,7 +13533,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p34._0), + _elm_lang$core$Basics$toString(_p35._0), 'px') }, _1: { @@ -13496,7 +13543,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p34._1), + _elm_lang$core$Basics$toString(_p35._1), 'px') }, _1: { @@ -13523,9 +13570,10 @@ var _user$project$Store_ArtStore$colorCircle = F3( }, {ctor: '[]'}); }); -var _user$project$Store_ArtStore$Back = {ctor: 'Back'}; -var _user$project$Store_ArtStore$backButton = function (_p35) { - var _p36 = _p35; +var _user$project$Store_ArtStore$NextRound = {ctor: 'NextRound'}; +var _user$project$Store_ArtStore$FinishGame = {ctor: 'FinishGame'}; +var _user$project$Store_ArtStore$backButton = function (_p36) { + var _p37 = _p36; return A2( _elm_lang$html$Html$button, { @@ -13544,7 +13592,7 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36._0), + _elm_lang$core$Basics$toString(_p37._0), 'px') }, _1: { @@ -13554,7 +13602,7 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36._1), + _elm_lang$core$Basics$toString(_p37._1), 'px') }, _1: { @@ -13572,7 +13620,7 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { }), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$Back), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$FinishGame), _1: {ctor: '[]'} } }, @@ -13583,8 +13631,8 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { }); }; var _user$project$Store_ArtStore$Play = {ctor: 'Play'}; -var _user$project$Store_ArtStore$playButton = function (_p37) { - var _p38 = _p37; +var _user$project$Store_ArtStore$playButton = function (_p38) { + var _p39 = _p38; return A2( _elm_lang$html$Html$button, { @@ -13603,7 +13651,7 @@ var _user$project$Store_ArtStore$playButton = function (_p37) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._0), + _elm_lang$core$Basics$toString(_p39._0), 'px') }, _1: { @@ -13613,7 +13661,7 @@ var _user$project$Store_ArtStore$playButton = function (_p37) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._1), + _elm_lang$core$Basics$toString(_p39._1), 'px') }, _1: { @@ -13744,15 +13792,41 @@ var _user$project$Store_ArtStore$colorBall = F2( }); var _user$project$Store_ArtStore$colorGame = F2( function (translator, game) { - var content = game.win ? { + var content = (game.finishRound || game.win) ? { ctor: '::', _0: A2( _elm_lang$html$Html$div, {ctor: '[]'}, { ctor: '::', - _0: _elm_lang$html$Html$text('You Win!!!!!!'), - _1: {ctor: '[]'} + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$NextRound), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Next Round'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$FinishGame), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Finish Early'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } }), _1: {ctor: '[]'} } : A2( @@ -13783,18 +13857,18 @@ var _user$project$Store_ArtStore$colorGame = F2( }); var _user$project$Store_ArtStore$view = F2( function (translator, model) { - var _p39 = model.playing; - if (_p39 === true) { + var _p40 = model.playing; + if (_p40 === true) { return A2(_user$project$Store_ArtStore$colorGame, translator, model.game); } else { var showCircle = F2( - function (n, _p40) { - var _p41 = _p40; + function (n, _p41) { + var _p42 = _p41; return A3( _user$project$Store_ArtStore$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p41._0, - _p41._1); + _p42._0, + _p42._1); }); return A2( _elm_lang$html$Html$div, @@ -13857,9 +13931,9 @@ var _user$project$Store_ArtStore$view = F2( var _user$project$Store_ArtStore$NoOp = {ctor: 'NoOp'}; var _user$project$Store_ArtStore$tick = F4( function (timeDelta, window, translator, model) { - var _p42 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); - var newArtGame = _p42._0; - var cmd = _p42._1; + var _p43 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); + var newArtGame = _p43._0; + var cmd = _p43._1; return { ctor: '_Tuple3', _0: _elm_lang$core$Native_Utils.update( @@ -13875,61 +13949,80 @@ var _user$project$Store_ArtStore$AddPoints = function (a) { }; var _user$project$Store_ArtStore$update = F4( function (window, translator, msg, model) { - var _p43 = msg; - switch (_p43.ctor) { - case 'ColorClicked': - if (_elm_lang$core$Native_Utils.eq(_p43._1, _p43._2)) { - var artGame = model.game; - var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p43._0, artGame.balls); - var win = _elm_lang$core$Native_Utils.eq( - _elm_lang$core$List$length(newBalls), - 0); - var newArtGame = _elm_lang$core$Native_Utils.update( - artGame, - {balls: newBalls, win: win}); + update: + while (true) { + var _p44 = msg; + switch (_p44.ctor) { + case 'ColorClicked': + if (_elm_lang$core$Native_Utils.eq(_p44._1, _p44._2)) { + var artGame = model.game; + var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p44._0, artGame.balls); + var finishRound = _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length(newBalls), + 0); + var win = finishRound && _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length( + _user$project$Store_ArtStore$unknownColors(artGame.knownUnknownColors)), + 0); + var newArtGame = _elm_lang$core$Native_Utils.update( + artGame, + {balls: newBalls, finishRound: finishRound, win: win}); + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {game: newArtGame}), + _1: _user$project$Store_ArtStore$AddPoints(10), + _2: _user$project$Audio$play('audio/puff.mp3') + }; + } else { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + } + case 'Play': + var _p45 = A3( + _user$project$Store_ArtStore$initArtGame, + window, + _user$project$Store_ArtStore$knownColors(model.game.knownUnknownColors), + _elm_lang$core$Random$initialSeed(0)); + var newArtGame = _p45._0; + return { + ctor: '_Tuple3', + _0: _user$project$Store_ArtStore$nextColor( + {playing: true, game: newArtGame}), + _1: _user$project$Store_ArtStore$NoOp, + _2: _elm_lang$core$Platform_Cmd$none + }; + case 'FinishGame': return { ctor: '_Tuple3', _0: _elm_lang$core$Native_Utils.update( model, - {playing: !win, game: newArtGame}), - _1: _user$project$Store_ArtStore$AddPoints(10), - _2: _user$project$Audio$play('audio/puff.mp3') + {playing: false}), + _1: _user$project$Store_ArtStore$NoOp, + _2: _elm_lang$core$Platform_Cmd$none }; - } else { - return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; - } - case 'Play': - var _p44 = A2( - _user$project$Store_ArtStore$initArtGame, - window, - _elm_lang$core$Random$initialSeed(0)); - var newArtGame = _p44._0; - return { - ctor: '_Tuple3', - _0: {playing: true, game: newArtGame}, - _1: _user$project$Store_ArtStore$NoOp, - _2: _elm_lang$core$Platform_Cmd$none - }; - case 'Back': - return { - ctor: '_Tuple3', - _0: _elm_lang$core$Native_Utils.update( - model, - {playing: false}), - _1: _user$project$Store_ArtStore$NoOp, - _2: _elm_lang$core$Platform_Cmd$none - }; - case 'PlayAudio': - return { - ctor: '_Tuple3', - _0: model, - _1: _user$project$Store_ArtStore$NoOp, - _2: _user$project$Audio$play(_p43._0) - }; - case 'ExitStore': - return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; - default: - return model.playing ? A4(_user$project$Store_ArtStore$tick, _p43._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + case 'NextRound': + var _v22 = window, + _v23 = translator, + _v24 = _user$project$Store_ArtStore$Play, + _v25 = _user$project$Store_ArtStore$nextColor(model); + window = _v22; + translator = _v23; + msg = _v24; + model = _v25; + continue update; + case 'PlayAudio': + return { + ctor: '_Tuple3', + _0: model, + _1: _user$project$Store_ArtStore$NoOp, + _2: _user$project$Audio$play(_p44._0) + }; + case 'ExitStore': + return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; + default: + return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p44._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + } } }); @@ -13993,24 +14086,6 @@ var _user$project$Map$tileCountFromPixels = function (pixels) { return _elm_lang$core$Basics$round( _elm_lang$core$Basics$toFloat(pixels) / 32); }; -var _user$project$Map$viewPoints = function (count) { - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$class('points'), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text( - A2( - _elm_lang$core$Basics_ops['++'], - 'Points: ', - _elm_lang$core$Basics$toString(count))), - _1: {ctor: '[]'} - }); -}; var _user$project$Map$px = function (x) { return A2( _elm_lang$core$Basics_ops['++'], @@ -14060,77 +14135,6 @@ var _user$project$Map$body = function (level) { _1: {ctor: '[]'} }); }; -var _user$project$Map$header = F2( - function (window, map) { - return A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: _user$project$Map$px(0) - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'bottom', - _1: _user$project$Map$px(0) - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'height', - _1: _user$project$Map$px(100) - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'width', - _1: _user$project$Map$px(window.width) - }, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border-bottom', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'hsl(189, 100%, 50%)'}, - _1: {ctor: '[]'} - } - } - } - } - } - } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$h1, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Lingua'), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _user$project$Map$viewPoints(map.points), - _1: {ctor: '[]'} - } - }); - }); var _user$project$Map$init = function (level) { return { level: level, @@ -14859,39 +14863,49 @@ var _user$project$Map$hometown = function (mapSize) { }; var _user$project$Map$view = F3( function (mapSize, translator, map) { - var level = function () { - var _p26 = map.level; - switch (_p26.ctor) { - case 'Home': - return _user$project$Map$home(mapSize); - case 'HomeTown': - return _user$project$Map$hometown(mapSize); - case 'GroceryStore': - return _user$project$Map$groceryStore(mapSize); - default: - return A2( - _elm_lang$html$Html$map, - _user$project$Map$ArtStoreMsg, - A2(_user$project$Store_ArtStore$view, translator, _p26._0)); - } - }(); - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2(_user$project$Map$header, mapSize, map), - _1: { - ctor: '::', - _0: _user$project$Map$body(level), - _1: {ctor: '[]'} - } - }); + var _p26 = map.level; + switch (_p26.ctor) { + case 'Home': + return _user$project$Map$home(mapSize); + case 'HomeTown': + return _user$project$Map$hometown(mapSize); + case 'GroceryStore': + return _user$project$Map$groceryStore(mapSize); + default: + return A2( + _elm_lang$html$Html$map, + _user$project$Map$ArtStoreMsg, + A2(_user$project$Store_ArtStore$view, translator, _p26._0)); + } }); var _user$project$Main$frenchTranslator = {translate: _user$project$Dictionary_French$translate, audio: _user$project$Dictionary_French$audio}; var _user$project$Main$translator = _user$project$Main$frenchTranslator; var _user$project$Main$spanishTranslator = {translate: _user$project$Dictionary_Spanish$translate, audio: _user$project$Dictionary_Spanish$audio}; +var _user$project$Main$px = function (x) { + return A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(x), + 'px'); +}; +var _user$project$Main$viewPoints = function (count) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class('points'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Points: ', + _elm_lang$core$Basics$toString(count))), + _1: {ctor: '[]'} + }); +}; var _user$project$Main$Model = F6( function (a, b, c, d, e, f) { return {user: a, mouse: b, time: c, window: d, map: e, pause: f}; @@ -14930,6 +14944,81 @@ var _user$project$Main$pauseButton = A2( _0: _elm_lang$html$Html$text('pause'), _1: {ctor: '[]'} }); +var _user$project$Main$header = F2( + function (window, map) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Main$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'bottom', + _1: _user$project$Main$px(0) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: _user$project$Main$px(100) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: _user$project$Main$px(window.width) + }, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border-bottom', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'hsl(189, 100%, 50%)'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$h1, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Lingua'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _user$project$Main$viewPoints(map.points), + _1: { + ctor: '::', + _0: _user$project$Main$pauseButton, + _1: {ctor: '[]'} + } + } + }); + }); var _user$project$Main$Tick = function (a) { return {ctor: 'Tick', _0: a}; }; @@ -15025,9 +15114,33 @@ var _user$project$Main$update = F3( var _user$project$Main$mapView = F3( function (window, translator, map) { return A2( - _elm_lang$html$Html$map, - _user$project$Main$MapMsg, - A3(_user$project$Map$view, window, translator, map)); + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Main$px(110) + }, + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$map, + _user$project$Main$MapMsg, + A3(_user$project$Map$view, window, translator, map)), + _1: {ctor: '[]'} + }); }); var _user$project$Main$view = F2( function (translator, model) { @@ -15045,7 +15158,7 @@ var _user$project$Main$view = F2( }, { ctor: '::', - _0: _user$project$Main$pauseButton, + _0: A2(_user$project$Main$header, model.window, model.map), _1: { ctor: '::', _0: A3(_user$project$Main$mapView, model.window, translator, model.map), diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 2dad55f..8611147 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -27,11 +27,26 @@ type alias ArtGame = , balls : List MovingBall , time : Time , seed : Random.Seed + , finishRound : Bool , win : Bool , points : Int + + -- TODO: use these to add one color at a time to the game + -- A list of known and a list of unknown colors + -- we will introduce one color at a time in the game + , knownUnknownColors : ( List Color, List Color ) } + +{- + State + = PlayingGame (playing == true) + | SplashScreen (win == true | finishRound == true) & playing == true + | NotPlaying (playing == false) +-} + + type alias MovingBall = { id : Int , color : Color @@ -55,16 +70,16 @@ init : Window.Size -> Random.Seed -> ( Model, Random.Seed ) init window seed = let ( game, newSeed ) = - initArtGame window seed + initArtGame window [] seed in ( { game = game, playing = False }, newSeed ) -initArtGame : Window.Size -> Random.Seed -> ( ArtGame, Random.Seed ) -initArtGame window seed = +initArtGame : Window.Size -> List Color -> Random.Seed -> ( ArtGame, Random.Seed ) +initArtGame window colors seed = let ( balls, newSeed ) = - Random.step (initialBalls window) seed + Random.step (initialBalls window colors) seed in ( { time = 0 , seed = newSeed @@ -72,6 +87,8 @@ initArtGame window seed = , color = Yellow , balls = balls , win = False + , finishRound = False + , knownUnknownColors = ( [], [ Red, Orange, Yellow, Green, Blue, Purple ] ) } , newSeed ) @@ -84,7 +101,8 @@ initArtGame window seed = type Msg = ColorClicked Int Color Color | Play - | Back + | FinishGame + | NextRound | PlayAudio String | ExitStore | Tick Time @@ -108,15 +126,18 @@ update window translator msg model = newBalls = artGame.balls |> removeBall id - win = + finishRound = List.length newBalls == 0 + win = + finishRound + && (List.length (unknownColors artGame.knownUnknownColors) == 0) + newArtGame = - { artGame | balls = newBalls, win = win } + { artGame | balls = newBalls, finishRound = finishRound, win = win } in ( { model - | playing = not win - , game = newArtGame + | game = newArtGame } , AddPoints 10 , Audio.play "audio/puff.mp3" @@ -127,13 +148,19 @@ update window translator msg model = Play -> let ( newArtGame, _ ) = - initArtGame window (Random.initialSeed 0) + -- TODO: pass random seed from parent + initArtGame window (knownColors model.game.knownUnknownColors) (Random.initialSeed 0) in - ( { playing = True, game = newArtGame }, NoOp, Cmd.none ) + ( { playing = True, game = newArtGame } |> nextColor, NoOp, Cmd.none ) - Back -> + FinishGame -> ( { model | playing = False }, NoOp, Cmd.none ) + NextRound -> + model + |> nextColor + |> update window translator Play + PlayAudio file -> ( model, NoOp, Audio.play file ) @@ -141,12 +168,42 @@ update window translator msg model = ( model, Exit, Cmd.none ) Tick timeDelta -> - if model.playing then + if model.playing && not (model.game.win || model.game.finishRound) then tick timeDelta window translator model else ( model, NoOp, Cmd.none ) +knownColors : ( List a, List a ) -> List a +knownColors = + Tuple.first + + +unknownColors : ( List a, List a ) -> List a +unknownColors = + Tuple.second + + +nextColor : Model -> Model +nextColor model = + let + game = + model.game + + knownUnknownColors = + case model.game.knownUnknownColors of + ( bs, c :: cs ) -> + ( c :: bs, cs ) + + ( bs, [] ) -> + ( bs, [] ) + + newGame = + { game | knownUnknownColors = knownUnknownColors } + in + { model | game = newGame } + + tick : Time -> Window.Size -> Translator -> Model -> ( Model, MsgFromPage, Cmd Msg ) tick timeDelta window translator model = let @@ -253,15 +310,15 @@ nonZeroFloat = |> Random.map toFloat -colorGen : Random.Generator Color -colorGen = - randItem [ Red, Orange, Yellow, Green, Blue, Purple ] +colorGen : List Color -> Random.Generator Color +colorGen colors = + randItem colors |> Random.map (Maybe.withDefault Red) -randomMovingBall : Window.Size -> Int -> Random.Generator MovingBall -randomMovingBall window id = - colorGen +randomMovingBall : Window.Size -> List Color -> Int -> Random.Generator MovingBall +randomMovingBall window colors id = + colorGen colors |> Random.andThen (\color -> Random.map3 @@ -272,10 +329,14 @@ randomMovingBall window id = ) -initialBalls : Window.Size -> Random.Generator (List MovingBall) -initialBalls window = - List.range 0 9 - |> List.map (randomMovingBall window) +ballsPerRound = + 5 + + +initialBalls : Window.Size -> List Color -> Random.Generator (List MovingBall) +initialBalls window colors = + List.range 0 (ballsPerRound - 1) + |> List.map (randomMovingBall window colors) |> Random.Extra.combine @@ -635,9 +696,11 @@ colorGame : Translator -> ArtGame -> Html Msg colorGame translator game = let content = - if game.win then + if game.finishRound || game.win then [ div [] - [ text "You Win!!!!!!" ] + [ button [ onClick NextRound ] [ text "Next Round" ] + , button [ onClick FinishGame ] [ text "Finish Early" ] + ] ] else List.map (colorBall game.color) game.balls @@ -699,7 +762,7 @@ backButton ( x, y ) = , ( "width", "128px" ) , ( "height", "64px" ) ] - , onClick Back + , onClick FinishGame ] [ text "Back" ] From 4d75a86043288e9dc7ad3f4382918648430711ae Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 28 May 2017 14:27:13 -0700 Subject: [PATCH 27/33] introduce one color at a time --- Main.elm | 21 +- Map.elm | 66 ++-- elm-package.json | 3 +- elm.js | 931 ++++++++++++++++++++++++++++----------------- store/ArtStore.elm | 125 +++--- 5 files changed, 691 insertions(+), 455 deletions(-) diff --git a/Main.elm b/Main.elm index c6a49df..a0d8115 100644 --- a/Main.elm +++ b/Main.elm @@ -123,7 +123,7 @@ view translator model = [ ( "user-select", "none" ) ] ] - [ header model.window model.map + [ header model , mapView model.window translator model.map -- , Bee.view Nothing model.user @@ -147,27 +147,32 @@ mapView window translator map = -- HEADER -header : Window.Size -> Map -> Html Msg -header window map = +header : Model -> Html Msg +header model = + -- TODO: add dropdown selector for language div [ style [ ( "position", "absolute" ) , ( "top", px 0 ) , ( "bottom", px 0 ) , ( "height", px 100 ) - , ( "width", px window.width ) + , ( "width", px model.window.width ) , ( "border-bottom", "1px solid black" ) , ( "background-color", "hsl(189, 100%, 50%)" ) ] ] [ h1 [] [ text "Lingua" ] - , viewPoints map.points - , pauseButton + , viewPoints model.map.points + , pauseButton model ] -pauseButton = - button [ onClick Pause, style [ ( "float", "right" ) ] ] [ text "pause" ] +pauseButton : Model -> Html Msg +pauseButton model = + if model.pause then + button [ onClick Pause, style [ ( "float", "right" ) ] ] [ text "play" ] + else + button [ onClick Pause, style [ ( "float", "right" ) ] ] [ text "pause" ] viewPoints : Int -> Html msg diff --git a/Map.elm b/Map.elm index 0c35f46..4bef4cd 100644 --- a/Map.elm +++ b/Map.elm @@ -73,38 +73,23 @@ type Route | ArtStoreRoute -update : Translator -> Window.Size -> Msg -> Map -> ( Map, Cmd Msg ) -update translator window msg map = - case ( map.level, msg ) of - ( _, NewLevel route ) -> - let - level = - case route of - HomeRoute -> - Home +(=>) = + (,) - HomeTownRoute -> - HomeTown - - GroceryStoreRoute -> - GroceryStore - ArtStoreRoute -> - let - ( store, _ ) = - ArtStore.init window map.seed - in - ArtStore store - in - ( { map | level = level }, Cmd.none ) +update : Translator -> Window.Size -> Msg -> Map -> ( Map, Cmd Msg ) +update translator window msg map = + case ( msg, map.level ) of + ( NewLevel route, _ ) -> + newLevel window route map - ( _, PlayAudio file ) -> - ( map, Audio.play file ) + ( PlayAudio file, _ ) -> + map => Audio.play file - ( _, Tick timeDelta ) -> + ( Tick timeDelta, _ ) -> tick timeDelta window translator map - ( ArtStore artStore, ArtStoreMsg msg ) -> + ( ArtStoreMsg msg, ArtStore artStore ) -> let ( newArtStore, msgFromPage, cmd ) = ArtStore.update window translator msg artStore @@ -133,10 +118,34 @@ update translator window msg map = ) ( _, _ ) -> - -- Should not reach here + -- Disregard messages from the wrong page ( map, Cmd.none ) +newLevel : Window.Size -> Route -> Map -> ( Map, Cmd Msg ) +newLevel window route map = + let + ( newLevel, newSeed ) = + case route of + HomeRoute -> + Home => map.seed + + HomeTownRoute -> + HomeTown => map.seed + + GroceryStoreRoute -> + GroceryStore => map.seed + + ArtStoreRoute -> + let + ( store, newSeed ) = + ArtStore.init window map.seed + in + ArtStore store => newSeed + in + { map | level = newLevel, seed = newSeed } => Cmd.none + + tick : Time -> Window.Size -> Translator -> Map -> ( Map, Cmd Msg ) tick timeDelta window translator map = case map.level of @@ -216,7 +225,8 @@ hometown : Window.Size -> Html Msg hometown mapSize = div [] [ house ( 0, 0 ) - , storeBuilding ( 160, 0 ) + + -- , storeBuilding ( 160, 0 ) , artStoreBuilding ( 320, 0 ) ] diff --git a/elm-package.json b/elm-package.json index a0daac5..ebb16c0 100644 --- a/elm-package.json +++ b/elm-package.json @@ -18,7 +18,8 @@ "elm-lang/mouse": "1.0.1 <= v < 2.0.0", "elm-lang/window": "1.0.1 <= v < 2.0.0", "mgold/elm-animation": "1.0.5 <= v < 2.0.0", - "rtfeldman/elm-css": "8.2.0 <= v < 9.0.0" + "rtfeldman/elm-css": "8.2.0 <= v < 9.0.0", + "wernerdegroot/listzipper": "3.0.0 <= v < 4.0.0" }, "elm-version": "0.18.0 <= v < 0.19.0" } diff --git a/elm.js b/elm.js index d2c0c6f..22efaa3 100644 --- a/elm.js +++ b/elm.js @@ -12766,6 +12766,194 @@ var _user$project$Dictionary_Translator$Translator = F2( return {translate: a, audio: b}; }); +var _wernerdegroot$listzipper$List_Zipper$after = function (_p0) { + var _p1 = _p0; + return _p1._2; +}; +var _wernerdegroot$listzipper$List_Zipper$current = function (_p2) { + var _p3 = _p2; + return _p3._1; +}; +var _wernerdegroot$listzipper$List_Zipper$before = function (_p4) { + var _p5 = _p4; + return _elm_lang$core$List$reverse(_p5._0); +}; +var _wernerdegroot$listzipper$List_Zipper$toList = function (z) { + return A2( + _elm_lang$core$Basics_ops['++'], + _wernerdegroot$listzipper$List_Zipper$before(z), + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _wernerdegroot$listzipper$List_Zipper$current(z), + _1: {ctor: '[]'} + }, + _wernerdegroot$listzipper$List_Zipper$after(z))); +}; +var _wernerdegroot$listzipper$List_Zipper$Zipper = F3( + function (a, b, c) { + return {ctor: 'Zipper', _0: a, _1: b, _2: c}; + }); +var _wernerdegroot$listzipper$List_Zipper$singleton = function (x) { + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + x, + {ctor: '[]'}); +}; +var _wernerdegroot$listzipper$List_Zipper$withDefault = function (x) { + return _elm_lang$core$Maybe$withDefault( + _wernerdegroot$listzipper$List_Zipper$singleton(x)); +}; +var _wernerdegroot$listzipper$List_Zipper$fromList = function (xs) { + var _p6 = xs; + if (_p6.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + _p6._0, + _p6._1)); + } +}; +var _wernerdegroot$listzipper$List_Zipper$map = F2( + function (f, _p7) { + var _p8 = _p7; + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + A2(_elm_lang$core$List$map, f, _p8._0), + f(_p8._1), + A2(_elm_lang$core$List$map, f, _p8._2)); + }); +var _wernerdegroot$listzipper$List_Zipper$mapBefore = F2( + function (f, _p9) { + var _p10 = _p9; + var elementsBefore = _wernerdegroot$listzipper$List_Zipper$before(_p10); + var mappedElementsBefore = f(elementsBefore); + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _elm_lang$core$List$reverse(mappedElementsBefore), + _p10._1, + _p10._2); + }); +var _wernerdegroot$listzipper$List_Zipper$mapCurrent = F2( + function (f, _p11) { + var _p12 = _p11; + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _p12._0, + f(_p12._1), + _p12._2); + }); +var _wernerdegroot$listzipper$List_Zipper$mapAfter = F2( + function (f, _p13) { + var _p14 = _p13; + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _p14._0, + _p14._1, + f(_p14._2)); + }); +var _wernerdegroot$listzipper$List_Zipper$first = function (_p15) { + var _p16 = _p15; + var _p17 = _elm_lang$core$List$reverse(_p16._0); + if (_p17.ctor === '[]') { + return _p16; + } else { + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + _p17._0, + A2( + _elm_lang$core$Basics_ops['++'], + _p17._1, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _p16._1, + _1: {ctor: '[]'} + }, + _p16._2))); + } +}; +var _wernerdegroot$listzipper$List_Zipper$previous = function (_p18) { + var _p19 = _p18; + var _p20 = _p19._0; + if (_p20.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + _p20._1, + _p20._0, + {ctor: '::', _0: _p19._1, _1: _p19._2})); + } +}; +var _wernerdegroot$listzipper$List_Zipper$next = function (_p21) { + var _p22 = _p21; + var _p23 = _p22._2; + if (_p23.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '::', _0: _p22._1, _1: _p22._0}, + _p23._0, + _p23._1)); + } +}; +var _wernerdegroot$listzipper$List_Zipper$find = F2( + function (predicate, _p24) { + find: + while (true) { + var _p25 = _p24; + var _p27 = _p25; + if (predicate(_p25._1)) { + return _elm_lang$core$Maybe$Just(_p27); + } else { + var _p26 = _wernerdegroot$listzipper$List_Zipper$next(_p27); + if (_p26.ctor === 'Just') { + var _v16 = predicate, + _v17 = _p26._0; + predicate = _v16; + _p24 = _v17; + continue find; + } else { + return _elm_lang$core$Maybe$Nothing; + } + } + } + }); +var _wernerdegroot$listzipper$List_Zipper$last = function (_p28) { + var _p29 = _p28; + var _p30 = _elm_lang$core$List$reverse(_p29._2); + if (_p30.ctor === '[]') { + return _p29; + } else { + return A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + A2( + _elm_lang$core$Basics_ops['++'], + _p30._1, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: _p29._1, + _1: {ctor: '[]'} + }, + _p29._0)), + _p30._0, + {ctor: '[]'}); + } +}; + var _user$project$Store_ArtStore$tile = function (_p0) { var _p1 = _p0; return A2( @@ -12969,36 +13157,25 @@ var _user$project$Store_ArtStore$randItem = function (list) { 0, _elm_lang$core$List$length(list) - 1)); }; -var _user$project$Store_ArtStore$nextColor = function (model) { - var knownUnknownColors = function () { - var _p10 = model.game.knownUnknownColors; - if (_p10._1.ctor === '::') { - return { - ctor: '_Tuple2', - _0: {ctor: '::', _0: _p10._1._0, _1: _p10._0}, - _1: _p10._1._1 - }; - } else { - return { - ctor: '_Tuple2', - _0: _p10._0, - _1: {ctor: '[]'} - }; - } - }(); - var game = model.game; - var newGame = _elm_lang$core$Native_Utils.update( - game, - {knownUnknownColors: knownUnknownColors}); - return _elm_lang$core$Native_Utils.update( - model, - {game: newGame}); -}; -var _user$project$Store_ArtStore$unknownColors = _elm_lang$core$Tuple$second; -var _user$project$Store_ArtStore$knownColors = _elm_lang$core$Tuple$first; -var _user$project$Store_ArtStore$Model = F2( - function (a, b) { - return {playing: a, game: b}; +var _user$project$Store_ArtStore$nextColor = function (colors) { + return A2( + _elm_lang$core$Maybe$withDefault, + colors, + _wernerdegroot$listzipper$List_Zipper$next(colors)); +}; +var _user$project$Store_ArtStore$unknownColors = function (colors) { + return _wernerdegroot$listzipper$List_Zipper$after(colors); +}; +var _user$project$Store_ArtStore$knownColors = function (colors) { + return { + ctor: '::', + _0: _wernerdegroot$listzipper$List_Zipper$current(colors), + _1: _wernerdegroot$listzipper$List_Zipper$before(colors) + }; +}; +var _user$project$Store_ArtStore$Model = F3( + function (a, b, c) { + return {playing: a, game: b, seed: c}; }); var _user$project$Store_ArtStore$ArtGame = F8( function (a, b, c, d, e, f, g, h) { @@ -13045,21 +13222,21 @@ var _user$project$Store_ArtStore$collideWith = F3( function (a0, bodies, acc) { collideWith: while (true) { - var _p11 = bodies; - if (_p11.ctor === '[]') { + var _p10 = bodies; + if (_p10.ctor === '[]') { return {ctor: '::', _0: a0, _1: acc}; } else { - var _p13 = _p11._0; - var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p13); - var _p12 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p13); - var a1 = _p12._0; - var b1 = _p12._1; - var _v6 = a1, - _v7 = _p11._1, - _v8 = {ctor: '::', _0: b1, _1: acc}; - a0 = _v6; - bodies = _v7; - acc = _v8; + var _p12 = _p10._0; + var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p12); + var _p11 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p12); + var a1 = _p11._0; + var b1 = _p11._1; + var _v5 = a1, + _v6 = _p10._1, + _v7 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v5; + bodies = _v6; + acc = _v7; continue collideWith; } } @@ -13068,22 +13245,22 @@ var _user$project$Store_ArtStore$collide = F2( function (acc, bodies) { collide: while (true) { - var _p14 = bodies; - if (_p14.ctor === '[]') { + var _p13 = bodies; + if (_p13.ctor === '[]') { return acc; } else { - var _p15 = A3( + var _p14 = A3( _user$project$Store_ArtStore$collideWith, - _p14._0, - _p14._1, + _p13._0, + _p13._1, {ctor: '[]'}); - if (_p15.ctor === '[]') { + if (_p14.ctor === '[]') { return {ctor: '[]'}; } else { - var _v11 = {ctor: '::', _0: _p15._0, _1: acc}, - _v12 = _p15._1; - acc = _v11; - bodies = _v12; + var _v10 = {ctor: '::', _0: _p14._0, _1: acc}, + _v11 = _p14._1; + acc = _v10; + bodies = _v11; continue collide; } } @@ -13096,38 +13273,38 @@ var _user$project$Store_ArtStore$collisions = function (balls) { balls); }; var _user$project$Store_ArtStore$collisionBoxBubble = F2( - function (_p17, _p16) { - var _p18 = _p17; - var _p25 = _p18._1; - var _p19 = _p16; - var _p24 = _p19._1; - var _p20 = { + function (_p16, _p15) { + var _p17 = _p16; + var _p24 = _p17._1; + var _p18 = _p15; + var _p23 = _p18._1; + var _p19 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p25), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p25) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) }; - var boxX = _p20._0; - var boxY = _p20._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p19._0, _p18._0); - var _p21 = { + var boxX = _p19._0; + var boxY = _p19._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); + var _p20 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p21._0; - var dy = _p21._1; + var dx = _p20._0; + var dy = _p20._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p22 = { + var _p21 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p22._0; - var cy = _p22._1; - var _p23 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p21._0; + var cy = _p21._1; + var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -13146,17 +13323,17 @@ var _user$project$Store_ArtStore$collisionBoxBubble = F2( _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p23._0; - var inside = _p23._1; + var closest = _p22._0; + var inside = _p22._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p24 * _p24) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { return A2( _user$project$Store_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p24 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Store_ArtStore$CollisionResult, A2( @@ -13173,24 +13350,24 @@ var _user$project$Store_ArtStore$animateBall = F3( function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); - var _p26 = { + var _p25 = { ctor: '_Tuple2', _0: _elm_lang$core$Basics$toFloat(window.width), _1: _elm_lang$core$Basics$toFloat(window.height) }; - var width = _p26._0; - var height = _p26._1; - var _p27 = { + var width = _p25._0; + var height = _p25._1; + var _p26 = { ctor: '_Tuple4', _0: _user$project$Store_ArtStore$initLeftWall(height), _1: A2(_user$project$Store_ArtStore$initRightWall, width, height), _2: _user$project$Store_ArtStore$initTopWall(width), _3: A2(_user$project$Store_ArtStore$initBottomWall, width, height) }; - var leftWall = _p27._0; - var rightWall = _p27._1; - var topWall = _p27._2; - var bottomWall = _p27._3; + var leftWall = _p26._0; + var rightWall = _p26._1; + var topWall = _p26._2; + var bottomWall = _p26._3; var leftCol = A2( _user$project$Store_ArtStore$collisionBoxBubble, { @@ -13232,6 +13409,31 @@ var _user$project$Store_ArtStore$Green = {ctor: 'Green'}; var _user$project$Store_ArtStore$Yellow = {ctor: 'Yellow'}; var _user$project$Store_ArtStore$Orange = {ctor: 'Orange'}; var _user$project$Store_ArtStore$Red = {ctor: 'Red'}; +var _user$project$Store_ArtStore$initialColors = A3( + _wernerdegroot$listzipper$List_Zipper$Zipper, + {ctor: '[]'}, + _user$project$Store_ArtStore$Red, + { + ctor: '::', + _0: _user$project$Store_ArtStore$Orange, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Yellow, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Green, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Blue, + _1: { + ctor: '::', + _0: _user$project$Store_ArtStore$Purple, + _1: {ctor: '[]'} + } + } + } + } + }); var _user$project$Store_ArtStore$randomColor = F2( function (seed, balls) { return A2( @@ -13251,11 +13453,11 @@ var _user$project$Store_ArtStore$randomColor = F2( var _user$project$Store_ArtStore$animateArtGame = F4( function (timeDiff, window, translator, artGame) { var newTime = artGame.time + timeDiff; - var _p28 = function () { + var _p27 = function () { if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Store_ArtStore$colorSwapTime) > 0) { - var _p29 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); - var randColor = _p29._0; - var seed = _p29._1; + var _p28 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); + var randColor = _p28._0; + var seed = _p28._1; return { ctor: '_Tuple3', _0: {ctor: '_Tuple2', _0: randColor, _1: seed}, @@ -13273,11 +13475,11 @@ var _user$project$Store_ArtStore$animateArtGame = F4( }; } }(); - var newColor = _p28._0._0; - var newSeed = _p28._0._1; - var timeReset = _p28._1; - var cmd = _p28._2; - var _p30 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); + var newColor = _p27._0._0; + var newSeed = _p27._0._1; + var timeReset = _p27._1; + var cmd = _p27._2; + var _p29 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13391,17 +13593,17 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis }); var _user$project$Store_ArtStore$randomImage = function (color) { var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Store_ArtStore$images); - var _p31 = options; - if (_p31.ctor === 'Nothing') { + var _p30 = options; + if (_p30.ctor === 'Nothing') { return _user$project$Store_ArtStore$alwaysGen(''); } else { - if (_p31._0.ctor === '[]') { + if (_p30._0.ctor === '[]') { return _user$project$Store_ArtStore$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Store_ArtStore$randItem(_p31._0)); + _user$project$Store_ArtStore$randItem(_p30._0)); } } }; @@ -13435,67 +13637,42 @@ var _user$project$Store_ArtStore$initialBalls = F2( }); var _user$project$Store_ArtStore$initArtGame = F3( function (window, colors, seed) { - var _p32 = A2( + var _p31 = A2( _elm_lang$core$Random$step, - A2(_user$project$Store_ArtStore$initialBalls, window, colors), + A2( + _user$project$Store_ArtStore$initialBalls, + window, + { + ctor: '::', + _0: _wernerdegroot$listzipper$List_Zipper$current(colors), + _1: _wernerdegroot$listzipper$List_Zipper$before(colors) + }), seed); - var balls = _p32._0; - var newSeed = _p32._1; + var balls = _p31._0; + var newSeed = _p31._1; return { ctor: '_Tuple2', _0: { time: 0, seed: newSeed, points: 0, - color: _user$project$Store_ArtStore$Yellow, + color: _wernerdegroot$listzipper$List_Zipper$current(colors), balls: balls, win: false, finishRound: false, - knownUnknownColors: { - ctor: '_Tuple2', - _0: {ctor: '[]'}, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Red, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Orange, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Yellow, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Green, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Blue, - _1: { - ctor: '::', - _0: _user$project$Store_ArtStore$Purple, - _1: {ctor: '[]'} - } - } - } - } - } - } - } + knownUnknownColors: colors }, _1: newSeed }; }); var _user$project$Store_ArtStore$init = F2( function (window, seed) { - var _p33 = A3( - _user$project$Store_ArtStore$initArtGame, - window, - {ctor: '[]'}, - seed); - var game = _p33._0; - var newSeed = _p33._1; + var _p32 = A3(_user$project$Store_ArtStore$initArtGame, window, _user$project$Store_ArtStore$initialColors, seed); + var game = _p32._0; + var newSeed = _p32._1; return { ctor: '_Tuple2', - _0: {game: game, playing: false}, + _0: {game: game, playing: false, seed: newSeed}, _1: newSeed }; }); @@ -13507,8 +13684,8 @@ var _user$project$Store_ArtStore$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Store_ArtStore$colorCircle = F3( - function (_p34, color, audio) { - var _p35 = _p34; + function (_p33, color, audio) { + var _p34 = _p33; return A2( _elm_lang$html$Html$div, { @@ -13533,7 +13710,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._0), + _elm_lang$core$Basics$toString(_p34._0), 'px') }, _1: { @@ -13543,7 +13720,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._1), + _elm_lang$core$Basics$toString(_p34._1), 'px') }, _1: { @@ -13572,8 +13749,8 @@ var _user$project$Store_ArtStore$colorCircle = F3( }); var _user$project$Store_ArtStore$NextRound = {ctor: 'NextRound'}; var _user$project$Store_ArtStore$FinishGame = {ctor: 'FinishGame'}; -var _user$project$Store_ArtStore$backButton = function (_p36) { - var _p37 = _p36; +var _user$project$Store_ArtStore$backButton = function (_p35) { + var _p36 = _p35; return A2( _elm_lang$html$Html$button, { @@ -13592,7 +13769,7 @@ var _user$project$Store_ArtStore$backButton = function (_p36) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._0), + _elm_lang$core$Basics$toString(_p36._0), 'px') }, _1: { @@ -13602,7 +13779,7 @@ var _user$project$Store_ArtStore$backButton = function (_p36) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._1), + _elm_lang$core$Basics$toString(_p36._1), 'px') }, _1: { @@ -13631,8 +13808,8 @@ var _user$project$Store_ArtStore$backButton = function (_p36) { }); }; var _user$project$Store_ArtStore$Play = {ctor: 'Play'}; -var _user$project$Store_ArtStore$playButton = function (_p38) { - var _p39 = _p38; +var _user$project$Store_ArtStore$playButton = function (_p37) { + var _p38 = _p37; return A2( _elm_lang$html$Html$button, { @@ -13651,7 +13828,7 @@ var _user$project$Store_ArtStore$playButton = function (_p38) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._0), + _elm_lang$core$Basics$toString(_p38._0), 'px') }, _1: { @@ -13661,7 +13838,7 @@ var _user$project$Store_ArtStore$playButton = function (_p38) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._1), + _elm_lang$core$Basics$toString(_p38._1), 'px') }, _1: { @@ -13857,18 +14034,18 @@ var _user$project$Store_ArtStore$colorGame = F2( }); var _user$project$Store_ArtStore$view = F2( function (translator, model) { - var _p40 = model.playing; - if (_p40 === true) { + var _p39 = model.playing; + if (_p39 === true) { return A2(_user$project$Store_ArtStore$colorGame, translator, model.game); } else { var showCircle = F2( - function (n, _p41) { - var _p42 = _p41; + function (n, _p40) { + var _p41 = _p40; return A3( _user$project$Store_ArtStore$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p42._0, - _p42._1); + _p41._0, + _p41._1); }); return A2( _elm_lang$html$Html$div, @@ -13931,9 +14108,9 @@ var _user$project$Store_ArtStore$view = F2( var _user$project$Store_ArtStore$NoOp = {ctor: 'NoOp'}; var _user$project$Store_ArtStore$tick = F4( function (timeDelta, window, translator, model) { - var _p43 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); - var newArtGame = _p43._0; - var cmd = _p43._1; + var _p42 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); + var newArtGame = _p42._0; + var cmd = _p42._1; return { ctor: '_Tuple3', _0: _elm_lang$core$Native_Utils.update( @@ -13947,81 +14124,96 @@ var _user$project$Store_ArtStore$Exit = {ctor: 'Exit'}; var _user$project$Store_ArtStore$AddPoints = function (a) { return {ctor: 'AddPoints', _0: a}; }; +var _user$project$Store_ArtStore$colorClicked = F2( + function (_p43, model) { + var _p44 = _p43; + if (!_elm_lang$core$Native_Utils.eq(_p44._1, _p44._2)) { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + } else { + var artGame = model.game; + var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p44._0, artGame.balls); + var finishRound = _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length(newBalls), + 0); + var win = finishRound && _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length( + _user$project$Store_ArtStore$unknownColors(artGame.knownUnknownColors)), + 0); + var newArtGame = _elm_lang$core$Native_Utils.update( + artGame, + {balls: newBalls, finishRound: finishRound, win: win}); + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {game: newArtGame}), + _1: _user$project$Store_ArtStore$AddPoints(10), + _2: _user$project$Audio$play('audio/puff.mp3') + }; + } + }); var _user$project$Store_ArtStore$update = F4( function (window, translator, msg, model) { update: while (true) { - var _p44 = msg; - switch (_p44.ctor) { + var _p45 = msg; + switch (_p45.ctor) { case 'ColorClicked': - if (_elm_lang$core$Native_Utils.eq(_p44._1, _p44._2)) { - var artGame = model.game; - var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p44._0, artGame.balls); - var finishRound = _elm_lang$core$Native_Utils.eq( - _elm_lang$core$List$length(newBalls), - 0); - var win = finishRound && _elm_lang$core$Native_Utils.eq( - _elm_lang$core$List$length( - _user$project$Store_ArtStore$unknownColors(artGame.knownUnknownColors)), - 0); - var newArtGame = _elm_lang$core$Native_Utils.update( - artGame, - {balls: newBalls, finishRound: finishRound, win: win}); - return { - ctor: '_Tuple3', - _0: _elm_lang$core$Native_Utils.update( - model, - {game: newArtGame}), - _1: _user$project$Store_ArtStore$AddPoints(10), - _2: _user$project$Audio$play('audio/puff.mp3') - }; - } else { - return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; - } + return A2( + _user$project$Store_ArtStore$colorClicked, + {ctor: '_Tuple3', _0: _p45._0, _1: _p45._1, _2: _p45._2}, + model); case 'Play': - var _p45 = A3( - _user$project$Store_ArtStore$initArtGame, - window, - _user$project$Store_ArtStore$knownColors(model.game.knownUnknownColors), - _elm_lang$core$Random$initialSeed(0)); - var newArtGame = _p45._0; - return { - ctor: '_Tuple3', - _0: _user$project$Store_ArtStore$nextColor( - {playing: true, game: newArtGame}), - _1: _user$project$Store_ArtStore$NoOp, - _2: _elm_lang$core$Platform_Cmd$none - }; - case 'FinishGame': return { ctor: '_Tuple3', _0: _elm_lang$core$Native_Utils.update( model, - {playing: false}), + {playing: true}), _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none }; case 'NextRound': + var _p46 = A3( + _user$project$Store_ArtStore$initArtGame, + window, + A2( + _elm_lang$core$Debug$log, + 'new colors', + _user$project$Store_ArtStore$nextColor(model.game.knownUnknownColors)), + model.seed); + var nextArtGame = _p46._0; + var newSeed = _p46._1; var _v22 = window, _v23 = translator, _v24 = _user$project$Store_ArtStore$Play, - _v25 = _user$project$Store_ArtStore$nextColor(model); + _v25 = _elm_lang$core$Native_Utils.update( + model, + {game: nextArtGame, seed: newSeed}); window = _v22; translator = _v23; msg = _v24; model = _v25; continue update; + case 'FinishGame': + return { + ctor: '_Tuple3', + _0: _elm_lang$core$Native_Utils.update( + model, + {playing: false}), + _1: _user$project$Store_ArtStore$NoOp, + _2: _elm_lang$core$Platform_Cmd$none + }; case 'PlayAudio': return { ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, - _2: _user$project$Audio$play(_p44._0) + _2: _user$project$Audio$play(_p45._0) }; case 'ExitStore': return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; default: - return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p44._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p45._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } } }); @@ -14135,6 +14327,11 @@ var _user$project$Map$body = function (level) { _1: {ctor: '[]'} }); }; +var _user$project$Map_ops = _user$project$Map_ops || {}; +_user$project$Map_ops['=>'] = F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }); var _user$project$Map$init = function (level) { return { level: level, @@ -14152,6 +14349,36 @@ var _user$project$Map$ArtStore = function (a) { var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; var _user$project$Map$Home = {ctor: 'Home'}; +var _user$project$Map$newLevel = F3( + function (window, route, map) { + var _p2 = function () { + var _p3 = route; + switch (_p3.ctor) { + case 'HomeRoute': + return A2(_user$project$Map_ops['=>'], _user$project$Map$Home, map.seed); + case 'HomeTownRoute': + return A2(_user$project$Map_ops['=>'], _user$project$Map$HomeTown, map.seed); + case 'GroceryStoreRoute': + return A2(_user$project$Map_ops['=>'], _user$project$Map$GroceryStore, map.seed); + default: + var _p4 = A2(_user$project$Store_ArtStore$init, window, map.seed); + var store = _p4._0; + var newSeed = _p4._1; + return A2( + _user$project$Map_ops['=>'], + _user$project$Map$ArtStore(store), + newSeed); + } + }(); + var newLevel = _p2._0; + var newSeed = _p2._1; + return A2( + _user$project$Map_ops['=>'], + _elm_lang$core$Native_Utils.update( + map, + {level: newLevel, seed: newSeed}), + _elm_lang$core$Platform_Cmd$none); + }); var _user$project$Map$Purple = {ctor: 'Purple'}; var _user$project$Map$Blue = {ctor: 'Blue'}; var _user$project$Map$Green = {ctor: 'Green'}; @@ -14166,17 +14393,17 @@ var _user$project$Map$ArtStoreMsg = function (a) { }; var _user$project$Map$tick = F4( function (timeDelta, window, translator, map) { - var _p2 = map.level; - if (_p2.ctor === 'ArtStore') { - var _p3 = A4( + var _p5 = map.level; + if (_p5.ctor === 'ArtStore') { + var _p6 = A4( _user$project$Store_ArtStore$update, window, translator, _user$project$Store_ArtStore$Tick(timeDelta), - _p2._0); - var newArtStore = _p3._0; - var msgFromPage = _p3._1; - var cmd = _p3._2; + _p5._0); + var newArtStore = _p6._0; + var msgFromPage = _p6._1; + var cmd = _p6._2; return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -14192,56 +14419,34 @@ var _user$project$Map$tick = F4( }); var _user$project$Map$update = F4( function (translator, window, msg, map) { - var _p4 = {ctor: '_Tuple2', _0: map.level, _1: msg}; - switch (_p4._1.ctor) { + var _p7 = {ctor: '_Tuple2', _0: msg, _1: map.level}; + switch (_p7._0.ctor) { case 'NewLevel': - var level = function () { - var _p5 = _p4._1._0; - switch (_p5.ctor) { - case 'HomeRoute': - return _user$project$Map$Home; - case 'HomeTownRoute': - return _user$project$Map$HomeTown; - case 'GroceryStoreRoute': - return _user$project$Map$GroceryStore; - default: - var _p6 = A2(_user$project$Store_ArtStore$init, window, map.seed); - var store = _p6._0; - return _user$project$Map$ArtStore(store); - } - }(); - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - map, - {level: level}), - _1: _elm_lang$core$Platform_Cmd$none - }; + return A3(_user$project$Map$newLevel, window, _p7._0._0, map); case 'PlayAudio': - return { - ctor: '_Tuple2', - _0: map, - _1: _user$project$Audio$play(_p4._1._0) - }; + return A2( + _user$project$Map_ops['=>'], + map, + _user$project$Audio$play(_p7._0._0)); case 'Tick': - return A4(_user$project$Map$tick, _p4._1._0, window, translator, map); + return A4(_user$project$Map$tick, _p7._0._0, window, translator, map); default: - if (_p4._0.ctor === 'ArtStore') { - var _p7 = A4(_user$project$Store_ArtStore$update, window, translator, _p4._1._0, _p4._0._0); - var newArtStore = _p7._0; - var msgFromPage = _p7._1; - var cmd = _p7._2; + if (_p7._1.ctor === 'ArtStore') { + var _p8 = A4(_user$project$Store_ArtStore$update, window, translator, _p7._0._0, _p7._1._0); + var newArtStore = _p8._0; + var msgFromPage = _p8._1; + var cmd = _p8._2; var points = function () { - var _p8 = msgFromPage; - if (_p8.ctor === 'AddPoints') { - return map.points + _p8._0; + var _p9 = msgFromPage; + if (_p9.ctor === 'AddPoints') { + return map.points + _p9._0; } else { return map.points; } }(); var level = function () { - var _p9 = msgFromPage; - if (_p9.ctor === 'Exit') { + var _p10 = msgFromPage; + if (_p10.ctor === 'Exit') { return _user$project$Map$HomeTown; } else { return _user$project$Map$ArtStore(newArtStore); @@ -14263,8 +14468,8 @@ var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Map$groceryItem = F3( - function (_p10, image, audio) { - var _p11 = _p10; + function (_p11, image, audio) { + var _p12 = _p11; return A2( _elm_lang$html$Html$img, { @@ -14289,7 +14494,7 @@ var _user$project$Map$groceryItem = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p11._0), + _elm_lang$core$Basics$toString(_p12._0), 'px') }, _1: { @@ -14299,7 +14504,7 @@ var _user$project$Map$groceryItem = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p11._1), + _elm_lang$core$Basics$toString(_p12._1), 'px') }, _1: {ctor: '[]'} @@ -14322,8 +14527,8 @@ var _user$project$Map$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; var _user$project$Map$playButton = F2( - function (_p12, level) { - var _p13 = _p12; + function (_p13, level) { + var _p14 = _p13; return A2( _elm_lang$html$Html$button, { @@ -14342,7 +14547,7 @@ var _user$project$Map$playButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p13._0), + _elm_lang$core$Basics$toString(_p14._0), 'px') }, _1: { @@ -14352,7 +14557,7 @@ var _user$project$Map$playButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p13._1), + _elm_lang$core$Basics$toString(_p14._1), 'px') }, _1: { @@ -14382,8 +14587,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p14, level) { - var _p15 = _p14; + function (_p15, level) { + var _p16 = _p15; return A2( _elm_lang$html$Html$button, { @@ -14402,7 +14607,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p15._0), + _elm_lang$core$Basics$toString(_p16._0), 'px') }, _1: { @@ -14412,7 +14617,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p15._1), + _elm_lang$core$Basics$toString(_p16._1), 'px') }, _1: { @@ -14473,10 +14678,10 @@ var _user$project$Map$exit = function (level) { }); }; var _user$project$Map$ArtStoreRoute = {ctor: 'ArtStoreRoute'}; -var _user$project$Map$artStoreBuilding = function (_p16) { - var _p17 = _p16; - var _p19 = _p17._1; - var _p18 = _p17._0; +var _user$project$Map$artStoreBuilding = function (_p17) { + var _p18 = _p17; + var _p20 = _p18._1; + var _p19 = _p18._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -14510,7 +14715,7 @@ var _user$project$Map$artStoreBuilding = function (_p16) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18), + _elm_lang$core$Basics$toString(_p19), 'px') }, _1: { @@ -14520,7 +14725,7 @@ var _user$project$Map$artStoreBuilding = function (_p16) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p19), + _elm_lang$core$Basics$toString(_p20), 'px') }, _1: {ctor: '[]'} @@ -14566,7 +14771,7 @@ var _user$project$Map$artStoreBuilding = function (_p16) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18 + 7), + _elm_lang$core$Basics$toString(_p19 + 7), 'px') }, _1: { @@ -14576,7 +14781,7 @@ var _user$project$Map$artStoreBuilding = function (_p16) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p19 + 10), + _elm_lang$core$Basics$toString(_p20 + 10), 'px') }, _1: {ctor: '[]'} @@ -14600,10 +14805,10 @@ var _user$project$Map$artStoreBuilding = function (_p16) { }); }; var _user$project$Map$GroceryStoreRoute = {ctor: 'GroceryStoreRoute'}; -var _user$project$Map$storeBuilding = function (_p20) { - var _p21 = _p20; - var _p23 = _p21._1; - var _p22 = _p21._0; +var _user$project$Map$storeBuilding = function (_p21) { + var _p22 = _p21; + var _p24 = _p22._1; + var _p23 = _p22._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -14637,7 +14842,7 @@ var _user$project$Map$storeBuilding = function (_p20) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p22), + _elm_lang$core$Basics$toString(_p23), 'px') }, _1: { @@ -14647,7 +14852,7 @@ var _user$project$Map$storeBuilding = function (_p20) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p23), + _elm_lang$core$Basics$toString(_p24), 'px') }, _1: {ctor: '[]'} @@ -14693,7 +14898,7 @@ var _user$project$Map$storeBuilding = function (_p20) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p22 + 7), + _elm_lang$core$Basics$toString(_p23 + 7), 'px') }, _1: { @@ -14703,7 +14908,7 @@ var _user$project$Map$storeBuilding = function (_p20) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p23 + 10), + _elm_lang$core$Basics$toString(_p24 + 10), 'px') }, _1: {ctor: '[]'} @@ -14785,8 +14990,8 @@ var _user$project$Map$groceryStore = function (mapSize) { }); }; var _user$project$Map$HomeRoute = {ctor: 'HomeRoute'}; -var _user$project$Map$house = function (_p24) { - var _p25 = _p24; +var _user$project$Map$house = function (_p25) { + var _p26 = _p25; return A2( _elm_lang$html$Html$img, { @@ -14815,7 +15020,7 @@ var _user$project$Map$house = function (_p24) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p25._0), + _elm_lang$core$Basics$toString(_p26._0), 'px') }, _1: { @@ -14825,7 +15030,7 @@ var _user$project$Map$house = function (_p24) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p25._1), + _elm_lang$core$Basics$toString(_p26._1), 'px') }, _1: {ctor: '[]'} @@ -14850,21 +15055,16 @@ var _user$project$Map$hometown = function (mapSize) { {ctor: '_Tuple2', _0: 0, _1: 0}), _1: { ctor: '::', - _0: _user$project$Map$storeBuilding( - {ctor: '_Tuple2', _0: 160, _1: 0}), - _1: { - ctor: '::', - _0: _user$project$Map$artStoreBuilding( - {ctor: '_Tuple2', _0: 320, _1: 0}), - _1: {ctor: '[]'} - } + _0: _user$project$Map$artStoreBuilding( + {ctor: '_Tuple2', _0: 320, _1: 0}), + _1: {ctor: '[]'} } }); }; var _user$project$Map$view = F3( function (mapSize, translator, map) { - var _p26 = map.level; - switch (_p26.ctor) { + var _p27 = map.level; + switch (_p27.ctor) { case 'Home': return _user$project$Map$home(mapSize); case 'HomeTown': @@ -14875,7 +15075,7 @@ var _user$project$Map$view = F3( return A2( _elm_lang$html$Html$map, _user$project$Map$ArtStoreMsg, - A2(_user$project$Store_ArtStore$view, translator, _p26._0)); + A2(_user$project$Store_ArtStore$view, translator, _p27._0)); } }); @@ -14923,102 +15123,123 @@ var _user$project$Main$Down = function (a) { return {ctor: 'Down', _0: a}; }; var _user$project$Main$Pause = {ctor: 'Pause'}; -var _user$project$Main$pauseButton = A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), - _1: { +var _user$project$Main$pauseButton = function (model) { + return model.pause ? A2( + _elm_lang$html$Html$button, + { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'float', _1: 'right'}, - _1: {ctor: '[]'} - }), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'float', _1: 'right'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('play'), _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('pause'), - _1: {ctor: '[]'} - }); -var _user$project$Main$header = F2( - function (window, map) { - return A2( - _elm_lang$html$Html$div, - { + }) : A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Main$Pause), + _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'float', _1: 'right'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('pause'), + _1: {ctor: '[]'} + }); +}; +var _user$project$Main$header = function (model) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: _user$project$Main$px(0) + }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'bottom', _1: _user$project$Main$px(0) }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'bottom', - _1: _user$project$Main$px(0) + _0: 'height', + _1: _user$project$Main$px(100) }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'height', - _1: _user$project$Main$px(100) + _0: 'width', + _1: _user$project$Main$px(model.window.width) }, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'width', - _1: _user$project$Main$px(window.width) - }, + _0: {ctor: '_Tuple2', _0: 'border-bottom', _1: '1px solid black'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border-bottom', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'hsl(189, 100%, 50%)'}, - _1: {ctor: '[]'} - } + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'hsl(189, 100%, 50%)'}, + _1: {ctor: '[]'} } } } } } - }), - _1: {ctor: '[]'} - }, - { + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$h1, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Lingua'), + _1: {ctor: '[]'} + }), + _1: { ctor: '::', - _0: A2( - _elm_lang$html$Html$h1, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Lingua'), - _1: {ctor: '[]'} - }), + _0: _user$project$Main$viewPoints(model.map.points), _1: { ctor: '::', - _0: _user$project$Main$viewPoints(map.points), - _1: { - ctor: '::', - _0: _user$project$Main$pauseButton, - _1: {ctor: '[]'} - } + _0: _user$project$Main$pauseButton(model), + _1: {ctor: '[]'} } - }); - }); + } + }); +}; var _user$project$Main$Tick = function (a) { return {ctor: 'Tick', _0: a}; }; @@ -15158,7 +15379,7 @@ var _user$project$Main$view = F2( }, { ctor: '::', - _0: A2(_user$project$Main$header, model.window, model.map), + _0: _user$project$Main$header(model), _1: { ctor: '::', _0: A3(_user$project$Main$mapView, model.window, translator, model.map), diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 8611147..1278ffe 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -6,6 +6,7 @@ import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick, onMouseDown) +import List.Zipper as Zipper exposing (Zipper(..)) import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Random import Random.Extra @@ -18,7 +19,10 @@ import Window type alias Model = { playing : Bool + + -- TODO: change to maybe game instead of using 'playing' , game : ArtGame + , seed : Random.Seed } @@ -34,7 +38,8 @@ type alias ArtGame = -- TODO: use these to add one color at a time to the game -- A list of known and a list of unknown colors -- we will introduce one color at a time in the game - , knownUnknownColors : ( List Color, List Color ) + -- TODO: use zipper + , knownUnknownColors : Zipper Color } @@ -66,29 +71,34 @@ type Color | Purple +initialColors : Zipper Color +initialColors = + Zipper [] Red [ Orange, Yellow, Green, Blue, Purple ] + + init : Window.Size -> Random.Seed -> ( Model, Random.Seed ) init window seed = let ( game, newSeed ) = - initArtGame window [] seed + initArtGame window initialColors seed in - ( { game = game, playing = False }, newSeed ) + ( { game = game, playing = False, seed = newSeed }, newSeed ) -initArtGame : Window.Size -> List Color -> Random.Seed -> ( ArtGame, Random.Seed ) +initArtGame : Window.Size -> Zipper Color -> Random.Seed -> ( ArtGame, Random.Seed ) initArtGame window colors seed = let ( balls, newSeed ) = - Random.step (initialBalls window colors) seed + Random.step (initialBalls window (Zipper.current colors :: Zipper.before colors)) seed in ( { time = 0 , seed = newSeed , points = 0 - , color = Yellow + , color = Zipper.current colors , balls = balls , win = False , finishRound = False - , knownUnknownColors = ( [], [ Red, Orange, Yellow, Green, Blue, Purple ] ) + , knownUnknownColors = colors } , newSeed ) @@ -118,49 +128,22 @@ update : Window.Size -> Translator -> Msg -> Model -> ( Model, MsgFromPage, Cmd update window translator msg model = case msg of ColorClicked id gameColor color -> - if gameColor == color then - let - artGame = - model.game - - newBalls = - artGame.balls |> removeBall id - - finishRound = - List.length newBalls == 0 - - win = - finishRound - && (List.length (unknownColors artGame.knownUnknownColors) == 0) - - newArtGame = - { artGame | balls = newBalls, finishRound = finishRound, win = win } - in - ( { model - | game = newArtGame - } - , AddPoints 10 - , Audio.play "audio/puff.mp3" - ) - else - ( model, NoOp, Cmd.none ) + colorClicked ( id, gameColor, color ) model Play -> + ( { model | playing = True }, NoOp, Cmd.none ) + + NextRound -> let - ( newArtGame, _ ) = - -- TODO: pass random seed from parent - initArtGame window (knownColors model.game.knownUnknownColors) (Random.initialSeed 0) + ( nextArtGame, newSeed ) = + initArtGame window (Debug.log "new colors" (nextColor model.game.knownUnknownColors)) model.seed in - ( { playing = True, game = newArtGame } |> nextColor, NoOp, Cmd.none ) + { model | game = nextArtGame, seed = newSeed } + |> update window translator Play FinishGame -> ( { model | playing = False }, NoOp, Cmd.none ) - NextRound -> - model - |> nextColor - |> update window translator Play - PlayAudio file -> ( model, NoOp, Audio.play file ) @@ -174,34 +157,50 @@ update window translator msg model = ( model, NoOp, Cmd.none ) -knownColors : ( List a, List a ) -> List a -knownColors = - Tuple.first +colorClicked : ( Int, Color, Color ) -> Model -> ( Model, MsgFromPage, Cmd Msg ) +colorClicked ( id, gameColor, colorClicked ) model = + if gameColor /= colorClicked then + ( model, NoOp, Cmd.none ) + else + let + artGame = + model.game + newBalls = + artGame.balls |> removeBall id -unknownColors : ( List a, List a ) -> List a -unknownColors = - Tuple.second + finishRound = + List.length newBalls == 0 + win = + finishRound + && (List.length (unknownColors artGame.knownUnknownColors) == 0) -nextColor : Model -> Model -nextColor model = - let - game = - model.game + newArtGame = + { artGame | balls = newBalls, finishRound = finishRound, win = win } + in + ( { model + | game = newArtGame + } + , AddPoints 10 + , Audio.play "audio/puff.mp3" + ) - knownUnknownColors = - case model.game.knownUnknownColors of - ( bs, c :: cs ) -> - ( c :: bs, cs ) - ( bs, [] ) -> - ( bs, [] ) +knownColors : Zipper a -> List a +knownColors colors = + Zipper.current colors :: Zipper.before colors - newGame = - { game | knownUnknownColors = knownUnknownColors } - in - { model | game = newGame } + +unknownColors : Zipper a -> List a +unknownColors colors = + Zipper.after colors + + +nextColor : Zipper a -> Zipper a +nextColor colors = + Zipper.next colors + |> Maybe.withDefault colors tick : Time -> Window.Size -> Translator -> Model -> ( Model, MsgFromPage, Cmd Msg ) From e71bbe622548f175014ab5b1a44806bccb9c404a Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 28 May 2017 15:14:26 -0700 Subject: [PATCH 28/33] add color splat --- elm-package.json | 1 + elm.js | 1729 ++++++++++++++++++++++++++++++++++++++++---- store/ArtStore.elm | 71 +- styles.css | 72 ++ 4 files changed, 1724 insertions(+), 149 deletions(-) diff --git a/elm-package.json b/elm-package.json index ebb16c0..dfc5aca 100644 --- a/elm-package.json +++ b/elm-package.json @@ -10,6 +10,7 @@ "dependencies": { "eeue56/elm-all-dict": "2.0.1 <= v < 3.0.0", "elm-community/linear-algebra": "3.1.0 <= v < 4.0.0", + "elm-community/list-extra": "6.1.0 <= v < 7.0.0", "elm-community/random-extra": "2.0.0 <= v < 3.0.0", "elm-community/string-extra": "1.3.3 <= v < 2.0.0", "elm-lang/animation-frame": "1.0.1 <= v < 2.0.0", diff --git a/elm.js b/elm.js index 22efaa3..ac609ef 100644 --- a/elm.js +++ b/elm.js @@ -5269,6 +5269,1345 @@ var _elm_community$linear_algebra$Math_Vector2$getX = _elm_community$linear_alge var _elm_community$linear_algebra$Math_Vector2$vec2 = _elm_community$linear_algebra$Native_Math_Vector2.vec2; var _elm_community$linear_algebra$Math_Vector2$Vec2 = {ctor: 'Vec2'}; +var _elm_lang$core$Set$foldr = F3( + function (f, b, _p0) { + var _p1 = _p0; + return A3( + _elm_lang$core$Dict$foldr, + F3( + function (k, _p2, b) { + return A2(f, k, b); + }), + b, + _p1._0); + }); +var _elm_lang$core$Set$foldl = F3( + function (f, b, _p3) { + var _p4 = _p3; + return A3( + _elm_lang$core$Dict$foldl, + F3( + function (k, _p5, b) { + return A2(f, k, b); + }), + b, + _p4._0); + }); +var _elm_lang$core$Set$toList = function (_p6) { + var _p7 = _p6; + return _elm_lang$core$Dict$keys(_p7._0); +}; +var _elm_lang$core$Set$size = function (_p8) { + var _p9 = _p8; + return _elm_lang$core$Dict$size(_p9._0); +}; +var _elm_lang$core$Set$member = F2( + function (k, _p10) { + var _p11 = _p10; + return A2(_elm_lang$core$Dict$member, k, _p11._0); + }); +var _elm_lang$core$Set$isEmpty = function (_p12) { + var _p13 = _p12; + return _elm_lang$core$Dict$isEmpty(_p13._0); +}; +var _elm_lang$core$Set$Set_elm_builtin = function (a) { + return {ctor: 'Set_elm_builtin', _0: a}; +}; +var _elm_lang$core$Set$empty = _elm_lang$core$Set$Set_elm_builtin(_elm_lang$core$Dict$empty); +var _elm_lang$core$Set$singleton = function (k) { + return _elm_lang$core$Set$Set_elm_builtin( + A2( + _elm_lang$core$Dict$singleton, + k, + {ctor: '_Tuple0'})); +}; +var _elm_lang$core$Set$insert = F2( + function (k, _p14) { + var _p15 = _p14; + return _elm_lang$core$Set$Set_elm_builtin( + A3( + _elm_lang$core$Dict$insert, + k, + {ctor: '_Tuple0'}, + _p15._0)); + }); +var _elm_lang$core$Set$fromList = function (xs) { + return A3(_elm_lang$core$List$foldl, _elm_lang$core$Set$insert, _elm_lang$core$Set$empty, xs); +}; +var _elm_lang$core$Set$map = F2( + function (f, s) { + return _elm_lang$core$Set$fromList( + A2( + _elm_lang$core$List$map, + f, + _elm_lang$core$Set$toList(s))); + }); +var _elm_lang$core$Set$remove = F2( + function (k, _p16) { + var _p17 = _p16; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$remove, k, _p17._0)); + }); +var _elm_lang$core$Set$union = F2( + function (_p19, _p18) { + var _p20 = _p19; + var _p21 = _p18; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$union, _p20._0, _p21._0)); + }); +var _elm_lang$core$Set$intersect = F2( + function (_p23, _p22) { + var _p24 = _p23; + var _p25 = _p22; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$intersect, _p24._0, _p25._0)); + }); +var _elm_lang$core$Set$diff = F2( + function (_p27, _p26) { + var _p28 = _p27; + var _p29 = _p26; + return _elm_lang$core$Set$Set_elm_builtin( + A2(_elm_lang$core$Dict$diff, _p28._0, _p29._0)); + }); +var _elm_lang$core$Set$filter = F2( + function (p, _p30) { + var _p31 = _p30; + return _elm_lang$core$Set$Set_elm_builtin( + A2( + _elm_lang$core$Dict$filter, + F2( + function (k, _p32) { + return p(k); + }), + _p31._0)); + }); +var _elm_lang$core$Set$partition = F2( + function (p, _p33) { + var _p34 = _p33; + var _p35 = A2( + _elm_lang$core$Dict$partition, + F2( + function (k, _p36) { + return p(k); + }), + _p34._0); + var p1 = _p35._0; + var p2 = _p35._1; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Set$Set_elm_builtin(p1), + _1: _elm_lang$core$Set$Set_elm_builtin(p2) + }; + }); + +var _elm_community$list_extra$List_Extra$greedyGroupsOfWithStep = F3( + function (size, step, xs) { + var okayXs = _elm_lang$core$Native_Utils.cmp( + _elm_lang$core$List$length(xs), + 0) > 0; + var okayArgs = (_elm_lang$core$Native_Utils.cmp(size, 0) > 0) && (_elm_lang$core$Native_Utils.cmp(step, 0) > 0); + var xs_ = A2(_elm_lang$core$List$drop, step, xs); + var group = A2(_elm_lang$core$List$take, size, xs); + return (okayArgs && okayXs) ? { + ctor: '::', + _0: group, + _1: A3(_elm_community$list_extra$List_Extra$greedyGroupsOfWithStep, size, step, xs_) + } : {ctor: '[]'}; + }); +var _elm_community$list_extra$List_Extra$greedyGroupsOf = F2( + function (size, xs) { + return A3(_elm_community$list_extra$List_Extra$greedyGroupsOfWithStep, size, size, xs); + }); +var _elm_community$list_extra$List_Extra$groupsOfWithStep = F3( + function (size, step, xs) { + var okayArgs = (_elm_lang$core$Native_Utils.cmp(size, 0) > 0) && (_elm_lang$core$Native_Utils.cmp(step, 0) > 0); + var xs_ = A2(_elm_lang$core$List$drop, step, xs); + var group = A2(_elm_lang$core$List$take, size, xs); + var okayLength = _elm_lang$core$Native_Utils.eq( + size, + _elm_lang$core$List$length(group)); + return (okayArgs && okayLength) ? { + ctor: '::', + _0: group, + _1: A3(_elm_community$list_extra$List_Extra$groupsOfWithStep, size, step, xs_) + } : {ctor: '[]'}; + }); +var _elm_community$list_extra$List_Extra$groupsOf = F2( + function (size, xs) { + return A3(_elm_community$list_extra$List_Extra$groupsOfWithStep, size, size, xs); + }); +var _elm_community$list_extra$List_Extra$zip5 = _elm_lang$core$List$map5( + F5( + function (v0, v1, v2, v3, v4) { + return {ctor: '_Tuple5', _0: v0, _1: v1, _2: v2, _3: v3, _4: v4}; + })); +var _elm_community$list_extra$List_Extra$zip4 = _elm_lang$core$List$map4( + F4( + function (v0, v1, v2, v3) { + return {ctor: '_Tuple4', _0: v0, _1: v1, _2: v2, _3: v3}; + })); +var _elm_community$list_extra$List_Extra$zip3 = _elm_lang$core$List$map3( + F3( + function (v0, v1, v2) { + return {ctor: '_Tuple3', _0: v0, _1: v1, _2: v2}; + })); +var _elm_community$list_extra$List_Extra$zip = _elm_lang$core$List$map2( + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + })); +var _elm_community$list_extra$List_Extra$isPrefixOf = F2( + function (prefix, xs) { + var _p0 = {ctor: '_Tuple2', _0: prefix, _1: xs}; + if (_p0._0.ctor === '[]') { + return true; + } else { + if (_p0._1.ctor === '[]') { + return false; + } else { + return _elm_lang$core$Native_Utils.eq(_p0._0._0, _p0._1._0) && A2(_elm_community$list_extra$List_Extra$isPrefixOf, _p0._0._1, _p0._1._1); + } + } + }); +var _elm_community$list_extra$List_Extra$isSuffixOf = F2( + function (suffix, xs) { + return A2( + _elm_community$list_extra$List_Extra$isPrefixOf, + _elm_lang$core$List$reverse(suffix), + _elm_lang$core$List$reverse(xs)); + }); +var _elm_community$list_extra$List_Extra$selectSplit = function (xs) { + var _p1 = xs; + if (_p1.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p5 = _p1._1; + var _p4 = _p1._0; + return { + ctor: '::', + _0: { + ctor: '_Tuple3', + _0: {ctor: '[]'}, + _1: _p4, + _2: _p5 + }, + _1: A2( + _elm_lang$core$List$map, + function (_p2) { + var _p3 = _p2; + return { + ctor: '_Tuple3', + _0: {ctor: '::', _0: _p4, _1: _p3._0}, + _1: _p3._1, + _2: _p3._2 + }; + }, + _elm_community$list_extra$List_Extra$selectSplit(_p5)) + }; + } +}; +var _elm_community$list_extra$List_Extra$select = function (xs) { + var _p6 = xs; + if (_p6.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p10 = _p6._1; + var _p9 = _p6._0; + return { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _p9, _1: _p10}, + _1: A2( + _elm_lang$core$List$map, + function (_p7) { + var _p8 = _p7; + return { + ctor: '_Tuple2', + _0: _p8._0, + _1: {ctor: '::', _0: _p9, _1: _p8._1} + }; + }, + _elm_community$list_extra$List_Extra$select(_p10)) + }; + } +}; +var _elm_community$list_extra$List_Extra$tailsHelp = F2( + function (e, list) { + var _p11 = list; + if (_p11.ctor === '::') { + var _p12 = _p11._0; + return { + ctor: '::', + _0: {ctor: '::', _0: e, _1: _p12}, + _1: {ctor: '::', _0: _p12, _1: _p11._1} + }; + } else { + return {ctor: '[]'}; + } + }); +var _elm_community$list_extra$List_Extra$tails = A2( + _elm_lang$core$List$foldr, + _elm_community$list_extra$List_Extra$tailsHelp, + { + ctor: '::', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }); +var _elm_community$list_extra$List_Extra$isInfixOf = F2( + function (infix, xs) { + return A2( + _elm_lang$core$List$any, + _elm_community$list_extra$List_Extra$isPrefixOf(infix), + _elm_community$list_extra$List_Extra$tails(xs)); + }); +var _elm_community$list_extra$List_Extra$inits = A2( + _elm_lang$core$List$foldr, + F2( + function (e, acc) { + return { + ctor: '::', + _0: {ctor: '[]'}, + _1: A2( + _elm_lang$core$List$map, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + })(e), + acc) + }; + }), + { + ctor: '::', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }); +var _elm_community$list_extra$List_Extra$groupWhileTransitively = F2( + function (cmp, xs_) { + var _p13 = xs_; + if (_p13.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (_p13._1.ctor === '[]') { + return { + ctor: '::', + _0: { + ctor: '::', + _0: _p13._0, + _1: {ctor: '[]'} + }, + _1: {ctor: '[]'} + }; + } else { + var _p15 = _p13._0; + var _p14 = A2(_elm_community$list_extra$List_Extra$groupWhileTransitively, cmp, _p13._1); + if (_p14.ctor === '::') { + return A2(cmp, _p15, _p13._1._0) ? { + ctor: '::', + _0: {ctor: '::', _0: _p15, _1: _p14._0}, + _1: _p14._1 + } : { + ctor: '::', + _0: { + ctor: '::', + _0: _p15, + _1: {ctor: '[]'} + }, + _1: _p14 + }; + } else { + return {ctor: '[]'}; + } + } + } + }); +var _elm_community$list_extra$List_Extra$stripPrefix = F2( + function (prefix, xs) { + var step = F2( + function (e, m) { + var _p16 = m; + if (_p16.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Nothing; + } else { + if (_p16._0.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Native_Utils.eq(e, _p16._0._0) ? _elm_lang$core$Maybe$Just(_p16._0._1) : _elm_lang$core$Maybe$Nothing; + } + } + }); + return A3( + _elm_lang$core$List$foldl, + step, + _elm_lang$core$Maybe$Just(xs), + prefix); + }); +var _elm_community$list_extra$List_Extra$dropWhileRight = function (p) { + return A2( + _elm_lang$core$List$foldr, + F2( + function (x, xs) { + return (p(x) && _elm_lang$core$List$isEmpty(xs)) ? {ctor: '[]'} : {ctor: '::', _0: x, _1: xs}; + }), + {ctor: '[]'}); +}; +var _elm_community$list_extra$List_Extra$takeWhileRight = function (p) { + var step = F2( + function (x, _p17) { + var _p18 = _p17; + var _p19 = _p18._0; + return (p(x) && _p18._1) ? { + ctor: '_Tuple2', + _0: {ctor: '::', _0: x, _1: _p19}, + _1: true + } : {ctor: '_Tuple2', _0: _p19, _1: false}; + }); + return function (_p20) { + return _elm_lang$core$Tuple$first( + A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: {ctor: '[]'}, + _1: true + }, + _p20)); + }; +}; +var _elm_community$list_extra$List_Extra$splitAt = F2( + function (n, xs) { + return { + ctor: '_Tuple2', + _0: A2(_elm_lang$core$List$take, n, xs), + _1: A2(_elm_lang$core$List$drop, n, xs) + }; + }); +var _elm_community$list_extra$List_Extra$groupsOfVarying_ = F3( + function (listOflengths, list, accu) { + groupsOfVarying_: + while (true) { + var _p21 = {ctor: '_Tuple2', _0: listOflengths, _1: list}; + if (((_p21.ctor === '_Tuple2') && (_p21._0.ctor === '::')) && (_p21._1.ctor === '::')) { + var _p22 = A2(_elm_community$list_extra$List_Extra$splitAt, _p21._0._0, list); + var head = _p22._0; + var tail = _p22._1; + var _v11 = _p21._0._1, + _v12 = tail, + _v13 = {ctor: '::', _0: head, _1: accu}; + listOflengths = _v11; + list = _v12; + accu = _v13; + continue groupsOfVarying_; + } else { + return _elm_lang$core$List$reverse(accu); + } + } + }); +var _elm_community$list_extra$List_Extra$groupsOfVarying = F2( + function (listOflengths, list) { + return A3( + _elm_community$list_extra$List_Extra$groupsOfVarying_, + listOflengths, + list, + {ctor: '[]'}); + }); +var _elm_community$list_extra$List_Extra$unfoldr = F2( + function (f, seed) { + var _p23 = f(seed); + if (_p23.ctor === 'Nothing') { + return {ctor: '[]'}; + } else { + return { + ctor: '::', + _0: _p23._0._0, + _1: A2(_elm_community$list_extra$List_Extra$unfoldr, f, _p23._0._1) + }; + } + }); +var _elm_community$list_extra$List_Extra$scanr1 = F2( + function (f, xs_) { + var _p24 = xs_; + if (_p24.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (_p24._1.ctor === '[]') { + return { + ctor: '::', + _0: _p24._0, + _1: {ctor: '[]'} + }; + } else { + var _p25 = A2(_elm_community$list_extra$List_Extra$scanr1, f, _p24._1); + if (_p25.ctor === '::') { + return { + ctor: '::', + _0: A2(f, _p24._0, _p25._0), + _1: _p25 + }; + } else { + return {ctor: '[]'}; + } + } + } + }); +var _elm_community$list_extra$List_Extra$scanr = F3( + function (f, acc, xs_) { + var _p26 = xs_; + if (_p26.ctor === '[]') { + return { + ctor: '::', + _0: acc, + _1: {ctor: '[]'} + }; + } else { + var _p27 = A3(_elm_community$list_extra$List_Extra$scanr, f, acc, _p26._1); + if (_p27.ctor === '::') { + return { + ctor: '::', + _0: A2(f, _p26._0, _p27._0), + _1: _p27 + }; + } else { + return {ctor: '[]'}; + } + } + }); +var _elm_community$list_extra$List_Extra$scanl1 = F2( + function (f, xs_) { + var _p28 = xs_; + if (_p28.ctor === '[]') { + return {ctor: '[]'}; + } else { + return A3(_elm_lang$core$List$scanl, f, _p28._0, _p28._1); + } + }); +var _elm_community$list_extra$List_Extra$indexedFoldr = F3( + function (func, acc, list) { + var step = F2( + function (x, _p29) { + var _p30 = _p29; + var _p31 = _p30._0; + return { + ctor: '_Tuple2', + _0: _p31 - 1, + _1: A3(func, _p31, x, _p30._1) + }; + }); + return _elm_lang$core$Tuple$second( + A3( + _elm_lang$core$List$foldr, + step, + { + ctor: '_Tuple2', + _0: _elm_lang$core$List$length(list) - 1, + _1: acc + }, + list)); + }); +var _elm_community$list_extra$List_Extra$indexedFoldl = F3( + function (func, acc, list) { + var step = F2( + function (x, _p32) { + var _p33 = _p32; + var _p34 = _p33._0; + return { + ctor: '_Tuple2', + _0: _p34 + 1, + _1: A3(func, _p34, x, _p33._1) + }; + }); + return _elm_lang$core$Tuple$second( + A3( + _elm_lang$core$List$foldl, + step, + {ctor: '_Tuple2', _0: 0, _1: acc}, + list)); + }); +var _elm_community$list_extra$List_Extra$foldr1 = F2( + function (f, xs) { + var mf = F2( + function (x, m) { + return _elm_lang$core$Maybe$Just( + function () { + var _p35 = m; + if (_p35.ctor === 'Nothing') { + return x; + } else { + return A2(f, x, _p35._0); + } + }()); + }); + return A3(_elm_lang$core$List$foldr, mf, _elm_lang$core$Maybe$Nothing, xs); + }); +var _elm_community$list_extra$List_Extra$foldl1 = F2( + function (f, xs) { + var mf = F2( + function (x, m) { + return _elm_lang$core$Maybe$Just( + function () { + var _p36 = m; + if (_p36.ctor === 'Nothing') { + return x; + } else { + return A2(f, _p36._0, x); + } + }()); + }); + return A3(_elm_lang$core$List$foldl, mf, _elm_lang$core$Maybe$Nothing, xs); + }); +var _elm_community$list_extra$List_Extra$interweaveHelp = F3( + function (l1, l2, acc) { + interweaveHelp: + while (true) { + var _p37 = {ctor: '_Tuple2', _0: l1, _1: l2}; + _v24_1: + do { + if (_p37._0.ctor === '::') { + if (_p37._1.ctor === '::') { + var _v25 = _p37._0._1, + _v26 = _p37._1._1, + _v27 = A2( + _elm_lang$core$Basics_ops['++'], + acc, + { + ctor: '::', + _0: _p37._0._0, + _1: { + ctor: '::', + _0: _p37._1._0, + _1: {ctor: '[]'} + } + }); + l1 = _v25; + l2 = _v26; + acc = _v27; + continue interweaveHelp; + } else { + break _v24_1; + } + } else { + if (_p37._1.ctor === '[]') { + break _v24_1; + } else { + return A2(_elm_lang$core$Basics_ops['++'], acc, _p37._1); + } + } + } while(false); + return A2(_elm_lang$core$Basics_ops['++'], acc, _p37._0); + } + }); +var _elm_community$list_extra$List_Extra$interweave = F2( + function (l1, l2) { + return A3( + _elm_community$list_extra$List_Extra$interweaveHelp, + l1, + l2, + {ctor: '[]'}); + }); +var _elm_community$list_extra$List_Extra$permutations = function (xs_) { + var _p38 = xs_; + if (_p38.ctor === '[]') { + return { + ctor: '::', + _0: {ctor: '[]'}, + _1: {ctor: '[]'} + }; + } else { + var f = function (_p39) { + var _p40 = _p39; + return A2( + _elm_lang$core$List$map, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + })(_p40._0), + _elm_community$list_extra$List_Extra$permutations(_p40._1)); + }; + return A2( + _elm_lang$core$List$concatMap, + f, + _elm_community$list_extra$List_Extra$select(_p38)); + } +}; +var _elm_community$list_extra$List_Extra$isPermutationOf = F2( + function (permut, xs) { + return A2( + _elm_lang$core$List$member, + permut, + _elm_community$list_extra$List_Extra$permutations(xs)); + }); +var _elm_community$list_extra$List_Extra$subsequencesNonEmpty = function (xs) { + var _p41 = xs; + if (_p41.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p42 = _p41._0; + var f = F2( + function (ys, r) { + return { + ctor: '::', + _0: ys, + _1: { + ctor: '::', + _0: {ctor: '::', _0: _p42, _1: ys}, + _1: r + } + }; + }); + return { + ctor: '::', + _0: { + ctor: '::', + _0: _p42, + _1: {ctor: '[]'} + }, + _1: A3( + _elm_lang$core$List$foldr, + f, + {ctor: '[]'}, + _elm_community$list_extra$List_Extra$subsequencesNonEmpty(_p41._1)) + }; + } +}; +var _elm_community$list_extra$List_Extra$subsequences = function (xs) { + return { + ctor: '::', + _0: {ctor: '[]'}, + _1: _elm_community$list_extra$List_Extra$subsequencesNonEmpty(xs) + }; +}; +var _elm_community$list_extra$List_Extra$isSubsequenceOf = F2( + function (subseq, xs) { + return A2( + _elm_lang$core$List$member, + subseq, + _elm_community$list_extra$List_Extra$subsequences(xs)); + }); +var _elm_community$list_extra$List_Extra$transpose = function (ll) { + transpose: + while (true) { + var _p43 = ll; + if (_p43.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (_p43._0.ctor === '[]') { + var _v32 = _p43._1; + ll = _v32; + continue transpose; + } else { + var _p44 = _p43._1; + var tails = A2(_elm_lang$core$List$filterMap, _elm_lang$core$List$tail, _p44); + var heads = A2(_elm_lang$core$List$filterMap, _elm_lang$core$List$head, _p44); + return { + ctor: '::', + _0: {ctor: '::', _0: _p43._0._0, _1: heads}, + _1: _elm_community$list_extra$List_Extra$transpose( + {ctor: '::', _0: _p43._0._1, _1: tails}) + }; + } + } + } +}; +var _elm_community$list_extra$List_Extra$intercalate = function (xs) { + return function (_p45) { + return _elm_lang$core$List$concat( + A2(_elm_lang$core$List$intersperse, xs, _p45)); + }; +}; +var _elm_community$list_extra$List_Extra$filterNot = F2( + function (pred, list) { + return A2( + _elm_lang$core$List$filter, + function (_p46) { + return !pred(_p46); + }, + list); + }); +var _elm_community$list_extra$List_Extra$removeAt = F2( + function (index, l) { + if (_elm_lang$core$Native_Utils.cmp(index, 0) < 0) { + return l; + } else { + var tail = _elm_lang$core$List$tail( + A2(_elm_lang$core$List$drop, index, l)); + var head = A2(_elm_lang$core$List$take, index, l); + var _p47 = tail; + if (_p47.ctor === 'Nothing') { + return l; + } else { + return A2(_elm_lang$core$List$append, head, _p47._0); + } + } + }); +var _elm_community$list_extra$List_Extra$stableSortWith = F2( + function (pred, list) { + var predWithIndex = F2( + function (_p49, _p48) { + var _p50 = _p49; + var _p51 = _p48; + var result = A2(pred, _p50._0, _p51._0); + var _p52 = result; + if (_p52.ctor === 'EQ') { + return A2(_elm_lang$core$Basics$compare, _p50._1, _p51._1); + } else { + return result; + } + }); + var listWithIndex = A2( + _elm_lang$core$List$indexedMap, + F2( + function (i, a) { + return {ctor: '_Tuple2', _0: a, _1: i}; + }), + list); + return A2( + _elm_lang$core$List$map, + _elm_lang$core$Tuple$first, + A2(_elm_lang$core$List$sortWith, predWithIndex, listWithIndex)); + }); +var _elm_community$list_extra$List_Extra$setAt = F3( + function (index, value, l) { + if (_elm_lang$core$Native_Utils.cmp(index, 0) < 0) { + return _elm_lang$core$Maybe$Nothing; + } else { + var tail = _elm_lang$core$List$tail( + A2(_elm_lang$core$List$drop, index, l)); + var head = A2(_elm_lang$core$List$take, index, l); + var _p53 = tail; + if (_p53.ctor === 'Nothing') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A2( + _elm_lang$core$List$append, + head, + {ctor: '::', _0: value, _1: _p53._0})); + } + } + }); +var _elm_community$list_extra$List_Extra$remove = F2( + function (x, xs) { + var _p54 = xs; + if (_p54.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p56 = _p54._1; + var _p55 = _p54._0; + return _elm_lang$core$Native_Utils.eq(x, _p55) ? _p56 : { + ctor: '::', + _0: _p55, + _1: A2(_elm_community$list_extra$List_Extra$remove, x, _p56) + }; + } + }); +var _elm_community$list_extra$List_Extra$updateIfIndex = F3( + function (predicate, update, list) { + return A2( + _elm_lang$core$List$indexedMap, + F2( + function (i, x) { + return predicate(i) ? update(x) : x; + }), + list); + }); +var _elm_community$list_extra$List_Extra$updateAt = F3( + function (index, update, list) { + return ((_elm_lang$core$Native_Utils.cmp(index, 0) < 0) || (_elm_lang$core$Native_Utils.cmp( + index, + _elm_lang$core$List$length(list)) > -1)) ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just( + A3( + _elm_community$list_extra$List_Extra$updateIfIndex, + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(index), + update, + list)); + }); +var _elm_community$list_extra$List_Extra$updateIf = F3( + function (predicate, update, list) { + return A2( + _elm_lang$core$List$map, + function (item) { + return predicate(item) ? update(item) : item; + }, + list); + }); +var _elm_community$list_extra$List_Extra$replaceIf = F3( + function (predicate, replacement, list) { + return A3( + _elm_community$list_extra$List_Extra$updateIf, + predicate, + _elm_lang$core$Basics$always(replacement), + list); + }); +var _elm_community$list_extra$List_Extra$findIndices = function (p) { + return function (_p57) { + return A2( + _elm_lang$core$List$map, + _elm_lang$core$Tuple$first, + A2( + _elm_lang$core$List$filter, + function (_p58) { + var _p59 = _p58; + return p(_p59._1); + }, + A2( + _elm_lang$core$List$indexedMap, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + _p57))); + }; +}; +var _elm_community$list_extra$List_Extra$findIndex = function (p) { + return function (_p60) { + return _elm_lang$core$List$head( + A2(_elm_community$list_extra$List_Extra$findIndices, p, _p60)); + }; +}; +var _elm_community$list_extra$List_Extra$splitWhen = F2( + function (predicate, list) { + return A2( + _elm_lang$core$Maybe$map, + function (i) { + return A2(_elm_community$list_extra$List_Extra$splitAt, i, list); + }, + A2(_elm_community$list_extra$List_Extra$findIndex, predicate, list)); + }); +var _elm_community$list_extra$List_Extra$elemIndices = function (x) { + return _elm_community$list_extra$List_Extra$findIndices( + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(x)); +}; +var _elm_community$list_extra$List_Extra$elemIndex = function (x) { + return _elm_community$list_extra$List_Extra$findIndex( + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })(x)); +}; +var _elm_community$list_extra$List_Extra$find = F2( + function (predicate, list) { + find: + while (true) { + var _p61 = list; + if (_p61.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p62 = _p61._0; + if (predicate(_p62)) { + return _elm_lang$core$Maybe$Just(_p62); + } else { + var _v41 = predicate, + _v42 = _p61._1; + predicate = _v41; + list = _v42; + continue find; + } + } + } + }); +var _elm_community$list_extra$List_Extra$notMember = function (x) { + return function (_p63) { + return !A2(_elm_lang$core$List$member, x, _p63); + }; +}; +var _elm_community$list_extra$List_Extra$andThen = _elm_lang$core$List$concatMap; +var _elm_community$list_extra$List_Extra$lift2 = F3( + function (f, la, lb) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (a) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (b) { + return { + ctor: '::', + _0: A2(f, a, b), + _1: {ctor: '[]'} + }; + }, + lb); + }, + la); + }); +var _elm_community$list_extra$List_Extra$lift3 = F4( + function (f, la, lb, lc) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (a) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (b) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (c) { + return { + ctor: '::', + _0: A3(f, a, b, c), + _1: {ctor: '[]'} + }; + }, + lc); + }, + lb); + }, + la); + }); +var _elm_community$list_extra$List_Extra$lift4 = F5( + function (f, la, lb, lc, ld) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (a) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (b) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (c) { + return A2( + _elm_community$list_extra$List_Extra$andThen, + function (d) { + return { + ctor: '::', + _0: A4(f, a, b, c, d), + _1: {ctor: '[]'} + }; + }, + ld); + }, + lc); + }, + lb); + }, + la); + }); +var _elm_community$list_extra$List_Extra$andMap = F2( + function (l, fl) { + return A3( + _elm_lang$core$List$map2, + F2( + function (x, y) { + return x(y); + }), + fl, + l); + }); +var _elm_community$list_extra$List_Extra$uniqueHelp = F3( + function (f, existing, remaining) { + uniqueHelp: + while (true) { + var _p64 = remaining; + if (_p64.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p66 = _p64._1; + var _p65 = _p64._0; + var computedFirst = f(_p65); + if (A2(_elm_lang$core$Set$member, computedFirst, existing)) { + var _v44 = f, + _v45 = existing, + _v46 = _p66; + f = _v44; + existing = _v45; + remaining = _v46; + continue uniqueHelp; + } else { + return { + ctor: '::', + _0: _p65, + _1: A3( + _elm_community$list_extra$List_Extra$uniqueHelp, + f, + A2(_elm_lang$core$Set$insert, computedFirst, existing), + _p66) + }; + } + } + } + }); +var _elm_community$list_extra$List_Extra$uniqueBy = F2( + function (f, list) { + return A3(_elm_community$list_extra$List_Extra$uniqueHelp, f, _elm_lang$core$Set$empty, list); + }); +var _elm_community$list_extra$List_Extra$allDifferentBy = F2( + function (f, list) { + return _elm_lang$core$Native_Utils.eq( + _elm_lang$core$List$length(list), + _elm_lang$core$List$length( + A2(_elm_community$list_extra$List_Extra$uniqueBy, f, list))); + }); +var _elm_community$list_extra$List_Extra$allDifferent = function (list) { + return A2(_elm_community$list_extra$List_Extra$allDifferentBy, _elm_lang$core$Basics$identity, list); +}; +var _elm_community$list_extra$List_Extra$unique = function (list) { + return A3(_elm_community$list_extra$List_Extra$uniqueHelp, _elm_lang$core$Basics$identity, _elm_lang$core$Set$empty, list); +}; +var _elm_community$list_extra$List_Extra$dropWhile = F2( + function (predicate, list) { + dropWhile: + while (true) { + var _p67 = list; + if (_p67.ctor === '[]') { + return {ctor: '[]'}; + } else { + if (predicate(_p67._0)) { + var _v48 = predicate, + _v49 = _p67._1; + predicate = _v48; + list = _v49; + continue dropWhile; + } else { + return list; + } + } + } + }); +var _elm_community$list_extra$List_Extra$takeWhile = function (predicate) { + var takeWhileMemo = F2( + function (memo, list) { + takeWhileMemo: + while (true) { + var _p68 = list; + if (_p68.ctor === '[]') { + return _elm_lang$core$List$reverse(memo); + } else { + var _p69 = _p68._0; + if (predicate(_p69)) { + var _v51 = {ctor: '::', _0: _p69, _1: memo}, + _v52 = _p68._1; + memo = _v51; + list = _v52; + continue takeWhileMemo; + } else { + return _elm_lang$core$List$reverse(memo); + } + } + } + }); + return takeWhileMemo( + {ctor: '[]'}); +}; +var _elm_community$list_extra$List_Extra$span = F2( + function (p, xs) { + return { + ctor: '_Tuple2', + _0: A2(_elm_community$list_extra$List_Extra$takeWhile, p, xs), + _1: A2(_elm_community$list_extra$List_Extra$dropWhile, p, xs) + }; + }); +var _elm_community$list_extra$List_Extra$break = function (p) { + return _elm_community$list_extra$List_Extra$span( + function (_p70) { + return !p(_p70); + }); +}; +var _elm_community$list_extra$List_Extra$groupWhile = F2( + function (eq, xs_) { + var _p71 = xs_; + if (_p71.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p73 = _p71._0; + var _p72 = A2( + _elm_community$list_extra$List_Extra$span, + eq(_p73), + _p71._1); + var ys = _p72._0; + var zs = _p72._1; + return { + ctor: '::', + _0: {ctor: '::', _0: _p73, _1: ys}, + _1: A2(_elm_community$list_extra$List_Extra$groupWhile, eq, zs) + }; + } + }); +var _elm_community$list_extra$List_Extra$group = _elm_community$list_extra$List_Extra$groupWhile( + F2( + function (x, y) { + return _elm_lang$core$Native_Utils.eq(x, y); + })); +var _elm_community$list_extra$List_Extra$minimumBy = F2( + function (f, ls) { + var minBy = F2( + function (x, _p74) { + var _p75 = _p74; + var _p76 = _p75._1; + var fx = f(x); + return (_elm_lang$core$Native_Utils.cmp(fx, _p76) < 0) ? {ctor: '_Tuple2', _0: x, _1: fx} : {ctor: '_Tuple2', _0: _p75._0, _1: _p76}; + }); + var _p77 = ls; + if (_p77.ctor === '::') { + if (_p77._1.ctor === '[]') { + return _elm_lang$core$Maybe$Just(_p77._0); + } else { + var _p78 = _p77._0; + return _elm_lang$core$Maybe$Just( + _elm_lang$core$Tuple$first( + A3( + _elm_lang$core$List$foldl, + minBy, + { + ctor: '_Tuple2', + _0: _p78, + _1: f(_p78) + }, + _p77._1))); + } + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_community$list_extra$List_Extra$maximumBy = F2( + function (f, ls) { + var maxBy = F2( + function (x, _p79) { + var _p80 = _p79; + var _p81 = _p80._1; + var fx = f(x); + return (_elm_lang$core$Native_Utils.cmp(fx, _p81) > 0) ? {ctor: '_Tuple2', _0: x, _1: fx} : {ctor: '_Tuple2', _0: _p80._0, _1: _p81}; + }); + var _p82 = ls; + if (_p82.ctor === '::') { + if (_p82._1.ctor === '[]') { + return _elm_lang$core$Maybe$Just(_p82._0); + } else { + var _p83 = _p82._0; + return _elm_lang$core$Maybe$Just( + _elm_lang$core$Tuple$first( + A3( + _elm_lang$core$List$foldl, + maxBy, + { + ctor: '_Tuple2', + _0: _p83, + _1: f(_p83) + }, + _p82._1))); + } + } else { + return _elm_lang$core$Maybe$Nothing; + } + }); +var _elm_community$list_extra$List_Extra$uncons = function (xs) { + var _p84 = xs; + if (_p84.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + {ctor: '_Tuple2', _0: _p84._0, _1: _p84._1}); + } +}; +var _elm_community$list_extra$List_Extra$swapAt = F3( + function (index1, index2, l) { + swapAt: + while (true) { + if (_elm_lang$core$Native_Utils.eq(index1, index2)) { + return _elm_lang$core$Maybe$Just(l); + } else { + if (_elm_lang$core$Native_Utils.cmp(index1, index2) > 0) { + var _v59 = index2, + _v60 = index1, + _v61 = l; + index1 = _v59; + index2 = _v60; + l = _v61; + continue swapAt; + } else { + if (_elm_lang$core$Native_Utils.cmp(index1, 0) < 0) { + return _elm_lang$core$Maybe$Nothing; + } else { + var _p85 = A2(_elm_community$list_extra$List_Extra$splitAt, index1, l); + var part1 = _p85._0; + var tail1 = _p85._1; + var _p86 = A2(_elm_community$list_extra$List_Extra$splitAt, index2 - index1, tail1); + var head2 = _p86._0; + var tail2 = _p86._1; + return A3( + _elm_lang$core$Maybe$map2, + F2( + function (_p88, _p87) { + var _p89 = _p88; + var _p90 = _p87; + return _elm_lang$core$List$concat( + { + ctor: '::', + _0: part1, + _1: { + ctor: '::', + _0: {ctor: '::', _0: _p90._0, _1: _p89._1}, + _1: { + ctor: '::', + _0: {ctor: '::', _0: _p89._0, _1: _p90._1}, + _1: {ctor: '[]'} + } + } + }); + }), + _elm_community$list_extra$List_Extra$uncons(head2), + _elm_community$list_extra$List_Extra$uncons(tail2)); + } + } + } + } + }); +var _elm_community$list_extra$List_Extra$iterate = F2( + function (f, x) { + var _p91 = f(x); + if (_p91.ctor === 'Just') { + return { + ctor: '::', + _0: x, + _1: A2(_elm_community$list_extra$List_Extra$iterate, f, _p91._0) + }; + } else { + return { + ctor: '::', + _0: x, + _1: {ctor: '[]'} + }; + } + }); +var _elm_community$list_extra$List_Extra$getAt = F2( + function (idx, xs) { + return (_elm_lang$core$Native_Utils.cmp(idx, 0) < 0) ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$List$head( + A2(_elm_lang$core$List$drop, idx, xs)); + }); +var _elm_community$list_extra$List_Extra_ops = _elm_community$list_extra$List_Extra_ops || {}; +_elm_community$list_extra$List_Extra_ops['!!'] = _elm_lang$core$Basics$flip(_elm_community$list_extra$List_Extra$getAt); +var _elm_community$list_extra$List_Extra$init = function () { + var maybe = F2( + function (d, f) { + return function (_p92) { + return A2( + _elm_lang$core$Maybe$withDefault, + d, + A2(_elm_lang$core$Maybe$map, f, _p92)); + }; + }); + return A2( + _elm_lang$core$List$foldr, + function (x) { + return function (_p93) { + return _elm_lang$core$Maybe$Just( + A3( + maybe, + {ctor: '[]'}, + F2( + function (x, y) { + return {ctor: '::', _0: x, _1: y}; + })(x), + _p93)); + }; + }, + _elm_lang$core$Maybe$Nothing); +}(); +var _elm_community$list_extra$List_Extra$last = _elm_community$list_extra$List_Extra$foldl1( + _elm_lang$core$Basics$flip(_elm_lang$core$Basics$always)); + //import Native.List // var _elm_lang$core$Native_Array = function() { @@ -13030,6 +14369,93 @@ var _user$project$Store_ArtStore$exit = function (exitMsg) { } }); }; +var _user$project$Store_ArtStore$splatBackgroundSize = '80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%;'; +var _user$project$Store_ArtStore$splatBackground = A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0,', + A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0,', + A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) -9px 37px,', + A2( + _elm_lang$core$Basics_ops['++'], + '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px,', + A2(_elm_lang$core$Basics_ops['++'], '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px,', '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0;'))))); +var _user$project$Store_ArtStore$deadBall = function (ball) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'width', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class('poof'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$class( + A2( + _elm_lang$core$Basics_ops['++'], + 'poof', + _elm_lang$core$Basics$toString(ball.color))), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); +}; var _user$project$Store_ArtStore$colorSwapTime = 2000; var _user$project$Store_ArtStore$slowdown = 1 / 10; var _user$project$Store_ArtStore$initBottomWall = F2( @@ -13087,26 +14513,36 @@ var _user$project$Store_ArtStore$resolveCollision = F3( }; } }); -var _user$project$Store_ArtStore$removeBall = F2( - function (id, balls) { - return A2( - _elm_lang$core$List$filter, +var _user$project$Store_ArtStore$removeBall = F3( + function (id, balls, deadBalls) { + var _p5 = A2( + _elm_lang$core$List$partition, function (ball) { - return !_elm_lang$core$Native_Utils.eq(ball.id, id); + return _elm_lang$core$Native_Utils.eq(ball.id, id); }, balls); + if (((_p5.ctor === '_Tuple2') && (_p5._0.ctor === '::')) && (_p5._0._1.ctor === '[]')) { + return { + ctor: '_Tuple2', + _0: _p5._1, + _1: {ctor: '::', _0: _p5._0._0, _1: deadBalls} + }; + } else { + return {ctor: '_Tuple2', _0: balls, _1: deadBalls}; + } }); var _user$project$Store_ArtStore$initMovingBall = F5( - function (id, color, _p6, _p5, image) { - var _p7 = _p6; - var _p8 = _p5; + function (id, color, _p7, _p6, image) { + var _p8 = _p7; + var _p9 = _p6; return { id: id, color: color, radius: 32, - pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p7._0, _p7._1), - velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), - img: image + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p8._0, _p8._1), + velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, _p9._0, _p9._1), + img: image, + poof: false }; }); var _user$project$Store_ArtStore$ballsPerRound = 5; @@ -13135,7 +14571,7 @@ var _user$project$Store_ArtStore$randomPosition = function (window) { var _user$project$Store_ArtStore$alwaysGen = function (x) { return A2( _elm_lang$core$Random$map, - function (_p9) { + function (_p10) { return x; }, _elm_lang$core$Random$bool); @@ -13177,13 +14613,13 @@ var _user$project$Store_ArtStore$Model = F3( function (a, b, c) { return {playing: a, game: b, seed: c}; }); -var _user$project$Store_ArtStore$ArtGame = F8( - function (a, b, c, d, e, f, g, h) { - return {color: a, balls: b, time: c, seed: d, finishRound: e, win: f, points: g, knownUnknownColors: h}; +var _user$project$Store_ArtStore$ArtGame = F9( + function (a, b, c, d, e, f, g, h, i) { + return {color: a, balls: b, deadBalls: c, time: d, seed: e, finishRound: f, win: g, points: h, knownUnknownColors: i}; }); -var _user$project$Store_ArtStore$MovingBall = F6( - function (a, b, c, d, e, f) { - return {id: a, color: b, pos: c, radius: d, velocity: e, img: f}; +var _user$project$Store_ArtStore$MovingBall = F7( + function (a, b, c, d, e, f, g) { + return {id: a, color: b, pos: c, radius: d, velocity: e, img: f, poof: g}; }); var _user$project$Store_ArtStore$CollisionResult = F2( function (a, b) { @@ -13222,21 +14658,21 @@ var _user$project$Store_ArtStore$collideWith = F3( function (a0, bodies, acc) { collideWith: while (true) { - var _p10 = bodies; - if (_p10.ctor === '[]') { + var _p11 = bodies; + if (_p11.ctor === '[]') { return {ctor: '::', _0: a0, _1: acc}; } else { - var _p12 = _p10._0; - var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p12); - var _p11 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p12); - var a1 = _p11._0; - var b1 = _p11._1; - var _v5 = a1, - _v6 = _p10._1, - _v7 = {ctor: '::', _0: b1, _1: acc}; - a0 = _v5; - bodies = _v6; - acc = _v7; + var _p13 = _p11._0; + var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p13); + var _p12 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p13); + var a1 = _p12._0; + var b1 = _p12._1; + var _v6 = a1, + _v7 = _p11._1, + _v8 = {ctor: '::', _0: b1, _1: acc}; + a0 = _v6; + bodies = _v7; + acc = _v8; continue collideWith; } } @@ -13245,22 +14681,22 @@ var _user$project$Store_ArtStore$collide = F2( function (acc, bodies) { collide: while (true) { - var _p13 = bodies; - if (_p13.ctor === '[]') { + var _p14 = bodies; + if (_p14.ctor === '[]') { return acc; } else { - var _p14 = A3( + var _p15 = A3( _user$project$Store_ArtStore$collideWith, - _p13._0, - _p13._1, + _p14._0, + _p14._1, {ctor: '[]'}); - if (_p14.ctor === '[]') { + if (_p15.ctor === '[]') { return {ctor: '[]'}; } else { - var _v10 = {ctor: '::', _0: _p14._0, _1: acc}, - _v11 = _p14._1; - acc = _v10; - bodies = _v11; + var _v11 = {ctor: '::', _0: _p15._0, _1: acc}, + _v12 = _p15._1; + acc = _v11; + bodies = _v12; continue collide; } } @@ -13273,38 +14709,38 @@ var _user$project$Store_ArtStore$collisions = function (balls) { balls); }; var _user$project$Store_ArtStore$collisionBoxBubble = F2( - function (_p16, _p15) { - var _p17 = _p16; - var _p24 = _p17._1; - var _p18 = _p15; - var _p23 = _p18._1; - var _p19 = { + function (_p17, _p16) { + var _p18 = _p17; + var _p25 = _p18._1; + var _p19 = _p16; + var _p24 = _p19._1; + var _p20 = { ctor: '_Tuple2', - _0: _elm_community$linear_algebra$Math_Vector2$getX(_p24), - _1: _elm_community$linear_algebra$Math_Vector2$getY(_p24) + _0: _elm_community$linear_algebra$Math_Vector2$getX(_p25), + _1: _elm_community$linear_algebra$Math_Vector2$getY(_p25) }; - var boxX = _p19._0; - var boxY = _p19._1; - var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p18._0, _p17._0); - var _p20 = { + var boxX = _p20._0; + var boxY = _p20._1; + var dist = A2(_elm_community$linear_algebra$Math_Vector2$sub, _p19._0, _p18._0); + var _p21 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(dist), _1: _elm_community$linear_algebra$Math_Vector2$getY(dist) }; - var dx = _p20._0; - var dy = _p20._1; + var dx = _p21._0; + var dy = _p21._1; var c = A2( _elm_community$linear_algebra$Math_Vector2$vec2, A3(_elm_lang$core$Basics$clamp, 0 - boxX, boxX, dx), A3(_elm_lang$core$Basics$clamp, 0 - boxY, boxY, dy)); - var _p21 = { + var _p22 = { ctor: '_Tuple2', _0: _elm_community$linear_algebra$Math_Vector2$getX(c), _1: _elm_community$linear_algebra$Math_Vector2$getY(c) }; - var cx = _p21._0; - var cy = _p21._1; - var _p22 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( + var cx = _p22._0; + var cy = _p22._1; + var _p23 = (!_elm_lang$core$Native_Utils.eq(dist, c)) ? {ctor: '_Tuple2', _0: c, _1: false} : ((_elm_lang$core$Native_Utils.cmp( _elm_lang$core$Basics$abs(dx), _elm_lang$core$Basics$abs(dy)) > 0) ? ((_elm_lang$core$Native_Utils.cmp(cx, 0) > 0) ? { ctor: '_Tuple2', @@ -13323,17 +14759,17 @@ var _user$project$Store_ArtStore$collisionBoxBubble = F2( _0: A2(_elm_community$linear_algebra$Math_Vector2$vec2, cx, 0 - boxY), _1: true })); - var closest = _p22._0; - var inside = _p22._1; + var closest = _p23._0; + var inside = _p23._1; var normal = A2(_elm_community$linear_algebra$Math_Vector2$sub, dist, closest); var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); - if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p23 * _p23) > 0) && (!inside)) { + if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p24 * _p24) > 0) && (!inside)) { return A2( _user$project$Store_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { - var penetration = _p23 + _elm_lang$core$Basics$sqrt(normalLenSq); + var penetration = _p24 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( _user$project$Store_ArtStore$CollisionResult, A2( @@ -13350,24 +14786,24 @@ var _user$project$Store_ArtStore$animateBall = F3( function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); - var _p25 = { + var _p26 = { ctor: '_Tuple2', _0: _elm_lang$core$Basics$toFloat(window.width), _1: _elm_lang$core$Basics$toFloat(window.height) }; - var width = _p25._0; - var height = _p25._1; - var _p26 = { + var width = _p26._0; + var height = _p26._1; + var _p27 = { ctor: '_Tuple4', _0: _user$project$Store_ArtStore$initLeftWall(height), _1: A2(_user$project$Store_ArtStore$initRightWall, width, height), _2: _user$project$Store_ArtStore$initTopWall(width), _3: A2(_user$project$Store_ArtStore$initBottomWall, width, height) }; - var leftWall = _p26._0; - var rightWall = _p26._1; - var topWall = _p26._2; - var bottomWall = _p26._3; + var leftWall = _p27._0; + var rightWall = _p27._1; + var topWall = _p27._2; + var bottomWall = _p27._3; var leftCol = A2( _user$project$Store_ArtStore$collisionBoxBubble, { @@ -13453,11 +14889,11 @@ var _user$project$Store_ArtStore$randomColor = F2( var _user$project$Store_ArtStore$animateArtGame = F4( function (timeDiff, window, translator, artGame) { var newTime = artGame.time + timeDiff; - var _p27 = function () { + var _p28 = function () { if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Store_ArtStore$colorSwapTime) > 0) { - var _p28 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); - var randColor = _p28._0; - var seed = _p28._1; + var _p29 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); + var randColor = _p29._0; + var seed = _p29._1; return { ctor: '_Tuple3', _0: {ctor: '_Tuple2', _0: randColor, _1: seed}, @@ -13475,11 +14911,11 @@ var _user$project$Store_ArtStore$animateArtGame = F4( }; } }(); - var newColor = _p27._0._0; - var newSeed = _p27._0._1; - var timeReset = _p27._1; - var cmd = _p27._2; - var _p29 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); + var newColor = _p28._0._0; + var newSeed = _p28._0._1; + var timeReset = _p28._1; + var cmd = _p28._2; + var _p30 = A2(_elm_lang$core$Debug$log, 'animate art game', ''); return { ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( @@ -13593,17 +15029,17 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis }); var _user$project$Store_ArtStore$randomImage = function (color) { var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Store_ArtStore$images); - var _p30 = options; - if (_p30.ctor === 'Nothing') { + var _p31 = options; + if (_p31.ctor === 'Nothing') { return _user$project$Store_ArtStore$alwaysGen(''); } else { - if (_p30._0.ctor === '[]') { + if (_p31._0.ctor === '[]') { return _user$project$Store_ArtStore$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Store_ArtStore$randItem(_p30._0)); + _user$project$Store_ArtStore$randItem(_p31._0)); } } }; @@ -13637,7 +15073,7 @@ var _user$project$Store_ArtStore$initialBalls = F2( }); var _user$project$Store_ArtStore$initArtGame = F3( function (window, colors, seed) { - var _p31 = A2( + var _p32 = A2( _elm_lang$core$Random$step, A2( _user$project$Store_ArtStore$initialBalls, @@ -13648,8 +15084,8 @@ var _user$project$Store_ArtStore$initArtGame = F3( _1: _wernerdegroot$listzipper$List_Zipper$before(colors) }), seed); - var balls = _p31._0; - var newSeed = _p31._1; + var balls = _p32._0; + var newSeed = _p32._1; return { ctor: '_Tuple2', _0: { @@ -13658,6 +15094,7 @@ var _user$project$Store_ArtStore$initArtGame = F3( points: 0, color: _wernerdegroot$listzipper$List_Zipper$current(colors), balls: balls, + deadBalls: {ctor: '[]'}, win: false, finishRound: false, knownUnknownColors: colors @@ -13667,9 +15104,9 @@ var _user$project$Store_ArtStore$initArtGame = F3( }); var _user$project$Store_ArtStore$init = F2( function (window, seed) { - var _p32 = A3(_user$project$Store_ArtStore$initArtGame, window, _user$project$Store_ArtStore$initialColors, seed); - var game = _p32._0; - var newSeed = _p32._1; + var _p33 = A3(_user$project$Store_ArtStore$initArtGame, window, _user$project$Store_ArtStore$initialColors, seed); + var game = _p33._0; + var newSeed = _p33._1; return { ctor: '_Tuple2', _0: {game: game, playing: false, seed: newSeed}, @@ -13684,8 +15121,8 @@ var _user$project$Store_ArtStore$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Store_ArtStore$colorCircle = F3( - function (_p33, color, audio) { - var _p34 = _p33; + function (_p34, color, audio) { + var _p35 = _p34; return A2( _elm_lang$html$Html$div, { @@ -13710,7 +15147,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p34._0), + _elm_lang$core$Basics$toString(_p35._0), 'px') }, _1: { @@ -13720,7 +15157,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p34._1), + _elm_lang$core$Basics$toString(_p35._1), 'px') }, _1: { @@ -13749,8 +15186,8 @@ var _user$project$Store_ArtStore$colorCircle = F3( }); var _user$project$Store_ArtStore$NextRound = {ctor: 'NextRound'}; var _user$project$Store_ArtStore$FinishGame = {ctor: 'FinishGame'}; -var _user$project$Store_ArtStore$backButton = function (_p35) { - var _p36 = _p35; +var _user$project$Store_ArtStore$backButton = function (_p36) { + var _p37 = _p36; return A2( _elm_lang$html$Html$button, { @@ -13769,7 +15206,7 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36._0), + _elm_lang$core$Basics$toString(_p37._0), 'px') }, _1: { @@ -13779,7 +15216,7 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p36._1), + _elm_lang$core$Basics$toString(_p37._1), 'px') }, _1: { @@ -13808,8 +15245,8 @@ var _user$project$Store_ArtStore$backButton = function (_p35) { }); }; var _user$project$Store_ArtStore$Play = {ctor: 'Play'}; -var _user$project$Store_ArtStore$playButton = function (_p37) { - var _p38 = _p37; +var _user$project$Store_ArtStore$playButton = function (_p38) { + var _p39 = _p38; return A2( _elm_lang$html$Html$button, { @@ -13828,7 +15265,7 @@ var _user$project$Store_ArtStore$playButton = function (_p37) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._0), + _elm_lang$core$Basics$toString(_p39._0), 'px') }, _1: { @@ -13838,7 +15275,7 @@ var _user$project$Store_ArtStore$playButton = function (_p37) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p38._1), + _elm_lang$core$Basics$toString(_p39._1), 'px') }, _1: { @@ -13969,6 +15406,13 @@ var _user$project$Store_ArtStore$colorBall = F2( }); var _user$project$Store_ArtStore$colorGame = F2( function (translator, game) { + var balls = A2( + _elm_lang$core$Basics_ops['++'], + A2( + _elm_lang$core$List$map, + _user$project$Store_ArtStore$colorBall(game.color), + game.balls), + A2(_elm_lang$core$List$map, _user$project$Store_ArtStore$deadBall, game.deadBalls)); var content = (game.finishRound || game.win) ? { ctor: '::', _0: A2( @@ -14006,10 +15450,14 @@ var _user$project$Store_ArtStore$colorGame = F2( } }), _1: {ctor: '[]'} - } : A2( - _elm_lang$core$List$map, - _user$project$Store_ArtStore$colorBall(game.color), - game.balls); + } : { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + {ctor: '[]'}), + _1: {ctor: '[]'} + }; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -14030,22 +15478,22 @@ var _user$project$Store_ArtStore$colorGame = F2( _1: {ctor: '[]'} } }, - content)); + A2(_elm_lang$core$Basics_ops['++'], content, balls))); }); var _user$project$Store_ArtStore$view = F2( function (translator, model) { - var _p39 = model.playing; - if (_p39 === true) { + var _p40 = model.playing; + if (_p40 === true) { return A2(_user$project$Store_ArtStore$colorGame, translator, model.game); } else { var showCircle = F2( - function (n, _p40) { - var _p41 = _p40; + function (n, _p41) { + var _p42 = _p41; return A3( _user$project$Store_ArtStore$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p41._0, - _p41._1); + _p42._0, + _p42._1); }); return A2( _elm_lang$html$Html$div, @@ -14108,9 +15556,9 @@ var _user$project$Store_ArtStore$view = F2( var _user$project$Store_ArtStore$NoOp = {ctor: 'NoOp'}; var _user$project$Store_ArtStore$tick = F4( function (timeDelta, window, translator, model) { - var _p42 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); - var newArtGame = _p42._0; - var cmd = _p42._1; + var _p43 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); + var newArtGame = _p43._0; + var cmd = _p43._1; return { ctor: '_Tuple3', _0: _elm_lang$core$Native_Utils.update( @@ -14125,13 +15573,15 @@ var _user$project$Store_ArtStore$AddPoints = function (a) { return {ctor: 'AddPoints', _0: a}; }; var _user$project$Store_ArtStore$colorClicked = F2( - function (_p43, model) { - var _p44 = _p43; - if (!_elm_lang$core$Native_Utils.eq(_p44._1, _p44._2)) { + function (_p44, model) { + var _p45 = _p44; + if (!_elm_lang$core$Native_Utils.eq(_p45._1, _p45._2)) { return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } else { var artGame = model.game; - var newBalls = A2(_user$project$Store_ArtStore$removeBall, _p44._0, artGame.balls); + var _p46 = A3(_user$project$Store_ArtStore$removeBall, _p45._0, artGame.balls, artGame.deadBalls); + var newBalls = _p46._0; + var deadBalls = _p46._1; var finishRound = _elm_lang$core$Native_Utils.eq( _elm_lang$core$List$length(newBalls), 0); @@ -14141,7 +15591,7 @@ var _user$project$Store_ArtStore$colorClicked = F2( 0); var newArtGame = _elm_lang$core$Native_Utils.update( artGame, - {balls: newBalls, finishRound: finishRound, win: win}); + {balls: newBalls, deadBalls: deadBalls, finishRound: finishRound, win: win}); return { ctor: '_Tuple3', _0: _elm_lang$core$Native_Utils.update( @@ -14156,12 +15606,12 @@ var _user$project$Store_ArtStore$update = F4( function (window, translator, msg, model) { update: while (true) { - var _p45 = msg; - switch (_p45.ctor) { + var _p47 = msg; + switch (_p47.ctor) { case 'ColorClicked': return A2( _user$project$Store_ArtStore$colorClicked, - {ctor: '_Tuple3', _0: _p45._0, _1: _p45._1, _2: _p45._2}, + {ctor: '_Tuple3', _0: _p47._0, _1: _p47._1, _2: _p47._2}, model); case 'Play': return { @@ -14173,26 +15623,23 @@ var _user$project$Store_ArtStore$update = F4( _2: _elm_lang$core$Platform_Cmd$none }; case 'NextRound': - var _p46 = A3( + var _p48 = A3( _user$project$Store_ArtStore$initArtGame, window, - A2( - _elm_lang$core$Debug$log, - 'new colors', - _user$project$Store_ArtStore$nextColor(model.game.knownUnknownColors)), + _user$project$Store_ArtStore$nextColor(model.game.knownUnknownColors), model.seed); - var nextArtGame = _p46._0; - var newSeed = _p46._1; - var _v22 = window, - _v23 = translator, - _v24 = _user$project$Store_ArtStore$Play, - _v25 = _elm_lang$core$Native_Utils.update( + var nextArtGame = _p48._0; + var newSeed = _p48._1; + var _v23 = window, + _v24 = translator, + _v25 = _user$project$Store_ArtStore$Play, + _v26 = _elm_lang$core$Native_Utils.update( model, {game: nextArtGame, seed: newSeed}); - window = _v22; - translator = _v23; - msg = _v24; - model = _v25; + window = _v23; + translator = _v24; + msg = _v25; + model = _v26; continue update; case 'FinishGame': return { @@ -14208,12 +15655,12 @@ var _user$project$Store_ArtStore$update = F4( ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, - _2: _user$project$Audio$play(_p45._0) + _2: _user$project$Audio$play(_p47._0) }; case 'ExitStore': return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; default: - return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p45._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p47._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } } }); diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 1278ffe..72595d8 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -6,6 +6,7 @@ import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, img, text) import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick, onMouseDown) +import List.Extra import List.Zipper as Zipper exposing (Zipper(..)) import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Random @@ -29,6 +30,7 @@ type alias Model = type alias ArtGame = { color : Color , balls : List MovingBall + , deadBalls : List MovingBall , time : Time , seed : Random.Seed , finishRound : Bool @@ -59,6 +61,7 @@ type alias MovingBall = , radius : Float , velocity : Vec2 , img : String + , poof : Bool } @@ -96,6 +99,7 @@ initArtGame window colors seed = , points = 0 , color = Zipper.current colors , balls = balls + , deadBalls = [] , win = False , finishRound = False , knownUnknownColors = colors @@ -136,7 +140,7 @@ update window translator msg model = NextRound -> let ( nextArtGame, newSeed ) = - initArtGame window (Debug.log "new colors" (nextColor model.game.knownUnknownColors)) model.seed + initArtGame window (nextColor model.game.knownUnknownColors) model.seed in { model | game = nextArtGame, seed = newSeed } |> update window translator Play @@ -166,8 +170,8 @@ colorClicked ( id, gameColor, colorClicked ) model = artGame = model.game - newBalls = - artGame.balls |> removeBall id + ( newBalls, deadBalls ) = + removeBall id artGame.balls artGame.deadBalls finishRound = List.length newBalls == 0 @@ -177,7 +181,7 @@ colorClicked ( id, gameColor, colorClicked ) model = && (List.length (unknownColors artGame.knownUnknownColors) == 0) newArtGame = - { artGame | balls = newBalls, finishRound = finishRound, win = win } + { artGame | balls = newBalls, deadBalls = deadBalls, finishRound = finishRound, win = win } in ( { model | game = newArtGame @@ -332,6 +336,8 @@ ballsPerRound = 5 +{-| TODO: ensure there is at least one of each color +-} initialBalls : Window.Size -> List Color -> Random.Generator (List MovingBall) initialBalls window colors = List.range 0 (ballsPerRound - 1) @@ -347,12 +353,20 @@ initMovingBall id color ( x, y ) ( vx, vy ) image = , pos = vec2 x y , velocity = vec2 vx vy , img = image + , poof = False } -removeBall : Int -> List MovingBall -> List MovingBall -removeBall id balls = - List.filter (\ball -> ball.id /= id) balls +removeBall : Int -> List MovingBall -> List MovingBall -> ( List MovingBall, List MovingBall ) +removeBall id balls deadBalls = + case + List.partition (\ball -> ball.id == id) balls + of + ( [ ball ], balls ) -> + ( balls, ball :: deadBalls ) + + _ -> + ( balls, deadBalls ) collisions : List MovingBall -> List MovingBall @@ -702,13 +716,18 @@ colorGame translator game = ] ] else - List.map (colorBall game.color) game.balls + [ div [] [] ] + + balls = + List.map (colorBall game.color) game.balls + ++ List.map deadBall game.deadBalls in div [] ([ backButton ( 130, 0 ) , text ("Color: " ++ translator.translate (toString game.color)) ] ++ content + ++ balls ) @@ -734,6 +753,42 @@ colorBall gameColor ball = [] +deadBall : MovingBall -> Html Msg +deadBall ball = + div + [ style + [ ( "position", "absolute" ) + , ( "left", (toString <| getX ball.pos) ++ "px" ) + , ( "top", (toString <| getY ball.pos) ++ "px" ) + , ( "width", toString (ball.radius * 2) ++ "px" ) + , ( "height", toString (ball.radius * 2) ++ "px" ) + + -- Using external CSS sheet until I can get these working in elm + -- , ( "background", splatBackground ) + -- , ( "background-repeat", "no-repeat" ) + -- , ( "background-size", splatBackgroundSize ) + ] + , class "poof" + , class <| "poof" ++ toString ball.color + ] + [] + + +splatBackground : String +splatBackground = + "-webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0," + ++ "-webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) -9px 37px," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px," + ++ "-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0;" + + +splatBackgroundSize : String +splatBackgroundSize = + "80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%;" + + playButton : ( Int, Int ) -> Html Msg playButton ( x, y ) = button diff --git a/styles.css b/styles.css index 22e04a9..a78d2a7 100644 --- a/styles.css +++ b/styles.css @@ -2,3 +2,75 @@ body { border: 0px; margin: 0px; } + +.poofRed { +background: +-webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofOrange { +background: +-webkit-radial-gradient(orange 0, orange 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(orange 0, orange 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofYellow { +background: +-webkit-radial-gradient(yellow 0, yellow 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(yellow 0, yellow 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofGreen { +background: +-webkit-radial-gradient(green 0, green 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(green 0, green 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofBlue { +background: +-webkit-radial-gradient(blue 0, blue 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(blue 0, blue 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} + +.poofPurple { +background: +-webkit-radial-gradient(purple 0, purple 30%, rgba(255,255,255,0) 30%) 0 0, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 0 0, +-webkit-radial-gradient(purple 0, purple 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 55px 9px, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 8px 46px, +-webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 0 0; +background-repeat: no-repeat; +-webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +} From 0afaa5509a2909a7afe413f02ecf55118380d8b5 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 28 May 2017 15:25:00 -0700 Subject: [PATCH 29/33] play color audio on start --- elm.js | 56 +++++++++++++++++++++++----------------------- store/ArtStore.elm | 7 +++--- styles.css | 24 ++++++++++---------- 3 files changed, 44 insertions(+), 43 deletions(-) diff --git a/elm.js b/elm.js index ac609ef..e2dbb43 100644 --- a/elm.js +++ b/elm.js @@ -15465,18 +15465,13 @@ var _user$project$Store_ArtStore$colorGame = F2( _elm_lang$core$Basics_ops['++'], { ctor: '::', - _0: _user$project$Store_ArtStore$backButton( - {ctor: '_Tuple2', _0: 130, _1: 0}), - _1: { - ctor: '::', - _0: _elm_lang$html$Html$text( - A2( - _elm_lang$core$Basics_ops['++'], - 'Color: ', - translator.translate( - _elm_lang$core$Basics$toString(game.color)))), - _1: {ctor: '[]'} - } + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Color: ', + translator.translate( + _elm_lang$core$Basics$toString(game.color)))), + _1: {ctor: '[]'} }, A2(_elm_lang$core$Basics_ops['++'], content, balls))); }); @@ -15614,14 +15609,19 @@ var _user$project$Store_ArtStore$update = F4( {ctor: '_Tuple3', _0: _p47._0, _1: _p47._1, _2: _p47._2}, model); case 'Play': - return { - ctor: '_Tuple3', - _0: _elm_lang$core$Native_Utils.update( - model, - {playing: true}), - _1: _user$project$Store_ArtStore$NoOp, - _2: _elm_lang$core$Platform_Cmd$none - }; + var _v23 = window, + _v24 = translator, + _v25 = _user$project$Store_ArtStore$PlayAudio( + translator.audio( + _elm_lang$core$Basics$toString(model.game.color))), + _v26 = _elm_lang$core$Native_Utils.update( + model, + {playing: true}); + window = _v23; + translator = _v24; + msg = _v25; + model = _v26; + continue update; case 'NextRound': var _p48 = A3( _user$project$Store_ArtStore$initArtGame, @@ -15630,16 +15630,16 @@ var _user$project$Store_ArtStore$update = F4( model.seed); var nextArtGame = _p48._0; var newSeed = _p48._1; - var _v23 = window, - _v24 = translator, - _v25 = _user$project$Store_ArtStore$Play, - _v26 = _elm_lang$core$Native_Utils.update( + var _v27 = window, + _v28 = translator, + _v29 = _user$project$Store_ArtStore$Play, + _v30 = _elm_lang$core$Native_Utils.update( model, {game: nextArtGame, seed: newSeed}); - window = _v23; - translator = _v24; - msg = _v25; - model = _v26; + window = _v27; + translator = _v28; + msg = _v29; + model = _v30; continue update; case 'FinishGame': return { diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 72595d8..8ac4c3b 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -135,7 +135,8 @@ update window translator msg model = colorClicked ( id, gameColor, color ) model Play -> - ( { model | playing = True }, NoOp, Cmd.none ) + { model | playing = True } + |> update window translator (PlayAudio (translator.audio <| toString model.game.color)) NextRound -> let @@ -678,6 +679,7 @@ view translator model = div [] <| exit ExitStore :: playButton ( 192, 10 ) + -- :: backButton ( 130, 0 ) :: List.indexedMap showCircle [ ( "black", translator.audio "black" ) , ( "white", translator.audio "white" ) @@ -723,8 +725,7 @@ colorGame translator game = ++ List.map deadBall game.deadBalls in div [] - ([ backButton ( 130, 0 ) - , text ("Color: " ++ translator.translate (toString game.color)) + ([ text ("Color: " ++ translator.translate (toString game.color)) ] ++ content ++ balls diff --git a/styles.css b/styles.css index a78d2a7..f159d2c 100644 --- a/styles.css +++ b/styles.css @@ -7,70 +7,70 @@ body { background: -webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0, -webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0, --webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(red 0, red 20%, rgba(255,255,255,0) 20%) 38px 37px, -webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px, -webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px, -webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0; background-repeat: no-repeat; --webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; } .poofOrange { background: -webkit-radial-gradient(orange 0, orange 30%, rgba(255,255,255,0) 30%) 0 0, -webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 0 0, --webkit-radial-gradient(orange 0, orange 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(orange 0, orange 20%, rgba(255,255,255,0) 20%) 38px 37px, -webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 55px 9px, -webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 8px 46px, -webkit-radial-gradient(orange 0, orange 11%, rgba(255,255,255,0) 11%) 0 0; background-repeat: no-repeat; --webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; } .poofYellow { background: -webkit-radial-gradient(yellow 0, yellow 30%, rgba(255,255,255,0) 30%) 0 0, -webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 0 0, --webkit-radial-gradient(yellow 0, yellow 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(yellow 0, yellow 20%, rgba(255,255,255,0) 20%) 38px 37px, -webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 55px 9px, -webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 8px 46px, -webkit-radial-gradient(yellow 0, yellow 11%, rgba(255,255,255,0) 11%) 0 0; background-repeat: no-repeat; --webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; } .poofGreen { background: -webkit-radial-gradient(green 0, green 30%, rgba(255,255,255,0) 30%) 0 0, -webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 0 0, --webkit-radial-gradient(green 0, green 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(green 0, green 20%, rgba(255,255,255,0) 20%) 38px 37px, -webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 55px 9px, -webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 8px 46px, -webkit-radial-gradient(green 0, green 11%, rgba(255,255,255,0) 11%) 0 0; background-repeat: no-repeat; --webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; } .poofBlue { background: -webkit-radial-gradient(blue 0, blue 30%, rgba(255,255,255,0) 30%) 0 0, -webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 0 0, --webkit-radial-gradient(blue 0, blue 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(blue 0, blue 20%, rgba(255,255,255,0) 20%) 38px 37px, -webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 55px 9px, -webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 8px 46px, -webkit-radial-gradient(blue 0, blue 11%, rgba(255,255,255,0) 11%) 0 0; background-repeat: no-repeat; --webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; } .poofPurple { background: -webkit-radial-gradient(purple 0, purple 30%, rgba(255,255,255,0) 30%) 0 0, -webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 0 0, --webkit-radial-gradient(purple 0, purple 20%, rgba(255,255,255,0) 20%) -9px 37px, +-webkit-radial-gradient(purple 0, purple 20%, rgba(255,255,255,0) 20%) 38px 37px, -webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 55px 9px, -webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 8px 46px, -webkit-radial-gradient(purple 0, purple 11%, rgba(255,255,255,0) 11%) 0 0; background-repeat: no-repeat; --webkit-background-size: 80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; +-webkit-background-size: 80px 68px, 10px 8px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%; } From 9ebbb55e11c50ac53ae6ae49c78933c673f90a79 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 28 May 2017 15:43:47 -0700 Subject: [PATCH 30/33] at least one of each color --- elm.js | 155 +++++++++++++++++++++++++++------------------ store/ArtStore.elm | 31 ++++++++- 2 files changed, 123 insertions(+), 63 deletions(-) diff --git a/elm.js b/elm.js index e2dbb43..f1bc041 100644 --- a/elm.js +++ b/elm.js @@ -15043,6 +15043,15 @@ var _user$project$Store_ArtStore$randomImage = function (color) { } } }; +var _user$project$Store_ArtStore$randomMovingBallWithColor = F3( + function (window, color, id) { + return A4( + _elm_lang$core$Random$map3, + A2(_user$project$Store_ArtStore$initMovingBall, id, color), + _user$project$Store_ArtStore$randomPosition(window), + _user$project$Store_ArtStore$randomVelocity, + _user$project$Store_ArtStore$randomImage(color)); + }); var _user$project$Store_ArtStore$colorGen = function (colors) { return A2( _elm_lang$core$Random$map, @@ -15065,15 +15074,39 @@ var _user$project$Store_ArtStore$randomMovingBall = F3( }); var _user$project$Store_ArtStore$initialBalls = F2( function (window, colors) { - return _elm_community$random_extra$Random_Extra$combine( + var initialLength = _elm_lang$core$List$length(colors); + var oneOfEach = A2( + _elm_lang$core$List$map, + function (_p32) { + var _p33 = _p32; + return A3(_user$project$Store_ArtStore$randomMovingBallWithColor, window, _p33._0, _p33._1); + }, A2( - _elm_lang$core$List$map, - A2(_user$project$Store_ArtStore$randomMovingBall, window, colors), - A2(_elm_lang$core$List$range, 0, _user$project$Store_ArtStore$ballsPerRound - 1))); + _elm_community$list_extra$List_Extra$zip, + colors, + A2(_elm_lang$core$List$range, 0, initialLength - 1))); + var random = A2( + _elm_lang$core$List$map, + A2(_user$project$Store_ArtStore$randomMovingBall, window, colors), + A2(_elm_lang$core$List$range, initialLength, _user$project$Store_ArtStore$ballsPerRound - 1)); + var _p34 = A2( + _elm_lang$core$Debug$log, + '(oneOfEach, random)', + { + ctor: '_Tuple2', + _0: _elm_lang$core$List$length(oneOfEach), + _1: _elm_lang$core$List$length(random) + }); + var _p35 = A2( + _elm_lang$core$Debug$log, + '(initialLength, remainder)', + {ctor: '_Tuple2', _0: initialLength, _1: _user$project$Store_ArtStore$ballsPerRound - initialLength}); + return _elm_community$random_extra$Random_Extra$combine( + A2(_elm_lang$core$Basics_ops['++'], oneOfEach, random)); }); var _user$project$Store_ArtStore$initArtGame = F3( function (window, colors, seed) { - var _p32 = A2( + var _p36 = A2( _elm_lang$core$Random$step, A2( _user$project$Store_ArtStore$initialBalls, @@ -15084,8 +15117,8 @@ var _user$project$Store_ArtStore$initArtGame = F3( _1: _wernerdegroot$listzipper$List_Zipper$before(colors) }), seed); - var balls = _p32._0; - var newSeed = _p32._1; + var balls = _p36._0; + var newSeed = _p36._1; return { ctor: '_Tuple2', _0: { @@ -15104,9 +15137,9 @@ var _user$project$Store_ArtStore$initArtGame = F3( }); var _user$project$Store_ArtStore$init = F2( function (window, seed) { - var _p33 = A3(_user$project$Store_ArtStore$initArtGame, window, _user$project$Store_ArtStore$initialColors, seed); - var game = _p33._0; - var newSeed = _p33._1; + var _p37 = A3(_user$project$Store_ArtStore$initArtGame, window, _user$project$Store_ArtStore$initialColors, seed); + var game = _p37._0; + var newSeed = _p37._1; return { ctor: '_Tuple2', _0: {game: game, playing: false, seed: newSeed}, @@ -15121,8 +15154,8 @@ var _user$project$Store_ArtStore$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Store_ArtStore$colorCircle = F3( - function (_p34, color, audio) { - var _p35 = _p34; + function (_p38, color, audio) { + var _p39 = _p38; return A2( _elm_lang$html$Html$div, { @@ -15147,7 +15180,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._0), + _elm_lang$core$Basics$toString(_p39._0), 'px') }, _1: { @@ -15157,7 +15190,7 @@ var _user$project$Store_ArtStore$colorCircle = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p35._1), + _elm_lang$core$Basics$toString(_p39._1), 'px') }, _1: { @@ -15186,8 +15219,8 @@ var _user$project$Store_ArtStore$colorCircle = F3( }); var _user$project$Store_ArtStore$NextRound = {ctor: 'NextRound'}; var _user$project$Store_ArtStore$FinishGame = {ctor: 'FinishGame'}; -var _user$project$Store_ArtStore$backButton = function (_p36) { - var _p37 = _p36; +var _user$project$Store_ArtStore$backButton = function (_p40) { + var _p41 = _p40; return A2( _elm_lang$html$Html$button, { @@ -15206,7 +15239,7 @@ var _user$project$Store_ArtStore$backButton = function (_p36) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._0), + _elm_lang$core$Basics$toString(_p41._0), 'px') }, _1: { @@ -15216,7 +15249,7 @@ var _user$project$Store_ArtStore$backButton = function (_p36) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p37._1), + _elm_lang$core$Basics$toString(_p41._1), 'px') }, _1: { @@ -15245,8 +15278,8 @@ var _user$project$Store_ArtStore$backButton = function (_p36) { }); }; var _user$project$Store_ArtStore$Play = {ctor: 'Play'}; -var _user$project$Store_ArtStore$playButton = function (_p38) { - var _p39 = _p38; +var _user$project$Store_ArtStore$playButton = function (_p42) { + var _p43 = _p42; return A2( _elm_lang$html$Html$button, { @@ -15265,7 +15298,7 @@ var _user$project$Store_ArtStore$playButton = function (_p38) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._0), + _elm_lang$core$Basics$toString(_p43._0), 'px') }, _1: { @@ -15275,7 +15308,7 @@ var _user$project$Store_ArtStore$playButton = function (_p38) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p39._1), + _elm_lang$core$Basics$toString(_p43._1), 'px') }, _1: { @@ -15477,18 +15510,18 @@ var _user$project$Store_ArtStore$colorGame = F2( }); var _user$project$Store_ArtStore$view = F2( function (translator, model) { - var _p40 = model.playing; - if (_p40 === true) { + var _p44 = model.playing; + if (_p44 === true) { return A2(_user$project$Store_ArtStore$colorGame, translator, model.game); } else { var showCircle = F2( - function (n, _p41) { - var _p42 = _p41; + function (n, _p45) { + var _p46 = _p45; return A3( _user$project$Store_ArtStore$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, - _p42._0, - _p42._1); + _p46._0, + _p46._1); }); return A2( _elm_lang$html$Html$div, @@ -15551,9 +15584,9 @@ var _user$project$Store_ArtStore$view = F2( var _user$project$Store_ArtStore$NoOp = {ctor: 'NoOp'}; var _user$project$Store_ArtStore$tick = F4( function (timeDelta, window, translator, model) { - var _p43 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); - var newArtGame = _p43._0; - var cmd = _p43._1; + var _p47 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); + var newArtGame = _p47._0; + var cmd = _p47._1; return { ctor: '_Tuple3', _0: _elm_lang$core$Native_Utils.update( @@ -15568,15 +15601,15 @@ var _user$project$Store_ArtStore$AddPoints = function (a) { return {ctor: 'AddPoints', _0: a}; }; var _user$project$Store_ArtStore$colorClicked = F2( - function (_p44, model) { - var _p45 = _p44; - if (!_elm_lang$core$Native_Utils.eq(_p45._1, _p45._2)) { + function (_p48, model) { + var _p49 = _p48; + if (!_elm_lang$core$Native_Utils.eq(_p49._1, _p49._2)) { return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } else { var artGame = model.game; - var _p46 = A3(_user$project$Store_ArtStore$removeBall, _p45._0, artGame.balls, artGame.deadBalls); - var newBalls = _p46._0; - var deadBalls = _p46._1; + var _p50 = A3(_user$project$Store_ArtStore$removeBall, _p49._0, artGame.balls, artGame.deadBalls); + var newBalls = _p50._0; + var deadBalls = _p50._1; var finishRound = _elm_lang$core$Native_Utils.eq( _elm_lang$core$List$length(newBalls), 0); @@ -15601,45 +15634,45 @@ var _user$project$Store_ArtStore$update = F4( function (window, translator, msg, model) { update: while (true) { - var _p47 = msg; - switch (_p47.ctor) { + var _p51 = msg; + switch (_p51.ctor) { case 'ColorClicked': return A2( _user$project$Store_ArtStore$colorClicked, - {ctor: '_Tuple3', _0: _p47._0, _1: _p47._1, _2: _p47._2}, + {ctor: '_Tuple3', _0: _p51._0, _1: _p51._1, _2: _p51._2}, model); case 'Play': - var _v23 = window, - _v24 = translator, - _v25 = _user$project$Store_ArtStore$PlayAudio( + var _v24 = window, + _v25 = translator, + _v26 = _user$project$Store_ArtStore$PlayAudio( translator.audio( _elm_lang$core$Basics$toString(model.game.color))), - _v26 = _elm_lang$core$Native_Utils.update( + _v27 = _elm_lang$core$Native_Utils.update( model, {playing: true}); - window = _v23; - translator = _v24; - msg = _v25; - model = _v26; + window = _v24; + translator = _v25; + msg = _v26; + model = _v27; continue update; case 'NextRound': - var _p48 = A3( + var _p52 = A3( _user$project$Store_ArtStore$initArtGame, window, _user$project$Store_ArtStore$nextColor(model.game.knownUnknownColors), model.seed); - var nextArtGame = _p48._0; - var newSeed = _p48._1; - var _v27 = window, - _v28 = translator, - _v29 = _user$project$Store_ArtStore$Play, - _v30 = _elm_lang$core$Native_Utils.update( + var nextArtGame = _p52._0; + var newSeed = _p52._1; + var _v28 = window, + _v29 = translator, + _v30 = _user$project$Store_ArtStore$Play, + _v31 = _elm_lang$core$Native_Utils.update( model, {game: nextArtGame, seed: newSeed}); - window = _v27; - translator = _v28; - msg = _v29; - model = _v30; + window = _v28; + translator = _v29; + msg = _v30; + model = _v31; continue update; case 'FinishGame': return { @@ -15655,12 +15688,12 @@ var _user$project$Store_ArtStore$update = F4( ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, - _2: _user$project$Audio$play(_p47._0) + _2: _user$project$Audio$play(_p51._0) }; case 'ExitStore': return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; default: - return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p47._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p51._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } } }); diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 8ac4c3b..8da835f 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -333,6 +333,15 @@ randomMovingBall window colors id = ) +randomMovingBallWithColor : Window.Size -> Color -> Int -> Random.Generator MovingBall +randomMovingBallWithColor window color id = + Random.map3 + (initMovingBall id color) + (randomPosition window) + randomVelocity + (randomImage color) + + ballsPerRound = 5 @@ -341,8 +350,26 @@ ballsPerRound = -} initialBalls : Window.Size -> List Color -> Random.Generator (List MovingBall) initialBalls window colors = - List.range 0 (ballsPerRound - 1) - |> List.map (randomMovingBall window colors) + let + initialLength = + List.length colors + + oneOfEach = + List.range 0 (initialLength - 1) + |> List.Extra.zip colors + |> List.map (\( color, id ) -> randomMovingBallWithColor window color id) + + random = + List.range initialLength (ballsPerRound - 1) + |> List.map (randomMovingBall window colors) + + _ = + Debug.log "(initialLength, remainder)" ( initialLength, ballsPerRound - initialLength ) + + _ = + Debug.log "(oneOfEach, random)" ( List.length oneOfEach, List.length random ) + in + (oneOfEach ++ random) |> Random.Extra.combine From eaea1c480aea0d02eeac3639db0116f769032c85 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Sun, 28 May 2017 20:47:25 -0700 Subject: [PATCH 31/33] within window --- Main.elm | 16 +++++++++++++--- elm.js | 45 +++++++++++++++++++++++++++++++++------------ store/ArtStore.elm | 17 +++++++++-------- 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/Main.elm b/Main.elm index a0d8115..384b39c 100644 --- a/Main.elm +++ b/Main.elm @@ -106,8 +106,14 @@ update translator msg model = updateMap : Translator -> Map.Msg -> Model -> ( Model, Cmd Msg ) updateMap translator mapMsg model = let + window = + model.window + + mapScreen = + { window | height = window.height - headerHeight } + ( map, cmd ) = - Map.update translator model.window mapMsg model.map + Map.update translator mapScreen mapMsg model.map in ( { model | map = map }, cmd |> Cmd.map MapMsg ) @@ -138,7 +144,7 @@ mapView window translator map = , ( "top", px 110 ) ] ] - [ Map.view window translator map + [ Map.view { window | height = window.height - headerHeight } translator map |> Html.map MapMsg ] @@ -147,6 +153,10 @@ mapView window translator map = -- HEADER +headerHeight = + 100 + + header : Model -> Html Msg header model = -- TODO: add dropdown selector for language @@ -155,7 +165,7 @@ header model = [ ( "position", "absolute" ) , ( "top", px 0 ) , ( "bottom", px 0 ) - , ( "height", px 100 ) + , ( "height", px headerHeight ) , ( "width", px model.window.width ) , ( "border-bottom", "1px solid black" ) , ( "background-color", "hsl(189, 100%, 50%)" ) diff --git a/elm.js b/elm.js index f1bc041..b1ab400 100644 --- a/elm.js +++ b/elm.js @@ -14475,11 +14475,14 @@ var _user$project$Store_ArtStore$initTopWall = function (windowWidth) { }; var _user$project$Store_ArtStore$initRightWall = F2( function (windowWidth, windowHeight) { - return { - pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth, windowHeight / 2), - halfHeight: windowHeight / 2, - halfWidth: 1 - }; + return A2( + _elm_lang$core$Debug$log, + 'rightWall', + { + pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth, windowHeight / 2), + halfHeight: windowHeight / 2, + halfWidth: 1 + }); }); var _user$project$Store_ArtStore$initLeftWall = function (windowHeight) { return { @@ -14545,7 +14548,7 @@ var _user$project$Store_ArtStore$initMovingBall = F5( poof: false }; }); -var _user$project$Store_ArtStore$ballsPerRound = 5; +var _user$project$Store_ArtStore$ballsPerRound = 1; var _user$project$Store_ArtStore$nonZeroFloat = A2( _elm_lang$core$Random$map, _elm_lang$core$Basics$toFloat, @@ -14693,7 +14696,14 @@ var _user$project$Store_ArtStore$collide = F2( if (_p15.ctor === '[]') { return {ctor: '[]'}; } else { - var _v11 = {ctor: '::', _0: _p15._0, _1: acc}, + var _v11 = A2( + _elm_lang$core$Basics_ops['++'], + acc, + { + ctor: '::', + _0: _p15._0, + _1: {ctor: '[]'} + }), _v12 = _p15._1; acc = _v11; bodies = _v12; @@ -14796,9 +14806,9 @@ var _user$project$Store_ArtStore$animateBall = F3( var _p27 = { ctor: '_Tuple4', _0: _user$project$Store_ArtStore$initLeftWall(height), - _1: A2(_user$project$Store_ArtStore$initRightWall, width, height), + _1: A2(_user$project$Store_ArtStore$initRightWall, width - (ball.radius * 2), height), _2: _user$project$Store_ArtStore$initTopWall(width), - _3: A2(_user$project$Store_ArtStore$initBottomWall, width, height) + _3: A2(_user$project$Store_ArtStore$initBottomWall, width, height - (ball.radius * 2)) }; var leftWall = _p27._0; var rightWall = _p27._1; @@ -16586,6 +16596,7 @@ var _user$project$Main$viewPoints = function (count) { _1: {ctor: '[]'} }); }; +var _user$project$Main$headerHeight = 100; var _user$project$Main$Model = F6( function (a, b, c, d, e, f) { return {user: a, mouse: b, time: c, window: d, map: e, pause: f}; @@ -16674,7 +16685,7 @@ var _user$project$Main$header = function (model) { _0: { ctor: '_Tuple2', _0: 'height', - _1: _user$project$Main$px(100) + _1: _user$project$Main$px(_user$project$Main$headerHeight) }, _1: { ctor: '::', @@ -16728,7 +16739,11 @@ var _user$project$Main$MapMsg = function (a) { }; var _user$project$Main$updateMap = F3( function (translator, mapMsg, model) { - var _p0 = A4(_user$project$Map$update, translator, model.window, mapMsg, model.map); + var window = model.window; + var mapScreen = _elm_lang$core$Native_Utils.update( + window, + {height: window.height - _user$project$Main$headerHeight}); + var _p0 = A4(_user$project$Map$update, translator, mapScreen, mapMsg, model.map); var map = _p0._0; var cmd = _p0._1; return { @@ -16839,7 +16854,13 @@ var _user$project$Main$mapView = F3( _0: A2( _elm_lang$html$Html$map, _user$project$Main$MapMsg, - A3(_user$project$Map$view, window, translator, map)), + A3( + _user$project$Map$view, + _elm_lang$core$Native_Utils.update( + window, + {height: window.height - _user$project$Main$headerHeight}), + translator, + map)), _1: {ctor: '[]'} }); }); diff --git a/store/ArtStore.elm b/store/ArtStore.elm index 8da835f..1ed4325 100644 --- a/store/ArtStore.elm +++ b/store/ArtStore.elm @@ -343,7 +343,7 @@ randomMovingBallWithColor window color id = ballsPerRound = - 5 + 1 {-| TODO: ensure there is at least one of each color @@ -414,7 +414,7 @@ collide acc bodies = [] h1 :: t1 -> - collide (h1 :: acc) t1 + collide (acc ++ [ h1 ]) t1 collideWith : MovingBall -> List MovingBall -> List MovingBall -> List MovingBall @@ -504,10 +504,11 @@ initLeftWall windowHeight = initRightWall windowWidth windowHeight = - { pos = vec2 windowWidth (windowHeight / 2) - , halfHeight = windowHeight / 2 - , halfWidth = 1 - } + Debug.log "rightWall" + { pos = vec2 windowWidth (windowHeight / 2) + , halfHeight = windowHeight / 2 + , halfWidth = 1 + } initTopWall windowWidth = @@ -536,9 +537,9 @@ animateBall timeDiff window ball = ( leftWall, rightWall, topWall, bottomWall ) = ( initLeftWall height - , initRightWall width height + , initRightWall (width - ball.radius * 2) height , initTopWall width - , initBottomWall width height + , initBottomWall width (height - ball.radius * 2) ) leftCol = From b4ffbd322b153100d5923e9b2d29a0f5a8fbf960 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Mon, 29 May 2017 08:14:52 -0700 Subject: [PATCH 32/33] modulate home. add family translations --- Bee.elm | 11 +- Main.elm | 3 +- Map.elm | 56 +- audio/french/maman.mp3 | Bin 0 -> 2976 bytes audio/french/papa.mp3 | Bin 0 -> 2880 bytes "audio/spanish/mam\303\241.mp3" | Bin 0 -> 3072 bytes "audio/spanish/pap\303\241.mp3" | Bin 0 -> 2688 bytes .../spanish/p\303\272rpura.mp3" | Bin dictionary/French.elm | 12 +- dictionary/Spanish.elm | 14 +- elm.js | 842 +++++++++++------- {store => location}/ArtStore.elm | 13 +- location/Home.elm | 83 ++ 13 files changed, 673 insertions(+), 361 deletions(-) create mode 100644 audio/french/maman.mp3 create mode 100644 audio/french/papa.mp3 create mode 100644 "audio/spanish/mam\303\241.mp3" create mode 100644 "audio/spanish/pap\303\241.mp3" rename audio/spanish/purpura.mp3 => "audio/spanish/p\303\272rpura.mp3" (100%) rename {store => location}/ArtStore.elm (98%) create mode 100644 location/Home.elm diff --git a/Bee.elm b/Bee.elm index d646228..1e3e4a5 100644 --- a/Bee.elm +++ b/Bee.elm @@ -1,6 +1,7 @@ module Bee exposing (..) import Animation exposing (Animation, animation, from, speed, to) +import Dictionary.Translator exposing (Translator) import Html exposing (Html, div, img) import Html.Attributes exposing (height, src, style, width) import Html.Events exposing (onClick) @@ -71,23 +72,25 @@ player = } -mama = +mama : Translator -> Bee +mama translator = { x = 100 , y = 100 , animX = animation 0 , animY = animation 0 , src = "imgs/mama-bee.png" - , audio = Just "audio/madre.mov" + , audio = Just (translator.audio "mom") } -papa = +papa : Translator -> Bee +papa translator = { x = 600 , y = 100 , animX = animation 0 , animY = animation 0 , src = "imgs/papa-bee.png" - , audio = Just "audio/padre.m4a" + , audio = Just (translator.audio "dad") } diff --git a/Main.elm b/Main.elm index 384b39c..dc37cf7 100644 --- a/Main.elm +++ b/Main.elm @@ -9,6 +9,7 @@ import Dictionary.Translator exposing (Translator) import Html exposing (Html, button, div, h1, img, text) import Html.Attributes exposing (class, height, src, style, width) import Html.Events exposing (onClick) +import Location.Home as Home import Map exposing (Map) import Mouse import Task @@ -41,7 +42,7 @@ init = , time = 0 , window = { width = 100, height = 100 } , pause = False - , map = Map.init Map.Home + , map = Map.init (Map.Home Home.init) } diff --git a/Map.elm b/Map.elm index 4bef4cd..1613628 100644 --- a/Map.elm +++ b/Map.elm @@ -8,11 +8,12 @@ import EveryDict exposing (EveryDict) import Html exposing (Html, button, div, h1, img, text) import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick, onMouseDown) +import Location.ArtStore as ArtStore +import Location.Home as Home import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Random import Random.Extra import Random.List exposing (choose) -import Store.ArtStore as ArtStore import Time exposing (Time) import Window @@ -36,7 +37,7 @@ init level = type Level - = Home + = Home Home.Model | HomeTown | GroceryStore | ArtStore ArtStore.Model @@ -62,8 +63,9 @@ type Color type Msg = NewLevel Route | PlayAudio String - | ArtStoreMsg ArtStore.Msg | Tick Time + | ArtStoreMsg ArtStore.Msg + | HomeMsg Home.Msg type Route @@ -89,6 +91,34 @@ update translator window msg map = ( Tick timeDelta, _ ) -> tick timeDelta window translator map + ( HomeMsg msg, Home home ) -> + let + ( newHome, msgFromPage, cmd ) = + Home.update window translator msg home + + points = + case msgFromPage of + Home.AddPoints newPoints -> + map.points + newPoints + + _ -> + map.points + + level = + case msgFromPage of + Home.Exit -> + HomeTown + + _ -> + Home home + in + ( { map + | level = level + , points = points + } + , Cmd.map HomeMsg cmd + ) + ( ArtStoreMsg msg, ArtStore artStore ) -> let ( newArtStore, msgFromPage, cmd ) = @@ -128,7 +158,7 @@ newLevel window route map = ( newLevel, newSeed ) = case route of HomeRoute -> - Home => map.seed + Home Home.init => map.seed HomeTownRoute -> HomeTown => map.seed @@ -167,8 +197,9 @@ tick timeDelta window translator map = view : Window.Size -> Translator -> Map -> Html Msg view mapSize translator map = case map.level of - Home -> - home mapSize + Home homeModel -> + Home.view mapSize translator + |> Html.map HomeMsg HomeTown -> hometown mapSize @@ -205,19 +236,6 @@ px x = --- HOME - - -home : Window.Size -> Html Msg -home mapSize = - div [] - [ exit HomeTownRoute - , Bee.view (Just PlayAudio) Bee.mama - , Bee.view (Just PlayAudio) Bee.papa - ] - - - -- TOWN diff --git a/audio/french/maman.mp3 b/audio/french/maman.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..28d8aa2cf95fac4a5a4fb7a1c95eeb4160c39b31 GIT binary patch literal 2976 zcmdVaX*g7E0|)SfvJS>rn~F)2rR)loVNmv+hElR+tYeELV=Ign!&H{B6w4c$&xiMYujj*if4t9ie)s?W-}gD-qA3kPWEy|q!omTM zP;@`1}(&wYDfZ%+b9N(KbBYti` zBTi0~%y}HQ7H=;XZx4qNZt;z`jNQ~U?#=Q6IX=HQ?#&ghe0xA^)l&yG%E%Rq-e}bQ zA;~&wYmT<<)wq8|&o}|^uu(9GO_3p`m85=1V`K@@lrMm60yyK%XFeRA_krK&Kq!5q z@)?LpRPEm7*{H&&tYz+J2l>L1yC$!2O<@5*5eIk4h?brv{Gkl4U9}-l?%qB;VxCtZ zOn?2}w|1a2yfz~1pqB0(=hKo7AT%~!f~V23cKOM^NZK>h!?8!4xlQ8w=wh0s@HM&& zPd4NWNeYOR0;41N{ZbMMU90ig^`gfQKBzBnT7g~> z@=m3ovw0!!k5Zar3)B`iipv{C$1K+AZi7|Az7#Vx<*+W?SRWG;J$5KsyR2^>Fy zSdvPnlriwgGxNy&?IOh!zxt6lPizH}hsjpKSd)`~zI@_f@IFvA)nKEj9zADi6VUfL z-Z}O`O{iXw-`&C$N%4T2q8hJ0M<7$zhCYqkDd5`>zO^P${7Q^B?fT%@gjVD>uQEDd zn%vL=`7p6cwN`+F#Pid#^waPbmB)C^XWWEsBD-E=OQj@>ZQXcM>c3^5vuL_{DmRU} z=S@0Mwm{Q(TE6xUqk&wR^j^iZ*Q%L;LvF5Ddb}GmSetkJg z{vcsNe+_e?6b*iE?-@QYB5vJv<=T_yNbXsag+?AODy*10s`d|Xs62$`AfRPMVBf|AiOQP3+*Ai2@ zrT=5!F|X)1cdso+*<|kz+*4)_z85iby(N^`F`!%R=fNk_3NZOUFbx%9t9p=cD;hIg z0gNK>s#|Y9m$rV3_f|_hlv9~0)f+V7X>_z>o48x!lKYOI><7|)3Cb$HWoXcyzz$E^ zB21~0U3C7|^tCCe@RZrnDU0e3Hf%TX1dq|1MmwEQCWTZ zvKjG~i);6=*Wexix6=ovn9`%v>Na&UdqiqYXm=p28`$6ku)wOj(s9&;GC>kCeV?dv1SJu7?{$S1g zY@T)k!P@o8KyVK7vn2u$X~5V(j*0)*UevM*F7W%JM%l(%sO@%lA5$m(|%z9-K&QG8FZBcy)ERL^;(yo_&VMzmTIoUVZ2i z?p1KRyZaZ;AD=bTk4q%` z3=Tc(Zxgm*c~AmQnu$G0mw&1#PIdW}zZy{`YtQj>CR1fYdeSCW9}b)89wGJJK%3U@ zB{ryHn$0pV)b6>+y7=Yz&vGB%dx8m7&S!=$lOF1ozQjdbb($Seu3`ny;!qXw$864O zzul%Sc!LWq?>nJt2IX%=B#h_)^g;Y3|6$@7cjXUVBEB)uXGl$9AH&ho%rD%z@I-F$ z*aA+&**uLI&J%2;xgd1|Q=;YLi4;I*W$DtA%I$p9x1!fim$i+w)@gmsj8stJR*0<= z^ML$zINT2fP_HN@qEyml&ow=`bBdJo?FT8+*V@>|Oj}J~UrpELKOVo|h5TUzFbo5p y^y2?J=xgf93zK4eI}2`TwTL|7H50_WuI02ZD|O literal 0 HcmV?d00001 diff --git a/audio/french/papa.mp3 b/audio/french/papa.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0ab9c0ce4045e9b50c2b65e8ea750e38c9bb0d10 GIT binary patch literal 2880 zcmcK6`8(A88VB(2Fc^kuHU{Y-Bs7UZ4fSAT8;xWd6MB?=%Q8wy$G(&;p+O0iFp_-< zZDQmgvJ2U18BYsoVPd||Oy|1JIe$RiKYf0By+7Ccx_`LARkL;gsid(13=IOfv@=Q) zD53L=8&A93htU|ONZV7Lql+XYL%S|v`j$|p(&5`JcRO>obPInv`ef5KY%U86vWxf?9Yt&R$0kt69=2`uswxZ22)+22RfOstA(grHqqKOo0!V)@Z8-I;@%L z_m4;RUSkYgE;vzAKlW5|4~1|Sq84FPJt8q(RQ%%61l{2+&w#7Dq^ZTUJNItSw;w+m z>A2T22tp4+WBACXu}fqSKcNV2U;O6eQjt09Z%KhKj%_2<13leMono}8hZ)))O3iQ! zva(q#gODZT!zTL~Zi9{Mll82c?(19If!x%q-e*{e`FJ|`2~7XE3hl5#FsUzf&+P)O z@6f4N_z4`WeO>9%n8^2DKYdKCOg)fy_!=^Gzh&Nv5lkIZ?0)Qkam?umoD~Nh&_(r_ zqSPMn;a+}hoCYr;t{(}{Im%aVPuYrFm*w%h-(M!x3TQ@w;EEoe6j#f%kaa0PSV!8* z)DienXozSz#K8o(U;66UXrX$1gXdpaqx8|yf6<9s|HumIk8?19(f_=0Gi4#=(z{$# zbiz&W2~@-@{v=OYoW&1nElx*U1T0HEhoT_&5I_PW`)hs!NBDECa=O5mm8ps4?~e&E z>^LV`nkrQk<_e3y6IWP}sqSz}*Lm|hG`-jur}*-RCf>NOJ{YVYEN-~8|KU}F9@K0n zxB%Bvb!@rVGT$xZQ!Te;!>vQsE>$(4a<^+wNG&Mvk9*|rj;PJk8>hL>p5wpAO zM{qIW8iir|6=XOW2ba@ZhcwMDb3(puG((!H7c;m~IZ7_;(OnIv*3|G2A&JD64N)li z65uN2MS{+Du?8(9W_wq?n-~(%R z;S1F(U`siTrS2C6e*Z#ov^C=fTEPr45Z#Z<>RB<=B4bb@frQ?EL|k4^$Rz#@i=>ZY zZ(AODYvFxw@-k=7dfpO>^kK^xxX+x?Q+M0X{yUuxXL*NoxFB$uuPFO->0xt4}$9-7gB?I zlpqd9fVxK20g^Rl>HPp?k0&%k;BP_SPAdmqK$(a9Ka>kI7Y=sOoUa9UDL}31bL=eN zh3^`#KTYmGk-2M9MP|9^t#QlE&UV$2Q2x6A7SKi|tO0?qjpT@y1MC+J+-7E) z@1khyq0CRb*M~#ck=#pJDhP$;2Wbj5=8)ei~*j`=T=$7D>_josJI$&yZmziC0r<6-lO)vJ-_#gA?0b<6U8PX+)94 zDD>cDLT^$pZtD_xzO_Guvm+R#yu+l#DeRp$82Z^JzB|81)8Jl~&Sj?gc-Btc>Djxf zQq0L-fqx9yS;7R^)0FoWW!RO;DpRWYutse7iiwPLY4_0A16V(d+WPf>S5Az)+F)Jo zd&N9N4vqNm*pk)Kap0W1Gqj9|DsOMarfD}RD`p>>NgY>H#-=j|o0U6bR0X~lIs@$k z4D~Qp0u9^sU8e2wcRjat_HTkZNMngUxoxc626ajMUX8O-PDUvOm-cK8*Rrb)2qIJAjnyqjB_eSU03`I5j7M9HR^0rMv)P;1my_c*_U zl~Ovyvwv5nRaW7gBcfKf%`}?sJs;n^!{5FwMFs-oS(imeC+#*Z)f7U&V+)mhToUCG z*}`IU45FXxZlXojZ1ztM)=~TtRnR5y!;$YI@xX+IRn)hd0!RIQ`kMXjg`y_fA(GTn zD=*;}8&s1z;*iAb>P3AQ9}x*ST^Hk9moEe=kyz`#XSEdv8BefwWDKlz{c&n+~NPz`ilwEC62{r~)X03d7y a@aH%A<-f)MPtAh<|Lgyv=Kr7h-Tprqpb}#M literal 0 HcmV?d00001 diff --git "a/audio/spanish/mam\303\241.mp3" "b/audio/spanish/mam\303\241.mp3" new file mode 100644 index 0000000000000000000000000000000000000000..31734eaf554c335c14f57e44b11ca6116fd75fde GIT binary patch literal 3072 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 SA*28Q`oGZX|2y)#{eJ^WhpVdq literal 0 HcmV?d00001 diff --git "a/audio/spanish/pap\303\241.mp3" "b/audio/spanish/pap\303\241.mp3" new file mode 100644 index 0000000000000000000000000000000000000000..e774b5645ad189a3ecba510e7663c0b2999886c4 GIT binary patch literal 2688 zcmdVWc{tRI8VB&-*veR%v7ND`35mfl_O0w$LIzWf64z1_%AQVyiZCdn8A~TimKbIX zTF0csjGZi*kyQ3LBBnT$%xzB3bMJHhz4x9!?)%sKzJGk4@AKt-wr2v60k zA`T{WLvog2>u{yVH)BHaWxC*`zk*nP28R;eV0sY8SWK7*G)1#ESH9z8tjL|8NjJK@ zO$Iz}GbJHr{w|xbS7fb#kJq7tgLQ|OkG97xVR=9NU62+ZHP8_lpt+=z!h-j_Bs+Yb zhau35c~3+lunI*QerLZSM$_)4bUlOSO6@UsE#HZ2mAB zDJmaKB?*AvPZ$J@D$us-?nnK>_xHelLpXs7a)7Vp8m2=hTUqs??#E~&5F*r?5IEc5tZKT zt_BU_fI`)2*ltazjf%D~NuLL&6empO>Ax3dB0C%kjjFP#G5w}~eNeiIAur!XP zw&!|})S%)%Bu3APhG4I{P+ABsBgzAbS8>bJKrUs~mSV@xFD|{%^Z@W0A{7s1mU?R3 zS-8+U;1e zl`XYjyKEp}GnKO_M$XPtDoEZ@RCBm5=Vw2t?h2q?jwme4<0{FZ;q#2B8O=+J%^CS$ z_X2kZIhc9JRv)W z$DeZUQm0JPtB=}{B>284w6Kl{#50L#tz!Mx)QfsKm7yK14eqP`-7`k{s4zMbNfl0& z$Y@Szen&t4(#s0fZ0&S5Ide9gcem&fxE*y3j5*MVXdEcVD+kN|rlHz)Tnu`cyIe4_ zY|r;)q4nEN0NW#ie7}D9+F&;GB@aiIu?<05DBEmog1pssT;12%{Iot`W zr43@25hThZLaKzfX>Jf`?5QHCZYBuVFX8cKyia$MrBzZ^g$$HM8|gnjyiM*TVP;Uh zd*)=8nrLfbYPUfcesaoX%r}kigQdI1dO?{uP^utqPkE7lxoSb0sM5VygQ$QW_hKz$ zBs`>iUAa@?cu*Cc0)*xaGB8adpud&2bpRo`gwzFHoiDk4CUx!f{ZjrtRC^jM< z4O6ocbwV9JL-bg0oh(~yMYzO;mCS0jjg#;5@jFL}rb8t%X8Rr7&1Nk}_s)0CnbCHYs0MHM2XcBs3lG%FiMXQ9 ztj`NPQr96r-x1_jwoHm2>so(Evbgaa*FmcETHSfOb)|J~qb;28?}N(Mv;bNIB<*`# z#qqeD(4#LF9@tRbdpz(A7IPnM*ih1Z9Xs+9$D|S>NE)$g0<-y3^uc$DNcPW z{@9e9jzszY15FDWTu;1^*3asXwz|KQ5U-rY_YEMc?oavoZE>YiQ**1|g%@7!wcZiM zAx}jWY)FQs5!Wq2aMP+zM&8YYDsf*s^dW8uo@!@vSFaSFDLyW~coo{XfI-DRKcnK_ zCl}>v{UuQ+U3;xt*aXb?ZKcqj^?Y9d+ixB2x`vsY#|?bZ9xbOWM=aixn?4i{8NQz9 z!D5kQvN43$S#0AB3Kv(sBf407bM(vAG%HIm>u3U{6Ig3{&uKqC_=tI--3(lzF>MtWR= zsH45>MqDceZ00$>?miCMzA{N{Y+y~$)@!*!TE4^vfvQ?tNg9oL+Q;{?P&6_Jh?k0Z z;T-8)OFO3A)FE%*LuNZ_p$~qMHXCNfKeJp8dY%-oa7w+bC{VDRvfb%LPkNN?X@oRP zC&_`ONEnQxVBg!;)sRoDG~klhQSS9d;Vs4|P8{Dq4V8CE0pi7p^&2V(RRgj^4hvbC zcLo-SFUzsaiXQFI^h&BRx>QdXbmV=l#O#O~$RZC*ADbHgb( z$X<@DN><6vS`XnYwG#~M$+g}B8JWWT>XCD-bFkQEh=`)5Z#nTy5MO43K7KNF&UDK0gt@e*;1{h5(oBBmPVA luUY=>7XyHx6YyjHCZFHlnt-~Yez|FyvX$@O>p{{%n2!Hxg` literal 0 HcmV?d00001 diff --git a/audio/spanish/purpura.mp3 "b/audio/spanish/p\303\272rpura.mp3" similarity index 100% rename from audio/spanish/purpura.mp3 rename to "audio/spanish/p\303\272rpura.mp3" diff --git a/dictionary/French.elm b/dictionary/French.elm index e038c1c..5a798f7 100644 --- a/dictionary/French.elm +++ b/dictionary/French.elm @@ -14,7 +14,17 @@ type alias Audio = dictionary : Dict String Word dictionary = - colors + Dict.union + family + colors + + +family : Dict String Word +family = + Dict.fromList + [ ( "mom", "maman" ) + , ( "dad", "papa" ) + ] colors : Dict String Word diff --git a/dictionary/Spanish.elm b/dictionary/Spanish.elm index 5dbf84a..bb9fb88 100644 --- a/dictionary/Spanish.elm +++ b/dictionary/Spanish.elm @@ -14,7 +14,17 @@ type alias Audio = dictionary : Dict String Word dictionary = - colors + Dict.union + family + colors + + +family : Dict String Word +family = + Dict.fromList + [ ( "mom", "mamá" ) + , ( "dad", "papá" ) + ] colors : Dict String Word @@ -38,7 +48,7 @@ wordToString str = wordAudio : Word -> String wordAudio str = - audioFile (replace "ú" "u" str) + audioFile str findWord : String -> Word diff --git a/elm.js b/elm.js index b1ab400..b13f2a8 100644 --- a/elm.js +++ b/elm.js @@ -13796,6 +13796,11 @@ var _user$project$Audio$play = _elm_lang$core$Native_Platform.outgoingPort( return v; }); +var _user$project$Dictionary_Translator$Translator = F2( + function (a, b) { + return {translate: a, audio: b}; + }); + var _user$project$Bee$scaleBee = function (dimension) { return _elm_lang$core$Basics$round(dimension / 8); }; @@ -13856,21 +13861,27 @@ var _user$project$Bee$animateStart = F3( bee, {animX: animX, animY: animY}); }); -var _user$project$Bee$papa = { - x: 600, - y: 100, - animX: _mgold$elm_animation$Animation$animation(0), - animY: _mgold$elm_animation$Animation$animation(0), - src: 'imgs/papa-bee.png', - audio: _elm_lang$core$Maybe$Just('audio/padre.m4a') +var _user$project$Bee$papa = function (translator) { + return { + x: 600, + y: 100, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/papa-bee.png', + audio: _elm_lang$core$Maybe$Just( + translator.audio('dad')) + }; }; -var _user$project$Bee$mama = { - x: 100, - y: 100, - animX: _mgold$elm_animation$Animation$animation(0), - animY: _mgold$elm_animation$Animation$animation(0), - src: 'imgs/mama-bee.png', - audio: _elm_lang$core$Maybe$Just('audio/madre.mov') +var _user$project$Bee$mama = function (translator) { + return { + x: 100, + y: 100, + animX: _mgold$elm_animation$Animation$animation(0), + animY: _mgold$elm_animation$Animation$animation(0), + src: 'imgs/mama-bee.png', + audio: _elm_lang$core$Maybe$Just( + translator.audio('mom')) + }; }; var _user$project$Bee$player = { x: 0, @@ -14014,7 +14025,17 @@ var _user$project$Dictionary_French$colors = _elm_lang$core$Dict$fromList( } } }); -var _user$project$Dictionary_French$dictionary = _user$project$Dictionary_French$colors; +var _user$project$Dictionary_French$family = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'mom', _1: 'maman'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'dad', _1: 'papa'}, + _1: {ctor: '[]'} + } + }); +var _user$project$Dictionary_French$dictionary = A2(_elm_lang$core$Dict$union, _user$project$Dictionary_French$family, _user$project$Dictionary_French$colors); var _user$project$Dictionary_French$findWord = function (original) { return A2( _elm_lang$core$Maybe$withDefault, @@ -14041,8 +14062,7 @@ var _user$project$Dictionary_Spanish$audioFile = function (file) { A2(_elm_lang$core$Basics_ops['++'], file, '.mp3')); }; var _user$project$Dictionary_Spanish$wordAudio = function (str) { - return _user$project$Dictionary_Spanish$audioFile( - A3(_elm_community$string_extra$String_Extra$replace, 'ú', 'u', str)); + return _user$project$Dictionary_Spanish$audioFile(str); }; var _user$project$Dictionary_Spanish$wordToString = function (str) { return str; @@ -14081,7 +14101,17 @@ var _user$project$Dictionary_Spanish$colors = _elm_lang$core$Dict$fromList( } } }); -var _user$project$Dictionary_Spanish$dictionary = _user$project$Dictionary_Spanish$colors; +var _user$project$Dictionary_Spanish$family = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'mom', _1: 'mamá'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'dad', _1: 'papá'}, + _1: {ctor: '[]'} + } + }); +var _user$project$Dictionary_Spanish$dictionary = A2(_elm_lang$core$Dict$union, _user$project$Dictionary_Spanish$family, _user$project$Dictionary_Spanish$colors); var _user$project$Dictionary_Spanish$findWord = function (original) { return A2( _elm_lang$core$Maybe$withDefault, @@ -14100,11 +14130,6 @@ var _user$project$Dictionary_Spanish$audio = function (word) { _user$project$Dictionary_Spanish$findWord(word)); }; -var _user$project$Dictionary_Translator$Translator = F2( - function (a, b) { - return {translate: a, audio: b}; - }); - var _wernerdegroot$listzipper$List_Zipper$after = function (_p0) { var _p1 = _p0; return _p1._2; @@ -14293,7 +14318,7 @@ var _wernerdegroot$listzipper$List_Zipper$last = function (_p28) { } }; -var _user$project$Store_ArtStore$tile = function (_p0) { +var _user$project$Location_ArtStore$tile = function (_p0) { var _p1 = _p0; return A2( _elm_lang$html$Html$img, @@ -14339,7 +14364,7 @@ var _user$project$Store_ArtStore$tile = function (_p0) { }, {ctor: '[]'}); }; -var _user$project$Store_ArtStore$exit = function (exitMsg) { +var _user$project$Location_ArtStore$exit = function (exitMsg) { return A2( _elm_lang$html$Html$div, { @@ -14349,19 +14374,19 @@ var _user$project$Store_ArtStore$exit = function (exitMsg) { }, { ctor: '::', - _0: _user$project$Store_ArtStore$tile( + _0: _user$project$Location_ArtStore$tile( {ctor: '_Tuple2', _0: 0, _1: 0}), _1: { ctor: '::', - _0: _user$project$Store_ArtStore$tile( + _0: _user$project$Location_ArtStore$tile( {ctor: '_Tuple2', _0: 0, _1: 32}), _1: { ctor: '::', - _0: _user$project$Store_ArtStore$tile( + _0: _user$project$Location_ArtStore$tile( {ctor: '_Tuple2', _0: 32, _1: 0}), _1: { ctor: '::', - _0: _user$project$Store_ArtStore$tile( + _0: _user$project$Location_ArtStore$tile( {ctor: '_Tuple2', _0: 32, _1: 32}), _1: {ctor: '[]'} } @@ -14369,8 +14394,8 @@ var _user$project$Store_ArtStore$exit = function (exitMsg) { } }); }; -var _user$project$Store_ArtStore$splatBackgroundSize = '80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%;'; -var _user$project$Store_ArtStore$splatBackground = A2( +var _user$project$Location_ArtStore$splatBackgroundSize = '80px 68px, 37px 30px, 26px 13px, 10px 10px, 30px 30px, 50px 50px, 100% 100%;'; +var _user$project$Location_ArtStore$splatBackground = A2( _elm_lang$core$Basics_ops['++'], '-webkit-radial-gradient(red 0, red 30%, rgba(255,255,255,0) 30%) 0 0,', A2( @@ -14383,7 +14408,7 @@ var _user$project$Store_ArtStore$splatBackground = A2( _elm_lang$core$Basics_ops['++'], '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 55px 9px,', A2(_elm_lang$core$Basics_ops['++'], '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 8px 46px,', '-webkit-radial-gradient(red 0, red 11%, rgba(255,255,255,0) 11%) 0 0;'))))); -var _user$project$Store_ArtStore$deadBall = function (ball) { +var _user$project$Location_ArtStore$deadBall = function (ball) { return A2( _elm_lang$html$Html$div, { @@ -14456,9 +14481,9 @@ var _user$project$Store_ArtStore$deadBall = function (ball) { }, {ctor: '[]'}); }; -var _user$project$Store_ArtStore$colorSwapTime = 2000; -var _user$project$Store_ArtStore$slowdown = 1 / 10; -var _user$project$Store_ArtStore$initBottomWall = F2( +var _user$project$Location_ArtStore$colorSwapTime = 2000; +var _user$project$Location_ArtStore$slowdown = 1 / 10; +var _user$project$Location_ArtStore$initBottomWall = F2( function (windowWidth, windowHeight) { return { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, windowHeight), @@ -14466,14 +14491,14 @@ var _user$project$Store_ArtStore$initBottomWall = F2( halfWidth: windowWidth / 2 }; }); -var _user$project$Store_ArtStore$initTopWall = function (windowWidth) { +var _user$project$Location_ArtStore$initTopWall = function (windowWidth) { return { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, windowWidth / 2, 0), halfHeight: 1, halfWidth: windowWidth / 2 }; }; -var _user$project$Store_ArtStore$initRightWall = F2( +var _user$project$Location_ArtStore$initRightWall = F2( function (windowWidth, windowHeight) { return A2( _elm_lang$core$Debug$log, @@ -14484,14 +14509,14 @@ var _user$project$Store_ArtStore$initRightWall = F2( halfWidth: 1 }); }); -var _user$project$Store_ArtStore$initLeftWall = function (windowHeight) { +var _user$project$Location_ArtStore$initLeftWall = function (windowHeight) { return { pos: A2(_elm_community$linear_algebra$Math_Vector2$vec2, 0, windowHeight / 2), halfHeight: windowHeight / 2, halfWidth: 1 }; }; -var _user$project$Store_ArtStore$resolveCollision = F3( +var _user$project$Location_ArtStore$resolveCollision = F3( function (_p2, b0, b1) { var _p3 = _p2; var _p4 = _p3.normal; @@ -14516,7 +14541,7 @@ var _user$project$Store_ArtStore$resolveCollision = F3( }; } }); -var _user$project$Store_ArtStore$removeBall = F3( +var _user$project$Location_ArtStore$removeBall = F3( function (id, balls, deadBalls) { var _p5 = A2( _elm_lang$core$List$partition, @@ -14528,13 +14553,20 @@ var _user$project$Store_ArtStore$removeBall = F3( return { ctor: '_Tuple2', _0: _p5._1, - _1: {ctor: '::', _0: _p5._0._0, _1: deadBalls} + _1: A2( + _elm_lang$core$Basics_ops['++'], + deadBalls, + { + ctor: '::', + _0: _p5._0._0, + _1: {ctor: '[]'} + }) }; } else { return {ctor: '_Tuple2', _0: balls, _1: deadBalls}; } }); -var _user$project$Store_ArtStore$initMovingBall = F5( +var _user$project$Location_ArtStore$initMovingBall = F5( function (id, color, _p7, _p6, image) { var _p8 = _p7; var _p9 = _p6; @@ -14548,8 +14580,8 @@ var _user$project$Store_ArtStore$initMovingBall = F5( poof: false }; }); -var _user$project$Store_ArtStore$ballsPerRound = 1; -var _user$project$Store_ArtStore$nonZeroFloat = A2( +var _user$project$Location_ArtStore$ballsPerRound = 10; +var _user$project$Location_ArtStore$nonZeroFloat = A2( _elm_lang$core$Random$map, _elm_lang$core$Basics$toFloat, A2( @@ -14558,8 +14590,8 @@ var _user$project$Store_ArtStore$nonZeroFloat = A2( return _elm_lang$core$Native_Utils.eq(i, 0) ? 1 : i; }, A2(_elm_lang$core$Random$int, -1, 1))); -var _user$project$Store_ArtStore$randomVelocity = A2(_elm_lang$core$Random$pair, _user$project$Store_ArtStore$nonZeroFloat, _user$project$Store_ArtStore$nonZeroFloat); -var _user$project$Store_ArtStore$randomPosition = function (window) { +var _user$project$Location_ArtStore$randomVelocity = A2(_elm_lang$core$Random$pair, _user$project$Location_ArtStore$nonZeroFloat, _user$project$Location_ArtStore$nonZeroFloat); +var _user$project$Location_ArtStore$randomPosition = function (window) { return A2( _elm_lang$core$Random$pair, A2( @@ -14571,7 +14603,7 @@ var _user$project$Store_ArtStore$randomPosition = function (window) { _elm_lang$core$Basics$toFloat, A2(_elm_lang$core$Random$int, 30, window.height))); }; -var _user$project$Store_ArtStore$alwaysGen = function (x) { +var _user$project$Location_ArtStore$alwaysGen = function (x) { return A2( _elm_lang$core$Random$map, function (_p10) { @@ -14579,85 +14611,85 @@ var _user$project$Store_ArtStore$alwaysGen = function (x) { }, _elm_lang$core$Random$bool); }; -var _user$project$Store_ArtStore$imageDir = 'imgs/colors/'; -var _user$project$Store_ArtStore$get = F2( +var _user$project$Location_ArtStore$imageDir = 'imgs/colors/'; +var _user$project$Location_ArtStore$get = F2( function (index, list) { return _elm_lang$core$List$head( A2(_elm_lang$core$List$drop, index, list)); }); -var _user$project$Store_ArtStore$randItem = function (list) { +var _user$project$Location_ArtStore$randItem = function (list) { return A2( _elm_lang$core$Random$map, function (i) { - return A2(_user$project$Store_ArtStore$get, i, list); + return A2(_user$project$Location_ArtStore$get, i, list); }, A2( _elm_lang$core$Random$int, 0, _elm_lang$core$List$length(list) - 1)); }; -var _user$project$Store_ArtStore$nextColor = function (colors) { +var _user$project$Location_ArtStore$nextColor = function (colors) { return A2( _elm_lang$core$Maybe$withDefault, colors, _wernerdegroot$listzipper$List_Zipper$next(colors)); }; -var _user$project$Store_ArtStore$unknownColors = function (colors) { +var _user$project$Location_ArtStore$unknownColors = function (colors) { return _wernerdegroot$listzipper$List_Zipper$after(colors); }; -var _user$project$Store_ArtStore$knownColors = function (colors) { +var _user$project$Location_ArtStore$knownColors = function (colors) { return { ctor: '::', _0: _wernerdegroot$listzipper$List_Zipper$current(colors), _1: _wernerdegroot$listzipper$List_Zipper$before(colors) }; }; -var _user$project$Store_ArtStore$Model = F3( +var _user$project$Location_ArtStore$Model = F3( function (a, b, c) { return {playing: a, game: b, seed: c}; }); -var _user$project$Store_ArtStore$ArtGame = F9( +var _user$project$Location_ArtStore$ArtGame = F9( function (a, b, c, d, e, f, g, h, i) { return {color: a, balls: b, deadBalls: c, time: d, seed: e, finishRound: f, win: g, points: h, knownUnknownColors: i}; }); -var _user$project$Store_ArtStore$MovingBall = F7( +var _user$project$Location_ArtStore$MovingBall = F7( function (a, b, c, d, e, f, g) { return {id: a, color: b, pos: c, radius: d, velocity: e, img: f, poof: g}; }); -var _user$project$Store_ArtStore$CollisionResult = F2( +var _user$project$Location_ArtStore$CollisionResult = F2( function (a, b) { return {normal: a, penetration: b}; }); -var _user$project$Store_ArtStore$collisionBubbleBubble = F3( +var _user$project$Location_ArtStore$collisionBubbleBubble = F3( function (b0b1, radius0, radius1) { var distanceSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(b0b1); var radiusb0b1 = radius0 + radius1; if (_elm_lang$core$Native_Utils.eq(distanceSq, 0)) { return A2( - _user$project$Store_ArtStore$CollisionResult, + _user$project$Location_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), radius0); } else { if (_elm_lang$core$Native_Utils.cmp(distanceSq, radiusb0b1 * radiusb0b1) > -1) { return A2( - _user$project$Store_ArtStore$CollisionResult, + _user$project$Location_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { var d = _elm_lang$core$Basics$sqrt(distanceSq); return A2( - _user$project$Store_ArtStore$CollisionResult, + _user$project$Location_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$scale, 1 / d, b0b1), radiusb0b1 - d); } } }); -var _user$project$Store_ArtStore$collision = F2( +var _user$project$Location_ArtStore$collision = F2( function (body0, body1) { var b0b1 = A2(_elm_community$linear_algebra$Math_Vector2$sub, body1.pos, body0.pos); - return A3(_user$project$Store_ArtStore$collisionBubbleBubble, b0b1, body0.radius, body1.radius); + return A3(_user$project$Location_ArtStore$collisionBubbleBubble, b0b1, body0.radius, body1.radius); }); -var _user$project$Store_ArtStore$collideWith = F3( +var _user$project$Location_ArtStore$collideWith = F3( function (a0, bodies, acc) { collideWith: while (true) { @@ -14666,8 +14698,8 @@ var _user$project$Store_ArtStore$collideWith = F3( return {ctor: '::', _0: a0, _1: acc}; } else { var _p13 = _p11._0; - var collisionResult = A2(_user$project$Store_ArtStore$collision, a0, _p13); - var _p12 = A3(_user$project$Store_ArtStore$resolveCollision, collisionResult, a0, _p13); + var collisionResult = A2(_user$project$Location_ArtStore$collision, a0, _p13); + var _p12 = A3(_user$project$Location_ArtStore$resolveCollision, collisionResult, a0, _p13); var a1 = _p12._0; var b1 = _p12._1; var _v6 = a1, @@ -14680,7 +14712,7 @@ var _user$project$Store_ArtStore$collideWith = F3( } } }); -var _user$project$Store_ArtStore$collide = F2( +var _user$project$Location_ArtStore$collide = F2( function (acc, bodies) { collide: while (true) { @@ -14689,7 +14721,7 @@ var _user$project$Store_ArtStore$collide = F2( return acc; } else { var _p15 = A3( - _user$project$Store_ArtStore$collideWith, + _user$project$Location_ArtStore$collideWith, _p14._0, _p14._1, {ctor: '[]'}); @@ -14712,13 +14744,13 @@ var _user$project$Store_ArtStore$collide = F2( } } }); -var _user$project$Store_ArtStore$collisions = function (balls) { +var _user$project$Location_ArtStore$collisions = function (balls) { return A2( - _user$project$Store_ArtStore$collide, + _user$project$Location_ArtStore$collide, {ctor: '[]'}, balls); }; -var _user$project$Store_ArtStore$collisionBoxBubble = F2( +var _user$project$Location_ArtStore$collisionBoxBubble = F2( function (_p17, _p16) { var _p18 = _p17; var _p25 = _p18._1; @@ -14775,24 +14807,24 @@ var _user$project$Store_ArtStore$collisionBoxBubble = F2( var normalLenSq = _elm_community$linear_algebra$Math_Vector2$lengthSquared(normal); if ((_elm_lang$core$Native_Utils.cmp(normalLenSq, _p24 * _p24) > 0) && (!inside)) { return A2( - _user$project$Store_ArtStore$CollisionResult, + _user$project$Location_ArtStore$CollisionResult, A2(_elm_community$linear_algebra$Math_Vector2$vec2, 1, 0), 0); } else { var penetration = _p24 + _elm_lang$core$Basics$sqrt(normalLenSq); return inside ? A2( - _user$project$Store_ArtStore$CollisionResult, + _user$project$Location_ArtStore$CollisionResult, A2( _elm_community$linear_algebra$Math_Vector2$scale, -1, _elm_community$linear_algebra$Math_Vector2$normalize(normal)), penetration) : A2( - _user$project$Store_ArtStore$CollisionResult, + _user$project$Location_ArtStore$CollisionResult, _elm_community$linear_algebra$Math_Vector2$normalize(normal), penetration); } }); -var _user$project$Store_ArtStore$animateBall = F3( +var _user$project$Location_ArtStore$animateBall = F3( function (timeDiff, window, ball) { var y = _elm_community$linear_algebra$Math_Vector2$getY(ball.pos); var x = _elm_community$linear_algebra$Math_Vector2$getX(ball.pos); @@ -14805,17 +14837,17 @@ var _user$project$Store_ArtStore$animateBall = F3( var height = _p26._1; var _p27 = { ctor: '_Tuple4', - _0: _user$project$Store_ArtStore$initLeftWall(height), - _1: A2(_user$project$Store_ArtStore$initRightWall, width - (ball.radius * 2), height), - _2: _user$project$Store_ArtStore$initTopWall(width), - _3: A2(_user$project$Store_ArtStore$initBottomWall, width, height - (ball.radius * 2)) + _0: _user$project$Location_ArtStore$initLeftWall(height), + _1: A2(_user$project$Location_ArtStore$initRightWall, width - (ball.radius * 2), height), + _2: _user$project$Location_ArtStore$initTopWall(width), + _3: A2(_user$project$Location_ArtStore$initBottomWall, width, height - (ball.radius * 2)) }; var leftWall = _p27._0; var rightWall = _p27._1; var topWall = _p27._2; var bottomWall = _p27._3; var leftCol = A2( - _user$project$Store_ArtStore$collisionBoxBubble, + _user$project$Location_ArtStore$collisionBoxBubble, { ctor: '_Tuple2', _0: leftWall.pos, @@ -14826,12 +14858,12 @@ var _user$project$Store_ArtStore$animateBall = F3( _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos), _elm_community$linear_algebra$Math_Vector2$getX(rightWall.pos), - x + ((_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff) * _user$project$Store_ArtStore$slowdown)); + x + ((_elm_community$linear_algebra$Math_Vector2$getX(ball.velocity) * timeDiff) * _user$project$Location_ArtStore$slowdown)); var newY = A3( _elm_lang$core$Basics$clamp, _elm_community$linear_algebra$Math_Vector2$getY(topWall.pos), _elm_community$linear_algebra$Math_Vector2$getY(bottomWall.pos), - y + ((_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff) * _user$project$Store_ArtStore$slowdown)); + y + ((_elm_community$linear_algebra$Math_Vector2$getY(ball.velocity) * timeDiff) * _user$project$Location_ArtStore$slowdown)); var newXVelocity = (_elm_lang$core$Native_Utils.eq( newX, _elm_community$linear_algebra$Math_Vector2$getX(leftWall.pos)) || _elm_lang$core$Native_Utils.eq( @@ -14849,42 +14881,42 @@ var _user$project$Store_ArtStore$animateBall = F3( velocity: A2(_elm_community$linear_algebra$Math_Vector2$vec2, newXVelocity, newYVelocity) }); }); -var _user$project$Store_ArtStore$Purple = {ctor: 'Purple'}; -var _user$project$Store_ArtStore$Blue = {ctor: 'Blue'}; -var _user$project$Store_ArtStore$Green = {ctor: 'Green'}; -var _user$project$Store_ArtStore$Yellow = {ctor: 'Yellow'}; -var _user$project$Store_ArtStore$Orange = {ctor: 'Orange'}; -var _user$project$Store_ArtStore$Red = {ctor: 'Red'}; -var _user$project$Store_ArtStore$initialColors = A3( +var _user$project$Location_ArtStore$Purple = {ctor: 'Purple'}; +var _user$project$Location_ArtStore$Blue = {ctor: 'Blue'}; +var _user$project$Location_ArtStore$Green = {ctor: 'Green'}; +var _user$project$Location_ArtStore$Yellow = {ctor: 'Yellow'}; +var _user$project$Location_ArtStore$Orange = {ctor: 'Orange'}; +var _user$project$Location_ArtStore$Red = {ctor: 'Red'}; +var _user$project$Location_ArtStore$initialColors = A3( _wernerdegroot$listzipper$List_Zipper$Zipper, {ctor: '[]'}, - _user$project$Store_ArtStore$Red, + _user$project$Location_ArtStore$Red, { ctor: '::', - _0: _user$project$Store_ArtStore$Orange, + _0: _user$project$Location_ArtStore$Orange, _1: { ctor: '::', - _0: _user$project$Store_ArtStore$Yellow, + _0: _user$project$Location_ArtStore$Yellow, _1: { ctor: '::', - _0: _user$project$Store_ArtStore$Green, + _0: _user$project$Location_ArtStore$Green, _1: { ctor: '::', - _0: _user$project$Store_ArtStore$Blue, + _0: _user$project$Location_ArtStore$Blue, _1: { ctor: '::', - _0: _user$project$Store_ArtStore$Purple, + _0: _user$project$Location_ArtStore$Purple, _1: {ctor: '[]'} } } } } }); -var _user$project$Store_ArtStore$randomColor = F2( +var _user$project$Location_ArtStore$randomColor = F2( function (seed, balls) { return A2( _elm_lang$core$Tuple$mapFirst, - _elm_lang$core$Maybe$withDefault(_user$project$Store_ArtStore$Red), + _elm_lang$core$Maybe$withDefault(_user$project$Location_ArtStore$Red), A2( _elm_lang$core$Tuple$mapFirst, _elm_lang$core$Maybe$map( @@ -14893,15 +14925,15 @@ var _user$project$Store_ArtStore$randomColor = F2( }), A2( _elm_lang$core$Random$step, - _user$project$Store_ArtStore$randItem(balls), + _user$project$Location_ArtStore$randItem(balls), seed))); }); -var _user$project$Store_ArtStore$animateArtGame = F4( +var _user$project$Location_ArtStore$animateArtGame = F4( function (timeDiff, window, translator, artGame) { var newTime = artGame.time + timeDiff; var _p28 = function () { - if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Store_ArtStore$colorSwapTime) > 0) { - var _p29 = A2(_user$project$Store_ArtStore$randomColor, artGame.seed, artGame.balls); + if (_elm_lang$core$Native_Utils.cmp(newTime, _user$project$Location_ArtStore$colorSwapTime) > 0) { + var _p29 = A2(_user$project$Location_ArtStore$randomColor, artGame.seed, artGame.balls); var randColor = _p29._0; var seed = _p29._1; return { @@ -14934,21 +14966,21 @@ var _user$project$Store_ArtStore$animateArtGame = F4( time: timeReset, color: newColor, seed: newSeed, - balls: _user$project$Store_ArtStore$collisions( + balls: _user$project$Location_ArtStore$collisions( A2( _elm_lang$core$List$map, - A2(_user$project$Store_ArtStore$animateBall, timeDiff, window), + A2(_user$project$Location_ArtStore$animateBall, timeDiff, window), artGame.balls)) }), _1: cmd }; }); -var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromList( +var _user$project$Location_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromList( { ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Store_ArtStore$Red, + _0: _user$project$Location_ArtStore$Red, _1: { ctor: '::', _0: 'red-cherry.png', @@ -14963,7 +14995,7 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Store_ArtStore$Orange, + _0: _user$project$Location_ArtStore$Orange, _1: { ctor: '::', _0: 'orange-tangerine.png', @@ -14974,7 +15006,7 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Store_ArtStore$Yellow, + _0: _user$project$Location_ArtStore$Yellow, _1: { ctor: '::', _0: 'yellow-banana.png', @@ -14993,7 +15025,7 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Store_ArtStore$Green, + _0: _user$project$Location_ArtStore$Green, _1: { ctor: '::', _0: 'green-frog.png', @@ -15008,7 +15040,7 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Store_ArtStore$Blue, + _0: _user$project$Location_ArtStore$Blue, _1: { ctor: '::', _0: 'blue-bird.png', @@ -15023,7 +15055,7 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis ctor: '::', _0: { ctor: '_Tuple2', - _0: _user$project$Store_ArtStore$Purple, + _0: _user$project$Location_ArtStore$Purple, _1: { ctor: '::', _0: 'purple-octopus.png', @@ -15037,59 +15069,59 @@ var _user$project$Store_ArtStore$images = _eeue56$elm_all_dict$EveryDict$fromLis } } }); -var _user$project$Store_ArtStore$randomImage = function (color) { - var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Store_ArtStore$images); +var _user$project$Location_ArtStore$randomImage = function (color) { + var options = A2(_eeue56$elm_all_dict$EveryDict$get, color, _user$project$Location_ArtStore$images); var _p31 = options; if (_p31.ctor === 'Nothing') { - return _user$project$Store_ArtStore$alwaysGen(''); + return _user$project$Location_ArtStore$alwaysGen(''); } else { if (_p31._0.ctor === '[]') { - return _user$project$Store_ArtStore$alwaysGen(''); + return _user$project$Location_ArtStore$alwaysGen(''); } else { return A2( _elm_lang$core$Random$map, _elm_lang$core$Maybe$withDefault(''), - _user$project$Store_ArtStore$randItem(_p31._0)); + _user$project$Location_ArtStore$randItem(_p31._0)); } } }; -var _user$project$Store_ArtStore$randomMovingBallWithColor = F3( +var _user$project$Location_ArtStore$randomMovingBallWithColor = F3( function (window, color, id) { return A4( _elm_lang$core$Random$map3, - A2(_user$project$Store_ArtStore$initMovingBall, id, color), - _user$project$Store_ArtStore$randomPosition(window), - _user$project$Store_ArtStore$randomVelocity, - _user$project$Store_ArtStore$randomImage(color)); + A2(_user$project$Location_ArtStore$initMovingBall, id, color), + _user$project$Location_ArtStore$randomPosition(window), + _user$project$Location_ArtStore$randomVelocity, + _user$project$Location_ArtStore$randomImage(color)); }); -var _user$project$Store_ArtStore$colorGen = function (colors) { +var _user$project$Location_ArtStore$colorGen = function (colors) { return A2( _elm_lang$core$Random$map, - _elm_lang$core$Maybe$withDefault(_user$project$Store_ArtStore$Red), - _user$project$Store_ArtStore$randItem(colors)); + _elm_lang$core$Maybe$withDefault(_user$project$Location_ArtStore$Red), + _user$project$Location_ArtStore$randItem(colors)); }; -var _user$project$Store_ArtStore$randomMovingBall = F3( +var _user$project$Location_ArtStore$randomMovingBall = F3( function (window, colors, id) { return A2( _elm_lang$core$Random$andThen, function (color) { return A4( _elm_lang$core$Random$map3, - A2(_user$project$Store_ArtStore$initMovingBall, id, color), - _user$project$Store_ArtStore$randomPosition(window), - _user$project$Store_ArtStore$randomVelocity, - _user$project$Store_ArtStore$randomImage(color)); + A2(_user$project$Location_ArtStore$initMovingBall, id, color), + _user$project$Location_ArtStore$randomPosition(window), + _user$project$Location_ArtStore$randomVelocity, + _user$project$Location_ArtStore$randomImage(color)); }, - _user$project$Store_ArtStore$colorGen(colors)); + _user$project$Location_ArtStore$colorGen(colors)); }); -var _user$project$Store_ArtStore$initialBalls = F2( +var _user$project$Location_ArtStore$initialBalls = F2( function (window, colors) { var initialLength = _elm_lang$core$List$length(colors); var oneOfEach = A2( _elm_lang$core$List$map, function (_p32) { var _p33 = _p32; - return A3(_user$project$Store_ArtStore$randomMovingBallWithColor, window, _p33._0, _p33._1); + return A3(_user$project$Location_ArtStore$randomMovingBallWithColor, window, _p33._0, _p33._1); }, A2( _elm_community$list_extra$List_Extra$zip, @@ -15097,8 +15129,8 @@ var _user$project$Store_ArtStore$initialBalls = F2( A2(_elm_lang$core$List$range, 0, initialLength - 1))); var random = A2( _elm_lang$core$List$map, - A2(_user$project$Store_ArtStore$randomMovingBall, window, colors), - A2(_elm_lang$core$List$range, initialLength, _user$project$Store_ArtStore$ballsPerRound - 1)); + A2(_user$project$Location_ArtStore$randomMovingBall, window, colors), + A2(_elm_lang$core$List$range, initialLength, _user$project$Location_ArtStore$ballsPerRound - 1)); var _p34 = A2( _elm_lang$core$Debug$log, '(oneOfEach, random)', @@ -15110,16 +15142,16 @@ var _user$project$Store_ArtStore$initialBalls = F2( var _p35 = A2( _elm_lang$core$Debug$log, '(initialLength, remainder)', - {ctor: '_Tuple2', _0: initialLength, _1: _user$project$Store_ArtStore$ballsPerRound - initialLength}); + {ctor: '_Tuple2', _0: initialLength, _1: _user$project$Location_ArtStore$ballsPerRound - initialLength}); return _elm_community$random_extra$Random_Extra$combine( A2(_elm_lang$core$Basics_ops['++'], oneOfEach, random)); }); -var _user$project$Store_ArtStore$initArtGame = F3( +var _user$project$Location_ArtStore$initArtGame = F3( function (window, colors, seed) { var _p36 = A2( _elm_lang$core$Random$step, A2( - _user$project$Store_ArtStore$initialBalls, + _user$project$Location_ArtStore$initialBalls, window, { ctor: '::', @@ -15145,9 +15177,9 @@ var _user$project$Store_ArtStore$initArtGame = F3( _1: newSeed }; }); -var _user$project$Store_ArtStore$init = F2( +var _user$project$Location_ArtStore$init = F2( function (window, seed) { - var _p37 = A3(_user$project$Store_ArtStore$initArtGame, window, _user$project$Store_ArtStore$initialColors, seed); + var _p37 = A3(_user$project$Location_ArtStore$initArtGame, window, _user$project$Location_ArtStore$initialColors, seed); var game = _p37._0; var newSeed = _p37._1; return { @@ -15156,14 +15188,14 @@ var _user$project$Store_ArtStore$init = F2( _1: newSeed }; }); -var _user$project$Store_ArtStore$Tick = function (a) { +var _user$project$Location_ArtStore$Tick = function (a) { return {ctor: 'Tick', _0: a}; }; -var _user$project$Store_ArtStore$ExitStore = {ctor: 'ExitStore'}; -var _user$project$Store_ArtStore$PlayAudio = function (a) { +var _user$project$Location_ArtStore$ExitStore = {ctor: 'ExitStore'}; +var _user$project$Location_ArtStore$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; -var _user$project$Store_ArtStore$colorCircle = F3( +var _user$project$Location_ArtStore$colorCircle = F3( function (_p38, color, audio) { var _p39 = _p38; return A2( @@ -15221,15 +15253,15 @@ var _user$project$Store_ArtStore$colorCircle = F3( _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onClick( - _user$project$Store_ArtStore$PlayAudio(audio)), + _user$project$Location_ArtStore$PlayAudio(audio)), _1: {ctor: '[]'} } }, {ctor: '[]'}); }); -var _user$project$Store_ArtStore$NextRound = {ctor: 'NextRound'}; -var _user$project$Store_ArtStore$FinishGame = {ctor: 'FinishGame'}; -var _user$project$Store_ArtStore$backButton = function (_p40) { +var _user$project$Location_ArtStore$NextRound = {ctor: 'NextRound'}; +var _user$project$Location_ArtStore$FinishGame = {ctor: 'FinishGame'}; +var _user$project$Location_ArtStore$backButton = function (_p40) { var _p41 = _p40; return A2( _elm_lang$html$Html$button, @@ -15277,7 +15309,7 @@ var _user$project$Store_ArtStore$backButton = function (_p40) { }), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$FinishGame), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$FinishGame), _1: {ctor: '[]'} } }, @@ -15287,8 +15319,8 @@ var _user$project$Store_ArtStore$backButton = function (_p40) { _1: {ctor: '[]'} }); }; -var _user$project$Store_ArtStore$Play = {ctor: 'Play'}; -var _user$project$Store_ArtStore$playButton = function (_p42) { +var _user$project$Location_ArtStore$Play = {ctor: 'Play'}; +var _user$project$Location_ArtStore$playButton = function (_p42) { var _p43 = _p42; return A2( _elm_lang$html$Html$button, @@ -15336,7 +15368,7 @@ var _user$project$Store_ArtStore$playButton = function (_p42) { }), _1: { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$Play), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$Play), _1: {ctor: '[]'} } }, @@ -15346,11 +15378,11 @@ var _user$project$Store_ArtStore$playButton = function (_p42) { _1: {ctor: '[]'} }); }; -var _user$project$Store_ArtStore$ColorClicked = F3( +var _user$project$Location_ArtStore$ColorClicked = F3( function (a, b, c) { return {ctor: 'ColorClicked', _0: a, _1: b, _2: c}; }); -var _user$project$Store_ArtStore$colorBall = F2( +var _user$project$Location_ArtStore$colorBall = F2( function (gameColor, ball) { return A2( _elm_lang$html$Html$div, @@ -15362,72 +15394,76 @@ var _user$project$Store_ArtStore$colorBall = F2( _0: {ctor: '_Tuple2', _0: 'border-radius', _1: '50%'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'background-image', - _1: A2( - _elm_lang$core$Basics_ops['++'], - 'url(', - A2( - _elm_lang$core$Basics_ops['++'], - _user$project$Store_ArtStore$imageDir, - A2(_elm_lang$core$Basics_ops['++'], ball.img, ')'))) - }, + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-size', _1: 'contain'}, + _0: { + ctor: '_Tuple2', + _0: 'background-image', + _1: A2( + _elm_lang$core$Basics_ops['++'], + 'url(', + A2( + _elm_lang$core$Basics_ops['++'], + _user$project$Location_ArtStore$imageDir, + A2(_elm_lang$core$Basics_ops['++'], ball.img, ')'))) + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-repeat', _1: 'no-repeat'}, + _0: {ctor: '_Tuple2', _0: 'background-size', _1: 'contain'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'background-repeat', _1: 'no-repeat'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString( - _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], _elm_lang$core$Basics$toString( - _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), + _elm_community$linear_algebra$Math_Vector2$getX(ball.pos)), 'px') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'width', + _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(ball.radius * 2), + _elm_lang$core$Basics$toString( + _elm_community$linear_algebra$Math_Vector2$getY(ball.pos)), 'px') }, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'height', + _0: 'width', _1: A2( _elm_lang$core$Basics_ops['++'], _elm_lang$core$Basics$toString(ball.radius * 2), 'px') }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'height', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(ball.radius * 2), + 'px') + }, + _1: {ctor: '[]'} + } } } } @@ -15441,21 +15477,21 @@ var _user$project$Store_ArtStore$colorBall = F2( _1: { ctor: '::', _0: _elm_lang$html$Html_Events$onMouseDown( - A3(_user$project$Store_ArtStore$ColorClicked, ball.id, gameColor, ball.color)), + A3(_user$project$Location_ArtStore$ColorClicked, ball.id, gameColor, ball.color)), _1: {ctor: '[]'} } }, {ctor: '[]'}); }); -var _user$project$Store_ArtStore$colorGame = F2( +var _user$project$Location_ArtStore$colorGame = F2( function (translator, game) { var balls = A2( _elm_lang$core$Basics_ops['++'], + A2(_elm_lang$core$List$map, _user$project$Location_ArtStore$deadBall, game.deadBalls), A2( _elm_lang$core$List$map, - _user$project$Store_ArtStore$colorBall(game.color), - game.balls), - A2(_elm_lang$core$List$map, _user$project$Store_ArtStore$deadBall, game.deadBalls)); + _user$project$Location_ArtStore$colorBall(game.color), + game.balls)); var content = (game.finishRound || game.win) ? { ctor: '::', _0: A2( @@ -15467,7 +15503,7 @@ var _user$project$Store_ArtStore$colorGame = F2( _elm_lang$html$Html$button, { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$NextRound), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$NextRound), _1: {ctor: '[]'} }, { @@ -15481,7 +15517,7 @@ var _user$project$Store_ArtStore$colorGame = F2( _elm_lang$html$Html$button, { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick(_user$project$Store_ArtStore$FinishGame), + _0: _elm_lang$html$Html_Events$onClick(_user$project$Location_ArtStore$FinishGame), _1: {ctor: '[]'} }, { @@ -15518,17 +15554,17 @@ var _user$project$Store_ArtStore$colorGame = F2( }, A2(_elm_lang$core$Basics_ops['++'], content, balls))); }); -var _user$project$Store_ArtStore$view = F2( +var _user$project$Location_ArtStore$view = F2( function (translator, model) { var _p44 = model.playing; if (_p44 === true) { - return A2(_user$project$Store_ArtStore$colorGame, translator, model.game); + return A2(_user$project$Location_ArtStore$colorGame, translator, model.game); } else { var showCircle = F2( function (n, _p45) { var _p46 = _p45; return A3( - _user$project$Store_ArtStore$colorCircle, + _user$project$Location_ArtStore$colorCircle, {ctor: '_Tuple2', _0: 96 * n, _1: 96}, _p46._0, _p46._1); @@ -15538,10 +15574,10 @@ var _user$project$Store_ArtStore$view = F2( {ctor: '[]'}, { ctor: '::', - _0: _user$project$Store_ArtStore$exit(_user$project$Store_ArtStore$ExitStore), + _0: _user$project$Location_ArtStore$exit(_user$project$Location_ArtStore$ExitStore), _1: { ctor: '::', - _0: _user$project$Store_ArtStore$playButton( + _0: _user$project$Location_ArtStore$playButton( {ctor: '_Tuple2', _0: 192, _1: 10}), _1: A2( _elm_lang$core$List$indexedMap, @@ -15591,10 +15627,10 @@ var _user$project$Store_ArtStore$view = F2( }); } }); -var _user$project$Store_ArtStore$NoOp = {ctor: 'NoOp'}; -var _user$project$Store_ArtStore$tick = F4( +var _user$project$Location_ArtStore$NoOp = {ctor: 'NoOp'}; +var _user$project$Location_ArtStore$tick = F4( function (timeDelta, window, translator, model) { - var _p47 = A4(_user$project$Store_ArtStore$animateArtGame, timeDelta, window, translator, model.game); + var _p47 = A4(_user$project$Location_ArtStore$animateArtGame, timeDelta, window, translator, model.game); var newArtGame = _p47._0; var cmd = _p47._1; return { @@ -15602,22 +15638,22 @@ var _user$project$Store_ArtStore$tick = F4( _0: _elm_lang$core$Native_Utils.update( model, {game: newArtGame}), - _1: _user$project$Store_ArtStore$NoOp, + _1: _user$project$Location_ArtStore$NoOp, _2: cmd }; }); -var _user$project$Store_ArtStore$Exit = {ctor: 'Exit'}; -var _user$project$Store_ArtStore$AddPoints = function (a) { +var _user$project$Location_ArtStore$Exit = {ctor: 'Exit'}; +var _user$project$Location_ArtStore$AddPoints = function (a) { return {ctor: 'AddPoints', _0: a}; }; -var _user$project$Store_ArtStore$colorClicked = F2( +var _user$project$Location_ArtStore$colorClicked = F2( function (_p48, model) { var _p49 = _p48; if (!_elm_lang$core$Native_Utils.eq(_p49._1, _p49._2)) { - return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } else { var artGame = model.game; - var _p50 = A3(_user$project$Store_ArtStore$removeBall, _p49._0, artGame.balls, artGame.deadBalls); + var _p50 = A3(_user$project$Location_ArtStore$removeBall, _p49._0, artGame.balls, artGame.deadBalls); var newBalls = _p50._0; var deadBalls = _p50._1; var finishRound = _elm_lang$core$Native_Utils.eq( @@ -15625,7 +15661,7 @@ var _user$project$Store_ArtStore$colorClicked = F2( 0); var win = finishRound && _elm_lang$core$Native_Utils.eq( _elm_lang$core$List$length( - _user$project$Store_ArtStore$unknownColors(artGame.knownUnknownColors)), + _user$project$Location_ArtStore$unknownColors(artGame.knownUnknownColors)), 0); var newArtGame = _elm_lang$core$Native_Utils.update( artGame, @@ -15635,12 +15671,12 @@ var _user$project$Store_ArtStore$colorClicked = F2( _0: _elm_lang$core$Native_Utils.update( model, {game: newArtGame}), - _1: _user$project$Store_ArtStore$AddPoints(10), + _1: _user$project$Location_ArtStore$AddPoints(10), _2: _user$project$Audio$play('audio/puff.mp3') }; } }); -var _user$project$Store_ArtStore$update = F4( +var _user$project$Location_ArtStore$update = F4( function (window, translator, msg, model) { update: while (true) { @@ -15648,13 +15684,13 @@ var _user$project$Store_ArtStore$update = F4( switch (_p51.ctor) { case 'ColorClicked': return A2( - _user$project$Store_ArtStore$colorClicked, + _user$project$Location_ArtStore$colorClicked, {ctor: '_Tuple3', _0: _p51._0, _1: _p51._1, _2: _p51._2}, model); case 'Play': var _v24 = window, _v25 = translator, - _v26 = _user$project$Store_ArtStore$PlayAudio( + _v26 = _user$project$Location_ArtStore$PlayAudio( translator.audio( _elm_lang$core$Basics$toString(model.game.color))), _v27 = _elm_lang$core$Native_Utils.update( @@ -15667,15 +15703,15 @@ var _user$project$Store_ArtStore$update = F4( continue update; case 'NextRound': var _p52 = A3( - _user$project$Store_ArtStore$initArtGame, + _user$project$Location_ArtStore$initArtGame, window, - _user$project$Store_ArtStore$nextColor(model.game.knownUnknownColors), + _user$project$Location_ArtStore$nextColor(model.game.knownUnknownColors), model.seed); var nextArtGame = _p52._0; var newSeed = _p52._1; var _v28 = window, _v29 = translator, - _v30 = _user$project$Store_ArtStore$Play, + _v30 = _user$project$Location_ArtStore$Play, _v31 = _elm_lang$core$Native_Utils.update( model, {game: nextArtGame, seed: newSeed}); @@ -15690,24 +15726,151 @@ var _user$project$Store_ArtStore$update = F4( _0: _elm_lang$core$Native_Utils.update( model, {playing: false}), - _1: _user$project$Store_ArtStore$NoOp, + _1: _user$project$Location_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none }; case 'PlayAudio': return { ctor: '_Tuple3', _0: model, - _1: _user$project$Store_ArtStore$NoOp, + _1: _user$project$Location_ArtStore$NoOp, _2: _user$project$Audio$play(_p51._0) }; case 'ExitStore': - return {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_ArtStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; default: - return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Store_ArtStore$tick, _p51._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Store_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; + return (model.playing && (!(model.game.win || model.game.finishRound))) ? A4(_user$project$Location_ArtStore$tick, _p51._0, window, translator, model) : {ctor: '_Tuple3', _0: model, _1: _user$project$Location_ArtStore$NoOp, _2: _elm_lang$core$Platform_Cmd$none}; } } }); +var _user$project$Location_Home$tile = function (_p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Location_Home$exit = function (exitMsg) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(exitMsg), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_Home$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } + } + }); +}; +var _user$project$Location_Home$init = {}; +var _user$project$Location_Home$Model = {}; +var _user$project$Location_Home$ExitHome = {ctor: 'ExitHome'}; +var _user$project$Location_Home$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Location_Home$view = F2( + function (mapSize, translator) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Location_Home$exit(_user$project$Location_Home$ExitHome), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Location_Home$PlayAudio), + _user$project$Bee$mama(translator)), + _1: { + ctor: '::', + _0: A2( + _user$project$Bee$view, + _elm_lang$core$Maybe$Just(_user$project$Location_Home$PlayAudio), + _user$project$Bee$papa(translator)), + _1: {ctor: '[]'} + } + } + }); + }); +var _user$project$Location_Home$NoOp = {ctor: 'NoOp'}; +var _user$project$Location_Home$Exit = {ctor: 'Exit'}; +var _user$project$Location_Home$update = F4( + function (window, translator, msg, model) { + var _p2 = msg; + if (_p2.ctor === 'PlayAudio') { + return { + ctor: '_Tuple3', + _0: model, + _1: _user$project$Location_Home$NoOp, + _2: _user$project$Audio$play(_p2._0) + }; + } else { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_Home$Exit, _2: _elm_lang$core$Platform_Cmd$none}; + } + }); +var _user$project$Location_Home$AddPoints = function (a) { + return {ctor: 'AddPoints', _0: a}; +}; + var _user$project$Map$tile = function (_p0) { var _p1 = _p0; return A2( @@ -15838,20 +16001,25 @@ var _user$project$Map$ArtStore = function (a) { }; var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; -var _user$project$Map$Home = {ctor: 'Home'}; +var _user$project$Map$Home = function (a) { + return {ctor: 'Home', _0: a}; +}; var _user$project$Map$newLevel = F3( function (window, route, map) { var _p2 = function () { var _p3 = route; switch (_p3.ctor) { case 'HomeRoute': - return A2(_user$project$Map_ops['=>'], _user$project$Map$Home, map.seed); + return A2( + _user$project$Map_ops['=>'], + _user$project$Map$Home(_user$project$Location_Home$init), + map.seed); case 'HomeTownRoute': return A2(_user$project$Map_ops['=>'], _user$project$Map$HomeTown, map.seed); case 'GroceryStoreRoute': return A2(_user$project$Map_ops['=>'], _user$project$Map$GroceryStore, map.seed); default: - var _p4 = A2(_user$project$Store_ArtStore$init, window, map.seed); + var _p4 = A2(_user$project$Location_ArtStore$init, window, map.seed); var store = _p4._0; var newSeed = _p4._1; return A2( @@ -15875,8 +16043,8 @@ var _user$project$Map$Green = {ctor: 'Green'}; var _user$project$Map$Yellow = {ctor: 'Yellow'}; var _user$project$Map$Orange = {ctor: 'Orange'}; var _user$project$Map$Red = {ctor: 'Red'}; -var _user$project$Map$Tick = function (a) { - return {ctor: 'Tick', _0: a}; +var _user$project$Map$HomeMsg = function (a) { + return {ctor: 'HomeMsg', _0: a}; }; var _user$project$Map$ArtStoreMsg = function (a) { return {ctor: 'ArtStoreMsg', _0: a}; @@ -15886,10 +16054,10 @@ var _user$project$Map$tick = F4( var _p5 = map.level; if (_p5.ctor === 'ArtStore') { var _p6 = A4( - _user$project$Store_ArtStore$update, + _user$project$Location_ArtStore$update, window, translator, - _user$project$Store_ArtStore$Tick(timeDelta), + _user$project$Location_ArtStore$Tick(timeDelta), _p5._0); var newArtStore = _p6._0; var msgFromPage = _p6._1; @@ -15910,56 +16078,96 @@ var _user$project$Map$tick = F4( var _user$project$Map$update = F4( function (translator, window, msg, map) { var _p7 = {ctor: '_Tuple2', _0: msg, _1: map.level}; - switch (_p7._0.ctor) { - case 'NewLevel': - return A3(_user$project$Map$newLevel, window, _p7._0._0, map); - case 'PlayAudio': - return A2( - _user$project$Map_ops['=>'], - map, - _user$project$Audio$play(_p7._0._0)); - case 'Tick': - return A4(_user$project$Map$tick, _p7._0._0, window, translator, map); - default: - if (_p7._1.ctor === 'ArtStore') { - var _p8 = A4(_user$project$Store_ArtStore$update, window, translator, _p7._0._0, _p7._1._0); - var newArtStore = _p8._0; - var msgFromPage = _p8._1; - var cmd = _p8._2; - var points = function () { - var _p9 = msgFromPage; - if (_p9.ctor === 'AddPoints') { - return map.points + _p9._0; - } else { - return map.points; - } - }(); - var level = function () { - var _p10 = msgFromPage; - if (_p10.ctor === 'Exit') { - return _user$project$Map$HomeTown; - } else { - return _user$project$Map$ArtStore(newArtStore); - } - }(); - return { - ctor: '_Tuple2', - _0: _elm_lang$core$Native_Utils.update( - map, - {level: level, points: points}), - _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) - }; - } else { - return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; - } - } + _v3_5: + do { + switch (_p7._0.ctor) { + case 'NewLevel': + return A3(_user$project$Map$newLevel, window, _p7._0._0, map); + case 'PlayAudio': + return A2( + _user$project$Map_ops['=>'], + map, + _user$project$Audio$play(_p7._0._0)); + case 'Tick': + return A4(_user$project$Map$tick, _p7._0._0, window, translator, map); + case 'HomeMsg': + if (_p7._1.ctor === 'Home') { + var _p11 = _p7._1._0; + var _p8 = A4(_user$project$Location_Home$update, window, translator, _p7._0._0, _p11); + var newHome = _p8._0; + var msgFromPage = _p8._1; + var cmd = _p8._2; + var points = function () { + var _p9 = msgFromPage; + if (_p9.ctor === 'AddPoints') { + return map.points + _p9._0; + } else { + return map.points; + } + }(); + var level = function () { + var _p10 = msgFromPage; + if (_p10.ctor === 'Exit') { + return _user$project$Map$HomeTown; + } else { + return _user$project$Map$Home(_p11); + } + }(); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: level, points: points}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$HomeMsg, cmd) + }; + } else { + break _v3_5; + } + default: + if (_p7._1.ctor === 'ArtStore') { + var _p12 = A4(_user$project$Location_ArtStore$update, window, translator, _p7._0._0, _p7._1._0); + var newArtStore = _p12._0; + var msgFromPage = _p12._1; + var cmd = _p12._2; + var points = function () { + var _p13 = msgFromPage; + if (_p13.ctor === 'AddPoints') { + return map.points + _p13._0; + } else { + return map.points; + } + }(); + var level = function () { + var _p14 = msgFromPage; + if (_p14.ctor === 'Exit') { + return _user$project$Map$HomeTown; + } else { + return _user$project$Map$ArtStore(newArtStore); + } + }(); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: level, points: points}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) + }; + } else { + break _v3_5; + } + } + } while(false); + return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; }); +var _user$project$Map$Tick = function (a) { + return {ctor: 'Tick', _0: a}; +}; var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; var _user$project$Map$groceryItem = F3( - function (_p11, image, audio) { - var _p12 = _p11; + function (_p15, image, audio) { + var _p16 = _p15; return A2( _elm_lang$html$Html$img, { @@ -15984,7 +16192,7 @@ var _user$project$Map$groceryItem = F3( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p12._0), + _elm_lang$core$Basics$toString(_p16._0), 'px') }, _1: { @@ -15994,7 +16202,7 @@ var _user$project$Map$groceryItem = F3( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p12._1), + _elm_lang$core$Basics$toString(_p16._1), 'px') }, _1: {ctor: '[]'} @@ -16017,8 +16225,8 @@ var _user$project$Map$NewLevel = function (a) { return {ctor: 'NewLevel', _0: a}; }; var _user$project$Map$playButton = F2( - function (_p13, level) { - var _p14 = _p13; + function (_p17, level) { + var _p18 = _p17; return A2( _elm_lang$html$Html$button, { @@ -16037,7 +16245,7 @@ var _user$project$Map$playButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p14._0), + _elm_lang$core$Basics$toString(_p18._0), 'px') }, _1: { @@ -16047,7 +16255,7 @@ var _user$project$Map$playButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p14._1), + _elm_lang$core$Basics$toString(_p18._1), 'px') }, _1: { @@ -16077,8 +16285,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p15, level) { - var _p16 = _p15; + function (_p19, level) { + var _p20 = _p19; return A2( _elm_lang$html$Html$button, { @@ -16097,7 +16305,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p16._0), + _elm_lang$core$Basics$toString(_p20._0), 'px') }, _1: { @@ -16107,7 +16315,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p16._1), + _elm_lang$core$Basics$toString(_p20._1), 'px') }, _1: { @@ -16168,10 +16376,10 @@ var _user$project$Map$exit = function (level) { }); }; var _user$project$Map$ArtStoreRoute = {ctor: 'ArtStoreRoute'}; -var _user$project$Map$artStoreBuilding = function (_p17) { - var _p18 = _p17; - var _p20 = _p18._1; - var _p19 = _p18._0; +var _user$project$Map$artStoreBuilding = function (_p21) { + var _p22 = _p21; + var _p24 = _p22._1; + var _p23 = _p22._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -16205,7 +16413,7 @@ var _user$project$Map$artStoreBuilding = function (_p17) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p19), + _elm_lang$core$Basics$toString(_p23), 'px') }, _1: { @@ -16215,7 +16423,7 @@ var _user$project$Map$artStoreBuilding = function (_p17) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p20), + _elm_lang$core$Basics$toString(_p24), 'px') }, _1: {ctor: '[]'} @@ -16261,7 +16469,7 @@ var _user$project$Map$artStoreBuilding = function (_p17) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p19 + 7), + _elm_lang$core$Basics$toString(_p23 + 7), 'px') }, _1: { @@ -16271,7 +16479,7 @@ var _user$project$Map$artStoreBuilding = function (_p17) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p20 + 10), + _elm_lang$core$Basics$toString(_p24 + 10), 'px') }, _1: {ctor: '[]'} @@ -16295,10 +16503,10 @@ var _user$project$Map$artStoreBuilding = function (_p17) { }); }; var _user$project$Map$GroceryStoreRoute = {ctor: 'GroceryStoreRoute'}; -var _user$project$Map$storeBuilding = function (_p21) { - var _p22 = _p21; - var _p24 = _p22._1; - var _p23 = _p22._0; +var _user$project$Map$storeBuilding = function (_p25) { + var _p26 = _p25; + var _p28 = _p26._1; + var _p27 = _p26._0; return A2( _elm_lang$html$Html$div, {ctor: '[]'}, @@ -16332,7 +16540,7 @@ var _user$project$Map$storeBuilding = function (_p21) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p23), + _elm_lang$core$Basics$toString(_p27), 'px') }, _1: { @@ -16342,7 +16550,7 @@ var _user$project$Map$storeBuilding = function (_p21) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p24), + _elm_lang$core$Basics$toString(_p28), 'px') }, _1: {ctor: '[]'} @@ -16388,7 +16596,7 @@ var _user$project$Map$storeBuilding = function (_p21) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p23 + 7), + _elm_lang$core$Basics$toString(_p27 + 7), 'px') }, _1: { @@ -16398,7 +16606,7 @@ var _user$project$Map$storeBuilding = function (_p21) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p24 + 10), + _elm_lang$core$Basics$toString(_p28 + 10), 'px') }, _1: {ctor: '[]'} @@ -16422,30 +16630,6 @@ var _user$project$Map$storeBuilding = function (_p21) { }); }; var _user$project$Map$HomeTownRoute = {ctor: 'HomeTownRoute'}; -var _user$project$Map$home = function (mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _user$project$Map$exit(_user$project$Map$HomeTownRoute), - _1: { - ctor: '::', - _0: A2( - _user$project$Bee$view, - _elm_lang$core$Maybe$Just(_user$project$Map$PlayAudio), - _user$project$Bee$mama), - _1: { - ctor: '::', - _0: A2( - _user$project$Bee$view, - _elm_lang$core$Maybe$Just(_user$project$Map$PlayAudio), - _user$project$Bee$papa), - _1: {ctor: '[]'} - } - } - }); -}; var _user$project$Map$groceryStore = function (mapSize) { return A2( _elm_lang$html$Html$div, @@ -16480,8 +16664,8 @@ var _user$project$Map$groceryStore = function (mapSize) { }); }; var _user$project$Map$HomeRoute = {ctor: 'HomeRoute'}; -var _user$project$Map$house = function (_p25) { - var _p26 = _p25; +var _user$project$Map$house = function (_p29) { + var _p30 = _p29; return A2( _elm_lang$html$Html$img, { @@ -16510,7 +16694,7 @@ var _user$project$Map$house = function (_p25) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p26._0), + _elm_lang$core$Basics$toString(_p30._0), 'px') }, _1: { @@ -16520,7 +16704,7 @@ var _user$project$Map$house = function (_p25) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p26._1), + _elm_lang$core$Basics$toString(_p30._1), 'px') }, _1: {ctor: '[]'} @@ -16553,10 +16737,13 @@ var _user$project$Map$hometown = function (mapSize) { }; var _user$project$Map$view = F3( function (mapSize, translator, map) { - var _p27 = map.level; - switch (_p27.ctor) { + var _p31 = map.level; + switch (_p31.ctor) { case 'Home': - return _user$project$Map$home(mapSize); + return A2( + _elm_lang$html$Html$map, + _user$project$Map$HomeMsg, + A2(_user$project$Location_Home$view, mapSize, translator)); case 'HomeTown': return _user$project$Map$hometown(mapSize); case 'GroceryStore': @@ -16565,7 +16752,7 @@ var _user$project$Map$view = F3( return A2( _elm_lang$html$Html$map, _user$project$Map$ArtStoreMsg, - A2(_user$project$Store_ArtStore$view, translator, _p27._0)); + A2(_user$project$Location_ArtStore$view, translator, _p31._0)); } }); @@ -16608,7 +16795,8 @@ var _user$project$Main$init = { time: 0, window: {width: 100, height: 100}, pause: false, - map: _user$project$Map$init(_user$project$Map$Home) + map: _user$project$Map$init( + _user$project$Map$Home(_user$project$Location_Home$init)) }; var _user$project$Main$Down = function (a) { return {ctor: 'Down', _0: a}; diff --git a/store/ArtStore.elm b/location/ArtStore.elm similarity index 98% rename from store/ArtStore.elm rename to location/ArtStore.elm index 1ed4325..f508f69 100644 --- a/store/ArtStore.elm +++ b/location/ArtStore.elm @@ -1,4 +1,4 @@ -module Store.ArtStore exposing (..) +module Location.ArtStore exposing (..) import Audio import Dictionary.Translator exposing (Translator) @@ -343,7 +343,7 @@ randomMovingBallWithColor window color id = ballsPerRound = - 1 + 10 {-| TODO: ensure there is at least one of each color @@ -391,7 +391,7 @@ removeBall id balls deadBalls = List.partition (\ball -> ball.id == id) balls of ( [ ball ], balls ) -> - ( balls, ball :: deadBalls ) + ( balls, deadBalls ++ [ ball ] ) _ -> ( balls, deadBalls ) @@ -749,8 +749,8 @@ colorGame translator game = [ div [] [] ] balls = - List.map (colorBall game.color) game.balls - ++ List.map deadBall game.deadBalls + List.map deadBall game.deadBalls + ++ List.map (colorBall game.color) game.balls in div [] ([ text ("Color: " ++ translator.translate (toString game.color)) @@ -765,8 +765,7 @@ colorBall gameColor ball = div [ style [ ( "border-radius", "50%" ) - - -- , ( "background-color", toString ball.color ) + , ( "background-color", "white" ) , ( "background-image", "url(" ++ imageDir ++ ball.img ++ ")" ) , ( "background-size", "contain" ) , ( "background-repeat", "no-repeat" ) diff --git a/location/Home.elm b/location/Home.elm new file mode 100644 index 0000000..34f2a68 --- /dev/null +++ b/location/Home.elm @@ -0,0 +1,83 @@ +module Location.Home exposing (..) + +import Audio +import Bee exposing (Bee) +import Dictionary.Translator exposing (Translator) +import Html exposing (Html, button, div, h1, img, text) +import Html.Attributes exposing (class, src, style) +import Html.Events exposing (onClick, onMouseDown) +import Window + + +-- MODEL + + +type alias Model = + {} + + +init : Model +init = + {} + + + +-- UPDATE + + +type Msg + = PlayAudio String + | ExitHome + + +type MsgFromPage + = AddPoints Int + | Exit + | NoOp + + +update : Window.Size -> Translator -> Msg -> Model -> ( Model, MsgFromPage, Cmd Msg ) +update window translator msg model = + case msg of + PlayAudio file -> + ( model, NoOp, Audio.play file ) + + ExitHome -> + ( model, Exit, Cmd.none ) + + + +-- VIEW + + +view : Window.Size -> Translator -> Html Msg +view mapSize translator = + div [] + [ exit ExitHome + , Bee.view (Just PlayAudio) (Bee.mama translator) + , Bee.view (Just PlayAudio) (Bee.papa translator) + ] + + +exit : Msg -> Html Msg +exit exitMsg = + div [ onClick exitMsg ] + [ tile ( 0, 0 ) + , tile ( 0, 32 ) + , tile ( 32, 0 ) + , tile ( 32, 32 ) + ] + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", toString (x - 32) ++ "px" ) + , ( "top", toString (y - 32) ++ "px" ) + ] + ] + [] From 20cb80db7b4da52ede014fabc14228a4c8b3ce21 Mon Sep 17 00:00:00 2001 From: trotha01 Date: Mon, 29 May 2017 09:40:55 -0700 Subject: [PATCH 33/33] modulate grocery store --- Map.elm | 127 +++--- dictionary/French.elm | 14 +- dictionary/Spanish.elm | 14 +- elm.js | 875 ++++++++++++++++++++++++-------------- location/ArtStore.elm | 2 +- location/GroceryStore.elm | 101 +++++ 6 files changed, 744 insertions(+), 389 deletions(-) create mode 100644 location/GroceryStore.elm diff --git a/Map.elm b/Map.elm index 1613628..6e72d8b 100644 --- a/Map.elm +++ b/Map.elm @@ -9,6 +9,7 @@ import Html exposing (Html, button, div, h1, img, text) import Html.Attributes exposing (class, src, style) import Html.Events exposing (onClick, onMouseDown) import Location.ArtStore as ArtStore +import Location.GroceryStore as GroceryStore import Location.Home as Home import Math.Vector2 as Vec2 exposing (Vec2, getX, getY, vec2) import Random @@ -37,9 +38,9 @@ init level = type Level - = Home Home.Model - | HomeTown - | GroceryStore + = HomeTown + | Home Home.Model + | GroceryStore GroceryStore.Model | ArtStore ArtStore.Model @@ -64,8 +65,10 @@ type Msg = NewLevel Route | PlayAudio String | Tick Time - | ArtStoreMsg ArtStore.Msg + | NoOp | HomeMsg Home.Msg + | ArtStoreMsg ArtStore.Msg + | GroceryStoreMsg GroceryStore.Msg type Route @@ -147,6 +150,34 @@ update translator window msg map = , Cmd.map ArtStoreMsg cmd ) + ( GroceryStoreMsg msg, GroceryStore artStore ) -> + let + ( newGroceryStore, msgFromPage, cmd ) = + GroceryStore.update window translator msg artStore + + points = + case msgFromPage of + GroceryStore.AddPoints newPoints -> + map.points + newPoints + + _ -> + map.points + + level = + case msgFromPage of + GroceryStore.Exit -> + HomeTown + + _ -> + GroceryStore newGroceryStore + in + ( { map + | level = level + , points = points + } + , Cmd.map GroceryStoreMsg cmd + ) + ( _, _ ) -> -- Disregard messages from the wrong page ( map, Cmd.none ) @@ -164,7 +195,7 @@ newLevel window route map = HomeTown => map.seed GroceryStoreRoute -> - GroceryStore => map.seed + GroceryStore GroceryStore.init => map.seed ArtStoreRoute -> let @@ -197,16 +228,18 @@ tick timeDelta window translator map = view : Window.Size -> Translator -> Map -> Html Msg view mapSize translator map = case map.level of + HomeTown -> + hometown mapSize translator + Home homeModel -> Home.view mapSize translator |> Html.map HomeMsg - HomeTown -> - hometown mapSize - - GroceryStore -> - groceryStore mapSize + GroceryStore store -> + GroceryStore.view mapSize translator store + |> Html.map GroceryStoreMsg + -- groceryStore mapSize ArtStore store -> ArtStore.view translator store |> Html.map ArtStoreMsg @@ -239,13 +272,12 @@ px x = -- TOWN -hometown : Window.Size -> Html Msg -hometown mapSize = +hometown : Window.Size -> Translator -> Html Msg +hometown mapSize translator = div [] [ house ( 0, 0 ) - - -- , storeBuilding ( 160, 0 ) - , artStoreBuilding ( 320, 0 ) + , groceryStoreBuilding ( 160, 0 ) translator True + , artStoreBuilding ( 320, 0 ) translator ] @@ -265,19 +297,28 @@ house ( x, y ) = [] -storeBuilding : ( Int, Int ) -> Html Msg -storeBuilding ( x, y ) = +groceryStoreBuilding : ( Int, Int ) -> Translator -> Bool -> Html Msg +groceryStoreBuilding ( x, y ) translator locked = + let + ( click, extraAttrs ) = + if locked then + ( onClick NoOp, [ ( "filter", "grayscale(100%)" ) ] ) + else + ( onClick (NewLevel GroceryStoreRoute), [] ) + in div [] [ img [ src "imgs/store.png" - , onClick (NewLevel GroceryStoreRoute) + , click , style - [ ( "position", "absolute" ) - , ( "height", "128px" ) - , ( "width", "128px" ) - , ( "left", toString x ++ "px" ) - , ( "top", toString y ++ "px" ) - ] + ([ ( "position", "absolute" ) + , ( "height", "128px" ) + , ( "width", "128px" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + ] + ++ extraAttrs + ) ] [] , div @@ -292,12 +333,12 @@ storeBuilding ( x, y ) = , ( "top", toString (y + 10) ++ "px" ) ] ] - [ text "Los Comestibles" ] + [ text <| translator.translate "grocery store" ] ] -artStoreBuilding : ( Int, Int ) -> Html Msg -artStoreBuilding ( x, y ) = +artStoreBuilding : ( Int, Int ) -> Translator -> Html Msg +artStoreBuilding ( x, y ) translator = div [] [ img [ src "imgs/store.png" @@ -323,41 +364,11 @@ artStoreBuilding ( x, y ) = , ( "top", toString (y + 10) ++ "px" ) ] ] - [ text "El Arte" ] + [ text <| translator.translate "art store" ] ] --- GROCERY STORE - - -groceryStore : Window.Size -> Html Msg -groceryStore mapSize = - div [] - [ exit HomeTownRoute - , playButton ( 192, 10 ) GroceryStoreRoute - , groceryItem ( 64, 96 ) "imgs/banana.png" "audio/el_platano.mp3" - , groceryItem ( 192, 96 ) "imgs/milk.png" "audio/leche.mp3" - ] - - -groceryItem : ( Int, Int ) -> String -> String -> Html Msg -groceryItem ( x, y ) image audio = - img - [ src image - , style - [ ( "width", "64px" ) - , ( "height", "64px" ) - , ( "position", "absolute" ) - , ( "left", toString x ++ "px" ) - , ( "top", toString y ++ "px" ) - ] - , onClick (PlayAudio audio) - ] - [] - - - -- COMMON diff --git a/dictionary/French.elm b/dictionary/French.elm index 5a798f7..8540e6f 100644 --- a/dictionary/French.elm +++ b/dictionary/French.elm @@ -14,9 +14,9 @@ type alias Audio = dictionary : Dict String Word dictionary = - Dict.union - family - colors + List.foldl Dict.union + Dict.empty + [ family, colors, places ] family : Dict String Word @@ -41,6 +41,14 @@ colors = ] +places : Dict String Word +places = + Dict.fromList + [ ( "art store", "magasin d'art" ) + , ( "grocery store", "épicerie" ) + ] + + wordToString : Word -> String wordToString str = str diff --git a/dictionary/Spanish.elm b/dictionary/Spanish.elm index bb9fb88..2164e2c 100644 --- a/dictionary/Spanish.elm +++ b/dictionary/Spanish.elm @@ -14,9 +14,9 @@ type alias Audio = dictionary : Dict String Word dictionary = - Dict.union - family - colors + List.foldl Dict.union + Dict.empty + [ family, colors, places ] family : Dict String Word @@ -41,6 +41,14 @@ colors = ] +places : Dict String Word +places = + Dict.fromList + [ ( "art store", "tienda de arte" ) + , ( "grocery store", "el mercado" ) + ] + + wordToString : Word -> String wordToString str = str diff --git a/elm.js b/elm.js index b13f2a8..3d11884 100644 --- a/elm.js +++ b/elm.js @@ -13991,6 +13991,16 @@ var _user$project$Dictionary_French$wordAudio = function (str) { var _user$project$Dictionary_French$wordToString = function (str) { return str; }; +var _user$project$Dictionary_French$places = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'art store', _1: 'magasin d\'art'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'grocery store', _1: 'épicerie'}, + _1: {ctor: '[]'} + } + }); var _user$project$Dictionary_French$colors = _elm_lang$core$Dict$fromList( { ctor: '::', @@ -14035,7 +14045,23 @@ var _user$project$Dictionary_French$family = _elm_lang$core$Dict$fromList( _1: {ctor: '[]'} } }); -var _user$project$Dictionary_French$dictionary = A2(_elm_lang$core$Dict$union, _user$project$Dictionary_French$family, _user$project$Dictionary_French$colors); +var _user$project$Dictionary_French$dictionary = A3( + _elm_lang$core$List$foldl, + _elm_lang$core$Dict$union, + _elm_lang$core$Dict$empty, + { + ctor: '::', + _0: _user$project$Dictionary_French$family, + _1: { + ctor: '::', + _0: _user$project$Dictionary_French$colors, + _1: { + ctor: '::', + _0: _user$project$Dictionary_French$places, + _1: {ctor: '[]'} + } + } + }); var _user$project$Dictionary_French$findWord = function (original) { return A2( _elm_lang$core$Maybe$withDefault, @@ -14067,6 +14093,16 @@ var _user$project$Dictionary_Spanish$wordAudio = function (str) { var _user$project$Dictionary_Spanish$wordToString = function (str) { return str; }; +var _user$project$Dictionary_Spanish$places = _elm_lang$core$Dict$fromList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'art store', _1: 'tienda de arte'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'grocery store', _1: 'el mercado'}, + _1: {ctor: '[]'} + } + }); var _user$project$Dictionary_Spanish$colors = _elm_lang$core$Dict$fromList( { ctor: '::', @@ -14111,7 +14147,23 @@ var _user$project$Dictionary_Spanish$family = _elm_lang$core$Dict$fromList( _1: {ctor: '[]'} } }); -var _user$project$Dictionary_Spanish$dictionary = A2(_elm_lang$core$Dict$union, _user$project$Dictionary_Spanish$family, _user$project$Dictionary_Spanish$colors); +var _user$project$Dictionary_Spanish$dictionary = A3( + _elm_lang$core$List$foldl, + _elm_lang$core$Dict$union, + _elm_lang$core$Dict$empty, + { + ctor: '::', + _0: _user$project$Dictionary_Spanish$family, + _1: { + ctor: '::', + _0: _user$project$Dictionary_Spanish$colors, + _1: { + ctor: '::', + _0: _user$project$Dictionary_Spanish$places, + _1: {ctor: '[]'} + } + } + }); var _user$project$Dictionary_Spanish$findWord = function (original) { return A2( _elm_lang$core$Maybe$withDefault, @@ -15522,7 +15574,7 @@ var _user$project$Location_ArtStore$colorGame = F2( }, { ctor: '::', - _0: _elm_lang$html$Html$text('Finish Early'), + _0: _elm_lang$html$Html$text('Finish'), _1: {ctor: '[]'} }), _1: {ctor: '[]'} @@ -15744,6 +15796,191 @@ var _user$project$Location_ArtStore$update = F4( } }); +var _user$project$Location_GroceryStore$tile = function (_p0) { + var _p1 = _p0; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src('imgs/map-tileset.png'), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'clip', _1: 'rect(32px 64px 64px 32px)'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._0 - 32), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p1._1 - 32), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + } + }, + {ctor: '[]'}); +}; +var _user$project$Location_GroceryStore$exit = function (exitMsg) { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick(exitMsg), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 0, _1: 32}), + _1: { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 0}), + _1: { + ctor: '::', + _0: _user$project$Location_GroceryStore$tile( + {ctor: '_Tuple2', _0: 32, _1: 32}), + _1: {ctor: '[]'} + } + } + } + }); +}; +var _user$project$Location_GroceryStore$init = {}; +var _user$project$Location_GroceryStore$Model = {}; +var _user$project$Location_GroceryStore$ExitStore = {ctor: 'ExitStore'}; +var _user$project$Location_GroceryStore$PlayAudio = function (a) { + return {ctor: 'PlayAudio', _0: a}; +}; +var _user$project$Location_GroceryStore$groceryItem = F3( + function (_p2, image, audio) { + var _p3 = _p2; + return A2( + _elm_lang$html$Html$img, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$src(image), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p3._0), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p3._1), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Location_GroceryStore$PlayAudio(audio)), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); + }); +var _user$project$Location_GroceryStore$view = F3( + function (mapSize, translator, model) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _user$project$Location_GroceryStore$exit(_user$project$Location_GroceryStore$ExitStore), + _1: { + ctor: '::', + _0: A3( + _user$project$Location_GroceryStore$groceryItem, + {ctor: '_Tuple2', _0: 64, _1: 96}, + 'imgs/banana.png', + 'audio/el_platano.mp3'), + _1: { + ctor: '::', + _0: A3( + _user$project$Location_GroceryStore$groceryItem, + {ctor: '_Tuple2', _0: 192, _1: 96}, + 'imgs/milk.png', + 'audio/leche.mp3'), + _1: {ctor: '[]'} + } + } + }); + }); +var _user$project$Location_GroceryStore$NoOp = {ctor: 'NoOp'}; +var _user$project$Location_GroceryStore$Exit = {ctor: 'Exit'}; +var _user$project$Location_GroceryStore$update = F4( + function (window, translator, msg, model) { + var _p4 = msg; + if (_p4.ctor === 'ExitStore') { + return {ctor: '_Tuple3', _0: model, _1: _user$project$Location_GroceryStore$Exit, _2: _elm_lang$core$Platform_Cmd$none}; + } else { + return { + ctor: '_Tuple3', + _0: model, + _1: _user$project$Location_GroceryStore$NoOp, + _2: _user$project$Audio$play(_p4._0) + }; + } + }); +var _user$project$Location_GroceryStore$AddPoints = function (a) { + return {ctor: 'AddPoints', _0: a}; +}; + var _user$project$Location_Home$tile = function (_p0) { var _p1 = _p0; return A2( @@ -15999,11 +16236,13 @@ var _user$project$Map$Map = F3( var _user$project$Map$ArtStore = function (a) { return {ctor: 'ArtStore', _0: a}; }; -var _user$project$Map$GroceryStore = {ctor: 'GroceryStore'}; -var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; +var _user$project$Map$GroceryStore = function (a) { + return {ctor: 'GroceryStore', _0: a}; +}; var _user$project$Map$Home = function (a) { return {ctor: 'Home', _0: a}; }; +var _user$project$Map$HomeTown = {ctor: 'HomeTown'}; var _user$project$Map$newLevel = F3( function (window, route, map) { var _p2 = function () { @@ -16017,7 +16256,10 @@ var _user$project$Map$newLevel = F3( case 'HomeTownRoute': return A2(_user$project$Map_ops['=>'], _user$project$Map$HomeTown, map.seed); case 'GroceryStoreRoute': - return A2(_user$project$Map_ops['=>'], _user$project$Map$GroceryStore, map.seed); + return A2( + _user$project$Map_ops['=>'], + _user$project$Map$GroceryStore(_user$project$Location_GroceryStore$init), + map.seed); default: var _p4 = A2(_user$project$Location_ArtStore$init, window, map.seed); var store = _p4._0; @@ -16043,8 +16285,8 @@ var _user$project$Map$Green = {ctor: 'Green'}; var _user$project$Map$Yellow = {ctor: 'Yellow'}; var _user$project$Map$Orange = {ctor: 'Orange'}; var _user$project$Map$Red = {ctor: 'Red'}; -var _user$project$Map$HomeMsg = function (a) { - return {ctor: 'HomeMsg', _0: a}; +var _user$project$Map$GroceryStoreMsg = function (a) { + return {ctor: 'GroceryStoreMsg', _0: a}; }; var _user$project$Map$ArtStoreMsg = function (a) { return {ctor: 'ArtStoreMsg', _0: a}; @@ -16075,10 +16317,13 @@ var _user$project$Map$tick = F4( return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; } }); +var _user$project$Map$HomeMsg = function (a) { + return {ctor: 'HomeMsg', _0: a}; +}; var _user$project$Map$update = F4( function (translator, window, msg, map) { var _p7 = {ctor: '_Tuple2', _0: msg, _1: map.level}; - _v3_5: + _v3_6: do { switch (_p7._0.ctor) { case 'NewLevel': @@ -16121,9 +16366,9 @@ var _user$project$Map$update = F4( _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$HomeMsg, cmd) }; } else { - break _v3_5; + break _v3_6; } - default: + case 'ArtStoreMsg': if (_p7._1.ctor === 'ArtStore') { var _p12 = A4(_user$project$Location_ArtStore$update, window, translator, _p7._0._0, _p7._1._0); var newArtStore = _p12._0; @@ -16153,111 +16398,90 @@ var _user$project$Map$update = F4( _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$ArtStoreMsg, cmd) }; } else { - break _v3_5; + break _v3_6; + } + case 'GroceryStoreMsg': + if (_p7._1.ctor === 'GroceryStore') { + var _p15 = A4(_user$project$Location_GroceryStore$update, window, translator, _p7._0._0, _p7._1._0); + var newGroceryStore = _p15._0; + var msgFromPage = _p15._1; + var cmd = _p15._2; + var points = function () { + var _p16 = msgFromPage; + if (_p16.ctor === 'AddPoints') { + return map.points + _p16._0; + } else { + return map.points; + } + }(); + var level = function () { + var _p17 = msgFromPage; + if (_p17.ctor === 'Exit') { + return _user$project$Map$HomeTown; + } else { + return _user$project$Map$GroceryStore(newGroceryStore); + } + }(); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Native_Utils.update( + map, + {level: level, points: points}), + _1: A2(_elm_lang$core$Platform_Cmd$map, _user$project$Map$GroceryStoreMsg, cmd) + }; + } else { + break _v3_6; } + default: + break _v3_6; } } while(false); return {ctor: '_Tuple2', _0: map, _1: _elm_lang$core$Platform_Cmd$none}; }); +var _user$project$Map$NoOp = {ctor: 'NoOp'}; var _user$project$Map$Tick = function (a) { return {ctor: 'Tick', _0: a}; }; var _user$project$Map$PlayAudio = function (a) { return {ctor: 'PlayAudio', _0: a}; }; -var _user$project$Map$groceryItem = F3( - function (_p15, image, audio) { - var _p16 = _p15; +var _user$project$Map$NewLevel = function (a) { + return {ctor: 'NewLevel', _0: a}; +}; +var _user$project$Map$playButton = F2( + function (_p18, level) { + var _p19 = _p18; return A2( - _elm_lang$html$Html$img, + _elm_lang$html$Html$button, { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src(image), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '64px'}, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '64px'}, + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p19._0), + 'px') + }, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p16._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p16._1), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$PlayAudio(audio)), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}); - }); -var _user$project$Map$NewLevel = function (a) { - return {ctor: 'NewLevel', _0: a}; -}; -var _user$project$Map$playButton = F2( - function (_p17, level) { - var _p18 = _p17; - return A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18._0), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p18._1), - 'px') - }, + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p19._1), + 'px') + }, _1: { ctor: '::', _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, @@ -16285,8 +16509,8 @@ var _user$project$Map$playButton = F2( }); }); var _user$project$Map$backButton = F2( - function (_p19, level) { - var _p20 = _p19; + function (_p20, level) { + var _p21 = _p20; return A2( _elm_lang$html$Html$button, { @@ -16305,7 +16529,7 @@ var _user$project$Map$backButton = F2( _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p20._0), + _elm_lang$core$Basics$toString(_p21._0), 'px') }, _1: { @@ -16315,7 +16539,7 @@ var _user$project$Map$backButton = F2( _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p20._1), + _elm_lang$core$Basics$toString(_p21._1), 'px') }, _1: { @@ -16376,92 +16600,183 @@ var _user$project$Map$exit = function (level) { }); }; var _user$project$Map$ArtStoreRoute = {ctor: 'ArtStoreRoute'}; -var _user$project$Map$artStoreBuilding = function (_p21) { - var _p22 = _p21; - var _p24 = _p22._1; - var _p23 = _p22._0; - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$img, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), - _1: { +var _user$project$Map$artStoreBuilding = F2( + function (_p22, translator) { + var _p23 = _p22; + var _p25 = _p23._1; + var _p24 = _p23._0; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$img, + { ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel(_user$project$Map$ArtStoreRoute)), + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$ArtStoreRoute)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p23), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], _elm_lang$core$Basics$toString(_p24), 'px') }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p25), + 'px') + }, + _1: {ctor: '[]'} + } + } + } + } + }), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'left', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p24 + 7), + 'px') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p25 + 10), + 'px') + }, + _1: {ctor: '[]'} + } + } + } } } } } }), _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}), + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + translator.translate('art store')), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); + }); +var _user$project$Map$GroceryStoreRoute = {ctor: 'GroceryStoreRoute'}; +var _user$project$Map$storeBuilding = F3( + function (_p26, translator, locked) { + var _p27 = _p26; + var _p30 = _p27._1; + var _p29 = _p27._0; + var _p28 = locked ? { + ctor: '_Tuple2', + _0: _elm_lang$html$Html_Events$onClick(_user$project$Map$NoOp), _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'filter', _1: 'grayscale(100%)'}, + _1: {ctor: '[]'} + } + } : { + ctor: '_Tuple2', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Map$NewLevel(_user$project$Map$GroceryStoreRoute)), + _1: {ctor: '[]'} + }; + var click = _p28._0; + var extraAttrs = _p28._1; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { ctor: '::', _0: A2( - _elm_lang$html$Html$div, + _elm_lang$html$Html$img, { ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { + _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), + _1: { + ctor: '::', + _0: click, + _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, - _1: { + _0: _elm_lang$html$Html_Attributes$style( + A2( + _elm_lang$core$Basics_ops['++'], + { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, _1: { ctor: '::', _0: { @@ -16469,7 +16784,7 @@ var _user$project$Map$artStoreBuilding = function (_p21) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p23 + 7), + _elm_lang$core$Basics$toString(_p29), 'px') }, _1: { @@ -16479,7 +16794,7 @@ var _user$project$Map$artStoreBuilding = function (_p21) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p24 + 10), + _elm_lang$core$Basics$toString(_p30), 'px') }, _1: {ctor: '[]'} @@ -16487,41 +16802,18 @@ var _user$project$Map$artStoreBuilding = function (_p21) { } } } - } - } - } - }), - _1: {ctor: '[]'} + }, + extraAttrs)), + _1: {ctor: '[]'} + } + } }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('El Arte'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - }); -}; -var _user$project$Map$GroceryStoreRoute = {ctor: 'GroceryStoreRoute'}; -var _user$project$Map$storeBuilding = function (_p25) { - var _p26 = _p25; - var _p28 = _p26._1; - var _p27 = _p26._0; - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$img, - { + {ctor: '[]'}), + _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$src('imgs/store.png'), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Map$NewLevel(_user$project$Map$GroceryStoreRoute)), - _1: { + _0: A2( + _elm_lang$html$Html$div, + { ctor: '::', _0: _elm_lang$html$Html_Attributes$style( { @@ -16529,143 +16821,64 @@ var _user$project$Map$storeBuilding = function (_p25) { _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '128px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '128px'}, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p27), - 'px') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'top', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p28), - 'px') - }, - _1: {ctor: '[]'} - } - } - } - } - }), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$style( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'position', _1: 'absolute'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, + _0: {ctor: '_Tuple2', _0: 'height', _1: '27px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, + _0: {ctor: '_Tuple2', _0: 'width', _1: '112px'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, + _0: {ctor: '_Tuple2', _0: 'text-align', _1: 'center'}, _1: { ctor: '::', - _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, + _0: {ctor: '_Tuple2', _0: 'border', _1: '1px solid black'}, _1: { ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'left', - _1: A2( - _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p27 + 7), - 'px') - }, + _0: {ctor: '_Tuple2', _0: 'background-color', _1: 'white'}, _1: { ctor: '::', _0: { ctor: '_Tuple2', - _0: 'top', + _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p28 + 10), + _elm_lang$core$Basics$toString(_p29 + 7), 'px') }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'top', + _1: A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(_p30 + 10), + 'px') + }, + _1: {ctor: '[]'} + } } } } } } } - } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Los Comestibles'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - }); -}; -var _user$project$Map$HomeTownRoute = {ctor: 'HomeTownRoute'}; -var _user$project$Map$groceryStore = function (mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _user$project$Map$exit(_user$project$Map$HomeTownRoute), - _1: { - ctor: '::', - _0: A2( - _user$project$Map$playButton, - {ctor: '_Tuple2', _0: 192, _1: 10}, - _user$project$Map$GroceryStoreRoute), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$groceryItem, - {ctor: '_Tuple2', _0: 64, _1: 96}, - 'imgs/banana.png', - 'audio/el_platano.mp3'), - _1: { - ctor: '::', - _0: A3( - _user$project$Map$groceryItem, - {ctor: '_Tuple2', _0: 192, _1: 96}, - 'imgs/milk.png', - 'audio/leche.mp3'), - _1: {ctor: '[]'} - } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + translator.translate('grocery store')), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} } - } - }); -}; + }); + }); +var _user$project$Map$HomeTownRoute = {ctor: 'HomeTownRoute'}; var _user$project$Map$HomeRoute = {ctor: 'HomeRoute'}; -var _user$project$Map$house = function (_p29) { - var _p30 = _p29; +var _user$project$Map$house = function (_p31) { + var _p32 = _p31; return A2( _elm_lang$html$Html$img, { @@ -16694,7 +16907,7 @@ var _user$project$Map$house = function (_p29) { _0: 'left', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p30._0), + _elm_lang$core$Basics$toString(_p32._0), 'px') }, _1: { @@ -16704,7 +16917,7 @@ var _user$project$Map$house = function (_p29) { _0: 'top', _1: A2( _elm_lang$core$Basics_ops['++'], - _elm_lang$core$Basics$toString(_p30._1), + _elm_lang$core$Basics$toString(_p32._1), 'px') }, _1: {ctor: '[]'} @@ -16719,40 +16932,54 @@ var _user$project$Map$house = function (_p29) { }, {ctor: '[]'}); }; -var _user$project$Map$hometown = function (mapSize) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _user$project$Map$house( - {ctor: '_Tuple2', _0: 0, _1: 0}), - _1: { +var _user$project$Map$hometown = F2( + function (mapSize, translator) { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { ctor: '::', - _0: _user$project$Map$artStoreBuilding( - {ctor: '_Tuple2', _0: 320, _1: 0}), - _1: {ctor: '[]'} - } - }); -}; + _0: _user$project$Map$house( + {ctor: '_Tuple2', _0: 0, _1: 0}), + _1: { + ctor: '::', + _0: A3( + _user$project$Map$storeBuilding, + {ctor: '_Tuple2', _0: 160, _1: 0}, + translator, + true), + _1: { + ctor: '::', + _0: A2( + _user$project$Map$artStoreBuilding, + {ctor: '_Tuple2', _0: 320, _1: 0}, + translator), + _1: {ctor: '[]'} + } + } + }); + }); var _user$project$Map$view = F3( function (mapSize, translator, map) { - var _p31 = map.level; - switch (_p31.ctor) { + var _p33 = map.level; + switch (_p33.ctor) { + case 'HomeTown': + return A2(_user$project$Map$hometown, mapSize, translator); case 'Home': return A2( _elm_lang$html$Html$map, _user$project$Map$HomeMsg, A2(_user$project$Location_Home$view, mapSize, translator)); - case 'HomeTown': - return _user$project$Map$hometown(mapSize); case 'GroceryStore': - return _user$project$Map$groceryStore(mapSize); + return A2( + _elm_lang$html$Html$map, + _user$project$Map$GroceryStoreMsg, + A3(_user$project$Location_GroceryStore$view, mapSize, translator, _p33._0)); default: return A2( _elm_lang$html$Html$map, _user$project$Map$ArtStoreMsg, - A2(_user$project$Location_ArtStore$view, translator, _p31._0)); + A2(_user$project$Location_ArtStore$view, translator, _p33._0)); } }); diff --git a/location/ArtStore.elm b/location/ArtStore.elm index f508f69..97cdbc7 100644 --- a/location/ArtStore.elm +++ b/location/ArtStore.elm @@ -742,7 +742,7 @@ colorGame translator game = if game.finishRound || game.win then [ div [] [ button [ onClick NextRound ] [ text "Next Round" ] - , button [ onClick FinishGame ] [ text "Finish Early" ] + , button [ onClick FinishGame ] [ text "Finish" ] ] ] else diff --git a/location/GroceryStore.elm b/location/GroceryStore.elm new file mode 100644 index 0000000..357f49c --- /dev/null +++ b/location/GroceryStore.elm @@ -0,0 +1,101 @@ +module Location.GroceryStore exposing (..) + +import Audio +import Bee exposing (Bee) +import Dictionary.Translator exposing (Translator) +import Html exposing (Html, button, div, h1, img, text) +import Html.Attributes exposing (class, src, style) +import Html.Events exposing (onClick, onMouseDown) +import Window + + +-- MODEL + + +type alias Model = + {} + + +init : Model +init = + {} + + + +-- UPDATE + + +type Msg + = PlayAudio String + | ExitStore + + +type MsgFromPage + = AddPoints Int + | Exit + | NoOp + + +update : Window.Size -> Translator -> Msg -> Model -> ( Model, MsgFromPage, Cmd Msg ) +update window translator msg model = + case msg of + ExitStore -> + ( model, Exit, Cmd.none ) + + PlayAudio file -> + ( model, NoOp, Audio.play file ) + + + +-- VIEW + + +view : Window.Size -> Translator -> Model -> Html Msg +view mapSize translator model = + div [] + [ exit ExitStore + + -- , playButton ( 192, 10 ) GroceryStoreRoute + , groceryItem ( 64, 96 ) "imgs/banana.png" "audio/el_platano.mp3" + , groceryItem ( 192, 96 ) "imgs/milk.png" "audio/leche.mp3" + ] + + +groceryItem : ( Int, Int ) -> String -> String -> Html Msg +groceryItem ( x, y ) image audio = + img + [ src image + , style + [ ( "width", "64px" ) + , ( "height", "64px" ) + , ( "position", "absolute" ) + , ( "left", toString x ++ "px" ) + , ( "top", toString y ++ "px" ) + ] + , onClick (PlayAudio audio) + ] + [] + + +exit : Msg -> Html Msg +exit exitMsg = + div [ onClick exitMsg ] + [ tile ( 0, 0 ) + , tile ( 0, 32 ) + , tile ( 32, 0 ) + , tile ( 32, 32 ) + ] + + +tile : ( Int, Int ) -> Html msg +tile ( x, y ) = + img + [ src "imgs/map-tileset.png" + , style + [ ( "position", "absolute" ) + , ( "clip", "rect(32px 64px 64px 32px)" ) + , ( "left", toString (x - 32) ++ "px" ) + , ( "top", toString (y - 32) ++ "px" ) + ] + ] + []

ZnTn7D={c0Zx+cpqKJr! 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 M4gKpS)FD>?0UxX~;Q#;t literal 0 HcmV?d00001 diff --git a/imgs/colors/red-umbrella.png b/imgs/colors/red-umbrella.png new file mode 100644 index 0000000000000000000000000000000000000000..70cd6d825cd950220e2dc9184cdaea9578735867 GIT binary patch literal 76649 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