@@ -0,0 +1,9626 @@
1+(function(scope){
2+'use strict';
3+
4+function F(arity, fun, wrapper) {
5+ wrapper.a = arity;
6+ wrapper.f = fun;
7+ return wrapper;
8+}
9+
10+function F2(fun) {
11+ return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
12+}
13+function F3(fun) {
14+ return F(3, fun, function(a) {
15+ return function(b) { return function(c) { return fun(a, b, c); }; };
16+ });
17+}
18+function F4(fun) {
19+ return F(4, fun, function(a) { return function(b) { return function(c) {
20+ return function(d) { return fun(a, b, c, d); }; }; };
21+ });
22+}
23+function F5(fun) {
24+ return F(5, fun, function(a) { return function(b) { return function(c) {
25+ return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
26+ });
27+}
28+function F6(fun) {
29+ return F(6, fun, function(a) { return function(b) { return function(c) {
30+ return function(d) { return function(e) { return function(f) {
31+ return fun(a, b, c, d, e, f); }; }; }; }; };
32+ });
33+}
34+function F7(fun) {
35+ return F(7, fun, function(a) { return function(b) { return function(c) {
36+ return function(d) { return function(e) { return function(f) {
37+ return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
38+ });
39+}
40+function F8(fun) {
41+ return F(8, fun, function(a) { return function(b) { return function(c) {
42+ return function(d) { return function(e) { return function(f) {
43+ return function(g) { return function(h) {
44+ return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
45+ });
46+}
47+function F9(fun) {
48+ return F(9, fun, function(a) { return function(b) { return function(c) {
49+ return function(d) { return function(e) { return function(f) {
50+ return function(g) { return function(h) { return function(i) {
51+ return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
52+ });
53+}
54+
55+function A2(fun, a, b) {
56+ return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
57+}
58+function A3(fun, a, b, c) {
59+ return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
60+}
61+function A4(fun, a, b, c, d) {
62+ return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
63+}
64+function A5(fun, a, b, c, d, e) {
65+ return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
66+}
67+function A6(fun, a, b, c, d, e, f) {
68+ return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
69+}
70+function A7(fun, a, b, c, d, e, f, g) {
71+ return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
72+}
73+function A8(fun, a, b, c, d, e, f, g, h) {
74+ return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
75+}
76+function A9(fun, a, b, c, d, e, f, g, h, i) {
77+ return fun.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
78+}
79+
80+console.warn('Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.');
81+
82+
83+var _JsArray_empty = [];
84+
85+function _JsArray_singleton(value)
86+{
87+ return [value];
88+}
89+
90+function _JsArray_length(array)
91+{
92+ return array.length;
93+}
94+
95+var _JsArray_initialize = F3(function(size, offset, func)
96+{
97+ var result = new Array(size);
98+
99+ for (var i = 0; i < size; i++)
100+ {
101+ result[i] = func(offset + i);
102+ }
103+
104+ return result;
105+});
106+
107+var _JsArray_initializeFromList = F2(function (max, ls)
108+{
109+ var result = new Array(max);
110+
111+ for (var i = 0; i < max && ls.b; i++)
112+ {
113+ result[i] = ls.a;
114+ ls = ls.b;
115+ }
116+
117+ result.length = i;
118+ return _Utils_Tuple2(result, ls);
119+});
120+
121+var _JsArray_unsafeGet = F2(function(index, array)
122+{
123+ return array[index];
124+});
125+
126+var _JsArray_unsafeSet = F3(function(index, value, array)
127+{
128+ var length = array.length;
129+ var result = new Array(length);
130+
131+ for (var i = 0; i < length; i++)
132+ {
133+ result[i] = array[i];
134+ }
135+
136+ result[index] = value;
137+ return result;
138+});
139+
140+var _JsArray_push = F2(function(value, array)
141+{
142+ var length = array.length;
143+ var result = new Array(length + 1);
144+
145+ for (var i = 0; i < length; i++)
146+ {
147+ result[i] = array[i];
148+ }
149+
150+ result[length] = value;
151+ return result;
152+});
153+
154+var _JsArray_foldl = F3(function(func, acc, array)
155+{
156+ var length = array.length;
157+
158+ for (var i = 0; i < length; i++)
159+ {
160+ acc = A2(func, array[i], acc);
161+ }
162+
163+ return acc;
164+});
165+
166+var _JsArray_foldr = F3(function(func, acc, array)
167+{
168+ for (var i = array.length - 1; i >= 0; i--)
169+ {
170+ acc = A2(func, array[i], acc);
171+ }
172+
173+ return acc;
174+});
175+
176+var _JsArray_map = F2(function(func, array)
177+{
178+ var length = array.length;
179+ var result = new Array(length);
180+
181+ for (var i = 0; i < length; i++)
182+ {
183+ result[i] = func(array[i]);
184+ }
185+
186+ return result;
187+});
188+
189+var _JsArray_indexedMap = F3(function(func, offset, array)
190+{
191+ var length = array.length;
192+ var result = new Array(length);
193+
194+ for (var i = 0; i < length; i++)
195+ {
196+ result[i] = A2(func, offset + i, array[i]);
197+ }
198+
199+ return result;
200+});
201+
202+var _JsArray_slice = F3(function(from, to, array)
203+{
204+ return array.slice(from, to);
205+});
206+
207+var _JsArray_appendN = F3(function(n, dest, source)
208+{
209+ var destLen = dest.length;
210+ var itemsToCopy = n - destLen;
211+
212+ if (itemsToCopy > source.length)
213+ {
214+ itemsToCopy = source.length;
215+ }
216+
217+ var size = destLen + itemsToCopy;
218+ var result = new Array(size);
219+
220+ for (var i = 0; i < destLen; i++)
221+ {
222+ result[i] = dest[i];
223+ }
224+
225+ for (var i = 0; i < itemsToCopy; i++)
226+ {
227+ result[i + destLen] = source[i];
228+ }
229+
230+ return result;
231+});
232+
233+
234+
235+// LOG
236+
237+
238+var _Debug_log = F2(function(tag, value)
239+{
240+ console.log(tag + ': ' + _Debug_toString(value));
241+ return value;
242+});
243+
244+
245+// TODOS
246+
247+function _Debug_todo(moduleName, region)
248+{
249+ return function(message) {
250+ _Debug_crash(8, moduleName, region, message);
251+ };
252+}
253+
254+function _Debug_todoCase(moduleName, region, value)
255+{
256+ return function(message) {
257+ _Debug_crash(9, moduleName, region, value, message);
258+ };
259+}
260+
261+
262+// TO STRING
263+
264+
265+function _Debug_toString(value)
266+{
267+ return _Debug_toAnsiString(false, value);
268+}
269+
270+function _Debug_toAnsiString(ansi, value)
271+{
272+ if (typeof value === 'function')
273+ {
274+ return _Debug_internalColor(ansi, '<function>');
275+ }
276+
277+ if (typeof value === 'boolean')
278+ {
279+ return _Debug_ctorColor(ansi, value ? 'True' : 'False');
280+ }
281+
282+ if (typeof value === 'number')
283+ {
284+ return _Debug_numberColor(ansi, value + '');
285+ }
286+
287+ if (value instanceof String)
288+ {
289+ return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
290+ }
291+
292+ if (typeof value === 'string')
293+ {
294+ return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
295+ }
296+
297+ if (typeof value === 'object' && '$' in value)
298+ {
299+ var tag = value.$;
300+
301+ if (typeof tag === 'number')
302+ {
303+ return _Debug_internalColor(ansi, '<internals>');
304+ }
305+
306+ if (tag[0] === '#')
307+ {
308+ var output = [];
309+ for (var k in value)
310+ {
311+ if (k === '$') continue;
312+ output.push(_Debug_toAnsiString(ansi, value[k]));
313+ }
314+ return '(' + output.join(',') + ')';
315+ }
316+
317+ if (tag === 'Set_elm_builtin')
318+ {
319+ return _Debug_ctorColor(ansi, 'Set')
320+ + _Debug_fadeColor(ansi, '.fromList') + ' '
321+ + _Debug_toAnsiString(ansi, $elm$core$Set$toList(value));
322+ }
323+
324+ if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
325+ {
326+ return _Debug_ctorColor(ansi, 'Dict')
327+ + _Debug_fadeColor(ansi, '.fromList') + ' '
328+ + _Debug_toAnsiString(ansi, $elm$core$Dict$toList(value));
329+ }
330+
331+ if (tag === 'Array_elm_builtin')
332+ {
333+ return _Debug_ctorColor(ansi, 'Array')
334+ + _Debug_fadeColor(ansi, '.fromList') + ' '
335+ + _Debug_toAnsiString(ansi, $elm$core$Array$toList(value));
336+ }
337+
338+ if (tag === '::' || tag === '[]')
339+ {
340+ var output = '[';
341+
342+ value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
343+
344+ for (; value.b; value = value.b) // WHILE_CONS
345+ {
346+ output += ',' + _Debug_toAnsiString(ansi, value.a);
347+ }
348+ return output + ']';
349+ }
350+
351+ var output = '';
352+ for (var i in value)
353+ {
354+ if (i === '$') continue;
355+ var str = _Debug_toAnsiString(ansi, value[i]);
356+ var c0 = str[0];
357+ var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
358+ output += ' ' + (parenless ? str : '(' + str + ')');
359+ }
360+ return _Debug_ctorColor(ansi, tag) + output;
361+ }
362+
363+ if (typeof DataView === 'function' && value instanceof DataView)
364+ {
365+ return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>');
366+ }
367+
368+ if (typeof File !== 'undefined' && value instanceof File)
369+ {
370+ return _Debug_internalColor(ansi, '<' + value.name + '>');
371+ }
372+
373+ if (typeof value === 'object')
374+ {
375+ var output = [];
376+ for (var key in value)
377+ {
378+ var field = key[0] === '_' ? key.slice(1) : key;
379+ output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
380+ }
381+ if (output.length === 0)
382+ {
383+ return '{}';
384+ }
385+ return '{ ' + output.join(', ') + ' }';
386+ }
387+
388+ return _Debug_internalColor(ansi, '<internals>');
389+}
390+
391+function _Debug_addSlashes(str, isChar)
392+{
393+ var s = str
394+ .replace(/\\/g, '\\\\')
395+ .replace(/\n/g, '\\n')
396+ .replace(/\t/g, '\\t')
397+ .replace(/\r/g, '\\r')
398+ .replace(/\v/g, '\\v')
399+ .replace(/\0/g, '\\0');
400+
401+ if (isChar)
402+ {
403+ return s.replace(/\'/g, '\\\'');
404+ }
405+ else
406+ {
407+ return s.replace(/\"/g, '\\"');
408+ }
409+}
410+
411+function _Debug_ctorColor(ansi, string)
412+{
413+ return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
414+}
415+
416+function _Debug_numberColor(ansi, string)
417+{
418+ return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
419+}
420+
421+function _Debug_stringColor(ansi, string)
422+{
423+ return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
424+}
425+
426+function _Debug_charColor(ansi, string)
427+{
428+ return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
429+}
430+
431+function _Debug_fadeColor(ansi, string)
432+{
433+ return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
434+}
435+
436+function _Debug_internalColor(ansi, string)
437+{
438+ return ansi ? '\x1b[36m' + string + '\x1b[0m' : string;
439+}
440+
441+function _Debug_toHexDigit(n)
442+{
443+ return String.fromCharCode(n < 10 ? 48 + n : 55 + n);
444+}
445+
446+
447+// CRASH
448+
449+
450+
451+
452+function _Debug_crash(identifier, fact1, fact2, fact3, fact4)
453+{
454+ switch(identifier)
455+ {
456+ case 0:
457+ throw new Error('What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.');
458+
459+ case 1:
460+ throw new Error('Browser.application programs cannot handle URLs like this:\n\n ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.');
461+
462+ case 2:
463+ var jsonErrorString = fact1;
464+ throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString);
465+
466+ case 3:
467+ var portName = fact1;
468+ throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
469+
470+ case 4:
471+ var portName = fact1;
472+ var problem = fact2;
473+ throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
474+
475+ case 5:
476+ throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.');
477+
478+ case 6:
479+ var moduleName = fact1;
480+ throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!');
481+
482+ case 8:
483+ var moduleName = fact1;
484+ var region = fact2;
485+ var message = fact3;
486+ throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
487+
488+ case 9:
489+ var moduleName = fact1;
490+ var region = fact2;
491+ var value = fact3;
492+ var message = fact4;
493+ throw new Error(
494+ 'TODO in module `' + moduleName + '` from the `case` expression '
495+ + _Debug_regionToString(region) + '\n\nIt received the following value:\n\n '
496+ + _Debug_toString(value).replace('\n', '\n ')
497+ + '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ')
498+ );
499+
500+ case 10:
501+ throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
502+
503+ case 11:
504+ throw new Error('Cannot perform mod 0. Division by zero error.');
505+ }
506+}
507+
508+function _Debug_regionToString(region)
509+{
510+ if (region.start.line === region.end.line)
511+ {
512+ return 'on line ' + region.start.line;
513+ }
514+ return 'on lines ' + region.start.line + ' through ' + region.end.line;
515+}
516+
517+
518+
519+// EQUALITY
520+
521+function _Utils_eq(x, y)
522+{
523+ for (
524+ var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
525+ isEqual && (pair = stack.pop());
526+ isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
527+ )
528+ {}
529+
530+ return isEqual;
531+}
532+
533+function _Utils_eqHelp(x, y, depth, stack)
534+{
535+ if (x === y)
536+ {
537+ return true;
538+ }
539+
540+ if (typeof x !== 'object' || x === null || y === null)
541+ {
542+ typeof x === 'function' && _Debug_crash(5);
543+ return false;
544+ }
545+
546+ if (depth > 100)
547+ {
548+ stack.push(_Utils_Tuple2(x,y));
549+ return true;
550+ }
551+
552+ /**/
553+ if (x.$ === 'Set_elm_builtin')
554+ {
555+ x = $elm$core$Set$toList(x);
556+ y = $elm$core$Set$toList(y);
557+ }
558+ if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
559+ {
560+ x = $elm$core$Dict$toList(x);
561+ y = $elm$core$Dict$toList(y);
562+ }
563+ //*/
564+
565+ /**_UNUSED/
566+ if (x.$ < 0)
567+ {
568+ x = $elm$core$Dict$toList(x);
569+ y = $elm$core$Dict$toList(y);
570+ }
571+ //*/
572+
573+ for (var key in x)
574+ {
575+ if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
576+ {
577+ return false;
578+ }
579+ }
580+ return true;
581+}
582+
583+var _Utils_equal = F2(_Utils_eq);
584+var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
585+
586+
587+
588+// COMPARISONS
589+
590+// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
591+// the particular integer values assigned to LT, EQ, and GT.
592+
593+function _Utils_cmp(x, y, ord)
594+{
595+ if (typeof x !== 'object')
596+ {
597+ return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
598+ }
599+
600+ /**/
601+ if (x instanceof String)
602+ {
603+ var a = x.valueOf();
604+ var b = y.valueOf();
605+ return a === b ? 0 : a < b ? -1 : 1;
606+ }
607+ //*/
608+
609+ /**_UNUSED/
610+ if (typeof x.$ === 'undefined')
611+ //*/
612+ /**/
613+ if (x.$[0] === '#')
614+ //*/
615+ {
616+ return (ord = _Utils_cmp(x.a, y.a))
617+ ? ord
618+ : (ord = _Utils_cmp(x.b, y.b))
619+ ? ord
620+ : _Utils_cmp(x.c, y.c);
621+ }
622+
623+ // traverse conses until end of a list or a mismatch
624+ for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
625+ return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
626+}
627+
628+var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
629+var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
630+var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
631+var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
632+
633+var _Utils_compare = F2(function(x, y)
634+{
635+ var n = _Utils_cmp(x, y);
636+ return n < 0 ? $elm$core$Basics$LT : n ? $elm$core$Basics$GT : $elm$core$Basics$EQ;
637+});
638+
639+
640+// COMMON VALUES
641+
642+var _Utils_Tuple0 = { $: '#0' };
643+
644+function _Utils_Tuple2(a, b) { return { $: '#2', a: a, b: b }; }
645+
646+function _Utils_Tuple3(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
647+
648+function _Utils_chr(c) { return new String(c); }
649+
650+
651+// RECORDS
652+
653+function _Utils_update(oldRecord, updatedFields)
654+{
655+ var newRecord = {};
656+
657+ for (var key in oldRecord)
658+ {
659+ newRecord[key] = oldRecord[key];
660+ }
661+
662+ for (var key in updatedFields)
663+ {
664+ newRecord[key] = updatedFields[key];
665+ }
666+
667+ return newRecord;
668+}
669+
670+
671+// APPEND
672+
673+var _Utils_append = F2(_Utils_ap);
674+
675+function _Utils_ap(xs, ys)
676+{
677+ // append Strings
678+ if (typeof xs === 'string')
679+ {
680+ return xs + ys;
681+ }
682+
683+ // append Lists
684+ if (!xs.b)
685+ {
686+ return ys;
687+ }
688+ var root = _List_Cons(xs.a, ys);
689+ xs = xs.b
690+ for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
691+ {
692+ curr = curr.b = _List_Cons(xs.a, ys);
693+ }
694+ return root;
695+}
696+
697+
698+
699+var _List_Nil = { $: '[]' };
700+
701+function _List_Cons(hd, tl) { return { $: '::', a: hd, b: tl }; }
702+
703+
704+var _List_cons = F2(_List_Cons);
705+
706+function _List_fromArray(arr)
707+{
708+ var out = _List_Nil;
709+ for (var i = arr.length; i--; )
710+ {
711+ out = _List_Cons(arr[i], out);
712+ }
713+ return out;
714+}
715+
716+function _List_toArray(xs)
717+{
718+ for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
719+ {
720+ out.push(xs.a);
721+ }
722+ return out;
723+}
724+
725+var _List_map2 = F3(function(f, xs, ys)
726+{
727+ for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
728+ {
729+ arr.push(A2(f, xs.a, ys.a));
730+ }
731+ return _List_fromArray(arr);
732+});
733+
734+var _List_map3 = F4(function(f, xs, ys, zs)
735+{
736+ for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
737+ {
738+ arr.push(A3(f, xs.a, ys.a, zs.a));
739+ }
740+ return _List_fromArray(arr);
741+});
742+
743+var _List_map4 = F5(function(f, ws, xs, ys, zs)
744+{
745+ for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
746+ {
747+ arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
748+ }
749+ return _List_fromArray(arr);
750+});
751+
752+var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
753+{
754+ for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
755+ {
756+ arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
757+ }
758+ return _List_fromArray(arr);
759+});
760+
761+var _List_sortBy = F2(function(f, xs)
762+{
763+ return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
764+ return _Utils_cmp(f(a), f(b));
765+ }));
766+});
767+
768+var _List_sortWith = F2(function(f, xs)
769+{
770+ return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
771+ var ord = A2(f, a, b);
772+ return ord === $elm$core$Basics$EQ ? 0 : ord === $elm$core$Basics$LT ? -1 : 1;
773+ }));
774+});
775+
776+
777+
778+// MATH
779+
780+var _Basics_add = F2(function(a, b) { return a + b; });
781+var _Basics_sub = F2(function(a, b) { return a - b; });
782+var _Basics_mul = F2(function(a, b) { return a * b; });
783+var _Basics_fdiv = F2(function(a, b) { return a / b; });
784+var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
785+var _Basics_pow = F2(Math.pow);
786+
787+var _Basics_remainderBy = F2(function(b, a) { return a % b; });
788+
789+// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
790+var _Basics_modBy = F2(function(modulus, x)
791+{
792+ var answer = x % modulus;
793+ return modulus === 0
794+ ? _Debug_crash(11)
795+ :
796+ ((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
797+ ? answer + modulus
798+ : answer;
799+});
800+
801+
802+// TRIGONOMETRY
803+
804+var _Basics_pi = Math.PI;
805+var _Basics_e = Math.E;
806+var _Basics_cos = Math.cos;
807+var _Basics_sin = Math.sin;
808+var _Basics_tan = Math.tan;
809+var _Basics_acos = Math.acos;
810+var _Basics_asin = Math.asin;
811+var _Basics_atan = Math.atan;
812+var _Basics_atan2 = F2(Math.atan2);
813+
814+
815+// MORE MATH
816+
817+function _Basics_toFloat(x) { return x; }
818+function _Basics_truncate(n) { return n | 0; }
819+function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
820+
821+var _Basics_ceiling = Math.ceil;
822+var _Basics_floor = Math.floor;
823+var _Basics_round = Math.round;
824+var _Basics_sqrt = Math.sqrt;
825+var _Basics_log = Math.log;
826+var _Basics_isNaN = isNaN;
827+
828+
829+// BOOLEANS
830+
831+function _Basics_not(bool) { return !bool; }
832+var _Basics_and = F2(function(a, b) { return a && b; });
833+var _Basics_or = F2(function(a, b) { return a || b; });
834+var _Basics_xor = F2(function(a, b) { return a !== b; });
835+
836+
837+
838+var _String_cons = F2(function(chr, str)
839+{
840+ return chr + str;
841+});
842+
843+function _String_uncons(string)
844+{
845+ var word = string.charCodeAt(0);
846+ return !isNaN(word)
847+ ? $elm$core$Maybe$Just(
848+ 0xD800 <= word && word <= 0xDBFF
849+ ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2))
850+ : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1))
851+ )
852+ : $elm$core$Maybe$Nothing;
853+}
854+
855+var _String_append = F2(function(a, b)
856+{
857+ return a + b;
858+});
859+
860+function _String_length(str)
861+{
862+ return str.length;
863+}
864+
865+var _String_map = F2(function(func, string)
866+{
867+ var len = string.length;
868+ var array = new Array(len);
869+ var i = 0;
870+ while (i < len)
871+ {
872+ var word = string.charCodeAt(i);
873+ if (0xD800 <= word && word <= 0xDBFF)
874+ {
875+ array[i] = func(_Utils_chr(string[i] + string[i+1]));
876+ i += 2;
877+ continue;
878+ }
879+ array[i] = func(_Utils_chr(string[i]));
880+ i++;
881+ }
882+ return array.join('');
883+});
884+
885+var _String_filter = F2(function(isGood, str)
886+{
887+ var arr = [];
888+ var len = str.length;
889+ var i = 0;
890+ while (i < len)
891+ {
892+ var char = str[i];
893+ var word = str.charCodeAt(i);
894+ i++;
895+ if (0xD800 <= word && word <= 0xDBFF)
896+ {
897+ char += str[i];
898+ i++;
899+ }
900+
901+ if (isGood(_Utils_chr(char)))
902+ {
903+ arr.push(char);
904+ }
905+ }
906+ return arr.join('');
907+});
908+
909+function _String_reverse(str)
910+{
911+ var len = str.length;
912+ var arr = new Array(len);
913+ var i = 0;
914+ while (i < len)
915+ {
916+ var word = str.charCodeAt(i);
917+ if (0xD800 <= word && word <= 0xDBFF)
918+ {
919+ arr[len - i] = str[i + 1];
920+ i++;
921+ arr[len - i] = str[i - 1];
922+ i++;
923+ }
924+ else
925+ {
926+ arr[len - i] = str[i];
927+ i++;
928+ }
929+ }
930+ return arr.join('');
931+}
932+
933+var _String_foldl = F3(function(func, state, string)
934+{
935+ var len = string.length;
936+ var i = 0;
937+ while (i < len)
938+ {
939+ var char = string[i];
940+ var word = string.charCodeAt(i);
941+ i++;
942+ if (0xD800 <= word && word <= 0xDBFF)
943+ {
944+ char += string[i];
945+ i++;
946+ }
947+ state = A2(func, _Utils_chr(char), state);
948+ }
949+ return state;
950+});
951+
952+var _String_foldr = F3(function(func, state, string)
953+{
954+ var i = string.length;
955+ while (i--)
956+ {
957+ var char = string[i];
958+ var word = string.charCodeAt(i);
959+ if (0xDC00 <= word && word <= 0xDFFF)
960+ {
961+ i--;
962+ char = string[i] + char;
963+ }
964+ state = A2(func, _Utils_chr(char), state);
965+ }
966+ return state;
967+});
968+
969+var _String_split = F2(function(sep, str)
970+{
971+ return str.split(sep);
972+});
973+
974+var _String_join = F2(function(sep, strs)
975+{
976+ return strs.join(sep);
977+});
978+
979+var _String_slice = F3(function(start, end, str) {
980+ return str.slice(start, end);
981+});
982+
983+function _String_trim(str)
984+{
985+ return str.trim();
986+}
987+
988+function _String_trimLeft(str)
989+{
990+ return str.replace(/^\s+/, '');
991+}
992+
993+function _String_trimRight(str)
994+{
995+ return str.replace(/\s+$/, '');
996+}
997+
998+function _String_words(str)
999+{
1000+ return _List_fromArray(str.trim().split(/\s+/g));
1001+}
1002+
1003+function _String_lines(str)
1004+{
1005+ return _List_fromArray(str.split(/\r\n|\r|\n/g));
1006+}
1007+
1008+function _String_toUpper(str)
1009+{
1010+ return str.toUpperCase();
1011+}
1012+
1013+function _String_toLower(str)
1014+{
1015+ return str.toLowerCase();
1016+}
1017+
1018+var _String_any = F2(function(isGood, string)
1019+{
1020+ var i = string.length;
1021+ while (i--)
1022+ {
1023+ var char = string[i];
1024+ var word = string.charCodeAt(i);
1025+ if (0xDC00 <= word && word <= 0xDFFF)
1026+ {
1027+ i--;
1028+ char = string[i] + char;
1029+ }
1030+ if (isGood(_Utils_chr(char)))
1031+ {
1032+ return true;
1033+ }
1034+ }
1035+ return false;
1036+});
1037+
1038+var _String_all = F2(function(isGood, string)
1039+{
1040+ var i = string.length;
1041+ while (i--)
1042+ {
1043+ var char = string[i];
1044+ var word = string.charCodeAt(i);
1045+ if (0xDC00 <= word && word <= 0xDFFF)
1046+ {
1047+ i--;
1048+ char = string[i] + char;
1049+ }
1050+ if (!isGood(_Utils_chr(char)))
1051+ {
1052+ return false;
1053+ }
1054+ }
1055+ return true;
1056+});
1057+
1058+var _String_contains = F2(function(sub, str)
1059+{
1060+ return str.indexOf(sub) > -1;
1061+});
1062+
1063+var _String_startsWith = F2(function(sub, str)
1064+{
1065+ return str.indexOf(sub) === 0;
1066+});
1067+
1068+var _String_endsWith = F2(function(sub, str)
1069+{
1070+ return str.length >= sub.length &&
1071+ str.lastIndexOf(sub) === str.length - sub.length;
1072+});
1073+
1074+var _String_indexes = F2(function(sub, str)
1075+{
1076+ var subLen = sub.length;
1077+
1078+ if (subLen < 1)
1079+ {
1080+ return _List_Nil;
1081+ }
1082+
1083+ var i = 0;
1084+ var is = [];
1085+
1086+ while ((i = str.indexOf(sub, i)) > -1)
1087+ {
1088+ is.push(i);
1089+ i = i + subLen;
1090+ }
1091+
1092+ return _List_fromArray(is);
1093+});
1094+
1095+
1096+// TO STRING
1097+
1098+function _String_fromNumber(number)
1099+{
1100+ return number + '';
1101+}
1102+
1103+
1104+// INT CONVERSIONS
1105+
1106+function _String_toInt(str)
1107+{
1108+ var total = 0;
1109+ var code0 = str.charCodeAt(0);
1110+ var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;
1111+
1112+ for (var i = start; i < str.length; ++i)
1113+ {
1114+ var code = str.charCodeAt(i);
1115+ if (code < 0x30 || 0x39 < code)
1116+ {
1117+ return $elm$core$Maybe$Nothing;
1118+ }
1119+ total = 10 * total + code - 0x30;
1120+ }
1121+
1122+ return i == start
1123+ ? $elm$core$Maybe$Nothing
1124+ : $elm$core$Maybe$Just(code0 == 0x2D ? -total : total);
1125+}
1126+
1127+
1128+// FLOAT CONVERSIONS
1129+
1130+function _String_toFloat(s)
1131+{
1132+ // check if it is a hex, octal, or binary number
1133+ if (s.length === 0 || /[\sxbo]/.test(s))
1134+ {
1135+ return $elm$core$Maybe$Nothing;
1136+ }
1137+ var n = +s;
1138+ // faster isNaN check
1139+ return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing;
1140+}
1141+
1142+function _String_fromList(chars)
1143+{
1144+ return _List_toArray(chars).join('');
1145+}
1146+
1147+
1148+
1149+
1150+function _Char_toCode(char)
1151+{
1152+ var code = char.charCodeAt(0);
1153+ if (0xD800 <= code && code <= 0xDBFF)
1154+ {
1155+ return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000
1156+ }
1157+ return code;
1158+}
1159+
1160+function _Char_fromCode(code)
1161+{
1162+ return _Utils_chr(
1163+ (code < 0 || 0x10FFFF < code)
1164+ ? '\uFFFD'
1165+ :
1166+ (code <= 0xFFFF)
1167+ ? String.fromCharCode(code)
1168+ :
1169+ (code -= 0x10000,
1170+ String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00)
1171+ )
1172+ );
1173+}
1174+
1175+function _Char_toUpper(char)
1176+{
1177+ return _Utils_chr(char.toUpperCase());
1178+}
1179+
1180+function _Char_toLower(char)
1181+{
1182+ return _Utils_chr(char.toLowerCase());
1183+}
1184+
1185+function _Char_toLocaleUpper(char)
1186+{
1187+ return _Utils_chr(char.toLocaleUpperCase());
1188+}
1189+
1190+function _Char_toLocaleLower(char)
1191+{
1192+ return _Utils_chr(char.toLocaleLowerCase());
1193+}
1194+
1195+
1196+
1197+/**/
1198+function _Json_errorToString(error)
1199+{
1200+ return $elm$json$Json$Decode$errorToString(error);
1201+}
1202+//*/
1203+
1204+
1205+// CORE DECODERS
1206+
1207+function _Json_succeed(msg)
1208+{
1209+ return {
1210+ $: 0,
1211+ a: msg
1212+ };
1213+}
1214+
1215+function _Json_fail(msg)
1216+{
1217+ return {
1218+ $: 1,
1219+ a: msg
1220+ };
1221+}
1222+
1223+function _Json_decodePrim(decoder)
1224+{
1225+ return { $: 2, b: decoder };
1226+}
1227+
1228+var _Json_decodeInt = _Json_decodePrim(function(value) {
1229+ return (typeof value !== 'number')
1230+ ? _Json_expecting('an INT', value)
1231+ :
1232+ (-2147483647 < value && value < 2147483647 && (value | 0) === value)
1233+ ? $elm$core$Result$Ok(value)
1234+ :
1235+ (isFinite(value) && !(value % 1))
1236+ ? $elm$core$Result$Ok(value)
1237+ : _Json_expecting('an INT', value);
1238+});
1239+
1240+var _Json_decodeBool = _Json_decodePrim(function(value) {
1241+ return (typeof value === 'boolean')
1242+ ? $elm$core$Result$Ok(value)
1243+ : _Json_expecting('a BOOL', value);
1244+});
1245+
1246+var _Json_decodeFloat = _Json_decodePrim(function(value) {
1247+ return (typeof value === 'number')
1248+ ? $elm$core$Result$Ok(value)
1249+ : _Json_expecting('a FLOAT', value);
1250+});
1251+
1252+var _Json_decodeValue = _Json_decodePrim(function(value) {
1253+ return $elm$core$Result$Ok(_Json_wrap(value));
1254+});
1255+
1256+var _Json_decodeString = _Json_decodePrim(function(value) {
1257+ return (typeof value === 'string')
1258+ ? $elm$core$Result$Ok(value)
1259+ : (value instanceof String)
1260+ ? $elm$core$Result$Ok(value + '')
1261+ : _Json_expecting('a STRING', value);
1262+});
1263+
1264+function _Json_decodeList(decoder) { return { $: 3, b: decoder }; }
1265+function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; }
1266+
1267+function _Json_decodeNull(value) { return { $: 5, c: value }; }
1268+
1269+var _Json_decodeField = F2(function(field, decoder)
1270+{
1271+ return {
1272+ $: 6,
1273+ d: field,
1274+ b: decoder
1275+ };
1276+});
1277+
1278+var _Json_decodeIndex = F2(function(index, decoder)
1279+{
1280+ return {
1281+ $: 7,
1282+ e: index,
1283+ b: decoder
1284+ };
1285+});
1286+
1287+function _Json_decodeKeyValuePairs(decoder)
1288+{
1289+ return {
1290+ $: 8,
1291+ b: decoder
1292+ };
1293+}
1294+
1295+function _Json_mapMany(f, decoders)
1296+{
1297+ return {
1298+ $: 9,
1299+ f: f,
1300+ g: decoders
1301+ };
1302+}
1303+
1304+var _Json_andThen = F2(function(callback, decoder)
1305+{
1306+ return {
1307+ $: 10,
1308+ b: decoder,
1309+ h: callback
1310+ };
1311+});
1312+
1313+function _Json_oneOf(decoders)
1314+{
1315+ return {
1316+ $: 11,
1317+ g: decoders
1318+ };
1319+}
1320+
1321+
1322+// DECODING OBJECTS
1323+
1324+var _Json_map1 = F2(function(f, d1)
1325+{
1326+ return _Json_mapMany(f, [d1]);
1327+});
1328+
1329+var _Json_map2 = F3(function(f, d1, d2)
1330+{
1331+ return _Json_mapMany(f, [d1, d2]);
1332+});
1333+
1334+var _Json_map3 = F4(function(f, d1, d2, d3)
1335+{
1336+ return _Json_mapMany(f, [d1, d2, d3]);
1337+});
1338+
1339+var _Json_map4 = F5(function(f, d1, d2, d3, d4)
1340+{
1341+ return _Json_mapMany(f, [d1, d2, d3, d4]);
1342+});
1343+
1344+var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
1345+{
1346+ return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
1347+});
1348+
1349+var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
1350+{
1351+ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
1352+});
1353+
1354+var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
1355+{
1356+ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
1357+});
1358+
1359+var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
1360+{
1361+ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
1362+});
1363+
1364+
1365+// DECODE
1366+
1367+var _Json_runOnString = F2(function(decoder, string)
1368+{
1369+ try
1370+ {
1371+ var value = JSON.parse(string);
1372+ return _Json_runHelp(decoder, value);
1373+ }
1374+ catch (e)
1375+ {
1376+ return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
1377+ }
1378+});
1379+
1380+var _Json_run = F2(function(decoder, value)
1381+{
1382+ return _Json_runHelp(decoder, _Json_unwrap(value));
1383+});
1384+
1385+function _Json_runHelp(decoder, value)
1386+{
1387+ switch (decoder.$)
1388+ {
1389+ case 2:
1390+ return decoder.b(value);
1391+
1392+ case 5:
1393+ return (value === null)
1394+ ? $elm$core$Result$Ok(decoder.c)
1395+ : _Json_expecting('null', value);
1396+
1397+ case 3:
1398+ if (!_Json_isArray(value))
1399+ {
1400+ return _Json_expecting('a LIST', value);
1401+ }
1402+ return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
1403+
1404+ case 4:
1405+ if (!_Json_isArray(value))
1406+ {
1407+ return _Json_expecting('an ARRAY', value);
1408+ }
1409+ return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
1410+
1411+ case 6:
1412+ var field = decoder.d;
1413+ if (typeof value !== 'object' || value === null || !(field in value))
1414+ {
1415+ return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
1416+ }
1417+ var result = _Json_runHelp(decoder.b, value[field]);
1418+ return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, field, result.a));
1419+
1420+ case 7:
1421+ var index = decoder.e;
1422+ if (!_Json_isArray(value))
1423+ {
1424+ return _Json_expecting('an ARRAY', value);
1425+ }
1426+ if (index >= value.length)
1427+ {
1428+ return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
1429+ }
1430+ var result = _Json_runHelp(decoder.b, value[index]);
1431+ return ($elm$core$Result$isOk(result)) ? result : $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, index, result.a));
1432+
1433+ case 8:
1434+ if (typeof value !== 'object' || value === null || _Json_isArray(value))
1435+ {
1436+ return _Json_expecting('an OBJECT', value);
1437+ }
1438+
1439+ var keyValuePairs = _List_Nil;
1440+ // TODO test perf of Object.keys and switch when support is good enough
1441+ for (var key in value)
1442+ {
1443+ if (Object.prototype.hasOwnProperty.call(value, key))
1444+ {
1445+ var result = _Json_runHelp(decoder.b, value[key]);
1446+ if (!$elm$core$Result$isOk(result))
1447+ {
1448+ return $elm$core$Result$Err(A2($elm$json$Json$Decode$Field, key, result.a));
1449+ }
1450+ keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
1451+ }
1452+ }
1453+ return $elm$core$Result$Ok($elm$core$List$reverse(keyValuePairs));
1454+
1455+ case 9:
1456+ var answer = decoder.f;
1457+ var decoders = decoder.g;
1458+ for (var i = 0; i < decoders.length; i++)
1459+ {
1460+ var result = _Json_runHelp(decoders[i], value);
1461+ if (!$elm$core$Result$isOk(result))
1462+ {
1463+ return result;
1464+ }
1465+ answer = answer(result.a);
1466+ }
1467+ return $elm$core$Result$Ok(answer);
1468+
1469+ case 10:
1470+ var result = _Json_runHelp(decoder.b, value);
1471+ return (!$elm$core$Result$isOk(result))
1472+ ? result
1473+ : _Json_runHelp(decoder.h(result.a), value);
1474+
1475+ case 11:
1476+ var errors = _List_Nil;
1477+ for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
1478+ {
1479+ var result = _Json_runHelp(temp.a, value);
1480+ if ($elm$core$Result$isOk(result))
1481+ {
1482+ return result;
1483+ }
1484+ errors = _List_Cons(result.a, errors);
1485+ }
1486+ return $elm$core$Result$Err($elm$json$Json$Decode$OneOf($elm$core$List$reverse(errors)));
1487+
1488+ case 1:
1489+ return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
1490+
1491+ case 0:
1492+ return $elm$core$Result$Ok(decoder.a);
1493+ }
1494+}
1495+
1496+function _Json_runArrayDecoder(decoder, value, toElmValue)
1497+{
1498+ var len = value.length;
1499+ var array = new Array(len);
1500+ for (var i = 0; i < len; i++)
1501+ {
1502+ var result = _Json_runHelp(decoder, value[i]);
1503+ if (!$elm$core$Result$isOk(result))
1504+ {
1505+ return $elm$core$Result$Err(A2($elm$json$Json$Decode$Index, i, result.a));
1506+ }
1507+ array[i] = result.a;
1508+ }
1509+ return $elm$core$Result$Ok(toElmValue(array));
1510+}
1511+
1512+function _Json_isArray(value)
1513+{
1514+ return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList);
1515+}
1516+
1517+function _Json_toElmArray(array)
1518+{
1519+ return A2($elm$core$Array$initialize, array.length, function(i) { return array[i]; });
1520+}
1521+
1522+function _Json_expecting(type, value)
1523+{
1524+ return $elm$core$Result$Err(A2($elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
1525+}
1526+
1527+
1528+// EQUALITY
1529+
1530+function _Json_equality(x, y)
1531+{
1532+ if (x === y)
1533+ {
1534+ return true;
1535+ }
1536+
1537+ if (x.$ !== y.$)
1538+ {
1539+ return false;
1540+ }
1541+
1542+ switch (x.$)
1543+ {
1544+ case 0:
1545+ case 1:
1546+ return x.a === y.a;
1547+
1548+ case 2:
1549+ return x.b === y.b;
1550+
1551+ case 5:
1552+ return x.c === y.c;
1553+
1554+ case 3:
1555+ case 4:
1556+ case 8:
1557+ return _Json_equality(x.b, y.b);
1558+
1559+ case 6:
1560+ return x.d === y.d && _Json_equality(x.b, y.b);
1561+
1562+ case 7:
1563+ return x.e === y.e && _Json_equality(x.b, y.b);
1564+
1565+ case 9:
1566+ return x.f === y.f && _Json_listEquality(x.g, y.g);
1567+
1568+ case 10:
1569+ return x.h === y.h && _Json_equality(x.b, y.b);
1570+
1571+ case 11:
1572+ return _Json_listEquality(x.g, y.g);
1573+ }
1574+}
1575+
1576+function _Json_listEquality(aDecoders, bDecoders)
1577+{
1578+ var len = aDecoders.length;
1579+ if (len !== bDecoders.length)
1580+ {
1581+ return false;
1582+ }
1583+ for (var i = 0; i < len; i++)
1584+ {
1585+ if (!_Json_equality(aDecoders[i], bDecoders[i]))
1586+ {
1587+ return false;
1588+ }
1589+ }
1590+ return true;
1591+}
1592+
1593+
1594+// ENCODE
1595+
1596+var _Json_encode = F2(function(indentLevel, value)
1597+{
1598+ return JSON.stringify(_Json_unwrap(value), null, indentLevel) + '';
1599+});
1600+
1601+function _Json_wrap(value) { return { $: 0, a: value }; }
1602+function _Json_unwrap(value) { return value.a; }
1603+
1604+
1605+function _Json_emptyArray() { return []; }
1606+function _Json_emptyObject() { return {}; }
1607+
1608+var _Json_addField = F3(function(key, value, object)
1609+{
1610+ var unwrapped = _Json_unwrap(value);
1611+ if (!(key === 'toJSON' && typeof unwrapped === 'function'))
1612+ {
1613+ object[key] = unwrapped;
1614+ }
1615+ return object;
1616+});
1617+
1618+function _Json_addEntry(func)
1619+{
1620+ return F2(function(entry, array)
1621+ {
1622+ array.push(_Json_unwrap(func(entry)));
1623+ return array;
1624+ });
1625+}
1626+
1627+var _Json_encodeNull = _Json_wrap(null);
1628+
1629+
1630+
1631+// TASKS
1632+
1633+function _Scheduler_succeed(value)
1634+{
1635+ return {
1636+ $: 0,
1637+ a: value
1638+ };
1639+}
1640+
1641+function _Scheduler_fail(error)
1642+{
1643+ return {
1644+ $: 1,
1645+ a: error
1646+ };
1647+}
1648+
1649+function _Scheduler_binding(callback)
1650+{
1651+ return {
1652+ $: 2,
1653+ b: callback,
1654+ c: null
1655+ };
1656+}
1657+
1658+var _Scheduler_andThen = F2(function(callback, task)
1659+{
1660+ return {
1661+ $: 3,
1662+ b: callback,
1663+ d: task
1664+ };
1665+});
1666+
1667+var _Scheduler_onError = F2(function(callback, task)
1668+{
1669+ return {
1670+ $: 4,
1671+ b: callback,
1672+ d: task
1673+ };
1674+});
1675+
1676+function _Scheduler_receive(callback)
1677+{
1678+ return {
1679+ $: 5,
1680+ b: callback
1681+ };
1682+}
1683+
1684+
1685+// PROCESSES
1686+
1687+var _Scheduler_guid = 0;
1688+
1689+function _Scheduler_rawSpawn(task)
1690+{
1691+ var proc = {
1692+ $: 0,
1693+ e: _Scheduler_guid++,
1694+ f: task,
1695+ g: null,
1696+ h: []
1697+ };
1698+
1699+ _Scheduler_enqueue(proc);
1700+
1701+ return proc;
1702+}
1703+
1704+function _Scheduler_spawn(task)
1705+{
1706+ return _Scheduler_binding(function(callback) {
1707+ callback(_Scheduler_succeed(_Scheduler_rawSpawn(task)));
1708+ });
1709+}
1710+
1711+function _Scheduler_rawSend(proc, msg)
1712+{
1713+ proc.h.push(msg);
1714+ _Scheduler_enqueue(proc);
1715+}
1716+
1717+var _Scheduler_send = F2(function(proc, msg)
1718+{
1719+ return _Scheduler_binding(function(callback) {
1720+ _Scheduler_rawSend(proc, msg);
1721+ callback(_Scheduler_succeed(_Utils_Tuple0));
1722+ });
1723+});
1724+
1725+function _Scheduler_kill(proc)
1726+{
1727+ return _Scheduler_binding(function(callback) {
1728+ var task = proc.f;
1729+ if (task.$ === 2 && task.c)
1730+ {
1731+ task.c();
1732+ }
1733+
1734+ proc.f = null;
1735+
1736+ callback(_Scheduler_succeed(_Utils_Tuple0));
1737+ });
1738+}
1739+
1740+
1741+/* STEP PROCESSES
1742+
1743+type alias Process =
1744+ { $ : tag
1745+ , id : unique_id
1746+ , root : Task
1747+ , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack }
1748+ , mailbox : [msg]
1749+ }
1750+
1751+*/
1752+
1753+
1754+var _Scheduler_working = false;
1755+var _Scheduler_queue = [];
1756+
1757+
1758+function _Scheduler_enqueue(proc)
1759+{
1760+ _Scheduler_queue.push(proc);
1761+ if (_Scheduler_working)
1762+ {
1763+ return;
1764+ }
1765+ _Scheduler_working = true;
1766+ while (proc = _Scheduler_queue.shift())
1767+ {
1768+ _Scheduler_step(proc);
1769+ }
1770+ _Scheduler_working = false;
1771+}
1772+
1773+
1774+function _Scheduler_step(proc)
1775+{
1776+ while (proc.f)
1777+ {
1778+ var rootTag = proc.f.$;
1779+ if (rootTag === 0 || rootTag === 1)
1780+ {
1781+ while (proc.g && proc.g.$ !== rootTag)
1782+ {
1783+ proc.g = proc.g.i;
1784+ }
1785+ if (!proc.g)
1786+ {
1787+ return;
1788+ }
1789+ proc.f = proc.g.b(proc.f.a);
1790+ proc.g = proc.g.i;
1791+ }
1792+ else if (rootTag === 2)
1793+ {
1794+ proc.f.c = proc.f.b(function(newRoot) {
1795+ proc.f = newRoot;
1796+ _Scheduler_enqueue(proc);
1797+ });
1798+ return;
1799+ }
1800+ else if (rootTag === 5)
1801+ {
1802+ if (proc.h.length === 0)
1803+ {
1804+ return;
1805+ }
1806+ proc.f = proc.f.b(proc.h.shift());
1807+ }
1808+ else // if (rootTag === 3 || rootTag === 4)
1809+ {
1810+ proc.g = {
1811+ $: rootTag === 3 ? 0 : 1,
1812+ b: proc.f.b,
1813+ i: proc.g
1814+ };
1815+ proc.f = proc.f.d;
1816+ }
1817+ }
1818+}
1819+
1820+
1821+
1822+function _Process_sleep(time)
1823+{
1824+ return _Scheduler_binding(function(callback) {
1825+ var id = setTimeout(function() {
1826+ callback(_Scheduler_succeed(_Utils_Tuple0));
1827+ }, time);
1828+
1829+ return function() { clearTimeout(id); };
1830+ });
1831+}
1832+
1833+
1834+
1835+
1836+// PROGRAMS
1837+
1838+
1839+var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args)
1840+{
1841+ return _Platform_initialize(
1842+ flagDecoder,
1843+ args,
1844+ impl.init,
1845+ impl.update,
1846+ impl.subscriptions,
1847+ function() { return function() {} }
1848+ );
1849+});
1850+
1851+
1852+
1853+// INITIALIZE A PROGRAM
1854+
1855+
1856+function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder)
1857+{
1858+ var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined));
1859+ $elm$core$Result$isOk(result) || _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/);
1860+ var managers = {};
1861+ var initPair = init(result.a);
1862+ var model = initPair.a;
1863+ var stepper = stepperBuilder(sendToApp, model);
1864+ var ports = _Platform_setupEffects(managers, sendToApp);
1865+
1866+ function sendToApp(msg, viewMetadata)
1867+ {
1868+ var pair = A2(update, msg, model);
1869+ stepper(model = pair.a, viewMetadata);
1870+ _Platform_enqueueEffects(managers, pair.b, subscriptions(model));
1871+ }
1872+
1873+ _Platform_enqueueEffects(managers, initPair.b, subscriptions(model));
1874+
1875+ return ports ? { ports: ports } : {};
1876+}
1877+
1878+
1879+
1880+// TRACK PRELOADS
1881+//
1882+// This is used by code in elm/browser and elm/http
1883+// to register any HTTP requests that are triggered by init.
1884+//
1885+
1886+
1887+var _Platform_preload;
1888+
1889+
1890+function _Platform_registerPreload(url)
1891+{
1892+ _Platform_preload.add(url);
1893+}
1894+
1895+
1896+
1897+// EFFECT MANAGERS
1898+
1899+
1900+var _Platform_effectManagers = {};
1901+
1902+
1903+function _Platform_setupEffects(managers, sendToApp)
1904+{
1905+ var ports;
1906+
1907+ // setup all necessary effect managers
1908+ for (var key in _Platform_effectManagers)
1909+ {
1910+ var manager = _Platform_effectManagers[key];
1911+
1912+ if (manager.a)
1913+ {
1914+ ports = ports || {};
1915+ ports[key] = manager.a(key, sendToApp);
1916+ }
1917+
1918+ managers[key] = _Platform_instantiateManager(manager, sendToApp);
1919+ }
1920+
1921+ return ports;
1922+}
1923+
1924+
1925+function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap)
1926+{
1927+ return {
1928+ b: init,
1929+ c: onEffects,
1930+ d: onSelfMsg,
1931+ e: cmdMap,
1932+ f: subMap
1933+ };
1934+}
1935+
1936+
1937+function _Platform_instantiateManager(info, sendToApp)
1938+{
1939+ var router = {
1940+ g: sendToApp,
1941+ h: undefined
1942+ };
1943+
1944+ var onEffects = info.c;
1945+ var onSelfMsg = info.d;
1946+ var cmdMap = info.e;
1947+ var subMap = info.f;
1948+
1949+ function loop(state)
1950+ {
1951+ return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg)
1952+ {
1953+ var value = msg.a;
1954+
1955+ if (msg.$ === 0)
1956+ {
1957+ return A3(onSelfMsg, router, value, state);
1958+ }
1959+
1960+ return cmdMap && subMap
1961+ ? A4(onEffects, router, value.i, value.j, state)
1962+ : A3(onEffects, router, cmdMap ? value.i : value.j, state);
1963+ }));
1964+ }
1965+
1966+ return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));
1967+}
1968+
1969+
1970+
1971+// ROUTING
1972+
1973+
1974+var _Platform_sendToApp = F2(function(router, msg)
1975+{
1976+ return _Scheduler_binding(function(callback)
1977+ {
1978+ router.g(msg);
1979+ callback(_Scheduler_succeed(_Utils_Tuple0));
1980+ });
1981+});
1982+
1983+
1984+var _Platform_sendToSelf = F2(function(router, msg)
1985+{
1986+ return A2(_Scheduler_send, router.h, {
1987+ $: 0,
1988+ a: msg
1989+ });
1990+});
1991+
1992+
1993+
1994+// BAGS
1995+
1996+
1997+function _Platform_leaf(home)
1998+{
1999+ return function(value)
2000+ {
2001+ return {
2002+ $: 1,
2003+ k: home,
2004+ l: value
2005+ };
2006+ };
2007+}
2008+
2009+
2010+function _Platform_batch(list)
2011+{
2012+ return {
2013+ $: 2,
2014+ m: list
2015+ };
2016+}
2017+
2018+
2019+var _Platform_map = F2(function(tagger, bag)
2020+{
2021+ return {
2022+ $: 3,
2023+ n: tagger,
2024+ o: bag
2025+ }
2026+});
2027+
2028+
2029+
2030+// PIPE BAGS INTO EFFECT MANAGERS
2031+//
2032+// Effects must be queued!
2033+//
2034+// Say your init contains a synchronous command, like Time.now or Time.here
2035+//
2036+// - This will produce a batch of effects (FX_1)
2037+// - The synchronous task triggers the subsequent `update` call
2038+// - This will produce a batch of effects (FX_2)
2039+//
2040+// If we just start dispatching FX_2, subscriptions from FX_2 can be processed
2041+// before subscriptions from FX_1. No good! Earlier versions of this code had
2042+// this problem, leading to these reports:
2043+//
2044+// https://github.com/elm/core/issues/980
2045+// https://github.com/elm/core/pull/981
2046+// https://github.com/elm/compiler/issues/1776
2047+//
2048+// The queue is necessary to avoid ordering issues for synchronous commands.
2049+
2050+
2051+// Why use true/false here? Why not just check the length of the queue?
2052+// The goal is to detect "are we currently dispatching effects?" If we
2053+// are, we need to bail and let the ongoing while loop handle things.
2054+//
2055+// Now say the queue has 1 element. When we dequeue the final element,
2056+// the queue will be empty, but we are still actively dispatching effects.
2057+// So you could get queue jumping in a really tricky category of cases.
2058+//
2059+var _Platform_effectsQueue = [];
2060+var _Platform_effectsActive = false;
2061+
2062+
2063+function _Platform_enqueueEffects(managers, cmdBag, subBag)
2064+{
2065+ _Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag });
2066+
2067+ if (_Platform_effectsActive) return;
2068+
2069+ _Platform_effectsActive = true;
2070+ for (var fx; fx = _Platform_effectsQueue.shift(); )
2071+ {
2072+ _Platform_dispatchEffects(fx.p, fx.q, fx.r);
2073+ }
2074+ _Platform_effectsActive = false;
2075+}
2076+
2077+
2078+function _Platform_dispatchEffects(managers, cmdBag, subBag)
2079+{
2080+ var effectsDict = {};
2081+ _Platform_gatherEffects(true, cmdBag, effectsDict, null);
2082+ _Platform_gatherEffects(false, subBag, effectsDict, null);
2083+
2084+ for (var home in managers)
2085+ {
2086+ _Scheduler_rawSend(managers[home], {
2087+ $: 'fx',
2088+ a: effectsDict[home] || { i: _List_Nil, j: _List_Nil }
2089+ });
2090+ }
2091+}
2092+
2093+
2094+function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
2095+{
2096+ switch (bag.$)
2097+ {
2098+ case 1:
2099+ var home = bag.k;
2100+ var effect = _Platform_toEffect(isCmd, home, taggers, bag.l);
2101+ effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]);
2102+ return;
2103+
2104+ case 2:
2105+ for (var list = bag.m; list.b; list = list.b) // WHILE_CONS
2106+ {
2107+ _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers);
2108+ }
2109+ return;
2110+
2111+ case 3:
2112+ _Platform_gatherEffects(isCmd, bag.o, effectsDict, {
2113+ s: bag.n,
2114+ t: taggers
2115+ });
2116+ return;
2117+ }
2118+}
2119+
2120+
2121+function _Platform_toEffect(isCmd, home, taggers, value)
2122+{
2123+ function applyTaggers(x)
2124+ {
2125+ for (var temp = taggers; temp; temp = temp.t)
2126+ {
2127+ x = temp.s(x);
2128+ }
2129+ return x;
2130+ }
2131+
2132+ var map = isCmd
2133+ ? _Platform_effectManagers[home].e
2134+ : _Platform_effectManagers[home].f;
2135+
2136+ return A2(map, applyTaggers, value)
2137+}
2138+
2139+
2140+function _Platform_insert(isCmd, newEffect, effects)
2141+{
2142+ effects = effects || { i: _List_Nil, j: _List_Nil };
2143+
2144+ isCmd
2145+ ? (effects.i = _List_Cons(newEffect, effects.i))
2146+ : (effects.j = _List_Cons(newEffect, effects.j));
2147+
2148+ return effects;
2149+}
2150+
2151+
2152+
2153+// PORTS
2154+
2155+
2156+function _Platform_checkPortName(name)
2157+{
2158+ if (_Platform_effectManagers[name])
2159+ {
2160+ _Debug_crash(3, name)
2161+ }
2162+}
2163+
2164+
2165+
2166+// OUTGOING PORTS
2167+
2168+
2169+function _Platform_outgoingPort(name, converter)
2170+{
2171+ _Platform_checkPortName(name);
2172+ _Platform_effectManagers[name] = {
2173+ e: _Platform_outgoingPortMap,
2174+ u: converter,
2175+ a: _Platform_setupOutgoingPort
2176+ };
2177+ return _Platform_leaf(name);
2178+}
2179+
2180+
2181+var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });
2182+
2183+
2184+function _Platform_setupOutgoingPort(name)
2185+{
2186+ var subs = [];
2187+ var converter = _Platform_effectManagers[name].u;
2188+
2189+ // CREATE MANAGER
2190+
2191+ var init = _Process_sleep(0);
2192+
2193+ _Platform_effectManagers[name].b = init;
2194+ _Platform_effectManagers[name].c = F3(function(router, cmdList, state)
2195+ {
2196+ for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS
2197+ {
2198+ // grab a separate reference to subs in case unsubscribe is called
2199+ var currentSubs = subs;
2200+ var value = _Json_unwrap(converter(cmdList.a));
2201+ for (var i = 0; i < currentSubs.length; i++)
2202+ {
2203+ currentSubs[i](value);
2204+ }
2205+ }
2206+ return init;
2207+ });
2208+
2209+ // PUBLIC API
2210+
2211+ function subscribe(callback)
2212+ {
2213+ subs.push(callback);
2214+ }
2215+
2216+ function unsubscribe(callback)
2217+ {
2218+ // copy subs into a new array in case unsubscribe is called within a
2219+ // subscribed callback
2220+ subs = subs.slice();
2221+ var index = subs.indexOf(callback);
2222+ if (index >= 0)
2223+ {
2224+ subs.splice(index, 1);
2225+ }
2226+ }
2227+
2228+ return {
2229+ subscribe: subscribe,
2230+ unsubscribe: unsubscribe
2231+ };
2232+}
2233+
2234+
2235+
2236+// INCOMING PORTS
2237+
2238+
2239+function _Platform_incomingPort(name, converter)
2240+{
2241+ _Platform_checkPortName(name);
2242+ _Platform_effectManagers[name] = {
2243+ f: _Platform_incomingPortMap,
2244+ u: converter,
2245+ a: _Platform_setupIncomingPort
2246+ };
2247+ return _Platform_leaf(name);
2248+}
2249+
2250+
2251+var _Platform_incomingPortMap = F2(function(tagger, finalTagger)
2252+{
2253+ return function(value)
2254+ {
2255+ return tagger(finalTagger(value));
2256+ };
2257+});
2258+
2259+
2260+function _Platform_setupIncomingPort(name, sendToApp)
2261+{
2262+ var subs = _List_Nil;
2263+ var converter = _Platform_effectManagers[name].u;
2264+
2265+ // CREATE MANAGER
2266+
2267+ var init = _Scheduler_succeed(null);
2268+
2269+ _Platform_effectManagers[name].b = init;
2270+ _Platform_effectManagers[name].c = F3(function(router, subList, state)
2271+ {
2272+ subs = subList;
2273+ return init;
2274+ });
2275+
2276+ // PUBLIC API
2277+
2278+ function send(incomingValue)
2279+ {
2280+ var result = A2(_Json_run, converter, _Json_wrap(incomingValue));
2281+
2282+ $elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);
2283+
2284+ var value = result.a;
2285+ for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS
2286+ {
2287+ sendToApp(temp.a(value));
2288+ }
2289+ }
2290+
2291+ return { send: send };
2292+}
2293+
2294+
2295+
2296+// EXPORT ELM MODULES
2297+//
2298+// Have DEBUG and PROD versions so that we can (1) give nicer errors in
2299+// debug mode and (2) not pay for the bits needed for that in prod mode.
2300+//
2301+
2302+
2303+
2304+
2305+function _Platform_mergeExportsProd(obj, exports)
2306+{
2307+ for (var name in exports)
2308+ {
2309+ (name in obj)
2310+ ? (name == 'init')
2311+ ? _Debug_crash(6)
2312+ : _Platform_mergeExportsProd(obj[name], exports[name])
2313+ : (obj[name] = exports[name]);
2314+ }
2315+}
2316+
2317+
2318+function _Platform_export(exports)
2319+{
2320+ scope['Elm']
2321+ ? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports)
2322+ : scope['Elm'] = exports;
2323+}
2324+
2325+
2326+function _Platform_mergeExportsDebug(moduleName, obj, exports)
2327+{
2328+ for (var name in exports)
2329+ {
2330+ (name in obj)
2331+ ? (name == 'init')
2332+ ? _Debug_crash(6, moduleName)
2333+ : _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name])
2334+ : (obj[name] = exports[name]);
2335+ }
2336+}
2337+
2338+
2339+
2340+var _Lynx_g = (typeof globalThis !== 'undefined' ? globalThis : scope);
2341+function _Lynx_papi(name) { return _Lynx_g['_' + '_' + name] || function() {}; }
2342+var _Lynx_createViewFn = _Lynx_papi('CreateView');
2343+var _Lynx_createTextFn = _Lynx_papi('CreateText');
2344+var _Lynx_createImageFn = _Lynx_papi('CreateImage');
2345+function _Lynx_createElement(tag) {
2346+ var pId = (_Lynx_g['native'] && _Lynx_g['native']['currentPageId']) || 0;
2347+ return (tag === 'text' ? _Lynx_createTextFn
2348+ : tag === 'image' ? _Lynx_createImageFn
2349+ : _Lynx_createViewFn)(pId);
2350+}
2351+var _Lynx_createRawText = _Lynx_papi('CreateRawText');
2352+var _Lynx_appendChild = _Lynx_papi('AppendElement');
2353+var _Lynx_removeElement = _Lynx_papi('RemoveElement');
2354+var _Lynx_replaceElement = _Lynx_papi('ReplaceElement');
2355+var _Lynx_insertBefore = _Lynx_papi('InsertElementBefore');
2356+var _Lynx_setAttribute = _Lynx_papi('SetAttribute');
2357+var _Lynx_getChildren = _Lynx_papi('GetChildren');
2358+var _Lynx_getParent = _Lynx_papi('GetParent');
2359+var _Lynx_addEvent = _Lynx_papi('AddEvent');
2360+var _Lynx_setInlineStyles = _Lynx_papi('SetInlineStyles');
2361+var _VirtualDom_elementMeta = new WeakMap();
2362+function _VirtualDom_getMeta(el) {
2363+ var meta = _VirtualDom_elementMeta.get(el);
2364+ if (!meta) { meta = {}; _VirtualDom_elementMeta.set(el, meta); }
2365+ return meta;
2366+}
2367+
2368+
2369+// HELPERS
2370+
2371+
2372+
2373+
2374+
2375+function _VirtualDom_appendChild(parent, child)
2376+{
2377+ _Lynx_appendChild(parent, child);
2378+}
2379+
2380+var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args)
2381+{
2382+ // NOTE: this function needs _Platform_export available to work
2383+ var rootPage = args['node'] || _Lynx_g['page'];
2384+ var tree = _VirtualDom_render(virtualNode, function() {});
2385+ _Lynx_appendChild(rootPage, tree);
2386+ return {};
2387+});
2388+
2389+
2390+
2391+// TEXT
2392+
2393+
2394+function _VirtualDom_text(string)
2395+{
2396+ return {
2397+ $: 0,
2398+ a: string
2399+ };
2400+}
2401+
2402+
2403+
2404+// NODE
2405+
2406+
2407+var _VirtualDom_nodeNS = F2(function(namespace, tag)
2408+{
2409+ return F2(function(factList, kidList)
2410+ {
2411+ for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
2412+ {
2413+ var kid = kidList.a;
2414+ descendantsCount += (kid.b || 0);
2415+ kids.push(kid);
2416+ }
2417+ descendantsCount += kids.length;
2418+
2419+ return {
2420+ $: 1,
2421+ c: tag,
2422+ d: _VirtualDom_organizeFacts(factList),
2423+ e: kids,
2424+ f: namespace,
2425+ b: descendantsCount
2426+ };
2427+ });
2428+});
2429+
2430+
2431+var _VirtualDom_node = _VirtualDom_nodeNS(undefined);
2432+
2433+
2434+
2435+// KEYED NODE
2436+
2437+
2438+var _VirtualDom_keyedNodeNS = F2(function(namespace, tag)
2439+{
2440+ return F2(function(factList, kidList)
2441+ {
2442+ for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
2443+ {
2444+ var kid = kidList.a;
2445+ descendantsCount += (kid.b.b || 0);
2446+ kids.push(kid);
2447+ }
2448+ descendantsCount += kids.length;
2449+
2450+ return {
2451+ $: 2,
2452+ c: tag,
2453+ d: _VirtualDom_organizeFacts(factList),
2454+ e: kids,
2455+ f: namespace,
2456+ b: descendantsCount
2457+ };
2458+ });
2459+});
2460+
2461+
2462+var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);
2463+
2464+
2465+
2466+// CUSTOM
2467+
2468+
2469+function _VirtualDom_custom(factList, model, render, diff)
2470+{
2471+ return {
2472+ $: 3,
2473+ d: _VirtualDom_organizeFacts(factList),
2474+ g: model,
2475+ h: render,
2476+ i: diff
2477+ };
2478+}
2479+
2480+
2481+
2482+// MAP
2483+
2484+
2485+var _VirtualDom_map = F2(function(tagger, node)
2486+{
2487+ return {
2488+ $: 4,
2489+ j: tagger,
2490+ k: node,
2491+ b: 1 + (node.b || 0)
2492+ };
2493+});
2494+
2495+
2496+
2497+// LAZY
2498+
2499+
2500+function _VirtualDom_thunk(refs, thunk)
2501+{
2502+ return {
2503+ $: 5,
2504+ l: refs,
2505+ m: thunk,
2506+ k: undefined
2507+ };
2508+}
2509+
2510+var _VirtualDom_lazy = F2(function(func, a)
2511+{
2512+ return _VirtualDom_thunk([func, a], function() {
2513+ return func(a);
2514+ });
2515+});
2516+
2517+var _VirtualDom_lazy2 = F3(function(func, a, b)
2518+{
2519+ return _VirtualDom_thunk([func, a, b], function() {
2520+ return A2(func, a, b);
2521+ });
2522+});
2523+
2524+var _VirtualDom_lazy3 = F4(function(func, a, b, c)
2525+{
2526+ return _VirtualDom_thunk([func, a, b, c], function() {
2527+ return A3(func, a, b, c);
2528+ });
2529+});
2530+
2531+var _VirtualDom_lazy4 = F5(function(func, a, b, c, d)
2532+{
2533+ return _VirtualDom_thunk([func, a, b, c, d], function() {
2534+ return A4(func, a, b, c, d);
2535+ });
2536+});
2537+
2538+var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e)
2539+{
2540+ return _VirtualDom_thunk([func, a, b, c, d, e], function() {
2541+ return A5(func, a, b, c, d, e);
2542+ });
2543+});
2544+
2545+var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f)
2546+{
2547+ return _VirtualDom_thunk([func, a, b, c, d, e, f], function() {
2548+ return A6(func, a, b, c, d, e, f);
2549+ });
2550+});
2551+
2552+var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g)
2553+{
2554+ return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() {
2555+ return A7(func, a, b, c, d, e, f, g);
2556+ });
2557+});
2558+
2559+var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h)
2560+{
2561+ return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() {
2562+ return A8(func, a, b, c, d, e, f, g, h);
2563+ });
2564+});
2565+
2566+
2567+
2568+// FACTS
2569+
2570+
2571+var _VirtualDom_on = F2(function(key, handler)
2572+{
2573+ return {
2574+ $: 'a0',
2575+ n: key,
2576+ o: handler
2577+ };
2578+});
2579+var _VirtualDom_style = F2(function(key, value)
2580+{
2581+ return {
2582+ $: 'a1',
2583+ n: key,
2584+ o: value
2585+ };
2586+});
2587+var _VirtualDom_property = F2(function(key, value)
2588+{
2589+ return {
2590+ $: 'a2',
2591+ n: key,
2592+ o: value
2593+ };
2594+});
2595+var _VirtualDom_attribute = F2(function(key, value)
2596+{
2597+ return {
2598+ $: 'a3',
2599+ n: key,
2600+ o: value
2601+ };
2602+});
2603+var _VirtualDom_attributeNS = F3(function(namespace, key, value)
2604+{
2605+ return {
2606+ $: 'a4',
2607+ n: key,
2608+ o: { f: namespace, o: value }
2609+ };
2610+});
2611+
2612+
2613+
2614+// XSS ATTACK VECTOR CHECKS
2615+//
2616+// For some reason, tabs can appear in href protocols and it still works.
2617+// So '\tjava\tSCRIPT:alert("!!!")' and 'javascript:alert("!!!")' are the same
2618+// in practice. That is why _VirtualDom_RE_js and _VirtualDom_RE_js_html look
2619+// so freaky.
2620+//
2621+// Pulling the regular expressions out to the top level gives a slight speed
2622+// boost in small benchmarks (4-10%) but hoisting values to reduce allocation
2623+// can be unpredictable in large programs where JIT may have a harder time with
2624+// functions are not fully self-contained. The benefit is more that the js and
2625+// js_html ones are so weird that I prefer to see them near each other.
2626+
2627+
2628+
2629+
2630+
2631+function _VirtualDom_noScript(tag)
2632+{
2633+ return tag;
2634+}
2635+
2636+function _VirtualDom_noOnOrFormAction(key)
2637+{
2638+ return key;
2639+}
2640+
2641+function _VirtualDom_noInnerHtmlOrFormAction(key)
2642+{
2643+ return key;
2644+}
2645+
2646+function _VirtualDom_noJavaScriptUri(value)
2647+{
2648+ return value;
2649+}
2650+
2651+function _VirtualDom_noJavaScriptOrHtmlUri(value)
2652+{
2653+ return value;
2654+}
2655+
2656+function _VirtualDom_noJavaScriptOrHtmlJson(value)
2657+{
2658+ return value;
2659+}
2660+
2661+
2662+
2663+// MAP FACTS
2664+
2665+
2666+var _VirtualDom_mapAttribute = F2(function(func, attr)
2667+{
2668+ return (attr.$ === 'a0')
2669+ ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o))
2670+ : attr;
2671+});
2672+
2673+function _VirtualDom_mapHandler(func, handler)
2674+{
2675+ var tag = $lynxjs_elm$virtual_dom$VirtualDom$toHandlerInt(handler);
2676+
2677+ // 0 = Normal
2678+ // 1 = MayStopPropagation
2679+ // 2 = MayPreventDefault
2680+ // 3 = Custom
2681+
2682+ return {
2683+ $: handler.$,
2684+ a:
2685+ !tag
2686+ ? A2($elm$json$Json$Decode$map, func, handler.a)
2687+ :
2688+ A3($elm$json$Json$Decode$map2,
2689+ tag < 3
2690+ ? _VirtualDom_mapEventTuple
2691+ : _VirtualDom_mapEventRecord,
2692+ $elm$json$Json$Decode$succeed(func),
2693+ handler.a
2694+ )
2695+ };
2696+}
2697+
2698+var _VirtualDom_mapEventTuple = F2(function(func, tuple)
2699+{
2700+ return _Utils_Tuple2(func(tuple.a), tuple.b);
2701+});
2702+
2703+var _VirtualDom_mapEventRecord = F2(function(func, record)
2704+{
2705+ return {
2706+ message: func(record.message),
2707+ stopPropagation: record.stopPropagation,
2708+ preventDefault: record.preventDefault
2709+ }
2710+});
2711+
2712+
2713+
2714+// ORGANIZE FACTS
2715+
2716+
2717+function _VirtualDom_organizeFacts(factList)
2718+{
2719+ for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS
2720+ {
2721+ var entry = factList.a;
2722+
2723+ var tag = entry.$;
2724+ var key = entry.n;
2725+ var value = entry.o;
2726+
2727+ if (tag === 'a2')
2728+ {
2729+ (key === 'className')
2730+ ? _VirtualDom_addClass(facts, key, _Json_unwrap(value))
2731+ : facts[key] = _Json_unwrap(value);
2732+
2733+ continue;
2734+ }
2735+
2736+ var subFacts = facts[tag] || (facts[tag] = {});
2737+ (tag === 'a3' && key === 'class')
2738+ ? _VirtualDom_addClass(subFacts, key, value)
2739+ : subFacts[key] = value;
2740+ }
2741+
2742+ return facts;
2743+}
2744+
2745+function _VirtualDom_addClass(object, key, newClass)
2746+{
2747+ var classes = object[key];
2748+ object[key] = classes ? classes + ' ' + newClass : newClass;
2749+}
2750+
2751+
2752+
2753+// RENDER
2754+
2755+
2756+function _VirtualDom_render(vNode, eventNode)
2757+{
2758+ var tag = vNode.$;
2759+
2760+ if (tag === 5)
2761+ {
2762+ return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode);
2763+ }
2764+
2765+ if (tag === 0)
2766+ {
2767+ return _Lynx_createRawText(vNode.a);
2768+ }
2769+
2770+ if (tag === 4)
2771+ {
2772+ var subNode = vNode.k;
2773+ var tagger = vNode.j;
2774+
2775+ while (subNode.$ === 4)
2776+ {
2777+ typeof tagger !== 'object'
2778+ ? tagger = [tagger, subNode.j]
2779+ : tagger.push(subNode.j);
2780+
2781+ subNode = subNode.k;
2782+ }
2783+
2784+ var subEventRoot = { j: tagger, p: eventNode };
2785+ var domNode = _VirtualDom_render(subNode, subEventRoot);
2786+ _VirtualDom_getMeta(domNode).elm_event_node_ref = subEventRoot;
2787+ return domNode;
2788+ }
2789+
2790+ if (tag === 3)
2791+ {
2792+ var domNode = vNode.h(vNode.g);
2793+ _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
2794+ return domNode;
2795+ }
2796+
2797+ // at this point `tag` must be 1 or 2
2798+
2799+ var domNode = _Lynx_createElement(vNode.c);
2800+
2801+ _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
2802+
2803+ for (var kids = vNode.e, i = 0; i < kids.length; i++)
2804+ {
2805+ var kid = tag === 1 ? kids[i] : kids[i].b;
2806+ if (kid.$ === 0)
2807+ {
2808+ _Lynx_appendChild(domNode, _Lynx_createRawText(kid.a));
2809+ }
2810+ else
2811+ {
2812+ _VirtualDom_appendChild(domNode, _VirtualDom_render(kid, eventNode));
2813+ }
2814+ }
2815+
2816+ return domNode;
2817+}
2818+
2819+
2820+
2821+// APPLY FACTS
2822+
2823+
2824+function _VirtualDom_applyFacts(domNode, eventNode, facts)
2825+{
2826+ for (var key in facts)
2827+ {
2828+ var value = facts[key];
2829+
2830+ key === 'a1'
2831+ ? _VirtualDom_applyStyles(domNode, value)
2832+ :
2833+ key === 'a0'
2834+ ? _VirtualDom_applyEvents(domNode, eventNode, value)
2835+ :
2836+ key === 'a3'
2837+ ? _VirtualDom_applyAttrs(domNode, value)
2838+ :
2839+ key === 'a4'
2840+ ? _VirtualDom_applyAttrsNS(domNode, value)
2841+ :
2842+ (key !== 'value' && key !== 'checked' || domNode[key] !== value) && _Lynx_setAttribute(domNode, key === 'className' ? 'class' : key, String(value));
2843+ }
2844+}
2845+
2846+
2847+
2848+// APPLY STYLES
2849+
2850+
2851+function _VirtualDom_applyStyles(domNode, styles)
2852+{
2853+ _Lynx_setInlineStyles(domNode, styles);
2854+}
2855+
2856+
2857+
2858+// APPLY ATTRS
2859+
2860+
2861+function _VirtualDom_applyAttrs(domNode, attrs)
2862+{
2863+ for (var key in attrs)
2864+ {
2865+ var value = attrs[key];
2866+ if (typeof value !== 'undefined')
2867+ {
2868+ _Lynx_setAttribute(domNode, key, value);
2869+ }
2870+ }
2871+}
2872+
2873+
2874+
2875+// APPLY NAMESPACED ATTRS
2876+
2877+
2878+function _VirtualDom_applyAttrsNS(domNode, nsAttrs)
2879+{
2880+ for (var key in nsAttrs)
2881+ {
2882+ var pair = nsAttrs[key];
2883+ var value = pair.o;
2884+
2885+ if (typeof value !== 'undefined')
2886+ {
2887+ _Lynx_setAttribute(domNode, key, value);
2888+ }
2889+ }
2890+}
2891+
2892+
2893+
2894+// APPLY EVENTS
2895+
2896+
2897+function _VirtualDom_applyEvents(domNode, eventNode, events)
2898+{
2899+ var meta = _VirtualDom_getMeta(domNode);
2900+ var allCallbacks = meta.elmFs || (meta.elmFs = {});
2901+
2902+ for (var key in events)
2903+ {
2904+ var newHandler = events[key];
2905+ var oldCallback = allCallbacks[key];
2906+
2907+ if (!newHandler)
2908+ {
2909+ allCallbacks[key] = undefined;
2910+ continue;
2911+ }
2912+
2913+ if (oldCallback)
2914+ {
2915+ var oldHandler = oldCallback.q;
2916+ if (oldHandler.$ === newHandler.$)
2917+ {
2918+ oldCallback.q = newHandler;
2919+ continue;
2920+ }
2921+ }
2922+
2923+ oldCallback = _VirtualDom_makeCallback(eventNode, newHandler);
2924+ allCallbacks[key] = oldCallback;
2925+
2926+ var lynxEventName = _VirtualDom_mapEventName(key);
2927+ var handlerType = $lynxjs_elm$virtual_dom$VirtualDom$toHandlerInt(newHandler);
2928+ var prefix = (handlerType === 1) ? 'catch' : 'bind';
2929+ _Lynx_addEvent(domNode, 'catchEvent', lynxEventName, { type: 'worklet', value: oldCallback });
2930+ }
2931+}
2932+
2933+function _VirtualDom_mapEventName(name)
2934+{
2935+ switch (name)
2936+ {
2937+ case 'click': return 'tap';
2938+ case 'dblclick': return 'tap';
2939+ case 'mousedown': return 'touchstart';
2940+ case 'mousemove': return 'touchmove';
2941+ case 'mouseup': return 'touchend';
2942+ default: return name;
2943+ }
2944+}
2945+
2946+
2947+
2948+// PASSIVE EVENTS
2949+
2950+
2951+
2952+// EVENT HANDLERS
2953+
2954+
2955+function _VirtualDom_makeCallback(eventNode, initialHandler)
2956+{
2957+ function callback(event)
2958+ {
2959+ var handler = callback.q;
2960+ var result = _Json_runHelp(handler.a, event);
2961+
2962+ if (!$elm$core$Result$isOk(result))
2963+ {
2964+ return;
2965+ }
2966+
2967+ var tag = $lynxjs_elm$virtual_dom$VirtualDom$toHandlerInt(handler);
2968+
2969+ // 0 = Normal
2970+ // 1 = MayStopPropagation
2971+ // 2 = MayPreventDefault
2972+ // 3 = Custom
2973+
2974+ var value = result.a;
2975+ var message = !tag ? value : tag < 3 ? value.a : value.message;
2976+ var stopPropagation = tag == 1 ? value.b : tag == 3 && value.stopPropagation;
2977+ var currentEventNode = eventNode;
2978+ var tagger;
2979+ var i;
2980+ while (tagger = currentEventNode.j)
2981+ {
2982+ if (typeof tagger == 'function')
2983+ {
2984+ message = tagger(message);
2985+ }
2986+ else
2987+ {
2988+ for (var i = tagger.length; i--; )
2989+ {
2990+ message = tagger[i](message);
2991+ }
2992+ }
2993+ currentEventNode = currentEventNode.p;
2994+ }
2995+ currentEventNode(message, stopPropagation); // stopPropagation implies isSync
2996+ }
2997+
2998+ callback.q = initialHandler;
2999+
3000+ return callback;
3001+}
3002+
3003+function _VirtualDom_equalEvents(x, y)
3004+{
3005+ return x.$ == y.$ && _Json_equality(x.a, y.a);
3006+}
3007+
3008+
3009+
3010+// DIFF
3011+
3012+
3013+// TODO: Should we do patches like in iOS?
3014+//
3015+// type Patch
3016+// = At Int Patch
3017+// | Batch (List Patch)
3018+// | Change ...
3019+//
3020+// How could it not be better?
3021+//
3022+function _VirtualDom_diff(x, y)
3023+{
3024+ var patches = [];
3025+ _VirtualDom_diffHelp(x, y, patches, 0);
3026+ return patches;
3027+}
3028+
3029+
3030+function _VirtualDom_pushPatch(patches, type, index, data)
3031+{
3032+ var patch = {
3033+ $: type,
3034+ r: index,
3035+ s: data,
3036+ t: undefined,
3037+ u: undefined
3038+ };
3039+ patches.push(patch);
3040+ return patch;
3041+}
3042+
3043+
3044+function _VirtualDom_diffHelp(x, y, patches, index)
3045+{
3046+ if (x === y)
3047+ {
3048+ return;
3049+ }
3050+
3051+ var xType = x.$;
3052+ var yType = y.$;
3053+
3054+ // Bail if you run into different types of nodes. Implies that the
3055+ // structure has changed significantly and it's not worth a diff.
3056+ if (xType !== yType)
3057+ {
3058+ if (xType === 1 && yType === 2)
3059+ {
3060+ y = _VirtualDom_dekey(y);
3061+ yType = 1;
3062+ }
3063+ else
3064+ {
3065+ _VirtualDom_pushPatch(patches, 0, index, y);
3066+ return;
3067+ }
3068+ }
3069+
3070+ // Now we know that both nodes are the same $.
3071+ switch (yType)
3072+ {
3073+ case 5:
3074+ var xRefs = x.l;
3075+ var yRefs = y.l;
3076+ var i = xRefs.length;
3077+ var same = i === yRefs.length;
3078+ while (same && i--)
3079+ {
3080+ same = xRefs[i] === yRefs[i];
3081+ }
3082+ if (same)
3083+ {
3084+ y.k = x.k;
3085+ return;
3086+ }
3087+ y.k = y.m();
3088+ var subPatches = [];
3089+ _VirtualDom_diffHelp(x.k, y.k, subPatches, 0);
3090+ subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches);
3091+ return;
3092+
3093+ case 4:
3094+ // gather nested taggers
3095+ var xTaggers = x.j;
3096+ var yTaggers = y.j;
3097+ var nesting = false;
3098+
3099+ var xSubNode = x.k;
3100+ while (xSubNode.$ === 4)
3101+ {
3102+ nesting = true;
3103+
3104+ typeof xTaggers !== 'object'
3105+ ? xTaggers = [xTaggers, xSubNode.j]
3106+ : xTaggers.push(xSubNode.j);
3107+
3108+ xSubNode = xSubNode.k;
3109+ }
3110+
3111+ var ySubNode = y.k;
3112+ while (ySubNode.$ === 4)
3113+ {
3114+ nesting = true;
3115+
3116+ typeof yTaggers !== 'object'
3117+ ? yTaggers = [yTaggers, ySubNode.j]
3118+ : yTaggers.push(ySubNode.j);
3119+
3120+ ySubNode = ySubNode.k;
3121+ }
3122+
3123+ // Just bail if different numbers of taggers. This implies the
3124+ // structure of the virtual DOM has changed.
3125+ if (nesting && xTaggers.length !== yTaggers.length)
3126+ {
3127+ _VirtualDom_pushPatch(patches, 0, index, y);
3128+ return;
3129+ }
3130+
3131+ // check if taggers are "the same"
3132+ if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers)
3133+ {
3134+ _VirtualDom_pushPatch(patches, 2, index, yTaggers);
3135+ }
3136+
3137+ // diff everything below the taggers
3138+ _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1);
3139+ return;
3140+
3141+ case 0:
3142+ if (x.a !== y.a)
3143+ {
3144+ _VirtualDom_pushPatch(patches, 3, index, y.a);
3145+ }
3146+ return;
3147+
3148+ case 1:
3149+ _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids);
3150+ return;
3151+
3152+ case 2:
3153+ _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids);
3154+ return;
3155+
3156+ case 3:
3157+ if (x.h !== y.h)
3158+ {
3159+ _VirtualDom_pushPatch(patches, 0, index, y);
3160+ return;
3161+ }
3162+
3163+ var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
3164+ factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
3165+
3166+ var patch = y.i(x.g, y.g);
3167+ patch && _VirtualDom_pushPatch(patches, 5, index, patch);
3168+
3169+ return;
3170+ }
3171+}
3172+
3173+// assumes the incoming arrays are the same length
3174+function _VirtualDom_pairwiseRefEqual(as, bs)
3175+{
3176+ for (var i = 0; i < as.length; i++)
3177+ {
3178+ if (as[i] !== bs[i])
3179+ {
3180+ return false;
3181+ }
3182+ }
3183+
3184+ return true;
3185+}
3186+
3187+function _VirtualDom_diffNodes(x, y, patches, index, diffKids)
3188+{
3189+ // Bail if obvious indicators have changed. Implies more serious
3190+ // structural changes such that it's not worth it to diff.
3191+ if (x.c !== y.c || x.f !== y.f)
3192+ {
3193+ _VirtualDom_pushPatch(patches, 0, index, y);
3194+ return;
3195+ }
3196+
3197+ var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
3198+ factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
3199+
3200+ diffKids(x, y, patches, index);
3201+}
3202+
3203+
3204+
3205+// DIFF FACTS
3206+
3207+
3208+// TODO Instead of creating a new diff object, it's possible to just test if
3209+// there *is* a diff. During the actual patch, do the diff again and make the
3210+// modifications directly. This way, there's no new allocations. Worth it?
3211+function _VirtualDom_diffFacts(x, y, category)
3212+{
3213+ var diff;
3214+
3215+ // look for changes and removals
3216+ for (var xKey in x)
3217+ {
3218+ if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4')
3219+ {
3220+ var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey);
3221+ if (subDiff)
3222+ {
3223+ diff = diff || {};
3224+ diff[xKey] = subDiff;
3225+ }
3226+ continue;
3227+ }
3228+
3229+ // remove if not in the new facts
3230+ if (!(xKey in y))
3231+ {
3232+ diff = diff || {};
3233+ diff[xKey] =
3234+ !category
3235+ ? (typeof x[xKey] === 'string' ? '' : null)
3236+ :
3237+ (category === 'a1')
3238+ ? ''
3239+ :
3240+ (category === 'a0' || category === 'a3')
3241+ ? undefined
3242+ :
3243+ { f: x[xKey].f, o: undefined };
3244+
3245+ continue;
3246+ }
3247+
3248+ var xValue = x[xKey];
3249+ var yValue = y[xKey];
3250+
3251+ // reference equal, so don't worry about it
3252+ if (xValue === yValue && xKey !== 'value' && xKey !== 'checked'
3253+ || category === 'a0' && _VirtualDom_equalEvents(xValue, yValue))
3254+ {
3255+ continue;
3256+ }
3257+
3258+ diff = diff || {};
3259+ diff[xKey] = yValue;
3260+ }
3261+
3262+ // add new stuff
3263+ for (var yKey in y)
3264+ {
3265+ if (!(yKey in x))
3266+ {
3267+ diff = diff || {};
3268+ diff[yKey] = y[yKey];
3269+ }
3270+ }
3271+
3272+ return diff;
3273+}
3274+
3275+
3276+
3277+// DIFF KIDS
3278+
3279+
3280+function _VirtualDom_diffKids(xParent, yParent, patches, index)
3281+{
3282+ var xKids = xParent.e;
3283+ var yKids = yParent.e;
3284+
3285+ var xLen = xKids.length;
3286+ var yLen = yKids.length;
3287+
3288+ // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
3289+
3290+ if (xLen > yLen)
3291+ {
3292+ _VirtualDom_pushPatch(patches, 6, index, {
3293+ v: yLen,
3294+ i: xLen - yLen
3295+ });
3296+ }
3297+ else if (xLen < yLen)
3298+ {
3299+ _VirtualDom_pushPatch(patches, 7, index, {
3300+ v: xLen,
3301+ e: yKids
3302+ });
3303+ }
3304+
3305+ // PAIRWISE DIFF EVERYTHING ELSE
3306+
3307+ for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++)
3308+ {
3309+ var xKid = xKids[i];
3310+ _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index);
3311+ index += xKid.b || 0;
3312+ }
3313+}
3314+
3315+
3316+
3317+// KEYED DIFF
3318+
3319+
3320+function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex)
3321+{
3322+ var localPatches = [];
3323+
3324+ var changes = {}; // Dict String Entry
3325+ var inserts = []; // Array { index : Int, entry : Entry }
3326+ // type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
3327+
3328+ var xKids = xParent.e;
3329+ var yKids = yParent.e;
3330+ var xLen = xKids.length;
3331+ var yLen = yKids.length;
3332+ var xIndex = 0;
3333+ var yIndex = 0;
3334+
3335+ var index = rootIndex;
3336+
3337+ while (xIndex < xLen && yIndex < yLen)
3338+ {
3339+ var x = xKids[xIndex];
3340+ var y = yKids[yIndex];
3341+
3342+ var xKey = x.a;
3343+ var yKey = y.a;
3344+ var xNode = x.b;
3345+ var yNode = y.b;
3346+
3347+ var newMatch = undefined;
3348+ var oldMatch = undefined;
3349+
3350+ // check if keys match
3351+
3352+ if (xKey === yKey)
3353+ {
3354+ index++;
3355+ _VirtualDom_diffHelp(xNode, yNode, localPatches, index);
3356+ index += xNode.b || 0;
3357+
3358+ xIndex++;
3359+ yIndex++;
3360+ continue;
3361+ }
3362+
3363+ // look ahead 1 to detect insertions and removals.
3364+
3365+ var xNext = xKids[xIndex + 1];
3366+ var yNext = yKids[yIndex + 1];
3367+
3368+ if (xNext)
3369+ {
3370+ var xNextKey = xNext.a;
3371+ var xNextNode = xNext.b;
3372+ oldMatch = yKey === xNextKey;
3373+ }
3374+
3375+ if (yNext)
3376+ {
3377+ var yNextKey = yNext.a;
3378+ var yNextNode = yNext.b;
3379+ newMatch = xKey === yNextKey;
3380+ }
3381+
3382+
3383+ // swap x and y
3384+ if (newMatch && oldMatch)
3385+ {
3386+ index++;
3387+ _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
3388+ _VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts);
3389+ index += xNode.b || 0;
3390+
3391+ index++;
3392+ _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index);
3393+ index += xNextNode.b || 0;
3394+
3395+ xIndex += 2;
3396+ yIndex += 2;
3397+ continue;
3398+ }
3399+
3400+ // insert y
3401+ if (newMatch)
3402+ {
3403+ index++;
3404+ _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
3405+ _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
3406+ index += xNode.b || 0;
3407+
3408+ xIndex += 1;
3409+ yIndex += 2;
3410+ continue;
3411+ }
3412+
3413+ // remove x
3414+ if (oldMatch)
3415+ {
3416+ index++;
3417+ _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
3418+ index += xNode.b || 0;
3419+
3420+ index++;
3421+ _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index);
3422+ index += xNextNode.b || 0;
3423+
3424+ xIndex += 2;
3425+ yIndex += 1;
3426+ continue;
3427+ }
3428+
3429+ // remove x, insert y
3430+ if (xNext && xNextKey === yNextKey)
3431+ {
3432+ index++;
3433+ _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
3434+ _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
3435+ index += xNode.b || 0;
3436+
3437+ index++;
3438+ _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index);
3439+ index += xNextNode.b || 0;
3440+
3441+ xIndex += 2;
3442+ yIndex += 2;
3443+ continue;
3444+ }
3445+
3446+ break;
3447+ }
3448+
3449+ // eat up any remaining nodes with removeNode and insertNode
3450+
3451+ while (xIndex < xLen)
3452+ {
3453+ index++;
3454+ var x = xKids[xIndex];
3455+ var xNode = x.b;
3456+ _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index);
3457+ index += xNode.b || 0;
3458+ xIndex++;
3459+ }
3460+
3461+ while (yIndex < yLen)
3462+ {
3463+ var endInserts = endInserts || [];
3464+ var y = yKids[yIndex];
3465+ _VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts);
3466+ yIndex++;
3467+ }
3468+
3469+ if (localPatches.length > 0 || inserts.length > 0 || endInserts)
3470+ {
3471+ _VirtualDom_pushPatch(patches, 8, rootIndex, {
3472+ w: localPatches,
3473+ x: inserts,
3474+ y: endInserts
3475+ });
3476+ }
3477+}
3478+
3479+
3480+
3481+// CHANGES FROM KEYED DIFF
3482+
3483+
3484+var _VirtualDom_POSTFIX = '_elmW6BL';
3485+
3486+
3487+function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts)
3488+{
3489+ var entry = changes[key];
3490+
3491+ // never seen this key before
3492+ if (!entry)
3493+ {
3494+ entry = {
3495+ c: 0,
3496+ z: vnode,
3497+ r: yIndex,
3498+ s: undefined
3499+ };
3500+
3501+ inserts.push({ r: yIndex, A: entry });
3502+ changes[key] = entry;
3503+
3504+ return;
3505+ }
3506+
3507+ // this key was removed earlier, a match!
3508+ if (entry.c === 1)
3509+ {
3510+ inserts.push({ r: yIndex, A: entry });
3511+
3512+ entry.c = 2;
3513+ var subPatches = [];
3514+ _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r);
3515+ entry.r = yIndex;
3516+ entry.s.s = {
3517+ w: subPatches,
3518+ A: entry
3519+ };
3520+
3521+ return;
3522+ }
3523+
3524+ // this key has already been inserted or moved, a duplicate!
3525+ _VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts);
3526+}
3527+
3528+
3529+function _VirtualDom_removeNode(changes, localPatches, key, vnode, index)
3530+{
3531+ var entry = changes[key];
3532+
3533+ // never seen this key before
3534+ if (!entry)
3535+ {
3536+ var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined);
3537+
3538+ changes[key] = {
3539+ c: 1,
3540+ z: vnode,
3541+ r: index,
3542+ s: patch
3543+ };
3544+
3545+ return;
3546+ }
3547+
3548+ // this key was inserted earlier, a match!
3549+ if (entry.c === 0)
3550+ {
3551+ entry.c = 2;
3552+ var subPatches = [];
3553+ _VirtualDom_diffHelp(vnode, entry.z, subPatches, index);
3554+
3555+ _VirtualDom_pushPatch(localPatches, 9, index, {
3556+ w: subPatches,
3557+ A: entry
3558+ });
3559+
3560+ return;
3561+ }
3562+
3563+ // this key has already been removed or moved, a duplicate!
3564+ _VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index);
3565+}
3566+
3567+
3568+
3569+// ADD DOM NODES
3570+//
3571+// Each DOM node has an "index" assigned in order of traversal. It is important
3572+// to minimize our crawl over the actual DOM, so these indexes (along with the
3573+// descendantsCount of virtual nodes) let us skip touching entire subtrees of
3574+// the DOM if we know there are no patches there.
3575+
3576+
3577+function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode)
3578+{
3579+ _VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode);
3580+}
3581+
3582+
3583+// assumes `patches` is non-empty and indexes increase monotonically.
3584+function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
3585+{
3586+ var patch = patches[i];
3587+ var index = patch.r;
3588+
3589+ while (index === low)
3590+ {
3591+ var patchType = patch.$;
3592+
3593+ if (patchType === 1)
3594+ {
3595+ _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode);
3596+ }
3597+ else if (patchType === 8)
3598+ {
3599+ patch.t = domNode;
3600+ patch.u = eventNode;
3601+
3602+ var subPatches = patch.s.w;
3603+ if (subPatches.length > 0)
3604+ {
3605+ _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
3606+ }
3607+ }
3608+ else if (patchType === 9)
3609+ {
3610+ patch.t = domNode;
3611+ patch.u = eventNode;
3612+
3613+ var data = patch.s;
3614+ if (data)
3615+ {
3616+ data.A.s = domNode;
3617+ var subPatches = data.w;
3618+ if (subPatches.length > 0)
3619+ {
3620+ _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
3621+ }
3622+ }
3623+ }
3624+ else
3625+ {
3626+ patch.t = domNode;
3627+ patch.u = eventNode;
3628+ }
3629+
3630+ i++;
3631+
3632+ if (!(patch = patches[i]) || (index = patch.r) > high)
3633+ {
3634+ return i;
3635+ }
3636+ }
3637+
3638+ var tag = vNode.$;
3639+
3640+ if (tag === 4)
3641+ {
3642+ var subNode = vNode.k;
3643+
3644+ while (subNode.$ === 4)
3645+ {
3646+ subNode = subNode.k;
3647+ }
3648+
3649+ return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, _VirtualDom_getMeta(domNode).elm_event_node_ref);
3650+ }
3651+
3652+ // tag must be 1 or 2 at this point
3653+
3654+ var vKids = vNode.e;
3655+ var childNodes = _Lynx_getChildren(domNode);
3656+ for (var j = 0; j < vKids.length; j++)
3657+ {
3658+ low++;
3659+ var vKid = tag === 1 ? vKids[j] : vKids[j].b;
3660+ var nextLow = low + (vKid.b || 0);
3661+ if (low <= index && index <= nextLow)
3662+ {
3663+ i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode);
3664+ if (!(patch = patches[i]) || (index = patch.r) > high)
3665+ {
3666+ return i;
3667+ }
3668+ }
3669+ low = nextLow;
3670+ }
3671+ return i;
3672+}
3673+
3674+
3675+
3676+// APPLY PATCHES
3677+
3678+
3679+function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
3680+{
3681+ if (patches.length === 0)
3682+ {
3683+ return rootDomNode;
3684+ }
3685+
3686+ _VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
3687+ return _VirtualDom_applyPatchesHelp(rootDomNode, patches);
3688+}
3689+
3690+function _VirtualDom_applyPatchesHelp(rootDomNode, patches)
3691+{
3692+ for (var i = 0; i < patches.length; i++)
3693+ {
3694+ var patch = patches[i];
3695+ var localDomNode = patch.t
3696+ var newNode = _VirtualDom_applyPatch(localDomNode, patch);
3697+ if (localDomNode === rootDomNode)
3698+ {
3699+ rootDomNode = newNode;
3700+ }
3701+ }
3702+ return rootDomNode;
3703+}
3704+
3705+function _VirtualDom_applyPatch(domNode, patch)
3706+{
3707+ switch (patch.$)
3708+ {
3709+ case 0:
3710+ return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u);
3711+
3712+ case 4:
3713+ _VirtualDom_applyFacts(domNode, patch.u, patch.s);
3714+ return domNode;
3715+
3716+ case 3:
3717+ _Lynx_setAttribute(domNode, 'text', patch.s);
3718+ return domNode;
3719+
3720+ case 1:
3721+ return _VirtualDom_applyPatchesHelp(domNode, patch.s);
3722+
3723+ case 2:
3724+ if (_VirtualDom_getMeta(domNode).elm_event_node_ref)
3725+ {
3726+ _VirtualDom_getMeta(domNode).elm_event_node_ref.j = patch.s;
3727+ }
3728+ else
3729+ {
3730+ _VirtualDom_getMeta(domNode).elm_event_node_ref = { j: patch.s, p: patch.u };
3731+ }
3732+ return domNode;
3733+
3734+ case 6:
3735+ var data = patch.s;
3736+ for (var i = 0; i < data.i; i++)
3737+ {
3738+ var children = _Lynx_getChildren(domNode);
3739+ _Lynx_removeElement(domNode, children[data.v]);
3740+ }
3741+ return domNode;
3742+
3743+ case 7:
3744+ var data = patch.s;
3745+ var kids = data.e;
3746+ for (var i = data.v; i < kids.length; i++)
3747+ {
3748+ _Lynx_appendChild(domNode, _VirtualDom_render(kids[i], patch.u));
3749+ }
3750+ return domNode;
3751+
3752+ case 9:
3753+ var data = patch.s;
3754+ if (!data)
3755+ {
3756+ _Lynx_removeElement(_Lynx_getParent(domNode), domNode);
3757+ return domNode;
3758+ }
3759+ var entry = data.A;
3760+ if (typeof entry.r !== 'undefined')
3761+ {
3762+ _Lynx_removeElement(_Lynx_getParent(domNode), domNode);
3763+ }
3764+ entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w);
3765+ return domNode;
3766+
3767+ case 8:
3768+ return _VirtualDom_applyPatchReorder(domNode, patch);
3769+
3770+ case 5:
3771+ return patch.s(domNode);
3772+
3773+ default:
3774+ throw new Error('VirtualDom: unknown patch type');
3775+ }
3776+}
3777+
3778+
3779+function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode)
3780+{
3781+ var parentNode = _Lynx_getParent(domNode);
3782+ var newNode = _VirtualDom_render(vNode, eventNode);
3783+
3784+ if (!_VirtualDom_getMeta(newNode).elm_event_node_ref)
3785+ {
3786+ _VirtualDom_getMeta(newNode).elm_event_node_ref = _VirtualDom_getMeta(domNode).elm_event_node_ref;
3787+ }
3788+
3789+ if (parentNode && newNode !== domNode)
3790+ {
3791+ _Lynx_replaceElement(parentNode, newNode, domNode);
3792+ }
3793+ return newNode;
3794+}
3795+
3796+
3797+function _VirtualDom_applyPatchReorder(domNode, patch)
3798+{
3799+ var data = patch.s;
3800+
3801+ // remove end inserts
3802+ var endInsertNodes = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch);
3803+
3804+ // removals
3805+ domNode = _VirtualDom_applyPatchesHelp(domNode, data.w);
3806+
3807+ // inserts
3808+ var inserts = data.x;
3809+ for (var i = 0; i < inserts.length; i++)
3810+ {
3811+ var insert = inserts[i];
3812+ var entry = insert.A;
3813+ var node = entry.c === 2
3814+ ? entry.s
3815+ : _VirtualDom_render(entry.z, patch.u);
3816+ var children = _Lynx_getChildren(domNode);
3817+ _Lynx_insertBefore(domNode, node, children[insert.r]);
3818+ }
3819+
3820+ // add end inserts
3821+ if (endInsertNodes)
3822+ {
3823+ for (var i = 0; i < endInsertNodes.length; i++)
3824+ {
3825+ _Lynx_appendChild(domNode, endInsertNodes[i]);
3826+ }
3827+ }
3828+
3829+ return domNode;
3830+}
3831+
3832+
3833+function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch)
3834+{
3835+ if (!endInserts)
3836+ {
3837+ return;
3838+ }
3839+
3840+ var nodes = [];
3841+ for (var i = 0; i < endInserts.length; i++)
3842+ {
3843+ var insert = endInserts[i];
3844+ var entry = insert.A;
3845+ nodes.push(entry.c === 2
3846+ ? entry.s
3847+ : _VirtualDom_render(entry.z, patch.u)
3848+ );
3849+ }
3850+ return nodes;
3851+}
3852+
3853+
3854+function _VirtualDom_dekey(keyedNode)
3855+{
3856+ var keyedKids = keyedNode.e;
3857+ var len = keyedKids.length;
3858+ var kids = new Array(len);
3859+ for (var i = 0; i < len; i++)
3860+ {
3861+ kids[i] = keyedKids[i].b;
3862+ }
3863+
3864+ return {
3865+ $: 1,
3866+ c: keyedNode.c,
3867+ d: keyedNode.d,
3868+ e: kids,
3869+ f: keyedNode.f,
3870+ b: keyedNode.b
3871+ };
3872+}
3873+
3874+
3875+
3876+// LYNXJS PAPI WRAPPERS
3877+var _Browser_lynx = (typeof globalThis !== 'undefined' ? globalThis : scope);
3878+function _Browser_newPage() {
3879+ return _Browser_lynx['page'];
3880+}
3881+function _Browser_flush() {
3882+ var fn = _Browser_lynx['_' + '_FlushElementTree'];
3883+ if (typeof fn === 'function') { fn(); }
3884+}
3885+
3886+
3887+
3888+// ELEMENT
3889+
3890+
3891+var _Browser_element = F4(function(impl, flagDecoder, debugMetadata, args)
3892+{
3893+ return _Platform_initialize(
3894+ flagDecoder,
3895+ args,
3896+ impl.init,
3897+ impl.update,
3898+ impl.subscriptions,
3899+ function(sendToApp, initialModel) {
3900+ var view = impl.view;
3901+ var domNode = args['node'] || _Browser_newPage();
3902+ var currNode = view(initialModel);
3903+ var currDomNode = _VirtualDom_render(currNode, sendToApp);
3904+ _VirtualDom_appendChild(domNode, currDomNode);
3905+ _Browser_flush();
3906+
3907+ return _Browser_makeAnimator(initialModel, function(model)
3908+ {
3909+ var nextNode = view(model);
3910+ var patches = _VirtualDom_diff(currNode, nextNode);
3911+ currDomNode = _VirtualDom_applyPatches(currDomNode, currNode, patches, sendToApp);
3912+ currNode = nextNode;
3913+ _Browser_flush();
3914+ });
3915+ }
3916+ );
3917+});
3918+
3919+
3920+
3921+// DOCUMENT
3922+
3923+
3924+var _Browser_document = F4(function(impl, flagDecoder, debugMetadata, args)
3925+{
3926+ return _Platform_initialize(
3927+ flagDecoder,
3928+ args,
3929+ impl.init,
3930+ impl.update,
3931+ impl.subscriptions,
3932+ function(sendToApp, initialModel) {
3933+ var view = impl.view;
3934+ var rootNode = args['node'] || _Browser_newPage();
3935+ var doc = view(initialModel);
3936+ var currNode = _VirtualDom_node('view')(_List_Nil)(doc.body);
3937+ var currDomNode = _VirtualDom_render(currNode, sendToApp);
3938+ _VirtualDom_appendChild(rootNode, currDomNode);
3939+ _Browser_flush();
3940+
3941+ return _Browser_makeAnimator(initialModel, function(model)
3942+ {
3943+ var doc = view(model);
3944+ var nextNode = _VirtualDom_node('view')(_List_Nil)(doc.body);
3945+ var patches = _VirtualDom_diff(currNode, nextNode);
3946+ currDomNode = _VirtualDom_applyPatches(currDomNode, currNode, patches, sendToApp);
3947+ currNode = nextNode;
3948+ _Browser_flush();
3949+ });
3950+ }
3951+ );
3952+});
3953+
3954+
3955+
3956+// ANIMATION
3957+
3958+
3959+var _Browser_cancelAnimationFrame =
3960+ function(id) { clearTimeout(id); };
3961+
3962+var _Browser_requestAnimationFrame =
3963+ function(callback) { return setTimeout(callback, 1000 / 60); };
3964+
3965+
3966+function _Browser_makeAnimator(model, draw)
3967+{
3968+ draw(model);
3969+
3970+ var state = 0;
3971+
3972+ function updateIfNeeded()
3973+ {
3974+ state = state === 1
3975+ ? 0
3976+ : ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 );
3977+ }
3978+
3979+ return function(nextModel, isSync)
3980+ {
3981+ model = nextModel;
3982+
3983+ isSync
3984+ ? ( draw(model),
3985+ state === 2 && (state = 1)
3986+ )
3987+ : ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded),
3988+ state = 2
3989+ );
3990+ };
3991+}
3992+
3993+
3994+
3995+// APPLICATION
3996+
3997+
3998+function _Browser_application(impl)
3999+{
4000+ return _Browser_document({
4001+ init: function(flags)
4002+ {
4003+ return A3(impl.init, flags, _Browser_fakeUrl(), {});
4004+ },
4005+ view: impl.view,
4006+ update: impl.update,
4007+ subscriptions: impl.subscriptions
4008+ });
4009+}
4010+
4011+function _Browser_fakeUrl()
4012+{
4013+ return {
4014+ protocol: { $: 0 },
4015+ host: 'localhost',
4016+ port_: { $: 1 },
4017+ path: '/',
4018+ query: { $: 1 },
4019+ fragment: { $: 1 }
4020+ };
4021+}
4022+
4023+
4024+
4025+var _Browser_go = F2(function(key, n)
4026+{
4027+ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4028+ // no-op in LynxJS
4029+ key();
4030+ }));
4031+});
4032+
4033+var _Browser_pushUrl = F2(function(key, url)
4034+{
4035+ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4036+ // no-op in LynxJS
4037+ key();
4038+ }));
4039+});
4040+
4041+var _Browser_replaceUrl = F2(function(key, url)
4042+{
4043+ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() {
4044+ // no-op in LynxJS
4045+ key();
4046+ }));
4047+});
4048+
4049+
4050+
4051+// GLOBAL EVENTS
4052+
4053+
4054+var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} };
4055+var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode;
4056+var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode;
4057+
4058+var _Browser_on = F3(function(node, eventName, sendToSelf)
4059+{
4060+ return _Scheduler_spawn(_Scheduler_binding(function(callback)
4061+ {
4062+ return function() {};
4063+ }));
4064+});
4065+
4066+var _Browser_decodeEvent = F2(function(decoder, event)
4067+{
4068+ var result = _Json_runHelp(decoder, event);
4069+ return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing;
4070+});
4071+
4072+
4073+
4074+// PAGE VISIBILITY
4075+
4076+
4077+function _Browser_visibilityInfo()
4078+{
4079+ return (typeof _VirtualDom_doc.hidden !== 'undefined')
4080+ ? { hidden: 'hidden', change: 'visibilitychange' }
4081+ :
4082+ (typeof _VirtualDom_doc.mozHidden !== 'undefined')
4083+ ? { hidden: 'mozHidden', change: 'mozvisibilitychange' }
4084+ :
4085+ (typeof _VirtualDom_doc.msHidden !== 'undefined')
4086+ ? { hidden: 'msHidden', change: 'msvisibilitychange' }
4087+ :
4088+ (typeof _VirtualDom_doc.webkitHidden !== 'undefined')
4089+ ? { hidden: 'webkitHidden', change: 'webkitvisibilitychange' }
4090+ : { hidden: 'hidden', change: 'visibilitychange' };
4091+}
4092+
4093+
4094+
4095+// ANIMATION FRAMES
4096+
4097+
4098+function _Browser_rAF()
4099+{
4100+ return _Scheduler_binding(function(callback)
4101+ {
4102+ var id = _Browser_requestAnimationFrame(function() {
4103+ callback(_Scheduler_succeed(Date.now()));
4104+ });
4105+
4106+ return function() {
4107+ _Browser_cancelAnimationFrame(id);
4108+ };
4109+ });
4110+}
4111+
4112+
4113+function _Browser_now()
4114+{
4115+ return _Scheduler_binding(function(callback)
4116+ {
4117+ callback(_Scheduler_succeed(Date.now()));
4118+ });
4119+}
4120+
4121+
4122+
4123+// DOM STUFF
4124+
4125+
4126+function _Browser_withNode(id, doStuff)
4127+{
4128+ return _Scheduler_binding(function(callback)
4129+ {
4130+ callback(_Scheduler_fail($lynxjs_elm$browser$Browser$Dom$NotFound(id)));
4131+ });
4132+}
4133+
4134+
4135+function _Browser_withWindow(doStuff)
4136+{
4137+ return _Scheduler_binding(function(callback)
4138+ {
4139+ _Browser_requestAnimationFrame(function() {
4140+ callback(_Scheduler_succeed(doStuff()));
4141+ });
4142+ });
4143+}
4144+
4145+
4146+// FOCUS and BLUR
4147+
4148+
4149+var _Browser_call = F2(function(functionName, id)
4150+{
4151+ return _Browser_withNode(id, function(node) {
4152+ node[functionName]();
4153+ return _Utils_Tuple0;
4154+ });
4155+});
4156+
4157+
4158+
4159+// WINDOW VIEWPORT
4160+
4161+
4162+function _Browser_getViewport()
4163+{
4164+ return {
4165+ scene: _Browser_getScene(),
4166+ viewport: {
4167+ x: _Browser_window.pageXOffset,
4168+ y: _Browser_window.pageYOffset,
4169+ width: _Browser_doc.documentElement.clientWidth,
4170+ height: _Browser_doc.documentElement.clientHeight
4171+ }
4172+ };
4173+}
4174+
4175+function _Browser_getScene()
4176+{
4177+ var body = _Browser_doc.body;
4178+ var elem = _Browser_doc.documentElement;
4179+ return {
4180+ width: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth),
4181+ height: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight)
4182+ };
4183+}
4184+
4185+var _Browser_setViewport = F2(function(x, y)
4186+{
4187+ return _Browser_withWindow(function()
4188+ {
4189+ _Browser_window.scroll(x, y);
4190+ return _Utils_Tuple0;
4191+ });
4192+});
4193+
4194+
4195+
4196+// ELEMENT VIEWPORT
4197+
4198+
4199+function _Browser_getViewportOf(id)
4200+{
4201+ return _Browser_withNode(id, function(node)
4202+ {
4203+ return {
4204+ scene: {
4205+ width: node.scrollWidth,
4206+ height: node.scrollHeight
4207+ },
4208+ viewport: {
4209+ x: node.scrollLeft,
4210+ y: node.scrollTop,
4211+ width: node.clientWidth,
4212+ height: node.clientHeight
4213+ }
4214+ };
4215+ });
4216+}
4217+
4218+
4219+var _Browser_setViewportOf = F3(function(id, x, y)
4220+{
4221+ return _Browser_withNode(id, function(node)
4222+ {
4223+ node.scrollLeft = x;
4224+ node.scrollTop = y;
4225+ return _Utils_Tuple0;
4226+ });
4227+});
4228+
4229+
4230+
4231+// ELEMENT
4232+
4233+
4234+function _Browser_getElement(id)
4235+{
4236+ return _Browser_withNode(id, function(node)
4237+ {
4238+ var rect = node.getBoundingClientRect();
4239+ var x = _Browser_window.pageXOffset;
4240+ var y = _Browser_window.pageYOffset;
4241+ return {
4242+ scene: _Browser_getScene(),
4243+ viewport: {
4244+ x: x,
4245+ y: y,
4246+ width: _Browser_doc.documentElement.clientWidth,
4247+ height: _Browser_doc.documentElement.clientHeight
4248+ },
4249+ element: {
4250+ x: x + rect.left,
4251+ y: y + rect.top,
4252+ width: rect.width,
4253+ height: rect.height
4254+ }
4255+ };
4256+ });
4257+}
4258+
4259+
4260+
4261+// LOAD and RELOAD
4262+
4263+
4264+function _Browser_reload(skipCache)
4265+{
4266+ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
4267+ {
4268+ // no-op in LynxJS
4269+ }));
4270+}
4271+
4272+function _Browser_load(url)
4273+{
4274+ return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback)
4275+ {
4276+ try
4277+ {
4278+ // no-op in LynxJS
4279+ }
4280+ catch(err)
4281+ {
4282+ // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.
4283+ // Other browsers reload the page, so let's be consistent about that.
4284+ // no-op in LynxJS
4285+ }
4286+ }));
4287+}
4288+
4289+
4290+
4291+var _Bitwise_and = F2(function(a, b)
4292+{
4293+ return a & b;
4294+});
4295+
4296+var _Bitwise_or = F2(function(a, b)
4297+{
4298+ return a | b;
4299+});
4300+
4301+var _Bitwise_xor = F2(function(a, b)
4302+{
4303+ return a ^ b;
4304+});
4305+
4306+function _Bitwise_complement(a)
4307+{
4308+ return ~a;
4309+};
4310+
4311+var _Bitwise_shiftLeftBy = F2(function(offset, a)
4312+{
4313+ return a << offset;
4314+});
4315+
4316+var _Bitwise_shiftRightBy = F2(function(offset, a)
4317+{
4318+ return a >> offset;
4319+});
4320+
4321+var _Bitwise_shiftRightZfBy = F2(function(offset, a)
4322+{
4323+ return a >>> offset;
4324+});
4325+
4326+
4327+
4328+function _Time_now(millisToPosix)
4329+{
4330+ return _Scheduler_binding(function(callback)
4331+ {
4332+ callback(_Scheduler_succeed(millisToPosix(Date.now())));
4333+ });
4334+}
4335+
4336+var _Time_setInterval = F2(function(interval, task)
4337+{
4338+ return _Scheduler_binding(function(callback)
4339+ {
4340+ var id = setInterval(function() { _Scheduler_rawSpawn(task); }, interval);
4341+ return function() { clearInterval(id); };
4342+ });
4343+});
4344+
4345+function _Time_here()
4346+{
4347+ return _Scheduler_binding(function(callback)
4348+ {
4349+ callback(_Scheduler_succeed(
4350+ A2($elm$time$Time$customZone, -(new Date().getTimezoneOffset()), _List_Nil)
4351+ ));
4352+ });
4353+}
4354+
4355+
4356+function _Time_getZoneName()
4357+{
4358+ return _Scheduler_binding(function(callback)
4359+ {
4360+ try
4361+ {
4362+ var name = $elm$time$Time$Name(Intl.DateTimeFormat().resolvedOptions().timeZone);
4363+ }
4364+ catch (e)
4365+ {
4366+ var name = $elm$time$Time$Offset(new Date().getTimezoneOffset());
4367+ }
4368+ callback(_Scheduler_succeed(name));
4369+ });
4370+}
4371+
4372+
4373+// BYTES
4374+
4375+function _Bytes_width(bytes)
4376+{
4377+ return bytes.byteLength;
4378+}
4379+
4380+var _Bytes_getHostEndianness = F2(function(le, be)
4381+{
4382+ return _Scheduler_binding(function(callback)
4383+ {
4384+ callback(_Scheduler_succeed(new Uint8Array(new Uint32Array([1]))[0] === 1 ? le : be));
4385+ });
4386+});
4387+
4388+
4389+// ENCODERS
4390+
4391+function _Bytes_encode(encoder)
4392+{
4393+ var mutableBytes = new DataView(new ArrayBuffer($elm$bytes$Bytes$Encode$getWidth(encoder)));
4394+ $elm$bytes$Bytes$Encode$write(encoder)(mutableBytes)(0);
4395+ return mutableBytes;
4396+}
4397+
4398+
4399+// SIGNED INTEGERS
4400+
4401+var _Bytes_write_i8 = F3(function(mb, i, n) { mb.setInt8(i, n); return i + 1; });
4402+var _Bytes_write_i16 = F4(function(mb, i, n, isLE) { mb.setInt16(i, n, isLE); return i + 2; });
4403+var _Bytes_write_i32 = F4(function(mb, i, n, isLE) { mb.setInt32(i, n, isLE); return i + 4; });
4404+
4405+
4406+// UNSIGNED INTEGERS
4407+
4408+var _Bytes_write_u8 = F3(function(mb, i, n) { mb.setUint8(i, n); return i + 1 ;});
4409+var _Bytes_write_u16 = F4(function(mb, i, n, isLE) { mb.setUint16(i, n, isLE); return i + 2; });
4410+var _Bytes_write_u32 = F4(function(mb, i, n, isLE) { mb.setUint32(i, n, isLE); return i + 4; });
4411+
4412+
4413+// FLOATS
4414+
4415+var _Bytes_write_f32 = F4(function(mb, i, n, isLE) { mb.setFloat32(i, n, isLE); return i + 4; });
4416+var _Bytes_write_f64 = F4(function(mb, i, n, isLE) { mb.setFloat64(i, n, isLE); return i + 8; });
4417+
4418+
4419+// BYTES
4420+
4421+var _Bytes_write_bytes = F3(function(mb, offset, bytes)
4422+{
4423+ for (var i = 0, len = bytes.byteLength, limit = len - 4; i <= limit; i += 4)
4424+ {
4425+ mb.setUint32(offset + i, bytes.getUint32(i));
4426+ }
4427+ for (; i < len; i++)
4428+ {
4429+ mb.setUint8(offset + i, bytes.getUint8(i));
4430+ }
4431+ return offset + len;
4432+});
4433+
4434+
4435+// STRINGS
4436+
4437+function _Bytes_getStringWidth(string)
4438+{
4439+ for (var width = 0, i = 0; i < string.length; i++)
4440+ {
4441+ var code = string.charCodeAt(i);
4442+ width +=
4443+ (code < 0x80) ? 1 :
4444+ (code < 0x800) ? 2 :
4445+ (code < 0xD800 || 0xDBFF < code) ? 3 : (i++, 4);
4446+ }
4447+ return width;
4448+}
4449+
4450+var _Bytes_write_string = F3(function(mb, offset, string)
4451+{
4452+ for (var i = 0; i < string.length; i++)
4453+ {
4454+ var code = string.charCodeAt(i);
4455+ offset +=
4456+ (code < 0x80)
4457+ ? (mb.setUint8(offset, code)
4458+ , 1
4459+ )
4460+ :
4461+ (code < 0x800)
4462+ ? (mb.setUint16(offset, 0xC080 /* 0b1100000010000000 */
4463+ | (code >>> 6 & 0x1F /* 0b00011111 */) << 8
4464+ | code & 0x3F /* 0b00111111 */)
4465+ , 2
4466+ )
4467+ :
4468+ (code < 0xD800 || 0xDBFF < code)
4469+ ? (mb.setUint16(offset, 0xE080 /* 0b1110000010000000 */
4470+ | (code >>> 12 & 0xF /* 0b00001111 */) << 8
4471+ | code >>> 6 & 0x3F /* 0b00111111 */)
4472+ , mb.setUint8(offset + 2, 0x80 /* 0b10000000 */
4473+ | code & 0x3F /* 0b00111111 */)
4474+ , 3
4475+ )
4476+ :
4477+ (code = (code - 0xD800) * 0x400 + string.charCodeAt(++i) - 0xDC00 + 0x10000
4478+ , mb.setUint32(offset, 0xF0808080 /* 0b11110000100000001000000010000000 */
4479+ | (code >>> 18 & 0x7 /* 0b00000111 */) << 24
4480+ | (code >>> 12 & 0x3F /* 0b00111111 */) << 16
4481+ | (code >>> 6 & 0x3F /* 0b00111111 */) << 8
4482+ | code & 0x3F /* 0b00111111 */)
4483+ , 4
4484+ );
4485+ }
4486+ return offset;
4487+});
4488+
4489+
4490+// DECODER
4491+
4492+var _Bytes_decode = F2(function(decoder, bytes)
4493+{
4494+ try {
4495+ return $elm$core$Maybe$Just(A2(decoder, bytes, 0).b);
4496+ } catch(e) {
4497+ return $elm$core$Maybe$Nothing;
4498+ }
4499+});
4500+
4501+var _Bytes_read_i8 = F2(function( bytes, offset) { return _Utils_Tuple2(offset + 1, bytes.getInt8(offset)); });
4502+var _Bytes_read_i16 = F3(function(isLE, bytes, offset) { return _Utils_Tuple2(offset + 2, bytes.getInt16(offset, isLE)); });
4503+var _Bytes_read_i32 = F3(function(isLE, bytes, offset) { return _Utils_Tuple2(offset + 4, bytes.getInt32(offset, isLE)); });
4504+var _Bytes_read_u8 = F2(function( bytes, offset) { return _Utils_Tuple2(offset + 1, bytes.getUint8(offset)); });
4505+var _Bytes_read_u16 = F3(function(isLE, bytes, offset) { return _Utils_Tuple2(offset + 2, bytes.getUint16(offset, isLE)); });
4506+var _Bytes_read_u32 = F3(function(isLE, bytes, offset) { return _Utils_Tuple2(offset + 4, bytes.getUint32(offset, isLE)); });
4507+var _Bytes_read_f32 = F3(function(isLE, bytes, offset) { return _Utils_Tuple2(offset + 4, bytes.getFloat32(offset, isLE)); });
4508+var _Bytes_read_f64 = F3(function(isLE, bytes, offset) { return _Utils_Tuple2(offset + 8, bytes.getFloat64(offset, isLE)); });
4509+
4510+var _Bytes_read_bytes = F3(function(len, bytes, offset)
4511+{
4512+ return _Utils_Tuple2(offset + len, new DataView(bytes.buffer, bytes.byteOffset + offset, len));
4513+});
4514+
4515+var _Bytes_read_string = F3(function(len, bytes, offset)
4516+{
4517+ var string = '';
4518+ var end = offset + len;
4519+ for (; offset < end;)
4520+ {
4521+ var byte = bytes.getUint8(offset++);
4522+ string +=
4523+ (byte < 128)
4524+ ? String.fromCharCode(byte)
4525+ :
4526+ ((byte & 0xE0 /* 0b11100000 */) === 0xC0 /* 0b11000000 */)
4527+ ? String.fromCharCode((byte & 0x1F /* 0b00011111 */) << 6 | bytes.getUint8(offset++) & 0x3F /* 0b00111111 */)
4528+ :
4529+ ((byte & 0xF0 /* 0b11110000 */) === 0xE0 /* 0b11100000 */)
4530+ ? String.fromCharCode(
4531+ (byte & 0xF /* 0b00001111 */) << 12
4532+ | (bytes.getUint8(offset++) & 0x3F /* 0b00111111 */) << 6
4533+ | bytes.getUint8(offset++) & 0x3F /* 0b00111111 */
4534+ )
4535+ :
4536+ (byte =
4537+ ((byte & 0x7 /* 0b00000111 */) << 18
4538+ | (bytes.getUint8(offset++) & 0x3F /* 0b00111111 */) << 12
4539+ | (bytes.getUint8(offset++) & 0x3F /* 0b00111111 */) << 6
4540+ | bytes.getUint8(offset++) & 0x3F /* 0b00111111 */
4541+ ) - 0x10000
4542+ , String.fromCharCode(Math.floor(byte / 0x400) + 0xD800, byte % 0x400 + 0xDC00)
4543+ );
4544+ }
4545+ return _Utils_Tuple2(offset, string);
4546+});
4547+
4548+var _Bytes_decodeFailure = F2(function() { throw 0; });
4549+
4550+
4551+
4552+// SEND REQUEST
4553+
4554+var _Http_toTask = F3(function(router, toTask, request)
4555+{
4556+ return _Scheduler_binding(function(callback)
4557+ {
4558+ function done(response) {
4559+ callback(toTask(request.expect.a(response)));
4560+ }
4561+
4562+ var controller = new AbortController();
4563+ var isAborted = false;
4564+
4565+ // Timeout
4566+ var timeoutMs = request.timeout.a || 0;
4567+ var timeoutId = 0;
4568+ if (timeoutMs > 0)
4569+ {
4570+ timeoutId = setTimeout(function() {
4571+ isAborted = true;
4572+ controller.abort();
4573+ done($lynxjs_elm$http$Http$Timeout_);
4574+ }, timeoutMs);
4575+ }
4576+
4577+ // Headers
4578+ var headers = {};
4579+ for (var h = request.headers; h.b; h = h.b) // WHILE_CONS
4580+ {
4581+ headers[h.a.a] = h.a.b;
4582+ }
4583+ if (request.body.a)
4584+ {
4585+ headers['Content-Type'] = request.body.a;
4586+ }
4587+
4588+ // Options
4589+ var options = {
4590+ method: request.method,
4591+ headers: headers,
4592+ signal: controller.signal
4593+ };
4594+ if (request.body.b)
4595+ {
4596+ options.body = request.body.b;
4597+ }
4598+
4599+ // Validate URL
4600+ var url = request.url;
4601+ try { new URL(url, 'http://localhost'); }
4602+ catch (e) { return done($lynxjs_elm$http$Http$BadUrl_(url)); }
4603+
4604+ // Fetch
4605+ fetch(url, options).then(function(response)
4606+ {
4607+ var bodyPromise = request.expect.b === 'arraybuffer'
4608+ ? response.arrayBuffer()
4609+ : response.text();
4610+
4611+ return bodyPromise.then(function(body)
4612+ {
4613+ if (timeoutId) { clearTimeout(timeoutId); }
4614+
4615+ var metadata = {
4616+ url: response.url || url,
4617+ statusCode: response.status,
4618+ statusText: response.statusText,
4619+ headers: _Http_parseHeaders(response.headers)
4620+ };
4621+
4622+ var toBody = request.expect.c;
4623+ done(A2(
4624+ 200 <= response.status && response.status < 300 ? $lynxjs_elm$http$Http$GoodStatus_ : $lynxjs_elm$http$Http$BadStatus_,
4625+ metadata,
4626+ toBody(body)
4627+ ));
4628+ });
4629+ }).catch(function(e)
4630+ {
4631+ if (timeoutId) { clearTimeout(timeoutId); }
4632+ if (!isAborted)
4633+ {
4634+ done($lynxjs_elm$http$Http$NetworkError_);
4635+ }
4636+ });
4637+
4638+ // Tracker
4639+ $elm$core$Maybe$isJust(request.tracker) && _Http_track(router, controller, request.tracker.a);
4640+
4641+ return function() { isAborted = true; controller.abort(); };
4642+ });
4643+});
4644+
4645+
4646+// HEADERS
4647+
4648+function _Http_parseHeaders(headers)
4649+{
4650+ var dict = $elm$core$Dict$empty;
4651+ headers.forEach(function(value, key)
4652+ {
4653+ dict = A3($elm$core$Dict$update, key, function(oldValue) {
4654+ return $elm$core$Maybe$Just($elm$core$Maybe$isJust(oldValue)
4655+ ? value + ', ' + oldValue.a
4656+ : value
4657+ );
4658+ }, dict);
4659+ });
4660+ return dict;
4661+}
4662+
4663+
4664+// EXPECT
4665+
4666+var _Http_expect = F3(function(type, toBody, toValue)
4667+{
4668+ return {
4669+ $: 0,
4670+ b: type,
4671+ c: toBody,
4672+ a: toValue
4673+ };
4674+});
4675+
4676+var _Http_mapExpect = F2(function(func, expect)
4677+{
4678+ return {
4679+ $: 0,
4680+ b: expect.b,
4681+ c: expect.c,
4682+ a: function(x) { return func(expect.a(x)); }
4683+ };
4684+});
4685+
4686+function _Http_toDataView(arrayBuffer)
4687+{
4688+ return _Bytes_wrap(new DataView(arrayBuffer));
4689+}
4690+
4691+
4692+// BODY and PARTS
4693+
4694+var _Http_emptyBody = { $: 0 };
4695+var _Http_pair = F2(function(a, b) { return { $: 0, a: a, b: b }; });
4696+
4697+function _Http_toFormData(parts)
4698+{
4699+ for (var formData = new FormData(); parts.b; parts = parts.b) // WHILE_CONS
4700+ {
4701+ var part = parts.a;
4702+ formData.append(part.a, part.b);
4703+ }
4704+ return formData;
4705+}
4706+
4707+var _Http_bytesToBlob = F2(function(mime, bytes)
4708+{
4709+ return new Blob([bytes], { type: mime });
4710+});
4711+
4712+
4713+// PROGRESS
4714+
4715+function _Http_track(router, controller, tracker)
4716+{
4717+ // fetch does not support upload/download progress events natively.
4718+ // Progress subscriptions will not fire, but the tracker still enables
4719+ // cancellation via Http.cancel.
4720+}
4721+
4722+
4723+
4724+// NOBLE/CURVES BUNDLE (https://github.com/paulmillr/noble-curves, MIT License)
4725+// Embedded: @noble/curves 2.0.1 - secp256k1, ed25519, x25519, P-256
4726+
4727+var _Crypto_noble=(()=>{var ie=Object.defineProperty;var Nn=Object.getOwnPropertyDescriptor;var Dn=Object.getOwnPropertyNames;var Zn=Object.prototype.hasOwnProperty;var Cn=(e,t)=>{for(var r in t)ie(e,r,{get:t[r],enumerable:!0})},Vn=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Dn(t))!Zn.call(e,o)&&o!==r&&ie(e,o,{get:()=>t[o],enumerable:!(n=Nn(t,o))||n.enumerable});return e};var Mn=e=>Vn(ie({},"a",{value:!0}),e);var Er={};Cn(Er,{bytesToHex:()=>nt,ed25519:()=>Ln,hexToBytes:()=>rt,p256:()=>qn,secp256k1:()=>Sn,x25519:()=>Un});function wt(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function ot(e,t=""){if(!Number.isSafeInteger(e)||e<0){let r=t&&`"${t}" `;throw new Error(`${r}expected integer >= 0, got ${e}`)}}function N(e,t,r=""){let n=wt(e),o=e?.length,f=t!==void 0;if(!n||f&&o!==t){let i=r&&`"${r}" `,c=f?` of length ${t}`:"",s=n?`length=${o}`:`type=${typeof e}`;throw new Error(i+"expected Uint8Array"+c+", got "+s)}return e}function Wt(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash must wrapped by utils.createHasher");ot(e.outputLen),ot(e.blockLen)}function Rt(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function Ve(e,t){N(e,void 0,"digestInto() output");let r=t.outputLen;if(e.length<r)throw new Error('"digestInto() output" expected to be of length >='+r)}function at(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function $t(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function et(e,t){return e<<32-t|e>>>t}var Me=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",kn=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function nt(e){if(N(e),Me)return e.toHex();let t="";for(let r=0;r<e.length;r++)t+=kn[e[r]];return t}var ct={_0:48,_9:57,A:65,F:70,a:97,f:102};function Ce(e){if(e>=ct._0&&e<=ct._9)return e-ct._0;if(e>=ct.A&&e<=ct.F)return e-(ct.A-10);if(e>=ct.a&&e<=ct.f)return e-(ct.a-10)}function rt(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);if(Me)return Uint8Array.fromHex(e);let t=e.length,r=t/2;if(t%2)throw new Error("hex string expected, got unpadded hex of length "+t);let n=new Uint8Array(r);for(let o=0,f=0;o<r;o++,f+=2){let i=Ce(e.charCodeAt(f)),c=Ce(e.charCodeAt(f+1));if(i===void 0||c===void 0){let s=e[f]+e[f+1];throw new Error('hex string expected, got non-hex character "'+s+'" at index '+f)}n[o]=i*16+c}return n}function tt(...e){let t=0;for(let n=0;n<e.length;n++){let o=e[n];N(o),t+=o.length}let r=new Uint8Array(t);for(let n=0,o=0;n<e.length;n++){let f=e[n];r.set(f,o),o+=f.length}return r}function ce(e,t={}){let r=(o,f)=>e(f).update(o).digest(),n=e(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.create=o=>e(o),Object.assign(r,t),Object.freeze(r)}function ht(e=32){let t=typeof globalThis=="object"?globalThis.crypto:null;if(typeof t?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return t.getRandomValues(new Uint8Array(e))}var ae=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});function ke(e,t,r){return e&t^~e&r}function Ye(e,t,r){return e&t^e&r^t&r}var Ct=class{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(t,r,n,o){this.blockLen=t,this.outputLen=r,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(t),this.view=$t(this.buffer)}update(t){Rt(this),N(t);let{view:r,buffer:n,blockLen:o}=this,f=t.length;for(let i=0;i<f;){let c=Math.min(o-this.pos,f-i);if(c===o){let s=$t(t);for(;o<=f-i;i+=o)this.process(s,i);continue}n.set(t.subarray(i,i+c),this.pos),this.pos+=c,i+=c,this.pos===o&&(this.process(r,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){Rt(this),Ve(t,this),this.finished=!0;let{buffer:r,view:n,blockLen:o,isLE:f}=this,{pos:i}=this;r[i++]=128,at(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(n,0),i=0);for(let x=i;x<o;x++)r[x]=0;n.setBigUint64(o-8,BigInt(this.length*8),f),this.process(n,0);let c=$t(t),s=this.outputLen;if(s%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let l=s/4,h=this.get();if(l>h.length)throw new Error("_sha2: outputLen bigger than state");for(let x=0;x<l;x++)c.setUint32(4*x,h[x],f)}digest(){let{buffer:t,outputLen:r}=this;this.digestInto(t);let n=t.slice(0,r);return this.destroy(),n}_cloneInto(t){t||=new this.constructor,t.set(...this.get());let{blockLen:r,buffer:n,length:o,finished:f,destroyed:i,pos:c}=this;return t.destroyed=i,t.finished=f,t.length=o,t.pos=c,o%r&&t.buffer.set(n),t}clone(){return this._cloneInto()}},dt=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var Q=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Pt=BigInt(4294967295),Xe=BigInt(32);function Yn(e,t=!1){return t?{h:Number(e&Pt),l:Number(e>>Xe&Pt)}:{h:Number(e>>Xe&Pt)|0,l:Number(e&Pt)|0}}function Ge(e,t=!1){let r=e.length,n=new Uint32Array(r),o=new Uint32Array(r);for(let f=0;f<r;f++){let{h:i,l:c}=Yn(e[f],t);[n[f],o[f]]=[i,c]}return[n,o]}var de=(e,t,r)=>e>>>r,ue=(e,t,r)=>e<<32-r|t>>>r,Bt=(e,t,r)=>e>>>r|t<<32-r,Et=(e,t,r)=>e<<32-r|t>>>r,Vt=(e,t,r)=>e<<64-r|t>>>r-32,Mt=(e,t,r)=>e>>>r-32|t<<64-r;function ft(e,t,r,n){let o=(t>>>0)+(n>>>0);return{h:e+r+(o/2**32|0)|0,l:o|0}}var Ke=(e,t,r)=>(e>>>0)+(t>>>0)+(r>>>0),je=(e,t,r,n)=>t+r+n+(e/2**32|0)|0,ze=(e,t,r,n)=>(e>>>0)+(t>>>0)+(r>>>0)+(n>>>0),We=(e,t,r,n,o)=>t+r+n+o+(e/2**32|0)|0,$e=(e,t,r,n,o)=>(e>>>0)+(t>>>0)+(r>>>0)+(n>>>0)+(o>>>0),Pe=(e,t,r,n,o,f)=>t+r+n+o+f+(e/2**32|0)|0;var Gn=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),bt=new Uint32Array(64),le=class extends Ct{constructor(t){super(64,t,8,!1)}get(){let{A:t,B:r,C:n,D:o,E:f,F:i,G:c,H:s}=this;return[t,r,n,o,f,i,c,s]}set(t,r,n,o,f,i,c,s){this.A=t|0,this.B=r|0,this.C=n|0,this.D=o|0,this.E=f|0,this.F=i|0,this.G=c|0,this.H=s|0}process(t,r){for(let x=0;x<16;x++,r+=4)bt[x]=t.getUint32(r,!1);for(let x=16;x<64;x++){let v=bt[x-15],E=bt[x-2],w=et(v,7)^et(v,18)^v>>>3,L=et(E,17)^et(E,19)^E>>>10;bt[x]=L+bt[x-7]+w+bt[x-16]|0}let{A:n,B:o,C:f,D:i,E:c,F:s,G:l,H:h}=this;for(let x=0;x<64;x++){let v=et(c,6)^et(c,11)^et(c,25),E=h+v+ke(c,s,l)+Gn[x]+bt[x]|0,L=(et(n,2)^et(n,13)^et(n,22))+Ye(n,o,f)|0;h=l,l=s,s=c,c=i+E|0,i=f,f=o,o=n,n=E+L|0}n=n+this.A|0,o=o+this.B|0,f=f+this.C|0,i=i+this.D|0,c=c+this.E|0,s=s+this.F|0,l=l+this.G|0,h=h+this.H|0,this.set(n,o,f,i,c,s,l,h)}roundClean(){at(bt)}destroy(){this.set(0,0,0,0,0,0,0,0),at(this.buffer)}},he=class extends le{A=dt[0]|0;B=dt[1]|0;C=dt[2]|0;D=dt[3]|0;E=dt[4]|0;F=dt[5]|0;G=dt[6]|0;H=dt[7]|0;constructor(){super(32)}};var Qe=Ge(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(e=>BigInt(e))),Kn=Qe[0],jn=Qe[1],xt=new Uint32Array(80),mt=new Uint32Array(80),be=class extends Ct{constructor(t){super(128,t,16,!1)}get(){let{Ah:t,Al:r,Bh:n,Bl:o,Ch:f,Cl:i,Dh:c,Dl:s,Eh:l,El:h,Fh:x,Fl:v,Gh:E,Gl:w,Hh:L,Hl:y}=this;return[t,r,n,o,f,i,c,s,l,h,x,v,E,w,L,y]}set(t,r,n,o,f,i,c,s,l,h,x,v,E,w,L,y){this.Ah=t|0,this.Al=r|0,this.Bh=n|0,this.Bl=o|0,this.Ch=f|0,this.Cl=i|0,this.Dh=c|0,this.Dl=s|0,this.Eh=l|0,this.El=h|0,this.Fh=x|0,this.Fl=v|0,this.Gh=E|0,this.Gl=w|0,this.Hh=L|0,this.Hl=y|0}process(t,r){for(let p=0;p<16;p++,r+=4)xt[p]=t.getUint32(r),mt[p]=t.getUint32(r+=4);for(let p=16;p<80;p++){let T=xt[p-15]|0,D=mt[p-15]|0,V=Bt(T,D,1)^Bt(T,D,8)^de(T,D,7),k=Et(T,D,1)^Et(T,D,8)^ue(T,D,7),B=xt[p-2]|0,b=mt[p-2]|0,q=Bt(B,b,19)^Vt(B,b,61)^de(B,b,6),Z=Et(B,b,19)^Mt(B,b,61)^ue(B,b,6),O=ze(k,Z,mt[p-7],mt[p-16]),u=We(O,V,q,xt[p-7],xt[p-16]);xt[p]=u|0,mt[p]=O|0}let{Ah:n,Al:o,Bh:f,Bl:i,Ch:c,Cl:s,Dh:l,Dl:h,Eh:x,El:v,Fh:E,Fl:w,Gh:L,Gl:y,Hh:g,Hl:R}=this;for(let p=0;p<80;p++){let T=Bt(x,v,14)^Bt(x,v,18)^Vt(x,v,41),D=Et(x,v,14)^Et(x,v,18)^Mt(x,v,41),V=x&E^~x&L,k=v&w^~v&y,B=$e(R,D,k,jn[p],mt[p]),b=Pe(B,g,T,V,Kn[p],xt[p]),q=B|0,Z=Bt(n,o,28)^Vt(n,o,34)^Vt(n,o,39),O=Et(n,o,28)^Mt(n,o,34)^Mt(n,o,39),u=n&f^n&c^f&c,a=o&i^o&s^i&s;g=L|0,R=y|0,L=E|0,y=w|0,E=x|0,w=v|0,{h:x,l:v}=ft(l|0,h|0,b|0,q|0),l=c|0,h=s|0,c=f|0,s=i|0,f=n|0,i=o|0;let d=Ke(q,O,a);n=je(d,b,Z,u),o=d|0}({h:n,l:o}=ft(this.Ah|0,this.Al|0,n|0,o|0)),{h:f,l:i}=ft(this.Bh|0,this.Bl|0,f|0,i|0),{h:c,l:s}=ft(this.Ch|0,this.Cl|0,c|0,s|0),{h:l,l:h}=ft(this.Dh|0,this.Dl|0,l|0,h|0),{h:x,l:v}=ft(this.Eh|0,this.El|0,x|0,v|0),{h:E,l:w}=ft(this.Fh|0,this.Fl|0,E|0,w|0),{h:L,l:y}=ft(this.Gh|0,this.Gl|0,L|0,y|0),{h:g,l:R}=ft(this.Hh|0,this.Hl|0,g|0,R|0),this.set(n,o,f,i,c,s,l,h,x,v,E,w,L,y,g,R)}roundClean(){at(xt,mt)}destroy(){at(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},xe=class extends be{Ah=Q[0]|0;Al=Q[1]|0;Bh=Q[2]|0;Bl=Q[3]|0;Ch=Q[4]|0;Cl=Q[5]|0;Dh=Q[6]|0;Dl=Q[7]|0;Eh=Q[8]|0;El=Q[9]|0;Fh=Q[10]|0;Fl=Q[11]|0;Gh=Q[12]|0;Gl=Q[13]|0;Hh=Q[14]|0;Hl=Q[15]|0;constructor(){super(64)}};var Qt=ce(()=>new he,ae(1));var me=ce(()=>new xe,ae(3));var pe=BigInt(0),ge=BigInt(1);function ut(e,t=""){if(typeof e!="boolean"){let r=t&&`"${t}" `;throw new Error(r+"expected boolean, got type="+typeof e)}return e}function Je(e){if(typeof e=="bigint"){if(!Jt(e))throw new Error("positive bigint expected, got "+e)}else ot(e);return e}function kt(e){let t=Je(e).toString(16);return t.length&1?"0"+t:t}function Fe(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return e===""?pe:BigInt("0x"+e)}function Ot(e){return Fe(nt(e))}function st(e){return Fe(nt(vt(N(e)).reverse()))}function Ft(e,t){ot(t),e=Je(e);let r=rt(e.toString(16).padStart(t*2,"0"));if(r.length!==t)throw new Error("number too large");return r}function Yt(e,t){return Ft(e,t).reverse()}function vt(e){return Uint8Array.from(e)}var Jt=e=>typeof e=="bigint"&&pe<=e;function zn(e,t,r){return Jt(e)&&Jt(t)&&Jt(r)&&t<=e&&e<r}function gt(e,t,r,n){if(!zn(t,r,n))throw new Error("expected valid "+e+": "+r+" <= n < "+n+", got "+t)}function ye(e){let t;for(t=0;e>pe;e>>=ge,t+=1);return t}var Xt=e=>(ge<<BigInt(e))-ge;function tn(e,t,r){if(ot(e,"hashLen"),ot(t,"qByteLen"),typeof r!="function")throw new Error("hmacFn must be a function");let n=y=>new Uint8Array(y),o=Uint8Array.of(),f=Uint8Array.of(0),i=Uint8Array.of(1),c=1e3,s=n(e),l=n(e),h=0,x=()=>{s.fill(1),l.fill(0),h=0},v=(...y)=>r(l,tt(s,...y)),E=(y=o)=>{l=v(f,y),s=v(),y.length!==0&&(l=v(i,y),s=v())},w=()=>{if(h++>=c)throw new Error("drbg: tried max amount of iterations");let y=0,g=[];for(;y<t;){s=v();let R=s.slice();g.push(R),y+=s.length}return tt(...g)};return(y,g)=>{x(),E(y);let R;for(;!(R=g(w()));)E();return x(),R}}function it(e,t={},r={}){if(!e||typeof e!="object")throw new Error("expected valid options object");function n(f,i,c){let s=e[f];if(c&&s===void 0)return;let l=typeof s;if(l!==i||s===null)throw new Error(`param "${f}" is invalid: expected ${i}, got ${l}`)}let o=(f,i)=>Object.entries(f).forEach(([c,s])=>n(c,s,i));o(t,!1),o(r,!0)}function Ht(e){let t=new WeakMap;return(r,...n)=>{let o=t.get(r);if(o!==void 0)return o;let f=e(r,...n);return t.set(r,f),f}}var J=BigInt(0),$=BigInt(1),St=BigInt(2),rn=BigInt(3),on=BigInt(4),fn=BigInt(5),Wn=BigInt(7),sn=BigInt(8),$n=BigInt(9),cn=BigInt(16);function j(e,t){let r=e%t;return r>=J?r:t+r}function G(e,t,r){let n=e;for(;t-- >J;)n*=n,n%=r;return n}function en(e,t){if(e===J)throw new Error("invert: expected non-zero number");if(t<=J)throw new Error("invert: expected positive modulus, got "+t);let r=j(e,t),n=t,o=J,f=$,i=$,c=J;for(;r!==J;){let l=n/r,h=n%r,x=o-i*l,v=f-c*l;n=r,r=h,o=i,f=c,i=x,c=v}if(n!==$)throw new Error("invert: does not exist");return j(o,t)}function Be(e,t,r){if(!e.eql(e.sqr(t),r))throw new Error("Cannot find square root")}function an(e,t){let r=(e.ORDER+$)/on,n=e.pow(t,r);return Be(e,n,t),n}function Pn(e,t){let r=(e.ORDER-fn)/sn,n=e.mul(t,St),o=e.pow(n,r),f=e.mul(t,o),i=e.mul(e.mul(f,St),o),c=e.mul(f,e.sub(i,e.ONE));return Be(e,c,t),c}function Qn(e){let t=Tt(e),r=dn(e),n=r(t,t.neg(t.ONE)),o=r(t,n),f=r(t,t.neg(n)),i=(e+Wn)/cn;return(c,s)=>{let l=c.pow(s,i),h=c.mul(l,n),x=c.mul(l,o),v=c.mul(l,f),E=c.eql(c.sqr(h),s),w=c.eql(c.sqr(x),s);l=c.cmov(l,h,E),h=c.cmov(v,x,w);let L=c.eql(c.sqr(h),s),y=c.cmov(l,h,L);return Be(c,y,s),y}}function dn(e){if(e<rn)throw new Error("sqrt is not defined for small field");let t=e-$,r=0;for(;t%St===J;)t/=St,r++;let n=St,o=Tt(e);for(;nn(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(r===1)return an;let f=o.pow(n,t),i=(t+$)/St;return function(s,l){if(s.is0(l))return l;if(nn(s,l)!==1)throw new Error("Cannot find square root");let h=r,x=s.mul(s.ONE,f),v=s.pow(l,t),E=s.pow(l,i);for(;!s.eql(v,s.ONE);){if(s.is0(v))return s.ZERO;let w=1,L=s.sqr(v);for(;!s.eql(L,s.ONE);)if(w++,L=s.sqr(L),w===h)throw new Error("Cannot find square root");let y=$<<BigInt(h-w-1),g=s.pow(x,y);h=w,x=s.sqr(g),v=s.mul(v,x),E=s.mul(E,g)}return E}}function Jn(e){return e%on===rn?an:e%sn===fn?Pn:e%cn===$n?Qn(e):dn(e)}var un=(e,t)=>(j(e,t)&$)===$,Fn=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Ee(e){let t={ORDER:"bigint",BYTES:"number",BITS:"number"},r=Fn.reduce((n,o)=>(n[o]="function",n),t);return it(e,r),e}function tr(e,t,r){if(r<J)throw new Error("invalid exponent, negatives unsupported");if(r===J)return e.ONE;if(r===$)return t;let n=e.ONE,o=t;for(;r>J;)r&$&&(n=e.mul(n,o)),o=e.sqr(o),r>>=$;return n}function Gt(e,t,r=!1){let n=new Array(t.length).fill(r?e.ZERO:void 0),o=t.reduce((i,c,s)=>e.is0(c)?i:(n[s]=i,e.mul(i,c)),e.ONE),f=e.inv(o);return t.reduceRight((i,c,s)=>e.is0(c)?i:(n[s]=e.mul(i,n[s]),e.mul(i,c)),f),n}function nn(e,t){let r=(e.ORDER-$)/St,n=e.pow(t,r),o=e.eql(n,e.ONE),f=e.eql(n,e.ZERO),i=e.eql(n,e.neg(e.ONE));if(!o&&!f&&!i)throw new Error("invalid Legendre symbol result");return o?1:f?0:-1}function er(e,t){t!==void 0&&ot(t);let r=t!==void 0?t:e.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}var we=class{ORDER;BITS;BYTES;isLE;ZERO=J;ONE=$;_lengths;_sqrt;_mod;constructor(t,r={}){if(t<=J)throw new Error("invalid field: expected ORDER > 0, got "+t);let n;this.isLE=!1,r!=null&&typeof r=="object"&&(typeof r.BITS=="number"&&(n=r.BITS),typeof r.sqrt=="function"&&(this.sqrt=r.sqrt),typeof r.isLE=="boolean"&&(this.isLE=r.isLE),r.allowedLengths&&(this._lengths=r.allowedLengths?.slice()),typeof r.modFromBytes=="boolean"&&(this._mod=r.modFromBytes));let{nBitLength:o,nByteLength:f}=er(t,n);if(f>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=t,this.BITS=o,this.BYTES=f,this._sqrt=void 0,Object.preventExtensions(this)}create(t){return j(t,this.ORDER)}isValid(t){if(typeof t!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof t);return J<=t&&t<this.ORDER}is0(t){return t===J}isValidNot0(t){return!this.is0(t)&&this.isValid(t)}isOdd(t){return(t&$)===$}neg(t){return j(-t,this.ORDER)}eql(t,r){return t===r}sqr(t){return j(t*t,this.ORDER)}add(t,r){return j(t+r,this.ORDER)}sub(t,r){return j(t-r,this.ORDER)}mul(t,r){return j(t*r,this.ORDER)}pow(t,r){return tr(this,t,r)}div(t,r){return j(t*en(r,this.ORDER),this.ORDER)}sqrN(t){return t*t}addN(t,r){return t+r}subN(t,r){return t-r}mulN(t,r){return t*r}inv(t){return en(t,this.ORDER)}sqrt(t){return this._sqrt||(this._sqrt=Jn(this.ORDER)),this._sqrt(this,t)}toBytes(t){return this.isLE?Yt(t,this.BYTES):Ft(t,this.BYTES)}fromBytes(t,r=!1){N(t);let{_lengths:n,BYTES:o,isLE:f,ORDER:i,_mod:c}=this;if(n){if(!n.includes(t.length)||t.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+t.length);let l=new Uint8Array(o);l.set(t,f?0:l.length-t.length),t=l}if(t.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+t.length);let s=f?st(t):Ot(t);if(c&&(s=j(s,i)),!r&&!this.isValid(s))throw new Error("invalid field element: outside of range 0..ORDER");return s}invertBatch(t){return Gt(this,t)}cmov(t,r,n){return n?r:t}};function Tt(e,t={}){return new we(e,t)}function ln(e){if(typeof e!="bigint")throw new Error("field order must be bigint");let t=e.toString(2).length;return Math.ceil(t/8)}function ve(e){let t=ln(e);return t+Math.ceil(t/2)}function Se(e,t,r=!1){N(e);let n=e.length,o=ln(t),f=ve(t);if(n<16||n<f||n>1024)throw new Error("expected "+f+"-1024 bytes of input, got "+n);let i=r?st(e):Ot(e),c=j(i,t-$)+$;return r?Yt(c,o):Ft(c,o)}var Lt=BigInt(0),_t=BigInt(1);function Kt(e,t){let r=t.negate();return e?r:t}function It(e,t){let r=Gt(e.Fp,t.map(n=>n.Z));return t.map((n,o)=>e.fromAffine(n.toAffine(r[o])))}function mn(e,t){if(!Number.isSafeInteger(e)||e<=0||e>t)throw new Error("invalid window size, expected [1.."+t+"], got W="+e)}function _e(e,t){mn(e,t);let r=Math.ceil(t/e)+1,n=2**(e-1),o=2**e,f=Xt(e),i=BigInt(e);return{windows:r,windowSize:n,mask:f,maxNumber:o,shiftBy:i}}function hn(e,t,r){let{windowSize:n,mask:o,maxNumber:f,shiftBy:i}=r,c=Number(e&o),s=e>>i;c>n&&(c-=f,s+=_t);let l=t*n,h=l+Math.abs(c)-1,x=c===0,v=c<0,E=t%2!==0;return{nextN:s,offset:h,isZero:x,isNeg:v,isNegF:E,offsetF:l}}var Ie=new WeakMap,gn=new WeakMap;function Ae(e){return gn.get(e)||1}function bn(e){if(e!==Lt)throw new Error("invalid wNAF")}var Ut=class{BASE;ZERO;Fn;bits;constructor(t,r){this.BASE=t.BASE,this.ZERO=t.ZERO,this.Fn=t.Fn,this.bits=r}_unsafeLadder(t,r,n=this.ZERO){let o=t;for(;r>Lt;)r&_t&&(n=n.add(o)),o=o.double(),r>>=_t;return n}precomputeWindow(t,r){let{windows:n,windowSize:o}=_e(r,this.bits),f=[],i=t,c=i;for(let s=0;s<n;s++){c=i,f.push(c);for(let l=1;l<o;l++)c=c.add(i),f.push(c);i=c.double()}return f}wNAF(t,r,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,f=this.BASE,i=_e(t,this.bits);for(let c=0;c<i.windows;c++){let{nextN:s,offset:l,isZero:h,isNeg:x,isNegF:v,offsetF:E}=hn(n,c,i);n=s,h?f=f.add(Kt(v,r[E])):o=o.add(Kt(x,r[l]))}return bn(n),{p:o,f}}wNAFUnsafe(t,r,n,o=this.ZERO){let f=_e(t,this.bits);for(let i=0;i<f.windows&&n!==Lt;i++){let{nextN:c,offset:s,isZero:l,isNeg:h}=hn(n,i,f);if(n=c,!l){let x=r[s];o=o.add(h?x.negate():x)}}return bn(n),o}getPrecomputes(t,r,n){let o=Ie.get(r);return o||(o=this.precomputeWindow(r,t),t!==1&&(typeof n=="function"&&(o=n(o)),Ie.set(r,o))),o}cached(t,r,n){let o=Ae(t);return this.wNAF(o,this.getPrecomputes(o,t,n),r)}unsafe(t,r,n,o){let f=Ae(t);return f===1?this._unsafeLadder(t,r,o):this.wNAFUnsafe(f,this.getPrecomputes(f,t,n),r,o)}createCache(t,r){mn(r,this.bits),gn.set(t,r),Ie.delete(t)}hasCache(t){return Ae(t)!==1}};function pn(e,t,r,n){let o=t,f=e.ZERO,i=e.ZERO;for(;r>Lt||n>Lt;)r&_t&&(f=f.add(o)),n&_t&&(i=i.add(o)),o=o.double(),r>>=_t,n>>=_t;return{p1:f,p2:i}}function xn(e,t,r){if(t){if(t.ORDER!==e)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Ee(t),t}else return Tt(e,{isLE:r})}function te(e,t,r={},n){if(n===void 0&&(n=e==="edwards"),!t||typeof t!="object")throw new Error(`expected valid ${e} CURVE object`);for(let s of["p","n","h"]){let l=t[s];if(!(typeof l=="bigint"&&l>Lt))throw new Error(`CURVE.${s} must be positive bigint`)}let o=xn(t.p,r.Fp,n),f=xn(t.n,r.Fn,n),c=["Gx","Gy","a",e==="weierstrass"?"b":"d"];for(let s of c)if(!o.isValid(t[s]))throw new Error(`CURVE.${s} must be valid field element of CURVE.Fp`);return t=Object.freeze(Object.assign({},t)),{CURVE:t,Fp:o,Fn:f}}function qt(e,t){return function(n){let o=e(n);return{secretKey:o,publicKey:t(o)}}}var ee=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(t,r){if(Wt(t),N(r,void 0,"key"),this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let n=this.blockLen,o=new Uint8Array(n);o.set(r.length>n?t.create().update(r).digest():r);for(let f=0;f<o.length;f++)o[f]^=54;this.iHash.update(o),this.oHash=t.create();for(let f=0;f<o.length;f++)o[f]^=106;this.oHash.update(o),at(o)}update(t){return Rt(this),this.iHash.update(t),this}digestInto(t){Rt(this),N(t,this.outputLen,"output"),this.finished=!0,this.iHash.digestInto(t),this.oHash.update(t),this.oHash.digestInto(t),this.destroy()}digest(){let t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||=Object.create(Object.getPrototypeOf(this),{});let{oHash:r,iHash:n,finished:o,destroyed:f,blockLen:i,outputLen:c}=this;return t=t,t.finished=o,t.destroyed=f,t.blockLen=i,t.outputLen=c,t.oHash=r._cloneInto(t.oHash),t.iHash=n._cloneInto(t.iHash),t}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Re=(e,t,r)=>new ee(e,t).update(r).digest();Re.create=(e,t)=>new ee(e,t);var yn=(e,t)=>(e+(e>=0?t:-t)/wn)/t;function nr(e,t,r){let[[n,o],[f,i]]=t,c=yn(i*e,r),s=yn(-o*e,r),l=e-c*n-s*f,h=-c*o-s*i,x=l<lt,v=h<lt;x&&(l=-l),v&&(h=-h);let E=Xt(Math.ceil(ye(r)/2))+Nt;if(l<lt||l>=E||h<lt||h>=E)throw new Error("splitScalar (endomorphism): failed, k="+e);return{k1neg:x,k1:l,k2neg:v,k2:h}}function He(e){if(!["compact","recovered","der"].includes(e))throw new Error('Signature format must be "compact", "recovered", or "der"');return e}function Oe(e,t){let r={};for(let n of Object.keys(t))r[n]=e[n]===void 0?t[n]:e[n];return ut(r.lowS,"lowS"),ut(r.prehash,"prehash"),r.format!==void 0&&He(r.format),r}var Te=class extends Error{constructor(t=""){super(t)}},pt={Err:Te,_tlv:{encode:(e,t)=>{let{Err:r}=pt;if(e<0||e>256)throw new r("tlv.encode: wrong tag");if(t.length&1)throw new r("tlv.encode: unpadded data");let n=t.length/2,o=kt(n);if(o.length/2&128)throw new r("tlv.encode: long form length too big");let f=n>127?kt(o.length/2|128):"";return kt(e)+f+o+t},decode(e,t){let{Err:r}=pt,n=0;if(e<0||e>256)throw new r("tlv.encode: wrong tag");if(t.length<2||t[n++]!==e)throw new r("tlv.decode: wrong tlv");let o=t[n++],f=!!(o&128),i=0;if(!f)i=o;else{let s=o&127;if(!s)throw new r("tlv.decode(long): indefinite length not supported");if(s>4)throw new r("tlv.decode(long): byte length is too big");let l=t.subarray(n,n+s);if(l.length!==s)throw new r("tlv.decode: length bytes not complete");if(l[0]===0)throw new r("tlv.decode(long): zero leftmost byte");for(let h of l)i=i<<8|h;if(n+=s,i<128)throw new r("tlv.decode(long): not minimal encoding")}let c=t.subarray(n,n+i);if(c.length!==i)throw new r("tlv.decode: wrong value length");return{v:c,l:t.subarray(n+i)}}},_int:{encode(e){let{Err:t}=pt;if(e<lt)throw new t("integer: negative integers are not allowed");let r=kt(e);if(Number.parseInt(r[0],16)&8&&(r="00"+r),r.length&1)throw new t("unexpected DER parsing assertion: unpadded hex");return r},decode(e){let{Err:t}=pt;if(e[0]&128)throw new t("invalid signature integer: negative");if(e[0]===0&&!(e[1]&128))throw new t("invalid signature integer: unnecessary leading zero");return Ot(e)}},toSig(e){let{Err:t,_int:r,_tlv:n}=pt,o=N(e,void 0,"signature"),{v:f,l:i}=n.decode(48,o);if(i.length)throw new t("invalid signature: left bytes after parsing");let{v:c,l:s}=n.decode(2,f),{v:l,l:h}=n.decode(2,s);if(h.length)throw new t("invalid signature: left bytes after parsing");return{r:r.decode(c),s:r.decode(l)}},hexFromSig(e){let{_tlv:t,_int:r}=pt,n=t.encode(2,r.encode(e.r)),o=t.encode(2,r.encode(e.s)),f=n+o;return t.encode(48,f)}},lt=BigInt(0),Nt=BigInt(1),wn=BigInt(2),ne=BigInt(3),rr=BigInt(4);function re(e,t={}){let r=te("weierstrass",e,t),{Fp:n,Fn:o}=r,f=r.CURVE,{h:i,n:c}=f;it(t,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:s}=t;if(s&&(!n.is0(f.a)||typeof s.beta!="bigint"||!Array.isArray(s.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let l=En(n,o);function h(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function x(O,u,a){let{x:d,y:m}=u.toAffine(),I=n.toBytes(d);if(ut(a,"isCompressed"),a){h();let S=!n.isOdd(m);return tt(Bn(S),I)}else return tt(Uint8Array.of(4),I,n.toBytes(m))}function v(O){N(O,void 0,"Point");let{publicKey:u,publicKeyUncompressed:a}=l,d=O.length,m=O[0],I=O.subarray(1);if(d===u&&(m===2||m===3)){let S=n.fromBytes(I);if(!n.isValid(S))throw new Error("bad point: is not on curve, wrong x");let A=L(S),_;try{_=n.sqrt(A)}catch(K){let M=K instanceof Error?": "+K.message:"";throw new Error("bad point: is not on curve, sqrt error"+M)}h();let H=n.isOdd(_);return(m&1)===1!==H&&(_=n.neg(_)),{x:S,y:_}}else if(d===a&&m===4){let S=n.BYTES,A=n.fromBytes(I.subarray(0,S)),_=n.fromBytes(I.subarray(S,S*2));if(!y(A,_))throw new Error("bad point: is not on curve");return{x:A,y:_}}else throw new Error(`bad point: got length ${d}, expected compressed=${u} or uncompressed=${a}`)}let E=t.toBytes||x,w=t.fromBytes||v;function L(O){let u=n.sqr(O),a=n.mul(u,O);return n.add(n.add(a,n.mul(O,f.a)),f.b)}function y(O,u){let a=n.sqr(u),d=L(O);return n.eql(a,d)}if(!y(f.Gx,f.Gy))throw new Error("bad curve params: generator point");let g=n.mul(n.pow(f.a,ne),rr),R=n.mul(n.sqr(f.b),BigInt(27));if(n.is0(n.add(g,R)))throw new Error("bad curve params: a or b");function p(O,u,a=!1){if(!n.isValid(u)||a&&n.is0(u))throw new Error(`bad point coordinate ${O}`);return u}function T(O){if(!(O instanceof b))throw new Error("Weierstrass Point expected")}function D(O){if(!s||!s.basises)throw new Error("no endo");return nr(O,s.basises,o.ORDER)}let V=Ht((O,u)=>{let{X:a,Y:d,Z:m}=O;if(n.eql(m,n.ONE))return{x:a,y:d};let I=O.is0();u==null&&(u=I?n.ONE:n.inv(m));let S=n.mul(a,u),A=n.mul(d,u),_=n.mul(m,u);if(I)return{x:n.ZERO,y:n.ZERO};if(!n.eql(_,n.ONE))throw new Error("invZ was invalid");return{x:S,y:A}}),k=Ht(O=>{if(O.is0()){if(t.allowInfinityPoint&&!n.is0(O.Y))return;throw new Error("bad point: ZERO")}let{x:u,y:a}=O.toAffine();if(!n.isValid(u)||!n.isValid(a))throw new Error("bad point: x or y not field elements");if(!y(u,a))throw new Error("bad point: equation left != right");if(!O.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function B(O,u,a,d,m){return a=new b(n.mul(a.X,O),a.Y,a.Z),u=Kt(d,u),a=Kt(m,a),u.add(a)}class b{static BASE=new b(f.Gx,f.Gy,n.ONE);static ZERO=new b(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=o;X;Y;Z;constructor(u,a,d){this.X=p("x",u),this.Y=p("y",a,!0),this.Z=p("z",d),Object.freeze(this)}static CURVE(){return f}static fromAffine(u){let{x:a,y:d}=u||{};if(!u||!n.isValid(a)||!n.isValid(d))throw new Error("invalid affine point");if(u instanceof b)throw new Error("projective point not allowed");return n.is0(a)&&n.is0(d)?b.ZERO:new b(a,d,n.ONE)}static fromBytes(u){let a=b.fromAffine(w(N(u,void 0,"point")));return a.assertValidity(),a}static fromHex(u){return b.fromBytes(rt(u))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(u=8,a=!0){return Z.createCache(this,u),a||this.multiply(ne),this}assertValidity(){k(this)}hasEvenY(){let{y:u}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(u)}equals(u){T(u);let{X:a,Y:d,Z:m}=this,{X:I,Y:S,Z:A}=u,_=n.eql(n.mul(a,A),n.mul(I,m)),H=n.eql(n.mul(d,A),n.mul(S,m));return _&&H}negate(){return new b(this.X,n.neg(this.Y),this.Z)}double(){let{a:u,b:a}=f,d=n.mul(a,ne),{X:m,Y:I,Z:S}=this,A=n.ZERO,_=n.ZERO,H=n.ZERO,U=n.mul(m,m),K=n.mul(I,I),M=n.mul(S,S),C=n.mul(m,I);return C=n.add(C,C),H=n.mul(m,S),H=n.add(H,H),A=n.mul(u,H),_=n.mul(d,M),_=n.add(A,_),A=n.sub(K,_),_=n.add(K,_),_=n.mul(A,_),A=n.mul(C,A),H=n.mul(d,H),M=n.mul(u,M),C=n.sub(U,M),C=n.mul(u,C),C=n.add(C,H),H=n.add(U,U),U=n.add(H,U),U=n.add(U,M),U=n.mul(U,C),_=n.add(_,U),M=n.mul(I,S),M=n.add(M,M),U=n.mul(M,C),A=n.sub(A,U),H=n.mul(M,K),H=n.add(H,H),H=n.add(H,H),new b(A,_,H)}add(u){T(u);let{X:a,Y:d,Z:m}=this,{X:I,Y:S,Z:A}=u,_=n.ZERO,H=n.ZERO,U=n.ZERO,K=f.a,M=n.mul(f.b,ne),C=n.mul(a,I),Y=n.mul(d,S),z=n.mul(m,A),F=n.add(a,d),X=n.add(I,S);F=n.mul(F,X),X=n.add(C,Y),F=n.sub(F,X),X=n.add(a,m);let W=n.add(I,A);return X=n.mul(X,W),W=n.add(C,z),X=n.sub(X,W),W=n.add(d,m),_=n.add(S,A),W=n.mul(W,_),_=n.add(Y,z),W=n.sub(W,_),U=n.mul(K,X),_=n.mul(M,z),U=n.add(_,U),_=n.sub(Y,U),U=n.add(Y,U),H=n.mul(_,U),Y=n.add(C,C),Y=n.add(Y,C),z=n.mul(K,z),X=n.mul(M,X),Y=n.add(Y,z),z=n.sub(C,z),z=n.mul(K,z),X=n.add(X,z),C=n.mul(Y,X),H=n.add(H,C),C=n.mul(W,X),_=n.mul(F,_),_=n.sub(_,C),C=n.mul(F,Y),U=n.mul(W,U),U=n.add(U,C),new b(_,H,U)}subtract(u){return this.add(u.negate())}is0(){return this.equals(b.ZERO)}multiply(u){let{endo:a}=t;if(!o.isValidNot0(u))throw new Error("invalid scalar: out of range");let d,m,I=S=>Z.cached(this,S,A=>It(b,A));if(a){let{k1neg:S,k1:A,k2neg:_,k2:H}=D(u),{p:U,f:K}=I(A),{p:M,f:C}=I(H);m=K.add(C),d=B(a.beta,U,M,S,_)}else{let{p:S,f:A}=I(u);d=S,m=A}return It(b,[d,m])[0]}multiplyUnsafe(u){let{endo:a}=t,d=this;if(!o.isValid(u))throw new Error("invalid scalar: out of range");if(u===lt||d.is0())return b.ZERO;if(u===Nt)return d;if(Z.hasCache(this))return this.multiply(u);if(a){let{k1neg:m,k1:I,k2neg:S,k2:A}=D(u),{p1:_,p2:H}=pn(b,d,I,A);return B(a.beta,_,H,m,S)}else return Z.unsafe(d,u)}toAffine(u){return V(this,u)}isTorsionFree(){let{isTorsionFree:u}=t;return i===Nt?!0:u?u(b,this):Z.unsafe(this,c).is0()}clearCofactor(){let{clearCofactor:u}=t;return i===Nt?this:u?u(b,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(u=!0){return ut(u,"isCompressed"),this.assertValidity(),E(b,this,u)}toHex(u=!0){return nt(this.toBytes(u))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let q=o.BITS,Z=new Ut(b,t.endo?Math.ceil(q/2):q);return b.BASE.precompute(8),b}function Bn(e){return Uint8Array.of(e?2:3)}function En(e,t){return{secretKey:t.BYTES,publicKey:1+e.BYTES,publicKeyUncompressed:1+2*e.BYTES,publicKeyHasPrefix:!0,signature:2*t.BYTES}}function or(e,t={}){let{Fn:r}=e,n=t.randomBytes||ht,o=Object.assign(En(e.Fp,r),{seed:ve(r.ORDER)});function f(E){try{let w=r.fromBytes(E);return r.isValidNot0(w)}catch{return!1}}function i(E,w){let{publicKey:L,publicKeyUncompressed:y}=o;try{let g=E.length;return w===!0&&g!==L||w===!1&&g!==y?!1:!!e.fromBytes(E)}catch{return!1}}function c(E=n(o.seed)){return Se(N(E,o.seed,"seed"),r.ORDER)}function s(E,w=!0){return e.BASE.multiply(r.fromBytes(E)).toBytes(w)}function l(E){let{secretKey:w,publicKey:L,publicKeyUncompressed:y}=o;if(!wt(E)||"_lengths"in r&&r._lengths||w===L)return;let g=N(E,void 0,"key").length;return g===L||g===y}function h(E,w,L=!0){if(l(E)===!0)throw new Error("first arg must be private key");if(l(w)===!1)throw new Error("second arg must be public key");let y=r.fromBytes(E);return e.fromBytes(w).multiply(y).toBytes(L)}let x={isValidSecretKey:f,isValidPublicKey:i,randomSecretKey:c},v=qt(c,s);return Object.freeze({getPublicKey:s,getSharedSecret:h,keygen:v,Point:e,utils:x,lengths:o})}function oe(e,t,r={}){Wt(t),it(r,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),r=Object.assign({},r);let n=r.randomBytes||ht,o=r.hmac||((a,d)=>Re(t,a,d)),{Fp:f,Fn:i}=e,{ORDER:c,BITS:s}=i,{keygen:l,getPublicKey:h,getSharedSecret:x,utils:v,lengths:E}=or(e,r),w={prehash:!0,lowS:typeof r.lowS=="boolean"?r.lowS:!0,format:"compact",extraEntropy:!1},L=c*wn<f.ORDER;function y(a){let d=c>>Nt;return a>d}function g(a,d){if(!i.isValidNot0(d))throw new Error(`invalid signature ${a}: out of range 1..Point.Fn.ORDER`);return d}function R(){if(L)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function p(a,d){He(d);let m=E.signature,I=d==="compact"?m:d==="recovered"?m+1:void 0;return N(a,I)}class T{r;s;recovery;constructor(d,m,I){if(this.r=g("r",d),this.s=g("s",m),I!=null){if(R(),![0,1,2,3].includes(I))throw new Error("invalid recovery id");this.recovery=I}Object.freeze(this)}static fromBytes(d,m=w.format){p(d,m);let I;if(m==="der"){let{r:H,s:U}=pt.toSig(N(d));return new T(H,U)}m==="recovered"&&(I=d[0],m="compact",d=d.subarray(1));let S=E.signature/2,A=d.subarray(0,S),_=d.subarray(S,S*2);return new T(i.fromBytes(A),i.fromBytes(_),I)}static fromHex(d,m){return this.fromBytes(rt(d),m)}assertRecovery(){let{recovery:d}=this;if(d==null)throw new Error("invalid recovery id: must be present");return d}addRecoveryBit(d){return new T(this.r,this.s,d)}recoverPublicKey(d){let{r:m,s:I}=this,S=this.assertRecovery(),A=S===2||S===3?m+c:m;if(!f.isValid(A))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let _=f.toBytes(A),H=e.fromBytes(tt(Bn((S&1)===0),_)),U=i.inv(A),K=V(N(d,void 0,"msgHash")),M=i.create(-K*U),C=i.create(I*U),Y=e.BASE.multiplyUnsafe(M).add(H.multiplyUnsafe(C));if(Y.is0())throw new Error("invalid recovery: point at infinify");return Y.assertValidity(),Y}hasHighS(){return y(this.s)}toBytes(d=w.format){if(He(d),d==="der")return rt(pt.hexFromSig(this));let{r:m,s:I}=this,S=i.toBytes(m),A=i.toBytes(I);return d==="recovered"?(R(),tt(Uint8Array.of(this.assertRecovery()),S,A)):tt(S,A)}toHex(d){return nt(this.toBytes(d))}}let D=r.bits2int||function(d){if(d.length>8192)throw new Error("input is too large");let m=Ot(d),I=d.length*8-s;return I>0?m>>BigInt(I):m},V=r.bits2int_modN||function(d){return i.create(D(d))},k=Xt(s);function B(a){return gt("num < 2^"+s,a,lt,k),i.toBytes(a)}function b(a,d){return N(a,void 0,"message"),d?N(t(a),void 0,"prehashed message"):a}function q(a,d,m){let{lowS:I,prehash:S,extraEntropy:A}=Oe(m,w);a=b(a,S);let _=V(a),H=i.fromBytes(d);if(!i.isValidNot0(H))throw new Error("invalid private key");let U=[B(H),B(_)];if(A!=null&&A!==!1){let Y=A===!0?n(E.secretKey):A;U.push(N(Y,void 0,"extraEntropy"))}let K=tt(...U),M=_;function C(Y){let z=D(Y);if(!i.isValidNot0(z))return;let F=i.inv(z),X=e.BASE.multiply(z).toAffine(),W=i.create(X.x);if(W===lt)return;let At=i.create(F*i.create(M+W*H));if(At===lt)return;let zt=(X.x===W?0:2)|Number(X.y&Nt),Zt=At;return I&&y(At)&&(Zt=i.neg(At),zt^=1),new T(W,Zt,L?void 0:zt)}return{seed:K,k2sig:C}}function Z(a,d,m={}){let{seed:I,k2sig:S}=q(a,d,m);return tn(t.outputLen,i.BYTES,o)(I,S).toBytes(m.format)}function O(a,d,m,I={}){let{lowS:S,prehash:A,format:_}=Oe(I,w);if(m=N(m,void 0,"publicKey"),d=b(d,A),!wt(a)){let H=a instanceof T?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+H)}p(a,_);try{let H=T.fromBytes(a,_),U=e.fromBytes(m);if(S&&H.hasHighS())return!1;let{r:K,s:M}=H,C=V(d),Y=i.inv(M),z=i.create(C*Y),F=i.create(K*Y),X=e.BASE.multiplyUnsafe(z).add(U.multiplyUnsafe(F));return X.is0()?!1:i.create(X.x)===K}catch{return!1}}function u(a,d,m={}){let{prehash:I}=Oe(m,w);return d=b(d,I),T.fromBytes(a,"recovered").recoverPublicKey(d).toBytes()}return Object.freeze({keygen:l,getPublicKey:h,getSharedSecret:x,utils:v,lengths:E,Point:e,sign:Z,verify:O,recoverPublicKey:u,Signature:T,hash:t})}var Ue={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},sr={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var vn=BigInt(2);function ir(e){let t=Ue.p,r=BigInt(3),n=BigInt(6),o=BigInt(11),f=BigInt(22),i=BigInt(23),c=BigInt(44),s=BigInt(88),l=e*e*e%t,h=l*l*e%t,x=G(h,r,t)*h%t,v=G(x,r,t)*h%t,E=G(v,vn,t)*l%t,w=G(E,o,t)*E%t,L=G(w,f,t)*w%t,y=G(L,c,t)*L%t,g=G(y,s,t)*y%t,R=G(g,c,t)*L%t,p=G(R,r,t)*h%t,T=G(p,i,t)*w%t,D=G(T,n,t)*l%t,V=G(D,vn,t);if(!Le.eql(Le.sqr(V),e))throw new Error("Cannot find square root");return V}var Le=Tt(Ue.p,{sqrt:ir}),cr=re(Ue,{Fp:Le,endo:sr}),Sn=oe(cr,Qt);var yt=BigInt(0),P=BigInt(1),qe=BigInt(2),ar=BigInt(8);function dr(e,t,r,n){let o=e.sqr(r),f=e.sqr(n),i=e.add(e.mul(t.a,o),f),c=e.add(e.ONE,e.mul(t.d,e.mul(o,f)));return e.eql(i,c)}function _n(e,t={}){let r=te("edwards",e,t,t.FpFnLE),{Fp:n,Fn:o}=r,f=r.CURVE,{h:i}=f;it(t,{},{uvRatio:"function"});let c=qe<<BigInt(o.BYTES*8)-P,s=y=>n.create(y),l=t.uvRatio||((y,g)=>{try{return{isValid:!0,value:n.sqrt(n.div(y,g))}}catch{return{isValid:!1,value:yt}}});if(!dr(n,f,f.Gx,f.Gy))throw new Error("bad curve params: generator point");function h(y,g,R=!1){let p=R?P:yt;return gt("coordinate "+y,g,p,c),g}function x(y){if(!(y instanceof w))throw new Error("EdwardsPoint expected")}let v=Ht((y,g)=>{let{X:R,Y:p,Z:T}=y,D=y.is0();g==null&&(g=D?ar:n.inv(T));let V=s(R*g),k=s(p*g),B=n.mul(T,g);if(D)return{x:yt,y:P};if(B!==P)throw new Error("invZ was invalid");return{x:V,y:k}}),E=Ht(y=>{let{a:g,d:R}=f;if(y.is0())throw new Error("bad point: ZERO");let{X:p,Y:T,Z:D,T:V}=y,k=s(p*p),B=s(T*T),b=s(D*D),q=s(b*b),Z=s(k*g),O=s(b*s(Z+B)),u=s(q+s(R*s(k*B)));if(O!==u)throw new Error("bad point: equation left != right (1)");let a=s(p*T),d=s(D*V);if(a!==d)throw new Error("bad point: equation left != right (2)");return!0});class w{static BASE=new w(f.Gx,f.Gy,P,s(f.Gx*f.Gy));static ZERO=new w(yt,P,P,yt);static Fp=n;static Fn=o;X;Y;Z;T;constructor(g,R,p,T){this.X=h("x",g),this.Y=h("y",R),this.Z=h("z",p,!0),this.T=h("t",T),Object.freeze(this)}static CURVE(){return f}static fromAffine(g){if(g instanceof w)throw new Error("extended point not allowed");let{x:R,y:p}=g||{};return h("x",R),h("y",p),new w(R,p,P,s(R*p))}static fromBytes(g,R=!1){let p=n.BYTES,{a:T,d:D}=f;g=vt(N(g,p,"point")),ut(R,"zip215");let V=vt(g),k=g[p-1];V[p-1]=k&-129;let B=st(V),b=R?c:n.ORDER;gt("point.y",B,yt,b);let q=s(B*B),Z=s(q-P),O=s(D*q-T),{isValid:u,value:a}=l(Z,O);if(!u)throw new Error("bad point: invalid y coordinate");let d=(a&P)===P,m=(k&128)!==0;if(!R&&a===yt&&m)throw new Error("bad point: x=0 and x_0=1");return m!==d&&(a=s(-a)),w.fromAffine({x:a,y:B})}static fromHex(g,R=!1){return w.fromBytes(rt(g),R)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(g=8,R=!0){return L.createCache(this,g),R||this.multiply(qe),this}assertValidity(){E(this)}equals(g){x(g);let{X:R,Y:p,Z:T}=this,{X:D,Y:V,Z:k}=g,B=s(R*k),b=s(D*T),q=s(p*k),Z=s(V*T);return B===b&&q===Z}is0(){return this.equals(w.ZERO)}negate(){return new w(s(-this.X),this.Y,this.Z,s(-this.T))}double(){let{a:g}=f,{X:R,Y:p,Z:T}=this,D=s(R*R),V=s(p*p),k=s(qe*s(T*T)),B=s(g*D),b=R+p,q=s(s(b*b)-D-V),Z=B+V,O=Z-k,u=B-V,a=s(q*O),d=s(Z*u),m=s(q*u),I=s(O*Z);return new w(a,d,I,m)}add(g){x(g);let{a:R,d:p}=f,{X:T,Y:D,Z:V,T:k}=this,{X:B,Y:b,Z:q,T:Z}=g,O=s(T*B),u=s(D*b),a=s(k*p*Z),d=s(V*q),m=s((T+D)*(B+b)-O-u),I=d-a,S=d+a,A=s(u-R*O),_=s(m*I),H=s(S*A),U=s(m*A),K=s(I*S);return new w(_,H,K,U)}subtract(g){return this.add(g.negate())}multiply(g){if(!o.isValidNot0(g))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:R,f:p}=L.cached(this,g,T=>It(w,T));return It(w,[R,p])[0]}multiplyUnsafe(g,R=w.ZERO){if(!o.isValid(g))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return g===yt?w.ZERO:this.is0()||g===P?this:L.unsafe(this,g,p=>It(w,p),R)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return L.unsafe(this,f.n).is0()}toAffine(g){return v(this,g)}clearCofactor(){return i===P?this:this.multiplyUnsafe(i)}toBytes(){let{x:g,y:R}=this.toAffine(),p=n.toBytes(R);return p[p.length-1]|=g&P?128:0,p}toHex(){return nt(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let L=new Ut(w,o.BITS);return w.BASE.precompute(8),w}function In(e,t,r={}){if(typeof t!="function")throw new Error('"hash" function param is required');it(r,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:n}=r,{BASE:o,Fp:f,Fn:i}=e,c=r.randomBytes||ht,s=r.adjustScalarBytes||(B=>B),l=r.domain||((B,b,q)=>{if(ut(q,"phflag"),b.length||q)throw new Error("Contexts/pre-hash are not supported");return B});function h(B){return i.create(st(B))}function x(B){let b=p.secretKey;N(B,p.secretKey,"secretKey");let q=N(t(B),2*b,"hashedSecretKey"),Z=s(q.slice(0,b)),O=q.slice(b,2*b),u=h(Z);return{head:Z,prefix:O,scalar:u}}function v(B){let{head:b,prefix:q,scalar:Z}=x(B),O=o.multiply(Z),u=O.toBytes();return{head:b,prefix:q,scalar:Z,point:O,pointBytes:u}}function E(B){return v(B).pointBytes}function w(B=Uint8Array.of(),...b){let q=tt(...b);return h(t(l(q,N(B,void 0,"context"),!!n)))}function L(B,b,q={}){B=N(B,void 0,"message"),n&&(B=n(B));let{prefix:Z,scalar:O,pointBytes:u}=v(b),a=w(q.context,Z,B),d=o.multiply(a).toBytes(),m=w(q.context,d,u,B),I=i.create(a+m*O);if(!i.isValid(I))throw new Error("sign failed: invalid s");let S=tt(d,i.toBytes(I));return N(S,p.signature,"result")}let y={zip215:!0};function g(B,b,q,Z=y){let{context:O,zip215:u}=Z,a=p.signature;B=N(B,a,"signature"),b=N(b,void 0,"message"),q=N(q,p.publicKey,"publicKey"),u!==void 0&&ut(u,"zip215"),n&&(b=n(b));let d=a/2,m=B.subarray(0,d),I=st(B.subarray(d,a)),S,A,_;try{S=e.fromBytes(q,u),A=e.fromBytes(m,u),_=o.multiplyUnsafe(I)}catch{return!1}if(!u&&S.isSmallOrder())return!1;let H=w(O,A.toBytes(),S.toBytes(),b);return A.add(S.multiplyUnsafe(H)).subtract(_).clearCofactor().is0()}let R=f.BYTES,p={secretKey:R,publicKey:R,signature:2*R,seed:R};function T(B=c(p.seed)){return N(B,p.seed,"seed")}function D(B){return wt(B)&&B.length===i.BYTES}function V(B,b){try{return!!e.fromBytes(B,b)}catch{return!1}}let k={getExtendedPublicKey:v,randomSecretKey:T,isValidSecretKey:D,isValidPublicKey:V,toMontgomery(B){let{y:b}=e.fromBytes(B),q=p.publicKey,Z=q===32;if(!Z&&q!==57)throw new Error("only defined for 25519 and 448");let O=Z?f.div(P+b,P-b):f.div(b-P,b+P);return f.toBytes(O)},toMontgomerySecret(B){let b=p.secretKey;N(B,b);let q=t(B.subarray(0,b));return s(q).subarray(0,b)}};return Object.freeze({keygen:qt(T,E),getPublicKey:E,sign:L,verify:g,utils:k,Point:e,lengths:p})}var jt=BigInt(0),Dt=BigInt(1),fe=BigInt(2);function ur(e){return it(e,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...e})}function An(e){let t=ur(e),{P:r,type:n,adjustScalarBytes:o,powPminus2:f,randomBytes:i}=t,c=n==="x25519";if(!c&&n!=="x448")throw new Error("invalid type");let s=i||ht,l=c?255:448,h=c?32:56,x=BigInt(c?9:5),v=BigInt(c?121665:39081),E=c?fe**BigInt(254):fe**BigInt(447),w=c?BigInt(8)*fe**BigInt(251)-Dt:BigInt(4)*fe**BigInt(445)-Dt,L=E+w+Dt,y=a=>j(a,r),g=R(x);function R(a){return Yt(y(a),h)}function p(a){let d=vt(N(a,h,"uCoordinate"));return c&&(d[31]&=127),y(st(d))}function T(a){return st(o(vt(N(a,h,"scalar"))))}function D(a,d){let m=q(p(d),T(a));if(m===jt)throw new Error("invalid private or public key received");return R(m)}function V(a){return D(a,g)}let k=V,B=D;function b(a,d,m){let I=y(a*(d-m));return d=y(d-I),m=y(m+I),{x_2:d,x_3:m}}function q(a,d){gt("u",a,jt,r),gt("scalar",d,E,L);let m=d,I=a,S=Dt,A=jt,_=a,H=Dt,U=jt;for(let M=BigInt(l-1);M>=jt;M--){let C=m>>M&Dt;U^=C,{x_2:S,x_3:_}=b(U,S,_),{x_2:A,x_3:H}=b(U,A,H),U=C;let Y=S+A,z=y(Y*Y),F=S-A,X=y(F*F),W=z-X,At=_+H,zt=_-H,Zt=y(zt*Y),Ne=y(At*F),De=Zt+Ne,Ze=Zt-Ne;_=y(De*De),H=y(I*y(Ze*Ze)),S=y(z*X),A=y(W*(z+y(v*W)))}({x_2:S,x_3:_}=b(U,S,_)),{x_2:A,x_3:H}=b(U,A,H);let K=f(A);return y(S*K)}let Z={secretKey:h,publicKey:h,seed:h},O=(a=s(h))=>(N(a,Z.seed,"seed"),a),u={randomSecretKey:O};return Object.freeze({keygen:qt(O,k),getSharedSecret:B,getPublicKey:k,scalarMult:D,scalarMultBase:V,utils:u,GuBytes:g.slice(),lengths:Z})}var lr=BigInt(1),Rn=BigInt(2),hr=BigInt(3),br=BigInt(5),xr=BigInt(8),se=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),mr={p:se,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:xr,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Hn(e){let t=BigInt(10),r=BigInt(20),n=BigInt(40),o=BigInt(80),f=se,c=e*e%f*e%f,s=G(c,Rn,f)*c%f,l=G(s,lr,f)*e%f,h=G(l,br,f)*l%f,x=G(h,t,f)*h%f,v=G(x,r,f)*x%f,E=G(v,n,f)*v%f,w=G(E,o,f)*E%f,L=G(w,o,f)*E%f,y=G(L,t,f)*h%f;return{pow_p_5_8:G(y,Rn,f)*e%f,b2:c}}function Tn(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}var On=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function gr(e,t){let r=se,n=j(t*t*t,r),o=j(n*n*t,r),f=Hn(e*o).pow_p_5_8,i=j(e*n*f,r),c=j(t*i*i,r),s=i,l=j(i*On,r),h=c===e,x=c===j(-e,r),v=c===j(-e*On,r);return h&&(i=s),(x||v)&&(i=l),un(i,r)&&(i=j(-i,r)),{isValid:h||x,value:i}}var pr=_n(mr,{uvRatio:gr});function yr(e){return In(pr,me,Object.assign({adjustScalarBytes:Tn},e))}var Ln=yr({});var Un=(()=>{let e=se;return An({P:e,type:"x25519",powPminus2:t=>{let{pow_p_5_8:r,b2:n}=Hn(t);return j(G(r,hr,e)*n,e)},adjustScalarBytes:Tn})})();var wr={p:BigInt("0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff"),n:BigInt("0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551"),h:BigInt(1),a:BigInt("0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc"),b:BigInt("0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b"),Gx:BigInt("0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"),Gy:BigInt("0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5")};var Br=re(wr),qn=oe(Br,Qt);return Mn(Er);})();
4728+/*! Bundled license information:
4729+
4730+@noble/hashes/utils.js:
4731+ (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
4732+
4733+@noble/curves/utils.js:
4734+@noble/curves/abstract/modular.js:
4735+@noble/curves/abstract/curve.js:
4736+@noble/curves/abstract/weierstrass.js:
4737+@noble/curves/secp256k1.js:
4738+@noble/curves/abstract/edwards.js:
4739+@noble/curves/abstract/montgomery.js:
4740+@noble/curves/ed25519.js:
4741+@noble/curves/nist.js:
4742+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
4743+*/
4744+/*! Bundled license information:
4745+
4746+@noble/hashes/utils.js:
4747+ (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
4748+
4749+@noble/curves/utils.js:
4750+@noble/curves/abstract/modular.js:
4751+@noble/curves/abstract/curve.js:
4752+@noble/curves/abstract/weierstrass.js:
4753+@noble/curves/secp256k1.js:
4754+@noble/curves/abstract/edwards.js:
4755+@noble/curves/ed25519.js:
4756+@noble/curves/nist.js:
4757+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
4758+*/
4759+
4760+
4761+// UTILS
4762+
4763+var _Crypto_toHex = _Crypto_noble.bytesToHex;
4764+var _Crypto_fromHex = _Crypto_noble.hexToBytes;
4765+
4766+
4767+// DER CODEC (for ECDSA signatures: secp256k1, P-256)
4768+
4769+function _Crypto_bigintToBytes(n, len)
4770+{
4771+ var hex = n.toString(16);
4772+ if (hex.length % 2) { hex = '0' + hex; }
4773+ while (hex.length < len * 2) { hex = '00' + hex; }
4774+ return _Crypto_fromHex(hex);
4775+}
4776+
4777+function _Crypto_bytesToBigint(bytes)
4778+{
4779+ return BigInt('0x' + _Crypto_toHex(bytes));
4780+}
4781+
4782+function _Crypto_compactToDer(compactHex, byteLen)
4783+{
4784+ var bytes = _Crypto_fromHex(compactHex);
4785+ var r = bytes.slice(0, byteLen);
4786+ var s = bytes.slice(byteLen);
4787+ function encodeInt(b) {
4788+ // Strip leading zeros, then add back if high bit set
4789+ var i = 0;
4790+ while (i < b.length - 1 && b[i] === 0) { i++; }
4791+ b = b.slice(i);
4792+ if (b[0] & 0x80) {
4793+ var padded = new Uint8Array(b.length + 1);
4794+ padded[0] = 0;
4795+ padded.set(b, 1);
4796+ b = padded;
4797+ }
4798+ return b;
4799+ }
4800+ var rEnc = encodeInt(r);
4801+ var sEnc = encodeInt(s);
4802+ var totalLen = 2 + rEnc.length + 2 + sEnc.length;
4803+ var der = new Uint8Array(2 + totalLen);
4804+ var pos = 0;
4805+ der[pos++] = 0x30;
4806+ der[pos++] = totalLen;
4807+ der[pos++] = 0x02;
4808+ der[pos++] = rEnc.length;
4809+ der.set(rEnc, pos); pos += rEnc.length;
4810+ der[pos++] = 0x02;
4811+ der[pos++] = sEnc.length;
4812+ der.set(sEnc, pos);
4813+ return _Crypto_toHex(der);
4814+}
4815+
4816+function _Crypto_derToCompact(derHex, byteLen)
4817+{
4818+ var der = _Crypto_fromHex(derHex);
4819+ if (der[0] !== 0x30) { return null; }
4820+ var pos = 2;
4821+ if (der[pos] !== 0x02) { return null; }
4822+ var rLen = der[pos + 1]; pos += 2;
4823+ var rBytes = der.slice(pos, pos + rLen); pos += rLen;
4824+ if (der[pos] !== 0x02) { return null; }
4825+ var sLen = der[pos + 1]; pos += 2;
4826+ var sBytes = der.slice(pos, pos + sLen);
4827+ // Remove leading zero padding
4828+ while (rBytes.length > byteLen) { rBytes = rBytes.slice(1); }
4829+ while (sBytes.length > byteLen) { sBytes = sBytes.slice(1); }
4830+ // Pad to fixed width
4831+ var r = new Uint8Array(byteLen);
4832+ var s = new Uint8Array(byteLen);
4833+ r.set(rBytes, byteLen - rBytes.length);
4834+ s.set(sBytes, byteLen - sBytes.length);
4835+ var compact = new Uint8Array(byteLen * 2);
4836+ compact.set(r, 0);
4837+ compact.set(s, byteLen);
4838+ return _Crypto_toHex(compact);
4839+}
4840+
4841+
4842+// SECP256K1
4843+
4844+function _Crypto_secp256k1PrivateKeyFromHex(hex)
4845+{
4846+ try {
4847+ _Crypto_noble.secp256k1.getPublicKey(_Crypto_fromHex(hex));
4848+ return $elm$core$Maybe$Just(hex);
4849+ } catch (e) {
4850+ return $elm$core$Maybe$Nothing;
4851+ }
4852+}
4853+
4854+function _Crypto_secp256k1PrivateKeyToHex(key)
4855+{
4856+ return key;
4857+}
4858+
4859+function _Crypto_secp256k1PublicKeyFromHex(hex)
4860+{
4861+ try {
4862+ _Crypto_noble.secp256k1.Point.fromHex(hex);
4863+ return $elm$core$Maybe$Just(hex);
4864+ } catch (e) {
4865+ return $elm$core$Maybe$Nothing;
4866+ }
4867+}
4868+
4869+function _Crypto_secp256k1PublicKeyToHex(key)
4870+{
4871+ return key;
4872+}
4873+
4874+function _Crypto_secp256k1SignatureFromCompactHex(hex)
4875+{
4876+ try {
4877+ var bytes = _Crypto_fromHex(hex);
4878+ if (bytes.length !== 64) { return $elm$core$Maybe$Nothing; }
4879+ _Crypto_noble.secp256k1.Signature.fromHex(hex);
4880+ return $elm$core$Maybe$Just(hex);
4881+ } catch (e) {
4882+ return $elm$core$Maybe$Nothing;
4883+ }
4884+}
4885+
4886+function _Crypto_secp256k1SignatureFromDerHex(hex)
4887+{
4888+ try {
4889+ var compact = _Crypto_derToCompact(hex, 32);
4890+ if (!compact) { return $elm$core$Maybe$Nothing; }
4891+ _Crypto_noble.secp256k1.Signature.fromHex(compact);
4892+ return $elm$core$Maybe$Just(compact);
4893+ } catch (e) {
4894+ return $elm$core$Maybe$Nothing;
4895+ }
4896+}
4897+
4898+function _Crypto_secp256k1SignatureToCompactHex(sig)
4899+{
4900+ return sig;
4901+}
4902+
4903+function _Crypto_secp256k1SignatureToDerHex(compactHex)
4904+{
4905+ return _Crypto_compactToDer(compactHex, 32);
4906+}
4907+
4908+function _Crypto_secp256k1GetPublicKey(privKey)
4909+{
4910+ return _Crypto_toHex(_Crypto_noble.secp256k1.getPublicKey(_Crypto_fromHex(privKey)));
4911+}
4912+
4913+var _Crypto_secp256k1Sign = F2(function(msgHash, privKey)
4914+{
4915+ var sig = _Crypto_noble.secp256k1.sign(_Crypto_fromHex(msgHash), _Crypto_fromHex(privKey));
4916+ return _Crypto_toHex(sig);
4917+});
4918+
4919+var _Crypto_secp256k1Verify = F3(function(sig, msgHash, pubKey)
4920+{
4921+ try {
4922+ return _Crypto_noble.secp256k1.verify(
4923+ _Crypto_fromHex(sig),
4924+ _Crypto_fromHex(msgHash),
4925+ _Crypto_fromHex(pubKey)
4926+ );
4927+ } catch (e) {
4928+ return false;
4929+ }
4930+});
4931+
4932+var _Crypto_secp256k1GetSharedSecret = F2(function(privKey, pubKey)
4933+{
4934+ return _Crypto_toHex(_Crypto_noble.secp256k1.getSharedSecret(_Crypto_fromHex(privKey), _Crypto_fromHex(pubKey)));
4935+});
4936+
4937+
4938+// ED25519
4939+
4940+function _Crypto_ed25519PrivateKeyFromHex(hex)
4941+{
4942+ try {
4943+ _Crypto_noble.ed25519.getPublicKey(_Crypto_fromHex(hex));
4944+ return $elm$core$Maybe$Just(hex);
4945+ } catch (e) {
4946+ return $elm$core$Maybe$Nothing;
4947+ }
4948+}
4949+
4950+function _Crypto_ed25519PrivateKeyToHex(key)
4951+{
4952+ return key;
4953+}
4954+
4955+function _Crypto_ed25519PublicKeyFromHex(hex)
4956+{
4957+ try {
4958+ _Crypto_noble.ed25519.Point.fromHex(hex);
4959+ return $elm$core$Maybe$Just(hex);
4960+ } catch (e) {
4961+ return $elm$core$Maybe$Nothing;
4962+ }
4963+}
4964+
4965+function _Crypto_ed25519PublicKeyToHex(key)
4966+{
4967+ return key;
4968+}
4969+
4970+function _Crypto_ed25519SignatureFromHex(hex)
4971+{
4972+ try {
4973+ var bytes = _Crypto_fromHex(hex);
4974+ if (bytes.length !== 64) { return $elm$core$Maybe$Nothing; }
4975+ return $elm$core$Maybe$Just(hex);
4976+ } catch (e) {
4977+ return $elm$core$Maybe$Nothing;
4978+ }
4979+}
4980+
4981+function _Crypto_ed25519SignatureToHex(sig)
4982+{
4983+ return sig;
4984+}
4985+
4986+function _Crypto_ed25519GetPublicKey(privKey)
4987+{
4988+ return _Crypto_toHex(_Crypto_noble.ed25519.getPublicKey(_Crypto_fromHex(privKey)));
4989+}
4990+
4991+var _Crypto_ed25519Sign = F2(function(msg, privKey)
4992+{
4993+ return _Crypto_toHex(_Crypto_noble.ed25519.sign(_Crypto_fromHex(msg), _Crypto_fromHex(privKey)));
4994+});
4995+
4996+var _Crypto_ed25519Verify = F3(function(sig, msg, pubKey)
4997+{
4998+ try {
4999+ return _Crypto_noble.ed25519.verify(
5000+ _Crypto_fromHex(sig),
5001+ _Crypto_fromHex(msg),
5002+ _Crypto_fromHex(pubKey)
5003+ );
5004+ } catch (e) {
5005+ return false;
5006+ }
5007+});
5008+
5009+
5010+// X25519 (Diffie-Hellman)
5011+
5012+function _Crypto_x25519PrivateKeyFromHex(hex)
5013+{
5014+ try {
5015+ var bytes = _Crypto_fromHex(hex);
5016+ if (bytes.length !== 32) { return $elm$core$Maybe$Nothing; }
5017+ _Crypto_noble.x25519.getPublicKey(bytes);
5018+ return $elm$core$Maybe$Just(hex);
5019+ } catch (e) {
5020+ return $elm$core$Maybe$Nothing;
5021+ }
5022+}
5023+
5024+function _Crypto_x25519PrivateKeyToHex(key)
5025+{
5026+ return key;
5027+}
5028+
5029+function _Crypto_x25519PublicKeyFromHex(hex)
5030+{
5031+ try {
5032+ var bytes = _Crypto_fromHex(hex);
5033+ if (bytes.length !== 32) { return $elm$core$Maybe$Nothing; }
5034+ return $elm$core$Maybe$Just(hex);
5035+ } catch (e) {
5036+ return $elm$core$Maybe$Nothing;
5037+ }
5038+}
5039+
5040+function _Crypto_x25519PublicKeyToHex(key)
5041+{
5042+ return key;
5043+}
5044+
5045+function _Crypto_x25519GetPublicKey(privKey)
5046+{
5047+ return _Crypto_toHex(_Crypto_noble.x25519.getPublicKey(_Crypto_fromHex(privKey)));
5048+}
5049+
5050+var _Crypto_x25519GetSharedSecret = F2(function(privKey, pubKey)
5051+{
5052+ return _Crypto_toHex(_Crypto_noble.x25519.getSharedSecret(_Crypto_fromHex(privKey), _Crypto_fromHex(pubKey)));
5053+});
5054+
5055+
5056+// P-256 (secp256r1)
5057+
5058+function _Crypto_p256PrivateKeyFromHex(hex)
5059+{
5060+ try {
5061+ _Crypto_noble.p256.getPublicKey(_Crypto_fromHex(hex));
5062+ return $elm$core$Maybe$Just(hex);
5063+ } catch (e) {
5064+ return $elm$core$Maybe$Nothing;
5065+ }
5066+}
5067+
5068+function _Crypto_p256PrivateKeyToHex(key)
5069+{
5070+ return key;
5071+}
5072+
5073+function _Crypto_p256PublicKeyFromHex(hex)
5074+{
5075+ try {
5076+ _Crypto_noble.p256.Point.fromHex(hex);
5077+ return $elm$core$Maybe$Just(hex);
5078+ } catch (e) {
5079+ return $elm$core$Maybe$Nothing;
5080+ }
5081+}
5082+
5083+function _Crypto_p256PublicKeyToHex(key)
5084+{
5085+ return key;
5086+}
5087+
5088+function _Crypto_p256SignatureFromCompactHex(hex)
5089+{
5090+ try {
5091+ var bytes = _Crypto_fromHex(hex);
5092+ if (bytes.length !== 64) { return $elm$core$Maybe$Nothing; }
5093+ _Crypto_noble.p256.Signature.fromHex(hex);
5094+ return $elm$core$Maybe$Just(hex);
5095+ } catch (e) {
5096+ return $elm$core$Maybe$Nothing;
5097+ }
5098+}
5099+
5100+function _Crypto_p256SignatureFromDerHex(hex)
5101+{
5102+ try {
5103+ var compact = _Crypto_derToCompact(hex, 32);
5104+ if (!compact) { return $elm$core$Maybe$Nothing; }
5105+ _Crypto_noble.p256.Signature.fromHex(compact);
5106+ return $elm$core$Maybe$Just(compact);
5107+ } catch (e) {
5108+ return $elm$core$Maybe$Nothing;
5109+ }
5110+}
5111+
5112+function _Crypto_p256SignatureToCompactHex(sig)
5113+{
5114+ return sig;
5115+}
5116+
5117+function _Crypto_p256SignatureToDerHex(compactHex)
5118+{
5119+ return _Crypto_compactToDer(compactHex, 32);
5120+}
5121+
5122+function _Crypto_p256GetPublicKey(privKey)
5123+{
5124+ return _Crypto_toHex(_Crypto_noble.p256.getPublicKey(_Crypto_fromHex(privKey)));
5125+}
5126+
5127+var _Crypto_p256Sign = F2(function(msgHash, privKey)
5128+{
5129+ var sig = _Crypto_noble.p256.sign(_Crypto_fromHex(msgHash), _Crypto_fromHex(privKey));
5130+ return _Crypto_toHex(sig);
5131+});
5132+
5133+var _Crypto_p256Verify = F3(function(sig, msgHash, pubKey)
5134+{
5135+ try {
5136+ return _Crypto_noble.p256.verify(
5137+ _Crypto_fromHex(sig),
5138+ _Crypto_fromHex(msgHash),
5139+ _Crypto_fromHex(pubKey)
5140+ );
5141+ } catch (e) {
5142+ return false;
5143+ }
5144+});
5145+
5146+var _Crypto_p256GetSharedSecret = F2(function(privKey, pubKey)
5147+{
5148+ return _Crypto_toHex(_Crypto_noble.p256.getSharedSecret(_Crypto_fromHex(privKey), _Crypto_fromHex(pubKey)));
5149+});
5150+
5151+
5152+// NOBLE/CIPHERS BUNDLE (https://github.com/paulmillr/noble-ciphers, MIT License)
5153+// Embedded: @noble/ciphers - AES-GCM, ChaCha20-Poly1305, XChaCha20-Poly1305
5154+
5155+var _Crypto_ciphers =(()=>{var _t=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var be=Object.prototype.hasOwnProperty;var xe=(e,t)=>{for(var n in t)_t(e,n,{get:t[n],enumerable:!0})},me=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of we(t))!be.call(e,o)&&o!==n&&_t(e,o,{get:()=>t[o],enumerable:!(r=de(t,o))||r.enumerable});return e};var Le=e=>me(_t({},"_"+"_esModule",{value:!0}),e);var Ge={};xe(Ge,{cbc:()=>ne,cfb:()=>re,chacha20poly1305:()=>pe,ctr:()=>Gt,ecb:()=>ee,gcm:()=>oe,managedNonce:()=>Vt,randomBytes:()=>xt,siv:()=>se,xchacha20poly1305:()=>ye});function Ee(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"}function yt(e){if(typeof e!="boolean")throw new Error(`boolean expected, not ${e}`)}function ht(e){if(!Number.isSafeInteger(e)||e<0)throw new Error("positive integer expected, got "+e)}function E(e,t,n=""){let r=Ee(e),o=e?.length,s=t!==void 0;if(!r||s&&o!==t){let i=n&&`"${n}" `,c=s?` of length ${t}`:"",f=r?`length=${o}`:`type=${typeof e}`;throw new Error(i+"expected Uint8Array"+c+", got "+f)}return e}function et(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function gt(e,t){E(e,void 0,"output");let n=t.outputLen;if(e.length<n)throw new Error("digestInto() expects output buffer of length at least "+n)}function dt(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function A(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function B(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function at(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var Ue=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function vt(e,t){return e.buffer===t.buffer&&e.byteOffset<t.byteOffset+t.byteLength&&t.byteOffset<e.byteOffset+e.byteLength}function pt(e,t){if(vt(e,t)&&e.byteOffset<t.byteOffset)throw new Error("complex overlap of input and output is not supported")}function Ct(...e){let t=0;for(let r=0;r<e.length;r++){let o=e[r];E(o),t+=o.length}let n=new Uint8Array(t);for(let r=0,o=0;r<e.length;r++){let s=e[r];n.set(s,o),o+=s.length}return n}function jt(e,t){if(t==null||typeof t!="object")throw new Error("options must be defined");return Object.assign(e,t)}function wt(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}var D=(e,t)=>{function n(r,...o){if(E(r,void 0,"key"),!Ue)throw new Error("Non little-endian hardware is not yet supported");if(e.nonceLength!==void 0){let h=o[0];E(h,e.varSizeNonce?void 0:e.nonceLength,"nonce")}let s=e.tagLength;s&&o[1]!==void 0&&E(o[1],void 0,"AAD");let i=t(r,...o),c=(h,a)=>{if(a!==void 0){if(h!==2)throw new Error("cipher output not supported");E(a,void 0,"output")}},f=!1;return{encrypt(h,a){if(f)throw new Error("cannot encrypt() twice with same key + nonce");return f=!0,E(h),c(i.encrypt.length,a),i.encrypt(h,a)},decrypt(h,a){if(E(h),s&&h.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return c(i.decrypt.length,a),i.decrypt(h,a)}}}return Object.assign(n,e),n};function Q(e,t,n=!0){if(t===void 0)return new Uint8Array(e);if(t.length!==e)throw new Error('"output" expected Uint8Array of length '+e+", got: "+t.length);if(n&&!Z(t))throw new Error("invalid output, must be aligned");return t}function bt(e,t,n){yt(n);let r=new Uint8Array(16),o=at(r);return o.setBigUint64(0,BigInt(t),n),o.setBigUint64(8,BigInt(e),n),r}function Z(e){return e.byteOffset%4===0}function z(e){return Uint8Array.from(e)}function xt(e=32){let t=typeof globalThis=="object"?globalThis.crypto:null;if(typeof t?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return t.getRandomValues(new Uint8Array(e))}function Vt(e,t=xt){let{nonceLength:n}=e;ht(n);let r=(o,s)=>{let i=Ct(o,s);return s.fill(0),i};return((o,...s)=>({encrypt(i){E(i);let c=t(n),f=e(o,c,...s).encrypt(i);return f instanceof Promise?f.then(l=>r(c,l)):r(c,f)},decrypt(i){E(i);let c=i.subarray(0,n),f=i.subarray(n);return e(o,c,...s).decrypt(f)}}))}var tt=16,Tt=new Uint8Array(16),G=A(Tt),Ae=225,Be=(e,t,n,r)=>{let o=r&1;return{s3:n<<31|r>>>1,s2:t<<31|n>>>1,s1:e<<31|t>>>1,s0:e>>>1^Ae<<24&-(o&1)}},F=e=>(e>>>0&255)<<24|(e>>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255|0;function _e(e){e.reverse();let t=e[15]&1,n=0;for(let r=0;r<e.length;r++){let o=e[r];e[r]=o>>>1|n,n=(o&1)<<7}return e[0]^=-t&225,e}var ve=e=>e>64*1024?8:e>1024?4:2,mt=class{blockLen=tt;outputLen=tt;s0=0;s1=0;s2=0;s3=0;finished=!1;t;W;windowSize;constructor(t,n){E(t,16,"key"),t=z(t);let r=at(t),o=r.getUint32(0,!1),s=r.getUint32(4,!1),i=r.getUint32(8,!1),c=r.getUint32(12,!1),f=[];for(let u=0;u<128;u++)f.push({s0:F(o),s1:F(s),s2:F(i),s3:F(c)}),{s0:o,s1:s,s2:i,s3:c}=Be(o,s,i,c);let l=ve(n||1024);if(![1,2,4,8].includes(l))throw new Error("ghash: invalid window size, expected 2, 4 or 8");this.W=l;let a=128/l,p=this.windowSize=2**l,g=[];for(let u=0;u<a;u++)for(let y=0;y<p;y++){let d=0,w=0,b=0,U=0;for(let L=0;L<l;L++){if(!(y>>>l-L-1&1))continue;let{s0:v,s1:j,s2:V,s3:_}=f[l*u+L];d^=v,w^=j,b^=V,U^=_}g.push({s0:d,s1:w,s2:b,s3:U})}this.t=g}_updateBlock(t,n,r,o){t^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;let{W:s,t:i,windowSize:c}=this,f=0,l=0,h=0,a=0,p=(1<<s)-1,g=0;for(let u of[t,n,r,o])for(let y=0;y<4;y++){let d=u>>>8*y&255;for(let w=8/s-1;w>=0;w--){let b=d>>>s*w&p,{s0:U,s1:L,s2:C,s3:v}=i[g*c+b];f^=U,l^=L,h^=C,a^=v,g+=1}}this.s0=f,this.s1=l,this.s2=h,this.s3=a}update(t){et(this),E(t),t=z(t);let n=A(t),r=Math.floor(t.length/tt),o=t.length%tt;for(let s=0;s<r;s++)this._updateBlock(n[s*4+0],n[s*4+1],n[s*4+2],n[s*4+3]);return o&&(Tt.set(t.subarray(r*tt)),this._updateBlock(G[0],G[1],G[2],G[3]),B(G)),this}destroy(){let{t}=this;for(let n of t)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(t){et(this),gt(t,this),this.finished=!0;let{s0:n,s1:r,s2:o,s3:s}=this,i=A(t);return i[0]=n,i[1]=r,i[2]=o,i[3]=s,t}digest(){let t=new Uint8Array(tt);return this.digestInto(t),this.destroy(),t}},St=class extends mt{constructor(t,n){E(t);let r=_e(z(t));super(r,n),B(r)}update(t){et(this),E(t),t=z(t);let n=A(t),r=t.length%tt,o=Math.floor(t.length/tt);for(let s=0;s<o;s++)this._updateBlock(F(n[s*4+3]),F(n[s*4+2]),F(n[s*4+1]),F(n[s*4+0]));return r&&(Tt.set(t.subarray(o*tt)),this._updateBlock(F(G[3]),F(G[2]),F(G[1]),F(G[0])),B(G)),this}digestInto(t){et(this),gt(t,this),this.finished=!0;let{s0:n,s1:r,s2:o,s3:s}=this,i=A(t);return i[0]=n,i[1]=r,i[2]=o,i[3]=s,t.reverse()}};function Ht(e){let t=(r,o)=>e(o,r.length).update(r).digest(),n=e(new Uint8Array(16),0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=(r,o)=>e(r,o),t}var It=Ht((e,t)=>new mt(e,t)),Ce=Ht((e,t)=>new St(e,t));var R=16,Nt=4,Lt=new Uint8Array(R);var Se=283;function $t(e){if(![16,24,32].includes(e.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+e.length)}function Mt(e){return e<<1^Se&-(e>>7)}function ut(e,t){let n=0;for(;t>0;t>>=1)n^=e&-(t&1),e=Mt(e);return n}var Te=(e,t,n=1)=>{if(!Number.isSafeInteger(n))throw new Error("incBytes: wrong carry "+n);E(e);for(let r=0;r<e.length;r++){let o=t?r:e.length-1-r;n=n+(e[o]&255)|0,e[o]=n&255,n>>>=8}},kt=(()=>{let e=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=Mt(r))e[n]=r;let t=new Uint8Array(256);t[0]=99;for(let n=0;n<255;n++){let r=e[255-n];r|=r<<8,t[e[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return B(e),t})(),Ie=kt.map((e,t)=>kt.indexOf(t)),Ke=e=>e<<24|e>>>8,Kt=e=>e<<8|e>>>24;function Zt(e,t){if(e.length!==256)throw new Error("Wrong sbox length");let n=new Uint32Array(256).map((l,h)=>t(e[h])),r=n.map(Kt),o=r.map(Kt),s=o.map(Kt),i=new Uint32Array(256*256),c=new Uint32Array(256*256),f=new Uint16Array(256*256);for(let l=0;l<256;l++)for(let h=0;h<256;h++){let a=l*256+h;i[a]=n[l]^r[h],c[a]=o[l]^s[h],f[a]=e[l]<<8|e[h]}return{sbox:e,sbox2:f,T0:n,T1:r,T2:o,T3:s,T01:i,T23:c}}var Pt=Zt(kt,e=>ut(e,3)<<24|e<<16|e<<8|ut(e,2)),Ft=Zt(Ie,e=>ut(e,11)<<24|ut(e,13)<<16|ut(e,9)<<8|ut(e,14)),Oe=(()=>{let e=new Uint8Array(16);for(let t=0,n=1;t<16;t++,n=Mt(n))e[t]=n;return e})();function rt(e){E(e);let t=e.length;$t(e);let{sbox2:n}=Pt,r=[];Z(e)||r.push(e=z(e));let o=A(e),s=o.length,i=f=>J(n,f,f,f,f),c=new Uint32Array(t+28);c.set(o);for(let f=s;f<c.length;f++){let l=c[f-1];f%s===0?l=i(Ke(l))^Oe[f/s-1]:s>6&&f%s===4&&(l=i(l)),c[f]=c[f-s]^l}return B(...r),c}function Yt(e){let t=rt(e),n=t.slice(),r=t.length,{sbox2:o}=Pt,{T0:s,T1:i,T2:c,T3:f}=Ft;for(let l=0;l<r;l+=4)for(let h=0;h<4;h++)n[l+h]=t[r-l-4+h];B(t);for(let l=4;l<r-4;l++){let h=n[l],a=J(o,h,h,h,h);n[l]=s[a&255]^i[a>>>8&255]^c[a>>>16&255]^f[a>>>24]}return n}function nt(e,t,n,r,o,s){return e[n<<8&65280|r>>>8&255]^t[o>>>8&65280|s>>>24&255]}function J(e,t,n,r,o){return e[t&255|n&65280]|e[r>>>16&255|o>>>16&65280]<<16}function Y(e,t,n,r,o){let{sbox2:s,T01:i,T23:c}=Pt,f=0;t^=e[f++],n^=e[f++],r^=e[f++],o^=e[f++];let l=e.length/4-2;for(let u=0;u<l;u++){let y=e[f++]^nt(i,c,t,n,r,o),d=e[f++]^nt(i,c,n,r,o,t),w=e[f++]^nt(i,c,r,o,t,n),b=e[f++]^nt(i,c,o,t,n,r);t=y,n=d,r=w,o=b}let h=e[f++]^J(s,t,n,r,o),a=e[f++]^J(s,n,r,o,t),p=e[f++]^J(s,r,o,t,n),g=e[f++]^J(s,o,t,n,r);return{s0:h,s1:a,s2:p,s3:g}}function Qt(e,t,n,r,o){let{sbox2:s,T01:i,T23:c}=Ft,f=0;t^=e[f++],n^=e[f++],r^=e[f++],o^=e[f++];let l=e.length/4-2;for(let u=0;u<l;u++){let y=e[f++]^nt(i,c,t,o,r,n),d=e[f++]^nt(i,c,n,t,o,r),w=e[f++]^nt(i,c,r,n,t,o),b=e[f++]^nt(i,c,o,r,n,t);t=y,n=d,r=w,o=b}let h=e[f++]^J(s,t,o,r,n),a=e[f++]^J(s,n,t,o,r),p=e[f++]^J(s,r,n,t,o),g=e[f++]^J(s,o,r,n,t);return{s0:h,s1:a,s2:p,s3:g}}function ke(e,t,n,r){E(t,R,"nonce"),E(n);let o=n.length;r=Q(o,r),pt(n,r);let s=t,i=A(s),{s0:c,s1:f,s2:l,s3:h}=Y(e,i[0],i[1],i[2],i[3]),a=A(n),p=A(r);for(let u=0;u+4<=a.length;u+=4)p[u+0]=a[u+0]^c,p[u+1]=a[u+1]^f,p[u+2]=a[u+2]^l,p[u+3]=a[u+3]^h,Te(s,!1,1),{s0:c,s1:f,s2:l,s3:h}=Y(e,i[0],i[1],i[2],i[3]);let g=R*Math.floor(a.length/Nt);if(g<o){let u=new Uint32Array([c,f,l,h]),y=dt(u);for(let d=g,w=0;d<o;d++,w++)r[d]=n[d]^y[w];B(u)}return r}function Et(e,t,n,r,o){E(n,R,"nonce"),E(r),o=Q(r.length,o);let s=n,i=A(s),c=at(s),f=A(r),l=A(o),h=t?0:12,a=r.length,p=c.getUint32(h,t),{s0:g,s1:u,s2:y,s3:d}=Y(e,i[0],i[1],i[2],i[3]);for(let b=0;b+4<=f.length;b+=4)l[b+0]=f[b+0]^g,l[b+1]=f[b+1]^u,l[b+2]=f[b+2]^y,l[b+3]=f[b+3]^d,p=p+1>>>0,c.setUint32(h,p,t),{s0:g,s1:u,s2:y,s3:d}=Y(e,i[0],i[1],i[2],i[3]);let w=R*Math.floor(f.length/Nt);if(w<a){let b=new Uint32Array([g,u,y,d]),U=dt(b);for(let L=w,C=0;L<a;L++,C++)o[L]=r[L]^U[C];B(b)}return o}var Gt=D({blockSize:16,nonceLength:16},function(t,n){function r(o,s){if(E(o),s!==void 0&&(E(s),!Z(s)))throw new Error("unaligned destination");let i=rt(t),c=z(n),f=[i,c];Z(o)||f.push(o=z(o));let l=ke(i,c,o,s);return B(...f),l}return{encrypt:(o,s)=>r(o,s),decrypt:(o,s)=>r(o,s)}});function Jt(e){if(E(e),e.length%R!==0)throw new Error("aes-(cbc/ecb).decrypt ciphertext should consist of blocks with size "+R)}function Xt(e,t,n){E(e);let r=e.length,o=r%R;if(!t&&o!==0)throw new Error("aec/(cbc-ecb): unpadded plaintext with disabled padding");Z(e)||(e=z(e));let s=A(e);if(t){let c=R-o;c||(c=R),r=r+c}n=Q(r,n),pt(e,n);let i=A(n);return{b:s,o:i,out:n}}function Dt(e,t){if(!t)return e;let n=e.length;if(!n)throw new Error("aes/pcks5: empty ciphertext not allowed");let r=e[n-1];if(r<=0||r>16)throw new Error("aes/pcks5: wrong padding");let o=e.subarray(0,-r);for(let s=0;s<r;s++)if(e[n-s-1]!==r)throw new Error("aes/pcks5: wrong padding");return o}function te(e){let t=new Uint8Array(16),n=A(t);t.set(e);let r=R-e.length;for(let o=R-r;o<R;o++)t[o]=r;return n}var ee=D({blockSize:16},function(t,n={}){let r=!n.disablePadding;return{encrypt(o,s){let{b:i,o:c,out:f}=Xt(o,r,s),l=rt(t),h=0;for(;h+4<=i.length;){let{s0:a,s1:p,s2:g,s3:u}=Y(l,i[h+0],i[h+1],i[h+2],i[h+3]);c[h++]=a,c[h++]=p,c[h++]=g,c[h++]=u}if(r){let a=te(o.subarray(h*4)),{s0:p,s1:g,s2:u,s3:y}=Y(l,a[0],a[1],a[2],a[3]);c[h++]=p,c[h++]=g,c[h++]=u,c[h++]=y}return B(l),f},decrypt(o,s){Jt(o);let i=Yt(t);s=Q(o.length,s);let c=[i];Z(o)||c.push(o=z(o)),pt(o,s);let f=A(o),l=A(s);for(let h=0;h+4<=f.length;){let{s0:a,s1:p,s2:g,s3:u}=Qt(i,f[h+0],f[h+1],f[h+2],f[h+3]);l[h++]=a,l[h++]=p,l[h++]=g,l[h++]=u}return B(...c),Dt(s,r)}}}),ne=D({blockSize:16,nonceLength:16},function(t,n,r={}){let o=!r.disablePadding;return{encrypt(s,i){let c=rt(t),{b:f,o:l,out:h}=Xt(s,o,i),a=n,p=[c];Z(a)||p.push(a=z(a));let g=A(a),u=g[0],y=g[1],d=g[2],w=g[3],b=0;for(;b+4<=f.length;)u^=f[b+0],y^=f[b+1],d^=f[b+2],w^=f[b+3],{s0:u,s1:y,s2:d,s3:w}=Y(c,u,y,d,w),l[b++]=u,l[b++]=y,l[b++]=d,l[b++]=w;if(o){let U=te(s.subarray(b*4));u^=U[0],y^=U[1],d^=U[2],w^=U[3],{s0:u,s1:y,s2:d,s3:w}=Y(c,u,y,d,w),l[b++]=u,l[b++]=y,l[b++]=d,l[b++]=w}return B(...p),h},decrypt(s,i){Jt(s);let c=Yt(t),f=n,l=[c];Z(f)||l.push(f=z(f));let h=A(f);i=Q(s.length,i),Z(s)||l.push(s=z(s)),pt(s,i);let a=A(s),p=A(i),g=h[0],u=h[1],y=h[2],d=h[3];for(let w=0;w+4<=a.length;){let b=g,U=u,L=y,C=d;g=a[w+0],u=a[w+1],y=a[w+2],d=a[w+3];let{s0:v,s1:j,s2:V,s3:_}=Qt(c,g,u,y,d);p[w++]=v^b,p[w++]=j^U,p[w++]=V^L,p[w++]=_^C}return B(...l),Dt(i,o)}}}),re=D({blockSize:16,nonceLength:16},function(t,n){function r(o,s,i){E(o);let c=o.length;if(i=Q(c,i),vt(o,i))throw new Error("overlapping src and dst not supported.");let f=rt(t),l=n,h=[f];Z(l)||h.push(l=z(l)),Z(o)||h.push(o=z(o));let a=A(o),p=A(i),g=s?p:a,u=A(l),y=u[0],d=u[1],w=u[2],b=u[3];for(let L=0;L+4<=a.length;){let{s0:C,s1:v,s2:j,s3:V}=Y(f,y,d,w,b);p[L+0]=a[L+0]^C,p[L+1]=a[L+1]^v,p[L+2]=a[L+2]^j,p[L+3]=a[L+3]^V,y=g[L++],d=g[L++],w=g[L++],b=g[L++]}let U=R*Math.floor(a.length/Nt);if(U<c){({s0:y,s1:d,s2:w,s3:b}=Y(f,y,d,w,b));let L=dt(new Uint32Array([y,d,w,b]));for(let C=U,v=0;C<c;C++,v++)i[C]=o[C]^L[v];B(L)}return B(...h),i}return{encrypt:(o,s)=>r(o,!0,s),decrypt:(o,s)=>r(o,!1,s)}});function Ne(e,t,n,r,o){let s=o?o.length:0,i=e.create(n,r.length+s);o&&i.update(o);let c=bt(8*r.length,8*s,t);i.update(r),i.update(c);let f=i.digest();return B(c),f}var oe=D({blockSize:16,nonceLength:12,tagLength:16,varSizeNonce:!0},function(t,n,r){if(n.length<8)throw new Error("aes/gcm: invalid nonce length");let o=16;function s(c,f,l){let h=Ne(It,!1,c,l,r);for(let a=0;a<f.length;a++)h[a]^=f[a];return h}function i(){let c=rt(t),f=Lt.slice(),l=Lt.slice();if(Et(c,!1,l,l,f),n.length===12)l.set(n);else{let a=Lt.slice();at(a).setBigUint64(8,BigInt(n.length*8),!1);let g=It.create(f).update(n).update(a);g.digestInto(l),g.destroy()}let h=Et(c,!1,l,Lt);return{xk:c,authKey:f,counter:l,tagMask:h}}return{encrypt(c){let{xk:f,authKey:l,counter:h,tagMask:a}=i(),p=new Uint8Array(c.length+o),g=[f,l,h,a];Z(c)||g.push(c=z(c)),Et(f,!1,h,c,p.subarray(0,c.length));let u=s(l,a,p.subarray(0,p.length-o));return g.push(u),p.set(u,c.length),B(...g),p},decrypt(c){let{xk:f,authKey:l,counter:h,tagMask:a}=i(),p=[f,l,a,h];Z(c)||p.push(c=z(c));let g=c.subarray(0,-o),u=c.subarray(-o),y=s(l,a,g);if(p.push(y),!wt(y,u))throw new Error("aes/gcm: invalid ghash tag");let d=Et(f,!1,h,g);return B(...p),d}}});function Me(e){return e instanceof Uint32Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint32Array"}function Ot(e,t){if(E(t,16,"block"),!Me(e))throw new Error("_encryptBlock accepts result of expandKeyLE");let n=A(t),{s0:r,s1:o,s2:s,s3:i}=Y(e,n[0],n[1],n[2],n[3]);return n[0]=r,n[1]=o,n[2]=s,n[3]=i,t}function qt(e){let t=0;for(let n=R-1;n>=0;n--){let r=(e[n]&128)>>>7;e[n]=e[n]<<1|t,t=r}return t&&(e[R-1]^=135),e}function Ut(e,t){if(e.length!==t.length)throw new Error("xorBlock: blocks must have same length");for(let n=0;n<e.length;n++)e[n]=e[n]^t[n];return e}var At=class{buffer;destroyed;k1;k2;xk;constructor(t){E(t),$t(t),this.xk=rt(t),this.buffer=new Uint8Array(0),this.destroyed=!1;let n=new Uint8Array(R);Ot(this.xk,n),this.k1=qt(n),this.k2=qt(new Uint8Array(this.k1))}update(t){let{destroyed:n,buffer:r}=this;if(n)throw new Error("CMAC instance was destroyed");E(t);let o=new Uint8Array(r.length+t.length);return o.set(r),o.set(t,r.length),this.buffer=o,this}digest(){if(this.destroyed)throw new Error("CMAC instance was destroyed");let{buffer:t}=this,n=t.length,r=Math.ceil(n/R),o;r===0?(r=1,o=!1):o=n%R===0;let s=(r-1)*R,i=t.subarray(s),c;if(o)c=Ut(new Uint8Array(i),this.k1);else{let l=new Uint8Array(R);l.set(i),l[i.length]=128,c=Ut(l,this.k2)}let f=new Uint8Array(R);for(let l=0;l<r-1;l++){let h=t.subarray(l*R,(l+1)*R);Ut(f,h),Ot(this.xk,f)}return Ut(f,c),Ot(this.xk,f),B(c),f}destroy(){let{buffer:t,destroyed:n,xk:r,k1:o,k2:s}=this;n||(this.destroyed=!0,B(t,r,o,s))}},Pe=(e,t)=>new At(e).update(t).digest();Pe.create=e=>new At(e);var se=()=>{throw new Error('"siv" from v1 is now "gcmsiv"')};var ie=e=>Uint8Array.from(e.split(""),t=>t.charCodeAt(0)),ze=ie("expand 16-byte k"),Re=ie("expand 32-byte k"),We=A(ze),je=A(Re);function x(e,t){return e<<t|e>>>32-t}function zt(e){return e.byteOffset%4===0}var Bt=64,Ve=16,fe=2**32-1,ce=Uint32Array.of();function He(e,t,n,r,o,s,i,c){let f=o.length,l=new Uint8Array(Bt),h=A(l),a=zt(o)&&zt(s),p=a?A(o):ce,g=a?A(s):ce;for(let u=0;u<f;i++){if(e(t,n,r,h,i,c),i>=fe)throw new Error("arx: counter overflow");let y=Math.min(Bt,f-u);if(a&&y===Bt){let d=u/4;if(u%4!==0)throw new Error("arx: invalid block position");for(let w=0,b;w<Ve;w++)b=d+w,g[b]=p[b]^h[w];u+=Bt;continue}for(let d=0,w;d<y;d++)w=u+d,s[w]=o[w]^l[d];u+=y}}function Rt(e,t){let{allowShortKeys:n,extendNonceFn:r,counterLength:o,counterRight:s,rounds:i}=jt({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},t);if(typeof e!="function")throw new Error("core must be a function");return ht(o),ht(i),yt(s),yt(n),(c,f,l,h,a=0)=>{E(c,void 0,"key"),E(f,void 0,"nonce"),E(l,void 0,"data");let p=l.length;if(h===void 0&&(h=new Uint8Array(p)),E(h,void 0,"output"),ht(a),a<0||a>=fe)throw new Error("arx: counter overflow");if(h.length<p)throw new Error(`arx: output (${h.length}) is shorter than data (${p})`);let g=[],u=c.length,y,d;if(u===32)g.push(y=z(c)),d=je;else if(u===16&&n)y=new Uint8Array(32),y.set(c),y.set(c,16),d=We,g.push(y);else throw E(c,32,"arx key"),new Error("invalid key size");zt(f)||g.push(f=z(f));let w=A(y);if(r){if(f.length!==24)throw new Error("arx: extended nonce must be 24 bytes");r(d,w,A(f.subarray(0,16)),w),f=f.subarray(16)}let b=16-o;if(b!==f.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let L=new Uint8Array(12);L.set(f,s?0:12-f.length),f=L,g.push(f)}let U=A(f);return He(e,d,w,U,l,h,a,i),B(...g),h}}function $(e,t){return e[t++]&255|(e[t++]&255)<<8}var Wt=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(t){t=z(E(t,32,"key"));let n=$(t,0),r=$(t,2),o=$(t,4),s=$(t,6),i=$(t,8),c=$(t,10),f=$(t,12),l=$(t,14);this.r[0]=n&8191,this.r[1]=(n>>>13|r<<3)&8191,this.r[2]=(r>>>10|o<<6)&7939,this.r[3]=(o>>>7|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|c<<2)&8191,this.r[7]=(c>>>11|f<<5)&8065,this.r[8]=(f>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let h=0;h<8;h++)this.pad[h]=$(t,16+2*h)}process(t,n,r=!1){let o=r?0:2048,{h:s,r:i}=this,c=i[0],f=i[1],l=i[2],h=i[3],a=i[4],p=i[5],g=i[6],u=i[7],y=i[8],d=i[9],w=$(t,n+0),b=$(t,n+2),U=$(t,n+4),L=$(t,n+6),C=$(t,n+8),v=$(t,n+10),j=$(t,n+12),V=$(t,n+14),_=s[0]+(w&8191),S=s[1]+((w>>>13|b<<3)&8191),T=s[2]+((b>>>10|U<<6)&8191),I=s[3]+((U>>>7|L<<9)&8191),K=s[4]+((L>>>4|C<<12)&8191),O=s[5]+(C>>>1&8191),k=s[6]+((C>>>14|v<<2)&8191),N=s[7]+((v>>>11|j<<5)&8191),M=s[8]+((j>>>8|V<<8)&8191),P=s[9]+(V>>>5|o),m=0,H=m+_*c+S*(5*d)+T*(5*y)+I*(5*u)+K*(5*g);m=H>>>13,H&=8191,H+=O*(5*p)+k*(5*a)+N*(5*h)+M*(5*l)+P*(5*f),m+=H>>>13,H&=8191;let q=m+_*f+S*c+T*(5*d)+I*(5*y)+K*(5*u);m=q>>>13,q&=8191,q+=O*(5*g)+k*(5*p)+N*(5*a)+M*(5*h)+P*(5*l),m+=q>>>13,q&=8191;let W=m+_*l+S*f+T*c+I*(5*d)+K*(5*y);m=W>>>13,W&=8191,W+=O*(5*u)+k*(5*g)+N*(5*p)+M*(5*a)+P*(5*h),m+=W>>>13,W&=8191;let X=m+_*h+S*l+T*f+I*c+K*(5*d);m=X>>>13,X&=8191,X+=O*(5*y)+k*(5*u)+N*(5*g)+M*(5*p)+P*(5*a),m+=X>>>13,X&=8191;let ot=m+_*a+S*h+T*l+I*f+K*c;m=ot>>>13,ot&=8191,ot+=O*(5*d)+k*(5*y)+N*(5*u)+M*(5*g)+P*(5*p),m+=ot>>>13,ot&=8191;let st=m+_*p+S*a+T*h+I*l+K*f;m=st>>>13,st&=8191,st+=O*c+k*(5*d)+N*(5*y)+M*(5*u)+P*(5*g),m+=st>>>13,st&=8191;let ct=m+_*g+S*p+T*a+I*h+K*l;m=ct>>>13,ct&=8191,ct+=O*f+k*c+N*(5*d)+M*(5*y)+P*(5*u),m+=ct>>>13,ct&=8191;let it=m+_*u+S*g+T*p+I*a+K*h;m=it>>>13,it&=8191,it+=O*l+k*f+N*c+M*(5*d)+P*(5*y),m+=it>>>13,it&=8191;let ft=m+_*y+S*u+T*g+I*p+K*a;m=ft>>>13,ft&=8191,ft+=O*h+k*l+N*f+M*c+P*(5*d),m+=ft>>>13,ft&=8191;let lt=m+_*d+S*y+T*u+I*g+K*p;m=lt>>>13,lt&=8191,lt+=O*a+k*h+N*l+M*f+P*c,m+=lt>>>13,lt&=8191,m=(m<<2)+m|0,m=m+H|0,H=m&8191,m=m>>>13,q+=m,s[0]=H,s[1]=q,s[2]=W,s[3]=X,s[4]=ot,s[5]=st,s[6]=ct,s[7]=it,s[8]=ft,s[9]=lt}finalize(){let{h:t,pad:n}=this,r=new Uint16Array(10),o=t[1]>>>13;t[1]&=8191;for(let c=2;c<10;c++)t[c]+=o,o=t[c]>>>13,t[c]&=8191;t[0]+=o*5,o=t[0]>>>13,t[0]&=8191,t[1]+=o,o=t[1]>>>13,t[1]&=8191,t[2]+=o,r[0]=t[0]+5,o=r[0]>>>13,r[0]&=8191;for(let c=1;c<10;c++)r[c]=t[c]+o,o=r[c]>>>13,r[c]&=8191;r[9]-=8192;let s=(o^1)-1;for(let c=0;c<10;c++)r[c]&=s;s=~s;for(let c=0;c<10;c++)t[c]=t[c]&s|r[c];t[0]=(t[0]|t[1]<<13)&65535,t[1]=(t[1]>>>3|t[2]<<10)&65535,t[2]=(t[2]>>>6|t[3]<<7)&65535,t[3]=(t[3]>>>9|t[4]<<4)&65535,t[4]=(t[4]>>>12|t[5]<<1|t[6]<<14)&65535,t[5]=(t[6]>>>2|t[7]<<11)&65535,t[6]=(t[7]>>>5|t[8]<<8)&65535,t[7]=(t[8]>>>8|t[9]<<5)&65535;let i=t[0]+n[0];t[0]=i&65535;for(let c=1;c<8;c++)i=(t[c]+n[c]|0)+(i>>>16)|0,t[c]=i&65535;B(r)}update(t){et(this),E(t),t=z(t);let{buffer:n,blockLen:r}=this,o=t.length;for(let s=0;s<o;){let i=Math.min(r-this.pos,o-s);if(i===r){for(;r<=o-s;s+=r)this.process(t,s);continue}n.set(t.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===r&&(this.process(n,0,!1),this.pos=0)}return this}destroy(){B(this.h,this.r,this.buffer,this.pad)}digestInto(t){et(this),gt(t,this),this.finished=!0;let{buffer:n,h:r}=this,{pos:o}=this;if(o){for(n[o++]=1;o<16;o++)n[o]=0;this.process(n,0,!0)}this.finalize();let s=0;for(let i=0;i<8;i++)t[s++]=r[i]>>>0,t[s++]=r[i]>>>8;return t}digest(){let{buffer:t,outputLen:n}=this;this.digestInto(t);let r=t.slice(0,n);return this.destroy(),r}};function qe(e){let t=(r,o)=>e(o).update(r).digest(),n=e(new Uint8Array(32));return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=r=>e(r),t}var le=qe(e=>new Wt(e));function ue(e,t,n,r,o,s=20){let i=e[0],c=e[1],f=e[2],l=e[3],h=t[0],a=t[1],p=t[2],g=t[3],u=t[4],y=t[5],d=t[6],w=t[7],b=o,U=n[0],L=n[1],C=n[2],v=i,j=c,V=f,_=l,S=h,T=a,I=p,K=g,O=u,k=y,N=d,M=w,P=b,m=U,H=L,q=C;for(let X=0;X<s;X+=2)v=v+S|0,P=x(P^v,16),O=O+P|0,S=x(S^O,12),v=v+S|0,P=x(P^v,8),O=O+P|0,S=x(S^O,7),j=j+T|0,m=x(m^j,16),k=k+m|0,T=x(T^k,12),j=j+T|0,m=x(m^j,8),k=k+m|0,T=x(T^k,7),V=V+I|0,H=x(H^V,16),N=N+H|0,I=x(I^N,12),V=V+I|0,H=x(H^V,8),N=N+H|0,I=x(I^N,7),_=_+K|0,q=x(q^_,16),M=M+q|0,K=x(K^M,12),_=_+K|0,q=x(q^_,8),M=M+q|0,K=x(K^M,7),v=v+T|0,q=x(q^v,16),N=N+q|0,T=x(T^N,12),v=v+T|0,q=x(q^v,8),N=N+q|0,T=x(T^N,7),j=j+I|0,P=x(P^j,16),M=M+P|0,I=x(I^M,12),j=j+I|0,P=x(P^j,8),M=M+P|0,I=x(I^M,7),V=V+K|0,m=x(m^V,16),O=O+m|0,K=x(K^O,12),V=V+K|0,m=x(m^V,8),O=O+m|0,K=x(K^O,7),_=_+S|0,H=x(H^_,16),k=k+H|0,S=x(S^k,12),_=_+S|0,H=x(H^_,8),k=k+H|0,S=x(S^k,7);let W=0;r[W++]=i+v|0,r[W++]=c+j|0,r[W++]=f+V|0,r[W++]=l+_|0,r[W++]=h+S|0,r[W++]=a+T|0,r[W++]=p+I|0,r[W++]=g+K|0,r[W++]=u+O|0,r[W++]=y+k|0,r[W++]=d+N|0,r[W++]=w+M|0,r[W++]=b+P|0,r[W++]=U+m|0,r[W++]=L+H|0,r[W++]=C+q|0}function $e(e,t,n,r){let o=e[0],s=e[1],i=e[2],c=e[3],f=t[0],l=t[1],h=t[2],a=t[3],p=t[4],g=t[5],u=t[6],y=t[7],d=n[0],w=n[1],b=n[2],U=n[3];for(let C=0;C<20;C+=2)o=o+f|0,d=x(d^o,16),p=p+d|0,f=x(f^p,12),o=o+f|0,d=x(d^o,8),p=p+d|0,f=x(f^p,7),s=s+l|0,w=x(w^s,16),g=g+w|0,l=x(l^g,12),s=s+l|0,w=x(w^s,8),g=g+w|0,l=x(l^g,7),i=i+h|0,b=x(b^i,16),u=u+b|0,h=x(h^u,12),i=i+h|0,b=x(b^i,8),u=u+b|0,h=x(h^u,7),c=c+a|0,U=x(U^c,16),y=y+U|0,a=x(a^y,12),c=c+a|0,U=x(U^c,8),y=y+U|0,a=x(a^y,7),o=o+l|0,U=x(U^o,16),u=u+U|0,l=x(l^u,12),o=o+l|0,U=x(U^o,8),u=u+U|0,l=x(l^u,7),s=s+h|0,d=x(d^s,16),y=y+d|0,h=x(h^y,12),s=s+h|0,d=x(d^s,8),y=y+d|0,h=x(h^y,7),i=i+a|0,w=x(w^i,16),p=p+w|0,a=x(a^p,12),i=i+a|0,w=x(w^i,8),p=p+w|0,a=x(a^p,7),c=c+f|0,b=x(b^c,16),g=g+b|0,f=x(f^g,12),c=c+f|0,b=x(b^c,8),g=g+b|0,f=x(f^g,7);let L=0;r[L++]=o,r[L++]=s,r[L++]=i,r[L++]=c,r[L++]=d,r[L++]=w,r[L++]=b,r[L++]=U}var Ze=Rt(ue,{counterRight:!1,counterLength:4,allowShortKeys:!1}),Fe=Rt(ue,{counterRight:!1,counterLength:8,extendNonceFn:$e,allowShortKeys:!1});var Ye=new Uint8Array(16),he=(e,t)=>{e.update(t);let n=t.length%16;n&&e.update(Ye.subarray(n))},Qe=new Uint8Array(32);function ae(e,t,n,r,o){o!==void 0&&E(o,void 0,"AAD");let s=e(t,n,Qe),i=bt(r.length,o?o.length:0,!0),c=le.create(s);o&&he(c,o),he(c,r),c.update(i);let f=c.digest();return B(s,i),f}var ge=e=>(t,n,r)=>({encrypt(s,i){let c=s.length;i=Q(c+16,i,!1),i.set(s);let f=i.subarray(0,-16);e(t,n,f,f,1);let l=ae(e,t,n,f,r);return i.set(l,c),B(l),i},decrypt(s,i){i=Q(s.length-16,i,!1);let c=s.subarray(0,-16),f=s.subarray(-16),l=ae(e,t,n,c,r);if(!wt(f,l))throw new Error("invalid tag");return i.set(s.subarray(0,-16)),e(t,n,i,i,1),B(l),i}}),pe=D({blockSize:64,nonceLength:12,tagLength:16},ge(Ze)),ye=D({blockSize:64,nonceLength:24,tagLength:16},ge(Fe));return Le(Ge);})();
5156+/*! Bundled license information:
5157+
5158+@noble/ciphers/utils.js:
5159+ (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
5160+*/
5161+
5162+
5163+// CIPHER FUNCTIONS
5164+
5165+function _Crypto_cipherKeyFromHex(hex)
5166+{
5167+ try {
5168+ var bytes = _Crypto_fromHex(hex);
5169+ if (bytes.length !== 32) { return $elm$core$Maybe$Nothing; }
5170+ return $elm$core$Maybe$Just(hex);
5171+ } catch (e) {
5172+ return $elm$core$Maybe$Nothing;
5173+ }
5174+}
5175+
5176+function _Crypto_cipherKeyToHex(key)
5177+{
5178+ return key;
5179+}
5180+
5181+function _Crypto_cipherNonce12FromHex(hex)
5182+{
5183+ try {
5184+ var bytes = _Crypto_fromHex(hex);
5185+ if (bytes.length !== 12) { return $elm$core$Maybe$Nothing; }
5186+ return $elm$core$Maybe$Just(hex);
5187+ } catch (e) {
5188+ return $elm$core$Maybe$Nothing;
5189+ }
5190+}
5191+
5192+function _Crypto_cipherNonce12ToHex(nonce)
5193+{
5194+ return nonce;
5195+}
5196+
5197+function _Crypto_cipherNonce24FromHex(hex)
5198+{
5199+ try {
5200+ var bytes = _Crypto_fromHex(hex);
5201+ if (bytes.length !== 24) { return $elm$core$Maybe$Nothing; }
5202+ return $elm$core$Maybe$Just(hex);
5203+ } catch (e) {
5204+ return $elm$core$Maybe$Nothing;
5205+ }
5206+}
5207+
5208+function _Crypto_cipherNonce24ToHex(nonce)
5209+{
5210+ return nonce;
5211+}
5212+
5213+
5214+// AES-256-GCM
5215+
5216+var _Crypto_aesGcmEncrypt = F3(function(key, nonce, plaintext)
5217+{
5218+ var cipher = _Crypto_ciphers.gcm(_Crypto_fromHex(key), _Crypto_fromHex(nonce));
5219+ return _Crypto_toHex(cipher.encrypt(_Crypto_fromHex(plaintext)));
5220+});
5221+
5222+var _Crypto_aesGcmDecrypt = F3(function(key, nonce, ciphertext)
5223+{
5224+ try {
5225+ var cipher = _Crypto_ciphers.gcm(_Crypto_fromHex(key), _Crypto_fromHex(nonce));
5226+ return $elm$core$Maybe$Just(_Crypto_toHex(cipher.decrypt(_Crypto_fromHex(ciphertext))));
5227+ } catch (e) {
5228+ return $elm$core$Maybe$Nothing;
5229+ }
5230+});
5231+
5232+
5233+// CHACHA20-POLY1305
5234+
5235+var _Crypto_chacha20Encrypt = F3(function(key, nonce, plaintext)
5236+{
5237+ var cipher = _Crypto_ciphers.chacha20poly1305(_Crypto_fromHex(key), _Crypto_fromHex(nonce));
5238+ return _Crypto_toHex(cipher.encrypt(_Crypto_fromHex(plaintext)));
5239+});
5240+
5241+var _Crypto_chacha20Decrypt = F3(function(key, nonce, ciphertext)
5242+{
5243+ try {
5244+ var cipher = _Crypto_ciphers.chacha20poly1305(_Crypto_fromHex(key), _Crypto_fromHex(nonce));
5245+ return $elm$core$Maybe$Just(_Crypto_toHex(cipher.decrypt(_Crypto_fromHex(ciphertext))));
5246+ } catch (e) {
5247+ return $elm$core$Maybe$Nothing;
5248+ }
5249+});
5250+
5251+
5252+// XCHACHA20-POLY1305
5253+
5254+var _Crypto_xchacha20Encrypt = F3(function(key, nonce, plaintext)
5255+{
5256+ var cipher = _Crypto_ciphers.xchacha20poly1305(_Crypto_fromHex(key), _Crypto_fromHex(nonce));
5257+ return _Crypto_toHex(cipher.encrypt(_Crypto_fromHex(plaintext)));
5258+});
5259+
5260+var _Crypto_xchacha20Decrypt = F3(function(key, nonce, ciphertext)
5261+{
5262+ try {
5263+ var cipher = _Crypto_ciphers.xchacha20poly1305(_Crypto_fromHex(key), _Crypto_fromHex(nonce));
5264+ return $elm$core$Maybe$Just(_Crypto_toHex(cipher.decrypt(_Crypto_fromHex(ciphertext))));
5265+ } catch (e) {
5266+ return $elm$core$Maybe$Nothing;
5267+ }
5268+});
5269+function _Utils_cmp(x, y, ord) {if (typeof x !== 'object') {return x === y ? 0 : x < y ? -1 : 1; }if (x instanceof String) {var a = x.valueOf(); var b = y.valueOf();return a === b ? 0 : a < b ? -1 : 1; }if (typeof x.$ === 'undefined' || (typeof x.$ === 'string' && x.$[0] === '#')) {var keys = Object.keys(x).sort();for (var i = 0; i < keys.length; i++) {var k = keys[i];if (k === '$') continue;ord = _Utils_cmp(x[k], y[k]);if (ord) return ord; }return 0; }if (x.$ === '::' || x.$ === '[]') {for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {}return ord || (x.b ? 1 : y.b ? -1 : 0); }if (x.$ !== y.$) {return x.$ < y.$ ? -1 : 1; }var keys = Object.keys(x);for (var i = 0; i < keys.length; i++) {var k = keys[i];if (k === '$') continue;ord = _Utils_cmp(x[k], y[k]);if (ord) return ord; }return 0; }
5270+var $elm$core$List$cons = _List_cons;
5271+var $elm$core$Elm$JsArray$foldr = _JsArray_foldr;
5272+var $elm$core$Array$foldr = F3(
5273+ function (func, baseCase, _v0) {
5274+ var tree = _v0.c;
5275+ var tail = _v0.d;
5276+ var helper = F2(
5277+ function (node, acc) {
5278+ if (node.$ === 'SubTree') {
5279+ var subTree = node.a;
5280+ return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree);
5281+ } else {
5282+ var values = node.a;
5283+ return A3($elm$core$Elm$JsArray$foldr, func, acc, values);
5284+ }
5285+ });
5286+ return A3(
5287+ $elm$core$Elm$JsArray$foldr,
5288+ helper,
5289+ A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail),
5290+ tree);
5291+ });
5292+var $elm$core$Array$toList = function (array) {
5293+ return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array);
5294+};
5295+var $elm$core$Dict$foldr = F3(
5296+ function (func, acc, t) {
5297+ foldr:
5298+ while (true) {
5299+ if (t.$ === 'RBEmpty_elm_builtin') {
5300+ return acc;
5301+ } else {
5302+ var key = t.b;
5303+ var value = t.c;
5304+ var left = t.d;
5305+ var right = t.e;
5306+ var $temp$func = func,
5307+ $temp$acc = A3(
5308+ func,
5309+ key,
5310+ value,
5311+ A3($elm$core$Dict$foldr, func, acc, right)),
5312+ $temp$t = left;
5313+ func = $temp$func;
5314+ acc = $temp$acc;
5315+ t = $temp$t;
5316+ continue foldr;
5317+ }
5318+ }
5319+ });
5320+var $elm$core$Dict$toList = function (dict) {
5321+ return A3(
5322+ $elm$core$Dict$foldr,
5323+ F3(
5324+ function (key, value, list) {
5325+ return A2(
5326+ $elm$core$List$cons,
5327+ _Utils_Tuple2(key, value),
5328+ list);
5329+ }),
5330+ _List_Nil,
5331+ dict);
5332+};
5333+var $elm$core$Dict$keys = function (dict) {
5334+ return A3(
5335+ $elm$core$Dict$foldr,
5336+ F3(
5337+ function (key, value, keyList) {
5338+ return A2($elm$core$List$cons, key, keyList);
5339+ }),
5340+ _List_Nil,
5341+ dict);
5342+};
5343+var $elm$core$Set$toList = function (_v0) {
5344+ var dict = _v0.a;
5345+ return $elm$core$Dict$keys(dict);
5346+};
5347+var $elm$core$Basics$EQ = {$: 'EQ'};
5348+var $elm$core$Basics$GT = {$: 'GT'};
5349+var $elm$core$Basics$LT = {$: 'LT'};
5350+var $elm$core$Result$Err = function (a) {
5351+ return {$: 'Err', a: a};
5352+};
5353+var $elm$json$Json$Decode$Failure = F2(
5354+ function (a, b) {
5355+ return {$: 'Failure', a: a, b: b};
5356+ });
5357+var $elm$json$Json$Decode$Field = F2(
5358+ function (a, b) {
5359+ return {$: 'Field', a: a, b: b};
5360+ });
5361+var $elm$json$Json$Decode$Index = F2(
5362+ function (a, b) {
5363+ return {$: 'Index', a: a, b: b};
5364+ });
5365+var $elm$core$Result$Ok = function (a) {
5366+ return {$: 'Ok', a: a};
5367+};
5368+var $elm$json$Json$Decode$OneOf = function (a) {
5369+ return {$: 'OneOf', a: a};
5370+};
5371+var $elm$core$Basics$False = {$: 'False'};
5372+var $elm$core$Basics$add = _Basics_add;
5373+var $elm$core$Maybe$Just = function (a) {
5374+ return {$: 'Just', a: a};
5375+};
5376+var $elm$core$Maybe$Nothing = {$: 'Nothing'};
5377+var $elm$core$String$all = _String_all;
5378+var $elm$core$Basics$and = _Basics_and;
5379+var $elm$core$Basics$append = _Utils_append;
5380+var $elm$json$Json$Encode$encode = _Json_encode;
5381+var $elm$core$String$fromInt = _String_fromNumber;
5382+var $elm$core$String$join = F2(
5383+ function (sep, chunks) {
5384+ return A2(
5385+ _String_join,
5386+ sep,
5387+ _List_toArray(chunks));
5388+ });
5389+var $elm$core$String$split = F2(
5390+ function (sep, string) {
5391+ return _List_fromArray(
5392+ A2(_String_split, sep, string));
5393+ });
5394+var $elm$json$Json$Decode$indent = function (str) {
5395+ return A2(
5396+ $elm$core$String$join,
5397+ '\n ',
5398+ A2($elm$core$String$split, '\n', str));
5399+};
5400+var $elm$core$List$foldl = F3(
5401+ function (func, acc, list) {
5402+ foldl:
5403+ while (true) {
5404+ if (!list.b) {
5405+ return acc;
5406+ } else {
5407+ var x = list.a;
5408+ var xs = list.b;
5409+ var $temp$func = func,
5410+ $temp$acc = A2(func, x, acc),
5411+ $temp$list = xs;
5412+ func = $temp$func;
5413+ acc = $temp$acc;
5414+ list = $temp$list;
5415+ continue foldl;
5416+ }
5417+ }
5418+ });
5419+var $elm$core$List$length = function (xs) {
5420+ return A3(
5421+ $elm$core$List$foldl,
5422+ F2(
5423+ function (_v0, i) {
5424+ return i + 1;
5425+ }),
5426+ 0,
5427+ xs);
5428+};
5429+var $elm$core$List$map2 = _List_map2;
5430+var $elm$core$Basics$le = _Utils_le;
5431+var $elm$core$Basics$sub = _Basics_sub;
5432+var $elm$core$List$rangeHelp = F3(
5433+ function (lo, hi, list) {
5434+ rangeHelp:
5435+ while (true) {
5436+ if (_Utils_cmp(lo, hi) < 1) {
5437+ var $temp$lo = lo,
5438+ $temp$hi = hi - 1,
5439+ $temp$list = A2($elm$core$List$cons, hi, list);
5440+ lo = $temp$lo;
5441+ hi = $temp$hi;
5442+ list = $temp$list;
5443+ continue rangeHelp;
5444+ } else {
5445+ return list;
5446+ }
5447+ }
5448+ });
5449+var $elm$core$List$range = F2(
5450+ function (lo, hi) {
5451+ return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil);
5452+ });
5453+var $elm$core$List$indexedMap = F2(
5454+ function (f, xs) {
5455+ return A3(
5456+ $elm$core$List$map2,
5457+ f,
5458+ A2(
5459+ $elm$core$List$range,
5460+ 0,
5461+ $elm$core$List$length(xs) - 1),
5462+ xs);
5463+ });
5464+var $elm$core$Char$toCode = _Char_toCode;
5465+var $elm$core$Char$isLower = function (_char) {
5466+ var code = $elm$core$Char$toCode(_char);
5467+ return (97 <= code) && (code <= 122);
5468+};
5469+var $elm$core$Char$isUpper = function (_char) {
5470+ var code = $elm$core$Char$toCode(_char);
5471+ return (code <= 90) && (65 <= code);
5472+};
5473+var $elm$core$Basics$or = _Basics_or;
5474+var $elm$core$Char$isAlpha = function (_char) {
5475+ return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char);
5476+};
5477+var $elm$core$Char$isDigit = function (_char) {
5478+ var code = $elm$core$Char$toCode(_char);
5479+ return (code <= 57) && (48 <= code);
5480+};
5481+var $elm$core$Char$isAlphaNum = function (_char) {
5482+ return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char));
5483+};
5484+var $elm$core$List$reverse = function (list) {
5485+ return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list);
5486+};
5487+var $elm$core$String$uncons = _String_uncons;
5488+var $elm$json$Json$Decode$errorOneOf = F2(
5489+ function (i, error) {
5490+ return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent(
5491+ $elm$json$Json$Decode$errorToString(error))));
5492+ });
5493+var $elm$json$Json$Decode$errorToString = function (error) {
5494+ return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil);
5495+};
5496+var $elm$json$Json$Decode$errorToStringHelp = F2(
5497+ function (error, context) {
5498+ errorToStringHelp:
5499+ while (true) {
5500+ switch (error.$) {
5501+ case 'Field':
5502+ var f = error.a;
5503+ var err = error.b;
5504+ var isSimple = function () {
5505+ var _v1 = $elm$core$String$uncons(f);
5506+ if (_v1.$ === 'Nothing') {
5507+ return false;
5508+ } else {
5509+ var _v2 = _v1.a;
5510+ var _char = _v2.a;
5511+ var rest = _v2.b;
5512+ return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest);
5513+ }
5514+ }();
5515+ var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']'));
5516+ var $temp$error = err,
5517+ $temp$context = A2($elm$core$List$cons, fieldName, context);
5518+ error = $temp$error;
5519+ context = $temp$context;
5520+ continue errorToStringHelp;
5521+ case 'Index':
5522+ var i = error.a;
5523+ var err = error.b;
5524+ var indexName = '[' + ($elm$core$String$fromInt(i) + ']');
5525+ var $temp$error = err,
5526+ $temp$context = A2($elm$core$List$cons, indexName, context);
5527+ error = $temp$error;
5528+ context = $temp$context;
5529+ continue errorToStringHelp;
5530+ case 'OneOf':
5531+ var errors = error.a;
5532+ if (!errors.b) {
5533+ return 'Ran into a Json.Decode.oneOf with no possibilities' + function () {
5534+ if (!context.b) {
5535+ return '!';
5536+ } else {
5537+ return ' at json' + A2(
5538+ $elm$core$String$join,
5539+ '',
5540+ $elm$core$List$reverse(context));
5541+ }
5542+ }();
5543+ } else {
5544+ if (!errors.b.b) {
5545+ var err = errors.a;
5546+ var $temp$error = err,
5547+ $temp$context = context;
5548+ error = $temp$error;
5549+ context = $temp$context;
5550+ continue errorToStringHelp;
5551+ } else {
5552+ var starter = function () {
5553+ if (!context.b) {
5554+ return 'Json.Decode.oneOf';
5555+ } else {
5556+ return 'The Json.Decode.oneOf at json' + A2(
5557+ $elm$core$String$join,
5558+ '',
5559+ $elm$core$List$reverse(context));
5560+ }
5561+ }();
5562+ var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt(
5563+ $elm$core$List$length(errors)) + ' ways:'));
5564+ return A2(
5565+ $elm$core$String$join,
5566+ '\n\n',
5567+ A2(
5568+ $elm$core$List$cons,
5569+ introduction,
5570+ A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors)));
5571+ }
5572+ }
5573+ default:
5574+ var msg = error.a;
5575+ var json = error.b;
5576+ var introduction = function () {
5577+ if (!context.b) {
5578+ return 'Problem with the given value:\n\n';
5579+ } else {
5580+ return 'Problem with the value at json' + (A2(
5581+ $elm$core$String$join,
5582+ '',
5583+ $elm$core$List$reverse(context)) + ':\n\n ');
5584+ }
5585+ }();
5586+ return introduction + ($elm$json$Json$Decode$indent(
5587+ A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg));
5588+ }
5589+ }
5590+ });
5591+var $elm$core$Array$branchFactor = 32;
5592+var $elm$core$Array$Array_elm_builtin = F4(
5593+ function (a, b, c, d) {
5594+ return {$: 'Array_elm_builtin', a: a, b: b, c: c, d: d};
5595+ });
5596+var $elm$core$Elm$JsArray$empty = _JsArray_empty;
5597+var $elm$core$Basics$ceiling = _Basics_ceiling;
5598+var $elm$core$Basics$fdiv = _Basics_fdiv;
5599+var $elm$core$Basics$logBase = F2(
5600+ function (base, number) {
5601+ return _Basics_log(number) / _Basics_log(base);
5602+ });
5603+var $elm$core$Basics$toFloat = _Basics_toFloat;
5604+var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling(
5605+ A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor));
5606+var $elm$core$Array$empty = A4($elm$core$Array$Array_elm_builtin, 0, $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, $elm$core$Elm$JsArray$empty);
5607+var $elm$core$Elm$JsArray$initialize = _JsArray_initialize;
5608+var $elm$core$Array$Leaf = function (a) {
5609+ return {$: 'Leaf', a: a};
5610+};
5611+var $elm$core$Basics$apL = F2(
5612+ function (f, x) {
5613+ return f(x);
5614+ });
5615+var $elm$core$Basics$apR = F2(
5616+ function (x, f) {
5617+ return f(x);
5618+ });
5619+var $elm$core$Basics$eq = _Utils_equal;
5620+var $elm$core$Basics$floor = _Basics_floor;
5621+var $elm$core$Elm$JsArray$length = _JsArray_length;
5622+var $elm$core$Basics$gt = _Utils_gt;
5623+var $elm$core$Basics$max = F2(
5624+ function (x, y) {
5625+ return (_Utils_cmp(x, y) > 0) ? x : y;
5626+ });
5627+var $elm$core$Basics$mul = _Basics_mul;
5628+var $elm$core$Array$SubTree = function (a) {
5629+ return {$: 'SubTree', a: a};
5630+};
5631+var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList;
5632+var $elm$core$Array$compressNodes = F2(
5633+ function (nodes, acc) {
5634+ compressNodes:
5635+ while (true) {
5636+ var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes);
5637+ var node = _v0.a;
5638+ var remainingNodes = _v0.b;
5639+ var newAcc = A2(
5640+ $elm$core$List$cons,
5641+ $elm$core$Array$SubTree(node),
5642+ acc);
5643+ if (!remainingNodes.b) {
5644+ return $elm$core$List$reverse(newAcc);
5645+ } else {
5646+ var $temp$nodes = remainingNodes,
5647+ $temp$acc = newAcc;
5648+ nodes = $temp$nodes;
5649+ acc = $temp$acc;
5650+ continue compressNodes;
5651+ }
5652+ }
5653+ });
5654+var $elm$core$Tuple$first = function (_v0) {
5655+ var x = _v0.a;
5656+ return x;
5657+};
5658+var $elm$core$Array$treeFromBuilder = F2(
5659+ function (nodeList, nodeListSize) {
5660+ treeFromBuilder:
5661+ while (true) {
5662+ var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor);
5663+ if (newNodeSize === 1) {
5664+ return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a;
5665+ } else {
5666+ var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil),
5667+ $temp$nodeListSize = newNodeSize;
5668+ nodeList = $temp$nodeList;
5669+ nodeListSize = $temp$nodeListSize;
5670+ continue treeFromBuilder;
5671+ }
5672+ }
5673+ });
5674+var $elm$core$Array$builderToArray = F2(
5675+ function (reverseNodeList, builder) {
5676+ if (!builder.nodeListSize) {
5677+ return A4(
5678+ $elm$core$Array$Array_elm_builtin,
5679+ $elm$core$Elm$JsArray$length(builder.tail),
5680+ $elm$core$Array$shiftStep,
5681+ $elm$core$Elm$JsArray$empty,
5682+ builder.tail);
5683+ } else {
5684+ var treeLen = builder.nodeListSize * $elm$core$Array$branchFactor;
5685+ var depth = $elm$core$Basics$floor(
5686+ A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1));
5687+ var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.nodeList) : builder.nodeList;
5688+ var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.nodeListSize);
5689+ return A4(
5690+ $elm$core$Array$Array_elm_builtin,
5691+ $elm$core$Elm$JsArray$length(builder.tail) + treeLen,
5692+ A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep),
5693+ tree,
5694+ builder.tail);
5695+ }
5696+ });
5697+var $elm$core$Basics$idiv = _Basics_idiv;
5698+var $elm$core$Basics$lt = _Utils_lt;
5699+var $elm$core$Array$initializeHelp = F5(
5700+ function (fn, fromIndex, len, nodeList, tail) {
5701+ initializeHelp:
5702+ while (true) {
5703+ if (fromIndex < 0) {
5704+ return A2(
5705+ $elm$core$Array$builderToArray,
5706+ false,
5707+ {nodeList: nodeList, nodeListSize: (len / $elm$core$Array$branchFactor) | 0, tail: tail});
5708+ } else {
5709+ var leaf = $elm$core$Array$Leaf(
5710+ A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn));
5711+ var $temp$fn = fn,
5712+ $temp$fromIndex = fromIndex - $elm$core$Array$branchFactor,
5713+ $temp$len = len,
5714+ $temp$nodeList = A2($elm$core$List$cons, leaf, nodeList),
5715+ $temp$tail = tail;
5716+ fn = $temp$fn;
5717+ fromIndex = $temp$fromIndex;
5718+ len = $temp$len;
5719+ nodeList = $temp$nodeList;
5720+ tail = $temp$tail;
5721+ continue initializeHelp;
5722+ }
5723+ }
5724+ });
5725+var $elm$core$Basics$remainderBy = _Basics_remainderBy;
5726+var $elm$core$Array$initialize = F2(
5727+ function (len, fn) {
5728+ if (len <= 0) {
5729+ return $elm$core$Array$empty;
5730+ } else {
5731+ var tailLen = len % $elm$core$Array$branchFactor;
5732+ var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn);
5733+ var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor;
5734+ return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail);
5735+ }
5736+ });
5737+var $elm$core$Basics$True = {$: 'True'};
5738+var $elm$core$Result$isOk = function (result) {
5739+ if (result.$ === 'Ok') {
5740+ return true;
5741+ } else {
5742+ return false;
5743+ }
5744+};
5745+var $elm$json$Json$Decode$map = _Json_map1;
5746+var $elm$json$Json$Decode$map2 = _Json_map2;
5747+var $elm$json$Json$Decode$succeed = _Json_succeed;
5748+var $lynxjs_elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) {
5749+ switch (handler.$) {
5750+ case 'Normal':
5751+ return 0;
5752+ case 'MayStopPropagation':
5753+ return 1;
5754+ case 'MayPreventDefault':
5755+ return 2;
5756+ default:
5757+ return 3;
5758+ }
5759+};
5760+var $elm$core$Basics$identity = function (x) {
5761+ return x;
5762+};
5763+var $lynxjs_elm$browser$Browser$Dom$NotFound = function (a) {
5764+ return {$: 'NotFound', a: a};
5765+};
5766+var $elm$core$Basics$never = function (_v0) {
5767+ never:
5768+ while (true) {
5769+ var nvr = _v0.a;
5770+ var $temp$_v0 = nvr;
5771+ _v0 = $temp$_v0;
5772+ continue never;
5773+ }
5774+};
5775+var $elm$core$Task$Perform = function (a) {
5776+ return {$: 'Perform', a: a};
5777+};
5778+var $elm$core$Task$succeed = _Scheduler_succeed;
5779+var $elm$core$Task$init = $elm$core$Task$succeed(_Utils_Tuple0);
5780+var $elm$core$List$foldrHelper = F4(
5781+ function (fn, acc, ctr, ls) {
5782+ if (!ls.b) {
5783+ return acc;
5784+ } else {
5785+ var a = ls.a;
5786+ var r1 = ls.b;
5787+ if (!r1.b) {
5788+ return A2(fn, a, acc);
5789+ } else {
5790+ var b = r1.a;
5791+ var r2 = r1.b;
5792+ if (!r2.b) {
5793+ return A2(
5794+ fn,
5795+ a,
5796+ A2(fn, b, acc));
5797+ } else {
5798+ var c = r2.a;
5799+ var r3 = r2.b;
5800+ if (!r3.b) {
5801+ return A2(
5802+ fn,
5803+ a,
5804+ A2(
5805+ fn,
5806+ b,
5807+ A2(fn, c, acc)));
5808+ } else {
5809+ var d = r3.a;
5810+ var r4 = r3.b;
5811+ var res = (ctr > 500) ? A3(
5812+ $elm$core$List$foldl,
5813+ fn,
5814+ acc,
5815+ $elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4);
5816+ return A2(
5817+ fn,
5818+ a,
5819+ A2(
5820+ fn,
5821+ b,
5822+ A2(
5823+ fn,
5824+ c,
5825+ A2(fn, d, res))));
5826+ }
5827+ }
5828+ }
5829+ }
5830+ });
5831+var $elm$core$List$foldr = F3(
5832+ function (fn, acc, ls) {
5833+ return A4($elm$core$List$foldrHelper, fn, acc, 0, ls);
5834+ });
5835+var $elm$core$List$map = F2(
5836+ function (f, xs) {
5837+ return A3(
5838+ $elm$core$List$foldr,
5839+ F2(
5840+ function (x, acc) {
5841+ return A2(
5842+ $elm$core$List$cons,
5843+ f(x),
5844+ acc);
5845+ }),
5846+ _List_Nil,
5847+ xs);
5848+ });
5849+var $elm$core$Task$andThen = _Scheduler_andThen;
5850+var $elm$core$Task$map = F2(
5851+ function (func, taskA) {
5852+ return A2(
5853+ $elm$core$Task$andThen,
5854+ function (a) {
5855+ return $elm$core$Task$succeed(
5856+ func(a));
5857+ },
5858+ taskA);
5859+ });
5860+var $elm$core$Task$map2 = F3(
5861+ function (func, taskA, taskB) {
5862+ return A2(
5863+ $elm$core$Task$andThen,
5864+ function (a) {
5865+ return A2(
5866+ $elm$core$Task$andThen,
5867+ function (b) {
5868+ return $elm$core$Task$succeed(
5869+ A2(func, a, b));
5870+ },
5871+ taskB);
5872+ },
5873+ taskA);
5874+ });
5875+var $elm$core$Task$sequence = function (tasks) {
5876+ return A3(
5877+ $elm$core$List$foldr,
5878+ $elm$core$Task$map2($elm$core$List$cons),
5879+ $elm$core$Task$succeed(_List_Nil),
5880+ tasks);
5881+};
5882+var $elm$core$Platform$sendToApp = _Platform_sendToApp;
5883+var $elm$core$Task$spawnCmd = F2(
5884+ function (router, _v0) {
5885+ var task = _v0.a;
5886+ return _Scheduler_spawn(
5887+ A2(
5888+ $elm$core$Task$andThen,
5889+ $elm$core$Platform$sendToApp(router),
5890+ task));
5891+ });
5892+var $elm$core$Task$onEffects = F3(
5893+ function (router, commands, state) {
5894+ return A2(
5895+ $elm$core$Task$map,
5896+ function (_v0) {
5897+ return _Utils_Tuple0;
5898+ },
5899+ $elm$core$Task$sequence(
5900+ A2(
5901+ $elm$core$List$map,
5902+ $elm$core$Task$spawnCmd(router),
5903+ commands)));
5904+ });
5905+var $elm$core$Task$onSelfMsg = F3(
5906+ function (_v0, _v1, _v2) {
5907+ return $elm$core$Task$succeed(_Utils_Tuple0);
5908+ });
5909+var $elm$core$Task$cmdMap = F2(
5910+ function (tagger, _v0) {
5911+ var task = _v0.a;
5912+ return $elm$core$Task$Perform(
5913+ A2($elm$core$Task$map, tagger, task));
5914+ });
5915+_Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap);
5916+var $elm$core$Task$command = _Platform_leaf('Task');
5917+var $elm$core$Task$perform = F2(
5918+ function (toMessage, task) {
5919+ return $elm$core$Task$command(
5920+ $elm$core$Task$Perform(
5921+ A2($elm$core$Task$map, toMessage, task)));
5922+ });
5923+var $lynxjs_elm$browser$Browser$element = _Browser_element;
5924+var $author$project$Main$GotSeed = function (a) {
5925+ return {$: 'GotSeed', a: a};
5926+};
5927+var $author$project$Main$SetupScreen = {$: 'SetupScreen'};
5928+var $elm$core$Dict$RBEmpty_elm_builtin = {$: 'RBEmpty_elm_builtin'};
5929+var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin;
5930+var $elm$core$Set$Set_elm_builtin = function (a) {
5931+ return {$: 'Set_elm_builtin', a: a};
5932+};
5933+var $elm$core$Set$empty = $elm$core$Set$Set_elm_builtin($elm$core$Dict$empty);
5934+var $elm$random$Random$Generate = function (a) {
5935+ return {$: 'Generate', a: a};
5936+};
5937+var $elm$random$Random$Seed = F2(
5938+ function (a, b) {
5939+ return {$: 'Seed', a: a, b: b};
5940+ });
5941+var $elm$core$Bitwise$shiftRightZfBy = _Bitwise_shiftRightZfBy;
5942+var $elm$random$Random$next = function (_v0) {
5943+ var state0 = _v0.a;
5944+ var incr = _v0.b;
5945+ return A2($elm$random$Random$Seed, ((state0 * 1664525) + incr) >>> 0, incr);
5946+};
5947+var $elm$random$Random$initialSeed = function (x) {
5948+ var _v0 = $elm$random$Random$next(
5949+ A2($elm$random$Random$Seed, 0, 1013904223));
5950+ var state1 = _v0.a;
5951+ var incr = _v0.b;
5952+ var state2 = (state1 + x) >>> 0;
5953+ return $elm$random$Random$next(
5954+ A2($elm$random$Random$Seed, state2, incr));
5955+};
5956+var $elm$time$Time$Name = function (a) {
5957+ return {$: 'Name', a: a};
5958+};
5959+var $elm$time$Time$Offset = function (a) {
5960+ return {$: 'Offset', a: a};
5961+};
5962+var $elm$time$Time$Zone = F2(
5963+ function (a, b) {
5964+ return {$: 'Zone', a: a, b: b};
5965+ });
5966+var $elm$time$Time$customZone = $elm$time$Time$Zone;
5967+var $elm$time$Time$Posix = function (a) {
5968+ return {$: 'Posix', a: a};
5969+};
5970+var $elm$time$Time$millisToPosix = $elm$time$Time$Posix;
5971+var $elm$time$Time$now = _Time_now($elm$time$Time$millisToPosix);
5972+var $elm$time$Time$posixToMillis = function (_v0) {
5973+ var millis = _v0.a;
5974+ return millis;
5975+};
5976+var $elm$random$Random$init = A2(
5977+ $elm$core$Task$andThen,
5978+ function (time) {
5979+ return $elm$core$Task$succeed(
5980+ $elm$random$Random$initialSeed(
5981+ $elm$time$Time$posixToMillis(time)));
5982+ },
5983+ $elm$time$Time$now);
5984+var $elm$random$Random$step = F2(
5985+ function (_v0, seed) {
5986+ var generator = _v0.a;
5987+ return generator(seed);
5988+ });
5989+var $elm$random$Random$onEffects = F3(
5990+ function (router, commands, seed) {
5991+ if (!commands.b) {
5992+ return $elm$core$Task$succeed(seed);
5993+ } else {
5994+ var generator = commands.a.a;
5995+ var rest = commands.b;
5996+ var _v1 = A2($elm$random$Random$step, generator, seed);
5997+ var value = _v1.a;
5998+ var newSeed = _v1.b;
5999+ return A2(
6000+ $elm$core$Task$andThen,
6001+ function (_v2) {
6002+ return A3($elm$random$Random$onEffects, router, rest, newSeed);
6003+ },
6004+ A2($elm$core$Platform$sendToApp, router, value));
6005+ }
6006+ });
6007+var $elm$random$Random$onSelfMsg = F3(
6008+ function (_v0, _v1, seed) {
6009+ return $elm$core$Task$succeed(seed);
6010+ });
6011+var $elm$random$Random$Generator = function (a) {
6012+ return {$: 'Generator', a: a};
6013+};
6014+var $elm$random$Random$map = F2(
6015+ function (func, _v0) {
6016+ var genA = _v0.a;
6017+ return $elm$random$Random$Generator(
6018+ function (seed0) {
6019+ var _v1 = genA(seed0);
6020+ var a = _v1.a;
6021+ var seed1 = _v1.b;
6022+ return _Utils_Tuple2(
6023+ func(a),
6024+ seed1);
6025+ });
6026+ });
6027+var $elm$random$Random$cmdMap = F2(
6028+ function (func, _v0) {
6029+ var generator = _v0.a;
6030+ return $elm$random$Random$Generate(
6031+ A2($elm$random$Random$map, func, generator));
6032+ });
6033+_Platform_effectManagers['Random'] = _Platform_createManager($elm$random$Random$init, $elm$random$Random$onEffects, $elm$random$Random$onSelfMsg, $elm$random$Random$cmdMap);
6034+var $elm$random$Random$command = _Platform_leaf('Random');
6035+var $elm$random$Random$generate = F2(
6036+ function (tagger, generator) {
6037+ return $elm$random$Random$command(
6038+ $elm$random$Random$Generate(
6039+ A2($elm$random$Random$map, tagger, generator)));
6040+ });
6041+var $elm$core$String$fromList = _String_fromList;
6042+var $elm$random$Random$listHelp = F4(
6043+ function (revList, n, gen, seed) {
6044+ listHelp:
6045+ while (true) {
6046+ if (n < 1) {
6047+ return _Utils_Tuple2(revList, seed);
6048+ } else {
6049+ var _v0 = gen(seed);
6050+ var value = _v0.a;
6051+ var newSeed = _v0.b;
6052+ var $temp$revList = A2($elm$core$List$cons, value, revList),
6053+ $temp$n = n - 1,
6054+ $temp$gen = gen,
6055+ $temp$seed = newSeed;
6056+ revList = $temp$revList;
6057+ n = $temp$n;
6058+ gen = $temp$gen;
6059+ seed = $temp$seed;
6060+ continue listHelp;
6061+ }
6062+ }
6063+ });
6064+var $elm$random$Random$list = F2(
6065+ function (n, _v0) {
6066+ var gen = _v0.a;
6067+ return $elm$random$Random$Generator(
6068+ function (seed) {
6069+ return A4($elm$random$Random$listHelp, _List_Nil, n, gen, seed);
6070+ });
6071+ });
6072+var $elm$core$Char$fromCode = _Char_fromCode;
6073+var $elm$core$Bitwise$and = _Bitwise_and;
6074+var $elm$core$Basics$negate = function (n) {
6075+ return -n;
6076+};
6077+var $elm$core$Bitwise$xor = _Bitwise_xor;
6078+var $elm$random$Random$peel = function (_v0) {
6079+ var state = _v0.a;
6080+ var word = (state ^ (state >>> ((state >>> 28) + 4))) * 277803737;
6081+ return ((word >>> 22) ^ word) >>> 0;
6082+};
6083+var $elm$random$Random$int = F2(
6084+ function (a, b) {
6085+ return $elm$random$Random$Generator(
6086+ function (seed0) {
6087+ var _v0 = (_Utils_cmp(a, b) < 0) ? _Utils_Tuple2(a, b) : _Utils_Tuple2(b, a);
6088+ var lo = _v0.a;
6089+ var hi = _v0.b;
6090+ var range = (hi - lo) + 1;
6091+ if (!((range - 1) & range)) {
6092+ return _Utils_Tuple2(
6093+ (((range - 1) & $elm$random$Random$peel(seed0)) >>> 0) + lo,
6094+ $elm$random$Random$next(seed0));
6095+ } else {
6096+ var threshhold = (((-range) >>> 0) % range) >>> 0;
6097+ var accountForBias = function (seed) {
6098+ accountForBias:
6099+ while (true) {
6100+ var x = $elm$random$Random$peel(seed);
6101+ var seedN = $elm$random$Random$next(seed);
6102+ if (_Utils_cmp(x, threshhold) < 0) {
6103+ var $temp$seed = seedN;
6104+ seed = $temp$seed;
6105+ continue accountForBias;
6106+ } else {
6107+ return _Utils_Tuple2((x % range) + lo, seedN);
6108+ }
6109+ }
6110+ };
6111+ return accountForBias(seed0);
6112+ }
6113+ });
6114+ });
6115+var $author$project$Main$randomHexChar = A2(
6116+ $elm$random$Random$map,
6117+ function (n) {
6118+ return (n < 10) ? $elm$core$Char$fromCode(n + 48) : $elm$core$Char$fromCode((n - 10) + 97);
6119+ },
6120+ A2($elm$random$Random$int, 0, 15));
6121+var $author$project$Main$randomHexString = function (byteCount) {
6122+ return A2(
6123+ $elm$random$Random$map,
6124+ $elm$core$String$fromList,
6125+ A2($elm$random$Random$list, byteCount * 2, $author$project$Main$randomHexChar));
6126+};
6127+var $author$project$Main$init = function (_v0) {
6128+ return _Utils_Tuple2(
6129+ {activeChat: '', addIdentity: '', addName: '', authToken: '', connecting: false, contacts: $elm$core$Dict$empty, currentTime: 0, displayName: '', draft: '', edPriv: $elm$core$Maybe$Nothing, edPub: $elm$core$Maybe$Nothing, error: $elm$core$Maybe$Nothing, messages: $elm$core$Dict$empty, screen: $author$project$Main$SetupScreen, seenIds: $elm$core$Set$empty, sending: false, serverUrl: 'http://localhost:8080', xPriv: $elm$core$Maybe$Nothing, xPub: $elm$core$Maybe$Nothing},
6130+ A2(
6131+ $elm$random$Random$generate,
6132+ $author$project$Main$GotSeed,
6133+ $author$project$Main$randomHexString(32)));
6134+};
6135+var $author$project$Main$GotTime = function (a) {
6136+ return {$: 'GotTime', a: a};
6137+};
6138+var $author$project$Main$PollTick = function (a) {
6139+ return {$: 'PollTick', a: a};
6140+};
6141+var $elm$core$Platform$Sub$batch = _Platform_batch;
6142+var $elm$time$Time$Every = F2(
6143+ function (a, b) {
6144+ return {$: 'Every', a: a, b: b};
6145+ });
6146+var $elm$time$Time$State = F2(
6147+ function (taggers, processes) {
6148+ return {processes: processes, taggers: taggers};
6149+ });
6150+var $elm$time$Time$init = $elm$core$Task$succeed(
6151+ A2($elm$time$Time$State, $elm$core$Dict$empty, $elm$core$Dict$empty));
6152+var $elm$core$Basics$compare = _Utils_compare;
6153+var $elm$core$Dict$get = F2(
6154+ function (targetKey, dict) {
6155+ get:
6156+ while (true) {
6157+ if (dict.$ === 'RBEmpty_elm_builtin') {
6158+ return $elm$core$Maybe$Nothing;
6159+ } else {
6160+ var key = dict.b;
6161+ var value = dict.c;
6162+ var left = dict.d;
6163+ var right = dict.e;
6164+ var _v1 = A2($elm$core$Basics$compare, targetKey, key);
6165+ switch (_v1.$) {
6166+ case 'LT':
6167+ var $temp$targetKey = targetKey,
6168+ $temp$dict = left;
6169+ targetKey = $temp$targetKey;
6170+ dict = $temp$dict;
6171+ continue get;
6172+ case 'EQ':
6173+ return $elm$core$Maybe$Just(value);
6174+ default:
6175+ var $temp$targetKey = targetKey,
6176+ $temp$dict = right;
6177+ targetKey = $temp$targetKey;
6178+ dict = $temp$dict;
6179+ continue get;
6180+ }
6181+ }
6182+ }
6183+ });
6184+var $elm$core$Dict$Black = {$: 'Black'};
6185+var $elm$core$Dict$RBNode_elm_builtin = F5(
6186+ function (a, b, c, d, e) {
6187+ return {$: 'RBNode_elm_builtin', a: a, b: b, c: c, d: d, e: e};
6188+ });
6189+var $elm$core$Dict$Red = {$: 'Red'};
6190+var $elm$core$Dict$balance = F5(
6191+ function (color, key, value, left, right) {
6192+ if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Red')) {
6193+ var _v1 = right.a;
6194+ var rK = right.b;
6195+ var rV = right.c;
6196+ var rLeft = right.d;
6197+ var rRight = right.e;
6198+ if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
6199+ var _v3 = left.a;
6200+ var lK = left.b;
6201+ var lV = left.c;
6202+ var lLeft = left.d;
6203+ var lRight = left.e;
6204+ return A5(
6205+ $elm$core$Dict$RBNode_elm_builtin,
6206+ $elm$core$Dict$Red,
6207+ key,
6208+ value,
6209+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, lK, lV, lLeft, lRight),
6210+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rLeft, rRight));
6211+ } else {
6212+ return A5(
6213+ $elm$core$Dict$RBNode_elm_builtin,
6214+ color,
6215+ rK,
6216+ rV,
6217+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, left, rLeft),
6218+ rRight);
6219+ }
6220+ } else {
6221+ if ((((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) && (left.d.$ === 'RBNode_elm_builtin')) && (left.d.a.$ === 'Red')) {
6222+ var _v5 = left.a;
6223+ var lK = left.b;
6224+ var lV = left.c;
6225+ var _v6 = left.d;
6226+ var _v7 = _v6.a;
6227+ var llK = _v6.b;
6228+ var llV = _v6.c;
6229+ var llLeft = _v6.d;
6230+ var llRight = _v6.e;
6231+ var lRight = left.e;
6232+ return A5(
6233+ $elm$core$Dict$RBNode_elm_builtin,
6234+ $elm$core$Dict$Red,
6235+ lK,
6236+ lV,
6237+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
6238+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, lRight, right));
6239+ } else {
6240+ return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right);
6241+ }
6242+ }
6243+ });
6244+var $elm$core$Dict$insertHelp = F3(
6245+ function (key, value, dict) {
6246+ if (dict.$ === 'RBEmpty_elm_builtin') {
6247+ return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, $elm$core$Dict$RBEmpty_elm_builtin, $elm$core$Dict$RBEmpty_elm_builtin);
6248+ } else {
6249+ var nColor = dict.a;
6250+ var nKey = dict.b;
6251+ var nValue = dict.c;
6252+ var nLeft = dict.d;
6253+ var nRight = dict.e;
6254+ var _v1 = A2($elm$core$Basics$compare, key, nKey);
6255+ switch (_v1.$) {
6256+ case 'LT':
6257+ return A5(
6258+ $elm$core$Dict$balance,
6259+ nColor,
6260+ nKey,
6261+ nValue,
6262+ A3($elm$core$Dict$insertHelp, key, value, nLeft),
6263+ nRight);
6264+ case 'EQ':
6265+ return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight);
6266+ default:
6267+ return A5(
6268+ $elm$core$Dict$balance,
6269+ nColor,
6270+ nKey,
6271+ nValue,
6272+ nLeft,
6273+ A3($elm$core$Dict$insertHelp, key, value, nRight));
6274+ }
6275+ }
6276+ });
6277+var $elm$core$Dict$insert = F3(
6278+ function (key, value, dict) {
6279+ var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict);
6280+ if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
6281+ var _v1 = _v0.a;
6282+ var k = _v0.b;
6283+ var v = _v0.c;
6284+ var l = _v0.d;
6285+ var r = _v0.e;
6286+ return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
6287+ } else {
6288+ var x = _v0;
6289+ return x;
6290+ }
6291+ });
6292+var $elm$time$Time$addMySub = F2(
6293+ function (_v0, state) {
6294+ var interval = _v0.a;
6295+ var tagger = _v0.b;
6296+ var _v1 = A2($elm$core$Dict$get, interval, state);
6297+ if (_v1.$ === 'Nothing') {
6298+ return A3(
6299+ $elm$core$Dict$insert,
6300+ interval,
6301+ _List_fromArray(
6302+ [tagger]),
6303+ state);
6304+ } else {
6305+ var taggers = _v1.a;
6306+ return A3(
6307+ $elm$core$Dict$insert,
6308+ interval,
6309+ A2($elm$core$List$cons, tagger, taggers),
6310+ state);
6311+ }
6312+ });
6313+var $elm$core$Process$kill = _Scheduler_kill;
6314+var $elm$core$Dict$foldl = F3(
6315+ function (func, acc, dict) {
6316+ foldl:
6317+ while (true) {
6318+ if (dict.$ === 'RBEmpty_elm_builtin') {
6319+ return acc;
6320+ } else {
6321+ var key = dict.b;
6322+ var value = dict.c;
6323+ var left = dict.d;
6324+ var right = dict.e;
6325+ var $temp$func = func,
6326+ $temp$acc = A3(
6327+ func,
6328+ key,
6329+ value,
6330+ A3($elm$core$Dict$foldl, func, acc, left)),
6331+ $temp$dict = right;
6332+ func = $temp$func;
6333+ acc = $temp$acc;
6334+ dict = $temp$dict;
6335+ continue foldl;
6336+ }
6337+ }
6338+ });
6339+var $elm$core$Dict$merge = F6(
6340+ function (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) {
6341+ var stepState = F3(
6342+ function (rKey, rValue, _v0) {
6343+ stepState:
6344+ while (true) {
6345+ var list = _v0.a;
6346+ var result = _v0.b;
6347+ if (!list.b) {
6348+ return _Utils_Tuple2(
6349+ list,
6350+ A3(rightStep, rKey, rValue, result));
6351+ } else {
6352+ var _v2 = list.a;
6353+ var lKey = _v2.a;
6354+ var lValue = _v2.b;
6355+ var rest = list.b;
6356+ if (_Utils_cmp(lKey, rKey) < 0) {
6357+ var $temp$rKey = rKey,
6358+ $temp$rValue = rValue,
6359+ $temp$_v0 = _Utils_Tuple2(
6360+ rest,
6361+ A3(leftStep, lKey, lValue, result));
6362+ rKey = $temp$rKey;
6363+ rValue = $temp$rValue;
6364+ _v0 = $temp$_v0;
6365+ continue stepState;
6366+ } else {
6367+ if (_Utils_cmp(lKey, rKey) > 0) {
6368+ return _Utils_Tuple2(
6369+ list,
6370+ A3(rightStep, rKey, rValue, result));
6371+ } else {
6372+ return _Utils_Tuple2(
6373+ rest,
6374+ A4(bothStep, lKey, lValue, rValue, result));
6375+ }
6376+ }
6377+ }
6378+ }
6379+ });
6380+ var _v3 = A3(
6381+ $elm$core$Dict$foldl,
6382+ stepState,
6383+ _Utils_Tuple2(
6384+ $elm$core$Dict$toList(leftDict),
6385+ initialResult),
6386+ rightDict);
6387+ var leftovers = _v3.a;
6388+ var intermediateResult = _v3.b;
6389+ return A3(
6390+ $elm$core$List$foldl,
6391+ F2(
6392+ function (_v4, result) {
6393+ var k = _v4.a;
6394+ var v = _v4.b;
6395+ return A3(leftStep, k, v, result);
6396+ }),
6397+ intermediateResult,
6398+ leftovers);
6399+ });
6400+var $elm$core$Platform$sendToSelf = _Platform_sendToSelf;
6401+var $elm$time$Time$setInterval = _Time_setInterval;
6402+var $elm$core$Process$spawn = _Scheduler_spawn;
6403+var $elm$time$Time$spawnHelp = F3(
6404+ function (router, intervals, processes) {
6405+ if (!intervals.b) {
6406+ return $elm$core$Task$succeed(processes);
6407+ } else {
6408+ var interval = intervals.a;
6409+ var rest = intervals.b;
6410+ var spawnTimer = $elm$core$Process$spawn(
6411+ A2(
6412+ $elm$time$Time$setInterval,
6413+ interval,
6414+ A2($elm$core$Platform$sendToSelf, router, interval)));
6415+ var spawnRest = function (id) {
6416+ return A3(
6417+ $elm$time$Time$spawnHelp,
6418+ router,
6419+ rest,
6420+ A3($elm$core$Dict$insert, interval, id, processes));
6421+ };
6422+ return A2($elm$core$Task$andThen, spawnRest, spawnTimer);
6423+ }
6424+ });
6425+var $elm$time$Time$onEffects = F3(
6426+ function (router, subs, _v0) {
6427+ var processes = _v0.processes;
6428+ var rightStep = F3(
6429+ function (_v6, id, _v7) {
6430+ var spawns = _v7.a;
6431+ var existing = _v7.b;
6432+ var kills = _v7.c;
6433+ return _Utils_Tuple3(
6434+ spawns,
6435+ existing,
6436+ A2(
6437+ $elm$core$Task$andThen,
6438+ function (_v5) {
6439+ return kills;
6440+ },
6441+ $elm$core$Process$kill(id)));
6442+ });
6443+ var newTaggers = A3($elm$core$List$foldl, $elm$time$Time$addMySub, $elm$core$Dict$empty, subs);
6444+ var leftStep = F3(
6445+ function (interval, taggers, _v4) {
6446+ var spawns = _v4.a;
6447+ var existing = _v4.b;
6448+ var kills = _v4.c;
6449+ return _Utils_Tuple3(
6450+ A2($elm$core$List$cons, interval, spawns),
6451+ existing,
6452+ kills);
6453+ });
6454+ var bothStep = F4(
6455+ function (interval, taggers, id, _v3) {
6456+ var spawns = _v3.a;
6457+ var existing = _v3.b;
6458+ var kills = _v3.c;
6459+ return _Utils_Tuple3(
6460+ spawns,
6461+ A3($elm$core$Dict$insert, interval, id, existing),
6462+ kills);
6463+ });
6464+ var _v1 = A6(
6465+ $elm$core$Dict$merge,
6466+ leftStep,
6467+ bothStep,
6468+ rightStep,
6469+ newTaggers,
6470+ processes,
6471+ _Utils_Tuple3(
6472+ _List_Nil,
6473+ $elm$core$Dict$empty,
6474+ $elm$core$Task$succeed(_Utils_Tuple0)));
6475+ var spawnList = _v1.a;
6476+ var existingDict = _v1.b;
6477+ var killTask = _v1.c;
6478+ return A2(
6479+ $elm$core$Task$andThen,
6480+ function (newProcesses) {
6481+ return $elm$core$Task$succeed(
6482+ A2($elm$time$Time$State, newTaggers, newProcesses));
6483+ },
6484+ A2(
6485+ $elm$core$Task$andThen,
6486+ function (_v2) {
6487+ return A3($elm$time$Time$spawnHelp, router, spawnList, existingDict);
6488+ },
6489+ killTask));
6490+ });
6491+var $elm$time$Time$onSelfMsg = F3(
6492+ function (router, interval, state) {
6493+ var _v0 = A2($elm$core$Dict$get, interval, state.taggers);
6494+ if (_v0.$ === 'Nothing') {
6495+ return $elm$core$Task$succeed(state);
6496+ } else {
6497+ var taggers = _v0.a;
6498+ var tellTaggers = function (time) {
6499+ return $elm$core$Task$sequence(
6500+ A2(
6501+ $elm$core$List$map,
6502+ function (tagger) {
6503+ return A2(
6504+ $elm$core$Platform$sendToApp,
6505+ router,
6506+ tagger(time));
6507+ },
6508+ taggers));
6509+ };
6510+ return A2(
6511+ $elm$core$Task$andThen,
6512+ function (_v1) {
6513+ return $elm$core$Task$succeed(state);
6514+ },
6515+ A2($elm$core$Task$andThen, tellTaggers, $elm$time$Time$now));
6516+ }
6517+ });
6518+var $elm$core$Basics$composeL = F3(
6519+ function (g, f, x) {
6520+ return g(
6521+ f(x));
6522+ });
6523+var $elm$time$Time$subMap = F2(
6524+ function (f, _v0) {
6525+ var interval = _v0.a;
6526+ var tagger = _v0.b;
6527+ return A2(
6528+ $elm$time$Time$Every,
6529+ interval,
6530+ A2($elm$core$Basics$composeL, f, tagger));
6531+ });
6532+_Platform_effectManagers['Time'] = _Platform_createManager($elm$time$Time$init, $elm$time$Time$onEffects, $elm$time$Time$onSelfMsg, 0, $elm$time$Time$subMap);
6533+var $elm$time$Time$subscription = _Platform_leaf('Time');
6534+var $elm$time$Time$every = F2(
6535+ function (interval, tagger) {
6536+ return $elm$time$Time$subscription(
6537+ A2($elm$time$Time$Every, interval, tagger));
6538+ });
6539+var $elm$core$Basics$neq = _Utils_notEqual;
6540+var $elm$core$Platform$Sub$none = $elm$core$Platform$Sub$batch(_List_Nil);
6541+var $author$project$Main$subscriptions = function (model) {
6542+ return $elm$core$Platform$Sub$batch(
6543+ _List_fromArray(
6544+ [
6545+ (model.authToken !== '') ? A2($elm$time$Time$every, 3000, $author$project$Main$PollTick) : $elm$core$Platform$Sub$none,
6546+ A2($elm$time$Time$every, 60000, $author$project$Main$GotTime)
6547+ ]));
6548+};
6549+var $author$project$Main$ChatScreen = {$: 'ChatScreen'};
6550+var $author$project$Main$ContactsScreen = {$: 'ContactsScreen'};
6551+var $author$project$Main$GotSendEntropy = function (a) {
6552+ return {$: 'GotSendEntropy', a: a};
6553+};
6554+var $author$project$Main$GotAck = function (a) {
6555+ return {$: 'GotAck', a: a};
6556+};
6557+var $elm$json$Json$Decode$bool = _Json_decodeBool;
6558+var $elm$json$Json$Decode$decodeString = _Json_runOnString;
6559+var $elm$bytes$Bytes$Encode$getWidth = function (builder) {
6560+ switch (builder.$) {
6561+ case 'I8':
6562+ return 1;
6563+ case 'I16':
6564+ return 2;
6565+ case 'I32':
6566+ return 4;
6567+ case 'U8':
6568+ return 1;
6569+ case 'U16':
6570+ return 2;
6571+ case 'U32':
6572+ return 4;
6573+ case 'F32':
6574+ return 4;
6575+ case 'F64':
6576+ return 8;
6577+ case 'Seq':
6578+ var w = builder.a;
6579+ return w;
6580+ case 'Utf8':
6581+ var w = builder.a;
6582+ return w;
6583+ default:
6584+ var bs = builder.a;
6585+ return _Bytes_width(bs);
6586+ }
6587+};
6588+var $elm$bytes$Bytes$LE = {$: 'LE'};
6589+var $elm$bytes$Bytes$Encode$write = F3(
6590+ function (builder, mb, offset) {
6591+ switch (builder.$) {
6592+ case 'I8':
6593+ var n = builder.a;
6594+ return A3(_Bytes_write_i8, mb, offset, n);
6595+ case 'I16':
6596+ var e = builder.a;
6597+ var n = builder.b;
6598+ return A4(
6599+ _Bytes_write_i16,
6600+ mb,
6601+ offset,
6602+ n,
6603+ _Utils_eq(e, $elm$bytes$Bytes$LE));
6604+ case 'I32':
6605+ var e = builder.a;
6606+ var n = builder.b;
6607+ return A4(
6608+ _Bytes_write_i32,
6609+ mb,
6610+ offset,
6611+ n,
6612+ _Utils_eq(e, $elm$bytes$Bytes$LE));
6613+ case 'U8':
6614+ var n = builder.a;
6615+ return A3(_Bytes_write_u8, mb, offset, n);
6616+ case 'U16':
6617+ var e = builder.a;
6618+ var n = builder.b;
6619+ return A4(
6620+ _Bytes_write_u16,
6621+ mb,
6622+ offset,
6623+ n,
6624+ _Utils_eq(e, $elm$bytes$Bytes$LE));
6625+ case 'U32':
6626+ var e = builder.a;
6627+ var n = builder.b;
6628+ return A4(
6629+ _Bytes_write_u32,
6630+ mb,
6631+ offset,
6632+ n,
6633+ _Utils_eq(e, $elm$bytes$Bytes$LE));
6634+ case 'F32':
6635+ var e = builder.a;
6636+ var n = builder.b;
6637+ return A4(
6638+ _Bytes_write_f32,
6639+ mb,
6640+ offset,
6641+ n,
6642+ _Utils_eq(e, $elm$bytes$Bytes$LE));
6643+ case 'F64':
6644+ var e = builder.a;
6645+ var n = builder.b;
6646+ return A4(
6647+ _Bytes_write_f64,
6648+ mb,
6649+ offset,
6650+ n,
6651+ _Utils_eq(e, $elm$bytes$Bytes$LE));
6652+ case 'Seq':
6653+ var bs = builder.b;
6654+ return A3($elm$bytes$Bytes$Encode$writeSequence, bs, mb, offset);
6655+ case 'Utf8':
6656+ var s = builder.b;
6657+ return A3(_Bytes_write_string, mb, offset, s);
6658+ default:
6659+ var bs = builder.a;
6660+ return A3(_Bytes_write_bytes, mb, offset, bs);
6661+ }
6662+ });
6663+var $elm$bytes$Bytes$Encode$writeSequence = F3(
6664+ function (builders, mb, offset) {
6665+ writeSequence:
6666+ while (true) {
6667+ if (!builders.b) {
6668+ return offset;
6669+ } else {
6670+ var b = builders.a;
6671+ var bs = builders.b;
6672+ var $temp$builders = bs,
6673+ $temp$mb = mb,
6674+ $temp$offset = A3($elm$bytes$Bytes$Encode$write, b, mb, offset);
6675+ builders = $temp$builders;
6676+ mb = $temp$mb;
6677+ offset = $temp$offset;
6678+ continue writeSequence;
6679+ }
6680+ }
6681+ });
6682+var $lynxjs_elm$http$Http$BadStatus_ = F2(
6683+ function (a, b) {
6684+ return {$: 'BadStatus_', a: a, b: b};
6685+ });
6686+var $lynxjs_elm$http$Http$BadUrl_ = function (a) {
6687+ return {$: 'BadUrl_', a: a};
6688+};
6689+var $lynxjs_elm$http$Http$GoodStatus_ = F2(
6690+ function (a, b) {
6691+ return {$: 'GoodStatus_', a: a, b: b};
6692+ });
6693+var $lynxjs_elm$http$Http$NetworkError_ = {$: 'NetworkError_'};
6694+var $lynxjs_elm$http$Http$Timeout_ = {$: 'Timeout_'};
6695+var $elm$core$Maybe$isJust = function (maybe) {
6696+ if (maybe.$ === 'Just') {
6697+ return true;
6698+ } else {
6699+ return false;
6700+ }
6701+};
6702+var $elm$core$Dict$getMin = function (dict) {
6703+ getMin:
6704+ while (true) {
6705+ if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
6706+ var left = dict.d;
6707+ var $temp$dict = left;
6708+ dict = $temp$dict;
6709+ continue getMin;
6710+ } else {
6711+ return dict;
6712+ }
6713+ }
6714+};
6715+var $elm$core$Dict$moveRedLeft = function (dict) {
6716+ if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
6717+ if ((dict.e.d.$ === 'RBNode_elm_builtin') && (dict.e.d.a.$ === 'Red')) {
6718+ var clr = dict.a;
6719+ var k = dict.b;
6720+ var v = dict.c;
6721+ var _v1 = dict.d;
6722+ var lClr = _v1.a;
6723+ var lK = _v1.b;
6724+ var lV = _v1.c;
6725+ var lLeft = _v1.d;
6726+ var lRight = _v1.e;
6727+ var _v2 = dict.e;
6728+ var rClr = _v2.a;
6729+ var rK = _v2.b;
6730+ var rV = _v2.c;
6731+ var rLeft = _v2.d;
6732+ var _v3 = rLeft.a;
6733+ var rlK = rLeft.b;
6734+ var rlV = rLeft.c;
6735+ var rlL = rLeft.d;
6736+ var rlR = rLeft.e;
6737+ var rRight = _v2.e;
6738+ return A5(
6739+ $elm$core$Dict$RBNode_elm_builtin,
6740+ $elm$core$Dict$Red,
6741+ rlK,
6742+ rlV,
6743+ A5(
6744+ $elm$core$Dict$RBNode_elm_builtin,
6745+ $elm$core$Dict$Black,
6746+ k,
6747+ v,
6748+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
6749+ rlL),
6750+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rlR, rRight));
6751+ } else {
6752+ var clr = dict.a;
6753+ var k = dict.b;
6754+ var v = dict.c;
6755+ var _v4 = dict.d;
6756+ var lClr = _v4.a;
6757+ var lK = _v4.b;
6758+ var lV = _v4.c;
6759+ var lLeft = _v4.d;
6760+ var lRight = _v4.e;
6761+ var _v5 = dict.e;
6762+ var rClr = _v5.a;
6763+ var rK = _v5.b;
6764+ var rV = _v5.c;
6765+ var rLeft = _v5.d;
6766+ var rRight = _v5.e;
6767+ if (clr.$ === 'Black') {
6768+ return A5(
6769+ $elm$core$Dict$RBNode_elm_builtin,
6770+ $elm$core$Dict$Black,
6771+ k,
6772+ v,
6773+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
6774+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
6775+ } else {
6776+ return A5(
6777+ $elm$core$Dict$RBNode_elm_builtin,
6778+ $elm$core$Dict$Black,
6779+ k,
6780+ v,
6781+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
6782+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
6783+ }
6784+ }
6785+ } else {
6786+ return dict;
6787+ }
6788+};
6789+var $elm$core$Dict$moveRedRight = function (dict) {
6790+ if (((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) && (dict.e.$ === 'RBNode_elm_builtin')) {
6791+ if ((dict.d.d.$ === 'RBNode_elm_builtin') && (dict.d.d.a.$ === 'Red')) {
6792+ var clr = dict.a;
6793+ var k = dict.b;
6794+ var v = dict.c;
6795+ var _v1 = dict.d;
6796+ var lClr = _v1.a;
6797+ var lK = _v1.b;
6798+ var lV = _v1.c;
6799+ var _v2 = _v1.d;
6800+ var _v3 = _v2.a;
6801+ var llK = _v2.b;
6802+ var llV = _v2.c;
6803+ var llLeft = _v2.d;
6804+ var llRight = _v2.e;
6805+ var lRight = _v1.e;
6806+ var _v4 = dict.e;
6807+ var rClr = _v4.a;
6808+ var rK = _v4.b;
6809+ var rV = _v4.c;
6810+ var rLeft = _v4.d;
6811+ var rRight = _v4.e;
6812+ return A5(
6813+ $elm$core$Dict$RBNode_elm_builtin,
6814+ $elm$core$Dict$Red,
6815+ lK,
6816+ lV,
6817+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight),
6818+ A5(
6819+ $elm$core$Dict$RBNode_elm_builtin,
6820+ $elm$core$Dict$Black,
6821+ k,
6822+ v,
6823+ lRight,
6824+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight)));
6825+ } else {
6826+ var clr = dict.a;
6827+ var k = dict.b;
6828+ var v = dict.c;
6829+ var _v5 = dict.d;
6830+ var lClr = _v5.a;
6831+ var lK = _v5.b;
6832+ var lV = _v5.c;
6833+ var lLeft = _v5.d;
6834+ var lRight = _v5.e;
6835+ var _v6 = dict.e;
6836+ var rClr = _v6.a;
6837+ var rK = _v6.b;
6838+ var rV = _v6.c;
6839+ var rLeft = _v6.d;
6840+ var rRight = _v6.e;
6841+ if (clr.$ === 'Black') {
6842+ return A5(
6843+ $elm$core$Dict$RBNode_elm_builtin,
6844+ $elm$core$Dict$Black,
6845+ k,
6846+ v,
6847+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
6848+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
6849+ } else {
6850+ return A5(
6851+ $elm$core$Dict$RBNode_elm_builtin,
6852+ $elm$core$Dict$Black,
6853+ k,
6854+ v,
6855+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, lK, lV, lLeft, lRight),
6856+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, rK, rV, rLeft, rRight));
6857+ }
6858+ }
6859+ } else {
6860+ return dict;
6861+ }
6862+};
6863+var $elm$core$Dict$removeHelpPrepEQGT = F7(
6864+ function (targetKey, dict, color, key, value, left, right) {
6865+ if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) {
6866+ var _v1 = left.a;
6867+ var lK = left.b;
6868+ var lV = left.c;
6869+ var lLeft = left.d;
6870+ var lRight = left.e;
6871+ return A5(
6872+ $elm$core$Dict$RBNode_elm_builtin,
6873+ color,
6874+ lK,
6875+ lV,
6876+ lLeft,
6877+ A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, lRight, right));
6878+ } else {
6879+ _v2$2:
6880+ while (true) {
6881+ if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Black')) {
6882+ if (right.d.$ === 'RBNode_elm_builtin') {
6883+ if (right.d.a.$ === 'Black') {
6884+ var _v3 = right.a;
6885+ var _v4 = right.d;
6886+ var _v5 = _v4.a;
6887+ return $elm$core$Dict$moveRedRight(dict);
6888+ } else {
6889+ break _v2$2;
6890+ }
6891+ } else {
6892+ var _v6 = right.a;
6893+ var _v7 = right.d;
6894+ return $elm$core$Dict$moveRedRight(dict);
6895+ }
6896+ } else {
6897+ break _v2$2;
6898+ }
6899+ }
6900+ return dict;
6901+ }
6902+ });
6903+var $elm$core$Dict$removeMin = function (dict) {
6904+ if ((dict.$ === 'RBNode_elm_builtin') && (dict.d.$ === 'RBNode_elm_builtin')) {
6905+ var color = dict.a;
6906+ var key = dict.b;
6907+ var value = dict.c;
6908+ var left = dict.d;
6909+ var lColor = left.a;
6910+ var lLeft = left.d;
6911+ var right = dict.e;
6912+ if (lColor.$ === 'Black') {
6913+ if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
6914+ var _v3 = lLeft.a;
6915+ return A5(
6916+ $elm$core$Dict$RBNode_elm_builtin,
6917+ color,
6918+ key,
6919+ value,
6920+ $elm$core$Dict$removeMin(left),
6921+ right);
6922+ } else {
6923+ var _v4 = $elm$core$Dict$moveRedLeft(dict);
6924+ if (_v4.$ === 'RBNode_elm_builtin') {
6925+ var nColor = _v4.a;
6926+ var nKey = _v4.b;
6927+ var nValue = _v4.c;
6928+ var nLeft = _v4.d;
6929+ var nRight = _v4.e;
6930+ return A5(
6931+ $elm$core$Dict$balance,
6932+ nColor,
6933+ nKey,
6934+ nValue,
6935+ $elm$core$Dict$removeMin(nLeft),
6936+ nRight);
6937+ } else {
6938+ return $elm$core$Dict$RBEmpty_elm_builtin;
6939+ }
6940+ }
6941+ } else {
6942+ return A5(
6943+ $elm$core$Dict$RBNode_elm_builtin,
6944+ color,
6945+ key,
6946+ value,
6947+ $elm$core$Dict$removeMin(left),
6948+ right);
6949+ }
6950+ } else {
6951+ return $elm$core$Dict$RBEmpty_elm_builtin;
6952+ }
6953+};
6954+var $elm$core$Dict$removeHelp = F2(
6955+ function (targetKey, dict) {
6956+ if (dict.$ === 'RBEmpty_elm_builtin') {
6957+ return $elm$core$Dict$RBEmpty_elm_builtin;
6958+ } else {
6959+ var color = dict.a;
6960+ var key = dict.b;
6961+ var value = dict.c;
6962+ var left = dict.d;
6963+ var right = dict.e;
6964+ if (_Utils_cmp(targetKey, key) < 0) {
6965+ if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Black')) {
6966+ var _v4 = left.a;
6967+ var lLeft = left.d;
6968+ if ((lLeft.$ === 'RBNode_elm_builtin') && (lLeft.a.$ === 'Red')) {
6969+ var _v6 = lLeft.a;
6970+ return A5(
6971+ $elm$core$Dict$RBNode_elm_builtin,
6972+ color,
6973+ key,
6974+ value,
6975+ A2($elm$core$Dict$removeHelp, targetKey, left),
6976+ right);
6977+ } else {
6978+ var _v7 = $elm$core$Dict$moveRedLeft(dict);
6979+ if (_v7.$ === 'RBNode_elm_builtin') {
6980+ var nColor = _v7.a;
6981+ var nKey = _v7.b;
6982+ var nValue = _v7.c;
6983+ var nLeft = _v7.d;
6984+ var nRight = _v7.e;
6985+ return A5(
6986+ $elm$core$Dict$balance,
6987+ nColor,
6988+ nKey,
6989+ nValue,
6990+ A2($elm$core$Dict$removeHelp, targetKey, nLeft),
6991+ nRight);
6992+ } else {
6993+ return $elm$core$Dict$RBEmpty_elm_builtin;
6994+ }
6995+ }
6996+ } else {
6997+ return A5(
6998+ $elm$core$Dict$RBNode_elm_builtin,
6999+ color,
7000+ key,
7001+ value,
7002+ A2($elm$core$Dict$removeHelp, targetKey, left),
7003+ right);
7004+ }
7005+ } else {
7006+ return A2(
7007+ $elm$core$Dict$removeHelpEQGT,
7008+ targetKey,
7009+ A7($elm$core$Dict$removeHelpPrepEQGT, targetKey, dict, color, key, value, left, right));
7010+ }
7011+ }
7012+ });
7013+var $elm$core$Dict$removeHelpEQGT = F2(
7014+ function (targetKey, dict) {
7015+ if (dict.$ === 'RBNode_elm_builtin') {
7016+ var color = dict.a;
7017+ var key = dict.b;
7018+ var value = dict.c;
7019+ var left = dict.d;
7020+ var right = dict.e;
7021+ if (_Utils_eq(targetKey, key)) {
7022+ var _v1 = $elm$core$Dict$getMin(right);
7023+ if (_v1.$ === 'RBNode_elm_builtin') {
7024+ var minKey = _v1.b;
7025+ var minValue = _v1.c;
7026+ return A5(
7027+ $elm$core$Dict$balance,
7028+ color,
7029+ minKey,
7030+ minValue,
7031+ left,
7032+ $elm$core$Dict$removeMin(right));
7033+ } else {
7034+ return $elm$core$Dict$RBEmpty_elm_builtin;
7035+ }
7036+ } else {
7037+ return A5(
7038+ $elm$core$Dict$balance,
7039+ color,
7040+ key,
7041+ value,
7042+ left,
7043+ A2($elm$core$Dict$removeHelp, targetKey, right));
7044+ }
7045+ } else {
7046+ return $elm$core$Dict$RBEmpty_elm_builtin;
7047+ }
7048+ });
7049+var $elm$core$Dict$remove = F2(
7050+ function (key, dict) {
7051+ var _v0 = A2($elm$core$Dict$removeHelp, key, dict);
7052+ if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) {
7053+ var _v1 = _v0.a;
7054+ var k = _v0.b;
7055+ var v = _v0.c;
7056+ var l = _v0.d;
7057+ var r = _v0.e;
7058+ return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r);
7059+ } else {
7060+ var x = _v0;
7061+ return x;
7062+ }
7063+ });
7064+var $elm$core$Dict$update = F3(
7065+ function (targetKey, alter, dictionary) {
7066+ var _v0 = alter(
7067+ A2($elm$core$Dict$get, targetKey, dictionary));
7068+ if (_v0.$ === 'Just') {
7069+ var value = _v0.a;
7070+ return A3($elm$core$Dict$insert, targetKey, value, dictionary);
7071+ } else {
7072+ return A2($elm$core$Dict$remove, targetKey, dictionary);
7073+ }
7074+ });
7075+var $elm$core$Basics$composeR = F3(
7076+ function (f, g, x) {
7077+ return g(
7078+ f(x));
7079+ });
7080+var $lynxjs_elm$http$Http$expectStringResponse = F2(
7081+ function (toMsg, toResult) {
7082+ return A3(
7083+ _Http_expect,
7084+ '',
7085+ $elm$core$Basics$identity,
7086+ A2($elm$core$Basics$composeR, toResult, toMsg));
7087+ });
7088+var $elm$core$Result$mapError = F2(
7089+ function (f, result) {
7090+ if (result.$ === 'Ok') {
7091+ var v = result.a;
7092+ return $elm$core$Result$Ok(v);
7093+ } else {
7094+ var e = result.a;
7095+ return $elm$core$Result$Err(
7096+ f(e));
7097+ }
7098+ });
7099+var $lynxjs_elm$http$Http$BadBody = function (a) {
7100+ return {$: 'BadBody', a: a};
7101+};
7102+var $lynxjs_elm$http$Http$BadStatus = function (a) {
7103+ return {$: 'BadStatus', a: a};
7104+};
7105+var $lynxjs_elm$http$Http$BadUrl = function (a) {
7106+ return {$: 'BadUrl', a: a};
7107+};
7108+var $lynxjs_elm$http$Http$NetworkError = {$: 'NetworkError'};
7109+var $lynxjs_elm$http$Http$Timeout = {$: 'Timeout'};
7110+var $lynxjs_elm$http$Http$resolve = F2(
7111+ function (toResult, response) {
7112+ switch (response.$) {
7113+ case 'BadUrl_':
7114+ var url = response.a;
7115+ return $elm$core$Result$Err(
7116+ $lynxjs_elm$http$Http$BadUrl(url));
7117+ case 'Timeout_':
7118+ return $elm$core$Result$Err($lynxjs_elm$http$Http$Timeout);
7119+ case 'NetworkError_':
7120+ return $elm$core$Result$Err($lynxjs_elm$http$Http$NetworkError);
7121+ case 'BadStatus_':
7122+ var metadata = response.a;
7123+ return $elm$core$Result$Err(
7124+ $lynxjs_elm$http$Http$BadStatus(metadata.statusCode));
7125+ default:
7126+ var body = response.b;
7127+ return A2(
7128+ $elm$core$Result$mapError,
7129+ $lynxjs_elm$http$Http$BadBody,
7130+ toResult(body));
7131+ }
7132+ });
7133+var $lynxjs_elm$http$Http$expectJson = F2(
7134+ function (toMsg, decoder) {
7135+ return A2(
7136+ $lynxjs_elm$http$Http$expectStringResponse,
7137+ toMsg,
7138+ $lynxjs_elm$http$Http$resolve(
7139+ function (string) {
7140+ return A2(
7141+ $elm$core$Result$mapError,
7142+ $elm$json$Json$Decode$errorToString,
7143+ A2($elm$json$Json$Decode$decodeString, decoder, string));
7144+ }));
7145+ });
7146+var $elm$json$Json$Decode$field = _Json_decodeField;
7147+var $lynxjs_elm$http$Http$Header = F2(
7148+ function (a, b) {
7149+ return {$: 'Header', a: a, b: b};
7150+ });
7151+var $lynxjs_elm$http$Http$header = $lynxjs_elm$http$Http$Header;
7152+var $lynxjs_elm$http$Http$jsonBody = function (value) {
7153+ return A2(
7154+ _Http_pair,
7155+ 'application/json',
7156+ A2($elm$json$Json$Encode$encode, 0, value));
7157+};
7158+var $elm$json$Json$Encode$list = F2(
7159+ function (func, entries) {
7160+ return _Json_wrap(
7161+ A3(
7162+ $elm$core$List$foldl,
7163+ _Json_addEntry(func),
7164+ _Json_emptyArray(_Utils_Tuple0),
7165+ entries));
7166+ });
7167+var $elm$json$Json$Encode$object = function (pairs) {
7168+ return _Json_wrap(
7169+ A3(
7170+ $elm$core$List$foldl,
7171+ F2(
7172+ function (_v0, obj) {
7173+ var k = _v0.a;
7174+ var v = _v0.b;
7175+ return A3(_Json_addField, k, v, obj);
7176+ }),
7177+ _Json_emptyObject(_Utils_Tuple0),
7178+ pairs));
7179+};
7180+var $lynxjs_elm$http$Http$Request = function (a) {
7181+ return {$: 'Request', a: a};
7182+};
7183+var $lynxjs_elm$http$Http$State = F2(
7184+ function (reqs, subs) {
7185+ return {reqs: reqs, subs: subs};
7186+ });
7187+var $lynxjs_elm$http$Http$init = $elm$core$Task$succeed(
7188+ A2($lynxjs_elm$http$Http$State, $elm$core$Dict$empty, _List_Nil));
7189+var $lynxjs_elm$http$Http$updateReqs = F3(
7190+ function (router, cmds, reqs) {
7191+ updateReqs:
7192+ while (true) {
7193+ if (!cmds.b) {
7194+ return $elm$core$Task$succeed(reqs);
7195+ } else {
7196+ var cmd = cmds.a;
7197+ var otherCmds = cmds.b;
7198+ if (cmd.$ === 'Cancel') {
7199+ var tracker = cmd.a;
7200+ var _v2 = A2($elm$core$Dict$get, tracker, reqs);
7201+ if (_v2.$ === 'Nothing') {
7202+ var $temp$router = router,
7203+ $temp$cmds = otherCmds,
7204+ $temp$reqs = reqs;
7205+ router = $temp$router;
7206+ cmds = $temp$cmds;
7207+ reqs = $temp$reqs;
7208+ continue updateReqs;
7209+ } else {
7210+ var pid = _v2.a;
7211+ return A2(
7212+ $elm$core$Task$andThen,
7213+ function (_v3) {
7214+ return A3(
7215+ $lynxjs_elm$http$Http$updateReqs,
7216+ router,
7217+ otherCmds,
7218+ A2($elm$core$Dict$remove, tracker, reqs));
7219+ },
7220+ $elm$core$Process$kill(pid));
7221+ }
7222+ } else {
7223+ var req = cmd.a;
7224+ return A2(
7225+ $elm$core$Task$andThen,
7226+ function (pid) {
7227+ var _v4 = req.tracker;
7228+ if (_v4.$ === 'Nothing') {
7229+ return A3($lynxjs_elm$http$Http$updateReqs, router, otherCmds, reqs);
7230+ } else {
7231+ var tracker = _v4.a;
7232+ return A3(
7233+ $lynxjs_elm$http$Http$updateReqs,
7234+ router,
7235+ otherCmds,
7236+ A3($elm$core$Dict$insert, tracker, pid, reqs));
7237+ }
7238+ },
7239+ $elm$core$Process$spawn(
7240+ A3(
7241+ _Http_toTask,
7242+ router,
7243+ $elm$core$Platform$sendToApp(router),
7244+ req)));
7245+ }
7246+ }
7247+ }
7248+ });
7249+var $lynxjs_elm$http$Http$onEffects = F4(
7250+ function (router, cmds, subs, state) {
7251+ return A2(
7252+ $elm$core$Task$andThen,
7253+ function (reqs) {
7254+ return $elm$core$Task$succeed(
7255+ A2($lynxjs_elm$http$Http$State, reqs, subs));
7256+ },
7257+ A3($lynxjs_elm$http$Http$updateReqs, router, cmds, state.reqs));
7258+ });
7259+var $elm$core$List$maybeCons = F3(
7260+ function (f, mx, xs) {
7261+ var _v0 = f(mx);
7262+ if (_v0.$ === 'Just') {
7263+ var x = _v0.a;
7264+ return A2($elm$core$List$cons, x, xs);
7265+ } else {
7266+ return xs;
7267+ }
7268+ });
7269+var $elm$core$List$filterMap = F2(
7270+ function (f, xs) {
7271+ return A3(
7272+ $elm$core$List$foldr,
7273+ $elm$core$List$maybeCons(f),
7274+ _List_Nil,
7275+ xs);
7276+ });
7277+var $lynxjs_elm$http$Http$maybeSend = F4(
7278+ function (router, desiredTracker, progress, _v0) {
7279+ var actualTracker = _v0.a;
7280+ var toMsg = _v0.b;
7281+ return _Utils_eq(desiredTracker, actualTracker) ? $elm$core$Maybe$Just(
7282+ A2(
7283+ $elm$core$Platform$sendToApp,
7284+ router,
7285+ toMsg(progress))) : $elm$core$Maybe$Nothing;
7286+ });
7287+var $lynxjs_elm$http$Http$onSelfMsg = F3(
7288+ function (router, _v0, state) {
7289+ var tracker = _v0.a;
7290+ var progress = _v0.b;
7291+ return A2(
7292+ $elm$core$Task$andThen,
7293+ function (_v1) {
7294+ return $elm$core$Task$succeed(state);
7295+ },
7296+ $elm$core$Task$sequence(
7297+ A2(
7298+ $elm$core$List$filterMap,
7299+ A3($lynxjs_elm$http$Http$maybeSend, router, tracker, progress),
7300+ state.subs)));
7301+ });
7302+var $lynxjs_elm$http$Http$Cancel = function (a) {
7303+ return {$: 'Cancel', a: a};
7304+};
7305+var $lynxjs_elm$http$Http$cmdMap = F2(
7306+ function (func, cmd) {
7307+ if (cmd.$ === 'Cancel') {
7308+ var tracker = cmd.a;
7309+ return $lynxjs_elm$http$Http$Cancel(tracker);
7310+ } else {
7311+ var r = cmd.a;
7312+ return $lynxjs_elm$http$Http$Request(
7313+ {
7314+ allowCookiesFromOtherDomains: r.allowCookiesFromOtherDomains,
7315+ body: r.body,
7316+ expect: A2(_Http_mapExpect, func, r.expect),
7317+ headers: r.headers,
7318+ method: r.method,
7319+ timeout: r.timeout,
7320+ tracker: r.tracker,
7321+ url: r.url
7322+ });
7323+ }
7324+ });
7325+var $lynxjs_elm$http$Http$MySub = F2(
7326+ function (a, b) {
7327+ return {$: 'MySub', a: a, b: b};
7328+ });
7329+var $lynxjs_elm$http$Http$subMap = F2(
7330+ function (func, _v0) {
7331+ var tracker = _v0.a;
7332+ var toMsg = _v0.b;
7333+ return A2(
7334+ $lynxjs_elm$http$Http$MySub,
7335+ tracker,
7336+ A2($elm$core$Basics$composeR, toMsg, func));
7337+ });
7338+_Platform_effectManagers['Http'] = _Platform_createManager($lynxjs_elm$http$Http$init, $lynxjs_elm$http$Http$onEffects, $lynxjs_elm$http$Http$onSelfMsg, $lynxjs_elm$http$Http$cmdMap, $lynxjs_elm$http$Http$subMap);
7339+var $lynxjs_elm$http$Http$command = _Platform_leaf('Http');
7340+var $lynxjs_elm$http$Http$subscription = _Platform_leaf('Http');
7341+var $lynxjs_elm$http$Http$request = function (r) {
7342+ return $lynxjs_elm$http$Http$command(
7343+ $lynxjs_elm$http$Http$Request(
7344+ {allowCookiesFromOtherDomains: false, body: r.body, expect: r.expect, headers: r.headers, method: r.method, timeout: r.timeout, tracker: r.tracker, url: r.url}));
7345+};
7346+var $elm$json$Json$Encode$string = _Json_wrap;
7347+var $author$project$Main$ackMessages = F3(
7348+ function (serverUrl, token, messageIds) {
7349+ return $lynxjs_elm$http$Http$request(
7350+ {
7351+ body: $lynxjs_elm$http$Http$jsonBody(
7352+ $elm$json$Json$Encode$object(
7353+ _List_fromArray(
7354+ [
7355+ _Utils_Tuple2(
7356+ 'messageIds',
7357+ A2($elm$json$Json$Encode$list, $elm$json$Json$Encode$string, messageIds))
7358+ ]))),
7359+ expect: A2(
7360+ $lynxjs_elm$http$Http$expectJson,
7361+ $author$project$Main$GotAck,
7362+ A2($elm$json$Json$Decode$field, 'ok', $elm$json$Json$Decode$bool)),
7363+ headers: _List_fromArray(
7364+ [
7365+ A2($lynxjs_elm$http$Http$header, 'Authorization', 'Bearer ' + token)
7366+ ]),
7367+ method: 'POST',
7368+ timeout: $elm$core$Maybe$Just(5000),
7369+ tracker: $elm$core$Maybe$Nothing,
7370+ url: serverUrl + '/messages/ack'
7371+ });
7372+ });
7373+var $lynxjs_elm$crypto$Crypto$X25519$getPublicKey = _Crypto_x25519GetPublicKey;
7374+var $lynxjs_elm$crypto$Crypto$X25519$getSharedSecret = _Crypto_x25519GetSharedSecret;
7375+var $lynxjs_elm$crypto$Crypto$Cipher$keyFromHex = _Crypto_cipherKeyFromHex;
7376+var $lynxjs_elm$crypto$Crypto$Cipher$nonce24FromHex = _Crypto_cipherNonce24FromHex;
7377+var $lynxjs_elm$crypto$Crypto$X25519$privateKeyFromHex = _Crypto_x25519PrivateKeyFromHex;
7378+var $lynxjs_elm$crypto$Crypto$X25519$publicKeyFromHex = _Crypto_x25519PublicKeyFromHex;
7379+var $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyToHex = _Crypto_ed25519PublicKeyToHex;
7380+var $lynxjs_elm$crypto$Crypto$X25519$publicKeyToHex = _Crypto_x25519PublicKeyToHex;
7381+var $lynxjs_elm$crypto$Crypto$Ed25519$sign = _Crypto_ed25519Sign;
7382+var $lynxjs_elm$crypto$Crypto$Ed25519$signatureToHex = _Crypto_ed25519SignatureToHex;
7383+var $elm$core$Basics$modBy = _Basics_modBy;
7384+var $author$project$Main$nibbleToHex = function (n) {
7385+ switch (n) {
7386+ case 0:
7387+ return _Utils_chr('0');
7388+ case 1:
7389+ return _Utils_chr('1');
7390+ case 2:
7391+ return _Utils_chr('2');
7392+ case 3:
7393+ return _Utils_chr('3');
7394+ case 4:
7395+ return _Utils_chr('4');
7396+ case 5:
7397+ return _Utils_chr('5');
7398+ case 6:
7399+ return _Utils_chr('6');
7400+ case 7:
7401+ return _Utils_chr('7');
7402+ case 8:
7403+ return _Utils_chr('8');
7404+ case 9:
7405+ return _Utils_chr('9');
7406+ case 10:
7407+ return _Utils_chr('a');
7408+ case 11:
7409+ return _Utils_chr('b');
7410+ case 12:
7411+ return _Utils_chr('c');
7412+ case 13:
7413+ return _Utils_chr('d');
7414+ case 14:
7415+ return _Utils_chr('e');
7416+ default:
7417+ return _Utils_chr('f');
7418+ }
7419+};
7420+var $author$project$Main$charToHexBytes = function (c) {
7421+ var code = $elm$core$Char$toCode(c);
7422+ if (code < 128) {
7423+ return _List_fromArray(
7424+ [
7425+ $author$project$Main$nibbleToHex((code / 16) | 0),
7426+ $author$project$Main$nibbleToHex(
7427+ A2($elm$core$Basics$modBy, 16, code))
7428+ ]);
7429+ } else {
7430+ if (code < 2048) {
7431+ var b2 = 128 + A2($elm$core$Basics$modBy, 64, code);
7432+ var b1 = 192 + ((code / 64) | 0);
7433+ return _List_fromArray(
7434+ [
7435+ $author$project$Main$nibbleToHex((b1 / 16) | 0),
7436+ $author$project$Main$nibbleToHex(
7437+ A2($elm$core$Basics$modBy, 16, b1)),
7438+ $author$project$Main$nibbleToHex((b2 / 16) | 0),
7439+ $author$project$Main$nibbleToHex(
7440+ A2($elm$core$Basics$modBy, 16, b2))
7441+ ]);
7442+ } else {
7443+ var b3 = 128 + A2($elm$core$Basics$modBy, 64, code);
7444+ var b2 = 128 + A2($elm$core$Basics$modBy, 64, (code / 64) | 0);
7445+ var b1 = 224 + ((code / 4096) | 0);
7446+ return _List_fromArray(
7447+ [
7448+ $author$project$Main$nibbleToHex((b1 / 16) | 0),
7449+ $author$project$Main$nibbleToHex(
7450+ A2($elm$core$Basics$modBy, 16, b1)),
7451+ $author$project$Main$nibbleToHex((b2 / 16) | 0),
7452+ $author$project$Main$nibbleToHex(
7453+ A2($elm$core$Basics$modBy, 16, b2)),
7454+ $author$project$Main$nibbleToHex((b3 / 16) | 0),
7455+ $author$project$Main$nibbleToHex(
7456+ A2($elm$core$Basics$modBy, 16, b3))
7457+ ]);
7458+ }
7459+ }
7460+};
7461+var $elm$core$List$append = F2(
7462+ function (xs, ys) {
7463+ if (!ys.b) {
7464+ return xs;
7465+ } else {
7466+ return A3($elm$core$List$foldr, $elm$core$List$cons, ys, xs);
7467+ }
7468+ });
7469+var $elm$core$List$concat = function (lists) {
7470+ return A3($elm$core$List$foldr, $elm$core$List$append, _List_Nil, lists);
7471+};
7472+var $elm$core$List$concatMap = F2(
7473+ function (f, list) {
7474+ return $elm$core$List$concat(
7475+ A2($elm$core$List$map, f, list));
7476+ });
7477+var $elm$core$String$foldr = _String_foldr;
7478+var $elm$core$String$toList = function (string) {
7479+ return A3($elm$core$String$foldr, $elm$core$List$cons, _List_Nil, string);
7480+};
7481+var $author$project$Main$textToHex = function (str) {
7482+ return $elm$core$String$fromList(
7483+ A2(
7484+ $elm$core$List$concatMap,
7485+ $author$project$Main$charToHexBytes,
7486+ $elm$core$String$toList(str)));
7487+};
7488+var $lynxjs_elm$crypto$Crypto$Cipher$xchacha20Encrypt = _Crypto_xchacha20Encrypt;
7489+var $author$project$Main$encryptMessage = F6(
7490+ function (edPriv, edPub, recipientXPubHex, ephSeedHex, nonceHex, plaintextJson) {
7491+ var _v0 = _Utils_Tuple3(
7492+ $lynxjs_elm$crypto$Crypto$X25519$privateKeyFromHex(ephSeedHex),
7493+ $lynxjs_elm$crypto$Crypto$X25519$publicKeyFromHex(recipientXPubHex),
7494+ $lynxjs_elm$crypto$Crypto$Cipher$nonce24FromHex(nonceHex));
7495+ if (((_v0.a.$ === 'Just') && (_v0.b.$ === 'Just')) && (_v0.c.$ === 'Just')) {
7496+ var ephPriv = _v0.a.a;
7497+ var recipientXPub = _v0.b.a;
7498+ var nonce = _v0.c.a;
7499+ var sharedSecretHex = A2($lynxjs_elm$crypto$Crypto$X25519$getSharedSecret, ephPriv, recipientXPub);
7500+ var ephPub = $lynxjs_elm$crypto$Crypto$X25519$getPublicKey(ephPriv);
7501+ var ephPubHex = $lynxjs_elm$crypto$Crypto$X25519$publicKeyToHex(ephPub);
7502+ var _v1 = $lynxjs_elm$crypto$Crypto$Cipher$keyFromHex(sharedSecretHex);
7503+ if (_v1.$ === 'Just') {
7504+ var key = _v1.a;
7505+ var senderPubHex = $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyToHex(edPub);
7506+ var plaintextHex = $author$project$Main$textToHex(plaintextJson);
7507+ var ciphertextHex = A3($lynxjs_elm$crypto$Crypto$Cipher$xchacha20Encrypt, key, nonce, plaintextHex);
7508+ var sig = A2($lynxjs_elm$crypto$Crypto$Ed25519$sign, ciphertextHex, edPriv);
7509+ var sigHex = $lynxjs_elm$crypto$Crypto$Ed25519$signatureToHex(sig);
7510+ return $elm$core$Maybe$Just(
7511+ _Utils_ap(
7512+ ephPubHex,
7513+ _Utils_ap(
7514+ nonceHex,
7515+ _Utils_ap(
7516+ ciphertextHex,
7517+ _Utils_ap(senderPubHex, sigHex)))));
7518+ } else {
7519+ return $elm$core$Maybe$Nothing;
7520+ }
7521+ } else {
7522+ return $elm$core$Maybe$Nothing;
7523+ }
7524+ });
7525+var $lynxjs_elm$crypto$Crypto$Ed25519$getPublicKey = _Crypto_ed25519GetPublicKey;
7526+var $author$project$Main$httpErrorToString = function (err) {
7527+ switch (err.$) {
7528+ case 'BadUrl':
7529+ var url = err.a;
7530+ return 'Bad URL: ' + url;
7531+ case 'Timeout':
7532+ return 'Request timed out';
7533+ case 'NetworkError':
7534+ return 'Network error';
7535+ case 'BadStatus':
7536+ var code = err.a;
7537+ return 'Server error: ' + $elm$core$String$fromInt(code);
7538+ default:
7539+ var msg_ = err.a;
7540+ return 'Bad response: ' + msg_;
7541+ }
7542+};
7543+var $elm$json$Json$Encode$int = _Json_wrap;
7544+var $elm$core$List$isEmpty = function (xs) {
7545+ if (!xs.b) {
7546+ return true;
7547+ } else {
7548+ return false;
7549+ }
7550+};
7551+var $elm$core$String$isEmpty = function (string) {
7552+ return string === '';
7553+};
7554+var $elm$core$String$slice = _String_slice;
7555+var $elm$core$String$left = F2(
7556+ function (n, string) {
7557+ return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string);
7558+ });
7559+var $author$project$Main$GotLookup = function (a) {
7560+ return {$: 'GotLookup', a: a};
7561+};
7562+var $lynxjs_elm$http$Http$emptyBody = _Http_emptyBody;
7563+var $lynxjs_elm$http$Http$get = function (r) {
7564+ return $lynxjs_elm$http$Http$request(
7565+ {body: $lynxjs_elm$http$Http$emptyBody, expect: r.expect, headers: _List_Nil, method: 'GET', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: r.url});
7566+};
7567+var $author$project$Main$LookupResponse = F2(
7568+ function (pubkey, online) {
7569+ return {online: online, pubkey: pubkey};
7570+ });
7571+var $author$project$Main$lookupDecoder = function (pubkey) {
7572+ return A2(
7573+ $elm$json$Json$Decode$map,
7574+ $author$project$Main$LookupResponse(pubkey),
7575+ A2($elm$json$Json$Decode$field, 'online', $elm$json$Json$Decode$bool));
7576+};
7577+var $author$project$Main$lookupPresence = F2(
7578+ function (serverUrl, pubkey) {
7579+ return $lynxjs_elm$http$Http$get(
7580+ {
7581+ expect: A2(
7582+ $lynxjs_elm$http$Http$expectJson,
7583+ $author$project$Main$GotLookup,
7584+ $author$project$Main$lookupDecoder(pubkey)),
7585+ url: serverUrl + ('/lookup/' + pubkey)
7586+ });
7587+ });
7588+var $elm$core$Maybe$map = F2(
7589+ function (f, maybe) {
7590+ if (maybe.$ === 'Just') {
7591+ var value = maybe.a;
7592+ return $elm$core$Maybe$Just(
7593+ f(value));
7594+ } else {
7595+ return $elm$core$Maybe$Nothing;
7596+ }
7597+ });
7598+var $elm$core$Platform$Cmd$batch = _Platform_batch;
7599+var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil);
7600+var $elm$core$String$length = _String_length;
7601+var $author$project$Main$parseIdentity = function (str) {
7602+ var _v0 = A2($elm$core$String$split, '.', str);
7603+ if ((_v0.b && _v0.b.b) && (!_v0.b.b.b)) {
7604+ var edHex = _v0.a;
7605+ var _v1 = _v0.b;
7606+ var xHex = _v1.a;
7607+ return (($elm$core$String$length(edHex) === 64) && ($elm$core$String$length(xHex) === 64)) ? $elm$core$Maybe$Just(
7608+ _Utils_Tuple2(edHex, xHex)) : $elm$core$Maybe$Nothing;
7609+ } else {
7610+ return $elm$core$Maybe$Nothing;
7611+ }
7612+};
7613+var $author$project$Main$GotPoll = function (a) {
7614+ return {$: 'GotPoll', a: a};
7615+};
7616+var $author$project$Main$PollResponse = F2(
7617+ function (events, cursor) {
7618+ return {cursor: cursor, events: events};
7619+ });
7620+var $elm$json$Json$Decode$list = _Json_decodeList;
7621+var $author$project$Main$PollEvent = F3(
7622+ function (id, eventType, payload) {
7623+ return {eventType: eventType, id: id, payload: payload};
7624+ });
7625+var $elm$json$Json$Decode$map3 = _Json_map3;
7626+var $elm$json$Json$Decode$string = _Json_decodeString;
7627+var $author$project$Main$pollEventDecoder = A4(
7628+ $elm$json$Json$Decode$map3,
7629+ $author$project$Main$PollEvent,
7630+ A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$string),
7631+ A2($elm$json$Json$Decode$field, 'eventType', $elm$json$Json$Decode$string),
7632+ A2($elm$json$Json$Decode$field, 'payload', $elm$json$Json$Decode$string));
7633+var $author$project$Main$pollDecoder = A3(
7634+ $elm$json$Json$Decode$map2,
7635+ $author$project$Main$PollResponse,
7636+ A2(
7637+ $elm$json$Json$Decode$field,
7638+ 'events',
7639+ $elm$json$Json$Decode$list($author$project$Main$pollEventDecoder)),
7640+ A2($elm$json$Json$Decode$field, 'cursor', $elm$json$Json$Decode$string));
7641+var $author$project$Main$pollMessages = F2(
7642+ function (serverUrl, token) {
7643+ return $lynxjs_elm$http$Http$request(
7644+ {
7645+ body: $lynxjs_elm$http$Http$emptyBody,
7646+ expect: A2($lynxjs_elm$http$Http$expectJson, $author$project$Main$GotPoll, $author$project$Main$pollDecoder),
7647+ headers: _List_fromArray(
7648+ [
7649+ A2($lynxjs_elm$http$Http$header, 'Authorization', 'Bearer ' + token)
7650+ ]),
7651+ method: 'GET',
7652+ timeout: $elm$core$Maybe$Just(10000),
7653+ tracker: $elm$core$Maybe$Nothing,
7654+ url: serverUrl + '/poll'
7655+ });
7656+ });
7657+var $lynxjs_elm$crypto$Crypto$Ed25519$privateKeyFromHex = _Crypto_ed25519PrivateKeyFromHex;
7658+var $elm$core$Basics$ge = _Utils_ge;
7659+var $author$project$Main$decodeUtf8Help = F2(
7660+ function (bytes, acc) {
7661+ decodeUtf8Help:
7662+ while (true) {
7663+ if (!bytes.b) {
7664+ return $elm$core$Maybe$Just(acc);
7665+ } else {
7666+ var b = bytes.a;
7667+ var rest = bytes.b;
7668+ if (b < 128) {
7669+ var $temp$bytes = rest,
7670+ $temp$acc = A2(
7671+ $elm$core$List$cons,
7672+ $elm$core$Char$fromCode(b),
7673+ acc);
7674+ bytes = $temp$bytes;
7675+ acc = $temp$acc;
7676+ continue decodeUtf8Help;
7677+ } else {
7678+ if ((b >= 192) && (b < 224)) {
7679+ if (rest.b) {
7680+ var b2 = rest.a;
7681+ var rest2 = rest.b;
7682+ var code = ((b - 192) * 64) + (b2 - 128);
7683+ var $temp$bytes = rest2,
7684+ $temp$acc = A2(
7685+ $elm$core$List$cons,
7686+ $elm$core$Char$fromCode(code),
7687+ acc);
7688+ bytes = $temp$bytes;
7689+ acc = $temp$acc;
7690+ continue decodeUtf8Help;
7691+ } else {
7692+ return $elm$core$Maybe$Nothing;
7693+ }
7694+ } else {
7695+ if ((b >= 224) && (b < 240)) {
7696+ if (rest.b && rest.b.b) {
7697+ var b2 = rest.a;
7698+ var _v3 = rest.b;
7699+ var b3 = _v3.a;
7700+ var rest3 = _v3.b;
7701+ var code = (((b - 224) * 4096) + ((b2 - 128) * 64)) + (b3 - 128);
7702+ var $temp$bytes = rest3,
7703+ $temp$acc = A2(
7704+ $elm$core$List$cons,
7705+ $elm$core$Char$fromCode(code),
7706+ acc);
7707+ bytes = $temp$bytes;
7708+ acc = $temp$acc;
7709+ continue decodeUtf8Help;
7710+ } else {
7711+ return $elm$core$Maybe$Nothing;
7712+ }
7713+ } else {
7714+ if (b >= 240) {
7715+ if ((rest.b && rest.b.b) && rest.b.b.b) {
7716+ var b2 = rest.a;
7717+ var _v5 = rest.b;
7718+ var b3 = _v5.a;
7719+ var _v6 = _v5.b;
7720+ var b4 = _v6.a;
7721+ var rest4 = _v6.b;
7722+ var code = ((((b - 240) * 262144) + ((b2 - 128) * 4096)) + ((b3 - 128) * 64)) + (b4 - 128);
7723+ var $temp$bytes = rest4,
7724+ $temp$acc = A2(
7725+ $elm$core$List$cons,
7726+ $elm$core$Char$fromCode(code),
7727+ acc);
7728+ bytes = $temp$bytes;
7729+ acc = $temp$acc;
7730+ continue decodeUtf8Help;
7731+ } else {
7732+ return $elm$core$Maybe$Nothing;
7733+ }
7734+ } else {
7735+ return $elm$core$Maybe$Nothing;
7736+ }
7737+ }
7738+ }
7739+ }
7740+ }
7741+ }
7742+ });
7743+var $author$project$Main$decodeUtf8Bytes = function (bytes) {
7744+ return A2(
7745+ $elm$core$Maybe$map,
7746+ A2($elm$core$Basics$composeR, $elm$core$List$reverse, $elm$core$String$fromList),
7747+ A2($author$project$Main$decodeUtf8Help, bytes, _List_Nil));
7748+};
7749+var $author$project$Main$hexCharToInt = function (c) {
7750+ var code = $elm$core$Char$toCode(c);
7751+ return ((code >= 48) && (code <= 57)) ? $elm$core$Maybe$Just(code - 48) : (((code >= 97) && (code <= 102)) ? $elm$core$Maybe$Just(code - 87) : (((code >= 65) && (code <= 70)) ? $elm$core$Maybe$Just(code - 55) : $elm$core$Maybe$Nothing));
7752+};
7753+var $elm$core$Maybe$map2 = F3(
7754+ function (func, ma, mb) {
7755+ if (ma.$ === 'Nothing') {
7756+ return $elm$core$Maybe$Nothing;
7757+ } else {
7758+ var a = ma.a;
7759+ if (mb.$ === 'Nothing') {
7760+ return $elm$core$Maybe$Nothing;
7761+ } else {
7762+ var b = mb.a;
7763+ return $elm$core$Maybe$Just(
7764+ A2(func, a, b));
7765+ }
7766+ }
7767+ });
7768+var $author$project$Main$pairUp = function (list) {
7769+ if (list.b && list.b.b) {
7770+ var a = list.a;
7771+ var _v1 = list.b;
7772+ var b = _v1.a;
7773+ var rest = _v1.b;
7774+ return A2(
7775+ $elm$core$List$cons,
7776+ _Utils_Tuple2(a, b),
7777+ $author$project$Main$pairUp(rest));
7778+ } else {
7779+ return _List_Nil;
7780+ }
7781+};
7782+var $author$project$Main$hexToBytes = function (hex) {
7783+ var chars = $elm$core$String$toList(hex);
7784+ var pairs = $author$project$Main$pairUp(chars);
7785+ return A2(
7786+ $elm$core$List$filterMap,
7787+ function (_v0) {
7788+ var hi = _v0.a;
7789+ var lo = _v0.b;
7790+ return A3(
7791+ $elm$core$Maybe$map2,
7792+ F2(
7793+ function (h, l) {
7794+ return (h * 16) + l;
7795+ }),
7796+ $author$project$Main$hexCharToInt(hi),
7797+ $author$project$Main$hexCharToInt(lo));
7798+ },
7799+ pairs);
7800+};
7801+var $elm$core$Maybe$withDefault = F2(
7802+ function (_default, maybe) {
7803+ if (maybe.$ === 'Just') {
7804+ var value = maybe.a;
7805+ return value;
7806+ } else {
7807+ return _default;
7808+ }
7809+ });
7810+var $author$project$Main$hexToText = function (hex) {
7811+ return A2(
7812+ $elm$core$Maybe$withDefault,
7813+ '',
7814+ $author$project$Main$decodeUtf8Bytes(
7815+ $author$project$Main$hexToBytes(hex)));
7816+};
7817+var $elm$core$Basics$not = _Basics_not;
7818+var $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyFromHex = _Crypto_ed25519PublicKeyFromHex;
7819+var $lynxjs_elm$crypto$Crypto$Ed25519$signatureFromHex = _Crypto_ed25519SignatureFromHex;
7820+var $lynxjs_elm$crypto$Crypto$Ed25519$verify = _Crypto_ed25519Verify;
7821+var $lynxjs_elm$crypto$Crypto$Cipher$xchacha20Decrypt = _Crypto_xchacha20Decrypt;
7822+var $author$project$Main$decryptMessage = F2(
7823+ function (xPriv, blob) {
7824+ var hexLen = $elm$core$String$length(blob);
7825+ if (hexLen < 304) {
7826+ return $elm$core$Maybe$Nothing;
7827+ } else {
7828+ var sigHex = A3($elm$core$String$slice, hexLen - 128, hexLen, blob);
7829+ var senderEdPubHex = A3($elm$core$String$slice, hexLen - 192, hexLen - 128, blob);
7830+ var nonceHex = A3($elm$core$String$slice, 64, 112, blob);
7831+ var ephPubHex = A3($elm$core$String$slice, 0, 64, blob);
7832+ var ciphertextHex = A3($elm$core$String$slice, 112, hexLen - 192, blob);
7833+ var _v0 = _Utils_Tuple2(
7834+ $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyFromHex(senderEdPubHex),
7835+ $lynxjs_elm$crypto$Crypto$Ed25519$signatureFromHex(sigHex));
7836+ if ((_v0.a.$ === 'Just') && (_v0.b.$ === 'Just')) {
7837+ var senderEdPub = _v0.a.a;
7838+ var sig = _v0.b.a;
7839+ if (!A3($lynxjs_elm$crypto$Crypto$Ed25519$verify, sig, ciphertextHex, senderEdPub)) {
7840+ return $elm$core$Maybe$Nothing;
7841+ } else {
7842+ var _v1 = _Utils_Tuple2(
7843+ $lynxjs_elm$crypto$Crypto$X25519$publicKeyFromHex(ephPubHex),
7844+ $lynxjs_elm$crypto$Crypto$Cipher$nonce24FromHex(nonceHex));
7845+ if ((_v1.a.$ === 'Just') && (_v1.b.$ === 'Just')) {
7846+ var ephPub = _v1.a.a;
7847+ var nonce = _v1.b.a;
7848+ var sharedSecretHex = A2($lynxjs_elm$crypto$Crypto$X25519$getSharedSecret, xPriv, ephPub);
7849+ var _v2 = $lynxjs_elm$crypto$Crypto$Cipher$keyFromHex(sharedSecretHex);
7850+ if (_v2.$ === 'Just') {
7851+ var key = _v2.a;
7852+ var _v3 = A3($lynxjs_elm$crypto$Crypto$Cipher$xchacha20Decrypt, key, nonce, ciphertextHex);
7853+ if (_v3.$ === 'Just') {
7854+ var plaintextHex = _v3.a;
7855+ return $elm$core$Maybe$Just(
7856+ _Utils_Tuple2(
7857+ senderEdPubHex,
7858+ $author$project$Main$hexToText(plaintextHex)));
7859+ } else {
7860+ return $elm$core$Maybe$Nothing;
7861+ }
7862+ } else {
7863+ return $elm$core$Maybe$Nothing;
7864+ }
7865+ } else {
7866+ return $elm$core$Maybe$Nothing;
7867+ }
7868+ }
7869+ } else {
7870+ return $elm$core$Maybe$Nothing;
7871+ }
7872+ }
7873+ });
7874+var $author$project$Main$Envelope = F4(
7875+ function (toKey, fromKey, encryptedBlob, timestamp) {
7876+ return {encryptedBlob: encryptedBlob, fromKey: fromKey, timestamp: timestamp, toKey: toKey};
7877+ });
7878+var $elm$json$Json$Decode$int = _Json_decodeInt;
7879+var $elm$json$Json$Decode$map4 = _Json_map4;
7880+var $author$project$Main$envelopeDecoder = A5(
7881+ $elm$json$Json$Decode$map4,
7882+ $author$project$Main$Envelope,
7883+ A2($elm$json$Json$Decode$field, 'toKey', $elm$json$Json$Decode$string),
7884+ A2($elm$json$Json$Decode$field, 'fromKey', $elm$json$Json$Decode$string),
7885+ A2($elm$json$Json$Decode$field, 'encryptedBlob', $elm$json$Json$Decode$string),
7886+ A2($elm$json$Json$Decode$field, 'timestamp', $elm$json$Json$Decode$int));
7887+var $elm$core$Set$insert = F2(
7888+ function (key, _v0) {
7889+ var dict = _v0.a;
7890+ return $elm$core$Set$Set_elm_builtin(
7891+ A3($elm$core$Dict$insert, key, _Utils_Tuple0, dict));
7892+ });
7893+var $elm$core$Dict$member = F2(
7894+ function (key, dict) {
7895+ var _v0 = A2($elm$core$Dict$get, key, dict);
7896+ if (_v0.$ === 'Just') {
7897+ return true;
7898+ } else {
7899+ return false;
7900+ }
7901+ });
7902+var $elm$core$Set$member = F2(
7903+ function (key, _v0) {
7904+ var dict = _v0.a;
7905+ return A2($elm$core$Dict$member, key, dict);
7906+ });
7907+var $author$project$Main$MessagePayload = F4(
7908+ function (type_, id, timestamp, body) {
7909+ return {body: body, id: id, timestamp: timestamp, type_: type_};
7910+ });
7911+var $author$project$Main$messagePayloadDecoder = A5(
7912+ $elm$json$Json$Decode$map4,
7913+ $author$project$Main$MessagePayload,
7914+ A2($elm$json$Json$Decode$field, 'type', $elm$json$Json$Decode$string),
7915+ A2($elm$json$Json$Decode$field, 'id', $elm$json$Json$Decode$string),
7916+ A2($elm$json$Json$Decode$field, 'timestamp', $elm$json$Json$Decode$int),
7917+ A2($elm$json$Json$Decode$field, 'body', $elm$json$Json$Decode$string));
7918+var $author$project$Main$processEvents = F4(
7919+ function (xPriv, myEdHex, events, seenIds) {
7920+ return A3(
7921+ $elm$core$List$foldl,
7922+ F2(
7923+ function (event, _v0) {
7924+ var msgs = _v0.a;
7925+ var seen = _v0.b;
7926+ var acks = _v0.c;
7927+ if (event.eventType !== 'message') {
7928+ return _Utils_Tuple3(msgs, seen, acks);
7929+ } else {
7930+ var _v1 = A2($elm$json$Json$Decode$decodeString, $author$project$Main$envelopeDecoder, event.payload);
7931+ if (_v1.$ === 'Err') {
7932+ return _Utils_Tuple3(
7933+ msgs,
7934+ seen,
7935+ A2($elm$core$List$cons, event.id, acks));
7936+ } else {
7937+ var envelope = _v1.a;
7938+ if (_Utils_eq(envelope.fromKey, myEdHex)) {
7939+ return _Utils_Tuple3(
7940+ msgs,
7941+ seen,
7942+ A2($elm$core$List$cons, event.id, acks));
7943+ } else {
7944+ var _v2 = A2($author$project$Main$decryptMessage, xPriv, envelope.encryptedBlob);
7945+ if (_v2.$ === 'Nothing') {
7946+ return _Utils_Tuple3(
7947+ msgs,
7948+ seen,
7949+ A2($elm$core$List$cons, event.id, acks));
7950+ } else {
7951+ var _v3 = _v2.a;
7952+ var senderPub = _v3.a;
7953+ var json = _v3.b;
7954+ var _v4 = A2($elm$json$Json$Decode$decodeString, $author$project$Main$messagePayloadDecoder, json);
7955+ if (_v4.$ === 'Err') {
7956+ return _Utils_Tuple3(
7957+ msgs,
7958+ seen,
7959+ A2($elm$core$List$cons, event.id, acks));
7960+ } else {
7961+ var payload = _v4.a;
7962+ return A2($elm$core$Set$member, payload.id, seen) ? _Utils_Tuple3(
7963+ msgs,
7964+ seen,
7965+ A2($elm$core$List$cons, event.id, acks)) : _Utils_Tuple3(
7966+ A2(
7967+ $elm$core$List$cons,
7968+ _Utils_Tuple2(
7969+ senderPub,
7970+ {body: payload.body, id: payload.id, outgoing: false, timestamp: payload.timestamp}),
7971+ msgs),
7972+ A2($elm$core$Set$insert, payload.id, seen),
7973+ A2($elm$core$List$cons, event.id, acks));
7974+ }
7975+ }
7976+ }
7977+ }
7978+ }
7979+ }),
7980+ _Utils_Tuple3(_List_Nil, seenIds, _List_Nil),
7981+ events);
7982+ });
7983+var $author$project$Main$GotChallenge = function (a) {
7984+ return {$: 'GotChallenge', a: a};
7985+};
7986+var $author$project$Main$ChallengeResponse = function (challenge) {
7987+ return {challenge: challenge};
7988+};
7989+var $author$project$Main$challengeDecoder = A2(
7990+ $elm$json$Json$Decode$map,
7991+ $author$project$Main$ChallengeResponse,
7992+ A2($elm$json$Json$Decode$field, 'challenge', $elm$json$Json$Decode$string));
7993+var $lynxjs_elm$http$Http$post = function (r) {
7994+ return $lynxjs_elm$http$Http$request(
7995+ {body: r.body, expect: r.expect, headers: _List_Nil, method: 'POST', timeout: $elm$core$Maybe$Nothing, tracker: $elm$core$Maybe$Nothing, url: r.url});
7996+};
7997+var $author$project$Main$requestChallenge = F2(
7998+ function (serverUrl, pubkey) {
7999+ return $lynxjs_elm$http$Http$post(
8000+ {
8001+ body: $lynxjs_elm$http$Http$jsonBody(
8002+ $elm$json$Json$Encode$object(
8003+ _List_fromArray(
8004+ [
8005+ _Utils_Tuple2(
8006+ 'pubkey',
8007+ $elm$json$Json$Encode$string(pubkey))
8008+ ]))),
8009+ expect: A2($lynxjs_elm$http$Http$expectJson, $author$project$Main$GotChallenge, $author$project$Main$challengeDecoder),
8010+ url: serverUrl + '/auth/challenge'
8011+ });
8012+ });
8013+var $author$project$Main$GotSendResult = function (a) {
8014+ return {$: 'GotSendResult', a: a};
8015+};
8016+var $author$project$Main$SendResponse = F2(
8017+ function (status, messageId) {
8018+ return {messageId: messageId, status: status};
8019+ });
8020+var $author$project$Main$sendDecoder = A3(
8021+ $elm$json$Json$Decode$map2,
8022+ $author$project$Main$SendResponse,
8023+ A2($elm$json$Json$Decode$field, 'status', $elm$json$Json$Decode$string),
8024+ A2($elm$json$Json$Decode$field, 'messageId', $elm$json$Json$Decode$string));
8025+var $author$project$Main$sendMessageHttp = F5(
8026+ function (serverUrl, token, to, encryptedBlob, timestamp) {
8027+ return $lynxjs_elm$http$Http$request(
8028+ {
8029+ body: $lynxjs_elm$http$Http$jsonBody(
8030+ $elm$json$Json$Encode$object(
8031+ _List_fromArray(
8032+ [
8033+ _Utils_Tuple2(
8034+ 'to',
8035+ $elm$json$Json$Encode$string(to)),
8036+ _Utils_Tuple2(
8037+ 'encryptedBlob',
8038+ $elm$json$Json$Encode$string(encryptedBlob)),
8039+ _Utils_Tuple2(
8040+ 'timestamp',
8041+ $elm$json$Json$Encode$int(timestamp))
8042+ ]))),
8043+ expect: A2($lynxjs_elm$http$Http$expectJson, $author$project$Main$GotSendResult, $author$project$Main$sendDecoder),
8044+ headers: _List_fromArray(
8045+ [
8046+ A2($lynxjs_elm$http$Http$header, 'Authorization', 'Bearer ' + token)
8047+ ]),
8048+ method: 'POST',
8049+ timeout: $elm$core$Maybe$Just(10000),
8050+ tracker: $elm$core$Maybe$Nothing,
8051+ url: serverUrl + '/messages/'
8052+ });
8053+ });
8054+var $elm$core$String$trim = _String_trim;
8055+var $author$project$Main$GotVerify = function (a) {
8056+ return {$: 'GotVerify', a: a};
8057+};
8058+var $author$project$Main$VerifyResponse = F2(
8059+ function (token, expiresAt) {
8060+ return {expiresAt: expiresAt, token: token};
8061+ });
8062+var $author$project$Main$verifyDecoder = A3(
8063+ $elm$json$Json$Decode$map2,
8064+ $author$project$Main$VerifyResponse,
8065+ A2($elm$json$Json$Decode$field, 'token', $elm$json$Json$Decode$string),
8066+ A2($elm$json$Json$Decode$field, 'expiresAt', $elm$json$Json$Decode$int));
8067+var $author$project$Main$verifyAuth = F4(
8068+ function (serverUrl, pubkey, challenge, signature) {
8069+ return $lynxjs_elm$http$Http$post(
8070+ {
8071+ body: $lynxjs_elm$http$Http$jsonBody(
8072+ $elm$json$Json$Encode$object(
8073+ _List_fromArray(
8074+ [
8075+ _Utils_Tuple2(
8076+ 'pubkey',
8077+ $elm$json$Json$Encode$string(pubkey)),
8078+ _Utils_Tuple2(
8079+ 'challenge',
8080+ $elm$json$Json$Encode$string(challenge)),
8081+ _Utils_Tuple2(
8082+ 'signature',
8083+ $elm$json$Json$Encode$string(signature))
8084+ ]))),
8085+ expect: A2($lynxjs_elm$http$Http$expectJson, $author$project$Main$GotVerify, $author$project$Main$verifyDecoder),
8086+ url: serverUrl + '/auth/verify'
8087+ });
8088+ });
8089+var $author$project$Main$update = F2(
8090+ function (msg, model) {
8091+ switch (msg.$) {
8092+ case 'GotSeed':
8093+ var seedHex = msg.a;
8094+ var xPriv = $lynxjs_elm$crypto$Crypto$X25519$privateKeyFromHex(seedHex);
8095+ var edPriv = $lynxjs_elm$crypto$Crypto$Ed25519$privateKeyFromHex(seedHex);
8096+ return _Utils_Tuple2(
8097+ _Utils_update(
8098+ model,
8099+ {
8100+ edPriv: edPriv,
8101+ edPub: A2($elm$core$Maybe$map, $lynxjs_elm$crypto$Crypto$Ed25519$getPublicKey, edPriv),
8102+ xPriv: xPriv,
8103+ xPub: A2($elm$core$Maybe$map, $lynxjs_elm$crypto$Crypto$X25519$getPublicKey, xPriv)
8104+ }),
8105+ $elm$core$Platform$Cmd$none);
8106+ case 'GotTime':
8107+ var posix = msg.a;
8108+ return _Utils_Tuple2(
8109+ _Utils_update(
8110+ model,
8111+ {
8112+ currentTime: ($elm$time$Time$posixToMillis(posix) / 1000) | 0
8113+ }),
8114+ $elm$core$Platform$Cmd$none);
8115+ case 'Connect':
8116+ var _v1 = model.edPub;
8117+ if (_v1.$ === 'Just') {
8118+ var pub = _v1.a;
8119+ return _Utils_Tuple2(
8120+ _Utils_update(
8121+ model,
8122+ {connecting: true, error: $elm$core$Maybe$Nothing}),
8123+ A2(
8124+ $author$project$Main$requestChallenge,
8125+ model.serverUrl,
8126+ $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyToHex(pub)));
8127+ } else {
8128+ return _Utils_Tuple2(
8129+ _Utils_update(
8130+ model,
8131+ {
8132+ error: $elm$core$Maybe$Just('No identity keypair')
8133+ }),
8134+ $elm$core$Platform$Cmd$none);
8135+ }
8136+ case 'GotChallenge':
8137+ var result = msg.a;
8138+ var _v2 = _Utils_Tuple2(result, model.edPriv);
8139+ if (_v2.a.$ === 'Ok') {
8140+ if (_v2.b.$ === 'Just') {
8141+ var resp = _v2.a.a;
8142+ var priv = _v2.b.a;
8143+ var sig = A2($lynxjs_elm$crypto$Crypto$Ed25519$sign, resp.challenge, priv);
8144+ return _Utils_Tuple2(
8145+ model,
8146+ A4(
8147+ $author$project$Main$verifyAuth,
8148+ model.serverUrl,
8149+ A2(
8150+ $elm$core$Maybe$withDefault,
8151+ '',
8152+ A2($elm$core$Maybe$map, $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyToHex, model.edPub)),
8153+ resp.challenge,
8154+ $lynxjs_elm$crypto$Crypto$Ed25519$signatureToHex(sig)));
8155+ } else {
8156+ return _Utils_Tuple2(
8157+ _Utils_update(
8158+ model,
8159+ {connecting: false}),
8160+ $elm$core$Platform$Cmd$none);
8161+ }
8162+ } else {
8163+ var err = _v2.a.a;
8164+ return _Utils_Tuple2(
8165+ _Utils_update(
8166+ model,
8167+ {
8168+ connecting: false,
8169+ error: $elm$core$Maybe$Just(
8170+ $author$project$Main$httpErrorToString(err))
8171+ }),
8172+ $elm$core$Platform$Cmd$none);
8173+ }
8174+ case 'GotVerify':
8175+ var result = msg.a;
8176+ if (result.$ === 'Ok') {
8177+ var resp = result.a;
8178+ return (resp.token !== '') ? _Utils_Tuple2(
8179+ _Utils_update(
8180+ model,
8181+ {authToken: resp.token, connecting: false, screen: $author$project$Main$ContactsScreen}),
8182+ $elm$core$Platform$Cmd$none) : _Utils_Tuple2(
8183+ _Utils_update(
8184+ model,
8185+ {
8186+ connecting: false,
8187+ error: $elm$core$Maybe$Just('Authentication failed')
8188+ }),
8189+ $elm$core$Platform$Cmd$none);
8190+ } else {
8191+ var err = result.a;
8192+ return _Utils_Tuple2(
8193+ _Utils_update(
8194+ model,
8195+ {
8196+ connecting: false,
8197+ error: $elm$core$Maybe$Just(
8198+ $author$project$Main$httpErrorToString(err))
8199+ }),
8200+ $elm$core$Platform$Cmd$none);
8201+ }
8202+ case 'PrepareSend':
8203+ return $elm$core$String$isEmpty(
8204+ $elm$core$String$trim(model.draft)) ? _Utils_Tuple2(model, $elm$core$Platform$Cmd$none) : _Utils_Tuple2(
8205+ _Utils_update(
8206+ model,
8207+ {sending: true}),
8208+ A2(
8209+ $elm$random$Random$generate,
8210+ $author$project$Main$GotSendEntropy,
8211+ $author$project$Main$randomHexString(72)));
8212+ case 'GotSendEntropy':
8213+ var entropyHex = msg.a;
8214+ var _v4 = _Utils_Tuple2(model.edPriv, model.edPub);
8215+ if ((_v4.a.$ === 'Just') && (_v4.b.$ === 'Just')) {
8216+ var edPriv = _v4.a.a;
8217+ var edPub = _v4.b.a;
8218+ var recipientEdHex = model.activeChat;
8219+ var contact = A2($elm$core$Dict$get, recipientEdHex, model.contacts);
8220+ if (contact.$ === 'Just') {
8221+ var c = contact.a;
8222+ var timestamp = model.currentTime;
8223+ var nonceHex = A3($elm$core$String$slice, 96, 144, entropyHex);
8224+ var msgId = A2($elm$core$String$left, 32, entropyHex);
8225+ var outMsg = {body: model.draft, id: msgId, outgoing: true, timestamp: timestamp};
8226+ var plaintextJson = A2(
8227+ $elm$json$Json$Encode$encode,
8228+ 0,
8229+ $elm$json$Json$Encode$object(
8230+ _List_fromArray(
8231+ [
8232+ _Utils_Tuple2(
8233+ 'type',
8234+ $elm$json$Json$Encode$string('text')),
8235+ _Utils_Tuple2(
8236+ 'id',
8237+ $elm$json$Json$Encode$string(msgId)),
8238+ _Utils_Tuple2(
8239+ 'timestamp',
8240+ $elm$json$Json$Encode$int(timestamp)),
8241+ _Utils_Tuple2(
8242+ 'body',
8243+ $elm$json$Json$Encode$string(model.draft))
8244+ ])));
8245+ var existing = A2(
8246+ $elm$core$Maybe$withDefault,
8247+ _List_Nil,
8248+ A2($elm$core$Dict$get, recipientEdHex, model.messages));
8249+ var ephSeedHex = A3($elm$core$String$slice, 32, 96, entropyHex);
8250+ var blob = A6($author$project$Main$encryptMessage, edPriv, edPub, c.xPubHex, ephSeedHex, nonceHex, plaintextJson);
8251+ if (blob.$ === 'Just') {
8252+ var blobHex = blob.a;
8253+ return _Utils_Tuple2(
8254+ _Utils_update(
8255+ model,
8256+ {
8257+ draft: '',
8258+ messages: A3(
8259+ $elm$core$Dict$insert,
8260+ recipientEdHex,
8261+ _Utils_ap(
8262+ existing,
8263+ _List_fromArray(
8264+ [outMsg])),
8265+ model.messages)
8266+ }),
8267+ A5($author$project$Main$sendMessageHttp, model.serverUrl, model.authToken, recipientEdHex, blobHex, timestamp));
8268+ } else {
8269+ return _Utils_Tuple2(
8270+ _Utils_update(
8271+ model,
8272+ {
8273+ error: $elm$core$Maybe$Just('Encryption failed'),
8274+ sending: false
8275+ }),
8276+ $elm$core$Platform$Cmd$none);
8277+ }
8278+ } else {
8279+ return _Utils_Tuple2(
8280+ _Utils_update(
8281+ model,
8282+ {
8283+ error: $elm$core$Maybe$Just('Contact not found'),
8284+ sending: false
8285+ }),
8286+ $elm$core$Platform$Cmd$none);
8287+ }
8288+ } else {
8289+ return _Utils_Tuple2(
8290+ _Utils_update(
8291+ model,
8292+ {
8293+ error: $elm$core$Maybe$Just('No identity'),
8294+ sending: false
8295+ }),
8296+ $elm$core$Platform$Cmd$none);
8297+ }
8298+ case 'GotSendResult':
8299+ var result = msg.a;
8300+ if (result.$ === 'Ok') {
8301+ return _Utils_Tuple2(
8302+ _Utils_update(
8303+ model,
8304+ {sending: false}),
8305+ $elm$core$Platform$Cmd$none);
8306+ } else {
8307+ var err = result.a;
8308+ return _Utils_Tuple2(
8309+ _Utils_update(
8310+ model,
8311+ {
8312+ error: $elm$core$Maybe$Just(
8313+ $author$project$Main$httpErrorToString(err)),
8314+ sending: false
8315+ }),
8316+ $elm$core$Platform$Cmd$none);
8317+ }
8318+ case 'PollTick':
8319+ var posix = msg.a;
8320+ var t = ($elm$time$Time$posixToMillis(posix) / 1000) | 0;
8321+ return (model.authToken !== '') ? _Utils_Tuple2(
8322+ _Utils_update(
8323+ model,
8324+ {currentTime: t}),
8325+ A2($author$project$Main$pollMessages, model.serverUrl, model.authToken)) : _Utils_Tuple2(
8326+ _Utils_update(
8327+ model,
8328+ {currentTime: t}),
8329+ $elm$core$Platform$Cmd$none);
8330+ case 'GotPoll':
8331+ var result = msg.a;
8332+ var _v8 = _Utils_Tuple3(result, model.xPriv, model.edPub);
8333+ _v8$2:
8334+ while (true) {
8335+ if (_v8.a.$ === 'Ok') {
8336+ if ((_v8.b.$ === 'Just') && (_v8.c.$ === 'Just')) {
8337+ var resp = _v8.a.a;
8338+ var xPriv = _v8.b.a;
8339+ var edPub = _v8.c.a;
8340+ var myEdHex = $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyToHex(edPub);
8341+ var _v9 = A4($author$project$Main$processEvents, xPriv, myEdHex, resp.events, model.seenIds);
8342+ var newMessages = _v9.a;
8343+ var newSeenIds = _v9.b;
8344+ var ackIds = _v9.c;
8345+ var ackCmd = $elm$core$List$isEmpty(ackIds) ? $elm$core$Platform$Cmd$none : A3($author$project$Main$ackMessages, model.serverUrl, model.authToken, ackIds);
8346+ var updatedContacts = A3(
8347+ $elm$core$List$foldl,
8348+ F2(
8349+ function (_v11, dict) {
8350+ var from = _v11.a;
8351+ var chatMsg = _v11.b;
8352+ return A3(
8353+ $elm$core$Dict$update,
8354+ from,
8355+ function (existing) {
8356+ if (existing.$ === 'Just') {
8357+ var c = existing.a;
8358+ return $elm$core$Maybe$Just(
8359+ _Utils_update(
8360+ c,
8361+ {lastMessage: chatMsg.body, lastTime: chatMsg.timestamp}));
8362+ } else {
8363+ return $elm$core$Maybe$Just(
8364+ {
8365+ edPubHex: from,
8366+ lastMessage: chatMsg.body,
8367+ lastTime: chatMsg.timestamp,
8368+ name: A2($elm$core$String$left, 8, from) + '...',
8369+ online: true,
8370+ xPubHex: ''
8371+ });
8372+ }
8373+ },
8374+ dict);
8375+ }),
8376+ model.contacts,
8377+ newMessages);
8378+ var updatedMessages = A3(
8379+ $elm$core$List$foldl,
8380+ F2(
8381+ function (_v10, dict) {
8382+ var from = _v10.a;
8383+ var chatMsg = _v10.b;
8384+ var existing = A2(
8385+ $elm$core$Maybe$withDefault,
8386+ _List_Nil,
8387+ A2($elm$core$Dict$get, from, dict));
8388+ return A3(
8389+ $elm$core$Dict$insert,
8390+ from,
8391+ _Utils_ap(
8392+ existing,
8393+ _List_fromArray(
8394+ [chatMsg])),
8395+ dict);
8396+ }),
8397+ model.messages,
8398+ newMessages);
8399+ return _Utils_Tuple2(
8400+ _Utils_update(
8401+ model,
8402+ {contacts: updatedContacts, messages: updatedMessages, seenIds: newSeenIds}),
8403+ ackCmd);
8404+ } else {
8405+ break _v8$2;
8406+ }
8407+ } else {
8408+ if ((_v8.a.a.$ === 'BadStatus') && (_v8.a.a.a === 401)) {
8409+ return _Utils_Tuple2(
8410+ _Utils_update(
8411+ model,
8412+ {
8413+ authToken: '',
8414+ error: $elm$core$Maybe$Just('Session expired, please reconnect'),
8415+ screen: $author$project$Main$SetupScreen
8416+ }),
8417+ $elm$core$Platform$Cmd$none);
8418+ } else {
8419+ break _v8$2;
8420+ }
8421+ }
8422+ }
8423+ return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
8424+ case 'GotAck':
8425+ return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
8426+ case 'AddContact':
8427+ if ($elm$core$String$isEmpty(model.addIdentity)) {
8428+ return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
8429+ } else {
8430+ var _v13 = $author$project$Main$parseIdentity(model.addIdentity);
8431+ if (_v13.$ === 'Just') {
8432+ var _v14 = _v13.a;
8433+ var edHex = _v14.a;
8434+ var xHex = _v14.b;
8435+ var name = $elm$core$String$isEmpty(model.addName) ? (A2($elm$core$String$left, 8, edHex) + '...') : model.addName;
8436+ var contact = {edPubHex: edHex, lastMessage: '', lastTime: 0, name: name, online: false, xPubHex: xHex};
8437+ return _Utils_Tuple2(
8438+ _Utils_update(
8439+ model,
8440+ {
8441+ addIdentity: '',
8442+ addName: '',
8443+ contacts: A3($elm$core$Dict$insert, edHex, contact, model.contacts),
8444+ screen: $author$project$Main$ContactsScreen
8445+ }),
8446+ A2($author$project$Main$lookupPresence, model.serverUrl, edHex));
8447+ } else {
8448+ return _Utils_Tuple2(
8449+ _Utils_update(
8450+ model,
8451+ {
8452+ error: $elm$core$Maybe$Just('Invalid identity. Expected: <ed25519_hex>.<x25519_hex>')
8453+ }),
8454+ $elm$core$Platform$Cmd$none);
8455+ }
8456+ }
8457+ case 'GotLookup':
8458+ var result = msg.a;
8459+ if (result.$ === 'Ok') {
8460+ var resp = result.a;
8461+ return _Utils_Tuple2(
8462+ _Utils_update(
8463+ model,
8464+ {
8465+ contacts: A3(
8466+ $elm$core$Dict$update,
8467+ resp.pubkey,
8468+ $elm$core$Maybe$map(
8469+ function (c) {
8470+ return _Utils_update(
8471+ c,
8472+ {online: resp.online});
8473+ }),
8474+ model.contacts)
8475+ }),
8476+ $elm$core$Platform$Cmd$none);
8477+ } else {
8478+ return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none);
8479+ }
8480+ case 'Navigate':
8481+ var screen = msg.a;
8482+ return _Utils_Tuple2(
8483+ _Utils_update(
8484+ model,
8485+ {screen: screen}),
8486+ $elm$core$Platform$Cmd$none);
8487+ case 'OpenChat':
8488+ var edPubHex = msg.a;
8489+ return _Utils_Tuple2(
8490+ _Utils_update(
8491+ model,
8492+ {activeChat: edPubHex, draft: '', screen: $author$project$Main$ChatScreen}),
8493+ $elm$core$Platform$Cmd$none);
8494+ case 'UpdateDraft':
8495+ var text = msg.a;
8496+ return _Utils_Tuple2(
8497+ _Utils_update(
8498+ model,
8499+ {draft: text}),
8500+ $elm$core$Platform$Cmd$none);
8501+ case 'UpdateServerUrl':
8502+ var text = msg.a;
8503+ return _Utils_Tuple2(
8504+ _Utils_update(
8505+ model,
8506+ {serverUrl: text}),
8507+ $elm$core$Platform$Cmd$none);
8508+ case 'UpdateAddIdentity':
8509+ var text = msg.a;
8510+ return _Utils_Tuple2(
8511+ _Utils_update(
8512+ model,
8513+ {addIdentity: text}),
8514+ $elm$core$Platform$Cmd$none);
8515+ case 'UpdateAddName':
8516+ var text = msg.a;
8517+ return _Utils_Tuple2(
8518+ _Utils_update(
8519+ model,
8520+ {addName: text}),
8521+ $elm$core$Platform$Cmd$none);
8522+ case 'UpdateDisplayName':
8523+ var text = msg.a;
8524+ return _Utils_Tuple2(
8525+ _Utils_update(
8526+ model,
8527+ {displayName: text}),
8528+ $elm$core$Platform$Cmd$none);
8529+ default:
8530+ return _Utils_Tuple2(
8531+ _Utils_update(
8532+ model,
8533+ {error: $elm$core$Maybe$Nothing}),
8534+ $elm$core$Platform$Cmd$none);
8535+ }
8536+ });
8537+var $lynxjs_elm$ui$Lynx$Attributes$Column = {$: 'Column'};
8538+var $lynxjs_elm$virtual_dom$VirtualDom$style = _VirtualDom_style;
8539+var $lynxjs_elm$ui$Lynx$Attributes$style = $lynxjs_elm$virtual_dom$VirtualDom$style;
8540+var $lynxjs_elm$ui$Lynx$Attributes$backgroundColor = $lynxjs_elm$ui$Lynx$Attributes$style('backgroundColor');
8541+var $lynxjs_elm$ui$Lynx$Attributes$Center = {$: 'Center'};
8542+var $author$project$Main$DismissError = {$: 'DismissError'};
8543+var $lynxjs_elm$ui$Lynx$Attributes$Row = {$: 'Row'};
8544+var $lynxjs_elm$ui$Lynx$Attributes$alignmentToString = function (a) {
8545+ switch (a.$) {
8546+ case 'Start':
8547+ return 'flex-start';
8548+ case 'Center':
8549+ return 'center';
8550+ case 'End':
8551+ return 'flex-end';
8552+ case 'SpaceBetween':
8553+ return 'space-between';
8554+ case 'SpaceAround':
8555+ return 'space-around';
8556+ case 'SpaceEvenly':
8557+ return 'space-evenly';
8558+ case 'Stretch':
8559+ return 'stretch';
8560+ default:
8561+ return 'baseline';
8562+ }
8563+};
8564+var $lynxjs_elm$ui$Lynx$Attributes$alignItems = function (a) {
8565+ return A2(
8566+ $lynxjs_elm$ui$Lynx$Attributes$style,
8567+ 'alignItems',
8568+ $lynxjs_elm$ui$Lynx$Attributes$alignmentToString(a));
8569+};
8570+var $lynxjs_elm$ui$Lynx$Attributes$color = $lynxjs_elm$ui$Lynx$Attributes$style('color');
8571+var $lynxjs_elm$ui$Lynx$Attributes$intStyle = F2(
8572+ function (key, val) {
8573+ return A2(
8574+ $lynxjs_elm$virtual_dom$VirtualDom$style,
8575+ key,
8576+ $elm$core$String$fromInt(val));
8577+ });
8578+var $lynxjs_elm$ui$Lynx$Attributes$flex = $lynxjs_elm$ui$Lynx$Attributes$intStyle('flex');
8579+var $lynxjs_elm$ui$Lynx$Attributes$flexDirection = function (d) {
8580+ return A2(
8581+ $lynxjs_elm$ui$Lynx$Attributes$style,
8582+ 'flexDirection',
8583+ function () {
8584+ switch (d.$) {
8585+ case 'Row':
8586+ return 'row';
8587+ case 'Column':
8588+ return 'column';
8589+ case 'RowReverse':
8590+ return 'row-reverse';
8591+ default:
8592+ return 'column-reverse';
8593+ }
8594+ }());
8595+};
8596+var $lynxjs_elm$ui$Lynx$Attributes$pxStyle = F2(
8597+ function (key, val) {
8598+ return A2(
8599+ $lynxjs_elm$virtual_dom$VirtualDom$style,
8600+ key,
8601+ $elm$core$String$fromInt(val) + 'px');
8602+ });
8603+var $lynxjs_elm$ui$Lynx$Attributes$fontSize = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('fontSize');
8604+var $lynxjs_elm$virtual_dom$VirtualDom$Normal = function (a) {
8605+ return {$: 'Normal', a: a};
8606+};
8607+var $lynxjs_elm$virtual_dom$VirtualDom$on = _VirtualDom_on;
8608+var $lynxjs_elm$ui$Lynx$Events$onTap = function (msg) {
8609+ return A2(
8610+ $lynxjs_elm$virtual_dom$VirtualDom$on,
8611+ 'tap',
8612+ $lynxjs_elm$virtual_dom$VirtualDom$Normal(
8613+ $elm$json$Json$Decode$succeed(msg)));
8614+};
8615+var $lynxjs_elm$ui$Lynx$Attributes$paddingBottom = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('paddingBottom');
8616+var $lynxjs_elm$ui$Lynx$Attributes$paddingLeft = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('paddingLeft');
8617+var $lynxjs_elm$ui$Lynx$Attributes$paddingRight = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('paddingRight');
8618+var $lynxjs_elm$ui$Lynx$Attributes$paddingTop = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('paddingTop');
8619+var $lynxjs_elm$virtual_dom$VirtualDom$node = function (tag) {
8620+ return _VirtualDom_node(
8621+ _VirtualDom_noScript(tag));
8622+};
8623+var $lynxjs_elm$ui$Lynx$text = $lynxjs_elm$virtual_dom$VirtualDom$node('text');
8624+var $lynxjs_elm$virtual_dom$VirtualDom$text = _VirtualDom_text;
8625+var $lynxjs_elm$ui$Lynx$textContent = $lynxjs_elm$virtual_dom$VirtualDom$text;
8626+var $lynxjs_elm$ui$Lynx$view = $lynxjs_elm$virtual_dom$VirtualDom$node('view');
8627+var $author$project$Main$errorBanner = function (err) {
8628+ return A2(
8629+ $lynxjs_elm$ui$Lynx$view,
8630+ _List_fromArray(
8631+ [
8632+ $lynxjs_elm$ui$Lynx$Events$onTap($author$project$Main$DismissError),
8633+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#3d1114'),
8634+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(10),
8635+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(10),
8636+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(16),
8637+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(16),
8638+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
8639+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center)
8640+ ]),
8641+ _List_fromArray(
8642+ [
8643+ A2(
8644+ $lynxjs_elm$ui$Lynx$text,
8645+ _List_fromArray(
8646+ [
8647+ $lynxjs_elm$ui$Lynx$Attributes$color('#f85149'),
8648+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(14),
8649+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
8650+ ]),
8651+ _List_fromArray(
8652+ [
8653+ $lynxjs_elm$ui$Lynx$textContent(err)
8654+ ])),
8655+ A2(
8656+ $lynxjs_elm$ui$Lynx$text,
8657+ _List_fromArray(
8658+ [
8659+ $lynxjs_elm$ui$Lynx$Attributes$color('#f85149'),
8660+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16)
8661+ ]),
8662+ _List_fromArray(
8663+ [
8664+ $lynxjs_elm$ui$Lynx$textContent('x')
8665+ ]))
8666+ ]));
8667+};
8668+var $author$project$Main$AddContact = {$: 'AddContact'};
8669+var $lynxjs_elm$ui$Lynx$Attributes$Bold = {$: 'Bold'};
8670+var $author$project$Main$Navigate = function (a) {
8671+ return {$: 'Navigate', a: a};
8672+};
8673+var $author$project$Main$UpdateAddIdentity = function (a) {
8674+ return {$: 'UpdateAddIdentity', a: a};
8675+};
8676+var $author$project$Main$UpdateAddName = function (a) {
8677+ return {$: 'UpdateAddName', a: a};
8678+};
8679+var $lynxjs_elm$ui$Lynx$Attributes$marginBottom = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('marginBottom');
8680+var $author$project$Main$fieldLabel = function (text) {
8681+ return A2(
8682+ $lynxjs_elm$ui$Lynx$text,
8683+ _List_fromArray(
8684+ [
8685+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
8686+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(13),
8687+ $lynxjs_elm$ui$Lynx$Attributes$marginBottom(6)
8688+ ]),
8689+ _List_fromArray(
8690+ [
8691+ $lynxjs_elm$ui$Lynx$textContent(text)
8692+ ]));
8693+};
8694+var $lynxjs_elm$ui$Lynx$Attributes$fontWeight = function (w) {
8695+ return A2(
8696+ $lynxjs_elm$ui$Lynx$Attributes$style,
8697+ 'fontWeight',
8698+ function () {
8699+ if (w.$ === 'Normal') {
8700+ return 'normal';
8701+ } else {
8702+ return 'bold';
8703+ }
8704+ }());
8705+};
8706+var $lynxjs_elm$ui$Lynx$Attributes$padding = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('padding');
8707+var $lynxjs_elm$ui$Lynx$Attributes$borderRadius = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('borderRadius');
8708+var $author$project$Main$primaryButton = F2(
8709+ function (msg, text) {
8710+ return A2(
8711+ $lynxjs_elm$ui$Lynx$view,
8712+ _List_fromArray(
8713+ [
8714+ $lynxjs_elm$ui$Lynx$Events$onTap(msg),
8715+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#58a6ff'),
8716+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(8),
8717+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(14),
8718+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(14),
8719+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center)
8720+ ]),
8721+ _List_fromArray(
8722+ [
8723+ A2(
8724+ $lynxjs_elm$ui$Lynx$text,
8725+ _List_fromArray(
8726+ [
8727+ $lynxjs_elm$ui$Lynx$Attributes$color('#ffffff'),
8728+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16),
8729+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold)
8730+ ]),
8731+ _List_fromArray(
8732+ [
8733+ $lynxjs_elm$ui$Lynx$textContent(text)
8734+ ]))
8735+ ]));
8736+ });
8737+var $lynxjs_elm$ui$Lynx$Attributes$height = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('height');
8738+var $author$project$Main$spacer = function (px) {
8739+ return A2(
8740+ $lynxjs_elm$ui$Lynx$view,
8741+ _List_fromArray(
8742+ [
8743+ $lynxjs_elm$ui$Lynx$Attributes$height(px)
8744+ ]),
8745+ _List_Nil);
8746+};
8747+var $lynxjs_elm$ui$Lynx$Attributes$borderColor = $lynxjs_elm$ui$Lynx$Attributes$style('borderColor');
8748+var $lynxjs_elm$ui$Lynx$Attributes$borderWidth = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('borderWidth');
8749+var $lynxjs_elm$ui$Lynx$input = $lynxjs_elm$virtual_dom$VirtualDom$node('input');
8750+var $elm$json$Json$Decode$at = F2(
8751+ function (fields, decoder) {
8752+ return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields);
8753+ });
8754+var $lynxjs_elm$ui$Lynx$Events$onInput = function (tagger) {
8755+ return A2(
8756+ $lynxjs_elm$virtual_dom$VirtualDom$on,
8757+ 'input',
8758+ $lynxjs_elm$virtual_dom$VirtualDom$Normal(
8759+ A2(
8760+ $elm$json$Json$Decode$map,
8761+ tagger,
8762+ A2(
8763+ $elm$json$Json$Decode$at,
8764+ _List_fromArray(
8765+ ['detail', 'value']),
8766+ $elm$json$Json$Decode$string))));
8767+};
8768+var $lynxjs_elm$virtual_dom$VirtualDom$attribute = F2(
8769+ function (key, value) {
8770+ return A2(
8771+ _VirtualDom_attribute,
8772+ _VirtualDom_noOnOrFormAction(key),
8773+ _VirtualDom_noJavaScriptOrHtmlUri(value));
8774+ });
8775+var $lynxjs_elm$ui$Lynx$Attributes$attr = $lynxjs_elm$virtual_dom$VirtualDom$attribute;
8776+var $lynxjs_elm$ui$Lynx$Attributes$placeholder = $lynxjs_elm$ui$Lynx$Attributes$attr('placeholder');
8777+var $lynxjs_elm$ui$Lynx$Attributes$value = $lynxjs_elm$ui$Lynx$Attributes$attr('value');
8778+var $author$project$Main$textInput = function (config) {
8779+ return A2(
8780+ $lynxjs_elm$ui$Lynx$input,
8781+ _List_fromArray(
8782+ [
8783+ $lynxjs_elm$ui$Lynx$Events$onInput(config.onInput),
8784+ $lynxjs_elm$ui$Lynx$Attributes$value(config.value),
8785+ $lynxjs_elm$ui$Lynx$Attributes$placeholder(config.placeholder),
8786+ $lynxjs_elm$ui$Lynx$Attributes$height(44),
8787+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16),
8788+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
8789+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#161b22'),
8790+ $lynxjs_elm$ui$Lynx$Attributes$borderWidth(1),
8791+ $lynxjs_elm$ui$Lynx$Attributes$borderColor('#30363d'),
8792+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(8),
8793+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(12)
8794+ ]),
8795+ _List_Nil);
8796+};
8797+var $author$project$Main$viewAddContact = function (model) {
8798+ return A2(
8799+ $lynxjs_elm$ui$Lynx$view,
8800+ _List_fromArray(
8801+ [
8802+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Column),
8803+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
8804+ ]),
8805+ _List_fromArray(
8806+ [
8807+ A2(
8808+ $lynxjs_elm$ui$Lynx$view,
8809+ _List_fromArray(
8810+ [
8811+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
8812+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
8813+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(12),
8814+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(12),
8815+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(16),
8816+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(16),
8817+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#161b22')
8818+ ]),
8819+ _List_fromArray(
8820+ [
8821+ A2(
8822+ $lynxjs_elm$ui$Lynx$view,
8823+ _List_fromArray(
8824+ [
8825+ $lynxjs_elm$ui$Lynx$Events$onTap(
8826+ $author$project$Main$Navigate($author$project$Main$ContactsScreen)),
8827+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(12),
8828+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(4),
8829+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(4)
8830+ ]),
8831+ _List_fromArray(
8832+ [
8833+ A2(
8834+ $lynxjs_elm$ui$Lynx$text,
8835+ _List_fromArray(
8836+ [
8837+ $lynxjs_elm$ui$Lynx$Attributes$color('#58a6ff'),
8838+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(20)
8839+ ]),
8840+ _List_fromArray(
8841+ [
8842+ $lynxjs_elm$ui$Lynx$textContent('<')
8843+ ]))
8844+ ])),
8845+ A2(
8846+ $lynxjs_elm$ui$Lynx$text,
8847+ _List_fromArray(
8848+ [
8849+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
8850+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(18),
8851+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold)
8852+ ]),
8853+ _List_fromArray(
8854+ [
8855+ $lynxjs_elm$ui$Lynx$textContent('Add Contact')
8856+ ]))
8857+ ])),
8858+ A2(
8859+ $lynxjs_elm$ui$Lynx$view,
8860+ _List_fromArray(
8861+ [
8862+ $lynxjs_elm$ui$Lynx$Attributes$padding(24),
8863+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Column)
8864+ ]),
8865+ _List_fromArray(
8866+ [
8867+ $author$project$Main$fieldLabel('Identity string'),
8868+ A2(
8869+ $lynxjs_elm$ui$Lynx$text,
8870+ _List_fromArray(
8871+ [
8872+ $lynxjs_elm$ui$Lynx$Attributes$color('#6e7681'),
8873+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(12),
8874+ $lynxjs_elm$ui$Lynx$Attributes$marginBottom(8)
8875+ ]),
8876+ _List_fromArray(
8877+ [
8878+ $lynxjs_elm$ui$Lynx$textContent('Paste the <ed25519>.<x25519> identity from your contact')
8879+ ])),
8880+ $author$project$Main$textInput(
8881+ {onInput: $author$project$Main$UpdateAddIdentity, placeholder: 'abc123...def456.ghi789...jkl012', value: model.addIdentity}),
8882+ $author$project$Main$spacer(20),
8883+ $author$project$Main$fieldLabel('Name'),
8884+ $author$project$Main$textInput(
8885+ {onInput: $author$project$Main$UpdateAddName, placeholder: 'Display name (optional)', value: model.addName}),
8886+ $author$project$Main$spacer(32),
8887+ A2($author$project$Main$primaryButton, $author$project$Main$AddContact, 'Add Contact')
8888+ ]))
8889+ ]));
8890+};
8891+var $author$project$Main$PrepareSend = {$: 'PrepareSend'};
8892+var $lynxjs_elm$ui$Lynx$Attributes$TextCenter = {$: 'TextCenter'};
8893+var $author$project$Main$UpdateDraft = function (a) {
8894+ return {$: 'UpdateDraft', a: a};
8895+};
8896+var $lynxjs_elm$ui$Lynx$Attributes$Vertical = {$: 'Vertical'};
8897+var $lynxjs_elm$ui$Lynx$Attributes$justifyContent = function (a) {
8898+ return A2(
8899+ $lynxjs_elm$ui$Lynx$Attributes$style,
8900+ 'justifyContent',
8901+ $lynxjs_elm$ui$Lynx$Attributes$alignmentToString(a));
8902+};
8903+var $lynxjs_elm$ui$Lynx$Attributes$marginLeft = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('marginLeft');
8904+var $lynxjs_elm$ui$Lynx$Attributes$scrollDirection = function (d) {
8905+ return A2(
8906+ $lynxjs_elm$ui$Lynx$Attributes$attr,
8907+ 'scroll-direction',
8908+ function () {
8909+ if (d.$ === 'Vertical') {
8910+ return 'vertical';
8911+ } else {
8912+ return 'horizontal';
8913+ }
8914+ }());
8915+};
8916+var $lynxjs_elm$ui$Lynx$scrollView = $lynxjs_elm$virtual_dom$VirtualDom$node('scroll-view');
8917+var $lynxjs_elm$ui$Lynx$Attributes$textAlign = function (a) {
8918+ return A2(
8919+ $lynxjs_elm$ui$Lynx$Attributes$style,
8920+ 'textAlign',
8921+ function () {
8922+ switch (a.$) {
8923+ case 'Left':
8924+ return 'left';
8925+ case 'Right':
8926+ return 'right';
8927+ case 'TextCenter':
8928+ return 'center';
8929+ default:
8930+ return 'justify';
8931+ }
8932+ }());
8933+};
8934+var $elm$core$String$right = F2(
8935+ function (n, string) {
8936+ return (n < 1) ? '' : A3(
8937+ $elm$core$String$slice,
8938+ -n,
8939+ $elm$core$String$length(string),
8940+ string);
8941+ });
8942+var $author$project$Main$truncateKey = function (key) {
8943+ return ($elm$core$String$length(key) > 16) ? (A2($elm$core$String$left, 8, key) + ('...' + A2($elm$core$String$right, 8, key))) : key;
8944+};
8945+var $lynxjs_elm$ui$Lynx$Attributes$End = {$: 'End'};
8946+var $lynxjs_elm$ui$Lynx$Attributes$Start = {$: 'Start'};
8947+var $lynxjs_elm$ui$Lynx$Attributes$maxWidth = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('maxWidth');
8948+var $author$project$Main$viewMessage = function (chatMsg) {
8949+ return A2(
8950+ $lynxjs_elm$ui$Lynx$view,
8951+ _List_fromArray(
8952+ [
8953+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
8954+ $lynxjs_elm$ui$Lynx$Attributes$justifyContent(
8955+ chatMsg.outgoing ? $lynxjs_elm$ui$Lynx$Attributes$End : $lynxjs_elm$ui$Lynx$Attributes$Start),
8956+ $lynxjs_elm$ui$Lynx$Attributes$marginBottom(6)
8957+ ]),
8958+ _List_fromArray(
8959+ [
8960+ A2(
8961+ $lynxjs_elm$ui$Lynx$view,
8962+ _List_fromArray(
8963+ [
8964+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor(
8965+ chatMsg.outgoing ? '#1a3a5c' : '#21262d'),
8966+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(16),
8967+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(10),
8968+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(10),
8969+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(14),
8970+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(14),
8971+ $lynxjs_elm$ui$Lynx$Attributes$maxWidth(280)
8972+ ]),
8973+ _List_fromArray(
8974+ [
8975+ A2(
8976+ $lynxjs_elm$ui$Lynx$text,
8977+ _List_fromArray(
8978+ [
8979+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
8980+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(15)
8981+ ]),
8982+ _List_fromArray(
8983+ [
8984+ $lynxjs_elm$ui$Lynx$textContent(chatMsg.body)
8985+ ]))
8986+ ]))
8987+ ]));
8988+};
8989+var $lynxjs_elm$ui$Lynx$Attributes$width = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('width');
8990+var $author$project$Main$viewChat = function (model) {
8991+ var contactName = A2(
8992+ $elm$core$Maybe$withDefault,
8993+ $author$project$Main$truncateKey(model.activeChat),
8994+ A2(
8995+ $elm$core$Maybe$map,
8996+ function ($) {
8997+ return $.name;
8998+ },
8999+ A2($elm$core$Dict$get, model.activeChat, model.contacts)));
9000+ var chatMessages = A2(
9001+ $elm$core$Maybe$withDefault,
9002+ _List_Nil,
9003+ A2($elm$core$Dict$get, model.activeChat, model.messages));
9004+ return A2(
9005+ $lynxjs_elm$ui$Lynx$view,
9006+ _List_fromArray(
9007+ [
9008+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Column),
9009+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
9010+ ]),
9011+ _List_fromArray(
9012+ [
9013+ A2(
9014+ $lynxjs_elm$ui$Lynx$view,
9015+ _List_fromArray(
9016+ [
9017+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
9018+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9019+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(12),
9020+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(12),
9021+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(16),
9022+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(16),
9023+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#161b22')
9024+ ]),
9025+ _List_fromArray(
9026+ [
9027+ A2(
9028+ $lynxjs_elm$ui$Lynx$view,
9029+ _List_fromArray(
9030+ [
9031+ $lynxjs_elm$ui$Lynx$Events$onTap(
9032+ $author$project$Main$Navigate($author$project$Main$ContactsScreen)),
9033+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(12),
9034+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(4),
9035+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(4)
9036+ ]),
9037+ _List_fromArray(
9038+ [
9039+ A2(
9040+ $lynxjs_elm$ui$Lynx$text,
9041+ _List_fromArray(
9042+ [
9043+ $lynxjs_elm$ui$Lynx$Attributes$color('#58a6ff'),
9044+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(20)
9045+ ]),
9046+ _List_fromArray(
9047+ [
9048+ $lynxjs_elm$ui$Lynx$textContent('<')
9049+ ]))
9050+ ])),
9051+ A2(
9052+ $lynxjs_elm$ui$Lynx$text,
9053+ _List_fromArray(
9054+ [
9055+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
9056+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(18),
9057+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold),
9058+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
9059+ ]),
9060+ _List_fromArray(
9061+ [
9062+ $lynxjs_elm$ui$Lynx$textContent(contactName)
9063+ ]))
9064+ ])),
9065+ A2(
9066+ $lynxjs_elm$ui$Lynx$scrollView,
9067+ _List_fromArray(
9068+ [
9069+ $lynxjs_elm$ui$Lynx$Attributes$flex(1),
9070+ $lynxjs_elm$ui$Lynx$Attributes$scrollDirection($lynxjs_elm$ui$Lynx$Attributes$Vertical),
9071+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(12),
9072+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(12),
9073+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(16),
9074+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(16)
9075+ ]),
9076+ $elm$core$List$isEmpty(chatMessages) ? _List_fromArray(
9077+ [
9078+ A2(
9079+ $lynxjs_elm$ui$Lynx$view,
9080+ _List_fromArray(
9081+ [
9082+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9083+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(80)
9084+ ]),
9085+ _List_fromArray(
9086+ [
9087+ A2(
9088+ $lynxjs_elm$ui$Lynx$text,
9089+ _List_fromArray(
9090+ [
9091+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9092+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(14),
9093+ $lynxjs_elm$ui$Lynx$Attributes$textAlign($lynxjs_elm$ui$Lynx$Attributes$TextCenter)
9094+ ]),
9095+ _List_fromArray(
9096+ [
9097+ $lynxjs_elm$ui$Lynx$textContent('No messages yet. Say hello!')
9098+ ]))
9099+ ]))
9100+ ]) : A2($elm$core$List$map, $author$project$Main$viewMessage, chatMessages)),
9101+ A2(
9102+ $lynxjs_elm$ui$Lynx$view,
9103+ _List_fromArray(
9104+ [
9105+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
9106+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9107+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(8),
9108+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(8),
9109+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(12),
9110+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(12),
9111+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#161b22')
9112+ ]),
9113+ _List_fromArray(
9114+ [
9115+ A2(
9116+ $lynxjs_elm$ui$Lynx$input,
9117+ _List_fromArray(
9118+ [
9119+ $lynxjs_elm$ui$Lynx$Events$onInput($author$project$Main$UpdateDraft),
9120+ $lynxjs_elm$ui$Lynx$Attributes$value(model.draft),
9121+ $lynxjs_elm$ui$Lynx$Attributes$placeholder('Message...'),
9122+ $lynxjs_elm$ui$Lynx$Attributes$flex(1),
9123+ $lynxjs_elm$ui$Lynx$Attributes$height(40),
9124+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16),
9125+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
9126+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#0d1117'),
9127+ $lynxjs_elm$ui$Lynx$Attributes$borderWidth(1),
9128+ $lynxjs_elm$ui$Lynx$Attributes$borderColor('#30363d'),
9129+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(20),
9130+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(16)
9131+ ]),
9132+ _List_Nil),
9133+ A2(
9134+ $lynxjs_elm$ui$Lynx$view,
9135+ _List_fromArray(
9136+ [
9137+ $lynxjs_elm$ui$Lynx$Events$onTap($author$project$Main$PrepareSend),
9138+ $lynxjs_elm$ui$Lynx$Attributes$marginLeft(8),
9139+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor(
9140+ (model.sending || $elm$core$String$isEmpty(
9141+ $elm$core$String$trim(model.draft))) ? '#30363d' : '#58a6ff'),
9142+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(20),
9143+ $lynxjs_elm$ui$Lynx$Attributes$width(40),
9144+ $lynxjs_elm$ui$Lynx$Attributes$height(40),
9145+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9146+ $lynxjs_elm$ui$Lynx$Attributes$justifyContent($lynxjs_elm$ui$Lynx$Attributes$Center)
9147+ ]),
9148+ _List_fromArray(
9149+ [
9150+ A2(
9151+ $lynxjs_elm$ui$Lynx$text,
9152+ _List_fromArray(
9153+ [
9154+ $lynxjs_elm$ui$Lynx$Attributes$color('#ffffff'),
9155+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16),
9156+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold)
9157+ ]),
9158+ _List_fromArray(
9159+ [
9160+ $lynxjs_elm$ui$Lynx$textContent('^')
9161+ ]))
9162+ ]))
9163+ ]))
9164+ ]));
9165+};
9166+var $author$project$Main$AddContactScreen = {$: 'AddContactScreen'};
9167+var $elm$core$Dict$isEmpty = function (dict) {
9168+ if (dict.$ === 'RBEmpty_elm_builtin') {
9169+ return true;
9170+ } else {
9171+ return false;
9172+ }
9173+};
9174+var $lynxjs_elm$ui$Lynx$Attributes$marginRight = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('marginRight');
9175+var $elm$core$List$sortBy = _List_sortBy;
9176+var $elm$core$Dict$values = function (dict) {
9177+ return A3(
9178+ $elm$core$Dict$foldr,
9179+ F3(
9180+ function (key, value, valueList) {
9181+ return A2($elm$core$List$cons, value, valueList);
9182+ }),
9183+ _List_Nil,
9184+ dict);
9185+};
9186+var $author$project$Main$OpenChat = function (a) {
9187+ return {$: 'OpenChat', a: a};
9188+};
9189+var $lynxjs_elm$ui$Lynx$Attributes$marginTop = $lynxjs_elm$ui$Lynx$Attributes$pxStyle('marginTop');
9190+var $elm$core$String$toUpper = _String_toUpper;
9191+var $author$project$Main$viewContactRow = function (contact) {
9192+ return A2(
9193+ $lynxjs_elm$ui$Lynx$view,
9194+ _List_fromArray(
9195+ [
9196+ $lynxjs_elm$ui$Lynx$Events$onTap(
9197+ $author$project$Main$OpenChat(contact.edPubHex)),
9198+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
9199+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9200+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(14),
9201+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(14),
9202+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(20),
9203+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(20),
9204+ $lynxjs_elm$ui$Lynx$Attributes$borderColor('#21262d'),
9205+ $lynxjs_elm$ui$Lynx$Attributes$borderWidth(1)
9206+ ]),
9207+ _List_fromArray(
9208+ [
9209+ A2(
9210+ $lynxjs_elm$ui$Lynx$view,
9211+ _List_fromArray(
9212+ [
9213+ $lynxjs_elm$ui$Lynx$Attributes$width(44),
9214+ $lynxjs_elm$ui$Lynx$Attributes$height(44),
9215+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(22),
9216+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#30363d'),
9217+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9218+ $lynxjs_elm$ui$Lynx$Attributes$justifyContent($lynxjs_elm$ui$Lynx$Attributes$Center),
9219+ $lynxjs_elm$ui$Lynx$Attributes$marginRight(12)
9220+ ]),
9221+ _List_fromArray(
9222+ [
9223+ A2(
9224+ $lynxjs_elm$ui$Lynx$text,
9225+ _List_fromArray(
9226+ [
9227+ $lynxjs_elm$ui$Lynx$Attributes$color('#58a6ff'),
9228+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(18),
9229+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold)
9230+ ]),
9231+ _List_fromArray(
9232+ [
9233+ $lynxjs_elm$ui$Lynx$textContent(
9234+ $elm$core$String$toUpper(
9235+ A2($elm$core$String$left, 1, contact.name)))
9236+ ]))
9237+ ])),
9238+ A2(
9239+ $lynxjs_elm$ui$Lynx$view,
9240+ _List_fromArray(
9241+ [
9242+ $lynxjs_elm$ui$Lynx$Attributes$flex(1),
9243+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Column)
9244+ ]),
9245+ _List_fromArray(
9246+ [
9247+ A2(
9248+ $lynxjs_elm$ui$Lynx$view,
9249+ _List_fromArray(
9250+ [
9251+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
9252+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center)
9253+ ]),
9254+ _List_fromArray(
9255+ [
9256+ A2(
9257+ $lynxjs_elm$ui$Lynx$text,
9258+ _List_fromArray(
9259+ [
9260+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
9261+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16),
9262+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold),
9263+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
9264+ ]),
9265+ _List_fromArray(
9266+ [
9267+ $lynxjs_elm$ui$Lynx$textContent(contact.name)
9268+ ])),
9269+ contact.online ? A2(
9270+ $lynxjs_elm$ui$Lynx$view,
9271+ _List_fromArray(
9272+ [
9273+ $lynxjs_elm$ui$Lynx$Attributes$width(8),
9274+ $lynxjs_elm$ui$Lynx$Attributes$height(8),
9275+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(4),
9276+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#3fb950'),
9277+ $lynxjs_elm$ui$Lynx$Attributes$marginLeft(8)
9278+ ]),
9279+ _List_Nil) : A2($lynxjs_elm$ui$Lynx$view, _List_Nil, _List_Nil)
9280+ ])),
9281+ $elm$core$String$isEmpty(contact.lastMessage) ? A2($lynxjs_elm$ui$Lynx$view, _List_Nil, _List_Nil) : A2(
9282+ $lynxjs_elm$ui$Lynx$text,
9283+ _List_fromArray(
9284+ [
9285+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9286+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(14),
9287+ $lynxjs_elm$ui$Lynx$Attributes$marginTop(2)
9288+ ]),
9289+ _List_fromArray(
9290+ [
9291+ $lynxjs_elm$ui$Lynx$textContent(
9292+ A2($elm$core$String$left, 50, contact.lastMessage))
9293+ ]))
9294+ ]))
9295+ ]));
9296+};
9297+var $author$project$Main$viewContacts = function (model) {
9298+ return A2(
9299+ $lynxjs_elm$ui$Lynx$view,
9300+ _List_fromArray(
9301+ [
9302+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Column),
9303+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
9304+ ]),
9305+ _List_fromArray(
9306+ [
9307+ A2(
9308+ $lynxjs_elm$ui$Lynx$view,
9309+ _List_fromArray(
9310+ [
9311+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
9312+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9313+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(16),
9314+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(16),
9315+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(20),
9316+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(20),
9317+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#161b22')
9318+ ]),
9319+ _List_fromArray(
9320+ [
9321+ A2(
9322+ $lynxjs_elm$ui$Lynx$text,
9323+ _List_fromArray(
9324+ [
9325+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(20),
9326+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold),
9327+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
9328+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
9329+ ]),
9330+ _List_fromArray(
9331+ [
9332+ $lynxjs_elm$ui$Lynx$textContent('Messages')
9333+ ])),
9334+ A2(
9335+ $lynxjs_elm$ui$Lynx$view,
9336+ _List_fromArray(
9337+ [
9338+ $lynxjs_elm$ui$Lynx$Events$onTap(
9339+ $author$project$Main$Navigate($author$project$Main$AddContactScreen)),
9340+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(12),
9341+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(4)
9342+ ]),
9343+ _List_fromArray(
9344+ [
9345+ A2(
9346+ $lynxjs_elm$ui$Lynx$text,
9347+ _List_fromArray(
9348+ [
9349+ $lynxjs_elm$ui$Lynx$Attributes$color('#58a6ff'),
9350+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(28)
9351+ ]),
9352+ _List_fromArray(
9353+ [
9354+ $lynxjs_elm$ui$Lynx$textContent('+')
9355+ ]))
9356+ ]))
9357+ ])),
9358+ $elm$core$Dict$isEmpty(model.contacts) ? A2(
9359+ $lynxjs_elm$ui$Lynx$view,
9360+ _List_fromArray(
9361+ [
9362+ $lynxjs_elm$ui$Lynx$Attributes$flex(1),
9363+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center),
9364+ $lynxjs_elm$ui$Lynx$Attributes$justifyContent($lynxjs_elm$ui$Lynx$Attributes$Center),
9365+ $lynxjs_elm$ui$Lynx$Attributes$padding(40)
9366+ ]),
9367+ _List_fromArray(
9368+ [
9369+ A2(
9370+ $lynxjs_elm$ui$Lynx$text,
9371+ _List_fromArray(
9372+ [
9373+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9374+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16),
9375+ $lynxjs_elm$ui$Lynx$Attributes$textAlign($lynxjs_elm$ui$Lynx$Attributes$TextCenter)
9376+ ]),
9377+ _List_fromArray(
9378+ [
9379+ $lynxjs_elm$ui$Lynx$textContent('No conversations yet')
9380+ ])),
9381+ $author$project$Main$spacer(8),
9382+ A2(
9383+ $lynxjs_elm$ui$Lynx$text,
9384+ _List_fromArray(
9385+ [
9386+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9387+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(14),
9388+ $lynxjs_elm$ui$Lynx$Attributes$textAlign($lynxjs_elm$ui$Lynx$Attributes$TextCenter)
9389+ ]),
9390+ _List_fromArray(
9391+ [
9392+ $lynxjs_elm$ui$Lynx$textContent('Tap + to add a contact')
9393+ ]))
9394+ ])) : A2(
9395+ $lynxjs_elm$ui$Lynx$scrollView,
9396+ _List_fromArray(
9397+ [
9398+ $lynxjs_elm$ui$Lynx$Attributes$flex(1),
9399+ $lynxjs_elm$ui$Lynx$Attributes$scrollDirection($lynxjs_elm$ui$Lynx$Attributes$Vertical)
9400+ ]),
9401+ A2(
9402+ $elm$core$List$map,
9403+ $author$project$Main$viewContactRow,
9404+ A2(
9405+ $elm$core$List$sortBy,
9406+ function (c) {
9407+ return -c.lastTime;
9408+ },
9409+ $elm$core$Dict$values(model.contacts)))),
9410+ function () {
9411+ var _v0 = model.edPub;
9412+ if (_v0.$ === 'Just') {
9413+ var pub = _v0.a;
9414+ return A2(
9415+ $lynxjs_elm$ui$Lynx$view,
9416+ _List_fromArray(
9417+ [
9418+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(10),
9419+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(10),
9420+ $lynxjs_elm$ui$Lynx$Attributes$paddingLeft(20),
9421+ $lynxjs_elm$ui$Lynx$Attributes$paddingRight(20),
9422+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#161b22'),
9423+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Row),
9424+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center)
9425+ ]),
9426+ _List_fromArray(
9427+ [
9428+ A2(
9429+ $lynxjs_elm$ui$Lynx$view,
9430+ _List_fromArray(
9431+ [
9432+ $lynxjs_elm$ui$Lynx$Attributes$width(8),
9433+ $lynxjs_elm$ui$Lynx$Attributes$height(8),
9434+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(4),
9435+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#3fb950'),
9436+ $lynxjs_elm$ui$Lynx$Attributes$marginRight(8)
9437+ ]),
9438+ _List_Nil),
9439+ A2(
9440+ $lynxjs_elm$ui$Lynx$text,
9441+ _List_fromArray(
9442+ [
9443+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9444+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(11),
9445+ $lynxjs_elm$ui$Lynx$Attributes$flex(1)
9446+ ]),
9447+ _List_fromArray(
9448+ [
9449+ $lynxjs_elm$ui$Lynx$textContent(
9450+ $author$project$Main$truncateKey(
9451+ $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyToHex(pub)))
9452+ ]))
9453+ ]));
9454+ } else {
9455+ return A2($lynxjs_elm$ui$Lynx$view, _List_Nil, _List_Nil);
9456+ }
9457+ }()
9458+ ]));
9459+};
9460+var $author$project$Main$Connect = {$: 'Connect'};
9461+var $author$project$Main$UpdateDisplayName = function (a) {
9462+ return {$: 'UpdateDisplayName', a: a};
9463+};
9464+var $author$project$Main$UpdateServerUrl = function (a) {
9465+ return {$: 'UpdateServerUrl', a: a};
9466+};
9467+var $author$project$Main$disabledButton = function (text) {
9468+ return A2(
9469+ $lynxjs_elm$ui$Lynx$view,
9470+ _List_fromArray(
9471+ [
9472+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#30363d'),
9473+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(8),
9474+ $lynxjs_elm$ui$Lynx$Attributes$paddingTop(14),
9475+ $lynxjs_elm$ui$Lynx$Attributes$paddingBottom(14),
9476+ $lynxjs_elm$ui$Lynx$Attributes$alignItems($lynxjs_elm$ui$Lynx$Attributes$Center)
9477+ ]),
9478+ _List_fromArray(
9479+ [
9480+ A2(
9481+ $lynxjs_elm$ui$Lynx$text,
9482+ _List_fromArray(
9483+ [
9484+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9485+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(16)
9486+ ]),
9487+ _List_fromArray(
9488+ [
9489+ $lynxjs_elm$ui$Lynx$textContent(text)
9490+ ]))
9491+ ]));
9492+};
9493+var $author$project$Main$viewSetup = function (model) {
9494+ var identityStr = function () {
9495+ var _v0 = _Utils_Tuple2(model.edPub, model.xPub);
9496+ if ((_v0.a.$ === 'Just') && (_v0.b.$ === 'Just')) {
9497+ var edP = _v0.a.a;
9498+ var xP = _v0.b.a;
9499+ return $lynxjs_elm$crypto$Crypto$Ed25519$publicKeyToHex(edP) + ('.' + $lynxjs_elm$crypto$Crypto$X25519$publicKeyToHex(xP));
9500+ } else {
9501+ return '';
9502+ }
9503+ }();
9504+ return A2(
9505+ $lynxjs_elm$ui$Lynx$view,
9506+ _List_fromArray(
9507+ [
9508+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Column),
9509+ $lynxjs_elm$ui$Lynx$Attributes$flex(1),
9510+ $lynxjs_elm$ui$Lynx$Attributes$padding(24),
9511+ $lynxjs_elm$ui$Lynx$Attributes$justifyContent($lynxjs_elm$ui$Lynx$Attributes$Center)
9512+ ]),
9513+ _List_fromArray(
9514+ [
9515+ A2(
9516+ $lynxjs_elm$ui$Lynx$text,
9517+ _List_fromArray(
9518+ [
9519+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(36),
9520+ $lynxjs_elm$ui$Lynx$Attributes$fontWeight($lynxjs_elm$ui$Lynx$Attributes$Bold),
9521+ $lynxjs_elm$ui$Lynx$Attributes$color('#58a6ff'),
9522+ $lynxjs_elm$ui$Lynx$Attributes$textAlign($lynxjs_elm$ui$Lynx$Attributes$TextCenter),
9523+ $lynxjs_elm$ui$Lynx$Attributes$marginBottom(8)
9524+ ]),
9525+ _List_fromArray(
9526+ [
9527+ $lynxjs_elm$ui$Lynx$textContent('Skrepka')
9528+ ])),
9529+ A2(
9530+ $lynxjs_elm$ui$Lynx$text,
9531+ _List_fromArray(
9532+ [
9533+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(14),
9534+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9535+ $lynxjs_elm$ui$Lynx$Attributes$textAlign($lynxjs_elm$ui$Lynx$Attributes$TextCenter),
9536+ $lynxjs_elm$ui$Lynx$Attributes$marginBottom(32)
9537+ ]),
9538+ _List_fromArray(
9539+ [
9540+ $lynxjs_elm$ui$Lynx$textContent('Encrypted messaging, no accounts')
9541+ ])),
9542+ $author$project$Main$fieldLabel('Your identity (share this with contacts)'),
9543+ $elm$core$String$isEmpty(identityStr) ? A2(
9544+ $lynxjs_elm$ui$Lynx$text,
9545+ _List_fromArray(
9546+ [
9547+ $lynxjs_elm$ui$Lynx$Attributes$color('#8b949e'),
9548+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(14),
9549+ $lynxjs_elm$ui$Lynx$Attributes$marginBottom(24)
9550+ ]),
9551+ _List_fromArray(
9552+ [
9553+ $lynxjs_elm$ui$Lynx$textContent('Generating keypair...')
9554+ ])) : A2(
9555+ $lynxjs_elm$ui$Lynx$view,
9556+ _List_fromArray(
9557+ [
9558+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#161b22'),
9559+ $lynxjs_elm$ui$Lynx$Attributes$borderRadius(8),
9560+ $lynxjs_elm$ui$Lynx$Attributes$padding(12),
9561+ $lynxjs_elm$ui$Lynx$Attributes$marginBottom(24)
9562+ ]),
9563+ _List_fromArray(
9564+ [
9565+ A2(
9566+ $lynxjs_elm$ui$Lynx$text,
9567+ _List_fromArray(
9568+ [
9569+ $lynxjs_elm$ui$Lynx$Attributes$color('#c9d1d9'),
9570+ $lynxjs_elm$ui$Lynx$Attributes$fontSize(11)
9571+ ]),
9572+ _List_fromArray(
9573+ [
9574+ $lynxjs_elm$ui$Lynx$textContent(identityStr)
9575+ ]))
9576+ ])),
9577+ $author$project$Main$fieldLabel('Relay server'),
9578+ $author$project$Main$textInput(
9579+ {onInput: $author$project$Main$UpdateServerUrl, placeholder: 'http://relay.example.com:8080', value: model.serverUrl}),
9580+ $author$project$Main$spacer(24),
9581+ $author$project$Main$fieldLabel('Display name (optional)'),
9582+ $author$project$Main$textInput(
9583+ {onInput: $author$project$Main$UpdateDisplayName, placeholder: 'Anonymous', value: model.displayName}),
9584+ $author$project$Main$spacer(32),
9585+ model.connecting ? $author$project$Main$disabledButton('Connecting...') : (_Utils_eq(model.edPriv, $elm$core$Maybe$Nothing) ? $author$project$Main$disabledButton('Generating keys...') : A2($author$project$Main$primaryButton, $author$project$Main$Connect, 'Connect to Server'))
9586+ ]));
9587+};
9588+var $author$project$Main$view = function (model) {
9589+ return A2(
9590+ $lynxjs_elm$ui$Lynx$view,
9591+ _List_fromArray(
9592+ [
9593+ $lynxjs_elm$ui$Lynx$Attributes$flexDirection($lynxjs_elm$ui$Lynx$Attributes$Column),
9594+ $lynxjs_elm$ui$Lynx$Attributes$flex(1),
9595+ $lynxjs_elm$ui$Lynx$Attributes$backgroundColor('#0d1117')
9596+ ]),
9597+ _List_fromArray(
9598+ [
9599+ function () {
9600+ var _v0 = model.error;
9601+ if (_v0.$ === 'Just') {
9602+ var err = _v0.a;
9603+ return $author$project$Main$errorBanner(err);
9604+ } else {
9605+ return A2($lynxjs_elm$ui$Lynx$view, _List_Nil, _List_Nil);
9606+ }
9607+ }(),
9608+ function () {
9609+ var _v1 = model.screen;
9610+ switch (_v1.$) {
9611+ case 'SetupScreen':
9612+ return $author$project$Main$viewSetup(model);
9613+ case 'ContactsScreen':
9614+ return $author$project$Main$viewContacts(model);
9615+ case 'ChatScreen':
9616+ return $author$project$Main$viewChat(model);
9617+ default:
9618+ return $author$project$Main$viewAddContact(model);
9619+ }
9620+ }()
9621+ ]));
9622+};
9623+var $author$project$Main$main = $lynxjs_elm$browser$Browser$element(
9624+ {init: $author$project$Main$init, subscriptions: $author$project$Main$subscriptions, update: $author$project$Main$update, view: $author$project$Main$view});
9625+_Platform_export({'Main':{'init':$author$project$Main$main(
9626+ $elm$json$Json$Decode$succeed(_Utils_Tuple0))(0)}});}(globalThis));