debug 0.1 → 0.1.1
raw patch · 10 files changed
+12370/−240 lines, 10 filesdep −js-jquerydep −monoidal-containersPVP ok
version bump matches the API change (PVP)
Dependencies removed: js-jquery, monoidal-containers
API changes (from Hackage documentation)
+ Debug.Hoed: debugJSONTrace :: DebugTrace -> ByteString
+ Debug.Hoed: debugPrintTrace :: DebugTrace -> IO ()
+ Debug.Hoed: debugSaveTrace :: FilePath -> DebugTrace -> IO ()
+ Debug.Hoed: debugViewTrace :: DebugTrace -> IO ()
Files
- CHANGES.txt +3/−0
- debug.cabal +3/−4
- html/debug.css +36/−0
- html/debug.html +4/−50
- html/debug.js +12243/−165
- src/Debug/DebugTrace.hs +5/−4
- src/Debug/Hoed.hs +14/−6
- src/Debug/Variables.hs +14/−9
- test/Hoed.hs +0/−1
- test/Variables.hs +48/−1
CHANGES.txt view
@@ -1,5 +1,8 @@ Changelog for Debug +0.1.1, released 2018-03-19+ Switch the HTML to Elm, fixing a few minor bugs+ Expose a few more functions from Debug.Hoed 0.1, released 2018-02-16 Add Hoed based mode #16, display values for intermediate function calls
debug.cabal view
@@ -1,7 +1,7 @@ cabal-version: >= 1.18 build-type: Simple name: debug-version: 0.1+version: 0.1.1 license: BSD3 license-file: LICENSE category: Development, Debugging@@ -15,12 +15,13 @@ Full usage instructions are at "Debug". homepage: https://github.com/ndmitchell/debug bug-reports: https://github.com/ndmitchell/debug/issues-tested-with: GHC==8.2.2, GHC==8.0.2+tested-with: GHC==8.4.1, GHC==8.2.2, GHC==8.0.2 extra-doc-files: CHANGES.txt README.md data-files:+ html/debug.css html/debug.html html/debug.js @@ -49,13 +50,11 @@ deepseq, directory, hashable,- monoidal-containers, template-haskell, open-browser, text, uniplate, unordered-containers,- js-jquery, prettyprinter, prettyprinter-compat-ansi-wl-pprint, vector
+ html/debug.css view
@@ -0,0 +1,36 @@+body {+ font-family: 'Source Sans Pro', 'Trebuchet MS', 'Lucida Grande', 'Bitstream Vera Sans', 'Helvetica Neue', sans-serif;+ color: #293c4b;+ height: 100%;+}+h1 {margin-bottom: 5px;}+ul {font-size: 10pt;}+li {font-family: sans-serif;}+h1 {font-size: 20pt; background-color: #d3d3d3; margin-top: 0; padding: 5px;}+#function-list a {text-decoration: none;}+#function-depends-section ul {list-style-type: none;}+#function-depends-current {list-style-type: disc;}+h2 {margin-top: 0; margin-bottom: 5px; font-size: 12pt;}+.h2like {margin-top: 0; margin-bottom: 5px; font-size: 12pt; font-weight: bold}+td {vertical-align: top;}+abbr {text-decoration: none;}+.render-call{margin: 5px;}+.render-arg{margin: 5px; display: inline-block;}+.call-link{}+.calls-per-page{font-size:10pt;}++.hs-keyglyph {color: red;}+.hs-equals {color: blue;, font-weight: bold}+.hs-keyword {color: blue;}+.hs-comment {color: green;}+.hs-str, .hs-chr {color: teal;}++a:link, a:visited {+ color: unset;+ text-decoration: unset;+ cursor: auto;+}++a:link:active, a:visited:active {+ color: unset;+}
html/debug.html view
@@ -2,60 +2,14 @@ <html> <head> <title>Debug</title>- <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="../trace.js"></script> <script src="debug.js"></script>-<style type="text/css">-body {height: 100%;}-h1, h2, ul {font-family: sans-serif;}-h1 {margin-bottom: 5px;}-ul {font-size: 10pt;}-h1 {font-size: 20pt; background-color: #d3d3d3; margin-top: 0; padding: 5px;}-#function-list a {text-decoration: none;}-h2 {margin-top: 0; margin-bottom: 5px; font-size: 12pt;}-td {vertical-align: top;}-abbr {text-decoration: none;}--.hs-keyglyph {color: red;}-.hs-keyword {color: blue;}-.hs-comment {color: green;}-.hs-str, .hs-chr {color: teal;}+ <link rel="stylesheet" href="debug.css"/> </style> </head> <body>--<table style="height:100%;width:100%;">- <tr>- <td colspan="3">- <h1>Haskell Debugger</h1>- </td>- </tr>- <tr>- <td rowspan="3" width="25%" style="padding-right:40px;">- <h2>Functions</h1>- <select id="function-drop" style="width:100%;"><option>(All)</option></select><br/>- <input id="function-text" style="margin-top:5px;width:100%;" type="text" placeholder="Filter (using regex)" />- <ul id="function-list"></ul>- </td>- <td>- <h2>Source</h2>- <pre id="function-source"></pre>- </td>- </tr>- <tr>- <td>- <h2>Variables</h2>- <ul id="function-variables"></ul>- </td>- </tr>- <tr id="function-depends-section">- <td>- <h2>Calls</h2>- <ul id="function-depends"</ul>- </td>- </tr>-</table>--+ <script>+ var app = Elm.Main.fullscreen(trace);+ </script> </body> </html>
html/debug.js view
@@ -1,165 +1,12243 @@-var hsLexer = /[a-zA-Z][a-zA-Z0-9]+|[\r\n]|./;-var symbols = "->:=()[]";--function escapeHTML(x)-{- return x- .replace(/&/g, "&")- .replace(/</g, "<")- .replace(/>/g, ">")- .replace(/"/g, """)- .replace(/'/g, "'");-}--function showCall(i)-{- var t = trace.calls[i];- var inf = trace.functions[t[""]];- $source = $("#function-source").empty();- var source = inf.source;- while (source != "")- {- var res = hsLexer.exec(source);- if (res == null || res[0].length == 0)- {- $source.append(source);- break;- }- else- {- if (res[0] == "where")- $source.append("<span class='hs-keyword'>where</a>");- else if (symbols.indexOf(res[0]) != -1)- $source.append("<span class='hs-keyglyph'>" + escapeHTML(res[0]) + "</a>");- else if (res[0] in t)- $source.append("<abbr title='" + escapeHTML(trace.variables[t[res[0]]]) + "'>" + escapeHTML(res[0]) + "</abbr>");- else- $source.append(res[0]);- source = source.substr(res[0].length);- }- }-- showCallStack(i);-- $("#function-variables").empty();- var variables = [];- var seenDepends = false;-- for (var s in t)- {- if (s == "" || s == "$parents" || s == "$depends") continue;- else- variables.push(s + " = " + trace.variables[t[s]]);- }- variables = variables.sort();- for (var i = 0; i < variables.length; i++)- $("#function-variables").append($("<li><pre>" + escapeHTML(variables[i]) + "</pre></li>"));-}--function showCallStack(me)-{- var t = trace.calls[me];- var d = t["$depends"];- if(t["$parents"] == null && d == null)- $("#function-depends-section").hide();- else {- var i;- var par = me;- var parents = [];- var depends = [];- var msg;- var these;- $("#function-depends").empty();- // parents- while(true){- these = trace.calls[par]["$parents"];- if(these == null || these.Length == 0) {- break;- }- // assumes one parent only- par = these[0];- msg = renderCall(par);- parents.unshift("<li><a href='javascript:showCall(" + par + ")'>" + escapeHTML(msg) + "</a></li>");-- }- // depends- for(i in d) {- msg = renderCall(d[i]);- depends.push("<li><a href='javascript:showCall(" + d[i] + ")'>" + escapeHTML(msg) + "</a></li>");- }- // assembling the call stack. There must be a better way...- var callstack = $("#function-depends");- var cursor = callstack;- var temp;- for(i in parents) {- temp = $("<ul>");- cursor.append($(parents[i]).append(temp));- cursor = temp;- }- temp = $("<ul>");- cursor = cursor.append($("<li>" + escapeHTML(renderCall(me)) + "</li>").append(temp));- cursor = temp;- for(i in depends)- cursor.append($(depends[i]));- $("#function-depends-section").show();- }- }-function renderCall(i)-{- var t = trace.calls[i];- var inf = trace.functions[t[""]];- var words = [];- words.push(inf.name);- for (var j = 0; j < inf.arguments.length; j++)- {- var v = inf.arguments[j];- if (v in t)- words.push(trace.variables[t[v]]);- else- words.push("_");- }- words.push("=");- words.push(trace.variables[t[inf.result]]);- var msg = words.join(" ");- return msg;-}-function showCalls()-{- var name = $("#function-drop").val();- var regex = new RegExp();- try {- regex = new RegExp($("#function-text").val());- } catch (e) {- // Not a valid regex, just ignore it- }-- var ul = $("#function-list").empty();- for (var i = 0; i < trace.calls.length; i++)- {- var msg = renderCall(i);- if (name != "(All)" && name != trace.functions[trace.calls[i][""]].name) continue;- if (!regex.test(msg)) continue;- ul.append($("<li><a href='javascript:showCall(" + i + ")'>" + escapeHTML(msg) + "</a></li>"));- }-}--function init()-{- var funcNames = [];- for (var i = 0; i < trace.functions.length; i++)- if (funcNames.indexOf(trace.functions[i].name) === -1)- funcNames.push(trace.functions[i].name);- funcNames = funcNames.sort();- var drop = $("#function-drop");- for (var i = 0; i < funcNames.length; i++)- drop.append($("<option>" + escapeHTML(funcNames[i]) + "</option>"));-- $("#function-drop").change(showCalls);- $("#function-text").change(showCalls).on("input", showCalls);-}--$(function(){- init();- showCalls();- showCall(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.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 '<function>';+ }++ 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 '<task>'+ }++ if (v.ctor === '_Array')+ {+ var list = _elm_lang$core$Array$toList(v);+ return 'Array.fromList ' + toString(list);+ }++ if (v.ctor === '<decoder>')+ {+ return '<decoder>';+ }++ if (v.ctor === '_Process')+ {+ return '<process:' + v.id + '>';+ }++ 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 '<websocket>';+ }++ var output = [];+ for (var k in v)+ {+ output.push(k + ' = ' + toString(v[k]));+ }+ if (output.length === 0)+ {+ return '{}';+ }+ return '{ ' + output.join(', ') + ' }';+ }++ return '<internal structure>';+}++function addSlashes(str, isChar)+{+ var s = str.replace(/\\/g, '\\\\')+ .replace(/\n/g, '\\n')+ .replace(/\t/g, '\\t')+ .replace(/\r/g, '\\r')+ .replace(/\v/g, '\\v')+ .replace(/\0/g, '\\0');+ if (isChar)+ {+ return s.replace(/\'/g, '\\\'');+ }+ else+ {+ return s.replace(/\"/g, '\\"');+ }+}+++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_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$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);+ }+ });++//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+};++}();++//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')+ {+ 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)+};++}();++//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+};++}();+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_community$maybe_extra$Maybe_Extra$foldrValues = F2(+ function (item, list) {+ var _p0 = item;+ if (_p0.ctor === 'Nothing') {+ return list;+ } else {+ return {ctor: '::', _0: _p0._0, _1: list};+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$values = A2(+ _elm_lang$core$List$foldr,+ _elm_community$maybe_extra$Maybe_Extra$foldrValues,+ {ctor: '[]'});+var _elm_community$maybe_extra$Maybe_Extra$filter = F2(+ function (f, m) {+ var _p1 = A2(_elm_lang$core$Maybe$map, f, m);+ if ((_p1.ctor === 'Just') && (_p1._0 === true)) {+ return m;+ } else {+ return _elm_lang$core$Maybe$Nothing;+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$traverseArray = function (f) {+ var step = F2(+ function (e, acc) {+ var _p2 = f(e);+ if (_p2.ctor === 'Nothing') {+ return _elm_lang$core$Maybe$Nothing;+ } else {+ return A2(+ _elm_lang$core$Maybe$map,+ _elm_lang$core$Array$push(_p2._0),+ acc);+ }+ });+ return A2(+ _elm_lang$core$Array$foldl,+ step,+ _elm_lang$core$Maybe$Just(_elm_lang$core$Array$empty));+};+var _elm_community$maybe_extra$Maybe_Extra$combineArray = _elm_community$maybe_extra$Maybe_Extra$traverseArray(_elm_lang$core$Basics$identity);+var _elm_community$maybe_extra$Maybe_Extra$traverse = function (f) {+ var step = F2(+ function (e, acc) {+ var _p3 = f(e);+ if (_p3.ctor === 'Nothing') {+ return _elm_lang$core$Maybe$Nothing;+ } else {+ return A2(+ _elm_lang$core$Maybe$map,+ F2(+ function (x, y) {+ return {ctor: '::', _0: x, _1: y};+ })(_p3._0),+ acc);+ }+ });+ return A2(+ _elm_lang$core$List$foldr,+ step,+ _elm_lang$core$Maybe$Just(+ {ctor: '[]'}));+};+var _elm_community$maybe_extra$Maybe_Extra$combine = _elm_community$maybe_extra$Maybe_Extra$traverse(_elm_lang$core$Basics$identity);+var _elm_community$maybe_extra$Maybe_Extra$toArray = function (m) {+ var _p4 = m;+ if (_p4.ctor === 'Nothing') {+ return _elm_lang$core$Array$empty;+ } else {+ return A2(_elm_lang$core$Array$repeat, 1, _p4._0);+ }+};+var _elm_community$maybe_extra$Maybe_Extra$toList = function (m) {+ var _p5 = m;+ if (_p5.ctor === 'Nothing') {+ return {ctor: '[]'};+ } else {+ return {+ ctor: '::',+ _0: _p5._0,+ _1: {ctor: '[]'}+ };+ }+};+var _elm_community$maybe_extra$Maybe_Extra$orElse = F2(+ function (ma, mb) {+ var _p6 = mb;+ if (_p6.ctor === 'Nothing') {+ return ma;+ } else {+ return mb;+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$orElseLazy = F2(+ function (fma, mb) {+ var _p7 = mb;+ if (_p7.ctor === 'Nothing') {+ return fma(+ {ctor: '_Tuple0'});+ } else {+ return mb;+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$orLazy = F2(+ function (ma, fmb) {+ var _p8 = ma;+ if (_p8.ctor === 'Nothing') {+ return fmb(+ {ctor: '_Tuple0'});+ } else {+ return ma;+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$or = F2(+ function (ma, mb) {+ var _p9 = ma;+ if (_p9.ctor === 'Nothing') {+ return mb;+ } else {+ return ma;+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$prev = _elm_lang$core$Maybe$map2(_elm_lang$core$Basics$always);+var _elm_community$maybe_extra$Maybe_Extra$next = _elm_lang$core$Maybe$map2(+ _elm_lang$core$Basics$flip(_elm_lang$core$Basics$always));+var _elm_community$maybe_extra$Maybe_Extra$andMap = _elm_lang$core$Maybe$map2(+ F2(+ function (x, y) {+ return y(x);+ }));+var _elm_community$maybe_extra$Maybe_Extra$unpack = F3(+ function (d, f, m) {+ var _p10 = m;+ if (_p10.ctor === 'Nothing') {+ return d(+ {ctor: '_Tuple0'});+ } else {+ return f(_p10._0);+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$unwrap = F3(+ function (d, f, m) {+ var _p11 = m;+ if (_p11.ctor === 'Nothing') {+ return d;+ } else {+ return f(_p11._0);+ }+ });+var _elm_community$maybe_extra$Maybe_Extra$isJust = function (m) {+ var _p12 = m;+ if (_p12.ctor === 'Nothing') {+ return false;+ } else {+ return true;+ }+};+var _elm_community$maybe_extra$Maybe_Extra$isNothing = function (m) {+ var _p13 = m;+ if (_p13.ctor === 'Nothing') {+ return true;+ } else {+ return false;+ }+};+var _elm_community$maybe_extra$Maybe_Extra$join = function (mx) {+ var _p14 = mx;+ if (_p14.ctor === 'Just') {+ return _p14._0;+ } else {+ return _elm_lang$core$Maybe$Nothing;+ }+};+var _elm_community$maybe_extra$Maybe_Extra_ops = _elm_community$maybe_extra$Maybe_Extra_ops || {};+_elm_community$maybe_extra$Maybe_Extra_ops['?'] = F2(+ function (mx, x) {+ return A2(_elm_lang$core$Maybe$withDefault, x, mx);+ });++var _elm_community$result_extra$Result_Extra$merge = function (r) {+ var _p0 = r;+ if (_p0.ctor === 'Ok') {+ return _p0._0;+ } else {+ return _p0._0;+ }+};+var _elm_community$result_extra$Result_Extra$orElse = F2(+ function (ra, rb) {+ var _p1 = rb;+ if (_p1.ctor === 'Err') {+ return ra;+ } else {+ return rb;+ }+ });+var _elm_community$result_extra$Result_Extra$orElseLazy = F2(+ function (fra, rb) {+ var _p2 = rb;+ if (_p2.ctor === 'Err') {+ return fra(+ {ctor: '_Tuple0'});+ } else {+ return rb;+ }+ });+var _elm_community$result_extra$Result_Extra$orLazy = F2(+ function (ra, frb) {+ var _p3 = ra;+ if (_p3.ctor === 'Err') {+ return frb(+ {ctor: '_Tuple0'});+ } else {+ return ra;+ }+ });+var _elm_community$result_extra$Result_Extra$or = F2(+ function (ra, rb) {+ var _p4 = ra;+ if (_p4.ctor === 'Err') {+ return rb;+ } else {+ return ra;+ }+ });+var _elm_community$result_extra$Result_Extra$andMap = F2(+ function (ra, rb) {+ var _p5 = {ctor: '_Tuple2', _0: ra, _1: rb};+ if (_p5._1.ctor === 'Err') {+ return _elm_lang$core$Result$Err(_p5._1._0);+ } else {+ return A2(_elm_lang$core$Result$map, _p5._1._0, _p5._0);+ }+ });+var _elm_community$result_extra$Result_Extra$singleton = _elm_lang$core$Result$Ok;+var _elm_community$result_extra$Result_Extra$combine = A2(+ _elm_lang$core$List$foldr,+ _elm_lang$core$Result$map2(+ F2(+ function (x, y) {+ return {ctor: '::', _0: x, _1: y};+ })),+ _elm_lang$core$Result$Ok(+ {ctor: '[]'}));+var _elm_community$result_extra$Result_Extra$mapBoth = F3(+ function (errFunc, okFunc, result) {+ var _p6 = result;+ if (_p6.ctor === 'Ok') {+ return _elm_lang$core$Result$Ok(+ okFunc(_p6._0));+ } else {+ return _elm_lang$core$Result$Err(+ errFunc(_p6._0));+ }+ });+var _elm_community$result_extra$Result_Extra$unpack = F3(+ function (errFunc, okFunc, result) {+ var _p7 = result;+ if (_p7.ctor === 'Ok') {+ return okFunc(_p7._0);+ } else {+ return errFunc(_p7._0);+ }+ });+var _elm_community$result_extra$Result_Extra$unwrap = F3(+ function (defaultValue, okFunc, result) {+ var _p8 = result;+ if (_p8.ctor === 'Ok') {+ return okFunc(_p8._0);+ } else {+ return defaultValue;+ }+ });+var _elm_community$result_extra$Result_Extra$extract = F2(+ function (f, x) {+ var _p9 = x;+ if (_p9.ctor === 'Ok') {+ return _p9._0;+ } else {+ return f(_p9._0);+ }+ });+var _elm_community$result_extra$Result_Extra$isErr = function (x) {+ var _p10 = x;+ if (_p10.ctor === 'Ok') {+ return false;+ } else {+ return true;+ }+};+var _elm_community$result_extra$Result_Extra$isOk = function (x) {+ var _p11 = x;+ if (_p11.ctor === 'Ok') {+ return true;+ } else {+ return false;+ }+};++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};++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 <https://github.com/elm-lang/core/issues>',+ _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};++//import Maybe, Native.Array, Native.List, Native.Utils, Result //++var _elm_lang$core$Native_Json = function() {+++// CORE DECODERS++function succeed(msg)+{+ return {+ ctor: '<decoder>',+ tag: 'succeed',+ msg: msg+ };+}++function fail(msg)+{+ return {+ ctor: '<decoder>',+ tag: 'fail',+ msg: msg+ };+}++function decodePrimitive(tag)+{+ return {+ ctor: '<decoder>',+ tag: tag+ };+}++function decodeContainer(tag, decoder)+{+ return {+ ctor: '<decoder>',+ tag: tag,+ decoder: decoder+ };+}++function decodeNull(value)+{+ return {+ ctor: '<decoder>',+ tag: 'null',+ value: value+ };+}++function decodeField(field, decoder)+{+ return {+ ctor: '<decoder>',+ tag: 'field',+ field: field,+ decoder: decoder+ };+}++function decodeIndex(index, decoder)+{+ return {+ ctor: '<decoder>',+ tag: 'index',+ index: index,+ decoder: decoder+ };+}++function decodeKeyValuePairs(decoder)+{+ return {+ ctor: '<decoder>',+ tag: 'key-value',+ decoder: decoder+ };+}++function mapMany(f, decoders)+{+ return {+ ctor: '<decoder>',+ tag: 'map-many',+ func: f,+ decoders: decoders+ };+}++function andThen(callback, decoder)+{+ return {+ ctor: '<decoder>',+ tag: 'andThen',+ decoder: decoder,+ callback: callback+ };+}++function oneOf(decoders)+{+ return {+ ctor: '<decoder>',+ 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'};++//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$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$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$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() {++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 =+ '<div style="padding-left:1em;">'+ + '<h2 style="font-weight:normal;"><b>Oops!</b> Something went wrong when starting your Elm program.</h2>'+ + '<pre style="padding-left:1em;">' + errorMessage + '</pre>'+ + '</div>';+ }++ 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 <https://github.com/elm-lang/virtual-dom/issues>.'+ );++ 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$http$Native_Http = function() {+++// ENCODING AND DECODING++function encodeUri(string)+{+ return encodeURIComponent(string);+}++function decodeUri(string)+{+ try+ {+ return _elm_lang$core$Maybe$Just(decodeURIComponent(string));+ }+ catch(e)+ {+ return _elm_lang$core$Maybe$Nothing;+ }+}+++// SEND REQUEST++function toTask(request, maybeProgress)+{+ return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)+ {+ var xhr = new XMLHttpRequest();++ configureProgress(xhr, maybeProgress);++ xhr.addEventListener('error', function() {+ callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NetworkError' }));+ });+ xhr.addEventListener('timeout', function() {+ callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'Timeout' }));+ });+ xhr.addEventListener('load', function() {+ callback(handleResponse(xhr, request.expect.responseToResult));+ });++ try+ {+ xhr.open(request.method, request.url, true);+ }+ catch (e)+ {+ return callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'BadUrl', _0: request.url }));+ }++ configureRequest(xhr, request);+ send(xhr, request.body);++ return function() { xhr.abort(); };+ });+}++function configureProgress(xhr, maybeProgress)+{+ if (maybeProgress.ctor === 'Nothing')+ {+ return;+ }++ xhr.addEventListener('progress', function(event) {+ if (!event.lengthComputable)+ {+ return;+ }+ _elm_lang$core$Native_Scheduler.rawSpawn(maybeProgress._0({+ bytes: event.loaded,+ bytesExpected: event.total+ }));+ });+}++function configureRequest(xhr, request)+{+ function setHeader(pair)+ {+ xhr.setRequestHeader(pair._0, pair._1);+ }++ A2(_elm_lang$core$List$map, setHeader, request.headers);+ xhr.responseType = request.expect.responseType;+ xhr.withCredentials = request.withCredentials;++ if (request.timeout.ctor === 'Just')+ {+ xhr.timeout = request.timeout._0;+ }+}++function send(xhr, body)+{+ switch (body.ctor)+ {+ case 'EmptyBody':+ xhr.send();+ return;++ case 'StringBody':+ xhr.setRequestHeader('Content-Type', body._0);+ xhr.send(body._1);+ return;++ case 'FormDataBody':+ xhr.send(body._0);+ return;+ }+}+++// RESPONSES++function handleResponse(xhr, responseToResult)+{+ var response = toResponse(xhr);++ if (xhr.status < 200 || 300 <= xhr.status)+ {+ response.body = xhr.responseText;+ return _elm_lang$core$Native_Scheduler.fail({+ ctor: 'BadStatus',+ _0: response+ });+ }++ var result = responseToResult(response);++ if (result.ctor === 'Ok')+ {+ return _elm_lang$core$Native_Scheduler.succeed(result._0);+ }+ else+ {+ response.body = xhr.responseText;+ return _elm_lang$core$Native_Scheduler.fail({+ ctor: 'BadPayload',+ _0: result._0,+ _1: response+ });+ }+}++function toResponse(xhr)+{+ return {+ status: { code: xhr.status, message: xhr.statusText },+ headers: parseHeaders(xhr.getAllResponseHeaders()),+ url: xhr.responseURL,+ body: xhr.response+ };+}++function parseHeaders(rawHeaders)+{+ var headers = _elm_lang$core$Dict$empty;++ if (!rawHeaders)+ {+ return headers;+ }++ var headerPairs = rawHeaders.split('\u000d\u000a');+ for (var i = headerPairs.length; i--; )+ {+ var headerPair = headerPairs[i];+ var index = headerPair.indexOf('\u003a\u0020');+ if (index > 0)+ {+ var key = headerPair.substring(0, index);+ var value = headerPair.substring(index + 2);++ headers = A3(_elm_lang$core$Dict$update, key, function(oldValue) {+ if (oldValue.ctor === 'Just')+ {+ return _elm_lang$core$Maybe$Just(value + ', ' + oldValue._0);+ }+ return _elm_lang$core$Maybe$Just(value);+ }, headers);+ }+ }++ return headers;+}+++// EXPECTORS++function expectStringResponse(responseToResult)+{+ return {+ responseType: 'text',+ responseToResult: responseToResult+ };+}++function mapExpect(func, expect)+{+ return {+ responseType: expect.responseType,+ responseToResult: function(response) {+ var convertedResponse = expect.responseToResult(response);+ return A2(_elm_lang$core$Result$map, func, convertedResponse);+ }+ };+}+++// BODY++function multipart(parts)+{+ var formData = new FormData();++ while (parts.ctor !== '[]')+ {+ var part = parts._0;+ formData.append(part._0, part._1);+ parts = parts._1;+ }++ return { ctor: 'FormDataBody', _0: formData };+}++return {+ toTask: F2(toTask),+ expectStringResponse: expectStringResponse,+ mapExpect: F2(mapExpect),+ multipart: multipart,+ encodeUri: encodeUri,+ decodeUri: decodeUri+};++}();++var _elm_lang$http$Http_Internal$map = F2(+ function (func, request) {+ return _elm_lang$core$Native_Utils.update(+ request,+ {+ expect: A2(_elm_lang$http$Native_Http.mapExpect, func, request.expect)+ });+ });+var _elm_lang$http$Http_Internal$RawRequest = F7(+ function (a, b, c, d, e, f, g) {+ return {method: a, headers: b, url: c, body: d, expect: e, timeout: f, withCredentials: g};+ });+var _elm_lang$http$Http_Internal$Request = function (a) {+ return {ctor: 'Request', _0: a};+};+var _elm_lang$http$Http_Internal$Expect = {ctor: 'Expect'};+var _elm_lang$http$Http_Internal$FormDataBody = {ctor: 'FormDataBody'};+var _elm_lang$http$Http_Internal$StringBody = F2(+ function (a, b) {+ return {ctor: 'StringBody', _0: a, _1: b};+ });+var _elm_lang$http$Http_Internal$EmptyBody = {ctor: 'EmptyBody'};+var _elm_lang$http$Http_Internal$Header = F2(+ function (a, b) {+ return {ctor: 'Header', _0: a, _1: b};+ });++var _elm_lang$http$Http$decodeUri = _elm_lang$http$Native_Http.decodeUri;+var _elm_lang$http$Http$encodeUri = _elm_lang$http$Native_Http.encodeUri;+var _elm_lang$http$Http$expectStringResponse = _elm_lang$http$Native_Http.expectStringResponse;+var _elm_lang$http$Http$expectJson = function (decoder) {+ return _elm_lang$http$Http$expectStringResponse(+ function (response) {+ return A2(_elm_lang$core$Json_Decode$decodeString, decoder, response.body);+ });+};+var _elm_lang$http$Http$expectString = _elm_lang$http$Http$expectStringResponse(+ function (response) {+ return _elm_lang$core$Result$Ok(response.body);+ });+var _elm_lang$http$Http$multipartBody = _elm_lang$http$Native_Http.multipart;+var _elm_lang$http$Http$stringBody = _elm_lang$http$Http_Internal$StringBody;+var _elm_lang$http$Http$jsonBody = function (value) {+ return A2(+ _elm_lang$http$Http_Internal$StringBody,+ 'application/json',+ A2(_elm_lang$core$Json_Encode$encode, 0, value));+};+var _elm_lang$http$Http$emptyBody = _elm_lang$http$Http_Internal$EmptyBody;+var _elm_lang$http$Http$header = _elm_lang$http$Http_Internal$Header;+var _elm_lang$http$Http$request = _elm_lang$http$Http_Internal$Request;+var _elm_lang$http$Http$post = F3(+ function (url, body, decoder) {+ return _elm_lang$http$Http$request(+ {+ method: 'POST',+ headers: {ctor: '[]'},+ url: url,+ body: body,+ expect: _elm_lang$http$Http$expectJson(decoder),+ timeout: _elm_lang$core$Maybe$Nothing,+ withCredentials: false+ });+ });+var _elm_lang$http$Http$get = F2(+ function (url, decoder) {+ return _elm_lang$http$Http$request(+ {+ method: 'GET',+ headers: {ctor: '[]'},+ url: url,+ body: _elm_lang$http$Http$emptyBody,+ expect: _elm_lang$http$Http$expectJson(decoder),+ timeout: _elm_lang$core$Maybe$Nothing,+ withCredentials: false+ });+ });+var _elm_lang$http$Http$getString = function (url) {+ return _elm_lang$http$Http$request(+ {+ method: 'GET',+ headers: {ctor: '[]'},+ url: url,+ body: _elm_lang$http$Http$emptyBody,+ expect: _elm_lang$http$Http$expectString,+ timeout: _elm_lang$core$Maybe$Nothing,+ withCredentials: false+ });+};+var _elm_lang$http$Http$toTask = function (_p0) {+ var _p1 = _p0;+ return A2(_elm_lang$http$Native_Http.toTask, _p1._0, _elm_lang$core$Maybe$Nothing);+};+var _elm_lang$http$Http$send = F2(+ function (resultToMessage, request) {+ return A2(+ _elm_lang$core$Task$attempt,+ resultToMessage,+ _elm_lang$http$Http$toTask(request));+ });+var _elm_lang$http$Http$Response = F4(+ function (a, b, c, d) {+ return {url: a, status: b, headers: c, body: d};+ });+var _elm_lang$http$Http$BadPayload = F2(+ function (a, b) {+ return {ctor: 'BadPayload', _0: a, _1: b};+ });+var _elm_lang$http$Http$BadStatus = function (a) {+ return {ctor: 'BadStatus', _0: a};+};+var _elm_lang$http$Http$NetworkError = {ctor: 'NetworkError'};+var _elm_lang$http$Http$Timeout = {ctor: 'Timeout'};+var _elm_lang$http$Http$BadUrl = function (a) {+ return {ctor: 'BadUrl', _0: a};+};+var _elm_lang$http$Http$StringPart = F2(+ function (a, b) {+ return {ctor: 'StringPart', _0: a, _1: b};+ });+var _elm_lang$http$Http$stringPart = _elm_lang$http$Http$StringPart;++var _elm_lang$navigation$Native_Navigation = function() {+++// FAKE NAVIGATION++function go(n)+{+ return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)+ {+ if (n !== 0)+ {+ history.go(n);+ }+ callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));+ });+}++function pushState(url)+{+ return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)+ {+ history.pushState({}, '', url);+ callback(_elm_lang$core$Native_Scheduler.succeed(getLocation()));+ });+}++function replaceState(url)+{+ return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)+ {+ history.replaceState({}, '', url);+ callback(_elm_lang$core$Native_Scheduler.succeed(getLocation()));+ });+}+++// REAL NAVIGATION++function reloadPage(skipCache)+{+ return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)+ {+ document.location.reload(skipCache);+ callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));+ });+}++function setLocation(url)+{+ return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)+ {+ try+ {+ window.location = url;+ }+ catch(err)+ {+ // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.+ // Other browsers reload the page, so let's be consistent about that.+ document.location.reload(false);+ }+ callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));+ });+}+++// GET LOCATION++function getLocation()+{+ var location = document.location;++ return {+ href: location.href,+ host: location.host,+ hostname: location.hostname,+ protocol: location.protocol,+ origin: location.origin,+ port_: location.port,+ pathname: location.pathname,+ search: location.search,+ hash: location.hash,+ username: location.username,+ password: location.password+ };+}+++// DETECT IE11 PROBLEMS++function isInternetExplorer11()+{+ return window.navigator.userAgent.indexOf('Trident') !== -1;+}+++return {+ go: go,+ setLocation: setLocation,+ reloadPage: reloadPage,+ pushState: pushState,+ replaceState: replaceState,+ getLocation: getLocation,+ isInternetExplorer11: isInternetExplorer11+};++}();++var _elm_lang$navigation$Navigation$replaceState = _elm_lang$navigation$Native_Navigation.replaceState;+var _elm_lang$navigation$Navigation$pushState = _elm_lang$navigation$Native_Navigation.pushState;+var _elm_lang$navigation$Navigation$go = _elm_lang$navigation$Native_Navigation.go;+var _elm_lang$navigation$Navigation$reloadPage = _elm_lang$navigation$Native_Navigation.reloadPage;+var _elm_lang$navigation$Navigation$setLocation = _elm_lang$navigation$Native_Navigation.setLocation;+var _elm_lang$navigation$Navigation_ops = _elm_lang$navigation$Navigation_ops || {};+_elm_lang$navigation$Navigation_ops['&>'] = F2(+ function (task1, task2) {+ return A2(+ _elm_lang$core$Task$andThen,+ function (_p0) {+ return task2;+ },+ task1);+ });+var _elm_lang$navigation$Navigation$notify = F3(+ function (router, subs, location) {+ var send = function (_p1) {+ var _p2 = _p1;+ return A2(+ _elm_lang$core$Platform$sendToApp,+ router,+ _p2._0(location));+ };+ return A2(+ _elm_lang$navigation$Navigation_ops['&>'],+ _elm_lang$core$Task$sequence(+ A2(_elm_lang$core$List$map, send, subs)),+ _elm_lang$core$Task$succeed(+ {ctor: '_Tuple0'}));+ });+var _elm_lang$navigation$Navigation$cmdHelp = F3(+ function (router, subs, cmd) {+ var _p3 = cmd;+ switch (_p3.ctor) {+ case 'Jump':+ return _elm_lang$navigation$Navigation$go(_p3._0);+ case 'New':+ return A2(+ _elm_lang$core$Task$andThen,+ A2(_elm_lang$navigation$Navigation$notify, router, subs),+ _elm_lang$navigation$Navigation$pushState(_p3._0));+ case 'Modify':+ return A2(+ _elm_lang$core$Task$andThen,+ A2(_elm_lang$navigation$Navigation$notify, router, subs),+ _elm_lang$navigation$Navigation$replaceState(_p3._0));+ case 'Visit':+ return _elm_lang$navigation$Navigation$setLocation(_p3._0);+ default:+ return _elm_lang$navigation$Navigation$reloadPage(_p3._0);+ }+ });+var _elm_lang$navigation$Navigation$killPopWatcher = function (popWatcher) {+ var _p4 = popWatcher;+ if (_p4.ctor === 'Normal') {+ return _elm_lang$core$Process$kill(_p4._0);+ } else {+ return A2(+ _elm_lang$navigation$Navigation_ops['&>'],+ _elm_lang$core$Process$kill(_p4._0),+ _elm_lang$core$Process$kill(_p4._1));+ }+};+var _elm_lang$navigation$Navigation$onSelfMsg = F3(+ function (router, location, state) {+ return A2(+ _elm_lang$navigation$Navigation_ops['&>'],+ A3(_elm_lang$navigation$Navigation$notify, router, state.subs, location),+ _elm_lang$core$Task$succeed(state));+ });+var _elm_lang$navigation$Navigation$subscription = _elm_lang$core$Native_Platform.leaf('Navigation');+var _elm_lang$navigation$Navigation$command = _elm_lang$core$Native_Platform.leaf('Navigation');+var _elm_lang$navigation$Navigation$Location = function (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 function (j) {+ return function (k) {+ return {href: a, host: b, hostname: c, protocol: d, origin: e, port_: f, pathname: g, search: h, hash: i, username: j, password: k};+ };+ };+ };+ };+ };+ };+ };+ };+ };+ };+};+var _elm_lang$navigation$Navigation$State = F2(+ function (a, b) {+ return {subs: a, popWatcher: b};+ });+var _elm_lang$navigation$Navigation$init = _elm_lang$core$Task$succeed(+ A2(+ _elm_lang$navigation$Navigation$State,+ {ctor: '[]'},+ _elm_lang$core$Maybe$Nothing));+var _elm_lang$navigation$Navigation$Reload = function (a) {+ return {ctor: 'Reload', _0: a};+};+var _elm_lang$navigation$Navigation$reload = _elm_lang$navigation$Navigation$command(+ _elm_lang$navigation$Navigation$Reload(false));+var _elm_lang$navigation$Navigation$reloadAndSkipCache = _elm_lang$navigation$Navigation$command(+ _elm_lang$navigation$Navigation$Reload(true));+var _elm_lang$navigation$Navigation$Visit = function (a) {+ return {ctor: 'Visit', _0: a};+};+var _elm_lang$navigation$Navigation$load = function (url) {+ return _elm_lang$navigation$Navigation$command(+ _elm_lang$navigation$Navigation$Visit(url));+};+var _elm_lang$navigation$Navigation$Modify = function (a) {+ return {ctor: 'Modify', _0: a};+};+var _elm_lang$navigation$Navigation$modifyUrl = function (url) {+ return _elm_lang$navigation$Navigation$command(+ _elm_lang$navigation$Navigation$Modify(url));+};+var _elm_lang$navigation$Navigation$New = function (a) {+ return {ctor: 'New', _0: a};+};+var _elm_lang$navigation$Navigation$newUrl = function (url) {+ return _elm_lang$navigation$Navigation$command(+ _elm_lang$navigation$Navigation$New(url));+};+var _elm_lang$navigation$Navigation$Jump = function (a) {+ return {ctor: 'Jump', _0: a};+};+var _elm_lang$navigation$Navigation$back = function (n) {+ return _elm_lang$navigation$Navigation$command(+ _elm_lang$navigation$Navigation$Jump(0 - n));+};+var _elm_lang$navigation$Navigation$forward = function (n) {+ return _elm_lang$navigation$Navigation$command(+ _elm_lang$navigation$Navigation$Jump(n));+};+var _elm_lang$navigation$Navigation$cmdMap = F2(+ function (_p5, myCmd) {+ var _p6 = myCmd;+ switch (_p6.ctor) {+ case 'Jump':+ return _elm_lang$navigation$Navigation$Jump(_p6._0);+ case 'New':+ return _elm_lang$navigation$Navigation$New(_p6._0);+ case 'Modify':+ return _elm_lang$navigation$Navigation$Modify(_p6._0);+ case 'Visit':+ return _elm_lang$navigation$Navigation$Visit(_p6._0);+ default:+ return _elm_lang$navigation$Navigation$Reload(_p6._0);+ }+ });+var _elm_lang$navigation$Navigation$Monitor = function (a) {+ return {ctor: 'Monitor', _0: a};+};+var _elm_lang$navigation$Navigation$program = F2(+ function (locationToMessage, stuff) {+ var init = stuff.init(+ _elm_lang$navigation$Native_Navigation.getLocation(+ {ctor: '_Tuple0'}));+ var subs = function (model) {+ return _elm_lang$core$Platform_Sub$batch(+ {+ ctor: '::',+ _0: _elm_lang$navigation$Navigation$subscription(+ _elm_lang$navigation$Navigation$Monitor(locationToMessage)),+ _1: {+ ctor: '::',+ _0: stuff.subscriptions(model),+ _1: {ctor: '[]'}+ }+ });+ };+ return _elm_lang$html$Html$program(+ {init: init, view: stuff.view, update: stuff.update, subscriptions: subs});+ });+var _elm_lang$navigation$Navigation$programWithFlags = F2(+ function (locationToMessage, stuff) {+ var init = function (flags) {+ return A2(+ stuff.init,+ flags,+ _elm_lang$navigation$Native_Navigation.getLocation(+ {ctor: '_Tuple0'}));+ };+ var subs = function (model) {+ return _elm_lang$core$Platform_Sub$batch(+ {+ ctor: '::',+ _0: _elm_lang$navigation$Navigation$subscription(+ _elm_lang$navigation$Navigation$Monitor(locationToMessage)),+ _1: {+ ctor: '::',+ _0: stuff.subscriptions(model),+ _1: {ctor: '[]'}+ }+ });+ };+ return _elm_lang$html$Html$programWithFlags(+ {init: init, view: stuff.view, update: stuff.update, subscriptions: subs});+ });+var _elm_lang$navigation$Navigation$subMap = F2(+ function (func, _p7) {+ var _p8 = _p7;+ return _elm_lang$navigation$Navigation$Monitor(+ function (_p9) {+ return func(+ _p8._0(_p9));+ });+ });+var _elm_lang$navigation$Navigation$InternetExplorer = F2(+ function (a, b) {+ return {ctor: 'InternetExplorer', _0: a, _1: b};+ });+var _elm_lang$navigation$Navigation$Normal = function (a) {+ return {ctor: 'Normal', _0: a};+};+var _elm_lang$navigation$Navigation$spawnPopWatcher = function (router) {+ var reportLocation = function (_p10) {+ return A2(+ _elm_lang$core$Platform$sendToSelf,+ router,+ _elm_lang$navigation$Native_Navigation.getLocation(+ {ctor: '_Tuple0'}));+ };+ return _elm_lang$navigation$Native_Navigation.isInternetExplorer11(+ {ctor: '_Tuple0'}) ? A3(+ _elm_lang$core$Task$map2,+ _elm_lang$navigation$Navigation$InternetExplorer,+ _elm_lang$core$Process$spawn(+ A3(_elm_lang$dom$Dom_LowLevel$onWindow, 'popstate', _elm_lang$core$Json_Decode$value, reportLocation)),+ _elm_lang$core$Process$spawn(+ A3(_elm_lang$dom$Dom_LowLevel$onWindow, 'hashchange', _elm_lang$core$Json_Decode$value, reportLocation))) : A2(+ _elm_lang$core$Task$map,+ _elm_lang$navigation$Navigation$Normal,+ _elm_lang$core$Process$spawn(+ A3(_elm_lang$dom$Dom_LowLevel$onWindow, 'popstate', _elm_lang$core$Json_Decode$value, reportLocation)));+};+var _elm_lang$navigation$Navigation$onEffects = F4(+ function (router, cmds, subs, _p11) {+ var _p12 = _p11;+ var _p15 = _p12.popWatcher;+ var stepState = function () {+ var _p13 = {ctor: '_Tuple2', _0: subs, _1: _p15};+ _v6_2:+ do {+ if (_p13._0.ctor === '[]') {+ if (_p13._1.ctor === 'Just') {+ return A2(+ _elm_lang$navigation$Navigation_ops['&>'],+ _elm_lang$navigation$Navigation$killPopWatcher(_p13._1._0),+ _elm_lang$core$Task$succeed(+ A2(_elm_lang$navigation$Navigation$State, subs, _elm_lang$core$Maybe$Nothing)));+ } else {+ break _v6_2;+ }+ } else {+ if (_p13._1.ctor === 'Nothing') {+ return A2(+ _elm_lang$core$Task$map,+ function (_p14) {+ return A2(+ _elm_lang$navigation$Navigation$State,+ subs,+ _elm_lang$core$Maybe$Just(_p14));+ },+ _elm_lang$navigation$Navigation$spawnPopWatcher(router));+ } else {+ break _v6_2;+ }+ }+ } while(false);+ return _elm_lang$core$Task$succeed(+ A2(_elm_lang$navigation$Navigation$State, subs, _p15));+ }();+ return A2(+ _elm_lang$navigation$Navigation_ops['&>'],+ _elm_lang$core$Task$sequence(+ A2(+ _elm_lang$core$List$map,+ A2(_elm_lang$navigation$Navigation$cmdHelp, router, subs),+ cmds)),+ stepState);+ });+_elm_lang$core$Native_Platform.effectManagers['Navigation'] = {pkg: 'elm-lang/navigation', init: _elm_lang$navigation$Navigation$init, onEffects: _elm_lang$navigation$Navigation$onEffects, onSelfMsg: _elm_lang$navigation$Navigation$onSelfMsg, tag: 'fx', cmdMap: _elm_lang$navigation$Navigation$cmdMap, subMap: _elm_lang$navigation$Navigation$subMap};++var _evancz$url_parser$UrlParser$toKeyValuePair = function (segment) {+ var _p0 = A2(_elm_lang$core$String$split, '=', segment);+ if (((_p0.ctor === '::') && (_p0._1.ctor === '::')) && (_p0._1._1.ctor === '[]')) {+ return A3(+ _elm_lang$core$Maybe$map2,+ F2(+ function (v0, v1) {+ return {ctor: '_Tuple2', _0: v0, _1: v1};+ }),+ _elm_lang$http$Http$decodeUri(_p0._0),+ _elm_lang$http$Http$decodeUri(_p0._1._0));+ } else {+ return _elm_lang$core$Maybe$Nothing;+ }+};+var _evancz$url_parser$UrlParser$parseParams = function (queryString) {+ return _elm_lang$core$Dict$fromList(+ A2(+ _elm_lang$core$List$filterMap,+ _evancz$url_parser$UrlParser$toKeyValuePair,+ A2(+ _elm_lang$core$String$split,+ '&',+ A2(_elm_lang$core$String$dropLeft, 1, queryString))));+};+var _evancz$url_parser$UrlParser$splitUrl = function (url) {+ var _p1 = A2(_elm_lang$core$String$split, '/', url);+ if ((_p1.ctor === '::') && (_p1._0 === '')) {+ return _p1._1;+ } else {+ return _p1;+ }+};+var _evancz$url_parser$UrlParser$parseHelp = function (states) {+ parseHelp:+ while (true) {+ var _p2 = states;+ if (_p2.ctor === '[]') {+ return _elm_lang$core$Maybe$Nothing;+ } else {+ var _p4 = _p2._0;+ var _p3 = _p4.unvisited;+ if (_p3.ctor === '[]') {+ return _elm_lang$core$Maybe$Just(_p4.value);+ } else {+ if ((_p3._0 === '') && (_p3._1.ctor === '[]')) {+ return _elm_lang$core$Maybe$Just(_p4.value);+ } else {+ var _v4 = _p2._1;+ states = _v4;+ continue parseHelp;+ }+ }+ }+ }+};+var _evancz$url_parser$UrlParser$parse = F3(+ function (_p5, url, params) {+ var _p6 = _p5;+ return _evancz$url_parser$UrlParser$parseHelp(+ _p6._0(+ {+ visited: {ctor: '[]'},+ unvisited: _evancz$url_parser$UrlParser$splitUrl(url),+ params: params,+ value: _elm_lang$core$Basics$identity+ }));+ });+var _evancz$url_parser$UrlParser$parseHash = F2(+ function (parser, location) {+ return A3(+ _evancz$url_parser$UrlParser$parse,+ parser,+ A2(_elm_lang$core$String$dropLeft, 1, location.hash),+ _evancz$url_parser$UrlParser$parseParams(location.search));+ });+var _evancz$url_parser$UrlParser$parsePath = F2(+ function (parser, location) {+ return A3(+ _evancz$url_parser$UrlParser$parse,+ parser,+ location.pathname,+ _evancz$url_parser$UrlParser$parseParams(location.search));+ });+var _evancz$url_parser$UrlParser$intParamHelp = function (maybeValue) {+ var _p7 = maybeValue;+ if (_p7.ctor === 'Nothing') {+ return _elm_lang$core$Maybe$Nothing;+ } else {+ return _elm_lang$core$Result$toMaybe(+ _elm_lang$core$String$toInt(_p7._0));+ }+};+var _evancz$url_parser$UrlParser$mapHelp = F2(+ function (func, _p8) {+ var _p9 = _p8;+ return {+ visited: _p9.visited,+ unvisited: _p9.unvisited,+ params: _p9.params,+ value: func(_p9.value)+ };+ });+var _evancz$url_parser$UrlParser$State = F4(+ function (a, b, c, d) {+ return {visited: a, unvisited: b, params: c, value: d};+ });+var _evancz$url_parser$UrlParser$Parser = function (a) {+ return {ctor: 'Parser', _0: a};+};+var _evancz$url_parser$UrlParser$s = function (str) {+ return _evancz$url_parser$UrlParser$Parser(+ function (_p10) {+ var _p11 = _p10;+ var _p12 = _p11.unvisited;+ if (_p12.ctor === '[]') {+ return {ctor: '[]'};+ } else {+ var _p13 = _p12._0;+ return _elm_lang$core$Native_Utils.eq(_p13, str) ? {+ ctor: '::',+ _0: A4(+ _evancz$url_parser$UrlParser$State,+ {ctor: '::', _0: _p13, _1: _p11.visited},+ _p12._1,+ _p11.params,+ _p11.value),+ _1: {ctor: '[]'}+ } : {ctor: '[]'};+ }+ });+};+var _evancz$url_parser$UrlParser$custom = F2(+ function (tipe, stringToSomething) {+ return _evancz$url_parser$UrlParser$Parser(+ function (_p14) {+ var _p15 = _p14;+ var _p16 = _p15.unvisited;+ if (_p16.ctor === '[]') {+ return {ctor: '[]'};+ } else {+ var _p18 = _p16._0;+ var _p17 = stringToSomething(_p18);+ if (_p17.ctor === 'Ok') {+ return {+ ctor: '::',+ _0: A4(+ _evancz$url_parser$UrlParser$State,+ {ctor: '::', _0: _p18, _1: _p15.visited},+ _p16._1,+ _p15.params,+ _p15.value(_p17._0)),+ _1: {ctor: '[]'}+ };+ } else {+ return {ctor: '[]'};+ }+ }+ });+ });+var _evancz$url_parser$UrlParser$string = A2(_evancz$url_parser$UrlParser$custom, 'STRING', _elm_lang$core$Result$Ok);+var _evancz$url_parser$UrlParser$int = A2(_evancz$url_parser$UrlParser$custom, 'NUMBER', _elm_lang$core$String$toInt);+var _evancz$url_parser$UrlParser_ops = _evancz$url_parser$UrlParser_ops || {};+_evancz$url_parser$UrlParser_ops['</>'] = F2(+ function (_p20, _p19) {+ var _p21 = _p20;+ var _p22 = _p19;+ return _evancz$url_parser$UrlParser$Parser(+ function (state) {+ return A2(+ _elm_lang$core$List$concatMap,+ _p22._0,+ _p21._0(state));+ });+ });+var _evancz$url_parser$UrlParser$map = F2(+ function (subValue, _p23) {+ var _p24 = _p23;+ return _evancz$url_parser$UrlParser$Parser(+ function (_p25) {+ var _p26 = _p25;+ return A2(+ _elm_lang$core$List$map,+ _evancz$url_parser$UrlParser$mapHelp(_p26.value),+ _p24._0(+ {visited: _p26.visited, unvisited: _p26.unvisited, params: _p26.params, value: subValue}));+ });+ });+var _evancz$url_parser$UrlParser$oneOf = function (parsers) {+ return _evancz$url_parser$UrlParser$Parser(+ function (state) {+ return A2(+ _elm_lang$core$List$concatMap,+ function (_p27) {+ var _p28 = _p27;+ return _p28._0(state);+ },+ parsers);+ });+};+var _evancz$url_parser$UrlParser$top = _evancz$url_parser$UrlParser$Parser(+ function (state) {+ return {+ ctor: '::',+ _0: state,+ _1: {ctor: '[]'}+ };+ });+var _evancz$url_parser$UrlParser_ops = _evancz$url_parser$UrlParser_ops || {};+_evancz$url_parser$UrlParser_ops['<?>'] = F2(+ function (_p30, _p29) {+ var _p31 = _p30;+ var _p32 = _p29;+ return _evancz$url_parser$UrlParser$Parser(+ function (state) {+ return A2(+ _elm_lang$core$List$concatMap,+ _p32._0,+ _p31._0(state));+ });+ });+var _evancz$url_parser$UrlParser$QueryParser = function (a) {+ return {ctor: 'QueryParser', _0: a};+};+var _evancz$url_parser$UrlParser$customParam = F2(+ function (key, func) {+ return _evancz$url_parser$UrlParser$QueryParser(+ function (_p33) {+ var _p34 = _p33;+ var _p35 = _p34.params;+ return {+ ctor: '::',+ _0: A4(+ _evancz$url_parser$UrlParser$State,+ _p34.visited,+ _p34.unvisited,+ _p35,+ _p34.value(+ func(+ A2(_elm_lang$core$Dict$get, key, _p35)))),+ _1: {ctor: '[]'}+ };+ });+ });+var _evancz$url_parser$UrlParser$stringParam = function (name) {+ return A2(_evancz$url_parser$UrlParser$customParam, name, _elm_lang$core$Basics$identity);+};+var _evancz$url_parser$UrlParser$intParam = function (name) {+ return A2(_evancz$url_parser$UrlParser$customParam, name, _evancz$url_parser$UrlParser$intParamHelp);+};++var _jschomay$elm_bounded_number$Number_Bounded$maxBound = function (_p0) {+ var _p1 = _p0;+ return _p1._0.max;+};+var _jschomay$elm_bounded_number$Number_Bounded$minBound = function (_p2) {+ var _p3 = _p2;+ return _p3._0.min;+};+var _jschomay$elm_bounded_number$Number_Bounded$value = function (_p4) {+ var _p5 = _p4;+ return _p5._0.value;+};+var _jschomay$elm_bounded_number$Number_Bounded$Bounded = function (a) {+ return {ctor: 'Bounded', _0: a};+};+var _jschomay$elm_bounded_number$Number_Bounded$between = F2(+ function (a, b) {+ return (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? _jschomay$elm_bounded_number$Number_Bounded$Bounded(+ {min: a, max: b, value: a}) : _jschomay$elm_bounded_number$Number_Bounded$Bounded(+ {min: b, max: a, value: b});+ });+var _jschomay$elm_bounded_number$Number_Bounded$set = F2(+ function (value, _p6) {+ var _p7 = _p6;+ var _p9 = _p7._0.min;+ var _p8 = _p7._0.max;+ return _jschomay$elm_bounded_number$Number_Bounded$Bounded(+ {+ min: _p9,+ max: _p8,+ value: A2(+ _elm_lang$core$Basics$max,+ _p9,+ A2(_elm_lang$core$Basics$min, _p8, value))+ });+ });+var _jschomay$elm_bounded_number$Number_Bounded$inc = F2(+ function (by, _p10) {+ var _p11 = _p10;+ var _p12 = _p11._0.max;+ return _jschomay$elm_bounded_number$Number_Bounded$Bounded(+ {+ min: _p11._0.min,+ max: _p12,+ value: A2(_elm_lang$core$Basics$min, _p12, _p11._0.value + by)+ });+ });+var _jschomay$elm_bounded_number$Number_Bounded$dec = F2(+ function (by, _p13) {+ var _p14 = _p13;+ var _p15 = _p14._0.min;+ return _jschomay$elm_bounded_number$Number_Bounded$Bounded(+ {+ min: _p15,+ max: _p14._0.max,+ value: A2(_elm_lang$core$Basics$max, _p15, _p14._0.value - by)+ });+ });++var _jschomay$elm_paginate$Paginate_Custom$pager = F2(+ function (f, _p0) {+ var _p1 = _p0;+ var _p2 = _p1._0.currentPage;+ return A2(+ _elm_lang$core$List$map,+ function (i) {+ return A2(+ f,+ i,+ _elm_lang$core$Native_Utils.eq(+ i,+ _jschomay$elm_bounded_number$Number_Bounded$value(_p2)));+ },+ A2(+ _elm_lang$core$List$range,+ 1,+ _jschomay$elm_bounded_number$Number_Bounded$maxBound(_p2)));+ });+var _jschomay$elm_paginate$Paginate_Custom$page = F2(+ function (sliceFn, _p3) {+ var _p4 = _p3;+ var _p5 = _p4._0.itemsPerPage;+ var from = (_jschomay$elm_bounded_number$Number_Bounded$value(_p4._0.currentPage) - 1) * _p5;+ var to = from + _p5;+ return A3(sliceFn, from, to, _p4._0.items);+ });+var _jschomay$elm_paginate$Paginate_Custom$foldMap = F2(+ function (f, _p6) {+ var _p7 = _p6;+ return f(_p7._0.items);+ });+var _jschomay$elm_paginate$Paginate_Custom$totalPages = function (_p8) {+ var _p9 = _p8;+ return _jschomay$elm_bounded_number$Number_Bounded$maxBound(_p9._0.currentPage);+};+var _jschomay$elm_paginate$Paginate_Custom$itemsPerPage = function (_p10) {+ var _p11 = _p10;+ return _p11._0.itemsPerPage;+};+var _jschomay$elm_paginate$Paginate_Custom$currentPage = function (_p12) {+ var _p13 = _p12;+ return _jschomay$elm_bounded_number$Number_Bounded$value(_p13._0.currentPage);+};+var _jschomay$elm_paginate$Paginate_Custom$isLast = function (_p14) {+ var _p15 = _p14;+ var _p16 = _p15._0.currentPage;+ return _elm_lang$core$Native_Utils.eq(+ _jschomay$elm_bounded_number$Number_Bounded$value(_p16),+ _jschomay$elm_bounded_number$Number_Bounded$maxBound(_p16));+};+var _jschomay$elm_paginate$Paginate_Custom$isFirst = function (_p17) {+ var _p18 = _p17;+ return _elm_lang$core$Native_Utils.eq(+ _jschomay$elm_bounded_number$Number_Bounded$value(_p18._0.currentPage),+ 1);+};+var _jschomay$elm_paginate$Paginate_Custom$Paginated = function (a) {+ return {ctor: 'Paginated', _0: a};+};+var _jschomay$elm_paginate$Paginate_Custom$init = F3(+ function (lengthFn, itemsPerPage, items) {+ var max = _elm_lang$core$Native_Utils.eq(+ lengthFn(items),+ 0) ? 1 : _elm_lang$core$Basics$ceiling(+ _elm_lang$core$Basics$toFloat(+ lengthFn(items)) / _elm_lang$core$Basics$toFloat(+ A2(_elm_lang$core$Basics$max, 1, itemsPerPage)));+ return _jschomay$elm_paginate$Paginate_Custom$Paginated(+ {+ itemsPerPage: A2(_elm_lang$core$Basics$max, 1, itemsPerPage),+ currentPage: A2(_jschomay$elm_bounded_number$Number_Bounded$between, 1, max),+ items: items+ });+ });+var _jschomay$elm_paginate$Paginate_Custom$goTo = F2(+ function (i, _p19) {+ var _p20 = _p19;+ var _p21 = _p20._0;+ return _jschomay$elm_paginate$Paginate_Custom$Paginated(+ _elm_lang$core$Native_Utils.update(+ _p21,+ {+ currentPage: A2(_jschomay$elm_bounded_number$Number_Bounded$set, i, _p21.currentPage)+ }));+ });+var _jschomay$elm_paginate$Paginate_Custom$map = F3(+ function (lengthFn, f, _p22) {+ var _p23 = _p22;+ return A2(+ _jschomay$elm_paginate$Paginate_Custom$goTo,+ _jschomay$elm_bounded_number$Number_Bounded$value(_p23._0.currentPage),+ A3(+ _jschomay$elm_paginate$Paginate_Custom$init,+ lengthFn,+ _p23._0.itemsPerPage,+ f(_p23._0.items)));+ });+var _jschomay$elm_paginate$Paginate_Custom$changeItemsPerPage = F3(+ function (lengthFn, newItemsPerPage, _p24) {+ var _p25 = _p24;+ return A2(+ _jschomay$elm_paginate$Paginate_Custom$goTo,+ _jschomay$elm_bounded_number$Number_Bounded$value(_p25._0.currentPage),+ A3(_jschomay$elm_paginate$Paginate_Custom$init, lengthFn, newItemsPerPage, _p25._0.items));+ });+var _jschomay$elm_paginate$Paginate_Custom$first = function (paginatedList) {+ return A2(_jschomay$elm_paginate$Paginate_Custom$goTo, 1, paginatedList);+};+var _jschomay$elm_paginate$Paginate_Custom$last = function (paginatedList) {+ return A2(+ _jschomay$elm_paginate$Paginate_Custom$goTo,+ _jschomay$elm_paginate$Paginate_Custom$totalPages(paginatedList),+ paginatedList);+};+var _jschomay$elm_paginate$Paginate_Custom$next = function (_p26) {+ var _p27 = _p26;+ var _p28 = _p27._0;+ return _jschomay$elm_paginate$Paginate_Custom$Paginated(+ _elm_lang$core$Native_Utils.update(+ _p28,+ {+ currentPage: A2(_jschomay$elm_bounded_number$Number_Bounded$inc, 1, _p28.currentPage)+ }));+};+var _jschomay$elm_paginate$Paginate_Custom$prev = function (_p29) {+ var _p30 = _p29;+ var _p31 = _p30._0;+ return _jschomay$elm_paginate$Paginate_Custom$Paginated(+ _elm_lang$core$Native_Utils.update(+ _p31,+ {+ currentPage: A2(_jschomay$elm_bounded_number$Number_Bounded$dec, 1, _p31.currentPage)+ }));+};++var _jschomay$elm_paginate$Paginate$pager = _jschomay$elm_paginate$Paginate_Custom$pager;+var _jschomay$elm_paginate$Paginate$page = _jschomay$elm_paginate$Paginate_Custom$page(+ F2(+ function (from, to) {+ return function (_p0) {+ return A2(+ _elm_lang$core$List$take,+ to - from,+ A2(_elm_lang$core$List$drop, from, _p0));+ };+ }));+var _jschomay$elm_paginate$Paginate$foldMap = _jschomay$elm_paginate$Paginate_Custom$foldMap;+var _jschomay$elm_paginate$Paginate$allItems = _jschomay$elm_paginate$Paginate_Custom$foldMap(_elm_lang$core$Basics$identity);+var _jschomay$elm_paginate$Paginate$totalPages = _jschomay$elm_paginate$Paginate_Custom$totalPages;+var _jschomay$elm_paginate$Paginate$itemsPerPage = _jschomay$elm_paginate$Paginate_Custom$itemsPerPage;+var _jschomay$elm_paginate$Paginate$currentPage = _jschomay$elm_paginate$Paginate_Custom$currentPage;+var _jschomay$elm_paginate$Paginate$length = _jschomay$elm_paginate$Paginate_Custom$foldMap(_elm_lang$core$List$length);+var _jschomay$elm_paginate$Paginate$isLast = _jschomay$elm_paginate$Paginate_Custom$isLast;+var _jschomay$elm_paginate$Paginate$isFirst = _jschomay$elm_paginate$Paginate_Custom$isFirst;+var _jschomay$elm_paginate$Paginate$last = _jschomay$elm_paginate$Paginate_Custom$last;+var _jschomay$elm_paginate$Paginate$first = _jschomay$elm_paginate$Paginate_Custom$first;+var _jschomay$elm_paginate$Paginate$prev = _jschomay$elm_paginate$Paginate_Custom$prev;+var _jschomay$elm_paginate$Paginate$next = _jschomay$elm_paginate$Paginate_Custom$next;+var _jschomay$elm_paginate$Paginate$goTo = _jschomay$elm_paginate$Paginate_Custom$goTo;+var _jschomay$elm_paginate$Paginate$changeItemsPerPage = _jschomay$elm_paginate$Paginate_Custom$changeItemsPerPage(_elm_lang$core$List$length);+var _jschomay$elm_paginate$Paginate$map = _jschomay$elm_paginate$Paginate_Custom$map(_elm_lang$core$List$length);+var _jschomay$elm_paginate$Paginate$fromList = F2(+ function (a, b) {+ return A3(_jschomay$elm_paginate$Paginate_Custom$init, _elm_lang$core$List$length, a, b);+ });++var _ndmitchell$debug$Trace$decodeCallDataLocals = function (_p0) {+ return A2(+ _elm_lang$core$Result$map,+ _elm_lang$core$Dict$fromList,+ _elm_community$result_extra$Result_Extra$combine(+ A2(+ _elm_lang$core$List$filterMap,+ function (_p1) {+ var _p2 = _p1;+ var _p3 = _p2._0;+ return ((!_elm_lang$core$Native_Utils.eq(_p3, '')) && ((!_elm_lang$core$Native_Utils.eq(_p3, '$parents')) && (!_elm_lang$core$Native_Utils.eq(_p3, '$depends')))) ? _elm_lang$core$Maybe$Just(+ A2(+ _elm_lang$core$Result$map,+ function (v) {+ return {ctor: '_Tuple2', _0: _p3, _1: v};+ },+ A2(_elm_lang$core$Json_Decode$decodeValue, _elm_lang$core$Json_Decode$int, _p2._1))) : _elm_lang$core$Maybe$Nothing;+ },+ _elm_lang$core$Dict$toList(_p0))));+};+var _ndmitchell$debug$Trace$traverseDebugTrace = F2(+ function (f, trace) {+ return A2(+ _elm_lang$core$Result$map,+ function (callsList) {+ return _elm_lang$core$Native_Utils.update(+ trace,+ {+ calls: _elm_lang$core$Array$fromList(callsList)+ });+ },+ _elm_community$result_extra$Result_Extra$combine(+ _elm_lang$core$Array$toList(+ A2(_elm_lang$core$Array$map, f, trace.calls))));+ });+var _ndmitchell$debug$Trace$DebugTrace = F3(+ function (a, b, c) {+ return {functions: a, variables: b, calls: c};+ });+var _ndmitchell$debug$Trace$DebugFunction = F4(+ function (a, b, c, d) {+ return {name: a, source: b, $arguments: c, result: d};+ });+var _ndmitchell$debug$Trace$CallData = F4(+ function (a, b, c, d) {+ return {callDepends: a, callParents: b, callFunction: c, callLocals: d};+ });+var _ndmitchell$debug$Trace$decodeCallDataDict = F2(+ function (trace, d) {+ return A5(+ _elm_lang$core$Result$map4,+ _ndmitchell$debug$Trace$CallData,+ A2(+ _elm_lang$core$Maybe$withDefault,+ _elm_lang$core$Result$Ok(+ {ctor: '[]'}),+ A2(+ _elm_lang$core$Maybe$map,+ _elm_lang$core$Json_Decode$decodeValue(+ _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$int)),+ A2(_elm_lang$core$Dict$get, '$depends', d))),+ A2(+ _elm_lang$core$Maybe$withDefault,+ _elm_lang$core$Result$Ok(+ {ctor: '[]'}),+ A2(+ _elm_lang$core$Maybe$map,+ _elm_lang$core$Json_Decode$decodeValue(+ _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$int)),+ A2(_elm_lang$core$Dict$get, '$parents', d))),+ A2(+ _elm_lang$core$Result$andThen,+ function (_p4) {+ return A2(+ _elm_lang$core$Result$fromMaybe,+ 'Corrupt trace: missing function id',+ A3(_elm_lang$core$Basics$flip, _elm_lang$core$Array$get, trace.functions, _p4));+ },+ A2(+ _elm_lang$core$Result$andThen,+ _elm_lang$core$Json_Decode$decodeValue(_elm_lang$core$Json_Decode$int),+ A2(+ _elm_lang$core$Result$fromMaybe,+ 'Corrupt trace: call without function id',+ A2(_elm_lang$core$Dict$get, '', d)))),+ _ndmitchell$debug$Trace$decodeCallDataLocals(d));+ });+var _ndmitchell$debug$Trace$callDataDecoder = function (trace) {+ return A2(+ _elm_lang$core$Json_Decode$andThen,+ function (_p5) {+ return A3(+ _elm_community$result_extra$Result_Extra$unpack,+ _elm_lang$core$Json_Decode$fail,+ _elm_lang$core$Json_Decode$succeed,+ A2(_ndmitchell$debug$Trace$decodeCallDataDict, trace, _p5));+ },+ _elm_lang$core$Json_Decode$dict(_elm_lang$core$Json_Decode$value));+};++var _ndmitchell$debug$Types$ProcessedCall = F3(+ function (a, b, c) {+ return {searchString: a, rendered: b, call: c};+ });+var _ndmitchell$debug$Types$Model = F5(+ function (a, b, c, d, e) {+ return {location: a, selectedFunction: b, callFilter: c, filteredCalls: d, trace: e};+ });+var _ndmitchell$debug$Types$GoTo = function (a) {+ return {ctor: 'GoTo', _0: a};+};+var _ndmitchell$debug$Types$Prev = {ctor: 'Prev'};+var _ndmitchell$debug$Types$Next = {ctor: 'Next'};+var _ndmitchell$debug$Types$Last = {ctor: 'Last'};+var _ndmitchell$debug$Types$First = {ctor: 'First'};+var _ndmitchell$debug$Types$ChangeCallPageSize = function (a) {+ return {ctor: 'ChangeCallPageSize', _0: a};+};+var _ndmitchell$debug$Types$CallPage = function (a) {+ return {ctor: 'CallPage', _0: a};+};+var _ndmitchell$debug$Types$CallFilter = function (a) {+ return {ctor: 'CallFilter', _0: a};+};+var _ndmitchell$debug$Types$SelectFunction = function (a) {+ return {ctor: 'SelectFunction', _0: a};+};+var _ndmitchell$debug$Types$ChangeLocation = function (a) {+ return {ctor: 'ChangeLocation', _0: a};+};+var _ndmitchell$debug$Types$SelectCall = function (a) {+ return {ctor: 'SelectCall', _0: a};+};+var _ndmitchell$debug$Types$router = function (_p0) {+ return A2(+ _elm_lang$core$Maybe$withDefault,+ _ndmitchell$debug$Types$SelectCall(0),+ A2(+ _evancz$url_parser$UrlParser$parseHash,+ A2(+ _evancz$url_parser$UrlParser$map,+ _ndmitchell$debug$Types$SelectCall,+ A2(+ _evancz$url_parser$UrlParser_ops['</>'],+ _evancz$url_parser$UrlParser$s('call'),+ _evancz$url_parser$UrlParser$int)),+ _p0));+};++var _ndmitchell$debug$Update$matchCalls = F3(+ function (selectedFunction, callFilter, trace) {+ return A2(+ _elm_lang$core$List$filter,+ function (_p0) {+ var _p1 = _p0;+ var _p4 = _p1._1;+ var filterByCall = function () {+ var _p2 = callFilter;+ if (_p2.ctor === 'Nothing') {+ return true;+ } else {+ return A2(_elm_lang$core$Regex$contains, _p2._0, _p4.searchString);+ }+ }();+ var filterByName = function () {+ var _p3 = selectedFunction;+ if (_p3.ctor === 'Nothing') {+ return true;+ } else {+ return _elm_lang$core$Native_Utils.eq(_p4.call.callFunction.name, _p3._0);+ }+ }();+ return filterByName && filterByCall;+ },+ _elm_lang$core$Array$toIndexedList(trace.calls));+ });+var _ndmitchell$debug$Update$update = F2(+ function (msg, model) {+ var _p5 = msg;+ switch (_p5.ctor) {+ case 'ChangeLocation':+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {location: _p5._0}),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ case 'SelectFunction':+ var _p6 = _p5._0;+ var selectedFunction = _elm_lang$core$Native_Utils.eq(_p6, '(All)') ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just(_p6);+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ selectedFunction: selectedFunction,+ filteredCalls: A2(+ _jschomay$elm_paginate$Paginate$fromList,+ _jschomay$elm_paginate$Paginate$itemsPerPage(model.filteredCalls),+ A2(+ _elm_lang$core$Maybe$withDefault,+ {ctor: '[]'},+ A2(+ _elm_lang$core$Maybe$map,+ A2(_ndmitchell$debug$Update$matchCalls, selectedFunction, model.callFilter),+ _elm_lang$core$Result$toMaybe(model.trace))))+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ case 'CallFilter':+ var _p7 = _p5._0;+ var callFilter = _elm_lang$core$Native_Utils.eq(_p7, '') ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just(+ _elm_lang$core$Regex$regex(_p7));+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ callFilter: callFilter,+ filteredCalls: A2(+ _jschomay$elm_paginate$Paginate$fromList,+ _jschomay$elm_paginate$Paginate$itemsPerPage(model.filteredCalls),+ A2(+ _elm_lang$core$Maybe$withDefault,+ {ctor: '[]'},+ A2(+ _elm_lang$core$Maybe$map,+ A2(_ndmitchell$debug$Update$matchCalls, model.selectedFunction, callFilter),+ _elm_lang$core$Result$toMaybe(model.trace))))+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ case 'CallPage':+ switch (_p5._0.ctor) {+ case 'First':+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ filteredCalls: _jschomay$elm_paginate$Paginate$first(model.filteredCalls)+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ case 'Last':+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ filteredCalls: _jschomay$elm_paginate$Paginate$last(model.filteredCalls)+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ case 'Next':+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ filteredCalls: _jschomay$elm_paginate$Paginate$next(model.filteredCalls)+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ case 'Prev':+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ filteredCalls: _jschomay$elm_paginate$Paginate$prev(model.filteredCalls)+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ default:+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ filteredCalls: A2(_jschomay$elm_paginate$Paginate$goTo, _p5._0._0, model.filteredCalls)+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ }+ default:+ var sizeAsInt = A2(+ _elm_lang$core$Result$withDefault,+ 10,+ _elm_lang$core$String$toInt(_p5._0));+ return {+ ctor: '_Tuple2',+ _0: _elm_lang$core$Native_Utils.update(+ model,+ {+ filteredCalls: function () {+ var newPage = 1 + ((((_jschomay$elm_paginate$Paginate$currentPage(model.filteredCalls) - 1) * _jschomay$elm_paginate$Paginate$itemsPerPage(model.filteredCalls)) / sizeAsInt) | 0);+ return A2(+ _jschomay$elm_paginate$Paginate$goTo,+ newPage,+ A2(_jschomay$elm_paginate$Paginate$changeItemsPerPage, sizeAsInt, model.filteredCalls));+ }()+ }),+ _1: _elm_lang$core$Platform_Cmd$none+ };+ }+ });++var _ndmitchell$debug$View$errorSpan = function (msg) {+ return A2(+ _elm_lang$html$Html$span,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('error'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(msg),+ _1: {ctor: '[]'}+ });+};+var _ndmitchell$debug$View$mkSearchString = F3(+ function (callFunction, args, res) {+ return A2(+ _elm_lang$core$String$join,+ ' ',+ {+ ctor: '::',+ _0: callFunction.name,+ _1: A2(+ _elm_lang$core$Basics_ops['++'],+ A2(_elm_lang$core$List$map, _elm_lang$core$Tuple$second, args),+ {+ ctor: '::',+ _0: ' = ',+ _1: {+ ctor: '::',+ _0: res,+ _1: {ctor: '[]'}+ }+ })+ });+ });+var _ndmitchell$debug$View$findCallDetails = F2(+ function (trace, call) {+ return A2(+ _elm_lang$core$Maybe$map,+ function (vv) {+ var _p0 = vv;+ if ((_p0.ctor === '::') && (_p0._0.ctor === '_Tuple2')) {+ return {ctor: '_Tuple2', _0: _p0._0._1, _1: _p0._1};+ } else {+ return {+ ctor: '_Tuple2',+ _0: '_',+ _1: {ctor: '[]'}+ };+ }+ },+ _elm_community$maybe_extra$Maybe_Extra$combine(+ A2(+ _elm_lang$core$List$map,+ function (arg) {+ var _p1 = A2(_elm_lang$core$Dict$get, arg, call.callLocals);+ if (_p1.ctor === 'Nothing') {+ return _elm_lang$core$Maybe$Just(+ {ctor: '_Tuple2', _0: arg, _1: '_'});+ } else {+ return A2(+ _elm_lang$core$Maybe$map,+ function (x) {+ return {ctor: '_Tuple2', _0: arg, _1: x};+ },+ A2(_elm_lang$core$Array$get, _p1._0, trace.variables));+ }+ },+ {ctor: '::', _0: call.callFunction.result, _1: call.callFunction.$arguments})));+ });+var _ndmitchell$debug$View$getCallStackUpwards = F2(+ function (trace, call) {+ var _p2 = call.callParents;+ if (_p2.ctor === '::') {+ if (_p2._1.ctor === '[]') {+ var _p3 = _p2._0;+ return A2(+ _elm_lang$core$Result$andThen,+ function (p) {+ return A2(+ _elm_lang$core$Result$map,+ function (x) {+ return {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: _p3, _1: p.rendered},+ _1: x+ };+ },+ A2(_ndmitchell$debug$View$getCallStackUpwards, trace, p.call));+ },+ A2(+ _elm_lang$core$Result$fromMaybe,+ 'Corrupt trace',+ A2(_elm_lang$core$Array$get, _p3, trace.calls)));+ } else {+ return _elm_lang$core$Result$Err(+ A2(+ _elm_lang$core$Basics_ops['++'],+ 'Unexpected: more than one parents for a call: ',+ _elm_lang$core$Basics$toString(_p2)));+ }+ } else {+ return _elm_lang$core$Result$Ok(+ {ctor: '[]'});+ }+ });+var _ndmitchell$debug$View$symbols = '->:=()[]';+var _ndmitchell$debug$View$hsLexer = _elm_lang$core$Regex$regex('[a-zA-Z][a-zA-Z0-9]+|[\r\n]|.');+var _ndmitchell$debug$View$getArg = F3(+ function (trace, call, arg) {+ return A2(+ _elm_lang$core$Maybe$andThen,+ function (ix) {+ return A2(_elm_lang$core$Array$get, ix, trace.variables);+ },+ A2(_elm_lang$core$Dict$get, arg, call.callLocals));+ });+var _ndmitchell$debug$View$renderSource = function (getArg) {+ var loop = function (src) {+ var _p4 = A3(+ _elm_lang$core$Regex$find,+ _elm_lang$core$Regex$AtMost(1),+ _ndmitchell$debug$View$hsLexer,+ src);+ if (_p4.ctor === '[]') {+ return {ctor: '[]'};+ } else {+ var _p8 = _p4._0.match;+ var _p5 = _p8;+ switch (_p5) {+ case '':+ return {ctor: '[]'};+ case 'where':+ return {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$span,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('hs-keyword'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('where'),+ _1: {ctor: '[]'}+ }),+ _1: loop(+ A2(_elm_lang$core$String$dropLeft, 5, src))+ };+ case '=':+ return {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$span,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('hs-equals'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('='),+ _1: {ctor: '[]'}+ }),+ _1: loop(+ A2(_elm_lang$core$String$dropLeft, 1, src))+ };+ default:+ return {+ ctor: '::',+ _0: function () {+ var _p6 = A2(_elm_lang$core$String$indexes, _p8, _ndmitchell$debug$View$symbols);+ if (_p6.ctor === '::') {+ return A2(+ _elm_lang$html$Html$span,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('hs-keyglyph'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(_p8),+ _1: {ctor: '[]'}+ });+ } else {+ var _p7 = getArg(_p8);+ if (_p7.ctor === 'Just') {+ return A2(+ _elm_lang$html$Html$abbr,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$title(_p7._0),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(_p8),+ _1: {ctor: '[]'}+ });+ } else {+ return _elm_lang$html$Html$text(_p8);+ }+ }+ }(),+ _1: loop(+ A2(+ _elm_lang$core$String$dropLeft,+ _elm_lang$core$String$length(_p8),+ src))+ };+ }+ }+ };+ return loop;+};+var _ndmitchell$debug$View$printArg = function (arg) {+ return (_elm_lang$core$Native_Utils.cmp(+ _elm_lang$core$String$length(arg),+ 20) > 0) ? A2(+ _elm_lang$html$Html$abbr,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('render-arg'),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$title(arg),+ _1: {ctor: '[]'}+ }+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$div,+ {ctor: '[]'},+ A2(+ _elm_lang$core$Basics_ops['++'],+ A2(+ _ndmitchell$debug$View$renderSource,+ function (_p9) {+ return _elm_lang$core$Maybe$Nothing;+ },+ A2(_elm_lang$core$String$left, 20, arg)),+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$span,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('hs-keyglyph'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('..'),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ })),+ _1: {ctor: '[]'}+ }) : A2(+ _elm_lang$html$Html$span,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('render-arg'),+ _1: {ctor: '[]'}+ },+ A2(+ _ndmitchell$debug$View$renderSource,+ function (_p10) {+ return _elm_lang$core$Maybe$Nothing;+ },+ arg));+};+var _ndmitchell$debug$View$renderCall = F3(+ function (callFunction, args, res) {+ return A2(+ _elm_lang$html$Html$div,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('render-call'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(callFunction.name),+ _1: A2(+ _elm_lang$core$Basics_ops['++'],+ A2(+ _elm_lang$core$List$filterMap,+ function (_p11) {+ var _p12 = _p11;+ return A2(_elm_lang$core$String$startsWith, '$arg', _p12._0) ? _elm_lang$core$Maybe$Just(+ _ndmitchell$debug$View$printArg(_p12._1)) : _elm_lang$core$Maybe$Nothing;+ },+ args),+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$span,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('hs-equals'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(' = '),+ _1: {ctor: '[]'}+ }),+ _1: {+ ctor: '::',+ _0: _ndmitchell$debug$View$printArg(res),+ _1: {ctor: '[]'}+ }+ })+ });+ });+var _ndmitchell$debug$View$processCall = F2(+ function (tr, call) {+ var _p13 = A2(_ndmitchell$debug$View$findCallDetails, tr, call);+ if (_p13.ctor === 'Nothing') {+ return {+ call: call,+ rendered: _ndmitchell$debug$View$errorSpan('Invalid trace: null ref'),+ searchString: ''+ };+ } else {+ var _p15 = _p13._0._0;+ var _p14 = _p13._0._1;+ return {+ call: call,+ rendered: A3(_ndmitchell$debug$View$renderCall, call.callFunction, _p14, _p15),+ searchString: A3(_ndmitchell$debug$View$mkSearchString, call.callFunction, _p14, _p15)+ };+ }+ });+var _ndmitchell$debug$View$viewSource = F2(+ function (trace, call) {+ var _p16 = call;+ if (_p16.ctor === 'Nothing') {+ return _elm_lang$html$Html$text('Corrupt trace: no call');+ } else {+ var _p17 = _p16._0;+ return A2(+ _elm_lang$html$Html$pre,+ {ctor: '[]'},+ A2(+ _ndmitchell$debug$View$renderSource,+ A2(_ndmitchell$debug$View$getArg, trace, _p17),+ _p17.callFunction.source));+ }+ });+var _ndmitchell$debug$View$viewVariables = F2(+ function (trace, call) {+ var _p18 = call;+ if (_p18.ctor === 'Nothing') {+ return _elm_lang$html$Html$text('Corrupt trace: no call');+ } else {+ return A2(+ _elm_lang$html$Html$ul,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$id('function-variables'),+ _1: {ctor: '[]'}+ },+ function () {+ var _p19 = A2(_ndmitchell$debug$View$findCallDetails, trace, _p18._0);+ if ((_p19.ctor === 'Just') && (_p19._0.ctor === '_Tuple2')) {+ return {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$li,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$pre,+ {ctor: '[]'},+ A2(+ _ndmitchell$debug$View$renderSource,+ function (_p20) {+ return _elm_lang$core$Maybe$Nothing;+ },+ A2(_elm_lang$core$Basics_ops['++'], '$result = ', _p19._0._0))),+ _1: {ctor: '[]'}+ }),+ _1: A2(+ _elm_lang$core$List$map,+ function (_p21) {+ var _p22 = _p21;+ return A2(+ _elm_lang$html$Html$li,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$pre,+ {ctor: '[]'},+ A2(+ _ndmitchell$debug$View$renderSource,+ function (_p23) {+ return _elm_lang$core$Maybe$Nothing;+ },+ A2(+ _elm_lang$core$Basics_ops['++'],+ _p22._0,+ A2(_elm_lang$core$Basics_ops['++'], ' = ', _p22._1)))),+ _1: {ctor: '[]'}+ });+ },+ _p19._0._1)+ };+ } else {+ return {ctor: '[]'};+ }+ }());+ }+ });+var _ndmitchell$debug$View$viewCallLink = F2(+ function (index, rendered) {+ return A2(+ _elm_lang$html$Html$a,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('call-link'),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$href(+ A2(+ _elm_lang$core$Basics_ops['++'],+ '#call/',+ _elm_lang$core$Basics$toString(index))),+ _1: {ctor: '[]'}+ }+ },+ {+ ctor: '::',+ _0: rendered,+ _1: {ctor: '[]'}+ });+ });+var _ndmitchell$debug$View$buildCallStackList = F3(+ function (call, parent, k) {+ return parent(+ A2(+ _elm_lang$html$Html$li,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(_elm_lang$core$Basics$uncurry, _ndmitchell$debug$View$viewCallLink, call),+ _1: {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$ul,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: k,+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }+ }));+ });+var _ndmitchell$debug$View$viewCallStack = F2(+ function (trace, call) {+ var _p24 = call;+ if (_p24.ctor === 'Nothing') {+ return _elm_lang$html$Html$text('Corrupt trace: no call');+ } else {+ var _p26 = _p24._0;+ var _p25 = A2(_ndmitchell$debug$View$getCallStackUpwards, trace, _p26);+ if (_p25.ctor === 'Err') {+ return _elm_lang$html$Html$text(_p25._0);+ } else {+ var descendants = A2(+ _elm_lang$core$List$map,+ function (i) {+ return {+ ctor: '_Tuple2',+ _0: i,+ _1: A2(+ _elm_lang$core$Maybe$withDefault,+ _elm_lang$html$Html$text('Corrupt trace'),+ A2(+ _elm_lang$core$Maybe$map,+ function (x) {+ return x.rendered;+ },+ A2(_elm_lang$core$Array$get, i, trace.calls)))+ };+ },+ _p26.callDepends);+ var downwards = A2(+ _elm_lang$html$Html$li,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$id('function-depends-current'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: A2(_ndmitchell$debug$View$processCall, trace, _p26).rendered,+ _1: {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$ul,+ {ctor: '[]'},+ A2(+ _elm_lang$core$List$map,+ function (x) {+ return A2(+ _elm_lang$html$Html$li,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(_elm_lang$core$Basics$uncurry, _ndmitchell$debug$View$viewCallLink, x),+ _1: {ctor: '[]'}+ });+ },+ descendants)),+ _1: {ctor: '[]'}+ }+ });+ var upwards = A3(+ _elm_lang$core$List$foldl,+ _ndmitchell$debug$View$buildCallStackList,+ function (k) {+ return A2(+ _elm_lang$html$Html$ul,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: k,+ _1: {ctor: '[]'}+ });+ },+ _elm_lang$core$List$reverse(_p25._0));+ return upwards(downwards);+ }+ }+ });+var _ndmitchell$debug$View$boundedPager = F3(+ function (radius, f, p) {+ var center = _jschomay$elm_paginate$Paginate$currentPage(p);+ var canStart = A2(_elm_lang$core$Basics$max, 1, center - radius);+ var end = A2(+ _elm_lang$core$Basics$min,+ _jschomay$elm_paginate$Paginate$totalPages(p),+ canStart + (radius * 2));+ var canEnd = A2(+ _elm_lang$core$Basics$min,+ _jschomay$elm_paginate$Paginate$totalPages(p),+ center + radius);+ var start = A2(_elm_lang$core$Basics$max, 1, canEnd - (radius * 2));+ return A2(+ _elm_lang$core$List$map,+ function (i) {+ return A2(+ f,+ i,+ _elm_lang$core$Native_Utils.eq(i, center));+ },+ A2(_elm_lang$core$List$range, start, end));+ });+var _ndmitchell$debug$View$viewCallList = F2(+ function (model, trace) {+ var callView = function (_p27) {+ var _p28 = _p27;+ return A2(+ _elm_lang$html$Html$li,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(_ndmitchell$debug$View$viewCallLink, _p28._0, _p28._1.rendered),+ _1: {ctor: '[]'}+ });+ };+ var nameFilterInput = A2(+ _elm_lang$html$Html$input,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$id('function-text'),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$style(+ {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'margin-top', _1: '5px'},+ _1: {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'width', _1: '100%'},+ _1: {ctor: '[]'}+ }+ }),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$type_('text'),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$placeholder('Filter (using regex)'),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Events$onInput(_ndmitchell$debug$Types$CallFilter),+ _1: {ctor: '[]'}+ }+ }+ }+ }+ },+ {ctor: '[]'});+ var functionNameSelector = A2(+ _elm_lang$html$Html$select,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$id('function-drop'),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$style(+ {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'width', _1: '100%'},+ _1: {ctor: '[]'}+ }),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Events$onInput(_ndmitchell$debug$Types$SelectFunction),+ _1: {ctor: '[]'}+ }+ }+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$option,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('(All)'),+ _1: {ctor: '[]'}+ }),+ _1: A2(+ _elm_lang$core$List$map,+ function (x) {+ return A2(+ _elm_lang$html$Html$option,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(x),+ _1: {ctor: '[]'}+ });+ },+ _elm_lang$core$Set$toList(+ _elm_lang$core$Set$fromList(+ _elm_lang$core$Array$toList(+ A2(+ _elm_lang$core$Array$map,+ function (x) {+ return x.name;+ },+ trace.functions)))))+ });+ var pagerButtonView = F2(+ function (index, isActive) {+ return A2(+ _elm_lang$html$Html$button,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$style(+ {+ ctor: '::',+ _0: {+ ctor: '_Tuple2',+ _0: 'font-weight',+ _1: isActive ? 'bold' : 'normal'+ },+ _1: {ctor: '[]'}+ }),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Events$onClick(+ _ndmitchell$debug$Types$CallPage(+ _ndmitchell$debug$Types$GoTo(index))),+ _1: {ctor: '[]'}+ }+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(+ A2(+ _elm_lang$core$Basics_ops['++'],+ _elm_lang$core$Basics$toString(index),+ isActive ? A2(+ _elm_lang$core$Basics_ops['++'],+ ' of ',+ _elm_lang$core$Basics$toString(+ _jschomay$elm_paginate$Paginate$totalPages(model.filteredCalls))) : '')),+ _1: {ctor: '[]'}+ });+ });+ var numButtons = A2(+ _elm_lang$html$Html$span,+ {ctor: '[]'},+ A3(_ndmitchell$debug$View$boundedPager, 3, pagerButtonView, model.filteredCalls));+ var nextButton = A2(+ _elm_lang$html$Html$button,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Events$onClick(+ _ndmitchell$debug$Types$CallPage(_ndmitchell$debug$Types$Next)),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$disabled(+ _jschomay$elm_paginate$Paginate$isLast(model.filteredCalls)),+ _1: {ctor: '[]'}+ }+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('>'),+ _1: {ctor: '[]'}+ });+ var prevButton = A2(+ _elm_lang$html$Html$button,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Events$onClick(+ _ndmitchell$debug$Types$CallPage(_ndmitchell$debug$Types$Prev)),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$disabled(+ _jschomay$elm_paginate$Paginate$isFirst(model.filteredCalls)),+ _1: {ctor: '[]'}+ }+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('<'),+ _1: {ctor: '[]'}+ });+ var callsPerPageSelector = A2(+ _elm_lang$html$Html$div,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$class('calls-per-page'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('Showing'),+ _1: {+ ctor: '::',+ _0: function () {+ var current = _jschomay$elm_paginate$Paginate$itemsPerPage(model.filteredCalls);+ return A2(+ _elm_lang$html$Html$select,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Events$onInput(_ndmitchell$debug$Types$ChangeCallPageSize),+ _1: {ctor: '[]'}+ },+ A2(+ _elm_lang$core$List$map,+ function (n) {+ return A2(+ _elm_lang$html$Html$option,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$value(+ _elm_lang$core$Basics$toString(n)),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$selected(+ _elm_lang$core$Native_Utils.eq(current, n)),+ _1: {ctor: '[]'}+ }+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(+ _elm_lang$core$Basics$toString(n)),+ _1: {ctor: '[]'}+ });+ },+ {+ ctor: '::',+ _0: 10,+ _1: {+ ctor: '::',+ _0: 20,+ _1: {+ ctor: '::',+ _0: 30,+ _1: {+ ctor: '::',+ _0: 40,+ _1: {+ ctor: '::',+ _0: 50,+ _1: {+ ctor: '::',+ _0: 100,+ _1: {+ ctor: '::',+ _0: 1000,+ _1: {ctor: '[]'}+ }+ }+ }+ }+ }+ }+ }));+ }(),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html$text('calls per page'),+ _1: {ctor: '[]'}+ }+ }+ });+ return A2(+ _elm_lang$html$Html$div,+ {ctor: '[]'},+ A2(+ _elm_lang$core$Basics_ops['++'],+ {+ ctor: '::',+ _0: functionNameSelector,+ _1: {+ ctor: '::',+ _0: nameFilterInput,+ _1: {+ ctor: '::',+ _0: prevButton,+ _1: {+ ctor: '::',+ _0: numButtons,+ _1: {+ ctor: '::',+ _0: nextButton,+ _1: {ctor: '[]'}+ }+ }+ }+ }+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$ul,+ {ctor: '[]'},+ A2(+ _elm_lang$core$List$map,+ callView,+ _jschomay$elm_paginate$Paginate$page(model.filteredCalls))),+ _1: {ctor: '[]'}+ }));+ });+var _ndmitchell$debug$View$viewCall = F3(+ function (model, trace, selectedCall) {+ var expander = F2(+ function (top, rest) {+ return A2(+ _elm_lang$html$Html$details,+ {+ ctor: '::',+ _0: A2(_elm_lang$html$Html_Attributes$attribute, 'open', ''),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$summary,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: top,+ _1: {ctor: '[]'}+ }),+ _1: rest+ });+ });+ var section = function (name) {+ return expander(+ A2(+ _elm_lang$html$Html$h2,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$style(+ {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'display', _1: 'inline-block'},+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text(name),+ _1: {ctor: '[]'}+ }));+ };+ var processedCall = A2(_elm_lang$core$Array$get, selectedCall, trace.calls);+ var fun = A2(+ _elm_lang$core$Maybe$map,+ function (processedCall) {+ return processedCall.call.callFunction;+ },+ processedCall);+ return A2(+ _elm_lang$html$Html$table,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$style(+ {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'height', _1: '100%'},+ _1: {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'width', _1: '100%'},+ _1: {ctor: '[]'}+ }+ }),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$tr,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$td,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$colspan(3),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$h1,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('Haskell Debugger'),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$tr,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$td,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$rowspan(3),+ _1: {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$style(+ {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'width', _1: '25%'},+ _1: {+ ctor: '::',+ _0: {ctor: '_Tuple2', _0: 'padding-right', _1: '40px'},+ _1: {ctor: '[]'}+ }+ }),+ _1: {ctor: '[]'}+ }+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$h2,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: _elm_lang$html$Html$text('Functions'),+ _1: {ctor: '[]'}+ }),+ _1: {+ ctor: '::',+ _0: A2(_ndmitchell$debug$View$viewCallList, model, trace),+ _1: {ctor: '[]'}+ }+ }),+ _1: {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$td,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ section,+ 'Source',+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$ul,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$id('function-source'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: A2(+ _ndmitchell$debug$View$viewSource,+ trace,+ A2(+ _elm_lang$core$Maybe$map,+ function (x) {+ return x.call;+ },+ processedCall)),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }+ }),+ _1: {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$tr,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$td,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ section,+ 'Variables',+ {+ ctor: '::',+ _0: A2(+ _ndmitchell$debug$View$viewVariables,+ trace,+ A2(+ _elm_lang$core$Maybe$map,+ function (x) {+ return x.call;+ },+ processedCall)),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$tr,+ {+ ctor: '::',+ _0: _elm_lang$html$Html_Attributes$id('function-depends-section'),+ _1: {ctor: '[]'}+ },+ {+ ctor: '::',+ _0: A2(+ _elm_lang$html$Html$td,+ {ctor: '[]'},+ {+ ctor: '::',+ _0: A2(+ section,+ 'Call stack',+ {+ ctor: '::',+ _0: A2(+ _ndmitchell$debug$View$viewCallStack,+ trace,+ A2(+ _elm_lang$core$Maybe$map,+ function (x) {+ return x.call;+ },+ processedCall)),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }),+ _1: {ctor: '[]'}+ }+ }+ }+ });+ });+var _ndmitchell$debug$View$view = function (model) {+ var _p29 = {+ ctor: '_Tuple2',+ _0: model.trace,+ _1: _ndmitchell$debug$Types$router(model.location)+ };+ if (_p29._0.ctor === 'Err') {+ return _elm_lang$html$Html$text(_p29._0._0);+ } else {+ return A3(_ndmitchell$debug$View$viewCall, model, _p29._0._0, _p29._1._0);+ }+};++var _ndmitchell$debug$Main$main = A2(+ _elm_lang$navigation$Navigation$programWithFlags,+ _ndmitchell$debug$Types$ChangeLocation,+ {+ init: F2(+ function (tr, loc) {+ var callsPerPage0 = 20;+ var unpackedTrace = A2(+ _ndmitchell$debug$Trace$traverseDebugTrace,+ function (_p0) {+ return A2(+ _elm_lang$core$Result$map,+ _ndmitchell$debug$View$processCall(tr),+ A2(+ _elm_lang$core$Json_Decode$decodeValue,+ _ndmitchell$debug$Trace$callDataDecoder(tr),+ _p0));+ },+ tr);+ return {+ ctor: '_Tuple2',+ _0: {+ trace: unpackedTrace,+ location: loc,+ selectedFunction: _elm_lang$core$Maybe$Nothing,+ callFilter: _elm_lang$core$Maybe$Nothing,+ filteredCalls: A2(+ _jschomay$elm_paginate$Paginate$fromList,+ callsPerPage0,+ A2(+ _elm_lang$core$Result$withDefault,+ {ctor: '[]'},+ A2(+ _elm_lang$core$Result$map,+ function (x) {+ return _elm_lang$core$Array$toIndexedList(x.calls);+ },+ unpackedTrace)))+ },+ _1: _elm_lang$core$Platform_Cmd$none+ };+ }),+ subscriptions: function (_p1) {+ return _elm_lang$core$Platform_Sub$none;+ },+ view: _ndmitchell$debug$View$view,+ update: _ndmitchell$debug$Update$update+ })(+ A2(+ _elm_lang$core$Json_Decode$andThen,+ function (calls) {+ return A2(+ _elm_lang$core$Json_Decode$andThen,+ function (functions) {+ return A2(+ _elm_lang$core$Json_Decode$andThen,+ function (variables) {+ return _elm_lang$core$Json_Decode$succeed(+ {calls: calls, functions: functions, variables: variables});+ },+ A2(+ _elm_lang$core$Json_Decode$field,+ 'variables',+ _elm_lang$core$Json_Decode$array(_elm_lang$core$Json_Decode$string)));+ },+ A2(+ _elm_lang$core$Json_Decode$field,+ 'functions',+ _elm_lang$core$Json_Decode$array(+ A2(+ _elm_lang$core$Json_Decode$andThen,+ function ($arguments) {+ return A2(+ _elm_lang$core$Json_Decode$andThen,+ function (name) {+ return A2(+ _elm_lang$core$Json_Decode$andThen,+ function (result) {+ return A2(+ _elm_lang$core$Json_Decode$andThen,+ function (source) {+ return _elm_lang$core$Json_Decode$succeed(+ {$arguments: $arguments, name: name, result: result, source: source});+ },+ A2(_elm_lang$core$Json_Decode$field, 'source', _elm_lang$core$Json_Decode$string));+ },+ A2(_elm_lang$core$Json_Decode$field, 'result', _elm_lang$core$Json_Decode$string));+ },+ A2(_elm_lang$core$Json_Decode$field, 'name', _elm_lang$core$Json_Decode$string));+ },+ A2(+ _elm_lang$core$Json_Decode$field,+ 'arguments',+ _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string))))));+ },+ A2(+ _elm_lang$core$Json_Decode$field,+ 'calls',+ _elm_lang$core$Json_Decode$array(_elm_lang$core$Json_Decode$value))));++var Elm = {};+Elm['Main'] = Elm['Main'] || {};+if (typeof _ndmitchell$debug$Main$main !== 'undefined') {+ _ndmitchell$debug$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);+
src/Debug/DebugTrace.hs view
@@ -47,10 +47,10 @@ import System.IO import System.Directory import Text.Show.Functions() -- Make sure the Show for functions instance exists-import qualified Language.Javascript.JQuery as JQuery import Web.Browser import Paths_debug import Text.PrettyPrint.ANSI.Leijen as PP hiding ((<$>), (<>))+import Prelude -- | Metadata about a function, used to drive the HTML view.@@ -119,14 +119,15 @@ -- | Save information about observed functions to the specified file, in HTML format. debugSaveTrace :: FilePath -> DebugTrace -> IO () debugSaveTrace file db = do- html <- TL.readFile =<< getDataFileName "html/debug.html"+ html <- TL.readFile =<< getDataFileName "html/debug.html" debug <- TL.readFile =<< getDataFileName "html/debug.js"- jquery <- TL.readFile =<< JQuery.file+ css <- TL.readFile =<< getDataFileName "html/debug.css" let trace = encodeToLazyText db let script a = "<script>\n" <> a <> "\n</script>"+ let style a = "<style>\n" <> a <> "\n</style>" let f x | "trace.js" `TL.isInfixOf` x = script ("var trace =\n" <> trace <> ";") | "debug.js" `TL.isInfixOf` x = script debug- | "code.jquery.com/jquery" `TL.isInfixOf` x = script jquery+ | "debug.css" `TL.isInfixOf` x = style css | otherwise = x TL.writeFile file $ TL.unlines $ map f $ TL.lines html
src/Debug/Hoed.hs view
@@ -60,6 +60,11 @@ , debugRun -- * Generate a trace , getDebugTrace+ -- * Trace commands+ , debugPrintTrace+ , debugJSONTrace+ , debugViewTrace+ , debugSaveTrace -- * Reexported from Hoed , Observable(..) , observe@@ -73,7 +78,7 @@ import Data.Generics.Uniplate.Data import Data.Graph.Libgraph import Data.Hashable-import qualified Data.HashMap.Monoidal as HM+import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HMS import qualified Data.Map.Strict as Map import qualified Data.HashSet as Set@@ -88,12 +93,17 @@ import Debug.DebugTrace as D (CallData (..), DebugTrace (..), Function (..),- debugViewTrace+ debugViewTrace,+ debugPrintTrace,+ debugJSONTrace,+ debugViewTrace,+ debugSaveTrace ) import GHC.Exts (IsList (..)) import Language.Haskell.TH import Language.Haskell.TH.Syntax import System.Clock+import Prelude {-# ANN module ("hlint: ignore Redundant bracket" :: String) #-} @@ -119,8 +129,6 @@ putStrLn $ "=== Debug Trace (" ++ show compTime ++ " seconds) ===" return result -type a :-> b = HM.MonoidalHashMap a b- data HoedFunctionKey = HoedFunctionKey { label :: !Text , arity :: !Int@@ -197,9 +205,9 @@ convert :: CompTree -> DebugTrace convert hoedCompTree = DebugTrace {..} where- hoedFunctionCalls :: Hashed HoedFunctionKey :-> [(HoedCallKey, HoedCallDetails)]+ hoedFunctionCalls :: HashMap (Hashed HoedFunctionKey) [(HoedCallKey, HoedCallDetails)] hoedFunctionCalls =- HM.fromList+ HMS.fromListWith (<>) [ (fnKey, [(callKey, callDetails)]) | Just (fnKey, callKey, callDetails) <- map (extractHoedCall (annotateCompTree hoedCompTree)) (vertices hoedCompTree)
src/Debug/Variables.hs view
@@ -200,22 +200,26 @@ when (show val /= "<function>") $ do -- these make the variable list long without providing useful info var <- atomicModifyIORef refVariables $ addVariable val name' <- unShadowName ref $ pack name- atomicModifyIORef ref $ \v -> ((name', var) :v, ())+ whenJust name' (\n -> atomicModifyIORef ref $ \v -> ((n, var) :v, ())) return val --- | If a name is already being used, find the next available name by adding ' (prime) chars until+-- | If a name is already used, find the next available name by adding ' (prime) chars until -- the resulting name is unique-unShadowName :: IORef [(Text, Var)] -> Text -> IO Text+unShadowName :: IORef [(Text, Var)] -> Text -> IO (Maybe Text) unShadowName ioRef t = do pairs <- readIORef ioRef let matches = filter (isPrefixPrime t) $ map fst pairs+ let shadowedLimit = 3 if not (null matches) then do let lengths = map T.length matches let zipped = zip matches lengths- let maxName = fst $ fromJust $ find (\p -> snd p == maximum lengths) zipped- return $ maxName `T.append` "'"- else return t+ let maxLen = maximum lengths+ let maxName = fst $ fromJust $ find (\p -> snd p == maxLen) zipped+ case length matches of -- --i.e., case (the number of (')s)+ n | n > shadowedLimit -> return Nothing+ _ -> return $ Just $ maxName `T.append` "'"+ else return $ Just t -- | Is the second string equal to the first plus some number of ' (prime) characters? -- | e.g. x `isPrefixPrime` x' == true, x isPrefixPrime x'' == True, but x isPrefixPrime xs == False@@ -234,7 +238,6 @@ let askSig x = find (\case SigD y _ -> x == y; _ -> False) decs mapM (adjustDec askSig) decs - adjustDec :: (Name -> Maybe Dec) -> Dec -> Q Dec -- try and shove in a "_ =>" if we can, to capture necessary Show instances adjustDec askSig x@(SigD name ty@(ForallT vars ctxt typ))@@ -269,7 +272,8 @@ appsFromClause :: Name -> Clause -> Q Clause appsFromClause tag cl@(Clause pats body decs) = do newBody <- appsFromBody tag body- return $ Clause pats newBody decs+ newDecs <- mapM (appsFromDec tag) decs+ return $ Clause pats newBody newDecs appsFromBody :: Name -> Body -> Q Body appsFromBody _ b@(GuardedB _) = return b -- TODO: implement guards@@ -302,7 +306,8 @@ appsFromDec tag d@(ValD pat body dec) = do newBody <- appsFromBody tag body return $ ValD pat newBody dec-appsFromDec tag d@(FunD name subClauses) = return d+appsFromDec tag d@(FunD name subClauses) =+ FunD name <$> traverse (appsFromClause tag) subClauses appsFromDec _ d = return d appsFromMatch :: Name -> Match -> Q Match
test/Hoed.hs view
@@ -13,7 +13,6 @@ import Control.Exception.Extra import Debug.Hoed-import Debug.DebugTrace import Control.Monad import Data.Aeson import qualified Data.ByteString.Lazy as B
test/Variables.hs view
@@ -34,6 +34,7 @@ , ("++'", "\"hklls\"") , ("gt", "\"skll\"") , ("lt", "\"ae\"")+ , ("partition", "(\"ae\",\"skll\")") , ("quicksort", "\"ae\"") , ("quicksort'", "\"klls\"") , ("x", "'h'")@@ -180,6 +181,48 @@ , ("xs'", "[4]") , ("y", "[7,8,9]") ] +debug [d|+ where_1 :: Int -> Int -> Int+ where_1 x y = bar x + bar y+ where bar z = z * z+ |]++where_1_vars :: [(Text, Text)]+where_1_vars =+ [ ("$arg1", "5")+ , ("$arg2", "7")+ , ("$result", "74")+ , ("*", "25")+ , ("*'", "49")+ , ("+", "74")+ , ("bar", "25")+ , ("bar'", "49")+ , ("x", "5")+ , ("y", "7")+ , ("z", "5")+ , ("z'", "7") ]++debug [d|+ where_2 :: [Int] -> [Int]+ where_2 xs = fmap f xs where+ f x = x * x+ |]++where_2_vars :: [(Text, Text)]+where_2_vars =+ [ ("$arg1", "[1,2,3,4,5,6,7,8,9]")+ , ("$result", "[1,4,9,16,25,36,49,64,81]")+ , ("*", "1")+ , ("*'", "4")+ , ("*''", "9")+ , ("*'''", "16")+ , ("fmap", "[1,4,9,16,25,36,49,64,81]")+ , ("x", "1")+ , ("x'", "2")+ , ("x''", "3")+ , ("x'''", "4")+ , ("xs", "[1,2,3,4,5,6,7,8,9]") ]+ explicit :: (Ord a, Show a) => [a] -> [a] explicit = quicksort' where@@ -234,7 +277,9 @@ , ("lcm_gcd_log", lcm_gcd_log_vars) , ("case_test", case_test_vars) , ("twoXs", twoXs_vars)- , ("manyXs", manyXs_vars) ]+ , ("manyXs", manyXs_vars)+ , ("where_1", where_1_vars)+ , ("where_2", where_2_vars) ] main = do createDirectoryIfMissing True "output"@@ -244,6 +289,8 @@ testExample "case_test" (case_test [2,3,4] [7,8,9]) False testExample "twoXs" (twoXs [2,3,4] [7,8,9]) False testExample "manyXs" (manyXs [2,3,4] [7,8,9]) False+ testExample "where_1" (where_1 5 7) False+ testExample "where_2" (where_2 [1,2,3,4,5,6,7,8,9]) False --skipping test of quicksortBy for now, as it looks like $arg1 is missing testExample "quicksortBy" (quicksortBy (<) "haskell") True