-
-
Save bgoonz/b1b764b1bd5138dc6a7a71480e2a1f27 to your computer and use it in GitHub Desktop.
| if (typeof cptable === "undefined") cptable = {}; | |
| cptable[437] = (function () { | |
| var d = | |
| "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ", | |
| D = [], | |
| e = {}; | |
| for (var i = 0; i != d.length; ++i) { | |
| if (d.charCodeAt(i) !== 0xfffd) e[d.charAt(i)] = i; | |
| D[i] = d.charAt(i); | |
| } | |
| return { enc: e, dec: D }; | |
| })(); |
| // CodeMirror, copyright (c) by Marijn Haverbeke and others | |
| // Distributed under an MIT license: http://codemirror.net/LICENSE | |
| (function (mod) { | |
| if (typeof exports == "object" && typeof module == "object") | |
| // CommonJS | |
| mod(require("../../lib/codemirror")); | |
| else if (typeof define == "function" && define.amd) | |
| // AMD | |
| define(["../../lib/codemirror"], mod); | |
| // Plain browser env | |
| else mod(CodeMirror); | |
| })(function (CodeMirror) { | |
| "use strict"; | |
| var WRAP_CLASS = "CodeMirror-activeline"; | |
| var BACK_CLASS = "CodeMirror-activeline-background"; | |
| var GUTT_CLASS = "CodeMirror-activeline-gutter"; | |
| CodeMirror.defineOption("styleActiveLine", false, function (cm, val, old) { | |
| var prev = old == CodeMirror.Init ? false : old; | |
| if (val == prev) return; | |
| if (prev) { | |
| cm.off("beforeSelectionChange", selectionChange); | |
| clearActiveLines(cm); | |
| delete cm.state.activeLines; | |
| } | |
| if (val) { | |
| cm.state.activeLines = []; | |
| updateActiveLines(cm, cm.listSelections()); | |
| cm.on("beforeSelectionChange", selectionChange); | |
| } | |
| }); | |
| function clearActiveLines(cm) { | |
| for (var i = 0; i < cm.state.activeLines.length; i++) { | |
| cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); | |
| cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); | |
| cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS); | |
| } | |
| } | |
| function sameArray(a, b) { | |
| if (a.length != b.length) return false; | |
| for (var i = 0; i < a.length; i++) if (a[i] != b[i]) return false; | |
| return true; | |
| } | |
| function updateActiveLines(cm, ranges) { | |
| var active = []; | |
| for (var i = 0; i < ranges.length; i++) { | |
| var range = ranges[i]; | |
| var option = cm.getOption("styleActiveLine"); | |
| if ( | |
| typeof option == "object" && option.nonEmpty | |
| ? range.anchor.line != range.head.line | |
| : !range.empty() | |
| ) | |
| continue; | |
| var line = cm.getLineHandleVisualStart(range.head.line); | |
| if (active[active.length - 1] != line) active.push(line); | |
| } | |
| if (sameArray(cm.state.activeLines, active)) return; | |
| cm.operation(function () { | |
| clearActiveLines(cm); | |
| for (var i = 0; i < active.length; i++) { | |
| cm.addLineClass(active[i], "wrap", WRAP_CLASS); | |
| cm.addLineClass(active[i], "background", BACK_CLASS); | |
| cm.addLineClass(active[i], "gutter", GUTT_CLASS); | |
| } | |
| cm.state.activeLines = active; | |
| }); | |
| } | |
| function selectionChange(cm, sel) { | |
| updateActiveLines(cm, sel.ranges); | |
| } | |
| }); |
| (function (r) { | |
| if (typeof exports === "object" && typeof module !== "undefined") { | |
| module.exports = r(); | |
| } else if (typeof define === "function" && define.amd) { | |
| define([], r); | |
| } else { | |
| var e; | |
| if (typeof window !== "undefined") { | |
| e = window; | |
| } else if (typeof global !== "undefined") { | |
| e = global; | |
| } else if (typeof self !== "undefined") { | |
| e = self; | |
| } else { | |
| e = this; | |
| } | |
| e.base64js = r(); | |
| } | |
| })(function () { | |
| var r, e, n; | |
| return (function () { | |
| function r(e, n, t) { | |
| function o(f, i) { | |
| if (!n[f]) { | |
| if (!e[f]) { | |
| var u = "function" == typeof require && require; | |
| if (!i && u) return u(f, !0); | |
| if (a) return a(f, !0); | |
| var v = new Error("Cannot find module '" + f + "'"); | |
| throw ((v.code = "MODULE_NOT_FOUND"), v); | |
| } | |
| var d = (n[f] = { exports: {} }); | |
| e[f][0].call( | |
| d.exports, | |
| function (r) { | |
| var n = e[f][1][r]; | |
| return o(n || r); | |
| }, | |
| d, | |
| d.exports, | |
| r, | |
| e, | |
| n, | |
| t | |
| ); | |
| } | |
| return n[f].exports; | |
| } | |
| for ( | |
| var a = "function" == typeof require && require, f = 0; | |
| f < t.length; | |
| f++ | |
| ) | |
| o(t[f]); | |
| return o; | |
| } | |
| return r; | |
| })()( | |
| { | |
| "/": [ | |
| function (r, e, n) { | |
| "use strict"; | |
| n.byteLength = d; | |
| n.toByteArray = h; | |
| n.fromByteArray = p; | |
| var t = []; | |
| var o = []; | |
| var a = typeof Uint8Array !== "undefined" ? Uint8Array : Array; | |
| var f = | |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | |
| for (var i = 0, u = f.length; i < u; ++i) { | |
| t[i] = f[i]; | |
| o[f.charCodeAt(i)] = i; | |
| } | |
| o["-".charCodeAt(0)] = 62; | |
| o["_".charCodeAt(0)] = 63; | |
| function v(r) { | |
| var e = r.length; | |
| if (e % 4 > 0) { | |
| throw new Error("Invalid string. Length must be a multiple of 4"); | |
| } | |
| var n = r.indexOf("="); | |
| if (n === -1) n = e; | |
| var t = n === e ? 0 : 4 - (n % 4); | |
| return [n, t]; | |
| } | |
| function d(r) { | |
| var e = v(r); | |
| var n = e[0]; | |
| var t = e[1]; | |
| return ((n + t) * 3) / 4 - t; | |
| } | |
| function c(r, e, n) { | |
| return ((e + n) * 3) / 4 - n; | |
| } | |
| function h(r) { | |
| var e; | |
| var n = v(r); | |
| var t = n[0]; | |
| var f = n[1]; | |
| var i = new a(c(r, t, f)); | |
| var u = 0; | |
| var d = f > 0 ? t - 4 : t; | |
| for (var h = 0; h < d; h += 4) { | |
| e = | |
| (o[r.charCodeAt(h)] << 18) | | |
| (o[r.charCodeAt(h + 1)] << 12) | | |
| (o[r.charCodeAt(h + 2)] << 6) | | |
| o[r.charCodeAt(h + 3)]; | |
| i[u++] = (e >> 16) & 255; | |
| i[u++] = (e >> 8) & 255; | |
| i[u++] = e & 255; | |
| } | |
| if (f === 2) { | |
| e = (o[r.charCodeAt(h)] << 2) | (o[r.charCodeAt(h + 1)] >> 4); | |
| i[u++] = e & 255; | |
| } | |
| if (f === 1) { | |
| e = | |
| (o[r.charCodeAt(h)] << 10) | | |
| (o[r.charCodeAt(h + 1)] << 4) | | |
| (o[r.charCodeAt(h + 2)] >> 2); | |
| i[u++] = (e >> 8) & 255; | |
| i[u++] = e & 255; | |
| } | |
| return i; | |
| } | |
| function s(r) { | |
| return ( | |
| t[(r >> 18) & 63] + | |
| t[(r >> 12) & 63] + | |
| t[(r >> 6) & 63] + | |
| t[r & 63] | |
| ); | |
| } | |
| function l(r, e, n) { | |
| var t; | |
| var o = []; | |
| for (var a = e; a < n; a += 3) { | |
| t = | |
| ((r[a] << 16) & 16711680) + | |
| ((r[a + 1] << 8) & 65280) + | |
| (r[a + 2] & 255); | |
| o.push(s(t)); | |
| } | |
| return o.join(""); | |
| } | |
| function p(r) { | |
| var e; | |
| var n = r.length; | |
| var o = n % 3; | |
| var a = []; | |
| var f = 16383; | |
| for (var i = 0, u = n - o; i < u; i += f) { | |
| a.push(l(r, i, i + f > u ? u : i + f)); | |
| } | |
| if (o === 1) { | |
| e = r[n - 1]; | |
| a.push(t[e >> 2] + t[(e << 4) & 63] + "=="); | |
| } else if (o === 2) { | |
| e = (r[n - 2] << 8) + r[n - 1]; | |
| a.push(t[e >> 10] + t[(e >> 4) & 63] + t[(e << 2) & 63] + "="); | |
| } | |
| return a.join(""); | |
| } | |
| }, | |
| {}, | |
| ], | |
| }, | |
| {}, | |
| [] | |
| )("/"); | |
| }); |
| /* bignumber.js v2.4.0 https://github.com/MikeMcl/bignumber.js/LICENCE */ | |
| !(function (e) { | |
| "use strict"; | |
| function n(e) { | |
| function a(e, n) { | |
| var t, | |
| r, | |
| i, | |
| o, | |
| u, | |
| s, | |
| f = this; | |
| if (!(f instanceof a)) | |
| return j && L(26, "constructor call without new", e), new a(e, n); | |
| if (null != n && H(n, 2, 64, M, "base")) { | |
| if (((n = 0 | n), (s = e + ""), 10 == n)) | |
| return (f = new a(e instanceof a ? e : s)), U(f, P + f.e + 1, B); | |
| if ( | |
| ((o = "number" == typeof e) && 0 * e != 0) || | |
| !new RegExp( | |
| "^-?" + (t = "[" + b.slice(0, n) + "]+") + "(?:\\." + t + ")?$", | |
| 37 > n ? "i" : "" | |
| ).test(s) | |
| ) | |
| return g(f, s, o, n); | |
| o | |
| ? ((f.s = 0 > 1 / e ? ((s = s.slice(1)), -1) : 1), | |
| j && s.replace(/^0\.0*|\./, "").length > 15 && L(M, N, e), | |
| (o = !1)) | |
| : (f.s = 45 === s.charCodeAt(0) ? ((s = s.slice(1)), -1) : 1), | |
| (s = D(s, 10, n, f.s)); | |
| } else { | |
| if (e instanceof a) | |
| return ( | |
| (f.s = e.s), | |
| (f.e = e.e), | |
| (f.c = (e = e.c) ? e.slice() : e), | |
| void (M = 0) | |
| ); | |
| if ((o = "number" == typeof e) && 0 * e == 0) { | |
| if (((f.s = 0 > 1 / e ? ((e = -e), -1) : 1), e === ~~e)) { | |
| for (r = 0, i = e; i >= 10; i /= 10, r++); | |
| return (f.e = r), (f.c = [e]), void (M = 0); | |
| } | |
| s = e + ""; | |
| } else { | |
| if (!p.test((s = e + ""))) return g(f, s, o); | |
| f.s = 45 === s.charCodeAt(0) ? ((s = s.slice(1)), -1) : 1; | |
| } | |
| } | |
| for ( | |
| (r = s.indexOf(".")) > -1 && (s = s.replace(".", "")), | |
| (i = s.search(/e/i)) > 0 | |
| ? (0 > r && (r = i), | |
| (r += +s.slice(i + 1)), | |
| (s = s.substring(0, i))) | |
| : 0 > r && (r = s.length), | |
| i = 0; | |
| 48 === s.charCodeAt(i); | |
| i++ | |
| ); | |
| for (u = s.length; 48 === s.charCodeAt(--u); ); | |
| if ((s = s.slice(i, u + 1))) | |
| if ( | |
| ((u = s.length), | |
| o && j && u > 15 && (e > S || e !== m(e)) && L(M, N, f.s * e), | |
| (r = r - i - 1), | |
| r > z) | |
| ) | |
| f.c = f.e = null; | |
| else if (G > r) f.c = [(f.e = 0)]; | |
| else { | |
| if ( | |
| ((f.e = r), (f.c = []), (i = (r + 1) % y), 0 > r && (i += y), u > i) | |
| ) { | |
| for (i && f.c.push(+s.slice(0, i)), u -= y; u > i; ) | |
| f.c.push(+s.slice(i, (i += y))); | |
| (s = s.slice(i)), (i = y - s.length); | |
| } else i -= u; | |
| for (; i--; s += "0"); | |
| f.c.push(+s); | |
| } | |
| else f.c = [(f.e = 0)]; | |
| M = 0; | |
| } | |
| function D(e, n, t, i) { | |
| var o, | |
| u, | |
| f, | |
| c, | |
| h, | |
| g, | |
| p, | |
| d = e.indexOf("."), | |
| m = P, | |
| w = B; | |
| for ( | |
| 37 > t && (e = e.toLowerCase()), | |
| d >= 0 && | |
| ((f = J), | |
| (J = 0), | |
| (e = e.replace(".", "")), | |
| (p = new a(t)), | |
| (h = p.pow(e.length - d)), | |
| (J = f), | |
| (p.c = s(l(r(h.c), h.e), 10, n)), | |
| (p.e = p.c.length)), | |
| g = s(e, t, n), | |
| u = f = g.length; | |
| 0 == g[--f]; | |
| g.pop() | |
| ); | |
| if (!g[0]) return "0"; | |
| if ( | |
| (0 > d | |
| ? --u | |
| : ((h.c = g), | |
| (h.e = u), | |
| (h.s = i), | |
| (h = C(h, p, m, w, n)), | |
| (g = h.c), | |
| (c = h.r), | |
| (u = h.e)), | |
| (o = u + m + 1), | |
| (d = g[o]), | |
| (f = n / 2), | |
| (c = c || 0 > o || null != g[o + 1]), | |
| (c = | |
| 4 > w | |
| ? (null != d || c) && (0 == w || w == (h.s < 0 ? 3 : 2)) | |
| : d > f || | |
| (d == f && | |
| (4 == w || | |
| c || | |
| (6 == w && 1 & g[o - 1]) || | |
| w == (h.s < 0 ? 8 : 7)))), | |
| 1 > o || !g[0]) | |
| ) | |
| e = c ? l("1", -m) : "0"; | |
| else { | |
| if (((g.length = o), c)) | |
| for (--n; ++g[--o] > n; ) (g[o] = 0), o || (++u, g.unshift(1)); | |
| for (f = g.length; !g[--f]; ); | |
| for (d = 0, e = ""; f >= d; e += b.charAt(g[d++])); | |
| e = l(e, u); | |
| } | |
| return e; | |
| } | |
| function F(e, n, t, i) { | |
| var o, u, s, c, h; | |
| if (((t = null != t && H(t, 0, 8, i, v) ? 0 | t : B), !e.c)) | |
| return e.toString(); | |
| if (((o = e.c[0]), (s = e.e), null == n)) | |
| (h = r(e.c)), (h = 19 == i || (24 == i && k >= s) ? f(h, s) : l(h, s)); | |
| else if ( | |
| ((e = U(new a(e), n, t)), | |
| (u = e.e), | |
| (h = r(e.c)), | |
| (c = h.length), | |
| 19 == i || (24 == i && (u >= n || k >= u))) | |
| ) { | |
| for (; n > c; h += "0", c++); | |
| h = f(h, u); | |
| } else if (((n -= s), (h = l(h, u)), u + 1 > c)) { | |
| if (--n > 0) for (h += "."; n--; h += "0"); | |
| } else if (((n += u - c), n > 0)) | |
| for (u + 1 == c && (h += "."); n--; h += "0"); | |
| return e.s < 0 && o ? "-" + h : h; | |
| } | |
| function _(e, n) { | |
| var t, | |
| r, | |
| i = 0; | |
| for (u(e[0]) && (e = e[0]), t = new a(e[0]); ++i < e.length; ) { | |
| if (((r = new a(e[i])), !r.s)) { | |
| t = r; | |
| break; | |
| } | |
| n.call(t, r) && (t = r); | |
| } | |
| return t; | |
| } | |
| function x(e, n, t, r, i) { | |
| return ( | |
| (n > e || e > t || e != c(e)) && | |
| L( | |
| r, | |
| (i || "decimal places") + | |
| (n > e || e > t ? " out of range" : " not an integer"), | |
| e | |
| ), | |
| !0 | |
| ); | |
| } | |
| function I(e, n, t) { | |
| for (var r = 1, i = n.length; !n[--i]; n.pop()); | |
| for (i = n[0]; i >= 10; i /= 10, r++); | |
| return ( | |
| (t = r + t * y - 1) > z | |
| ? (e.c = e.e = null) | |
| : G > t | |
| ? (e.c = [(e.e = 0)]) | |
| : ((e.e = t), (e.c = n)), | |
| e | |
| ); | |
| } | |
| function L(e, n, t) { | |
| var r = new Error( | |
| [ | |
| "new BigNumber", | |
| "cmp", | |
| "config", | |
| "div", | |
| "divToInt", | |
| "eq", | |
| "gt", | |
| "gte", | |
| "lt", | |
| "lte", | |
| "minus", | |
| "mod", | |
| "plus", | |
| "precision", | |
| "random", | |
| "round", | |
| "shift", | |
| "times", | |
| "toDigits", | |
| "toExponential", | |
| "toFixed", | |
| "toFormat", | |
| "toFraction", | |
| "pow", | |
| "toPrecision", | |
| "toString", | |
| "BigNumber", | |
| ][e] + | |
| "() " + | |
| n + | |
| ": " + | |
| t | |
| ); | |
| throw ((r.name = "BigNumber Error"), (M = 0), r); | |
| } | |
| function U(e, n, t, r) { | |
| var i, | |
| o, | |
| u, | |
| s, | |
| f, | |
| l, | |
| c, | |
| a = e.c, | |
| h = R; | |
| if (a) { | |
| e: { | |
| for (i = 1, s = a[0]; s >= 10; s /= 10, i++); | |
| if (((o = n - i), 0 > o)) | |
| (o += y), | |
| (u = n), | |
| (f = a[(l = 0)]), | |
| (c = (f / h[i - u - 1]) % 10 | 0); | |
| else if (((l = d((o + 1) / y)), l >= a.length)) { | |
| if (!r) break e; | |
| for (; a.length <= l; a.push(0)); | |
| (f = c = 0), (i = 1), (o %= y), (u = o - y + 1); | |
| } else { | |
| for (f = s = a[l], i = 1; s >= 10; s /= 10, i++); | |
| (o %= y), | |
| (u = o - y + i), | |
| (c = 0 > u ? 0 : (f / h[i - u - 1]) % 10 | 0); | |
| } | |
| if ( | |
| ((r = | |
| r || 0 > n || null != a[l + 1] || (0 > u ? f : f % h[i - u - 1])), | |
| (r = | |
| 4 > t | |
| ? (c || r) && (0 == t || t == (e.s < 0 ? 3 : 2)) | |
| : c > 5 || | |
| (5 == c && | |
| (4 == t || | |
| r || | |
| (6 == t && | |
| (o > 0 ? (u > 0 ? f / h[i - u] : 0) : a[l - 1]) % 10 & | |
| 1) || | |
| t == (e.s < 0 ? 8 : 7)))), | |
| 1 > n || !a[0]) | |
| ) | |
| return ( | |
| (a.length = 0), | |
| r | |
| ? ((n -= e.e + 1), | |
| (a[0] = h[(y - (n % y)) % y]), | |
| (e.e = -n || 0)) | |
| : (a[0] = e.e = 0), | |
| e | |
| ); | |
| if ( | |
| (0 == o | |
| ? ((a.length = l), (s = 1), l--) | |
| : ((a.length = l + 1), | |
| (s = h[y - o]), | |
| (a[l] = u > 0 ? m((f / h[i - u]) % h[u]) * s : 0)), | |
| r) | |
| ) | |
| for (;;) { | |
| if (0 == l) { | |
| for (o = 1, u = a[0]; u >= 10; u /= 10, o++); | |
| for (u = a[0] += s, s = 1; u >= 10; u /= 10, s++); | |
| o != s && (e.e++, a[0] == O && (a[0] = 1)); | |
| break; | |
| } | |
| if (((a[l] += s), a[l] != O)) break; | |
| (a[l--] = 0), (s = 1); | |
| } | |
| for (o = a.length; 0 === a[--o]; a.pop()); | |
| } | |
| e.e > z ? (e.c = e.e = null) : e.e < G && (e.c = [(e.e = 0)]); | |
| } | |
| return e; | |
| } | |
| var C, | |
| M = 0, | |
| T = a.prototype, | |
| q = new a(1), | |
| P = 20, | |
| B = 4, | |
| k = -7, | |
| $ = 21, | |
| G = -1e7, | |
| z = 1e7, | |
| j = !0, | |
| H = x, | |
| V = !1, | |
| W = 1, | |
| J = 100, | |
| X = { | |
| decimalSeparator: ".", | |
| groupSeparator: ",", | |
| groupSize: 3, | |
| secondaryGroupSize: 0, | |
| fractionGroupSeparator: " ", | |
| fractionGroupSize: 0, | |
| }; | |
| return ( | |
| (a.another = n), | |
| (a.ROUND_UP = 0), | |
| (a.ROUND_DOWN = 1), | |
| (a.ROUND_CEIL = 2), | |
| (a.ROUND_FLOOR = 3), | |
| (a.ROUND_HALF_UP = 4), | |
| (a.ROUND_HALF_DOWN = 5), | |
| (a.ROUND_HALF_EVEN = 6), | |
| (a.ROUND_HALF_CEIL = 7), | |
| (a.ROUND_HALF_FLOOR = 8), | |
| (a.EUCLID = 9), | |
| (a.config = function () { | |
| var e, | |
| n, | |
| t = 0, | |
| r = {}, | |
| i = arguments, | |
| s = i[0], | |
| f = | |
| s && "object" == typeof s | |
| ? function () { | |
| return s.hasOwnProperty(n) ? null != (e = s[n]) : void 0; | |
| } | |
| : function () { | |
| return i.length > t ? null != (e = i[t++]) : void 0; | |
| }; | |
| return ( | |
| f((n = "DECIMAL_PLACES")) && H(e, 0, E, 2, n) && (P = 0 | e), | |
| (r[n] = P), | |
| f((n = "ROUNDING_MODE")) && H(e, 0, 8, 2, n) && (B = 0 | e), | |
| (r[n] = B), | |
| f((n = "EXPONENTIAL_AT")) && | |
| (u(e) | |
| ? H(e[0], -E, 0, 2, n) && | |
| H(e[1], 0, E, 2, n) && | |
| ((k = 0 | e[0]), ($ = 0 | e[1])) | |
| : H(e, -E, E, 2, n) && (k = -($ = 0 | (0 > e ? -e : e)))), | |
| (r[n] = [k, $]), | |
| f((n = "RANGE")) && | |
| (u(e) | |
| ? H(e[0], -E, -1, 2, n) && | |
| H(e[1], 1, E, 2, n) && | |
| ((G = 0 | e[0]), (z = 0 | e[1])) | |
| : H(e, -E, E, 2, n) && | |
| (0 | e | |
| ? (G = -(z = 0 | (0 > e ? -e : e))) | |
| : j && L(2, n + " cannot be zero", e))), | |
| (r[n] = [G, z]), | |
| f((n = "ERRORS")) && | |
| (e === !!e || 1 === e || 0 === e | |
| ? ((M = 0), (H = (j = !!e) ? x : o)) | |
| : j && L(2, n + w, e)), | |
| (r[n] = j), | |
| f((n = "CRYPTO")) && | |
| (e === !!e || 1 === e || 0 === e | |
| ? ((V = !(!e || !h)), | |
| e && !V && j && L(2, "crypto unavailable", h)) | |
| : j && L(2, n + w, e)), | |
| (r[n] = V), | |
| f((n = "MODULO_MODE")) && H(e, 0, 9, 2, n) && (W = 0 | e), | |
| (r[n] = W), | |
| f((n = "POW_PRECISION")) && H(e, 0, E, 2, n) && (J = 0 | e), | |
| (r[n] = J), | |
| f((n = "FORMAT")) && | |
| ("object" == typeof e | |
| ? (X = e) | |
| : j && L(2, n + " not an object", e)), | |
| (r[n] = X), | |
| r | |
| ); | |
| }), | |
| (a.max = function () { | |
| return _(arguments, T.lt); | |
| }), | |
| (a.min = function () { | |
| return _(arguments, T.gt); | |
| }), | |
| (a.random = (function () { | |
| var e = 9007199254740992, | |
| n = | |
| (Math.random() * e) & 2097151 | |
| ? function () { | |
| return m(Math.random() * e); | |
| } | |
| : function () { | |
| return ( | |
| 8388608 * ((1073741824 * Math.random()) | 0) + | |
| ((8388608 * Math.random()) | 0) | |
| ); | |
| }; | |
| return function (e) { | |
| var t, | |
| r, | |
| i, | |
| o, | |
| u, | |
| s = 0, | |
| f = [], | |
| l = new a(q); | |
| if ( | |
| ((e = null != e && H(e, 0, E, 14) ? 0 | e : P), (o = d(e / y)), V) | |
| ) | |
| if (h && h.getRandomValues) { | |
| for (t = h.getRandomValues(new Uint32Array((o *= 2))); o > s; ) | |
| (u = 131072 * t[s] + (t[s + 1] >>> 11)), | |
| u >= 9e15 | |
| ? ((r = h.getRandomValues(new Uint32Array(2))), | |
| (t[s] = r[0]), | |
| (t[s + 1] = r[1])) | |
| : (f.push(u % 1e14), (s += 2)); | |
| s = o / 2; | |
| } else if (h && h.randomBytes) { | |
| for (t = h.randomBytes((o *= 7)); o > s; ) | |
| (u = | |
| 281474976710656 * (31 & t[s]) + | |
| 1099511627776 * t[s + 1] + | |
| 4294967296 * t[s + 2] + | |
| 16777216 * t[s + 3] + | |
| (t[s + 4] << 16) + | |
| (t[s + 5] << 8) + | |
| t[s + 6]), | |
| u >= 9e15 | |
| ? h.randomBytes(7).copy(t, s) | |
| : (f.push(u % 1e14), (s += 7)); | |
| s = o / 7; | |
| } else j && L(14, "crypto unavailable", h); | |
| if (!s) for (; o > s; ) (u = n()), 9e15 > u && (f[s++] = u % 1e14); | |
| for ( | |
| o = f[--s], | |
| e %= y, | |
| o && e && ((u = R[y - e]), (f[s] = m(o / u) * u)); | |
| 0 === f[s]; | |
| f.pop(), s-- | |
| ); | |
| if (0 > s) f = [(i = 0)]; | |
| else { | |
| for (i = -1; 0 === f[0]; f.shift(), i -= y); | |
| for (s = 1, u = f[0]; u >= 10; u /= 10, s++); | |
| y > s && (i -= y - s); | |
| } | |
| return (l.e = i), (l.c = f), l; | |
| }; | |
| })()), | |
| (C = (function () { | |
| function e(e, n, t) { | |
| var r, | |
| i, | |
| o, | |
| u, | |
| s = 0, | |
| f = e.length, | |
| l = n % A, | |
| c = (n / A) | 0; | |
| for (e = e.slice(); f--; ) | |
| (o = e[f] % A), | |
| (u = (e[f] / A) | 0), | |
| (r = c * o + u * l), | |
| (i = l * o + (r % A) * A + s), | |
| (s = ((i / t) | 0) + ((r / A) | 0) + c * u), | |
| (e[f] = i % t); | |
| return s && e.unshift(s), e; | |
| } | |
| function n(e, n, t, r) { | |
| var i, o; | |
| if (t != r) o = t > r ? 1 : -1; | |
| else | |
| for (i = o = 0; t > i; i++) | |
| if (e[i] != n[i]) { | |
| o = e[i] > n[i] ? 1 : -1; | |
| break; | |
| } | |
| return o; | |
| } | |
| function r(e, n, t, r) { | |
| for (var i = 0; t--; ) | |
| (e[t] -= i), | |
| (i = e[t] < n[t] ? 1 : 0), | |
| (e[t] = i * r + e[t] - n[t]); | |
| for (; !e[0] && e.length > 1; e.shift()); | |
| } | |
| return function (i, o, u, s, f) { | |
| var l, | |
| c, | |
| h, | |
| g, | |
| p, | |
| d, | |
| w, | |
| v, | |
| N, | |
| b, | |
| S, | |
| R, | |
| A, | |
| E, | |
| D, | |
| F, | |
| _, | |
| x = i.s == o.s ? 1 : -1, | |
| I = i.c, | |
| L = o.c; | |
| if (!(I && I[0] && L && L[0])) | |
| return new a( | |
| i.s && o.s && (I ? !L || I[0] != L[0] : L) | |
| ? (I && 0 == I[0]) || !L | |
| ? 0 * x | |
| : x / 0 | |
| : NaN | |
| ); | |
| for ( | |
| v = new a(x), | |
| N = v.c = [], | |
| c = i.e - o.e, | |
| x = u + c + 1, | |
| f || ((f = O), (c = t(i.e / y) - t(o.e / y)), (x = (x / y) | 0)), | |
| h = 0; | |
| L[h] == (I[h] || 0); | |
| h++ | |
| ); | |
| if ((L[h] > (I[h] || 0) && c--, 0 > x)) N.push(1), (g = !0); | |
| else { | |
| for ( | |
| E = I.length, | |
| F = L.length, | |
| h = 0, | |
| x += 2, | |
| p = m(f / (L[0] + 1)), | |
| p > 1 && | |
| ((L = e(L, p, f)), | |
| (I = e(I, p, f)), | |
| (F = L.length), | |
| (E = I.length)), | |
| A = F, | |
| b = I.slice(0, F), | |
| S = b.length; | |
| F > S; | |
| b[S++] = 0 | |
| ); | |
| (_ = L.slice()), _.unshift(0), (D = L[0]), L[1] >= f / 2 && D++; | |
| do { | |
| if (((p = 0), (l = n(L, b, F, S)), 0 > l)) { | |
| if ( | |
| ((R = b[0]), | |
| F != S && (R = R * f + (b[1] || 0)), | |
| (p = m(R / D)), | |
| p > 1) | |
| ) | |
| for ( | |
| p >= f && (p = f - 1), | |
| d = e(L, p, f), | |
| w = d.length, | |
| S = b.length; | |
| 1 == n(d, b, w, S); | |
| ) | |
| p--, r(d, w > F ? _ : L, w, f), (w = d.length), (l = 1); | |
| else 0 == p && (l = p = 1), (d = L.slice()), (w = d.length); | |
| if ( | |
| (S > w && d.unshift(0), | |
| r(b, d, S, f), | |
| (S = b.length), | |
| -1 == l) | |
| ) | |
| for (; n(L, b, F, S) < 1; ) | |
| p++, r(b, S > F ? _ : L, S, f), (S = b.length); | |
| } else 0 === l && (p++, (b = [0])); | |
| (N[h++] = p), | |
| b[0] ? (b[S++] = I[A] || 0) : ((b = [I[A]]), (S = 1)); | |
| } while ((A++ < E || null != b[0]) && x--); | |
| (g = null != b[0]), N[0] || N.shift(); | |
| } | |
| if (f == O) { | |
| for (h = 1, x = N[0]; x >= 10; x /= 10, h++); | |
| U(v, u + (v.e = h + c * y - 1) + 1, s, g); | |
| } else (v.e = c), (v.r = +g); | |
| return v; | |
| }; | |
| })()), | |
| (g = (function () { | |
| var e = /^(-?)0([xbo])(?=\w[\w.]*$)/i, | |
| n = /^([^.]+)\.$/, | |
| t = /^\.([^.]+)$/, | |
| r = /^-?(Infinity|NaN)$/, | |
| i = /^\s*\+(?=[\w.])|^\s+|\s+$/g; | |
| return function (o, u, s, f) { | |
| var l, | |
| c = s ? u : u.replace(i, ""); | |
| if (r.test(c)) o.s = isNaN(c) ? null : 0 > c ? -1 : 1; | |
| else { | |
| if ( | |
| !s && | |
| ((c = c.replace(e, function (e, n, t) { | |
| return ( | |
| (l = "x" == (t = t.toLowerCase()) ? 16 : "b" == t ? 2 : 8), | |
| f && f != l ? e : n | |
| ); | |
| })), | |
| f && ((l = f), (c = c.replace(n, "$1").replace(t, "0.$1"))), | |
| u != c) | |
| ) | |
| return new a(c, l); | |
| j && L(M, "not a" + (f ? " base " + f : "") + " number", u), | |
| (o.s = null); | |
| } | |
| (o.c = o.e = null), (M = 0); | |
| }; | |
| })()), | |
| (T.absoluteValue = T.abs = | |
| function () { | |
| var e = new a(this); | |
| return e.s < 0 && (e.s = 1), e; | |
| }), | |
| (T.ceil = function () { | |
| return U(new a(this), this.e + 1, 2); | |
| }), | |
| (T.comparedTo = T.cmp = | |
| function (e, n) { | |
| return (M = 1), i(this, new a(e, n)); | |
| }), | |
| (T.decimalPlaces = T.dp = | |
| function () { | |
| var e, | |
| n, | |
| r = this.c; | |
| if (!r) return null; | |
| if (((e = ((n = r.length - 1) - t(this.e / y)) * y), (n = r[n]))) | |
| for (; n % 10 == 0; n /= 10, e--); | |
| return 0 > e && (e = 0), e; | |
| }), | |
| (T.dividedBy = T.div = | |
| function (e, n) { | |
| return (M = 3), C(this, new a(e, n), P, B); | |
| }), | |
| (T.dividedToIntegerBy = T.divToInt = | |
| function (e, n) { | |
| return (M = 4), C(this, new a(e, n), 0, 1); | |
| }), | |
| (T.equals = T.eq = | |
| function (e, n) { | |
| return (M = 5), 0 === i(this, new a(e, n)); | |
| }), | |
| (T.floor = function () { | |
| return U(new a(this), this.e + 1, 3); | |
| }), | |
| (T.greaterThan = T.gt = | |
| function (e, n) { | |
| return (M = 6), i(this, new a(e, n)) > 0; | |
| }), | |
| (T.greaterThanOrEqualTo = T.gte = | |
| function (e, n) { | |
| return (M = 7), 1 === (n = i(this, new a(e, n))) || 0 === n; | |
| }), | |
| (T.isFinite = function () { | |
| return !!this.c; | |
| }), | |
| (T.isInteger = T.isInt = | |
| function () { | |
| return !!this.c && t(this.e / y) > this.c.length - 2; | |
| }), | |
| (T.isNaN = function () { | |
| return !this.s; | |
| }), | |
| (T.isNegative = T.isNeg = | |
| function () { | |
| return this.s < 0; | |
| }), | |
| (T.isZero = function () { | |
| return !!this.c && 0 == this.c[0]; | |
| }), | |
| (T.lessThan = T.lt = | |
| function (e, n) { | |
| return (M = 8), i(this, new a(e, n)) < 0; | |
| }), | |
| (T.lessThanOrEqualTo = T.lte = | |
| function (e, n) { | |
| return (M = 9), -1 === (n = i(this, new a(e, n))) || 0 === n; | |
| }), | |
| (T.minus = T.sub = | |
| function (e, n) { | |
| var r, | |
| i, | |
| o, | |
| u, | |
| s = this, | |
| f = s.s; | |
| if (((M = 10), (e = new a(e, n)), (n = e.s), !f || !n)) | |
| return new a(NaN); | |
| if (f != n) return (e.s = -n), s.plus(e); | |
| var l = s.e / y, | |
| c = e.e / y, | |
| h = s.c, | |
| g = e.c; | |
| if (!l || !c) { | |
| if (!h || !g) return h ? ((e.s = -n), e) : new a(g ? s : NaN); | |
| if (!h[0] || !g[0]) | |
| return g[0] ? ((e.s = -n), e) : new a(h[0] ? s : 3 == B ? -0 : 0); | |
| } | |
| if (((l = t(l)), (c = t(c)), (h = h.slice()), (f = l - c))) { | |
| for ( | |
| (u = 0 > f) ? ((f = -f), (o = h)) : ((c = l), (o = g)), | |
| o.reverse(), | |
| n = f; | |
| n--; | |
| o.push(0) | |
| ); | |
| o.reverse(); | |
| } else | |
| for ( | |
| i = (u = (f = h.length) < (n = g.length)) ? f : n, f = n = 0; | |
| i > n; | |
| n++ | |
| ) | |
| if (h[n] != g[n]) { | |
| u = h[n] < g[n]; | |
| break; | |
| } | |
| if ( | |
| (u && ((o = h), (h = g), (g = o), (e.s = -e.s)), | |
| (n = (i = g.length) - (r = h.length)), | |
| n > 0) | |
| ) | |
| for (; n--; h[r++] = 0); | |
| for (n = O - 1; i > f; ) { | |
| if (h[--i] < g[i]) { | |
| for (r = i; r && !h[--r]; h[r] = n); | |
| --h[r], (h[i] += O); | |
| } | |
| h[i] -= g[i]; | |
| } | |
| for (; 0 == h[0]; h.shift(), --c); | |
| return h[0] | |
| ? I(e, h, c) | |
| : ((e.s = 3 == B ? -1 : 1), (e.c = [(e.e = 0)]), e); | |
| }), | |
| (T.modulo = T.mod = | |
| function (e, n) { | |
| var t, | |
| r, | |
| i = this; | |
| return ( | |
| (M = 11), | |
| (e = new a(e, n)), | |
| !i.c || !e.s || (e.c && !e.c[0]) | |
| ? new a(NaN) | |
| : !e.c || (i.c && !i.c[0]) | |
| ? new a(i) | |
| : (9 == W | |
| ? ((r = e.s), | |
| (e.s = 1), | |
| (t = C(i, e, 0, 3)), | |
| (e.s = r), | |
| (t.s *= r)) | |
| : (t = C(i, e, 0, W)), | |
| i.minus(t.times(e))) | |
| ); | |
| }), | |
| (T.negated = T.neg = | |
| function () { | |
| var e = new a(this); | |
| return (e.s = -e.s || null), e; | |
| }), | |
| (T.plus = T.add = | |
| function (e, n) { | |
| var r, | |
| i = this, | |
| o = i.s; | |
| if (((M = 12), (e = new a(e, n)), (n = e.s), !o || !n)) | |
| return new a(NaN); | |
| if (o != n) return (e.s = -n), i.minus(e); | |
| var u = i.e / y, | |
| s = e.e / y, | |
| f = i.c, | |
| l = e.c; | |
| if (!u || !s) { | |
| if (!f || !l) return new a(o / 0); | |
| if (!f[0] || !l[0]) return l[0] ? e : new a(f[0] ? i : 0 * o); | |
| } | |
| if (((u = t(u)), (s = t(s)), (f = f.slice()), (o = u - s))) { | |
| for ( | |
| o > 0 ? ((s = u), (r = l)) : ((o = -o), (r = f)), r.reverse(); | |
| o--; | |
| r.push(0) | |
| ); | |
| r.reverse(); | |
| } | |
| for ( | |
| o = f.length, | |
| n = l.length, | |
| 0 > o - n && ((r = l), (l = f), (f = r), (n = o)), | |
| o = 0; | |
| n; | |
| ) | |
| (o = ((f[--n] = f[n] + l[n] + o) / O) | 0), (f[n] %= O); | |
| return o && (f.unshift(o), ++s), I(e, f, s); | |
| }), | |
| (T.precision = T.sd = | |
| function (e) { | |
| var n, | |
| t, | |
| r = this, | |
| i = r.c; | |
| if ( | |
| (null != e && | |
| e !== !!e && | |
| 1 !== e && | |
| 0 !== e && | |
| (j && L(13, "argument" + w, e), e != !!e && (e = null)), | |
| !i) | |
| ) | |
| return null; | |
| if (((t = i.length - 1), (n = t * y + 1), (t = i[t]))) { | |
| for (; t % 10 == 0; t /= 10, n--); | |
| for (t = i[0]; t >= 10; t /= 10, n++); | |
| } | |
| return e && r.e + 1 > n && (n = r.e + 1), n; | |
| }), | |
| (T.round = function (e, n) { | |
| var t = new a(this); | |
| return ( | |
| (null == e || H(e, 0, E, 15)) && | |
| U(t, ~~e + this.e + 1, null != n && H(n, 0, 8, 15, v) ? 0 | n : B), | |
| t | |
| ); | |
| }), | |
| (T.shift = function (e) { | |
| var n = this; | |
| return H(e, -S, S, 16, "argument") | |
| ? n.times("1e" + c(e)) | |
| : new a( | |
| n.c && n.c[0] && (-S > e || e > S) ? n.s * (0 > e ? 0 : 1 / 0) : n | |
| ); | |
| }), | |
| (T.squareRoot = T.sqrt = | |
| function () { | |
| var e, | |
| n, | |
| i, | |
| o, | |
| u, | |
| s = this, | |
| f = s.c, | |
| l = s.s, | |
| c = s.e, | |
| h = P + 4, | |
| g = new a("0.5"); | |
| if (1 !== l || !f || !f[0]) | |
| return new a(!l || (0 > l && (!f || f[0])) ? NaN : f ? s : 1 / 0); | |
| if ( | |
| ((l = Math.sqrt(+s)), | |
| 0 == l || l == 1 / 0 | |
| ? ((n = r(f)), | |
| (n.length + c) % 2 == 0 && (n += "0"), | |
| (l = Math.sqrt(n)), | |
| (c = t((c + 1) / 2) - (0 > c || c % 2)), | |
| l == 1 / 0 | |
| ? (n = "1e" + c) | |
| : ((n = l.toExponential()), | |
| (n = n.slice(0, n.indexOf("e") + 1) + c)), | |
| (i = new a(n))) | |
| : (i = new a(l + "")), | |
| i.c[0]) | |
| ) | |
| for (c = i.e, l = c + h, 3 > l && (l = 0); ; ) | |
| if ( | |
| ((u = i), | |
| (i = g.times(u.plus(C(s, u, h, 1)))), | |
| r(u.c).slice(0, l) === (n = r(i.c)).slice(0, l)) | |
| ) { | |
| if ( | |
| (i.e < c && --l, | |
| (n = n.slice(l - 3, l + 1)), | |
| "9999" != n && (o || "4999" != n)) | |
| ) { | |
| (!+n || (!+n.slice(1) && "5" == n.charAt(0))) && | |
| (U(i, i.e + P + 2, 1), (e = !i.times(i).eq(s))); | |
| break; | |
| } | |
| if (!o && (U(u, u.e + P + 2, 0), u.times(u).eq(s))) { | |
| i = u; | |
| break; | |
| } | |
| (h += 4), (l += 4), (o = 1); | |
| } | |
| return U(i, i.e + P + 1, B, e); | |
| }), | |
| (T.times = T.mul = | |
| function (e, n) { | |
| var r, | |
| i, | |
| o, | |
| u, | |
| s, | |
| f, | |
| l, | |
| c, | |
| h, | |
| g, | |
| p, | |
| d, | |
| m, | |
| w, | |
| v, | |
| N = this, | |
| b = N.c, | |
| S = ((M = 17), (e = new a(e, n))).c; | |
| if (!(b && S && b[0] && S[0])) | |
| return ( | |
| !N.s || !e.s || (b && !b[0] && !S) || (S && !S[0] && !b) | |
| ? (e.c = e.e = e.s = null) | |
| : ((e.s *= N.s), | |
| b && S ? ((e.c = [0]), (e.e = 0)) : (e.c = e.e = null)), | |
| e | |
| ); | |
| for ( | |
| i = t(N.e / y) + t(e.e / y), | |
| e.s *= N.s, | |
| l = b.length, | |
| g = S.length, | |
| g > l && ((m = b), (b = S), (S = m), (o = l), (l = g), (g = o)), | |
| o = l + g, | |
| m = []; | |
| o--; | |
| m.push(0) | |
| ); | |
| for (w = O, v = A, o = g; --o >= 0; ) { | |
| for ( | |
| r = 0, p = S[o] % v, d = (S[o] / v) | 0, s = l, u = o + s; | |
| u > o; | |
| ) | |
| (c = b[--s] % v), | |
| (h = (b[s] / v) | 0), | |
| (f = d * c + h * p), | |
| (c = p * c + (f % v) * v + m[u] + r), | |
| (r = ((c / w) | 0) + ((f / v) | 0) + d * h), | |
| (m[u--] = c % w); | |
| m[u] = r; | |
| } | |
| return r ? ++i : m.shift(), I(e, m, i); | |
| }), | |
| (T.toDigits = function (e, n) { | |
| var t = new a(this); | |
| return ( | |
| (e = null != e && H(e, 1, E, 18, "precision") ? 0 | e : null), | |
| (n = null != n && H(n, 0, 8, 18, v) ? 0 | n : B), | |
| e ? U(t, e, n) : t | |
| ); | |
| }), | |
| (T.toExponential = function (e, n) { | |
| return F(this, null != e && H(e, 0, E, 19) ? ~~e + 1 : null, n, 19); | |
| }), | |
| (T.toFixed = function (e, n) { | |
| return F( | |
| this, | |
| null != e && H(e, 0, E, 20) ? ~~e + this.e + 1 : null, | |
| n, | |
| 20 | |
| ); | |
| }), | |
| (T.toFormat = function (e, n) { | |
| var t = F( | |
| this, | |
| null != e && H(e, 0, E, 21) ? ~~e + this.e + 1 : null, | |
| n, | |
| 21 | |
| ); | |
| if (this.c) { | |
| var r, | |
| i = t.split("."), | |
| o = +X.groupSize, | |
| u = +X.secondaryGroupSize, | |
| s = X.groupSeparator, | |
| f = i[0], | |
| l = i[1], | |
| c = this.s < 0, | |
| a = c ? f.slice(1) : f, | |
| h = a.length; | |
| if ((u && ((r = o), (o = u), (u = r), (h -= r)), o > 0 && h > 0)) { | |
| for (r = h % o || o, f = a.substr(0, r); h > r; r += o) | |
| f += s + a.substr(r, o); | |
| u > 0 && (f += s + a.slice(r)), c && (f = "-" + f); | |
| } | |
| t = l | |
| ? f + | |
| X.decimalSeparator + | |
| ((u = +X.fractionGroupSize) | |
| ? l.replace( | |
| new RegExp("\\d{" + u + "}\\B", "g"), | |
| "$&" + X.fractionGroupSeparator | |
| ) | |
| : l) | |
| : f; | |
| } | |
| return t; | |
| }), | |
| (T.toFraction = function (e) { | |
| var n, | |
| t, | |
| i, | |
| o, | |
| u, | |
| s, | |
| f, | |
| l, | |
| c, | |
| h = j, | |
| g = this, | |
| p = g.c, | |
| d = new a(q), | |
| m = (t = new a(q)), | |
| w = (f = new a(q)); | |
| if ( | |
| (null != e && | |
| ((j = !1), | |
| (s = new a(e)), | |
| (j = h), | |
| (!(h = s.isInt()) || s.lt(q)) && | |
| (j && | |
| L( | |
| 22, | |
| "max denominator " + (h ? "out of range" : "not an integer"), | |
| e | |
| ), | |
| (e = !h && s.c && U(s, s.e + 1, 1).gte(q) ? s : null))), | |
| !p) | |
| ) | |
| return g.toString(); | |
| for ( | |
| c = r(p), | |
| o = d.e = c.length - g.e - 1, | |
| d.c[0] = R[(u = o % y) < 0 ? y + u : u], | |
| e = !e || s.cmp(d) > 0 ? (o > 0 ? d : m) : s, | |
| u = z, | |
| z = 1 / 0, | |
| s = new a(c), | |
| f.c[0] = 0; | |
| (l = C(s, d, 0, 1)), (i = t.plus(l.times(w))), 1 != i.cmp(e); | |
| ) | |
| (t = w), | |
| (w = i), | |
| (m = f.plus(l.times((i = m)))), | |
| (f = i), | |
| (d = s.minus(l.times((i = d)))), | |
| (s = i); | |
| return ( | |
| (i = C(e.minus(t), w, 0, 1)), | |
| (f = f.plus(i.times(m))), | |
| (t = t.plus(i.times(w))), | |
| (f.s = m.s = g.s), | |
| (o *= 2), | |
| (n = | |
| C(m, w, o, B).minus(g).abs().cmp(C(f, t, o, B).minus(g).abs()) < 1 | |
| ? [m.toString(), w.toString()] | |
| : [f.toString(), t.toString()]), | |
| (z = u), | |
| n | |
| ); | |
| }), | |
| (T.toNumber = function () { | |
| return +this; | |
| }), | |
| (T.toPower = T.pow = | |
| function (e, n) { | |
| var t, | |
| r, | |
| i, | |
| o = m(0 > e ? -e : +e), | |
| u = this; | |
| if ( | |
| (null != n && ((M = 23), (n = new a(n))), | |
| (!H(e, -S, S, 23, "exponent") && | |
| (!isFinite(e) || | |
| (o > S && (e /= 0)) || | |
| (parseFloat(e) != e && !(e = NaN)))) || | |
| 0 == e) | |
| ) | |
| return (t = Math.pow(+u, e)), new a(n ? t % n : t); | |
| for ( | |
| n | |
| ? e > 1 && u.gt(q) && u.isInt() && n.gt(q) && n.isInt() | |
| ? (u = u.mod(n)) | |
| : ((i = n), (n = null)) | |
| : J && (t = d(J / y + 2)), | |
| r = new a(q); | |
| ; | |
| ) { | |
| if (o % 2) { | |
| if (((r = r.times(u)), !r.c)) break; | |
| t ? r.c.length > t && (r.c.length = t) : n && (r = r.mod(n)); | |
| } | |
| if (((o = m(o / 2)), !o)) break; | |
| (u = u.times(u)), | |
| t | |
| ? u.c && u.c.length > t && (u.c.length = t) | |
| : n && (u = u.mod(n)); | |
| } | |
| return n | |
| ? r | |
| : (0 > e && (r = q.div(r)), i ? r.mod(i) : t ? U(r, J, B) : r); | |
| }), | |
| (T.toPrecision = function (e, n) { | |
| return F( | |
| this, | |
| null != e && H(e, 1, E, 24, "precision") ? 0 | e : null, | |
| n, | |
| 24 | |
| ); | |
| }), | |
| (T.toString = function (e) { | |
| var n, | |
| t = this, | |
| i = t.s, | |
| o = t.e; | |
| return ( | |
| null === o | |
| ? i | |
| ? ((n = "Infinity"), 0 > i && (n = "-" + n)) | |
| : (n = "NaN") | |
| : ((n = r(t.c)), | |
| (n = | |
| null != e && H(e, 2, 64, 25, "base") | |
| ? D(l(n, o), 0 | e, 10, i) | |
| : k >= o || o >= $ | |
| ? f(n, o) | |
| : l(n, o)), | |
| 0 > i && t.c[0] && (n = "-" + n)), | |
| n | |
| ); | |
| }), | |
| (T.truncated = T.trunc = | |
| function () { | |
| return U(new a(this), this.e + 1, 1); | |
| }), | |
| (T.valueOf = T.toJSON = | |
| function () { | |
| var e, | |
| n = this, | |
| t = n.e; | |
| return null === t | |
| ? n.toString() | |
| : ((e = r(n.c)), | |
| (e = k >= t || t >= $ ? f(e, t) : l(e, t)), | |
| n.s < 0 ? "-" + e : e); | |
| }), | |
| null != e && a.config(e), | |
| a | |
| ); | |
| } | |
| function t(e) { | |
| var n = 0 | e; | |
| return e > 0 || e === n ? n : n - 1; | |
| } | |
| function r(e) { | |
| for (var n, t, r = 1, i = e.length, o = e[0] + ""; i > r; ) { | |
| for (n = e[r++] + "", t = y - n.length; t--; n = "0" + n); | |
| o += n; | |
| } | |
| for (i = o.length; 48 === o.charCodeAt(--i); ); | |
| return o.slice(0, i + 1 || 1); | |
| } | |
| function i(e, n) { | |
| var t, | |
| r, | |
| i = e.c, | |
| o = n.c, | |
| u = e.s, | |
| s = n.s, | |
| f = e.e, | |
| l = n.e; | |
| if (!u || !s) return null; | |
| if (((t = i && !i[0]), (r = o && !o[0]), t || r)) | |
| return t ? (r ? 0 : -s) : u; | |
| if (u != s) return u; | |
| if (((t = 0 > u), (r = f == l), !i || !o)) return r ? 0 : !i ^ t ? 1 : -1; | |
| if (!r) return (f > l) ^ t ? 1 : -1; | |
| for (s = (f = i.length) < (l = o.length) ? f : l, u = 0; s > u; u++) | |
| if (i[u] != o[u]) return (i[u] > o[u]) ^ t ? 1 : -1; | |
| return f == l ? 0 : (f > l) ^ t ? 1 : -1; | |
| } | |
| function o(e, n, t) { | |
| return (e = c(e)) >= n && t >= e; | |
| } | |
| function u(e) { | |
| return "[object Array]" == Object.prototype.toString.call(e); | |
| } | |
| function s(e, n, t) { | |
| for (var r, i, o = [0], u = 0, s = e.length; s > u; ) { | |
| for (i = o.length; i--; o[i] *= n); | |
| for (o[(r = 0)] += b.indexOf(e.charAt(u++)); r < o.length; r++) | |
| o[r] > t - 1 && | |
| (null == o[r + 1] && (o[r + 1] = 0), | |
| (o[r + 1] += (o[r] / t) | 0), | |
| (o[r] %= t)); | |
| } | |
| return o.reverse(); | |
| } | |
| function f(e, n) { | |
| return ( | |
| (e.length > 1 ? e.charAt(0) + "." + e.slice(1) : e) + | |
| (0 > n ? "e" : "e+") + | |
| n | |
| ); | |
| } | |
| function l(e, n) { | |
| var t, r; | |
| if (0 > n) { | |
| for (r = "0."; ++n; r += "0"); | |
| e = r + e; | |
| } else if (((t = e.length), ++n > t)) { | |
| for (r = "0", n -= t; --n; r += "0"); | |
| e += r; | |
| } else t > n && (e = e.slice(0, n) + "." + e.slice(n)); | |
| return e; | |
| } | |
| function c(e) { | |
| return (e = parseFloat(e)), 0 > e ? d(e) : m(e); | |
| } | |
| var a, | |
| h, | |
| g, | |
| p = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, | |
| d = Math.ceil, | |
| m = Math.floor, | |
| w = " not a boolean or binary digit", | |
| v = "rounding mode", | |
| N = "number type has more than 15 significant digits", | |
| b = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_", | |
| O = 1e14, | |
| y = 14, | |
| S = 9007199254740991, | |
| R = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], | |
| A = 1e7, | |
| E = 1e9; | |
| if ( | |
| ("undefined" != typeof crypto && (h = crypto), | |
| (a = n()), | |
| (a["default"] = a.BigNumber = a), | |
| "function" == typeof define && define.amd) | |
| ) | |
| define(function () { | |
| return a; | |
| }); | |
| else if ("undefined" != typeof module && module.exports) { | |
| if (((module.exports = a), !h)) | |
| try { | |
| h = require("crypto"); | |
| } catch (D) {} | |
| } else | |
| e || (e = "undefined" != typeof self ? self : Function("return this")()), | |
| (e.BigNumber = a); | |
| })(this); | |
| //# sourceMappingURL=bignumber.js.map |
| /* bignumber.js v9.0.0 https://github.com/MikeMcl/bignumber.js/LICENCE */ !(function ( | |
| e | |
| ) { | |
| "use strict"; | |
| var r, | |
| x = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, | |
| L = Math.ceil, | |
| U = Math.floor, | |
| I = "[BigNumber Error] ", | |
| T = I + "Number primitive has more than 15 significant digits: ", | |
| C = 1e14, | |
| M = 14, | |
| G = 9007199254740991, | |
| k = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], | |
| F = 1e7, | |
| q = 1e9; | |
| function j(e) { | |
| var r = 0 | e; | |
| return 0 < e || e === r ? r : r - 1; | |
| } | |
| function $(e) { | |
| for (var r, n, t = 1, i = e.length, o = e[0] + ""; t < i; ) { | |
| for (r = e[t++] + "", n = M - r.length; n--; r = "0" + r); | |
| o += r; | |
| } | |
| for (i = o.length; 48 === o.charCodeAt(--i); ); | |
| return o.slice(0, i + 1 || 1); | |
| } | |
| function z(e, r) { | |
| var n, | |
| t, | |
| i = e.c, | |
| o = r.c, | |
| s = e.s, | |
| f = r.s, | |
| u = e.e, | |
| l = r.e; | |
| if (!s || !f) return null; | |
| if (((n = i && !i[0]), (t = o && !o[0]), n || t)) | |
| return n ? (t ? 0 : -f) : s; | |
| if (s != f) return s; | |
| if (((n = s < 0), (t = u == l), !i || !o)) return t ? 0 : !i ^ n ? 1 : -1; | |
| if (!t) return (l < u) ^ n ? 1 : -1; | |
| for (f = (u = i.length) < (l = o.length) ? u : l, s = 0; s < f; s++) | |
| if (i[s] != o[s]) return (i[s] > o[s]) ^ n ? 1 : -1; | |
| return u == l ? 0 : (l < u) ^ n ? 1 : -1; | |
| } | |
| function H(e, r, n, t) { | |
| if (e < r || n < e || e !== U(e)) | |
| throw Error( | |
| I + | |
| (t || "Argument") + | |
| ("number" == typeof e | |
| ? e < r || n < e | |
| ? " out of range: " | |
| : " not an integer: " | |
| : " not a primitive number: ") + | |
| String(e) | |
| ); | |
| } | |
| function V(e) { | |
| var r = e.c.length - 1; | |
| return j(e.e / M) == r && e.c[r] % 2 != 0; | |
| } | |
| function W(e, r) { | |
| return ( | |
| (1 < e.length ? e.charAt(0) + "." + e.slice(1) : e) + | |
| (r < 0 ? "e" : "e+") + | |
| r | |
| ); | |
| } | |
| function X(e, r, n) { | |
| var t, i; | |
| if (r < 0) { | |
| for (i = n + "."; ++r; i += n); | |
| e = i + e; | |
| } else if (++r > (t = e.length)) { | |
| for (i = n, r -= t; --r; i += n); | |
| e += i; | |
| } else r < t && (e = e.slice(0, r) + "." + e.slice(r)); | |
| return e; | |
| } | |
| ((r = (function e(r) { | |
| var v, | |
| a, | |
| h, | |
| n, | |
| l, | |
| s, | |
| f, | |
| u, | |
| c, | |
| g, | |
| t = (B.prototype = { constructor: B, toString: null, valueOf: null }), | |
| w = new B(1), | |
| N = 20, | |
| O = 4, | |
| p = -7, | |
| d = 21, | |
| m = -1e7, | |
| y = 1e7, | |
| b = !1, | |
| o = 1, | |
| E = 0, | |
| A = { | |
| prefix: "", | |
| groupSize: 3, | |
| secondaryGroupSize: 0, | |
| groupSeparator: ",", | |
| decimalSeparator: ".", | |
| fractionGroupSize: 0, | |
| fractionGroupSeparator: " ", | |
| suffix: "", | |
| }, | |
| S = "0123456789abcdefghijklmnopqrstuvwxyz"; | |
| function B(e, r) { | |
| var n, | |
| t, | |
| i, | |
| o, | |
| s, | |
| f, | |
| u, | |
| l, | |
| c = this; | |
| if (!(c instanceof B)) return new B(e, r); | |
| if (null == r) { | |
| if (e && !0 === e._isBigNumber) | |
| return ( | |
| (c.s = e.s), | |
| void (!e.c || e.e > y | |
| ? (c.c = c.e = null) | |
| : e.e < m | |
| ? (c.c = [(c.e = 0)]) | |
| : ((c.e = e.e), (c.c = e.c.slice()))) | |
| ); | |
| if ((f = "number" == typeof e) && 0 * e == 0) { | |
| if (((c.s = 1 / e < 0 ? ((e = -e), -1) : 1), e === ~~e)) { | |
| for (o = 0, s = e; 10 <= s; s /= 10, o++); | |
| return void (c.c = y < o ? (c.e = null) : ((c.e = o), [e])); | |
| } | |
| l = String(e); | |
| } else { | |
| if (!x.test((l = String(e)))) return h(c, l, f); | |
| c.s = 45 == l.charCodeAt(0) ? ((l = l.slice(1)), -1) : 1; | |
| } | |
| -1 < (o = l.indexOf(".")) && (l = l.replace(".", "")), | |
| 0 < (s = l.search(/e/i)) | |
| ? (o < 0 && (o = s), | |
| (o += +l.slice(s + 1)), | |
| (l = l.substring(0, s))) | |
| : o < 0 && (o = l.length); | |
| } else { | |
| if ((H(r, 2, S.length, "Base"), 10 == r)) | |
| return D((c = new B(e)), N + c.e + 1, O); | |
| if (((l = String(e)), (f = "number" == typeof e))) { | |
| if (0 * e != 0) return h(c, l, f, r); | |
| if ( | |
| ((c.s = 1 / e < 0 ? ((l = l.slice(1)), -1) : 1), | |
| B.DEBUG && 15 < l.replace(/^0\.0*|\./, "").length) | |
| ) | |
| throw Error(T + e); | |
| } else c.s = 45 === l.charCodeAt(0) ? ((l = l.slice(1)), -1) : 1; | |
| for (n = S.slice(0, r), o = s = 0, u = l.length; s < u; s++) | |
| if (n.indexOf((t = l.charAt(s))) < 0) { | |
| if ("." == t) { | |
| if (o < s) { | |
| o = u; | |
| continue; | |
| } | |
| } else if ( | |
| !i && | |
| ((l == l.toUpperCase() && (l = l.toLowerCase())) || | |
| (l == l.toLowerCase() && (l = l.toUpperCase()))) | |
| ) { | |
| (i = !0), (s = -1), (o = 0); | |
| continue; | |
| } | |
| return h(c, String(e), f, r); | |
| } | |
| (f = !1), | |
| -1 < (o = (l = a(l, r, 10, c.s)).indexOf(".")) | |
| ? (l = l.replace(".", "")) | |
| : (o = l.length); | |
| } | |
| for (s = 0; 48 === l.charCodeAt(s); s++); | |
| for (u = l.length; 48 === l.charCodeAt(--u); ); | |
| if ((l = l.slice(s, ++u))) { | |
| if (((u -= s), f && B.DEBUG && 15 < u && (G < e || e !== U(e)))) | |
| throw Error(T + c.s * e); | |
| if ((o = o - s - 1) > y) c.c = c.e = null; | |
| else if (o < m) c.c = [(c.e = 0)]; | |
| else { | |
| if ( | |
| ((c.e = o), (c.c = []), (s = (o + 1) % M), o < 0 && (s += M), s < u) | |
| ) { | |
| for (s && c.c.push(+l.slice(0, s)), u -= M; s < u; ) | |
| c.c.push(+l.slice(s, (s += M))); | |
| s = M - (l = l.slice(s)).length; | |
| } else s -= u; | |
| for (; s--; l += "0"); | |
| c.c.push(+l); | |
| } | |
| } else c.c = [(c.e = 0)]; | |
| } | |
| function i(e, r, n, t) { | |
| var i, o, s, f, u; | |
| if ((null == n ? (n = O) : H(n, 0, 8), !e.c)) return e.toString(); | |
| if (((i = e.c[0]), (s = e.e), null == r)) | |
| (u = $(e.c)), | |
| (u = | |
| 1 == t || (2 == t && (s <= p || d <= s)) ? W(u, s) : X(u, s, "0")); | |
| else if ( | |
| ((o = (e = D(new B(e), r, n)).e), | |
| (f = (u = $(e.c)).length), | |
| 1 == t || (2 == t && (r <= o || o <= p))) | |
| ) { | |
| for (; f < r; u += "0", f++); | |
| u = W(u, o); | |
| } else if (((r -= s), (u = X(u, o, "0")), f < o + 1)) { | |
| if (0 < --r) for (u += "."; r--; u += "0"); | |
| } else if (0 < (r += o - f)) | |
| for (o + 1 == f && (u += "."); r--; u += "0"); | |
| return e.s < 0 && i ? "-" + u : u; | |
| } | |
| function R(e, r) { | |
| for (var n, t = 1, i = new B(e[0]); t < e.length; t++) { | |
| if (!(n = new B(e[t])).s) { | |
| i = n; | |
| break; | |
| } | |
| r.call(i, n) && (i = n); | |
| } | |
| return i; | |
| } | |
| function _(e, r, n) { | |
| for (var t = 1, i = r.length; !r[--i]; r.pop()); | |
| for (i = r[0]; 10 <= i; i /= 10, t++); | |
| return ( | |
| (n = t + n * M - 1) > y | |
| ? (e.c = e.e = null) | |
| : (e.c = n < m ? [(e.e = 0)] : ((e.e = n), r)), | |
| e | |
| ); | |
| } | |
| function D(e, r, n, t) { | |
| var i, | |
| o, | |
| s, | |
| f, | |
| u, | |
| l, | |
| c, | |
| a = e.c, | |
| h = k; | |
| if (a) { | |
| e: { | |
| for (i = 1, f = a[0]; 10 <= f; f /= 10, i++); | |
| if ((o = r - i) < 0) | |
| (o += M), (s = r), (c = ((u = a[(l = 0)]) / h[i - s - 1]) % 10 | 0); | |
| else if ((l = L((o + 1) / M)) >= a.length) { | |
| if (!t) break e; | |
| for (; a.length <= l; a.push(0)); | |
| (u = c = 0), (s = (o %= M) - M + (i = 1)); | |
| } else { | |
| for (u = f = a[l], i = 1; 10 <= f; f /= 10, i++); | |
| c = (s = (o %= M) - M + i) < 0 ? 0 : (u / h[i - s - 1]) % 10 | 0; | |
| } | |
| if ( | |
| ((t = | |
| t || r < 0 || null != a[l + 1] || (s < 0 ? u : u % h[i - s - 1])), | |
| (t = | |
| n < 4 | |
| ? (c || t) && (0 == n || n == (e.s < 0 ? 3 : 2)) | |
| : 5 < c || | |
| (5 == c && | |
| (4 == n || | |
| t || | |
| (6 == n && | |
| (0 < o ? (0 < s ? u / h[i - s] : 0) : a[l - 1]) % 10 & | |
| 1) || | |
| n == (e.s < 0 ? 8 : 7)))), | |
| r < 1 || !a[0]) | |
| ) | |
| return ( | |
| (a.length = 0), | |
| t | |
| ? ((r -= e.e + 1), | |
| (a[0] = h[(M - (r % M)) % M]), | |
| (e.e = -r || 0)) | |
| : (a[0] = e.e = 0), | |
| e | |
| ); | |
| if ( | |
| (0 == o | |
| ? ((a.length = l), (f = 1), l--) | |
| : ((a.length = l + 1), | |
| (f = h[M - o]), | |
| (a[l] = 0 < s ? U((u / h[i - s]) % h[s]) * f : 0)), | |
| t) | |
| ) | |
| for (;;) { | |
| if (0 == l) { | |
| for (o = 1, s = a[0]; 10 <= s; s /= 10, o++); | |
| for (s = a[0] += f, f = 1; 10 <= s; s /= 10, f++); | |
| o != f && (e.e++, a[0] == C && (a[0] = 1)); | |
| break; | |
| } | |
| if (((a[l] += f), a[l] != C)) break; | |
| (a[l--] = 0), (f = 1); | |
| } | |
| for (o = a.length; 0 === a[--o]; a.pop()); | |
| } | |
| e.e > y ? (e.c = e.e = null) : e.e < m && (e.c = [(e.e = 0)]); | |
| } | |
| return e; | |
| } | |
| function P(e) { | |
| var r, | |
| n = e.e; | |
| return null === n | |
| ? e.toString() | |
| : ((r = $(e.c)), | |
| (r = n <= p || d <= n ? W(r, n) : X(r, n, "0")), | |
| e.s < 0 ? "-" + r : r); | |
| } | |
| return ( | |
| (B.clone = e), | |
| (B.ROUND_UP = 0), | |
| (B.ROUND_DOWN = 1), | |
| (B.ROUND_CEIL = 2), | |
| (B.ROUND_FLOOR = 3), | |
| (B.ROUND_HALF_UP = 4), | |
| (B.ROUND_HALF_DOWN = 5), | |
| (B.ROUND_HALF_EVEN = 6), | |
| (B.ROUND_HALF_CEIL = 7), | |
| (B.ROUND_HALF_FLOOR = 8), | |
| (B.EUCLID = 9), | |
| (B.config = B.set = | |
| function (e) { | |
| var r, n; | |
| if (null != e) { | |
| if ("object" != typeof e) throw Error(I + "Object expected: " + e); | |
| if ( | |
| (e.hasOwnProperty((r = "DECIMAL_PLACES")) && | |
| (H((n = e[r]), 0, q, r), (N = n)), | |
| e.hasOwnProperty((r = "ROUNDING_MODE")) && | |
| (H((n = e[r]), 0, 8, r), (O = n)), | |
| e.hasOwnProperty((r = "EXPONENTIAL_AT")) && | |
| ((n = e[r]) && n.pop | |
| ? (H(n[0], -q, 0, r), | |
| H(n[1], 0, q, r), | |
| (p = n[0]), | |
| (d = n[1])) | |
| : (H(n, -q, q, r), (p = -(d = n < 0 ? -n : n)))), | |
| e.hasOwnProperty((r = "RANGE"))) | |
| ) | |
| if ((n = e[r]) && n.pop) | |
| H(n[0], -q, -1, r), H(n[1], 1, q, r), (m = n[0]), (y = n[1]); | |
| else { | |
| if ((H(n, -q, q, r), !n)) | |
| throw Error(I + r + " cannot be zero: " + n); | |
| m = -(y = n < 0 ? -n : n); | |
| } | |
| if (e.hasOwnProperty((r = "CRYPTO"))) { | |
| if ((n = e[r]) !== !!n) | |
| throw Error(I + r + " not true or false: " + n); | |
| if (n) { | |
| if ( | |
| "undefined" == typeof crypto || | |
| !crypto || | |
| (!crypto.getRandomValues && !crypto.randomBytes) | |
| ) | |
| throw ((b = !n), Error(I + "crypto unavailable")); | |
| b = n; | |
| } else b = n; | |
| } | |
| if ( | |
| (e.hasOwnProperty((r = "MODULO_MODE")) && | |
| (H((n = e[r]), 0, 9, r), (o = n)), | |
| e.hasOwnProperty((r = "POW_PRECISION")) && | |
| (H((n = e[r]), 0, q, r), (E = n)), | |
| e.hasOwnProperty((r = "FORMAT"))) | |
| ) { | |
| if ("object" != typeof (n = e[r])) | |
| throw Error(I + r + " not an object: " + n); | |
| A = n; | |
| } | |
| if (e.hasOwnProperty((r = "ALPHABET"))) { | |
| if ( | |
| "string" != typeof (n = e[r]) || | |
| /^.$|[+-.\s]|(.).*\1/.test(n) | |
| ) | |
| throw Error(I + r + " invalid: " + n); | |
| S = n; | |
| } | |
| } | |
| return { | |
| DECIMAL_PLACES: N, | |
| ROUNDING_MODE: O, | |
| EXPONENTIAL_AT: [p, d], | |
| RANGE: [m, y], | |
| CRYPTO: b, | |
| MODULO_MODE: o, | |
| POW_PRECISION: E, | |
| FORMAT: A, | |
| ALPHABET: S, | |
| }; | |
| }), | |
| (B.isBigNumber = function (e) { | |
| if (!e || !0 !== e._isBigNumber) return !1; | |
| if (!B.DEBUG) return !0; | |
| var r, | |
| n, | |
| t = e.c, | |
| i = e.e, | |
| o = e.s; | |
| e: if ("[object Array]" == {}.toString.call(t)) { | |
| if ((1 === o || -1 === o) && -q <= i && i <= q && i === U(i)) { | |
| if (0 === t[0]) { | |
| if (0 === i && 1 === t.length) return !0; | |
| break e; | |
| } | |
| if (((r = (i + 1) % M) < 1 && (r += M), String(t[0]).length == r)) { | |
| for (r = 0; r < t.length; r++) | |
| if ((n = t[r]) < 0 || C <= n || n !== U(n)) break e; | |
| if (0 !== n) return !0; | |
| } | |
| } | |
| } else if ( | |
| null === t && | |
| null === i && | |
| (null === o || 1 === o || -1 === o) | |
| ) | |
| return !0; | |
| throw Error(I + "Invalid BigNumber: " + e); | |
| }), | |
| (B.maximum = B.max = | |
| function () { | |
| return R(arguments, t.lt); | |
| }), | |
| (B.minimum = B.min = | |
| function () { | |
| return R(arguments, t.gt); | |
| }), | |
| (B.random = | |
| ((n = 9007199254740992), | |
| (l = | |
| (Math.random() * n) & 2097151 | |
| ? function () { | |
| return U(Math.random() * n); | |
| } | |
| : function () { | |
| return ( | |
| 8388608 * ((1073741824 * Math.random()) | 0) + | |
| ((8388608 * Math.random()) | 0) | |
| ); | |
| }), | |
| function (e) { | |
| var r, | |
| n, | |
| t, | |
| i, | |
| o, | |
| s = 0, | |
| f = [], | |
| u = new B(w); | |
| if ((null == e ? (e = N) : H(e, 0, q), (i = L(e / M)), b)) | |
| if (crypto.getRandomValues) { | |
| for ( | |
| r = crypto.getRandomValues(new Uint32Array((i *= 2))); | |
| s < i; | |
| ) | |
| 9e15 <= (o = 131072 * r[s] + (r[s + 1] >>> 11)) | |
| ? ((n = crypto.getRandomValues(new Uint32Array(2))), | |
| (r[s] = n[0]), | |
| (r[s + 1] = n[1])) | |
| : (f.push(o % 1e14), (s += 2)); | |
| s = i / 2; | |
| } else { | |
| if (!crypto.randomBytes) | |
| throw ((b = !1), Error(I + "crypto unavailable")); | |
| for (r = crypto.randomBytes((i *= 7)); s < i; ) | |
| 9e15 <= | |
| (o = | |
| 281474976710656 * (31 & r[s]) + | |
| 1099511627776 * r[s + 1] + | |
| 4294967296 * r[s + 2] + | |
| 16777216 * r[s + 3] + | |
| (r[s + 4] << 16) + | |
| (r[s + 5] << 8) + | |
| r[s + 6]) | |
| ? crypto.randomBytes(7).copy(r, s) | |
| : (f.push(o % 1e14), (s += 7)); | |
| s = i / 7; | |
| } | |
| if (!b) for (; s < i; ) (o = l()) < 9e15 && (f[s++] = o % 1e14); | |
| for ( | |
| i = f[--s], | |
| e %= M, | |
| i && e && ((o = k[M - e]), (f[s] = U(i / o) * o)); | |
| 0 === f[s]; | |
| f.pop(), s-- | |
| ); | |
| if (s < 0) f = [(t = 0)]; | |
| else { | |
| for (t = -1; 0 === f[0]; f.splice(0, 1), t -= M); | |
| for (s = 1, o = f[0]; 10 <= o; o /= 10, s++); | |
| s < M && (t -= M - s); | |
| } | |
| return (u.e = t), (u.c = f), u; | |
| })), | |
| (B.sum = function () { | |
| for (var e = 1, r = arguments, n = new B(r[0]); e < r.length; ) | |
| n = n.plus(r[e++]); | |
| return n; | |
| }), | |
| (a = (function () { | |
| var d = "0123456789"; | |
| function m(e, r, n, t) { | |
| for (var i, o, s = [0], f = 0, u = e.length; f < u; ) { | |
| for (o = s.length; o--; s[o] *= r); | |
| for (s[0] += t.indexOf(e.charAt(f++)), i = 0; i < s.length; i++) | |
| s[i] > n - 1 && | |
| (null == s[i + 1] && (s[i + 1] = 0), | |
| (s[i + 1] += (s[i] / n) | 0), | |
| (s[i] %= n)); | |
| } | |
| return s.reverse(); | |
| } | |
| return function (e, r, n, t, i) { | |
| var o, | |
| s, | |
| f, | |
| u, | |
| l, | |
| c, | |
| a, | |
| h, | |
| g = e.indexOf("."), | |
| p = N, | |
| w = O; | |
| for ( | |
| 0 <= g && | |
| ((u = E), | |
| (E = 0), | |
| (e = e.replace(".", "")), | |
| (c = (h = new B(r)).pow(e.length - g)), | |
| (E = u), | |
| (h.c = m(X($(c.c), c.e, "0"), 10, n, d)), | |
| (h.e = h.c.length)), | |
| f = u = (a = m(e, r, n, i ? ((o = S), d) : ((o = d), S))).length; | |
| 0 == a[--u]; | |
| a.pop() | |
| ); | |
| if (!a[0]) return o.charAt(0); | |
| if ( | |
| (g < 0 | |
| ? --f | |
| : ((c.c = a), | |
| (c.e = f), | |
| (c.s = t), | |
| (a = (c = v(c, h, p, w, n)).c), | |
| (l = c.r), | |
| (f = c.e)), | |
| (g = a[(s = f + p + 1)]), | |
| (u = n / 2), | |
| (l = l || s < 0 || null != a[s + 1]), | |
| (l = | |
| w < 4 | |
| ? (null != g || l) && (0 == w || w == (c.s < 0 ? 3 : 2)) | |
| : u < g || | |
| (g == u && | |
| (4 == w || | |
| l || | |
| (6 == w && 1 & a[s - 1]) || | |
| w == (c.s < 0 ? 8 : 7)))), | |
| s < 1 || !a[0]) | |
| ) | |
| e = l ? X(o.charAt(1), -p, o.charAt(0)) : o.charAt(0); | |
| else { | |
| if (((a.length = s), l)) | |
| for (--n; ++a[--s] > n; ) | |
| (a[s] = 0), s || (++f, (a = [1].concat(a))); | |
| for (u = a.length; !a[--u]; ); | |
| for (g = 0, e = ""; g <= u; e += o.charAt(a[g++])); | |
| e = X(e, f, o.charAt(0)); | |
| } | |
| return e; | |
| }; | |
| })()), | |
| (v = (function () { | |
| function S(e, r, n) { | |
| var t, | |
| i, | |
| o, | |
| s, | |
| f = 0, | |
| u = e.length, | |
| l = r % F, | |
| c = (r / F) | 0; | |
| for (e = e.slice(); u--; ) | |
| (f = | |
| (((i = | |
| l * (o = e[u] % F) + | |
| ((t = c * o + (s = (e[u] / F) | 0) * l) % F) * F + | |
| f) / | |
| n) | | |
| 0) + | |
| ((t / F) | 0) + | |
| c * s), | |
| (e[u] = i % n); | |
| return f && (e = [f].concat(e)), e; | |
| } | |
| function R(e, r, n, t) { | |
| var i, o; | |
| if (n != t) o = t < n ? 1 : -1; | |
| else | |
| for (i = o = 0; i < n; i++) | |
| if (e[i] != r[i]) { | |
| o = e[i] > r[i] ? 1 : -1; | |
| break; | |
| } | |
| return o; | |
| } | |
| function _(e, r, n, t) { | |
| for (var i = 0; n--; ) | |
| (e[n] -= i), | |
| (i = e[n] < r[n] ? 1 : 0), | |
| (e[n] = i * t + e[n] - r[n]); | |
| for (; !e[0] && 1 < e.length; e.splice(0, 1)); | |
| } | |
| return function (e, r, n, t, i) { | |
| var o, | |
| s, | |
| f, | |
| u, | |
| l, | |
| c, | |
| a, | |
| h, | |
| g, | |
| p, | |
| w, | |
| d, | |
| m, | |
| v, | |
| N, | |
| O, | |
| y, | |
| b = e.s == r.s ? 1 : -1, | |
| E = e.c, | |
| A = r.c; | |
| if (!(E && E[0] && A && A[0])) | |
| return new B( | |
| e.s && r.s && (E ? !A || E[0] != A[0] : A) | |
| ? (E && 0 == E[0]) || !A | |
| ? 0 * b | |
| : b / 0 | |
| : NaN | |
| ); | |
| for ( | |
| g = (h = new B(b)).c = [], | |
| b = n + (s = e.e - r.e) + 1, | |
| i || ((i = C), (s = j(e.e / M) - j(r.e / M)), (b = (b / M) | 0)), | |
| f = 0; | |
| A[f] == (E[f] || 0); | |
| f++ | |
| ); | |
| if ((A[f] > (E[f] || 0) && s--, b < 0)) g.push(1), (u = !0); | |
| else { | |
| for ( | |
| v = E.length, | |
| O = A.length, | |
| b += 2, | |
| 1 < (l = U(i / (A[(f = 0)] + 1))) && | |
| ((A = S(A, l, i)), | |
| (E = S(E, l, i)), | |
| (O = A.length), | |
| (v = E.length)), | |
| m = O, | |
| w = (p = E.slice(0, O)).length; | |
| w < O; | |
| p[w++] = 0 | |
| ); | |
| (y = A.slice()), | |
| (y = [0].concat(y)), | |
| (N = A[0]), | |
| A[1] >= i / 2 && N++; | |
| do { | |
| if (((l = 0), (o = R(A, p, O, w)) < 0)) { | |
| if ( | |
| ((d = p[0]), | |
| O != w && (d = d * i + (p[1] || 0)), | |
| 1 < (l = U(d / N))) | |
| ) | |
| for ( | |
| i <= l && (l = i - 1), | |
| a = (c = S(A, l, i)).length, | |
| w = p.length; | |
| 1 == R(c, p, a, w); | |
| ) | |
| l--, _(c, O < a ? y : A, a, i), (a = c.length), (o = 1); | |
| else 0 == l && (o = l = 1), (a = (c = A.slice()).length); | |
| if ( | |
| (a < w && (c = [0].concat(c)), | |
| _(p, c, w, i), | |
| (w = p.length), | |
| -1 == o) | |
| ) | |
| for (; R(A, p, O, w) < 1; ) | |
| l++, _(p, O < w ? y : A, w, i), (w = p.length); | |
| } else 0 === o && (l++, (p = [0])); | |
| (g[f++] = l), | |
| p[0] ? (p[w++] = E[m] || 0) : ((p = [E[m]]), (w = 1)); | |
| } while ((m++ < v || null != p[0]) && b--); | |
| (u = null != p[0]), g[0] || g.splice(0, 1); | |
| } | |
| if (i == C) { | |
| for (f = 1, b = g[0]; 10 <= b; b /= 10, f++); | |
| D(h, n + (h.e = f + s * M - 1) + 1, t, u); | |
| } else (h.e = s), (h.r = +u); | |
| return h; | |
| }; | |
| })()), | |
| (s = /^(-?)0([xbo])(?=\w[\w.]*$)/i), | |
| (f = /^([^.]+)\.$/), | |
| (u = /^\.([^.]+)$/), | |
| (c = /^-?(Infinity|NaN)$/), | |
| (g = /^\s*\+(?=[\w.])|^\s+|\s+$/g), | |
| (h = function (e, r, n, t) { | |
| var i, | |
| o = n ? r : r.replace(g, ""); | |
| if (c.test(o)) e.s = isNaN(o) ? null : o < 0 ? -1 : 1; | |
| else { | |
| if ( | |
| !n && | |
| ((o = o.replace(s, function (e, r, n) { | |
| return ( | |
| (i = "x" == (n = n.toLowerCase()) ? 16 : "b" == n ? 2 : 8), | |
| t && t != i ? e : r | |
| ); | |
| })), | |
| t && ((i = t), (o = o.replace(f, "$1").replace(u, "0.$1"))), | |
| r != o) | |
| ) | |
| return new B(o, i); | |
| if (B.DEBUG) | |
| throw Error( | |
| I + "Not a" + (t ? " base " + t : "") + " number: " + r | |
| ); | |
| e.s = null; | |
| } | |
| e.c = e.e = null; | |
| }), | |
| (t.absoluteValue = t.abs = | |
| function () { | |
| var e = new B(this); | |
| return e.s < 0 && (e.s = 1), e; | |
| }), | |
| (t.comparedTo = function (e, r) { | |
| return z(this, new B(e, r)); | |
| }), | |
| (t.decimalPlaces = t.dp = | |
| function (e, r) { | |
| var n, t, i; | |
| if (null != e) | |
| return ( | |
| H(e, 0, q), | |
| null == r ? (r = O) : H(r, 0, 8), | |
| D(new B(this), e + this.e + 1, r) | |
| ); | |
| if (!(n = this.c)) return null; | |
| if (((t = ((i = n.length - 1) - j(this.e / M)) * M), (i = n[i]))) | |
| for (; i % 10 == 0; i /= 10, t--); | |
| return t < 0 && (t = 0), t; | |
| }), | |
| (t.dividedBy = t.div = | |
| function (e, r) { | |
| return v(this, new B(e, r), N, O); | |
| }), | |
| (t.dividedToIntegerBy = t.idiv = | |
| function (e, r) { | |
| return v(this, new B(e, r), 0, 1); | |
| }), | |
| (t.exponentiatedBy = t.pow = | |
| function (e, r) { | |
| var n, | |
| t, | |
| i, | |
| o, | |
| s, | |
| f, | |
| u, | |
| l, | |
| c = this; | |
| if ((e = new B(e)).c && !e.isInteger()) | |
| throw Error(I + "Exponent not an integer: " + P(e)); | |
| if ( | |
| (null != r && (r = new B(r)), | |
| (s = 14 < e.e), | |
| !c.c || | |
| !c.c[0] || | |
| (1 == c.c[0] && !c.e && 1 == c.c.length) || | |
| !e.c || | |
| !e.c[0]) | |
| ) | |
| return ( | |
| (l = new B(Math.pow(+P(c), s ? 2 - V(e) : +P(e)))), | |
| r ? l.mod(r) : l | |
| ); | |
| if (((f = e.s < 0), r)) { | |
| if (r.c ? !r.c[0] : !r.s) return new B(NaN); | |
| (t = !f && c.isInteger() && r.isInteger()) && (c = c.mod(r)); | |
| } else { | |
| if ( | |
| 9 < e.e && | |
| (0 < c.e || | |
| c.e < -1 || | |
| (0 == c.e | |
| ? 1 < c.c[0] || (s && 24e7 <= c.c[1]) | |
| : c.c[0] < 8e13 || (s && c.c[0] <= 9999975e7))) | |
| ) | |
| return ( | |
| (o = c.s < 0 && V(e) ? -0 : 0), | |
| -1 < c.e && (o = 1 / o), | |
| new B(f ? 1 / o : o) | |
| ); | |
| E && (o = L(E / M + 2)); | |
| } | |
| for ( | |
| u = s | |
| ? ((n = new B(0.5)), f && (e.s = 1), V(e)) | |
| : (i = Math.abs(+P(e))) % 2, | |
| l = new B(w); | |
| ; | |
| ) { | |
| if (u) { | |
| if (!(l = l.times(c)).c) break; | |
| o ? l.c.length > o && (l.c.length = o) : t && (l = l.mod(r)); | |
| } | |
| if (i) { | |
| if (0 === (i = U(i / 2))) break; | |
| u = i % 2; | |
| } else if ((D((e = e.times(n)), e.e + 1, 1), 14 < e.e)) u = V(e); | |
| else { | |
| if (0 == (i = +P(e))) break; | |
| u = i % 2; | |
| } | |
| (c = c.times(c)), | |
| o | |
| ? c.c && c.c.length > o && (c.c.length = o) | |
| : t && (c = c.mod(r)); | |
| } | |
| return t | |
| ? l | |
| : (f && (l = w.div(l)), r ? l.mod(r) : o ? D(l, E, O, void 0) : l); | |
| }), | |
| (t.integerValue = function (e) { | |
| var r = new B(this); | |
| return null == e ? (e = O) : H(e, 0, 8), D(r, r.e + 1, e); | |
| }), | |
| (t.isEqualTo = t.eq = | |
| function (e, r) { | |
| return 0 === z(this, new B(e, r)); | |
| }), | |
| (t.isFinite = function () { | |
| return !!this.c; | |
| }), | |
| (t.isGreaterThan = t.gt = | |
| function (e, r) { | |
| return 0 < z(this, new B(e, r)); | |
| }), | |
| (t.isGreaterThanOrEqualTo = t.gte = | |
| function (e, r) { | |
| return 1 === (r = z(this, new B(e, r))) || 0 === r; | |
| }), | |
| (t.isInteger = function () { | |
| return !!this.c && j(this.e / M) > this.c.length - 2; | |
| }), | |
| (t.isLessThan = t.lt = | |
| function (e, r) { | |
| return z(this, new B(e, r)) < 0; | |
| }), | |
| (t.isLessThanOrEqualTo = t.lte = | |
| function (e, r) { | |
| return -1 === (r = z(this, new B(e, r))) || 0 === r; | |
| }), | |
| (t.isNaN = function () { | |
| return !this.s; | |
| }), | |
| (t.isNegative = function () { | |
| return this.s < 0; | |
| }), | |
| (t.isPositive = function () { | |
| return 0 < this.s; | |
| }), | |
| (t.isZero = function () { | |
| return !!this.c && 0 == this.c[0]; | |
| }), | |
| (t.minus = function (e, r) { | |
| var n, | |
| t, | |
| i, | |
| o, | |
| s = this, | |
| f = s.s; | |
| if (((r = (e = new B(e, r)).s), !f || !r)) return new B(NaN); | |
| if (f != r) return (e.s = -r), s.plus(e); | |
| var u = s.e / M, | |
| l = e.e / M, | |
| c = s.c, | |
| a = e.c; | |
| if (!u || !l) { | |
| if (!c || !a) return c ? ((e.s = -r), e) : new B(a ? s : NaN); | |
| if (!c[0] || !a[0]) | |
| return a[0] ? ((e.s = -r), e) : new B(c[0] ? s : 3 == O ? -0 : 0); | |
| } | |
| if (((u = j(u)), (l = j(l)), (c = c.slice()), (f = u - l))) { | |
| for ( | |
| (i = (o = f < 0) ? ((f = -f), c) : ((l = u), a)).reverse(), r = f; | |
| r--; | |
| i.push(0) | |
| ); | |
| i.reverse(); | |
| } else | |
| for ( | |
| t = (o = (f = c.length) < (r = a.length)) ? f : r, f = r = 0; | |
| r < t; | |
| r++ | |
| ) | |
| if (c[r] != a[r]) { | |
| o = c[r] < a[r]; | |
| break; | |
| } | |
| if ( | |
| (o && ((i = c), (c = a), (a = i), (e.s = -e.s)), | |
| 0 < (r = (t = a.length) - (n = c.length))) | |
| ) | |
| for (; r--; c[n++] = 0); | |
| for (r = C - 1; f < t; ) { | |
| if (c[--t] < a[t]) { | |
| for (n = t; n && !c[--n]; c[n] = r); | |
| --c[n], (c[t] += C); | |
| } | |
| c[t] -= a[t]; | |
| } | |
| for (; 0 == c[0]; c.splice(0, 1), --l); | |
| return c[0] | |
| ? _(e, c, l) | |
| : ((e.s = 3 == O ? -1 : 1), (e.c = [(e.e = 0)]), e); | |
| }), | |
| (t.modulo = t.mod = | |
| function (e, r) { | |
| var n, | |
| t, | |
| i = this; | |
| return ( | |
| (e = new B(e, r)), | |
| !i.c || !e.s || (e.c && !e.c[0]) | |
| ? new B(NaN) | |
| : !e.c || (i.c && !i.c[0]) | |
| ? new B(i) | |
| : (9 == o | |
| ? ((t = e.s), | |
| (e.s = 1), | |
| (n = v(i, e, 0, 3)), | |
| (e.s = t), | |
| (n.s *= t)) | |
| : (n = v(i, e, 0, o)), | |
| (e = i.minus(n.times(e))).c[0] || 1 != o || (e.s = i.s), | |
| e) | |
| ); | |
| }), | |
| (t.multipliedBy = t.times = | |
| function (e, r) { | |
| var n, | |
| t, | |
| i, | |
| o, | |
| s, | |
| f, | |
| u, | |
| l, | |
| c, | |
| a, | |
| h, | |
| g, | |
| p, | |
| w, | |
| d, | |
| m = this, | |
| v = m.c, | |
| N = (e = new B(e, r)).c; | |
| if (!(v && N && v[0] && N[0])) | |
| return ( | |
| !m.s || !e.s || (v && !v[0] && !N) || (N && !N[0] && !v) | |
| ? (e.c = e.e = e.s = null) | |
| : ((e.s *= m.s), | |
| v && N ? ((e.c = [0]), (e.e = 0)) : (e.c = e.e = null)), | |
| e | |
| ); | |
| for ( | |
| t = j(m.e / M) + j(e.e / M), | |
| e.s *= m.s, | |
| (u = v.length) < (a = N.length) && | |
| ((p = v), (v = N), (N = p), (i = u), (u = a), (a = i)), | |
| i = u + a, | |
| p = []; | |
| i--; | |
| p.push(0) | |
| ); | |
| for (w = C, d = F, i = a; 0 <= --i; ) { | |
| for ( | |
| n = 0, h = N[i] % d, g = (N[i] / d) | 0, o = i + (s = u); | |
| i < o; | |
| ) | |
| (n = | |
| (((l = | |
| h * (l = v[--s] % d) + | |
| ((f = g * l + (c = (v[s] / d) | 0) * h) % d) * d + | |
| p[o] + | |
| n) / | |
| w) | | |
| 0) + | |
| ((f / d) | 0) + | |
| g * c), | |
| (p[o--] = l % w); | |
| p[o] = n; | |
| } | |
| return n ? ++t : p.splice(0, 1), _(e, p, t); | |
| }), | |
| (t.negated = function () { | |
| var e = new B(this); | |
| return (e.s = -e.s || null), e; | |
| }), | |
| (t.plus = function (e, r) { | |
| var n, | |
| t = this, | |
| i = t.s; | |
| if (((r = (e = new B(e, r)).s), !i || !r)) return new B(NaN); | |
| if (i != r) return (e.s = -r), t.minus(e); | |
| var o = t.e / M, | |
| s = e.e / M, | |
| f = t.c, | |
| u = e.c; | |
| if (!o || !s) { | |
| if (!f || !u) return new B(i / 0); | |
| if (!f[0] || !u[0]) return u[0] ? e : new B(f[0] ? t : 0 * i); | |
| } | |
| if (((o = j(o)), (s = j(s)), (f = f.slice()), (i = o - s))) { | |
| for ( | |
| (n = 0 < i ? ((s = o), u) : ((i = -i), f)).reverse(); | |
| i--; | |
| n.push(0) | |
| ); | |
| n.reverse(); | |
| } | |
| for ( | |
| (i = f.length) - (r = u.length) < 0 && | |
| ((n = u), (u = f), (f = n), (r = i)), | |
| i = 0; | |
| r; | |
| ) | |
| (i = ((f[--r] = f[r] + u[r] + i) / C) | 0), | |
| (f[r] = C === f[r] ? 0 : f[r] % C); | |
| return i && ((f = [i].concat(f)), ++s), _(e, f, s); | |
| }), | |
| (t.precision = t.sd = | |
| function (e, r) { | |
| var n, t, i; | |
| if (null != e && e !== !!e) | |
| return ( | |
| H(e, 1, q), null == r ? (r = O) : H(r, 0, 8), D(new B(this), e, r) | |
| ); | |
| if (!(n = this.c)) return null; | |
| if (((t = (i = n.length - 1) * M + 1), (i = n[i]))) { | |
| for (; i % 10 == 0; i /= 10, t--); | |
| for (i = n[0]; 10 <= i; i /= 10, t++); | |
| } | |
| return e && this.e + 1 > t && (t = this.e + 1), t; | |
| }), | |
| (t.shiftedBy = function (e) { | |
| return H(e, -G, G), this.times("1e" + e); | |
| }), | |
| (t.squareRoot = t.sqrt = | |
| function () { | |
| var e, | |
| r, | |
| n, | |
| t, | |
| i, | |
| o = this, | |
| s = o.c, | |
| f = o.s, | |
| u = o.e, | |
| l = N + 4, | |
| c = new B("0.5"); | |
| if (1 !== f || !s || !s[0]) | |
| return new B(!f || (f < 0 && (!s || s[0])) ? NaN : s ? o : 1 / 0); | |
| if ( | |
| (n = | |
| 0 == (f = Math.sqrt(+P(o))) || f == 1 / 0 | |
| ? (((r = $(s)).length + u) % 2 == 0 && (r += "0"), | |
| (f = Math.sqrt(+r)), | |
| (u = j((u + 1) / 2) - (u < 0 || u % 2)), | |
| new B( | |
| (r = | |
| f == 1 / 0 | |
| ? "1e" + u | |
| : (r = f.toExponential()).slice(0, r.indexOf("e") + 1) + | |
| u) | |
| )) | |
| : new B(f + "")).c[0] | |
| ) | |
| for ((f = (u = n.e) + l) < 3 && (f = 0); ; ) | |
| if ( | |
| ((i = n), | |
| (n = c.times(i.plus(v(o, i, l, 1)))), | |
| $(i.c).slice(0, f) === (r = $(n.c)).slice(0, f)) | |
| ) { | |
| if ( | |
| (n.e < u && --f, | |
| "9999" != (r = r.slice(f - 3, f + 1)) && (t || "4999" != r)) | |
| ) { | |
| (+r && (+r.slice(1) || "5" != r.charAt(0))) || | |
| (D(n, n.e + N + 2, 1), (e = !n.times(n).eq(o))); | |
| break; | |
| } | |
| if (!t && (D(i, i.e + N + 2, 0), i.times(i).eq(o))) { | |
| n = i; | |
| break; | |
| } | |
| (l += 4), (f += 4), (t = 1); | |
| } | |
| return D(n, n.e + N + 1, O, e); | |
| }), | |
| (t.toExponential = function (e, r) { | |
| return null != e && (H(e, 0, q), e++), i(this, e, r, 1); | |
| }), | |
| (t.toFixed = function (e, r) { | |
| return null != e && (H(e, 0, q), (e = e + this.e + 1)), i(this, e, r); | |
| }), | |
| (t.toFormat = function (e, r, n) { | |
| var t; | |
| if (null == n) | |
| null != e && r && "object" == typeof r | |
| ? ((n = r), (r = null)) | |
| : e && "object" == typeof e | |
| ? ((n = e), (e = r = null)) | |
| : (n = A); | |
| else if ("object" != typeof n) | |
| throw Error(I + "Argument not an object: " + n); | |
| if (((t = this.toFixed(e, r)), this.c)) { | |
| var i, | |
| o = t.split("."), | |
| s = +n.groupSize, | |
| f = +n.secondaryGroupSize, | |
| u = n.groupSeparator || "", | |
| l = o[0], | |
| c = o[1], | |
| a = this.s < 0, | |
| h = a ? l.slice(1) : l, | |
| g = h.length; | |
| if ((f && ((i = s), (s = f), (g -= f = i)), 0 < s && 0 < g)) { | |
| for (i = g % s || s, l = h.substr(0, i); i < g; i += s) | |
| l += u + h.substr(i, s); | |
| 0 < f && (l += u + h.slice(i)), a && (l = "-" + l); | |
| } | |
| t = c | |
| ? l + | |
| (n.decimalSeparator || "") + | |
| ((f = +n.fractionGroupSize) | |
| ? c.replace( | |
| new RegExp("\\d{" + f + "}\\B", "g"), | |
| "$&" + (n.fractionGroupSeparator || "") | |
| ) | |
| : c) | |
| : l; | |
| } | |
| return (n.prefix || "") + t + (n.suffix || ""); | |
| }), | |
| (t.toFraction = function (e) { | |
| var r, | |
| n, | |
| t, | |
| i, | |
| o, | |
| s, | |
| f, | |
| u, | |
| l, | |
| c, | |
| a, | |
| h, | |
| g = this, | |
| p = g.c; | |
| if ( | |
| null != e && | |
| ((!(f = new B(e)).isInteger() && (f.c || 1 !== f.s)) || f.lt(w)) | |
| ) | |
| throw Error( | |
| I + | |
| "Argument " + | |
| (f.isInteger() ? "out of range: " : "not an integer: ") + | |
| P(f) | |
| ); | |
| if (!p) return new B(g); | |
| for ( | |
| r = new B(w), | |
| l = n = new B(w), | |
| t = u = new B(w), | |
| h = $(p), | |
| o = r.e = h.length - g.e - 1, | |
| r.c[0] = k[(s = o % M) < 0 ? M + s : s], | |
| e = !e || 0 < f.comparedTo(r) ? (0 < o ? r : l) : f, | |
| s = y, | |
| y = 1 / 0, | |
| f = new B(h), | |
| u.c[0] = 0; | |
| (c = v(f, r, 0, 1)), 1 != (i = n.plus(c.times(t))).comparedTo(e); | |
| ) | |
| (n = t), | |
| (t = i), | |
| (l = u.plus(c.times((i = l)))), | |
| (u = i), | |
| (r = f.minus(c.times((i = r)))), | |
| (f = i); | |
| return ( | |
| (i = v(e.minus(n), t, 0, 1)), | |
| (u = u.plus(i.times(l))), | |
| (n = n.plus(i.times(t))), | |
| (u.s = l.s = g.s), | |
| (a = | |
| v(l, t, (o *= 2), O) | |
| .minus(g) | |
| .abs() | |
| .comparedTo(v(u, n, o, O).minus(g).abs()) < 1 | |
| ? [l, t] | |
| : [u, n]), | |
| (y = s), | |
| a | |
| ); | |
| }), | |
| (t.toNumber = function () { | |
| return +P(this); | |
| }), | |
| (t.toPrecision = function (e, r) { | |
| return null != e && H(e, 1, q), i(this, e, r, 2); | |
| }), | |
| (t.toString = function (e) { | |
| var r, | |
| n = this, | |
| t = n.s, | |
| i = n.e; | |
| return ( | |
| null === i | |
| ? t | |
| ? ((r = "Infinity"), t < 0 && (r = "-" + r)) | |
| : (r = "NaN") | |
| : ((r = | |
| null == e | |
| ? i <= p || d <= i | |
| ? W($(n.c), i) | |
| : X($(n.c), i, "0") | |
| : 10 === e | |
| ? X($((n = D(new B(n), N + i + 1, O)).c), n.e, "0") | |
| : (H(e, 2, S.length, "Base"), | |
| a(X($(n.c), i, "0"), 10, e, t, !0))), | |
| t < 0 && n.c[0] && (r = "-" + r)), | |
| r | |
| ); | |
| }), | |
| (t.valueOf = t.toJSON = | |
| function () { | |
| return P(this); | |
| }), | |
| (t._isBigNumber = !0), | |
| null != r && B.set(r), | |
| B | |
| ); | |
| })()).default = r.BigNumber = | |
| r), | |
| "function" == typeof define && define.amd | |
| ? define(function () { | |
| return r; | |
| }) | |
| : "undefined" != typeof module && module.exports | |
| ? (module.exports = r) | |
| : (e || (e = "undefined" != typeof self && self ? self : window), | |
| (e.BigNumber = r)); | |
| })(this); |
| /* Blob.js | |
| * A Blob implementation. | |
| * 2013-06-20 | |
| * | |
| * By Eli Grey, http://eligrey.com | |
| * By Devin Samarin, https://github.com/eboyjr | |
| * License: X11/MIT | |
| * See LICENSE.md | |
| */ | |
| /*global self, unescape */ | |
| /*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, | |
| plusplus: true */ | |
| /*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ | |
| if (typeof Blob !== "function" || typeof URL === "undefined") | |
| if (typeof Blob === "function" && typeof webkitURL !== "undefined") | |
| self.URL = webkitURL; | |
| else | |
| var Blob = (function (view) { | |
| "use strict"; | |
| var BlobBuilder = | |
| view.BlobBuilder || | |
| view.WebKitBlobBuilder || | |
| view.MozBlobBuilder || | |
| view.MSBlobBuilder || | |
| (function (view) { | |
| var get_class = function (object) { | |
| return Object.prototype.toString | |
| .call(object) | |
| .match(/^\[object\s(.*)\]$/)[1]; | |
| }, | |
| FakeBlobBuilder = function BlobBuilder() { | |
| this.data = []; | |
| }, | |
| FakeBlob = function Blob(data, type, encoding) { | |
| this.data = data; | |
| this.size = data.length; | |
| this.type = type; | |
| this.encoding = encoding; | |
| }, | |
| FBB_proto = FakeBlobBuilder.prototype, | |
| FB_proto = FakeBlob.prototype, | |
| FileReaderSync = view.FileReaderSync, | |
| FileException = function (type) { | |
| this.code = this[(this.name = type)]; | |
| }, | |
| file_ex_codes = ( | |
| "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " + | |
| "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR" | |
| ).split(" "), | |
| file_ex_code = file_ex_codes.length, | |
| real_URL = view.URL || view.webkitURL || view, | |
| real_create_object_URL = real_URL.createObjectURL, | |
| real_revoke_object_URL = real_URL.revokeObjectURL, | |
| URL = real_URL, | |
| btoa = view.btoa, | |
| atob = view.atob, | |
| ArrayBuffer = view.ArrayBuffer, | |
| Uint8Array = view.Uint8Array; | |
| FakeBlob.fake = FB_proto.fake = true; | |
| while (file_ex_code--) { | |
| FileException.prototype[file_ex_codes[file_ex_code]] = | |
| file_ex_code + 1; | |
| } | |
| if (!real_URL.createObjectURL) { | |
| URL = view.URL = {}; | |
| } | |
| URL.createObjectURL = function (blob) { | |
| var type = blob.type, | |
| data_URI_header; | |
| if (type === null) { | |
| type = "application/octet-stream"; | |
| } | |
| if (blob instanceof FakeBlob) { | |
| data_URI_header = "data:" + type; | |
| if (blob.encoding === "base64") { | |
| return data_URI_header + ";base64," + blob.data; | |
| } else if (blob.encoding === "URI") { | |
| return data_URI_header + "," + decodeURIComponent(blob.data); | |
| } | |
| if (btoa) { | |
| return data_URI_header + ";base64," + btoa(blob.data); | |
| } else { | |
| return data_URI_header + "," + encodeURIComponent(blob.data); | |
| } | |
| } else if (real_create_object_URL) { | |
| return real_create_object_URL.call(real_URL, blob); | |
| } | |
| }; | |
| URL.revokeObjectURL = function (object_URL) { | |
| if ( | |
| object_URL.substring(0, 5) !== "data:" && | |
| real_revoke_object_URL | |
| ) { | |
| real_revoke_object_URL.call(real_URL, object_URL); | |
| } | |
| }; | |
| FBB_proto.append = function (data /*, endings*/) { | |
| var bb = this.data; | |
| // decode data to a binary string | |
| if ( | |
| Uint8Array && | |
| (data instanceof ArrayBuffer || data instanceof Uint8Array) | |
| ) { | |
| var str = "", | |
| buf = new Uint8Array(data), | |
| i = 0, | |
| buf_len = buf.length; | |
| for (; i < buf_len; i++) { | |
| str += String.fromCharCode(buf[i]); | |
| } | |
| bb.push(str); | |
| } else if ( | |
| get_class(data) === "Blob" || | |
| get_class(data) === "File" | |
| ) { | |
| if (FileReaderSync) { | |
| var fr = new FileReaderSync(); | |
| bb.push(fr.readAsBinaryString(data)); | |
| } else { | |
| // async FileReader won't work as BlobBuilder is sync | |
| throw new FileException("NOT_READABLE_ERR"); | |
| } | |
| } else if (data instanceof FakeBlob) { | |
| if (data.encoding === "base64" && atob) { | |
| bb.push(atob(data.data)); | |
| } else if (data.encoding === "URI") { | |
| bb.push(decodeURIComponent(data.data)); | |
| } else if (data.encoding === "raw") { | |
| bb.push(data.data); | |
| } | |
| } else { | |
| if (typeof data !== "string") { | |
| data += ""; // convert unsupported types to strings | |
| } | |
| // decode UTF-16 to binary string | |
| bb.push(unescape(encodeURIComponent(data))); | |
| } | |
| }; | |
| FBB_proto.getBlob = function (type) { | |
| if (!arguments.length) { | |
| type = null; | |
| } | |
| return new FakeBlob(this.data.join(""), type, "raw"); | |
| }; | |
| FBB_proto.toString = function () { | |
| return "[object BlobBuilder]"; | |
| }; | |
| FB_proto.slice = function (start, end, type) { | |
| var args = arguments.length; | |
| if (args < 3) { | |
| type = null; | |
| } | |
| return new FakeBlob( | |
| this.data.slice(start, args > 1 ? end : this.data.length), | |
| type, | |
| this.encoding | |
| ); | |
| }; | |
| FB_proto.toString = function () { | |
| return "[object Blob]"; | |
| }; | |
| return FakeBlobBuilder; | |
| })(view); | |
| return function Blob(blobParts, options) { | |
| var type = options ? options.type || "" : ""; | |
| var builder = new BlobBuilder(); | |
| if (blobParts) { | |
| for (var i = 0, len = blobParts.length; i < len; i++) { | |
| builder.append(blobParts[i]); | |
| } | |
| } | |
| return builder.getBlob(type); | |
| }; | |
| })(self); |
| /* canvas-toBlob.js | |
| * A canvas.toBlob() implementation. | |
| * 2011-07-13 | |
| * | |
| * By Eli Grey, http://eligrey.com and Devin Samarin, https://github.com/eboyjr | |
| * License: X11/MIT | |
| * See LICENSE.md | |
| */ | |
| /*global self */ | |
| /*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, | |
| plusplus: true */ | |
| /*! @source http://purl.eligrey.com/github/canvas-toBlob.js/blob/master/canvas-toBlob.js */ | |
| (function (view) { | |
| "use strict"; | |
| var Uint8Array = view.Uint8Array, | |
| HTMLCanvasElement = view.HTMLCanvasElement, | |
| is_base64_regex = /\s*;\s*base64\s*(?:;|$)/i, | |
| base64_ranks, | |
| decode_base64 = function (base64) { | |
| var len = base64.length, | |
| buffer = new Uint8Array(((len / 4) * 3) | 0), | |
| i = 0, | |
| outptr = 0, | |
| last = [0, 0], | |
| state = 0, | |
| save = 0, | |
| rank, | |
| code, | |
| undef; | |
| while (len--) { | |
| code = base64.charCodeAt(i++); | |
| rank = base64_ranks[code - 43]; | |
| if (rank !== 255 && rank !== undef) { | |
| last[1] = last[0]; | |
| last[0] = code; | |
| save = (save << 6) | rank; | |
| state++; | |
| if (state === 4) { | |
| buffer[outptr++] = save >>> 16; | |
| if (last[1] !== 61 /* padding character */) { | |
| buffer[outptr++] = save >>> 8; | |
| } | |
| if (last[0] !== 61 /* padding character */) { | |
| buffer[outptr++] = save; | |
| } | |
| state = 0; | |
| } | |
| } | |
| } | |
| // 2/3 chance there's going to be some null bytes at the end, but that | |
| // doesn't really matter with most image formats. | |
| // If it somehow matters for you, truncate the buffer up outptr. | |
| return buffer; | |
| }; | |
| if (Uint8Array) { | |
| base64_ranks = new Uint8Array([ | |
| 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, | |
| -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, | |
| 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, | |
| 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, | |
| 48, 49, 50, 51, | |
| ]); | |
| } | |
| if (HTMLCanvasElement && !HTMLCanvasElement.prototype.toBlob) { | |
| HTMLCanvasElement.prototype.toBlob = function ( | |
| callback, | |
| type /*, ...args*/ | |
| ) { | |
| if (!type) { | |
| type = "image/png"; | |
| } | |
| if (this.mozGetAsFile) { | |
| callback(this.mozGetAsFile("canvas", type)); | |
| return; | |
| } | |
| var args = Array.prototype.slice.call(arguments, 1), | |
| dataURI = this.toDataURL.apply(this, args), | |
| header_end = dataURI.indexOf(","), | |
| data = dataURI.substring(header_end + 1), | |
| is_base64 = is_base64_regex.test(dataURI.substring(0, header_end)), | |
| blob; | |
| if (Blob.fake) { | |
| // no reason to decode a data: URI that's just going to become a data URI again | |
| blob = new Blob(); | |
| if (is_base64) { | |
| blob.encoding = "base64"; | |
| } else { | |
| blob.encoding = "URI"; | |
| } | |
| blob.data = data; | |
| blob.size = data.length; | |
| } else if (Uint8Array) { | |
| if (is_base64) { | |
| blob = new Blob([decode_base64(data)], { type: type }); | |
| } else { | |
| blob = new Blob([decodeURIComponent(data)], { type: type }); | |
| } | |
| } | |
| callback(blob); | |
| }; | |
| } | |
| })(self); |
| // CodeMirror, copyright (c) by Marijn Haverbeke and others | |
| // Distributed under an MIT license: http://codemirror.net/LICENSE | |
| // This is CodeMirror (http://codemirror.net), a code editor | |
| // implemented in JavaScript on top of the browser's DOM. | |
| // | |
| // You can find some technical background for some of the code below | |
| // at http://marijnhaverbeke.nl/blog/#cm-internals . | |
| (function (global, factory) { | |
| typeof exports === "object" && typeof module !== "undefined" | |
| ? (module.exports = factory()) | |
| : typeof define === "function" && define.amd | |
| ? define(factory) | |
| : (global.CodeMirror = factory()); | |
| })(this, function () { | |
| "use strict"; | |
| // Kludges for bugs and behavior differences that can't be feature | |
| // detected are enabled based on userAgent etc sniffing. | |
| var userAgent = navigator.userAgent; | |
| var platform = navigator.platform; | |
| var gecko = /gecko\/\d/i.test(userAgent); | |
| var ie_upto10 = /MSIE \d/.test(userAgent); | |
| var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); | |
| var edge = /Edge\/(\d+)/.exec(userAgent); | |
| var ie = ie_upto10 || ie_11up || edge; | |
| var ie_version = | |
| ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); | |
| var webkit = !edge && /WebKit\//.test(userAgent); | |
| var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); | |
| var chrome = !edge && /Chrome\//.test(userAgent); | |
| var presto = /Opera\//.test(userAgent); | |
| var safari = /Apple Computer/.test(navigator.vendor); | |
| var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); | |
| var phantom = /PhantomJS/.test(userAgent); | |
| var ios = | |
| !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent); | |
| var android = /Android/.test(userAgent); | |
| // This is woefully incomplete. Suggestions for alternative methods welcome. | |
| var mobile = | |
| ios || | |
| android || | |
| /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); | |
| var mac = ios || /Mac/.test(platform); | |
| var chromeOS = /\bCrOS\b/.test(userAgent); | |
| var windows = /win/i.test(platform); | |
| var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); | |
| if (presto_version) { | |
| presto_version = Number(presto_version[1]); | |
| } | |
| if (presto_version && presto_version >= 15) { | |
| presto = false; | |
| webkit = true; | |
| } | |
| // Some browsers use the wrong event properties to signal cmd/ctrl on OS X | |
| var flipCtrlCmd = | |
| mac && | |
| (qtwebkit || | |
| (presto && (presto_version == null || presto_version < 12.11))); | |
| var captureRightClick = gecko || (ie && ie_version >= 9); | |
| function classTest(cls) { | |
| return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); | |
| } | |
| var rmClass = function (node, cls) { | |
| var current = node.className; | |
| var match = classTest(cls).exec(current); | |
| if (match) { | |
| var after = current.slice(match.index + match[0].length); | |
| node.className = | |
| current.slice(0, match.index) + (after ? match[1] + after : ""); | |
| } | |
| }; | |
| function removeChildren(e) { | |
| for (var count = e.childNodes.length; count > 0; --count) { | |
| e.removeChild(e.firstChild); | |
| } | |
| return e; | |
| } | |
| function removeChildrenAndAdd(parent, e) { | |
| return removeChildren(parent).appendChild(e); | |
| } | |
| function elt(tag, content, className, style) { | |
| var e = document.createElement(tag); | |
| if (className) { | |
| e.className = className; | |
| } | |
| if (style) { | |
| e.style.cssText = style; | |
| } | |
| if (typeof content == "string") { | |
| e.appendChild(document.createTextNode(content)); | |
| } else if (content) { | |
| for (var i = 0; i < content.length; ++i) { | |
| e.appendChild(content[i]); | |
| } | |
| } | |
| return e; | |
| } | |
| // wrapper for elt, which removes the elt from the accessibility tree | |
| function eltP(tag, content, className, style) { | |
| var e = elt(tag, content, className, style); | |
| e.setAttribute("role", "presentation"); | |
| return e; | |
| } | |
| var range; | |
| if (document.createRange) { | |
| range = function (node, start, end, endNode) { | |
| var r = document.createRange(); | |
| r.setEnd(endNode || node, end); | |
| r.setStart(node, start); | |
| return r; | |
| }; | |
| } else { | |
| range = function (node, start, end) { | |
| var r = document.body.createTextRange(); | |
| try { | |
| r.moveToElementText(node.parentNode); | |
| } catch (e) { | |
| return r; | |
| } | |
| r.collapse(true); | |
| r.moveEnd("character", end); | |
| r.moveStart("character", start); | |
| return r; | |
| }; | |
| } | |
| function contains(parent, child) { | |
| if (child.nodeType == 3) { | |
| // Android browser always returns false when child is a textnode | |
| child = child.parentNode; | |
| } | |
| if (parent.contains) { | |
| return parent.contains(child); | |
| } | |
| do { | |
| if (child.nodeType == 11) { | |
| child = child.host; | |
| } | |
| if (child == parent) { | |
| return true; | |
| } | |
| } while ((child = child.parentNode)); | |
| } | |
| function activeElt() { | |
| // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. | |
| // IE < 10 will throw when accessed while the page is loading or in an iframe. | |
| // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. | |
| var activeElement; | |
| try { | |
| activeElement = document.activeElement; | |
| } catch (e) { | |
| activeElement = document.body || null; | |
| } | |
| while ( | |
| activeElement && | |
| activeElement.shadowRoot && | |
| activeElement.shadowRoot.activeElement | |
| ) { | |
| activeElement = activeElement.shadowRoot.activeElement; | |
| } | |
| return activeElement; | |
| } | |
| function addClass(node, cls) { | |
| var current = node.className; | |
| if (!classTest(cls).test(current)) { | |
| node.className += (current ? " " : "") + cls; | |
| } | |
| } | |
| function joinClasses(a, b) { | |
| var as = a.split(" "); | |
| for (var i = 0; i < as.length; i++) { | |
| if (as[i] && !classTest(as[i]).test(b)) { | |
| b += " " + as[i]; | |
| } | |
| } | |
| return b; | |
| } | |
| var selectInput = function (node) { | |
| node.select(); | |
| }; | |
| if (ios) { | |
| // Mobile Safari apparently has a bug where select() is broken. | |
| selectInput = function (node) { | |
| node.selectionStart = 0; | |
| node.selectionEnd = node.value.length; | |
| }; | |
| } else if (ie) { | |
| // Suppress mysterious IE10 errors | |
| selectInput = function (node) { | |
| try { | |
| node.select(); | |
| } catch (_e) {} | |
| }; | |
| } | |
| function bind(f) { | |
| var args = Array.prototype.slice.call(arguments, 1); | |
| return function () { | |
| return f.apply(null, args); | |
| }; | |
| } | |
| function copyObj(obj, target, overwrite) { | |
| if (!target) { | |
| target = {}; | |
| } | |
| for (var prop in obj) { | |
| if ( | |
| obj.hasOwnProperty(prop) && | |
| (overwrite !== false || !target.hasOwnProperty(prop)) | |
| ) { | |
| target[prop] = obj[prop]; | |
| } | |
| } | |
| return target; | |
| } | |
| // Counts the column offset in a string, taking tabs into account. | |
| // Used mostly to find indentation. | |
| function countColumn(string, end, tabSize, startIndex, startValue) { | |
| if (end == null) { | |
| end = string.search(/[^\s\u00a0]/); | |
| if (end == -1) { | |
| end = string.length; | |
| } | |
| } | |
| for (var i = startIndex || 0, n = startValue || 0; ; ) { | |
| var nextTab = string.indexOf("\t", i); | |
| if (nextTab < 0 || nextTab >= end) { | |
| return n + (end - i); | |
| } | |
| n += nextTab - i; | |
| n += tabSize - (n % tabSize); | |
| i = nextTab + 1; | |
| } | |
| } | |
| var Delayed = function () { | |
| this.id = null; | |
| }; | |
| Delayed.prototype.set = function (ms, f) { | |
| clearTimeout(this.id); | |
| this.id = setTimeout(f, ms); | |
| }; | |
| function indexOf(array, elt) { | |
| for (var i = 0; i < array.length; ++i) { | |
| if (array[i] == elt) { | |
| return i; | |
| } | |
| } | |
| return -1; | |
| } | |
| // Number of pixels added to scroller and sizer to hide scrollbar | |
| var scrollerGap = 30; | |
| // Returned or thrown by various protocols to signal 'I'm not | |
| // handling this'. | |
| var Pass = { | |
| toString: function () { | |
| return "CodeMirror.Pass"; | |
| }, | |
| }; | |
| // Reused option objects for setSelection & friends | |
| var sel_dontScroll = { scroll: false }; | |
| var sel_mouse = { origin: "*mouse" }; | |
| var sel_move = { origin: "+move" }; | |
| // The inverse of countColumn -- find the offset that corresponds to | |
| // a particular column. | |
| function findColumn(string, goal, tabSize) { | |
| for (var pos = 0, col = 0; ; ) { | |
| var nextTab = string.indexOf("\t", pos); | |
| if (nextTab == -1) { | |
| nextTab = string.length; | |
| } | |
| var skipped = nextTab - pos; | |
| if (nextTab == string.length || col + skipped >= goal) { | |
| return pos + Math.min(skipped, goal - col); | |
| } | |
| col += nextTab - pos; | |
| col += tabSize - (col % tabSize); | |
| pos = nextTab + 1; | |
| if (col >= goal) { | |
| return pos; | |
| } | |
| } | |
| } | |
| var spaceStrs = [""]; | |
| function spaceStr(n) { | |
| while (spaceStrs.length <= n) { | |
| spaceStrs.push(lst(spaceStrs) + " "); | |
| } | |
| return spaceStrs[n]; | |
| } | |
| function lst(arr) { | |
| return arr[arr.length - 1]; | |
| } | |
| function map(array, f) { | |
| var out = []; | |
| for (var i = 0; i < array.length; i++) { | |
| out[i] = f(array[i], i); | |
| } | |
| return out; | |
| } | |
| function insertSorted(array, value, score) { | |
| var pos = 0, | |
| priority = score(value); | |
| while (pos < array.length && score(array[pos]) <= priority) { | |
| pos++; | |
| } | |
| array.splice(pos, 0, value); | |
| } | |
| function nothing() {} | |
| function createObj(base, props) { | |
| var inst; | |
| if (Object.create) { | |
| inst = Object.create(base); | |
| } else { | |
| nothing.prototype = base; | |
| inst = new nothing(); | |
| } | |
| if (props) { | |
| copyObj(props, inst); | |
| } | |
| return inst; | |
| } | |
| var nonASCIISingleCaseWordChar = | |
| /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; | |
| function isWordCharBasic(ch) { | |
| return ( | |
| /\w/.test(ch) || | |
| (ch > "\x80" && | |
| (ch.toUpperCase() != ch.toLowerCase() || | |
| nonASCIISingleCaseWordChar.test(ch))) | |
| ); | |
| } | |
| function isWordChar(ch, helper) { | |
| if (!helper) { | |
| return isWordCharBasic(ch); | |
| } | |
| if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { | |
| return true; | |
| } | |
| return helper.test(ch); | |
| } | |
| function isEmpty(obj) { | |
| for (var n in obj) { | |
| if (obj.hasOwnProperty(n) && obj[n]) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| // Extending unicode characters. A series of a non-extending char + | |
| // any number of extending chars is treated as a single unit as far | |
| // as editing and measuring is concerned. This is not fully correct, | |
| // since some scripts/fonts/browsers also treat other configurations | |
| // of code points as a group. | |
| var extendingChars = | |
| /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; | |
| function isExtendingChar(ch) { | |
| return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); | |
| } | |
| // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. | |
| function skipExtendingChars(str, pos, dir) { | |
| while ( | |
| (dir < 0 ? pos > 0 : pos < str.length) && | |
| isExtendingChar(str.charAt(pos)) | |
| ) { | |
| pos += dir; | |
| } | |
| return pos; | |
| } | |
| // Returns the value from the range [`from`; `to`] that satisfies | |
| // `pred` and is closest to `from`. Assumes that at least `to` satisfies `pred`. | |
| function findFirst(pred, from, to) { | |
| for (;;) { | |
| if (Math.abs(from - to) <= 1) { | |
| return pred(from) ? from : to; | |
| } | |
| var mid = Math.floor((from + to) / 2); | |
| if (pred(mid)) { | |
| to = mid; | |
| } else { | |
| from = mid; | |
| } | |
| } | |
| } | |
| // The display handles the DOM integration, both for input reading | |
| // and content drawing. It holds references to DOM nodes and | |
| // display-related state. | |
| function Display(place, doc, input) { | |
| var d = this; | |
| this.input = input; | |
| // Covers bottom-right square when both scrollbars are present. | |
| d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); | |
| d.scrollbarFiller.setAttribute("cm-not-content", "true"); | |
| // Covers bottom of gutter when coverGutterNextToScrollbar is on | |
| // and h scrollbar is present. | |
| d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); | |
| d.gutterFiller.setAttribute("cm-not-content", "true"); | |
| // Will contain the actual code, positioned to cover the viewport. | |
| d.lineDiv = eltP("div", null, "CodeMirror-code"); | |
| // Elements are added to these to represent selection and cursors. | |
| d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); | |
| d.cursorDiv = elt("div", null, "CodeMirror-cursors"); | |
| // A visibility: hidden element used to find the size of things. | |
| d.measure = elt("div", null, "CodeMirror-measure"); | |
| // When lines outside of the viewport are measured, they are drawn in this. | |
| d.lineMeasure = elt("div", null, "CodeMirror-measure"); | |
| // Wraps everything that needs to exist inside the vertically-padded coordinate system | |
| d.lineSpace = eltP( | |
| "div", | |
| [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], | |
| null, | |
| "position: relative; outline: none" | |
| ); | |
| var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); | |
| // Moved around its parent to cover visible view. | |
| d.mover = elt("div", [lines], null, "position: relative"); | |
| // Set to the height of the document, allowing scrolling. | |
| d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); | |
| d.sizerWidth = null; | |
| // Behavior of elts with overflow: auto and padding is | |
| // inconsistent across browsers. This is used to ensure the | |
| // scrollable area is big enough. | |
| d.heightForcer = elt( | |
| "div", | |
| null, | |
| null, | |
| "position: absolute; height: " + scrollerGap + "px; width: 1px;" | |
| ); | |
| // Will contain the gutters, if any. | |
| d.gutters = elt("div", null, "CodeMirror-gutters"); | |
| d.lineGutter = null; | |
| // Actual scrollable element. | |
| d.scroller = elt( | |
| "div", | |
| [d.sizer, d.heightForcer, d.gutters], | |
| "CodeMirror-scroll" | |
| ); | |
| d.scroller.setAttribute("tabIndex", "-1"); | |
| // The element in which the editor lives. | |
| d.wrapper = elt( | |
| "div", | |
| [d.scrollbarFiller, d.gutterFiller, d.scroller], | |
| "CodeMirror" | |
| ); | |
| // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) | |
| if (ie && ie_version < 8) { | |
| d.gutters.style.zIndex = -1; | |
| d.scroller.style.paddingRight = 0; | |
| } | |
| if (!webkit && !(gecko && mobile)) { | |
| d.scroller.draggable = true; | |
| } | |
| if (place) { | |
| if (place.appendChild) { | |
| place.appendChild(d.wrapper); | |
| } else { | |
| place(d.wrapper); | |
| } | |
| } | |
| // Current rendered range (may be bigger than the view window). | |
| d.viewFrom = d.viewTo = doc.first; | |
| d.reportedViewFrom = d.reportedViewTo = doc.first; | |
| // Information about the rendered lines. | |
| d.view = []; | |
| d.renderedView = null; | |
| // Holds info about a single rendered line when it was rendered | |
| // for measurement, while not in view. | |
| d.externalMeasured = null; | |
| // Empty space (in pixels) above the view | |
| d.viewOffset = 0; | |
| d.lastWrapHeight = d.lastWrapWidth = 0; | |
| d.updateLineNumbers = null; | |
| d.nativeBarWidth = d.barHeight = d.barWidth = 0; | |
| d.scrollbarsClipped = false; | |
| // Used to only resize the line number gutter when necessary (when | |
| // the amount of lines crosses a boundary that makes its width change) | |
| d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; | |
| // Set to true when a non-horizontal-scrolling line widget is | |
| // added. As an optimization, line widget aligning is skipped when | |
| // this is false. | |
| d.alignWidgets = false; | |
| d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; | |
| // Tracks the maximum line length so that the horizontal scrollbar | |
| // can be kept static when scrolling. | |
| d.maxLine = null; | |
| d.maxLineLength = 0; | |
| d.maxLineChanged = false; | |
| // Used for measuring wheel scrolling granularity | |
| d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; | |
| // True when shift is held down. | |
| d.shift = false; | |
| // Used to track whether anything happened since the context menu | |
| // was opened. | |
| d.selForContextMenu = null; | |
| d.activeTouch = null; | |
| input.init(d); | |
| } | |
| // Find the line object corresponding to the given line number. | |
| function getLine(doc, n) { | |
| n -= doc.first; | |
| if (n < 0 || n >= doc.size) { | |
| throw new Error( | |
| "There is no line " + (n + doc.first) + " in the document." | |
| ); | |
| } | |
| var chunk = doc; | |
| while (!chunk.lines) { | |
| for (var i = 0; ; ++i) { | |
| var child = chunk.children[i], | |
| sz = child.chunkSize(); | |
| if (n < sz) { | |
| chunk = child; | |
| break; | |
| } | |
| n -= sz; | |
| } | |
| } | |
| return chunk.lines[n]; | |
| } | |
| // Get the part of a document between two positions, as an array of | |
| // strings. | |
| function getBetween(doc, start, end) { | |
| var out = [], | |
| n = start.line; | |
| doc.iter(start.line, end.line + 1, function (line) { | |
| var text = line.text; | |
| if (n == end.line) { | |
| text = text.slice(0, end.ch); | |
| } | |
| if (n == start.line) { | |
| text = text.slice(start.ch); | |
| } | |
| out.push(text); | |
| ++n; | |
| }); | |
| return out; | |
| } | |
| // Get the lines between from and to, as array of strings. | |
| function getLines(doc, from, to) { | |
| var out = []; | |
| doc.iter(from, to, function (line) { | |
| out.push(line.text); | |
| }); // iter aborts when callback returns truthy value | |
| return out; | |
| } | |
| // Update the height of a line, propagating the height change | |
| // upwards to parent nodes. | |
| function updateLineHeight(line, height) { | |
| var diff = height - line.height; | |
| if (diff) { | |
| for (var n = line; n; n = n.parent) { | |
| n.height += diff; | |
| } | |
| } | |
| } | |
| // Given a line object, find its line number by walking up through | |
| // its parent links. | |
| function lineNo(line) { | |
| if (line.parent == null) { | |
| return null; | |
| } | |
| var cur = line.parent, | |
| no = indexOf(cur.lines, line); | |
| for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { | |
| for (var i = 0; ; ++i) { | |
| if (chunk.children[i] == cur) { | |
| break; | |
| } | |
| no += chunk.children[i].chunkSize(); | |
| } | |
| } | |
| return no + cur.first; | |
| } | |
| // Find the line at the given vertical position, using the height | |
| // information in the document tree. | |
| function lineAtHeight(chunk, h) { | |
| var n = chunk.first; | |
| outer: do { | |
| for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { | |
| var child = chunk.children[i$1], | |
| ch = child.height; | |
| if (h < ch) { | |
| chunk = child; | |
| continue outer; | |
| } | |
| h -= ch; | |
| n += child.chunkSize(); | |
| } | |
| return n; | |
| } while (!chunk.lines); | |
| var i = 0; | |
| for (; i < chunk.lines.length; ++i) { | |
| var line = chunk.lines[i], | |
| lh = line.height; | |
| if (h < lh) { | |
| break; | |
| } | |
| h -= lh; | |
| } | |
| return n + i; | |
| } | |
| function isLine(doc, l) { | |
| return l >= doc.first && l < doc.first + doc.size; | |
| } | |
| function lineNumberFor(options, i) { | |
| return String(options.lineNumberFormatter(i + options.firstLineNumber)); | |
| } | |
| // A Pos instance represents a position within the text. | |
| function Pos(line, ch, sticky) { | |
| if (sticky === void 0) sticky = null; | |
| if (!(this instanceof Pos)) { | |
| return new Pos(line, ch, sticky); | |
| } | |
| this.line = line; | |
| this.ch = ch; | |
| this.sticky = sticky; | |
| } | |
| // Compare two positions, return 0 if they are the same, a negative | |
| // number when a is less, and a positive number otherwise. | |
| function cmp(a, b) { | |
| return a.line - b.line || a.ch - b.ch; | |
| } | |
| function equalCursorPos(a, b) { | |
| return a.sticky == b.sticky && cmp(a, b) == 0; | |
| } | |
| function copyPos(x) { | |
| return Pos(x.line, x.ch); | |
| } | |
| function maxPos(a, b) { | |
| return cmp(a, b) < 0 ? b : a; | |
| } | |
| function minPos(a, b) { | |
| return cmp(a, b) < 0 ? a : b; | |
| } | |
| // Most of the external API clips given positions to make sure they | |
| // actually exist within the document. | |
| function clipLine(doc, n) { | |
| return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1)); | |
| } | |
| function clipPos(doc, pos) { | |
| if (pos.line < doc.first) { | |
| return Pos(doc.first, 0); | |
| } | |
| var last = doc.first + doc.size - 1; | |
| if (pos.line > last) { | |
| return Pos(last, getLine(doc, last).text.length); | |
| } | |
| return clipToLen(pos, getLine(doc, pos.line).text.length); | |
| } | |
| function clipToLen(pos, linelen) { | |
| var ch = pos.ch; | |
| if (ch == null || ch > linelen) { | |
| return Pos(pos.line, linelen); | |
| } else if (ch < 0) { | |
| return Pos(pos.line, 0); | |
| } else { | |
| return pos; | |
| } | |
| } | |
| function clipPosArray(doc, array) { | |
| var out = []; | |
| for (var i = 0; i < array.length; i++) { | |
| out[i] = clipPos(doc, array[i]); | |
| } | |
| return out; | |
| } | |
| // Optimize some code when these features are not used. | |
| var sawReadOnlySpans = false; | |
| var sawCollapsedSpans = false; | |
| function seeReadOnlySpans() { | |
| sawReadOnlySpans = true; | |
| } | |
| function seeCollapsedSpans() { | |
| sawCollapsedSpans = true; | |
| } | |
| // TEXTMARKER SPANS | |
| function MarkedSpan(marker, from, to) { | |
| this.marker = marker; | |
| this.from = from; | |
| this.to = to; | |
| } | |
| // Search an array of spans for a span matching the given marker. | |
| function getMarkedSpanFor(spans, marker) { | |
| if (spans) { | |
| for (var i = 0; i < spans.length; ++i) { | |
| var span = spans[i]; | |
| if (span.marker == marker) { | |
| return span; | |
| } | |
| } | |
| } | |
| } | |
| // Remove a span from an array, returning undefined if no spans are | |
| // left (we don't store arrays for lines without spans). | |
| function removeMarkedSpan(spans, span) { | |
| var r; | |
| for (var i = 0; i < spans.length; ++i) { | |
| if (spans[i] != span) { | |
| (r || (r = [])).push(spans[i]); | |
| } | |
| } | |
| return r; | |
| } | |
| // Add a span to a line. | |
| function addMarkedSpan(line, span) { | |
| line.markedSpans = line.markedSpans | |
| ? line.markedSpans.concat([span]) | |
| : [span]; | |
| span.marker.attachLine(line); | |
| } | |
| // Used for the algorithm that adjusts markers for a change in the | |
| // document. These functions cut an array of spans at a given | |
| // character position, returning an array of remaining chunks (or | |
| // undefined if nothing remains). | |
| function markedSpansBefore(old, startCh, isInsert) { | |
| var nw; | |
| if (old) { | |
| for (var i = 0; i < old.length; ++i) { | |
| var span = old[i], | |
| marker = span.marker; | |
| var startsBefore = | |
| span.from == null || | |
| (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); | |
| if ( | |
| startsBefore || | |
| (span.from == startCh && | |
| marker.type == "bookmark" && | |
| (!isInsert || !span.marker.insertLeft)) | |
| ) { | |
| var endsAfter = | |
| span.to == null || | |
| (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); | |
| (nw || (nw = [])).push( | |
| new MarkedSpan(marker, span.from, endsAfter ? null : span.to) | |
| ); | |
| } | |
| } | |
| } | |
| return nw; | |
| } | |
| function markedSpansAfter(old, endCh, isInsert) { | |
| var nw; | |
| if (old) { | |
| for (var i = 0; i < old.length; ++i) { | |
| var span = old[i], | |
| marker = span.marker; | |
| var endsAfter = | |
| span.to == null || | |
| (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); | |
| if ( | |
| endsAfter || | |
| (span.from == endCh && | |
| marker.type == "bookmark" && | |
| (!isInsert || span.marker.insertLeft)) | |
| ) { | |
| var startsBefore = | |
| span.from == null || | |
| (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); | |
| (nw || (nw = [])).push( | |
| new MarkedSpan( | |
| marker, | |
| startsBefore ? null : span.from - endCh, | |
| span.to == null ? null : span.to - endCh | |
| ) | |
| ); | |
| } | |
| } | |
| } | |
| return nw; | |
| } | |
| // Given a change object, compute the new set of marker spans that | |
| // cover the line in which the change took place. Removes spans | |
| // entirely within the change, reconnects spans belonging to the | |
| // same marker that appear on both sides of the change, and cuts off | |
| // spans partially within the change. Returns an array of span | |
| // arrays with one element for each line in (after) the change. | |
| function stretchSpansOverChange(doc, change) { | |
| if (change.full) { | |
| return null; | |
| } | |
| var oldFirst = | |
| isLine(doc, change.from.line) && | |
| getLine(doc, change.from.line).markedSpans; | |
| var oldLast = | |
| isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; | |
| if (!oldFirst && !oldLast) { | |
| return null; | |
| } | |
| var startCh = change.from.ch, | |
| endCh = change.to.ch, | |
| isInsert = cmp(change.from, change.to) == 0; | |
| // Get the spans that 'stick out' on both sides | |
| var first = markedSpansBefore(oldFirst, startCh, isInsert); | |
| var last = markedSpansAfter(oldLast, endCh, isInsert); | |
| // Next, merge those two ends | |
| var sameLine = change.text.length == 1, | |
| offset = lst(change.text).length + (sameLine ? startCh : 0); | |
| if (first) { | |
| // Fix up .to properties of first | |
| for (var i = 0; i < first.length; ++i) { | |
| var span = first[i]; | |
| if (span.to == null) { | |
| var found = getMarkedSpanFor(last, span.marker); | |
| if (!found) { | |
| span.to = startCh; | |
| } else if (sameLine) { | |
| span.to = found.to == null ? null : found.to + offset; | |
| } | |
| } | |
| } | |
| } | |
| if (last) { | |
| // Fix up .from in last (or move them into first in case of sameLine) | |
| for (var i$1 = 0; i$1 < last.length; ++i$1) { | |
| var span$1 = last[i$1]; | |
| if (span$1.to != null) { | |
| span$1.to += offset; | |
| } | |
| if (span$1.from == null) { | |
| var found$1 = getMarkedSpanFor(first, span$1.marker); | |
| if (!found$1) { | |
| span$1.from = offset; | |
| if (sameLine) { | |
| (first || (first = [])).push(span$1); | |
| } | |
| } | |
| } else { | |
| span$1.from += offset; | |
| if (sameLine) { | |
| (first || (first = [])).push(span$1); | |
| } | |
| } | |
| } | |
| } | |
| // Make sure we didn't create any zero-length spans | |
| if (first) { | |
| first = clearEmptySpans(first); | |
| } | |
| if (last && last != first) { | |
| last = clearEmptySpans(last); | |
| } | |
| var newMarkers = [first]; | |
| if (!sameLine) { | |
| // Fill gap with whole-line-spans | |
| var gap = change.text.length - 2, | |
| gapMarkers; | |
| if (gap > 0 && first) { | |
| for (var i$2 = 0; i$2 < first.length; ++i$2) { | |
| if (first[i$2].to == null) { | |
| (gapMarkers || (gapMarkers = [])).push( | |
| new MarkedSpan(first[i$2].marker, null, null) | |
| ); | |
| } | |
| } | |
| } | |
| for (var i$3 = 0; i$3 < gap; ++i$3) { | |
| newMarkers.push(gapMarkers); | |
| } | |
| newMarkers.push(last); | |
| } | |
| return newMarkers; | |
| } | |
| // Remove spans that are empty and don't have a clearWhenEmpty | |
| // option of false. | |
| function clearEmptySpans(spans) { | |
| for (var i = 0; i < spans.length; ++i) { | |
| var span = spans[i]; | |
| if ( | |
| span.from != null && | |
| span.from == span.to && | |
| span.marker.clearWhenEmpty !== false | |
| ) { | |
| spans.splice(i--, 1); | |
| } | |
| } | |
| if (!spans.length) { | |
| return null; | |
| } | |
| return spans; | |
| } | |
| // Used to 'clip' out readOnly ranges when making a change. | |
| function removeReadOnlyRanges(doc, from, to) { | |
| var markers = null; | |
| doc.iter(from.line, to.line + 1, function (line) { | |
| if (line.markedSpans) { | |
| for (var i = 0; i < line.markedSpans.length; ++i) { | |
| var mark = line.markedSpans[i].marker; | |
| if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) { | |
| (markers || (markers = [])).push(mark); | |
| } | |
| } | |
| } | |
| }); | |
| if (!markers) { | |
| return null; | |
| } | |
| var parts = [{ from: from, to: to }]; | |
| for (var i = 0; i < markers.length; ++i) { | |
| var mk = markers[i], | |
| m = mk.find(0); | |
| for (var j = 0; j < parts.length; ++j) { | |
| var p = parts[j]; | |
| if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { | |
| continue; | |
| } | |
| var newParts = [j, 1], | |
| dfrom = cmp(p.from, m.from), | |
| dto = cmp(p.to, m.to); | |
| if (dfrom < 0 || (!mk.inclusiveLeft && !dfrom)) { | |
| newParts.push({ from: p.from, to: m.from }); | |
| } | |
| if (dto > 0 || (!mk.inclusiveRight && !dto)) { | |
| newParts.push({ from: m.to, to: p.to }); | |
| } | |
| parts.splice.apply(parts, newParts); | |
| j += newParts.length - 3; | |
| } | |
| } | |
| return parts; | |
| } | |
| // Connect or disconnect spans from a line. | |
| function detachMarkedSpans(line) { | |
| var spans = line.markedSpans; | |
| if (!spans) { | |
| return; | |
| } | |
| for (var i = 0; i < spans.length; ++i) { | |
| spans[i].marker.detachLine(line); | |
| } | |
| line.markedSpans = null; | |
| } | |
| function attachMarkedSpans(line, spans) { | |
| if (!spans) { | |
| return; | |
| } | |
| for (var i = 0; i < spans.length; ++i) { | |
| spans[i].marker.attachLine(line); | |
| } | |
| line.markedSpans = spans; | |
| } | |
| // Helpers used when computing which overlapping collapsed span | |
| // counts as the larger one. | |
| function extraLeft(marker) { | |
| return marker.inclusiveLeft ? -1 : 0; | |
| } | |
| function extraRight(marker) { | |
| return marker.inclusiveRight ? 1 : 0; | |
| } | |
| // Returns a number indicating which of two overlapping collapsed | |
| // spans is larger (and thus includes the other). Falls back to | |
| // comparing ids when the spans cover exactly the same range. | |
| function compareCollapsedMarkers(a, b) { | |
| var lenDiff = a.lines.length - b.lines.length; | |
| if (lenDiff != 0) { | |
| return lenDiff; | |
| } | |
| var aPos = a.find(), | |
| bPos = b.find(); | |
| var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); | |
| if (fromCmp) { | |
| return -fromCmp; | |
| } | |
| var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); | |
| if (toCmp) { | |
| return toCmp; | |
| } | |
| return b.id - a.id; | |
| } | |
| // Find out whether a line ends or starts in a collapsed span. If | |
| // so, return the marker for that span. | |
| function collapsedSpanAtSide(line, start) { | |
| var sps = sawCollapsedSpans && line.markedSpans, | |
| found; | |
| if (sps) { | |
| for (var sp = void 0, i = 0; i < sps.length; ++i) { | |
| sp = sps[i]; | |
| if ( | |
| sp.marker.collapsed && | |
| (start ? sp.from : sp.to) == null && | |
| (!found || compareCollapsedMarkers(found, sp.marker) < 0) | |
| ) { | |
| found = sp.marker; | |
| } | |
| } | |
| } | |
| return found; | |
| } | |
| function collapsedSpanAtStart(line) { | |
| return collapsedSpanAtSide(line, true); | |
| } | |
| function collapsedSpanAtEnd(line) { | |
| return collapsedSpanAtSide(line, false); | |
| } | |
| // Test whether there exists a collapsed span that partially | |
| // overlaps (covers the start or end, but not both) of a new span. | |
| // Such overlap is not allowed. | |
| function conflictingCollapsedRange(doc, lineNo, from, to, marker) { | |
| var line = getLine(doc, lineNo); | |
| var sps = sawCollapsedSpans && line.markedSpans; | |
| if (sps) { | |
| for (var i = 0; i < sps.length; ++i) { | |
| var sp = sps[i]; | |
| if (!sp.marker.collapsed) { | |
| continue; | |
| } | |
| var found = sp.marker.find(0); | |
| var fromCmp = | |
| cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); | |
| var toCmp = | |
| cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); | |
| if ((fromCmp >= 0 && toCmp <= 0) || (fromCmp <= 0 && toCmp >= 0)) { | |
| continue; | |
| } | |
| if ( | |
| (fromCmp <= 0 && | |
| (sp.marker.inclusiveRight && marker.inclusiveLeft | |
| ? cmp(found.to, from) >= 0 | |
| : cmp(found.to, from) > 0)) || | |
| (fromCmp >= 0 && | |
| (sp.marker.inclusiveRight && marker.inclusiveLeft | |
| ? cmp(found.from, to) <= 0 | |
| : cmp(found.from, to) < 0)) | |
| ) { | |
| return true; | |
| } | |
| } | |
| } | |
| } | |
| // A visual line is a line as drawn on the screen. Folding, for | |
| // example, can cause multiple logical lines to appear on the same | |
| // visual line. This finds the start of the visual line that the | |
| // given line is part of (usually that is the line itself). | |
| function visualLine(line) { | |
| var merged; | |
| while ((merged = collapsedSpanAtStart(line))) { | |
| line = merged.find(-1, true).line; | |
| } | |
| return line; | |
| } | |
| function visualLineEnd(line) { | |
| var merged; | |
| while ((merged = collapsedSpanAtEnd(line))) { | |
| line = merged.find(1, true).line; | |
| } | |
| return line; | |
| } | |
| // Returns an array of logical lines that continue the visual line | |
| // started by the argument, or undefined if there are no such lines. | |
| function visualLineContinued(line) { | |
| var merged, lines; | |
| while ((merged = collapsedSpanAtEnd(line))) { | |
| line = merged.find(1, true).line; | |
| (lines || (lines = [])).push(line); | |
| } | |
| return lines; | |
| } | |
| // Get the line number of the start of the visual line that the | |
| // given line number is part of. | |
| function visualLineNo(doc, lineN) { | |
| var line = getLine(doc, lineN), | |
| vis = visualLine(line); | |
| if (line == vis) { | |
| return lineN; | |
| } | |
| return lineNo(vis); | |
| } | |
| // Get the line number of the start of the next visual line after | |
| // the given line. | |
| function visualLineEndNo(doc, lineN) { | |
| if (lineN > doc.lastLine()) { | |
| return lineN; | |
| } | |
| var line = getLine(doc, lineN), | |
| merged; | |
| if (!lineIsHidden(doc, line)) { | |
| return lineN; | |
| } | |
| while ((merged = collapsedSpanAtEnd(line))) { | |
| line = merged.find(1, true).line; | |
| } | |
| return lineNo(line) + 1; | |
| } | |
| // Compute whether a line is hidden. Lines count as hidden when they | |
| // are part of a visual line that starts with another line, or when | |
| // they are entirely covered by collapsed, non-widget span. | |
| function lineIsHidden(doc, line) { | |
| var sps = sawCollapsedSpans && line.markedSpans; | |
| if (sps) { | |
| for (var sp = void 0, i = 0; i < sps.length; ++i) { | |
| sp = sps[i]; | |
| if (!sp.marker.collapsed) { | |
| continue; | |
| } | |
| if (sp.from == null) { | |
| return true; | |
| } | |
| if (sp.marker.widgetNode) { | |
| continue; | |
| } | |
| if ( | |
| sp.from == 0 && | |
| sp.marker.inclusiveLeft && | |
| lineIsHiddenInner(doc, line, sp) | |
| ) { | |
| return true; | |
| } | |
| } | |
| } | |
| } | |
| function lineIsHiddenInner(doc, line, span) { | |
| if (span.to == null) { | |
| var end = span.marker.find(1, true); | |
| return lineIsHiddenInner( | |
| doc, | |
| end.line, | |
| getMarkedSpanFor(end.line.markedSpans, span.marker) | |
| ); | |
| } | |
| if (span.marker.inclusiveRight && span.to == line.text.length) { | |
| return true; | |
| } | |
| for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) { | |
| sp = line.markedSpans[i]; | |
| if ( | |
| sp.marker.collapsed && | |
| !sp.marker.widgetNode && | |
| sp.from == span.to && | |
| (sp.to == null || sp.to != span.from) && | |
| (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && | |
| lineIsHiddenInner(doc, line, sp) | |
| ) { | |
| return true; | |
| } | |
| } | |
| } | |
| // Find the height above the given line. | |
| function heightAtLine(lineObj) { | |
| lineObj = visualLine(lineObj); | |
| var h = 0, | |
| chunk = lineObj.parent; | |
| for (var i = 0; i < chunk.lines.length; ++i) { | |
| var line = chunk.lines[i]; | |
| if (line == lineObj) { | |
| break; | |
| } else { | |
| h += line.height; | |
| } | |
| } | |
| for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { | |
| for (var i$1 = 0; i$1 < p.children.length; ++i$1) { | |
| var cur = p.children[i$1]; | |
| if (cur == chunk) { | |
| break; | |
| } else { | |
| h += cur.height; | |
| } | |
| } | |
| } | |
| return h; | |
| } | |
| // Compute the character length of a line, taking into account | |
| // collapsed ranges (see markText) that might hide parts, and join | |
| // other lines onto it. | |
| function lineLength(line) { | |
| if (line.height == 0) { | |
| return 0; | |
| } | |
| var len = line.text.length, | |
| merged, | |
| cur = line; | |
| while ((merged = collapsedSpanAtStart(cur))) { | |
| var found = merged.find(0, true); | |
| cur = found.from.line; | |
| len += found.from.ch - found.to.ch; | |
| } | |
| cur = line; | |
| while ((merged = collapsedSpanAtEnd(cur))) { | |
| var found$1 = merged.find(0, true); | |
| len -= cur.text.length - found$1.from.ch; | |
| cur = found$1.to.line; | |
| len += cur.text.length - found$1.to.ch; | |
| } | |
| return len; | |
| } | |
| // Find the longest line in the document. | |
| function findMaxLine(cm) { | |
| var d = cm.display, | |
| doc = cm.doc; | |
| d.maxLine = getLine(doc, doc.first); | |
| d.maxLineLength = lineLength(d.maxLine); | |
| d.maxLineChanged = true; | |
| doc.iter(function (line) { | |
| var len = lineLength(line); | |
| if (len > d.maxLineLength) { | |
| d.maxLineLength = len; | |
| d.maxLine = line; | |
| } | |
| }); | |
| } | |
| // BIDI HELPERS | |
| function iterateBidiSections(order, from, to, f) { | |
| if (!order) { | |
| return f(from, to, "ltr"); | |
| } | |
| var found = false; | |
| for (var i = 0; i < order.length; ++i) { | |
| var part = order[i]; | |
| if ( | |
| (part.from < to && part.to > from) || | |
| (from == to && part.to == from) | |
| ) { | |
| f( | |
| Math.max(part.from, from), | |
| Math.min(part.to, to), | |
| part.level == 1 ? "rtl" : "ltr" | |
| ); | |
| found = true; | |
| } | |
| } | |
| if (!found) { | |
| f(from, to, "ltr"); | |
| } | |
| } | |
| var bidiOther = null; | |
| function getBidiPartAt(order, ch, sticky) { | |
| var found; | |
| bidiOther = null; | |
| for (var i = 0; i < order.length; ++i) { | |
| var cur = order[i]; | |
| if (cur.from < ch && cur.to > ch) { | |
| return i; | |
| } | |
| if (cur.to == ch) { | |
| if (cur.from != cur.to && sticky == "before") { | |
| found = i; | |
| } else { | |
| bidiOther = i; | |
| } | |
| } | |
| if (cur.from == ch) { | |
| if (cur.from != cur.to && sticky != "before") { | |
| found = i; | |
| } else { | |
| bidiOther = i; | |
| } | |
| } | |
| } | |
| return found != null ? found : bidiOther; | |
| } | |
| // Bidirectional ordering algorithm | |
| // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm | |
| // that this (partially) implements. | |
| // One-char codes used for character types: | |
| // L (L): Left-to-Right | |
| // R (R): Right-to-Left | |
| // r (AL): Right-to-Left Arabic | |
| // 1 (EN): European Number | |
| // + (ES): European Number Separator | |
| // % (ET): European Number Terminator | |
| // n (AN): Arabic Number | |
| // , (CS): Common Number Separator | |
| // m (NSM): Non-Spacing Mark | |
| // b (BN): Boundary Neutral | |
| // s (B): Paragraph Separator | |
| // t (S): Segment Separator | |
| // w (WS): Whitespace | |
| // N (ON): Other Neutrals | |
| // Returns null if characters are ordered as they appear | |
| // (left-to-right), or an array of sections ({from, to, level} | |
| // objects) in the order in which they occur visually. | |
| var bidiOrdering = (function () { | |
| // Character types for codepoints 0 to 0xff | |
| var lowTypes = | |
| "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; | |
| // Character types for codepoints 0x600 to 0x6f9 | |
| var arabicTypes = | |
| "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; | |
| function charType(code) { | |
| if (code <= 0xf7) { | |
| return lowTypes.charAt(code); | |
| } else if (0x590 <= code && code <= 0x5f4) { | |
| return "R"; | |
| } else if (0x600 <= code && code <= 0x6f9) { | |
| return arabicTypes.charAt(code - 0x600); | |
| } else if (0x6ee <= code && code <= 0x8ac) { | |
| return "r"; | |
| } else if (0x2000 <= code && code <= 0x200b) { | |
| return "w"; | |
| } else if (code == 0x200c) { | |
| return "b"; | |
| } else { | |
| return "L"; | |
| } | |
| } | |
| var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; | |
| var isNeutral = /[stwN]/, | |
| isStrong = /[LRr]/, | |
| countsAsLeft = /[Lb1n]/, | |
| countsAsNum = /[1n]/; | |
| function BidiSpan(level, from, to) { | |
| this.level = level; | |
| this.from = from; | |
| this.to = to; | |
| } | |
| return function (str, direction) { | |
| var outerType = direction == "ltr" ? "L" : "R"; | |
| if (str.length == 0 || (direction == "ltr" && !bidiRE.test(str))) { | |
| return false; | |
| } | |
| var len = str.length, | |
| types = []; | |
| for (var i = 0; i < len; ++i) { | |
| types.push(charType(str.charCodeAt(i))); | |
| } | |
| // W1. Examine each non-spacing mark (NSM) in the level run, and | |
| // change the type of the NSM to the type of the previous | |
| // character. If the NSM is at the start of the level run, it will | |
| // get the type of sor. | |
| for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { | |
| var type = types[i$1]; | |
| if (type == "m") { | |
| types[i$1] = prev; | |
| } else { | |
| prev = type; | |
| } | |
| } | |
| // W2. Search backwards from each instance of a European number | |
| // until the first strong type (R, L, AL, or sor) is found. If an | |
| // AL is found, change the type of the European number to Arabic | |
| // number. | |
| // W3. Change all ALs to R. | |
| for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { | |
| var type$1 = types[i$2]; | |
| if (type$1 == "1" && cur == "r") { | |
| types[i$2] = "n"; | |
| } else if (isStrong.test(type$1)) { | |
| cur = type$1; | |
| if (type$1 == "r") { | |
| types[i$2] = "R"; | |
| } | |
| } | |
| } | |
| // W4. A single European separator between two European numbers | |
| // changes to a European number. A single common separator between | |
| // two numbers of the same type changes to that type. | |
| for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { | |
| var type$2 = types[i$3]; | |
| if (type$2 == "+" && prev$1 == "1" && types[i$3 + 1] == "1") { | |
| types[i$3] = "1"; | |
| } else if ( | |
| type$2 == "," && | |
| prev$1 == types[i$3 + 1] && | |
| (prev$1 == "1" || prev$1 == "n") | |
| ) { | |
| types[i$3] = prev$1; | |
| } | |
| prev$1 = type$2; | |
| } | |
| // W5. A sequence of European terminators adjacent to European | |
| // numbers changes to all European numbers. | |
| // W6. Otherwise, separators and terminators change to Other | |
| // Neutral. | |
| for (var i$4 = 0; i$4 < len; ++i$4) { | |
| var type$3 = types[i$4]; | |
| if (type$3 == ",") { | |
| types[i$4] = "N"; | |
| } else if (type$3 == "%") { | |
| var end = void 0; | |
| for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} | |
| var replace = | |
| (i$4 && types[i$4 - 1] == "!") || (end < len && types[end] == "1") | |
| ? "1" | |
| : "N"; | |
| for (var j = i$4; j < end; ++j) { | |
| types[j] = replace; | |
| } | |
| i$4 = end - 1; | |
| } | |
| } | |
| // W7. Search backwards from each instance of a European number | |
| // until the first strong type (R, L, or sor) is found. If an L is | |
| // found, then change the type of the European number to L. | |
| for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { | |
| var type$4 = types[i$5]; | |
| if (cur$1 == "L" && type$4 == "1") { | |
| types[i$5] = "L"; | |
| } else if (isStrong.test(type$4)) { | |
| cur$1 = type$4; | |
| } | |
| } | |
| // N1. A sequence of neutrals takes the direction of the | |
| // surrounding strong text if the text on both sides has the same | |
| // direction. European and Arabic numbers act as if they were R in | |
| // terms of their influence on neutrals. Start-of-level-run (sor) | |
| // and end-of-level-run (eor) are used at level run boundaries. | |
| // N2. Any remaining neutrals take the embedding direction. | |
| for (var i$6 = 0; i$6 < len; ++i$6) { | |
| if (isNeutral.test(types[i$6])) { | |
| var end$1 = void 0; | |
| for ( | |
| end$1 = i$6 + 1; | |
| end$1 < len && isNeutral.test(types[end$1]); | |
| ++end$1 | |
| ) {} | |
| var before = (i$6 ? types[i$6 - 1] : outerType) == "L"; | |
| var after = (end$1 < len ? types[end$1] : outerType) == "L"; | |
| var replace$1 = before == after ? (before ? "L" : "R") : outerType; | |
| for (var j$1 = i$6; j$1 < end$1; ++j$1) { | |
| types[j$1] = replace$1; | |
| } | |
| i$6 = end$1 - 1; | |
| } | |
| } | |
| // Here we depart from the documented algorithm, in order to avoid | |
| // building up an actual levels array. Since there are only three | |
| // levels (0, 1, 2) in an implementation that doesn't take | |
| // explicit embedding into account, we can build up the order on | |
| // the fly, without following the level-based algorithm. | |
| var order = [], | |
| m; | |
| for (var i$7 = 0; i$7 < len; ) { | |
| if (countsAsLeft.test(types[i$7])) { | |
| var start = i$7; | |
| for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} | |
| order.push(new BidiSpan(0, start, i$7)); | |
| } else { | |
| var pos = i$7, | |
| at = order.length; | |
| for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} | |
| for (var j$2 = pos; j$2 < i$7; ) { | |
| if (countsAsNum.test(types[j$2])) { | |
| if (pos < j$2) { | |
| order.splice(at, 0, new BidiSpan(1, pos, j$2)); | |
| } | |
| var nstart = j$2; | |
| for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} | |
| order.splice(at, 0, new BidiSpan(2, nstart, j$2)); | |
| pos = j$2; | |
| } else { | |
| ++j$2; | |
| } | |
| } | |
| if (pos < i$7) { | |
| order.splice(at, 0, new BidiSpan(1, pos, i$7)); | |
| } | |
| } | |
| } | |
| if (order[0].level == 1 && (m = str.match(/^\s+/))) { | |
| order[0].from = m[0].length; | |
| order.unshift(new BidiSpan(0, 0, m[0].length)); | |
| } | |
| if (lst(order).level == 1 && (m = str.match(/\s+$/))) { | |
| lst(order).to -= m[0].length; | |
| order.push(new BidiSpan(0, len - m[0].length, len)); | |
| } | |
| return direction == "rtl" ? order.reverse() : order; | |
| }; | |
| })(); | |
| // Get the bidi ordering for the given line (and cache it). Returns | |
| // false for lines that are fully left-to-right, and an array of | |
| // BidiSpan objects otherwise. | |
| function getOrder(line, direction) { | |
| var order = line.order; | |
| if (order == null) { | |
| order = line.order = bidiOrdering(line.text, direction); | |
| } | |
| return order; | |
| } | |
| function moveCharLogically(line, ch, dir) { | |
| var target = skipExtendingChars(line.text, ch + dir, dir); | |
| return target < 0 || target > line.text.length ? null : target; | |
| } | |
| function moveLogically(line, start, dir) { | |
| var ch = moveCharLogically(line, start.ch, dir); | |
| return ch == null | |
| ? null | |
| : new Pos(start.line, ch, dir < 0 ? "after" : "before"); | |
| } | |
| function endOfLine(visually, cm, lineObj, lineNo, dir) { | |
| if (visually) { | |
| var order = getOrder(lineObj, cm.doc.direction); | |
| if (order) { | |
| var part = dir < 0 ? lst(order) : order[0]; | |
| var moveInStorageOrder = dir < 0 == (part.level == 1); | |
| var sticky = moveInStorageOrder ? "after" : "before"; | |
| var ch; | |
| // With a wrapped rtl chunk (possibly spanning multiple bidi parts), | |
| // it could be that the last bidi part is not on the last visual line, | |
| // since visual lines contain content order-consecutive chunks. | |
| // Thus, in rtl, we are looking for the first (content-order) character | |
| // in the rtl chunk that is on the last line (that is, the same line | |
| // as the last (content-order) character). | |
| if (part.level > 0) { | |
| var prep = prepareMeasureForLine(cm, lineObj); | |
| ch = dir < 0 ? lineObj.text.length - 1 : 0; | |
| var targetTop = measureCharPrepared(cm, prep, ch).top; | |
| ch = findFirst( | |
| function (ch) { | |
| return measureCharPrepared(cm, prep, ch).top == targetTop; | |
| }, | |
| dir < 0 == (part.level == 1) ? part.from : part.to - 1, | |
| ch | |
| ); | |
| if (sticky == "before") { | |
| ch = moveCharLogically(lineObj, ch, 1); | |
| } | |
| } else { | |
| ch = dir < 0 ? part.to : part.from; | |
| } | |
| return new Pos(lineNo, ch, sticky); | |
| } | |
| } | |
| return new Pos( | |
| lineNo, | |
| dir < 0 ? lineObj.text.length : 0, | |
| dir < 0 ? "before" : "after" | |
| ); | |
| } | |
| function moveVisually(cm, line, start, dir) { | |
| var bidi = getOrder(line, cm.doc.direction); | |
| if (!bidi) { | |
| return moveLogically(line, start, dir); | |
| } | |
| if (start.ch >= line.text.length) { | |
| start.ch = line.text.length; | |
| start.sticky = "before"; | |
| } else if (start.ch <= 0) { | |
| start.ch = 0; | |
| start.sticky = "after"; | |
| } | |
| var partPos = getBidiPartAt(bidi, start.ch, start.sticky), | |
| part = bidi[partPos]; | |
| if ( | |
| cm.doc.direction == "ltr" && | |
| part.level % 2 == 0 && | |
| (dir > 0 ? part.to > start.ch : part.from < start.ch) | |
| ) { | |
| // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, | |
| // nothing interesting happens. | |
| return moveLogically(line, start, dir); | |
| } | |
| var mv = function (pos, dir) { | |
| return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); | |
| }; | |
| var prep; | |
| var getWrappedLineExtent = function (ch) { | |
| if (!cm.options.lineWrapping) { | |
| return { begin: 0, end: line.text.length }; | |
| } | |
| prep = prep || prepareMeasureForLine(cm, line); | |
| return wrappedLineExtentChar(cm, line, prep, ch); | |
| }; | |
| var wrappedLineExtent = getWrappedLineExtent( | |
| start.sticky == "before" ? mv(start, -1) : start.ch | |
| ); | |
| if (cm.doc.direction == "rtl" || part.level == 1) { | |
| var moveInStorageOrder = (part.level == 1) == dir < 0; | |
| var ch = mv(start, moveInStorageOrder ? 1 : -1); | |
| if ( | |
| ch != null && | |
| (!moveInStorageOrder | |
| ? ch >= part.from && ch >= wrappedLineExtent.begin | |
| : ch <= part.to && ch <= wrappedLineExtent.end) | |
| ) { | |
| // Case 2: We move within an rtl part or in an rtl editor on the same visual line | |
| var sticky = moveInStorageOrder ? "before" : "after"; | |
| return new Pos(start.line, ch, sticky); | |
| } | |
| } | |
| // Case 3: Could not move within this bidi part in this visual line, so leave | |
| // the current bidi part | |
| var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { | |
| var getRes = function (ch, moveInStorageOrder) { | |
| return moveInStorageOrder | |
| ? new Pos(start.line, mv(ch, 1), "before") | |
| : new Pos(start.line, ch, "after"); | |
| }; | |
| for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { | |
| var part = bidi[partPos]; | |
| var moveInStorageOrder = dir > 0 == (part.level != 1); | |
| var ch = moveInStorageOrder | |
| ? wrappedLineExtent.begin | |
| : mv(wrappedLineExtent.end, -1); | |
| if (part.from <= ch && ch < part.to) { | |
| return getRes(ch, moveInStorageOrder); | |
| } | |
| ch = moveInStorageOrder ? part.from : mv(part.to, -1); | |
| if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { | |
| return getRes(ch, moveInStorageOrder); | |
| } | |
| } | |
| }; | |
| // Case 3a: Look for other bidi parts on the same visual line | |
| var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); | |
| if (res) { | |
| return res; | |
| } | |
| // Case 3b: Look for other bidi parts on the next visual line | |
| var nextCh = | |
| dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); | |
| if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { | |
| res = searchInVisualLine( | |
| dir > 0 ? 0 : bidi.length - 1, | |
| dir, | |
| getWrappedLineExtent(nextCh) | |
| ); | |
| if (res) { | |
| return res; | |
| } | |
| } | |
| // Case 4: Nowhere to move | |
| return null; | |
| } | |
| // EVENT HANDLING | |
| // Lightweight event framework. on/off also work on DOM nodes, | |
| // registering native DOM handlers. | |
| var noHandlers = []; | |
| var on = function (emitter, type, f) { | |
| if (emitter.addEventListener) { | |
| emitter.addEventListener(type, f, false); | |
| } else if (emitter.attachEvent) { | |
| emitter.attachEvent("on" + type, f); | |
| } else { | |
| var map = emitter._handlers || (emitter._handlers = {}); | |
| map[type] = (map[type] || noHandlers).concat(f); | |
| } | |
| }; | |
| function getHandlers(emitter, type) { | |
| return (emitter._handlers && emitter._handlers[type]) || noHandlers; | |
| } | |
| function off(emitter, type, f) { | |
| if (emitter.removeEventListener) { | |
| emitter.removeEventListener(type, f, false); | |
| } else if (emitter.detachEvent) { | |
| emitter.detachEvent("on" + type, f); | |
| } else { | |
| var map = emitter._handlers, | |
| arr = map && map[type]; | |
| if (arr) { | |
| var index = indexOf(arr, f); | |
| if (index > -1) { | |
| map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); | |
| } | |
| } | |
| } | |
| } | |
| function signal(emitter, type /*, values...*/) { | |
| var handlers = getHandlers(emitter, type); | |
| if (!handlers.length) { | |
| return; | |
| } | |
| var args = Array.prototype.slice.call(arguments, 2); | |
| for (var i = 0; i < handlers.length; ++i) { | |
| handlers[i].apply(null, args); | |
| } | |
| } | |
| // The DOM events that CodeMirror handles can be overridden by | |
| // registering a (non-DOM) handler on the editor for the event name, | |
| // and preventDefault-ing the event in that handler. | |
| function signalDOMEvent(cm, e, override) { | |
| if (typeof e == "string") { | |
| e = { | |
| type: e, | |
| preventDefault: function () { | |
| this.defaultPrevented = true; | |
| }, | |
| }; | |
| } | |
| signal(cm, override || e.type, cm, e); | |
| return e_defaultPrevented(e) || e.codemirrorIgnore; | |
| } | |
| function signalCursorActivity(cm) { | |
| var arr = cm._handlers && cm._handlers.cursorActivity; | |
| if (!arr) { | |
| return; | |
| } | |
| var set = | |
| cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); | |
| for (var i = 0; i < arr.length; ++i) { | |
| if (indexOf(set, arr[i]) == -1) { | |
| set.push(arr[i]); | |
| } | |
| } | |
| } | |
| function hasHandler(emitter, type) { | |
| return getHandlers(emitter, type).length > 0; | |
| } | |
| // Add on and off methods to a constructor's prototype, to make | |
| // registering events on such objects more convenient. | |
| function eventMixin(ctor) { | |
| ctor.prototype.on = function (type, f) { | |
| on(this, type, f); | |
| }; | |
| ctor.prototype.off = function (type, f) { | |
| off(this, type, f); | |
| }; | |
| } | |
| // Due to the fact that we still support jurassic IE versions, some | |
| // compatibility wrappers are needed. | |
| function e_preventDefault(e) { | |
| if (e.preventDefault) { | |
| e.preventDefault(); | |
| } else { | |
| e.returnValue = false; | |
| } | |
| } | |
| function e_stopPropagation(e) { | |
| if (e.stopPropagation) { | |
| e.stopPropagation(); | |
| } else { | |
| e.cancelBubble = true; | |
| } | |
| } | |
| function e_defaultPrevented(e) { | |
| return e.defaultPrevented != null | |
| ? e.defaultPrevented | |
| : e.returnValue == false; | |
| } | |
| function e_stop(e) { | |
| e_preventDefault(e); | |
| e_stopPropagation(e); | |
| } | |
| function e_target(e) { | |
| return e.target || e.srcElement; | |
| } | |
| function e_button(e) { | |
| var b = e.which; | |
| if (b == null) { | |
| if (e.button & 1) { | |
| b = 1; | |
| } else if (e.button & 2) { | |
| b = 3; | |
| } else if (e.button & 4) { | |
| b = 2; | |
| } | |
| } | |
| if (mac && e.ctrlKey && b == 1) { | |
| b = 3; | |
| } | |
| return b; | |
| } | |
| // Detect drag-and-drop | |
| var dragAndDrop = (function () { | |
| // There is *some* kind of drag-and-drop support in IE6-8, but I | |
| // couldn't get it to work yet. | |
| if (ie && ie_version < 9) { | |
| return false; | |
| } | |
| var div = elt("div"); | |
| return "draggable" in div || "dragDrop" in div; | |
| })(); | |
| var zwspSupported; | |
| function zeroWidthElement(measure) { | |
| if (zwspSupported == null) { | |
| var test = elt("span", "\u200b"); | |
| removeChildrenAndAdd( | |
| measure, | |
| elt("span", [test, document.createTextNode("x")]) | |
| ); | |
| if (measure.firstChild.offsetHeight != 0) { | |
| zwspSupported = | |
| test.offsetWidth <= 1 && | |
| test.offsetHeight > 2 && | |
| !(ie && ie_version < 8); | |
| } | |
| } | |
| var node = zwspSupported | |
| ? elt("span", "\u200b") | |
| : elt( | |
| "span", | |
| "\u00a0", | |
| null, | |
| "display: inline-block; width: 1px; margin-right: -1px" | |
| ); | |
| node.setAttribute("cm-text", ""); | |
| return node; | |
| } | |
| // Feature-detect IE's crummy client rect reporting for bidi text | |
| var badBidiRects; | |
| function hasBadBidiRects(measure) { | |
| if (badBidiRects != null) { | |
| return badBidiRects; | |
| } | |
| var txt = removeChildrenAndAdd( | |
| measure, | |
| document.createTextNode("A\u062eA") | |
| ); | |
| var r0 = range(txt, 0, 1).getBoundingClientRect(); | |
| var r1 = range(txt, 1, 2).getBoundingClientRect(); | |
| removeChildren(measure); | |
| if (!r0 || r0.left == r0.right) { | |
| return false; | |
| } // Safari returns null in some cases (#2780) | |
| return (badBidiRects = r1.right - r0.right < 3); | |
| } | |
| // See if "".split is the broken IE version, if so, provide an | |
| // alternative way to split lines. | |
| var splitLinesAuto = | |
| "\n\nb".split(/\n/).length != 3 | |
| ? function (string) { | |
| var pos = 0, | |
| result = [], | |
| l = string.length; | |
| while (pos <= l) { | |
| var nl = string.indexOf("\n", pos); | |
| if (nl == -1) { | |
| nl = string.length; | |
| } | |
| var line = string.slice( | |
| pos, | |
| string.charAt(nl - 1) == "\r" ? nl - 1 : nl | |
| ); | |
| var rt = line.indexOf("\r"); | |
| if (rt != -1) { | |
| result.push(line.slice(0, rt)); | |
| pos += rt + 1; | |
| } else { | |
| result.push(line); | |
| pos = nl + 1; | |
| } | |
| } | |
| return result; | |
| } | |
| : function (string) { | |
| return string.split(/\r\n?|\n/); | |
| }; | |
| var hasSelection = window.getSelection | |
| ? function (te) { | |
| try { | |
| return te.selectionStart != te.selectionEnd; | |
| } catch (e) { | |
| return false; | |
| } | |
| } | |
| : function (te) { | |
| var range; | |
| try { | |
| range = te.ownerDocument.selection.createRange(); | |
| } catch (e) {} | |
| if (!range || range.parentElement() != te) { | |
| return false; | |
| } | |
| return range.compareEndPoints("StartToEnd", range) != 0; | |
| }; | |
| var hasCopyEvent = (function () { | |
| var e = elt("div"); | |
| if ("oncopy" in e) { | |
| return true; | |
| } | |
| e.setAttribute("oncopy", "return;"); | |
| return typeof e.oncopy == "function"; | |
| })(); | |
| var badZoomedRects = null; | |
| function hasBadZoomedRects(measure) { | |
| if (badZoomedRects != null) { | |
| return badZoomedRects; | |
| } | |
| var node = removeChildrenAndAdd(measure, elt("span", "x")); | |
| var normal = node.getBoundingClientRect(); | |
| var fromRange = range(node, 0, 1).getBoundingClientRect(); | |
| return (badZoomedRects = Math.abs(normal.left - fromRange.left) > 1); | |
| } | |
| var modes = {}; | |
| var mimeModes = {}; | |
| // Extra arguments are stored as the mode's dependencies, which is | |
| // used by (legacy) mechanisms like loadmode.js to automatically | |
| // load a mode. (Preferred mechanism is the require/define calls.) | |
| function defineMode(name, mode) { | |
| if (arguments.length > 2) { | |
| mode.dependencies = Array.prototype.slice.call(arguments, 2); | |
| } | |
| modes[name] = mode; | |
| } | |
| function defineMIME(mime, spec) { | |
| mimeModes[mime] = spec; | |
| } | |
| // Given a MIME type, a {name, ...options} config object, or a name | |
| // string, return a mode config object. | |
| function resolveMode(spec) { | |
| if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { | |
| spec = mimeModes[spec]; | |
| } else if ( | |
| spec && | |
| typeof spec.name == "string" && | |
| mimeModes.hasOwnProperty(spec.name) | |
| ) { | |
| var found = mimeModes[spec.name]; | |
| if (typeof found == "string") { | |
| found = { name: found }; | |
| } | |
| spec = createObj(found, spec); | |
| spec.name = found.name; | |
| } else if ( | |
| typeof spec == "string" && | |
| /^[\w\-]+\/[\w\-]+\+xml$/.test(spec) | |
| ) { | |
| return resolveMode("application/xml"); | |
| } else if ( | |
| typeof spec == "string" && | |
| /^[\w\-]+\/[\w\-]+\+json$/.test(spec) | |
| ) { | |
| return resolveMode("application/json"); | |
| } | |
| if (typeof spec == "string") { | |
| return { name: spec }; | |
| } else { | |
| return spec || { name: "null" }; | |
| } | |
| } | |
| // Given a mode spec (anything that resolveMode accepts), find and | |
| // initialize an actual mode object. | |
| function getMode(options, spec) { | |
| spec = resolveMode(spec); | |
| var mfactory = modes[spec.name]; | |
| if (!mfactory) { | |
| return getMode(options, "text/plain"); | |
| } | |
| var modeObj = mfactory(options, spec); | |
| if (modeExtensions.hasOwnProperty(spec.name)) { | |
| var exts = modeExtensions[spec.name]; | |
| for (var prop in exts) { | |
| if (!exts.hasOwnProperty(prop)) { | |
| continue; | |
| } | |
| if (modeObj.hasOwnProperty(prop)) { | |
| modeObj["_" + prop] = modeObj[prop]; | |
| } | |
| modeObj[prop] = exts[prop]; | |
| } | |
| } | |
| modeObj.name = spec.name; | |
| if (spec.helperType) { | |
| modeObj.helperType = spec.helperType; | |
| } | |
| if (spec.modeProps) { | |
| for (var prop$1 in spec.modeProps) { | |
| modeObj[prop$1] = spec.modeProps[prop$1]; | |
| } | |
| } | |
| return modeObj; | |
| } | |
| // This can be used to attach properties to mode objects from | |
| // outside the actual mode definition. | |
| var modeExtensions = {}; | |
| function extendMode(mode, properties) { | |
| var exts = modeExtensions.hasOwnProperty(mode) | |
| ? modeExtensions[mode] | |
| : (modeExtensions[mode] = {}); | |
| copyObj(properties, exts); | |
| } | |
| function copyState(mode, state) { | |
| if (state === true) { | |
| return state; | |
| } | |
| if (mode.copyState) { | |
| return mode.copyState(state); | |
| } | |
| var nstate = {}; | |
| for (var n in state) { | |
| var val = state[n]; | |
| if (val instanceof Array) { | |
| val = val.concat([]); | |
| } | |
| nstate[n] = val; | |
| } | |
| return nstate; | |
| } | |
| // Given a mode and a state (for that mode), find the inner mode and | |
| // state at the position that the state refers to. | |
| function innerMode(mode, state) { | |
| var info; | |
| while (mode.innerMode) { | |
| info = mode.innerMode(state); | |
| if (!info || info.mode == mode) { | |
| break; | |
| } | |
| state = info.state; | |
| mode = info.mode; | |
| } | |
| return info || { mode: mode, state: state }; | |
| } | |
| function startState(mode, a1, a2) { | |
| return mode.startState ? mode.startState(a1, a2) : true; | |
| } | |
| // STRING STREAM | |
| // Fed to the mode parsers, provides helper functions to make | |
| // parsers more succinct. | |
| var StringStream = function (string, tabSize, lineOracle) { | |
| this.pos = this.start = 0; | |
| this.string = string; | |
| this.tabSize = tabSize || 8; | |
| this.lastColumnPos = this.lastColumnValue = 0; | |
| this.lineStart = 0; | |
| this.lineOracle = lineOracle; | |
| }; | |
| StringStream.prototype.eol = function () { | |
| return this.pos >= this.string.length; | |
| }; | |
| StringStream.prototype.sol = function () { | |
| return this.pos == this.lineStart; | |
| }; | |
| StringStream.prototype.peek = function () { | |
| return this.string.charAt(this.pos) || undefined; | |
| }; | |
| StringStream.prototype.next = function () { | |
| if (this.pos < this.string.length) { | |
| return this.string.charAt(this.pos++); | |
| } | |
| }; | |
| StringStream.prototype.eat = function (match) { | |
| var ch = this.string.charAt(this.pos); | |
| var ok; | |
| if (typeof match == "string") { | |
| ok = ch == match; | |
| } else { | |
| ok = ch && (match.test ? match.test(ch) : match(ch)); | |
| } | |
| if (ok) { | |
| ++this.pos; | |
| return ch; | |
| } | |
| }; | |
| StringStream.prototype.eatWhile = function (match) { | |
| var start = this.pos; | |
| while (this.eat(match)) {} | |
| return this.pos > start; | |
| }; | |
| StringStream.prototype.eatSpace = function () { | |
| var this$1 = this; | |
| var start = this.pos; | |
| while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { | |
| ++this$1.pos; | |
| } | |
| return this.pos > start; | |
| }; | |
| StringStream.prototype.skipToEnd = function () { | |
| this.pos = this.string.length; | |
| }; | |
| StringStream.prototype.skipTo = function (ch) { | |
| var found = this.string.indexOf(ch, this.pos); | |
| if (found > -1) { | |
| this.pos = found; | |
| return true; | |
| } | |
| }; | |
| StringStream.prototype.backUp = function (n) { | |
| this.pos -= n; | |
| }; | |
| StringStream.prototype.column = function () { | |
| if (this.lastColumnPos < this.start) { | |
| this.lastColumnValue = countColumn( | |
| this.string, | |
| this.start, | |
| this.tabSize, | |
| this.lastColumnPos, | |
| this.lastColumnValue | |
| ); | |
| this.lastColumnPos = this.start; | |
| } | |
| return ( | |
| this.lastColumnValue - | |
| (this.lineStart | |
| ? countColumn(this.string, this.lineStart, this.tabSize) | |
| : 0) | |
| ); | |
| }; | |
| StringStream.prototype.indentation = function () { | |
| return ( | |
| countColumn(this.string, null, this.tabSize) - | |
| (this.lineStart | |
| ? countColumn(this.string, this.lineStart, this.tabSize) | |
| : 0) | |
| ); | |
| }; | |
| StringStream.prototype.match = function (pattern, consume, caseInsensitive) { | |
| if (typeof pattern == "string") { | |
| var cased = function (str) { | |
| return caseInsensitive ? str.toLowerCase() : str; | |
| }; | |
| var substr = this.string.substr(this.pos, pattern.length); | |
| if (cased(substr) == cased(pattern)) { | |
| if (consume !== false) { | |
| this.pos += pattern.length; | |
| } | |
| return true; | |
| } | |
| } else { | |
| var match = this.string.slice(this.pos).match(pattern); | |
| if (match && match.index > 0) { | |
| return null; | |
| } | |
| if (match && consume !== false) { | |
| this.pos += match[0].length; | |
| } | |
| return match; | |
| } | |
| }; | |
| StringStream.prototype.current = function () { | |
| return this.string.slice(this.start, this.pos); | |
| }; | |
| StringStream.prototype.hideFirstChars = function (n, inner) { | |
| this.lineStart += n; | |
| try { | |
| return inner(); | |
| } finally { | |
| this.lineStart -= n; | |
| } | |
| }; | |
| StringStream.prototype.lookAhead = function (n) { | |
| var oracle = this.lineOracle; | |
| return oracle && oracle.lookAhead(n); | |
| }; | |
| var SavedContext = function (state, lookAhead) { | |
| this.state = state; | |
| this.lookAhead = lookAhead; | |
| }; | |
| var Context = function (doc, state, line, lookAhead) { | |
| this.state = state; | |
| this.doc = doc; | |
| this.line = line; | |
| this.maxLookAhead = lookAhead || 0; | |
| }; | |
| Context.prototype.lookAhead = function (n) { | |
| var line = this.doc.getLine(this.line + n); | |
| if (line != null && n > this.maxLookAhead) { | |
| this.maxLookAhead = n; | |
| } | |
| return line; | |
| }; | |
| Context.prototype.nextLine = function () { | |
| this.line++; | |
| if (this.maxLookAhead > 0) { | |
| this.maxLookAhead--; | |
| } | |
| }; | |
| Context.fromSaved = function (doc, saved, line) { | |
| if (saved instanceof SavedContext) { | |
| return new Context( | |
| doc, | |
| copyState(doc.mode, saved.state), | |
| line, | |
| saved.lookAhead | |
| ); | |
| } else { | |
| return new Context(doc, copyState(doc.mode, saved), line); | |
| } | |
| }; | |
| Context.prototype.save = function (copy) { | |
| var state = | |
| copy !== false ? copyState(this.doc.mode, this.state) : this.state; | |
| return this.maxLookAhead > 0 | |
| ? new SavedContext(state, this.maxLookAhead) | |
| : state; | |
| }; | |
| // Compute a style array (an array starting with a mode generation | |
| // -- for invalidation -- followed by pairs of end positions and | |
| // style strings), which is used to highlight the tokens on the | |
| // line. | |
| function highlightLine(cm, line, context, forceToEnd) { | |
| // A styles array always starts with a number identifying the | |
| // mode/overlays that it is based on (for easy invalidation). | |
| var st = [cm.state.modeGen], | |
| lineClasses = {}; | |
| // Compute the base array of styles | |
| runMode( | |
| cm, | |
| line.text, | |
| cm.doc.mode, | |
| context, | |
| function (end, style) { | |
| return st.push(end, style); | |
| }, | |
| lineClasses, | |
| forceToEnd | |
| ); | |
| var state = context.state; | |
| // Run overlays, adjust style array. | |
| var loop = function (o) { | |
| var overlay = cm.state.overlays[o], | |
| i = 1, | |
| at = 0; | |
| context.state = true; | |
| runMode( | |
| cm, | |
| line.text, | |
| overlay.mode, | |
| context, | |
| function (end, style) { | |
| var start = i; | |
| // Ensure there's a token end at the current position, and that i points at it | |
| while (at < end) { | |
| var i_end = st[i]; | |
| if (i_end > end) { | |
| st.splice(i, 1, end, st[i + 1], i_end); | |
| } | |
| i += 2; | |
| at = Math.min(end, i_end); | |
| } | |
| if (!style) { | |
| return; | |
| } | |
| if (overlay.opaque) { | |
| st.splice(start, i - start, end, "overlay " + style); | |
| i = start + 2; | |
| } else { | |
| for (; start < i; start += 2) { | |
| var cur = st[start + 1]; | |
| st[start + 1] = (cur ? cur + " " : "") + "overlay " + style; | |
| } | |
| } | |
| }, | |
| lineClasses | |
| ); | |
| }; | |
| for (var o = 0; o < cm.state.overlays.length; ++o) loop(o); | |
| context.state = state; | |
| return { | |
| styles: st, | |
| classes: | |
| lineClasses.bgClass || lineClasses.textClass ? lineClasses : null, | |
| }; | |
| } | |
| function getLineStyles(cm, line, updateFrontier) { | |
| if (!line.styles || line.styles[0] != cm.state.modeGen) { | |
| var context = getContextBefore(cm, lineNo(line)); | |
| var resetState = | |
| line.text.length > cm.options.maxHighlightLength && | |
| copyState(cm.doc.mode, context.state); | |
| var result = highlightLine(cm, line, context); | |
| if (resetState) { | |
| context.state = resetState; | |
| } | |
| line.stateAfter = context.save(!resetState); | |
| line.styles = result.styles; | |
| if (result.classes) { | |
| line.styleClasses = result.classes; | |
| } else if (line.styleClasses) { | |
| line.styleClasses = null; | |
| } | |
| if (updateFrontier === cm.doc.highlightFrontier) { | |
| cm.doc.modeFrontier = Math.max( | |
| cm.doc.modeFrontier, | |
| ++cm.doc.highlightFrontier | |
| ); | |
| } | |
| } | |
| return line.styles; | |
| } | |
| function getContextBefore(cm, n, precise) { | |
| var doc = cm.doc, | |
| display = cm.display; | |
| if (!doc.mode.startState) { | |
| return new Context(doc, true, n); | |
| } | |
| var start = findStartLine(cm, n, precise); | |
| var saved = start > doc.first && getLine(doc, start - 1).stateAfter; | |
| var context = saved | |
| ? Context.fromSaved(doc, saved, start) | |
| : new Context(doc, startState(doc.mode), start); | |
| doc.iter(start, n, function (line) { | |
| processLine(cm, line.text, context); | |
| var pos = context.line; | |
| line.stateAfter = | |
| pos == n - 1 || | |
| pos % 5 == 0 || | |
| (pos >= display.viewFrom && pos < display.viewTo) | |
| ? context.save() | |
| : null; | |
| context.nextLine(); | |
| }); | |
| if (precise) { | |
| doc.modeFrontier = context.line; | |
| } | |
| return context; | |
| } | |
| // Lightweight form of highlight -- proceed over this line and | |
| // update state, but don't save a style array. Used for lines that | |
| // aren't currently visible. | |
| function processLine(cm, text, context, startAt) { | |
| var mode = cm.doc.mode; | |
| var stream = new StringStream(text, cm.options.tabSize, context); | |
| stream.start = stream.pos = startAt || 0; | |
| if (text == "") { | |
| callBlankLine(mode, context.state); | |
| } | |
| while (!stream.eol()) { | |
| readToken(mode, stream, context.state); | |
| stream.start = stream.pos; | |
| } | |
| } | |
| function callBlankLine(mode, state) { | |
| if (mode.blankLine) { | |
| return mode.blankLine(state); | |
| } | |
| if (!mode.innerMode) { | |
| return; | |
| } | |
| var inner = innerMode(mode, state); | |
| if (inner.mode.blankLine) { | |
| return inner.mode.blankLine(inner.state); | |
| } | |
| } | |
| function readToken(mode, stream, state, inner) { | |
| for (var i = 0; i < 10; i++) { | |
| if (inner) { | |
| inner[0] = innerMode(mode, state).mode; | |
| } | |
| var style = mode.token(stream, state); | |
| if (stream.pos > stream.start) { | |
| return style; | |
| } | |
| } | |
| throw new Error("Mode " + mode.name + " failed to advance stream."); | |
| } | |
| var Token = function (stream, type, state) { | |
| this.start = stream.start; | |
| this.end = stream.pos; | |
| this.string = stream.current(); | |
| this.type = type || null; | |
| this.state = state; | |
| }; | |
| // Utility for getTokenAt and getLineTokens | |
| function takeToken(cm, pos, precise, asArray) { | |
| var doc = cm.doc, | |
| mode = doc.mode, | |
| style; | |
| pos = clipPos(doc, pos); | |
| var line = getLine(doc, pos.line), | |
| context = getContextBefore(cm, pos.line, precise); | |
| var stream = new StringStream(line.text, cm.options.tabSize, context), | |
| tokens; | |
| if (asArray) { | |
| tokens = []; | |
| } | |
| while ((asArray || stream.pos < pos.ch) && !stream.eol()) { | |
| stream.start = stream.pos; | |
| style = readToken(mode, stream, context.state); | |
| if (asArray) { | |
| tokens.push( | |
| new Token(stream, style, copyState(doc.mode, context.state)) | |
| ); | |
| } | |
| } | |
| return asArray ? tokens : new Token(stream, style, context.state); | |
| } | |
| function extractLineClasses(type, output) { | |
| if (type) { | |
| for (;;) { | |
| var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); | |
| if (!lineClass) { | |
| break; | |
| } | |
| type = | |
| type.slice(0, lineClass.index) + | |
| type.slice(lineClass.index + lineClass[0].length); | |
| var prop = lineClass[1] ? "bgClass" : "textClass"; | |
| if (output[prop] == null) { | |
| output[prop] = lineClass[2]; | |
| } else if ( | |
| !new RegExp("(?:^|s)" + lineClass[2] + "(?:$|s)").test(output[prop]) | |
| ) { | |
| output[prop] += " " + lineClass[2]; | |
| } | |
| } | |
| } | |
| return type; | |
| } | |
| // Run the given mode's parser over a line, calling f for each token. | |
| function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { | |
| var flattenSpans = mode.flattenSpans; | |
| if (flattenSpans == null) { | |
| flattenSpans = cm.options.flattenSpans; | |
| } | |
| var curStart = 0, | |
| curStyle = null; | |
| var stream = new StringStream(text, cm.options.tabSize, context), | |
| style; | |
| var inner = cm.options.addModeClass && [null]; | |
| if (text == "") { | |
| extractLineClasses(callBlankLine(mode, context.state), lineClasses); | |
| } | |
| while (!stream.eol()) { | |
| if (stream.pos > cm.options.maxHighlightLength) { | |
| flattenSpans = false; | |
| if (forceToEnd) { | |
| processLine(cm, text, context, stream.pos); | |
| } | |
| stream.pos = text.length; | |
| style = null; | |
| } else { | |
| style = extractLineClasses( | |
| readToken(mode, stream, context.state, inner), | |
| lineClasses | |
| ); | |
| } | |
| if (inner) { | |
| var mName = inner[0].name; | |
| if (mName) { | |
| style = "m-" + (style ? mName + " " + style : mName); | |
| } | |
| } | |
| if (!flattenSpans || curStyle != style) { | |
| while (curStart < stream.start) { | |
| curStart = Math.min(stream.start, curStart + 5000); | |
| f(curStart, curStyle); | |
| } | |
| curStyle = style; | |
| } | |
| stream.start = stream.pos; | |
| } | |
| while (curStart < stream.pos) { | |
| // Webkit seems to refuse to render text nodes longer than 57444 | |
| // characters, and returns inaccurate measurements in nodes | |
| // starting around 5000 chars. | |
| var pos = Math.min(stream.pos, curStart + 5000); | |
| f(pos, curStyle); | |
| curStart = pos; | |
| } | |
| } | |
| // Finds the line to start with when starting a parse. Tries to | |
| // find a line with a stateAfter, so that it can start with a | |
| // valid state. If that fails, it returns the line with the | |
| // smallest indentation, which tends to need the least context to | |
| // parse correctly. | |
| function findStartLine(cm, n, precise) { | |
| var minindent, | |
| minline, | |
| doc = cm.doc; | |
| var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); | |
| for (var search = n; search > lim; --search) { | |
| if (search <= doc.first) { | |
| return doc.first; | |
| } | |
| var line = getLine(doc, search - 1), | |
| after = line.stateAfter; | |
| if ( | |
| after && | |
| (!precise || | |
| search + (after instanceof SavedContext ? after.lookAhead : 0) <= | |
| doc.modeFrontier) | |
| ) { | |
| return search; | |
| } | |
| var indented = countColumn(line.text, null, cm.options.tabSize); | |
| if (minline == null || minindent > indented) { | |
| minline = search - 1; | |
| minindent = indented; | |
| } | |
| } | |
| return minline; | |
| } | |
| function retreatFrontier(doc, n) { | |
| doc.modeFrontier = Math.min(doc.modeFrontier, n); | |
| if (doc.highlightFrontier < n - 10) { | |
| return; | |
| } | |
| var start = doc.first; | |
| for (var line = n - 1; line > start; line--) { | |
| var saved = getLine(doc, line).stateAfter; | |
| // change is on 3 | |
| // state on line 1 looked ahead 2 -- so saw 3 | |
| // test 1 + 2 < 3 should cover this | |
| if ( | |
| saved && | |
| (!(saved instanceof SavedContext) || line + saved.lookAhead < n) | |
| ) { | |
| start = line + 1; | |
| break; | |
| } | |
| } | |
| doc.highlightFrontier = Math.min(doc.highlightFrontier, start); | |
| } | |
| // LINE DATA STRUCTURE | |
| // Line objects. These hold state related to a line, including | |
| // highlighting info (the styles array). | |
| var Line = function (text, markedSpans, estimateHeight) { | |
| this.text = text; | |
| attachMarkedSpans(this, markedSpans); | |
| this.height = estimateHeight ? estimateHeight(this) : 1; | |
| }; | |
| Line.prototype.lineNo = function () { | |
| return lineNo(this); | |
| }; | |
| eventMixin(Line); | |
| // Change the content (text, markers) of a line. Automatically | |
| // invalidates cached information and tries to re-estimate the | |
| // line's height. | |
| function updateLine(line, text, markedSpans, estimateHeight) { | |
| line.text = text; | |
| if (line.stateAfter) { | |
| line.stateAfter = null; | |
| } | |
| if (line.styles) { | |
| line.styles = null; | |
| } | |
| if (line.order != null) { | |
| line.order = null; | |
| } | |
| detachMarkedSpans(line); | |
| attachMarkedSpans(line, markedSpans); | |
| var estHeight = estimateHeight ? estimateHeight(line) : 1; | |
| if (estHeight != line.height) { | |
| updateLineHeight(line, estHeight); | |
| } | |
| } | |
| // Detach a line from the document tree and its markers. | |
| function cleanUpLine(line) { | |
| line.parent = null; | |
| detachMarkedSpans(line); | |
| } | |
| // Convert a style as returned by a mode (either null, or a string | |
| // containing one or more styles) to a CSS style. This is cached, | |
| // and also looks for line-wide styles. | |
| var styleToClassCache = {}; | |
| var styleToClassCacheWithMode = {}; | |
| function interpretTokenStyle(style, options) { | |
| if (!style || /^\s*$/.test(style)) { | |
| return null; | |
| } | |
| var cache = options.addModeClass | |
| ? styleToClassCacheWithMode | |
| : styleToClassCache; | |
| return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); | |
| } | |
| // Render the DOM representation of the text of a line. Also builds | |
| // up a 'line map', which points at the DOM nodes that represent | |
| // specific stretches of text, and is used by the measuring code. | |
| // The returned object contains the DOM node, this map, and | |
| // information about line-wide styles that were set by the mode. | |
| function buildLineContent(cm, lineView) { | |
| // The padding-right forces the element to have a 'border', which | |
| // is needed on Webkit to be able to get line-level bounding | |
| // rectangles for it (in measureChar). | |
| var content = eltP( | |
| "span", | |
| null, | |
| null, | |
| webkit ? "padding-right: .1px" : null | |
| ); | |
| var builder = { | |
| pre: eltP("pre", [content], "CodeMirror-line"), | |
| content: content, | |
| col: 0, | |
| pos: 0, | |
| cm: cm, | |
| trailingSpace: false, | |
| splitSpaces: (ie || webkit) && cm.getOption("lineWrapping"), | |
| }; | |
| lineView.measure = {}; | |
| // Iterate over the logical lines that make up this visual line. | |
| for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { | |
| var line = i ? lineView.rest[i - 1] : lineView.line, | |
| order = void 0; | |
| builder.pos = 0; | |
| builder.addToken = buildToken; | |
| // Optionally wire in some hacks into the token-rendering | |
| // algorithm, to deal with browser quirks. | |
| if ( | |
| hasBadBidiRects(cm.display.measure) && | |
| (order = getOrder(line, cm.doc.direction)) | |
| ) { | |
| builder.addToken = buildTokenBadBidi(builder.addToken, order); | |
| } | |
| builder.map = []; | |
| var allowFrontierUpdate = | |
| lineView != cm.display.externalMeasured && lineNo(line); | |
| insertLineContent( | |
| line, | |
| builder, | |
| getLineStyles(cm, line, allowFrontierUpdate) | |
| ); | |
| if (line.styleClasses) { | |
| if (line.styleClasses.bgClass) { | |
| builder.bgClass = joinClasses( | |
| line.styleClasses.bgClass, | |
| builder.bgClass || "" | |
| ); | |
| } | |
| if (line.styleClasses.textClass) { | |
| builder.textClass = joinClasses( | |
| line.styleClasses.textClass, | |
| builder.textClass || "" | |
| ); | |
| } | |
| } | |
| // Ensure at least a single node is present, for measuring. | |
| if (builder.map.length == 0) { | |
| builder.map.push( | |
| 0, | |
| 0, | |
| builder.content.appendChild(zeroWidthElement(cm.display.measure)) | |
| ); | |
| } | |
| // Store the map and a cache object for the current logical line | |
| if (i == 0) { | |
| lineView.measure.map = builder.map; | |
| lineView.measure.cache = {}; | |
| } else { | |
| (lineView.measure.maps || (lineView.measure.maps = [])).push( | |
| builder.map | |
| ); | |
| (lineView.measure.caches || (lineView.measure.caches = [])).push({}); | |
| } | |
| } | |
| // See issue #2901 | |
| if (webkit) { | |
| var last = builder.content.lastChild; | |
| if ( | |
| /\bcm-tab\b/.test(last.className) || | |
| (last.querySelector && last.querySelector(".cm-tab")) | |
| ) { | |
| builder.content.className = "cm-tab-wrap-hack"; | |
| } | |
| } | |
| signal(cm, "renderLine", cm, lineView.line, builder.pre); | |
| if (builder.pre.className) { | |
| builder.textClass = joinClasses( | |
| builder.pre.className, | |
| builder.textClass || "" | |
| ); | |
| } | |
| return builder; | |
| } | |
| function defaultSpecialCharPlaceholder(ch) { | |
| var token = elt("span", "\u2022", "cm-invalidchar"); | |
| token.title = "\\u" + ch.charCodeAt(0).toString(16); | |
| token.setAttribute("aria-label", token.title); | |
| return token; | |
| } | |
| // Build up the DOM representation for a single token, and add it to | |
| // the line map. Takes care to render special characters separately. | |
| function buildToken(builder, text, style, startStyle, endStyle, title, css) { | |
| if (!text) { | |
| return; | |
| } | |
| var displayText = builder.splitSpaces | |
| ? splitSpaces(text, builder.trailingSpace) | |
| : text; | |
| var special = builder.cm.state.specialChars, | |
| mustWrap = false; | |
| var content; | |
| if (!special.test(text)) { | |
| builder.col += text.length; | |
| content = document.createTextNode(displayText); | |
| builder.map.push(builder.pos, builder.pos + text.length, content); | |
| if (ie && ie_version < 9) { | |
| mustWrap = true; | |
| } | |
| builder.pos += text.length; | |
| } else { | |
| content = document.createDocumentFragment(); | |
| var pos = 0; | |
| while (true) { | |
| special.lastIndex = pos; | |
| var m = special.exec(text); | |
| var skipped = m ? m.index - pos : text.length - pos; | |
| if (skipped) { | |
| var txt = document.createTextNode( | |
| displayText.slice(pos, pos + skipped) | |
| ); | |
| if (ie && ie_version < 9) { | |
| content.appendChild(elt("span", [txt])); | |
| } else { | |
| content.appendChild(txt); | |
| } | |
| builder.map.push(builder.pos, builder.pos + skipped, txt); | |
| builder.col += skipped; | |
| builder.pos += skipped; | |
| } | |
| if (!m) { | |
| break; | |
| } | |
| pos += skipped + 1; | |
| var txt$1 = void 0; | |
| if (m[0] == "\t") { | |
| var tabSize = builder.cm.options.tabSize, | |
| tabWidth = tabSize - (builder.col % tabSize); | |
| txt$1 = content.appendChild( | |
| elt("span", spaceStr(tabWidth), "cm-tab") | |
| ); | |
| txt$1.setAttribute("role", "presentation"); | |
| txt$1.setAttribute("cm-text", "\t"); | |
| builder.col += tabWidth; | |
| } else if (m[0] == "\r" || m[0] == "\n") { | |
| txt$1 = content.appendChild( | |
| elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar") | |
| ); | |
| txt$1.setAttribute("cm-text", m[0]); | |
| builder.col += 1; | |
| } else { | |
| txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); | |
| txt$1.setAttribute("cm-text", m[0]); | |
| if (ie && ie_version < 9) { | |
| content.appendChild(elt("span", [txt$1])); | |
| } else { | |
| content.appendChild(txt$1); | |
| } | |
| builder.col += 1; | |
| } | |
| builder.map.push(builder.pos, builder.pos + 1, txt$1); | |
| builder.pos++; | |
| } | |
| } | |
| builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; | |
| if (style || startStyle || endStyle || mustWrap || css) { | |
| var fullStyle = style || ""; | |
| if (startStyle) { | |
| fullStyle += startStyle; | |
| } | |
| if (endStyle) { | |
| fullStyle += endStyle; | |
| } | |
| var token = elt("span", [content], fullStyle, css); | |
| if (title) { | |
| token.title = title; | |
| } | |
| return builder.content.appendChild(token); | |
| } | |
| builder.content.appendChild(content); | |
| } | |
| function splitSpaces(text, trailingBefore) { | |
| if (text.length > 1 && !/ /.test(text)) { | |
| return text; | |
| } | |
| var spaceBefore = trailingBefore, | |
| result = ""; | |
| for (var i = 0; i < text.length; i++) { | |
| var ch = text.charAt(i); | |
| if ( | |
| ch == " " && | |
| spaceBefore && | |
| (i == text.length - 1 || text.charCodeAt(i + 1) == 32) | |
| ) { | |
| ch = "\u00a0"; | |
| } | |
| result += ch; | |
| spaceBefore = ch == " "; | |
| } | |
| return result; | |
| } | |
| // Work around nonsense dimensions being reported for stretches of | |
| // right-to-left text. | |
| function buildTokenBadBidi(inner, order) { | |
| return function (builder, text, style, startStyle, endStyle, title, css) { | |
| style = style ? style + " cm-force-border" : "cm-force-border"; | |
| var start = builder.pos, | |
| end = start + text.length; | |
| for (;;) { | |
| // Find the part that overlaps with the start of this text | |
| var part = void 0; | |
| for (var i = 0; i < order.length; i++) { | |
| part = order[i]; | |
| if (part.to > start && part.from <= start) { | |
| break; | |
| } | |
| } | |
| if (part.to >= end) { | |
| return inner(builder, text, style, startStyle, endStyle, title, css); | |
| } | |
| inner( | |
| builder, | |
| text.slice(0, part.to - start), | |
| style, | |
| startStyle, | |
| null, | |
| title, | |
| css | |
| ); | |
| startStyle = null; | |
| text = text.slice(part.to - start); | |
| start = part.to; | |
| } | |
| }; | |
| } | |
| function buildCollapsedSpan(builder, size, marker, ignoreWidget) { | |
| var widget = !ignoreWidget && marker.widgetNode; | |
| if (widget) { | |
| builder.map.push(builder.pos, builder.pos + size, widget); | |
| } | |
| if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { | |
| if (!widget) { | |
| widget = builder.content.appendChild(document.createElement("span")); | |
| } | |
| widget.setAttribute("cm-marker", marker.id); | |
| } | |
| if (widget) { | |
| builder.cm.display.input.setUneditable(widget); | |
| builder.content.appendChild(widget); | |
| } | |
| builder.pos += size; | |
| builder.trailingSpace = false; | |
| } | |
| // Outputs a number of spans to make up a line, taking highlighting | |
| // and marked text into account. | |
| function insertLineContent(line, builder, styles) { | |
| var spans = line.markedSpans, | |
| allText = line.text, | |
| at = 0; | |
| if (!spans) { | |
| for (var i$1 = 1; i$1 < styles.length; i$1 += 2) { | |
| builder.addToken( | |
| builder, | |
| allText.slice(at, (at = styles[i$1])), | |
| interpretTokenStyle(styles[i$1 + 1], builder.cm.options) | |
| ); | |
| } | |
| return; | |
| } | |
| var len = allText.length, | |
| pos = 0, | |
| i = 1, | |
| text = "", | |
| style, | |
| css; | |
| var nextChange = 0, | |
| spanStyle, | |
| spanEndStyle, | |
| spanStartStyle, | |
| title, | |
| collapsed; | |
| for (;;) { | |
| if (nextChange == pos) { | |
| // Update current marker set | |
| spanStyle = spanEndStyle = spanStartStyle = title = css = ""; | |
| collapsed = null; | |
| nextChange = Infinity; | |
| var foundBookmarks = [], | |
| endStyles = void 0; | |
| for (var j = 0; j < spans.length; ++j) { | |
| var sp = spans[j], | |
| m = sp.marker; | |
| if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { | |
| foundBookmarks.push(m); | |
| } else if ( | |
| sp.from <= pos && | |
| (sp.to == null || | |
| sp.to > pos || | |
| (m.collapsed && sp.to == pos && sp.from == pos)) | |
| ) { | |
| if (sp.to != null && sp.to != pos && nextChange > sp.to) { | |
| nextChange = sp.to; | |
| spanEndStyle = ""; | |
| } | |
| if (m.className) { | |
| spanStyle += " " + m.className; | |
| } | |
| if (m.css) { | |
| css = (css ? css + ";" : "") + m.css; | |
| } | |
| if (m.startStyle && sp.from == pos) { | |
| spanStartStyle += " " + m.startStyle; | |
| } | |
| if (m.endStyle && sp.to == nextChange) { | |
| (endStyles || (endStyles = [])).push(m.endStyle, sp.to); | |
| } | |
| if (m.title && !title) { | |
| title = m.title; | |
| } | |
| if ( | |
| m.collapsed && | |
| (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0) | |
| ) { | |
| collapsed = sp; | |
| } | |
| } else if (sp.from > pos && nextChange > sp.from) { | |
| nextChange = sp.from; | |
| } | |
| } | |
| if (endStyles) { | |
| for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) { | |
| if (endStyles[j$1 + 1] == nextChange) { | |
| spanEndStyle += " " + endStyles[j$1]; | |
| } | |
| } | |
| } | |
| if (!collapsed || collapsed.from == pos) { | |
| for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) { | |
| buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); | |
| } | |
| } | |
| if (collapsed && (collapsed.from || 0) == pos) { | |
| buildCollapsedSpan( | |
| builder, | |
| (collapsed.to == null ? len + 1 : collapsed.to) - pos, | |
| collapsed.marker, | |
| collapsed.from == null | |
| ); | |
| if (collapsed.to == null) { | |
| return; | |
| } | |
| if (collapsed.to == pos) { | |
| collapsed = false; | |
| } | |
| } | |
| } | |
| if (pos >= len) { | |
| break; | |
| } | |
| var upto = Math.min(len, nextChange); | |
| while (true) { | |
| if (text) { | |
| var end = pos + text.length; | |
| if (!collapsed) { | |
| var tokenText = end > upto ? text.slice(0, upto - pos) : text; | |
| builder.addToken( | |
| builder, | |
| tokenText, | |
| style ? style + spanStyle : spanStyle, | |
| spanStartStyle, | |
| pos + tokenText.length == nextChange ? spanEndStyle : "", | |
| title, | |
| css | |
| ); | |
| } | |
| if (end >= upto) { | |
| text = text.slice(upto - pos); | |
| pos = upto; | |
| break; | |
| } | |
| pos = end; | |
| spanStartStyle = ""; | |
| } | |
| text = allText.slice(at, (at = styles[i++])); | |
| style = interpretTokenStyle(styles[i++], builder.cm.options); | |
| } | |
| } | |
| } | |
| // These objects are used to represent the visible (currently drawn) | |
| // part of the document. A LineView may correspond to multiple | |
| // logical lines, if those are connected by collapsed ranges. | |
| function LineView(doc, line, lineN) { | |
| // The starting line | |
| this.line = line; | |
| // Continuing lines, if any | |
| this.rest = visualLineContinued(line); | |
| // Number of logical lines in this visual line | |
| this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; | |
| this.node = this.text = null; | |
| this.hidden = lineIsHidden(doc, line); | |
| } | |
| // Create a range of LineView objects for the given lines. | |
| function buildViewArray(cm, from, to) { | |
| var array = [], | |
| nextPos; | |
| for (var pos = from; pos < to; pos = nextPos) { | |
| var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); | |
| nextPos = pos + view.size; | |
| array.push(view); | |
| } | |
| return array; | |
| } | |
| var operationGroup = null; | |
| function pushOperation(op) { | |
| if (operationGroup) { | |
| operationGroup.ops.push(op); | |
| } else { | |
| op.ownsGroup = operationGroup = { | |
| ops: [op], | |
| delayedCallbacks: [], | |
| }; | |
| } | |
| } | |
| function fireCallbacksForOps(group) { | |
| // Calls delayed callbacks and cursorActivity handlers until no | |
| // new ones appear | |
| var callbacks = group.delayedCallbacks, | |
| i = 0; | |
| do { | |
| for (; i < callbacks.length; i++) { | |
| callbacks[i].call(null); | |
| } | |
| for (var j = 0; j < group.ops.length; j++) { | |
| var op = group.ops[j]; | |
| if (op.cursorActivityHandlers) { | |
| while (op.cursorActivityCalled < op.cursorActivityHandlers.length) { | |
| op.cursorActivityHandlers[op.cursorActivityCalled++].call( | |
| null, | |
| op.cm | |
| ); | |
| } | |
| } | |
| } | |
| } while (i < callbacks.length); | |
| } | |
| function finishOperation(op, endCb) { | |
| var group = op.ownsGroup; | |
| if (!group) { | |
| return; | |
| } | |
| try { | |
| fireCallbacksForOps(group); | |
| } finally { | |
| operationGroup = null; | |
| endCb(group); | |
| } | |
| } | |
| var orphanDelayedCallbacks = null; | |
| // Often, we want to signal events at a point where we are in the | |
| // middle of some work, but don't want the handler to start calling | |
| // other methods on the editor, which might be in an inconsistent | |
| // state or simply not expect any other events to happen. | |
| // signalLater looks whether there are any handlers, and schedules | |
| // them to be executed when the last operation ends, or, if no | |
| // operation is active, when a timeout fires. | |
| function signalLater(emitter, type /*, values...*/) { | |
| var arr = getHandlers(emitter, type); | |
| if (!arr.length) { | |
| return; | |
| } | |
| var args = Array.prototype.slice.call(arguments, 2), | |
| list; | |
| if (operationGroup) { | |
| list = operationGroup.delayedCallbacks; | |
| } else if (orphanDelayedCallbacks) { | |
| list = orphanDelayedCallbacks; | |
| } else { | |
| list = orphanDelayedCallbacks = []; | |
| setTimeout(fireOrphanDelayed, 0); | |
| } | |
| var loop = function (i) { | |
| list.push(function () { | |
| return arr[i].apply(null, args); | |
| }); | |
| }; | |
| for (var i = 0; i < arr.length; ++i) loop(i); | |
| } | |
| function fireOrphanDelayed() { | |
| var delayed = orphanDelayedCallbacks; | |
| orphanDelayedCallbacks = null; | |
| for (var i = 0; i < delayed.length; ++i) { | |
| delayed[i](); | |
| } | |
| } | |
| // When an aspect of a line changes, a string is added to | |
| // lineView.changes. This updates the relevant part of the line's | |
| // DOM structure. | |
| function updateLineForChanges(cm, lineView, lineN, dims) { | |
| for (var j = 0; j < lineView.changes.length; j++) { | |
| var type = lineView.changes[j]; | |
| if (type == "text") { | |
| updateLineText(cm, lineView); | |
| } else if (type == "gutter") { | |
| updateLineGutter(cm, lineView, lineN, dims); | |
| } else if (type == "class") { | |
| updateLineClasses(cm, lineView); | |
| } else if (type == "widget") { | |
| updateLineWidgets(cm, lineView, dims); | |
| } | |
| } | |
| lineView.changes = null; | |
| } | |
| // Lines with gutter elements, widgets or a background class need to | |
| // be wrapped, and have the extra elements added to the wrapper div | |
| function ensureLineWrapped(lineView) { | |
| if (lineView.node == lineView.text) { | |
| lineView.node = elt("div", null, null, "position: relative"); | |
| if (lineView.text.parentNode) { | |
| lineView.text.parentNode.replaceChild(lineView.node, lineView.text); | |
| } | |
| lineView.node.appendChild(lineView.text); | |
| if (ie && ie_version < 8) { | |
| lineView.node.style.zIndex = 2; | |
| } | |
| } | |
| return lineView.node; | |
| } | |
| function updateLineBackground(cm, lineView) { | |
| var cls = lineView.bgClass | |
| ? lineView.bgClass + " " + (lineView.line.bgClass || "") | |
| : lineView.line.bgClass; | |
| if (cls) { | |
| cls += " CodeMirror-linebackground"; | |
| } | |
| if (lineView.background) { | |
| if (cls) { | |
| lineView.background.className = cls; | |
| } else { | |
| lineView.background.parentNode.removeChild(lineView.background); | |
| lineView.background = null; | |
| } | |
| } else if (cls) { | |
| var wrap = ensureLineWrapped(lineView); | |
| lineView.background = wrap.insertBefore( | |
| elt("div", null, cls), | |
| wrap.firstChild | |
| ); | |
| cm.display.input.setUneditable(lineView.background); | |
| } | |
| } | |
| // Wrapper around buildLineContent which will reuse the structure | |
| // in display.externalMeasured when possible. | |
| function getLineContent(cm, lineView) { | |
| var ext = cm.display.externalMeasured; | |
| if (ext && ext.line == lineView.line) { | |
| cm.display.externalMeasured = null; | |
| lineView.measure = ext.measure; | |
| return ext.built; | |
| } | |
| return buildLineContent(cm, lineView); | |
| } | |
| // Redraw the line's text. Interacts with the background and text | |
| // classes because the mode may output tokens that influence these | |
| // classes. | |
| function updateLineText(cm, lineView) { | |
| var cls = lineView.text.className; | |
| var built = getLineContent(cm, lineView); | |
| if (lineView.text == lineView.node) { | |
| lineView.node = built.pre; | |
| } | |
| lineView.text.parentNode.replaceChild(built.pre, lineView.text); | |
| lineView.text = built.pre; | |
| if ( | |
| built.bgClass != lineView.bgClass || | |
| built.textClass != lineView.textClass | |
| ) { | |
| lineView.bgClass = built.bgClass; | |
| lineView.textClass = built.textClass; | |
| updateLineClasses(cm, lineView); | |
| } else if (cls) { | |
| lineView.text.className = cls; | |
| } | |
| } | |
| function updateLineClasses(cm, lineView) { | |
| updateLineBackground(cm, lineView); | |
| if (lineView.line.wrapClass) { | |
| ensureLineWrapped(lineView).className = lineView.line.wrapClass; | |
| } else if (lineView.node != lineView.text) { | |
| lineView.node.className = ""; | |
| } | |
| var textClass = lineView.textClass | |
| ? lineView.textClass + " " + (lineView.line.textClass || "") | |
| : lineView.line.textClass; | |
| lineView.text.className = textClass || ""; | |
| } | |
| function updateLineGutter(cm, lineView, lineN, dims) { | |
| if (lineView.gutter) { | |
| lineView.node.removeChild(lineView.gutter); | |
| lineView.gutter = null; | |
| } | |
| if (lineView.gutterBackground) { | |
| lineView.node.removeChild(lineView.gutterBackground); | |
| lineView.gutterBackground = null; | |
| } | |
| if (lineView.line.gutterClass) { | |
| var wrap = ensureLineWrapped(lineView); | |
| lineView.gutterBackground = elt( | |
| "div", | |
| null, | |
| "CodeMirror-gutter-background " + lineView.line.gutterClass, | |
| "left: " + | |
| (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + | |
| "px; width: " + | |
| dims.gutterTotalWidth + | |
| "px" | |
| ); | |
| cm.display.input.setUneditable(lineView.gutterBackground); | |
| wrap.insertBefore(lineView.gutterBackground, lineView.text); | |
| } | |
| var markers = lineView.line.gutterMarkers; | |
| if (cm.options.lineNumbers || markers) { | |
| var wrap$1 = ensureLineWrapped(lineView); | |
| var gutterWrap = (lineView.gutter = elt( | |
| "div", | |
| null, | |
| "CodeMirror-gutter-wrapper", | |
| "left: " + | |
| (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + | |
| "px" | |
| )); | |
| cm.display.input.setUneditable(gutterWrap); | |
| wrap$1.insertBefore(gutterWrap, lineView.text); | |
| if (lineView.line.gutterClass) { | |
| gutterWrap.className += " " + lineView.line.gutterClass; | |
| } | |
| if ( | |
| cm.options.lineNumbers && | |
| (!markers || !markers["CodeMirror-linenumbers"]) | |
| ) { | |
| lineView.lineNumber = gutterWrap.appendChild( | |
| elt( | |
| "div", | |
| lineNumberFor(cm.options, lineN), | |
| "CodeMirror-linenumber CodeMirror-gutter-elt", | |
| "left: " + | |
| dims.gutterLeft["CodeMirror-linenumbers"] + | |
| "px; width: " + | |
| cm.display.lineNumInnerWidth + | |
| "px" | |
| ) | |
| ); | |
| } | |
| if (markers) { | |
| for (var k = 0; k < cm.options.gutters.length; ++k) { | |
| var id = cm.options.gutters[k], | |
| found = markers.hasOwnProperty(id) && markers[id]; | |
| if (found) { | |
| gutterWrap.appendChild( | |
| elt( | |
| "div", | |
| [found], | |
| "CodeMirror-gutter-elt", | |
| "left: " + | |
| dims.gutterLeft[id] + | |
| "px; width: " + | |
| dims.gutterWidth[id] + | |
| "px" | |
| ) | |
| ); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function updateLineWidgets(cm, lineView, dims) { | |
| if (lineView.alignable) { | |
| lineView.alignable = null; | |
| } | |
| for ( | |
| var node = lineView.node.firstChild, next = void 0; | |
| node; | |
| node = next | |
| ) { | |
| next = node.nextSibling; | |
| if (node.className == "CodeMirror-linewidget") { | |
| lineView.node.removeChild(node); | |
| } | |
| } | |
| insertLineWidgets(cm, lineView, dims); | |
| } | |
| // Build a line's DOM representation from scratch | |
| function buildLineElement(cm, lineView, lineN, dims) { | |
| var built = getLineContent(cm, lineView); | |
| lineView.text = lineView.node = built.pre; | |
| if (built.bgClass) { | |
| lineView.bgClass = built.bgClass; | |
| } | |
| if (built.textClass) { | |
| lineView.textClass = built.textClass; | |
| } | |
| updateLineClasses(cm, lineView); | |
| updateLineGutter(cm, lineView, lineN, dims); | |
| insertLineWidgets(cm, lineView, dims); | |
| return lineView.node; | |
| } | |
| // A lineView may contain multiple logical lines (when merged by | |
| // collapsed spans). The widgets for all of them need to be drawn. | |
| function insertLineWidgets(cm, lineView, dims) { | |
| insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); | |
| if (lineView.rest) { | |
| for (var i = 0; i < lineView.rest.length; i++) { | |
| insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); | |
| } | |
| } | |
| } | |
| function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { | |
| if (!line.widgets) { | |
| return; | |
| } | |
| var wrap = ensureLineWrapped(lineView); | |
| for (var i = 0, ws = line.widgets; i < ws.length; ++i) { | |
| var widget = ws[i], | |
| node = elt("div", [widget.node], "CodeMirror-linewidget"); | |
| if (!widget.handleMouseEvents) { | |
| node.setAttribute("cm-ignore-events", "true"); | |
| } | |
| positionLineWidget(widget, node, lineView, dims); | |
| cm.display.input.setUneditable(node); | |
| if (allowAbove && widget.above) { | |
| wrap.insertBefore(node, lineView.gutter || lineView.text); | |
| } else { | |
| wrap.appendChild(node); | |
| } | |
| signalLater(widget, "redraw"); | |
| } | |
| } | |
| function positionLineWidget(widget, node, lineView, dims) { | |
| if (widget.noHScroll) { | |
| (lineView.alignable || (lineView.alignable = [])).push(node); | |
| var width = dims.wrapperWidth; | |
| node.style.left = dims.fixedPos + "px"; | |
| if (!widget.coverGutter) { | |
| width -= dims.gutterTotalWidth; | |
| node.style.paddingLeft = dims.gutterTotalWidth + "px"; | |
| } | |
| node.style.width = width + "px"; | |
| } | |
| if (widget.coverGutter) { | |
| node.style.zIndex = 5; | |
| node.style.position = "relative"; | |
| if (!widget.noHScroll) { | |
| node.style.marginLeft = -dims.gutterTotalWidth + "px"; | |
| } | |
| } | |
| } | |
| function widgetHeight(widget) { | |
| if (widget.height != null) { | |
| return widget.height; | |
| } | |
| var cm = widget.doc.cm; | |
| if (!cm) { | |
| return 0; | |
| } | |
| if (!contains(document.body, widget.node)) { | |
| var parentStyle = "position: relative;"; | |
| if (widget.coverGutter) { | |
| parentStyle += | |
| "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; | |
| } | |
| if (widget.noHScroll) { | |
| parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; | |
| } | |
| removeChildrenAndAdd( | |
| cm.display.measure, | |
| elt("div", [widget.node], null, parentStyle) | |
| ); | |
| } | |
| return (widget.height = widget.node.parentNode.offsetHeight); | |
| } | |
| // Return true when the given mouse event happened in a widget | |
| function eventInWidget(display, e) { | |
| for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { | |
| if ( | |
| !n || | |
| (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || | |
| (n.parentNode == display.sizer && n != display.mover) | |
| ) { | |
| return true; | |
| } | |
| } | |
| } | |
| // POSITION MEASUREMENT | |
| function paddingTop(display) { | |
| return display.lineSpace.offsetTop; | |
| } | |
| function paddingVert(display) { | |
| return display.mover.offsetHeight - display.lineSpace.offsetHeight; | |
| } | |
| function paddingH(display) { | |
| if (display.cachedPaddingH) { | |
| return display.cachedPaddingH; | |
| } | |
| var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); | |
| var style = window.getComputedStyle | |
| ? window.getComputedStyle(e) | |
| : e.currentStyle; | |
| var data = { | |
| left: parseInt(style.paddingLeft), | |
| right: parseInt(style.paddingRight), | |
| }; | |
| if (!isNaN(data.left) && !isNaN(data.right)) { | |
| display.cachedPaddingH = data; | |
| } | |
| return data; | |
| } | |
| function scrollGap(cm) { | |
| return scrollerGap - cm.display.nativeBarWidth; | |
| } | |
| function displayWidth(cm) { | |
| return ( | |
| cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth | |
| ); | |
| } | |
| function displayHeight(cm) { | |
| return ( | |
| cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight | |
| ); | |
| } | |
| // Ensure the lineView.wrapping.heights array is populated. This is | |
| // an array of bottom offsets for the lines that make up a drawn | |
| // line. When lineWrapping is on, there might be more than one | |
| // height. | |
| function ensureLineHeights(cm, lineView, rect) { | |
| var wrapping = cm.options.lineWrapping; | |
| var curWidth = wrapping && displayWidth(cm); | |
| if ( | |
| !lineView.measure.heights || | |
| (wrapping && lineView.measure.width != curWidth) | |
| ) { | |
| var heights = (lineView.measure.heights = []); | |
| if (wrapping) { | |
| lineView.measure.width = curWidth; | |
| var rects = lineView.text.firstChild.getClientRects(); | |
| for (var i = 0; i < rects.length - 1; i++) { | |
| var cur = rects[i], | |
| next = rects[i + 1]; | |
| if (Math.abs(cur.bottom - next.bottom) > 2) { | |
| heights.push((cur.bottom + next.top) / 2 - rect.top); | |
| } | |
| } | |
| } | |
| heights.push(rect.bottom - rect.top); | |
| } | |
| } | |
| // Find a line map (mapping character offsets to text nodes) and a | |
| // measurement cache for the given line number. (A line view might | |
| // contain multiple lines when collapsed ranges are present.) | |
| function mapFromLineView(lineView, line, lineN) { | |
| if (lineView.line == line) { | |
| return { map: lineView.measure.map, cache: lineView.measure.cache }; | |
| } | |
| for (var i = 0; i < lineView.rest.length; i++) { | |
| if (lineView.rest[i] == line) { | |
| return { | |
| map: lineView.measure.maps[i], | |
| cache: lineView.measure.caches[i], | |
| }; | |
| } | |
| } | |
| for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) { | |
| if (lineNo(lineView.rest[i$1]) > lineN) { | |
| return { | |
| map: lineView.measure.maps[i$1], | |
| cache: lineView.measure.caches[i$1], | |
| before: true, | |
| }; | |
| } | |
| } | |
| } | |
| // Render a line into the hidden node display.externalMeasured. Used | |
| // when measurement is needed for a line that's not in the viewport. | |
| function updateExternalMeasurement(cm, line) { | |
| line = visualLine(line); | |
| var lineN = lineNo(line); | |
| var view = (cm.display.externalMeasured = new LineView( | |
| cm.doc, | |
| line, | |
| lineN | |
| )); | |
| view.lineN = lineN; | |
| var built = (view.built = buildLineContent(cm, view)); | |
| view.text = built.pre; | |
| removeChildrenAndAdd(cm.display.lineMeasure, built.pre); | |
| return view; | |
| } | |
| // Get a {top, bottom, left, right} box (in line-local coordinates) | |
| // for a given character. | |
| function measureChar(cm, line, ch, bias) { | |
| return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); | |
| } | |
| // Find a line view that corresponds to the given line number. | |
| function findViewForLine(cm, lineN) { | |
| if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) { | |
| return cm.display.view[findViewIndex(cm, lineN)]; | |
| } | |
| var ext = cm.display.externalMeasured; | |
| if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) { | |
| return ext; | |
| } | |
| } | |
| // Measurement can be split in two steps, the set-up work that | |
| // applies to the whole line, and the measurement of the actual | |
| // character. Functions like coordsChar, that need to do a lot of | |
| // measurements in a row, can thus ensure that the set-up work is | |
| // only done once. | |
| function prepareMeasureForLine(cm, line) { | |
| var lineN = lineNo(line); | |
| var view = findViewForLine(cm, lineN); | |
| if (view && !view.text) { | |
| view = null; | |
| } else if (view && view.changes) { | |
| updateLineForChanges(cm, view, lineN, getDimensions(cm)); | |
| cm.curOp.forceUpdate = true; | |
| } | |
| if (!view) { | |
| view = updateExternalMeasurement(cm, line); | |
| } | |
| var info = mapFromLineView(view, line, lineN); | |
| return { | |
| line: line, | |
| view: view, | |
| rect: null, | |
| map: info.map, | |
| cache: info.cache, | |
| before: info.before, | |
| hasHeights: false, | |
| }; | |
| } | |
| // Given a prepared measurement object, measures the position of an | |
| // actual character (or fetches it from the cache). | |
| function measureCharPrepared(cm, prepared, ch, bias, varHeight) { | |
| if (prepared.before) { | |
| ch = -1; | |
| } | |
| var key = ch + (bias || ""), | |
| found; | |
| if (prepared.cache.hasOwnProperty(key)) { | |
| found = prepared.cache[key]; | |
| } else { | |
| if (!prepared.rect) { | |
| prepared.rect = prepared.view.text.getBoundingClientRect(); | |
| } | |
| if (!prepared.hasHeights) { | |
| ensureLineHeights(cm, prepared.view, prepared.rect); | |
| prepared.hasHeights = true; | |
| } | |
| found = measureCharInner(cm, prepared, ch, bias); | |
| if (!found.bogus) { | |
| prepared.cache[key] = found; | |
| } | |
| } | |
| return { | |
| left: found.left, | |
| right: found.right, | |
| top: varHeight ? found.rtop : found.top, | |
| bottom: varHeight ? found.rbottom : found.bottom, | |
| }; | |
| } | |
| var nullRect = { left: 0, right: 0, top: 0, bottom: 0 }; | |
| function nodeAndOffsetInLineMap(map, ch, bias) { | |
| var node, start, end, collapse, mStart, mEnd; | |
| // First, search the line map for the text node corresponding to, | |
| // or closest to, the target character. | |
| for (var i = 0; i < map.length; i += 3) { | |
| mStart = map[i]; | |
| mEnd = map[i + 1]; | |
| if (ch < mStart) { | |
| start = 0; | |
| end = 1; | |
| collapse = "left"; | |
| } else if (ch < mEnd) { | |
| start = ch - mStart; | |
| end = start + 1; | |
| } else if (i == map.length - 3 || (ch == mEnd && map[i + 3] > ch)) { | |
| end = mEnd - mStart; | |
| start = end - 1; | |
| if (ch >= mEnd) { | |
| collapse = "right"; | |
| } | |
| } | |
| if (start != null) { | |
| node = map[i + 2]; | |
| if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) { | |
| collapse = bias; | |
| } | |
| if (bias == "left" && start == 0) { | |
| while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { | |
| node = map[(i -= 3) + 2]; | |
| collapse = "left"; | |
| } | |
| } | |
| if (bias == "right" && start == mEnd - mStart) { | |
| while ( | |
| i < map.length - 3 && | |
| map[i + 3] == map[i + 4] && | |
| !map[i + 5].insertLeft | |
| ) { | |
| node = map[(i += 3) + 2]; | |
| collapse = "right"; | |
| } | |
| } | |
| break; | |
| } | |
| } | |
| return { | |
| node: node, | |
| start: start, | |
| end: end, | |
| collapse: collapse, | |
| coverStart: mStart, | |
| coverEnd: mEnd, | |
| }; | |
| } | |
| function getUsefulRect(rects, bias) { | |
| var rect = nullRect; | |
| if (bias == "left") { | |
| for (var i = 0; i < rects.length; i++) { | |
| if ((rect = rects[i]).left != rect.right) { | |
| break; | |
| } | |
| } | |
| } else { | |
| for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { | |
| if ((rect = rects[i$1]).left != rect.right) { | |
| break; | |
| } | |
| } | |
| } | |
| return rect; | |
| } | |
| function measureCharInner(cm, prepared, ch, bias) { | |
| var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); | |
| var node = place.node, | |
| start = place.start, | |
| end = place.end, | |
| collapse = place.collapse; | |
| var rect; | |
| if (node.nodeType == 3) { | |
| // If it is a text node, use a range to retrieve the coordinates. | |
| for (var i$1 = 0; i$1 < 4; i$1++) { | |
| // Retry a maximum of 4 times when nonsense rectangles are returned | |
| while ( | |
| start && | |
| isExtendingChar(prepared.line.text.charAt(place.coverStart + start)) | |
| ) { | |
| --start; | |
| } | |
| while ( | |
| place.coverStart + end < place.coverEnd && | |
| isExtendingChar(prepared.line.text.charAt(place.coverStart + end)) | |
| ) { | |
| ++end; | |
| } | |
| if ( | |
| ie && | |
| ie_version < 9 && | |
| start == 0 && | |
| end == place.coverEnd - place.coverStart | |
| ) { | |
| rect = node.parentNode.getBoundingClientRect(); | |
| } else { | |
| rect = getUsefulRect(range(node, start, end).getClientRects(), bias); | |
| } | |
| if (rect.left || rect.right || start == 0) { | |
| break; | |
| } | |
| end = start; | |
| start = start - 1; | |
| collapse = "right"; | |
| } | |
| if (ie && ie_version < 11) { | |
| rect = maybeUpdateRectForZooming(cm.display.measure, rect); | |
| } | |
| } else { | |
| // If it is a widget, simply get the box for the whole widget. | |
| if (start > 0) { | |
| collapse = bias = "right"; | |
| } | |
| var rects; | |
| if ( | |
| cm.options.lineWrapping && | |
| (rects = node.getClientRects()).length > 1 | |
| ) { | |
| rect = rects[bias == "right" ? rects.length - 1 : 0]; | |
| } else { | |
| rect = node.getBoundingClientRect(); | |
| } | |
| } | |
| if ( | |
| ie && | |
| ie_version < 9 && | |
| !start && | |
| (!rect || (!rect.left && !rect.right)) | |
| ) { | |
| var rSpan = node.parentNode.getClientRects()[0]; | |
| if (rSpan) { | |
| rect = { | |
| left: rSpan.left, | |
| right: rSpan.left + charWidth(cm.display), | |
| top: rSpan.top, | |
| bottom: rSpan.bottom, | |
| }; | |
| } else { | |
| rect = nullRect; | |
| } | |
| } | |
| var rtop = rect.top - prepared.rect.top, | |
| rbot = rect.bottom - prepared.rect.top; | |
| var mid = (rtop + rbot) / 2; | |
| var heights = prepared.view.measure.heights; | |
| var i = 0; | |
| for (; i < heights.length - 1; i++) { | |
| if (mid < heights[i]) { | |
| break; | |
| } | |
| } | |
| var top = i ? heights[i - 1] : 0, | |
| bot = heights[i]; | |
| var result = { | |
| left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, | |
| right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, | |
| top: top, | |
| bottom: bot, | |
| }; | |
| if (!rect.left && !rect.right) { | |
| result.bogus = true; | |
| } | |
| if (!cm.options.singleCursorHeightPerLine) { | |
| result.rtop = rtop; | |
| result.rbottom = rbot; | |
| } | |
| return result; | |
| } | |
| // Work around problem with bounding client rects on ranges being | |
| // returned incorrectly when zoomed on IE10 and below. | |
| function maybeUpdateRectForZooming(measure, rect) { | |
| if ( | |
| !window.screen || | |
| screen.logicalXDPI == null || | |
| screen.logicalXDPI == screen.deviceXDPI || | |
| !hasBadZoomedRects(measure) | |
| ) { | |
| return rect; | |
| } | |
| var scaleX = screen.logicalXDPI / screen.deviceXDPI; | |
| var scaleY = screen.logicalYDPI / screen.deviceYDPI; | |
| return { | |
| left: rect.left * scaleX, | |
| right: rect.right * scaleX, | |
| top: rect.top * scaleY, | |
| bottom: rect.bottom * scaleY, | |
| }; | |
| } | |
| function clearLineMeasurementCacheFor(lineView) { | |
| if (lineView.measure) { | |
| lineView.measure.cache = {}; | |
| lineView.measure.heights = null; | |
| if (lineView.rest) { | |
| for (var i = 0; i < lineView.rest.length; i++) { | |
| lineView.measure.caches[i] = {}; | |
| } | |
| } | |
| } | |
| } | |
| function clearLineMeasurementCache(cm) { | |
| cm.display.externalMeasure = null; | |
| removeChildren(cm.display.lineMeasure); | |
| for (var i = 0; i < cm.display.view.length; i++) { | |
| clearLineMeasurementCacheFor(cm.display.view[i]); | |
| } | |
| } | |
| function clearCaches(cm) { | |
| clearLineMeasurementCache(cm); | |
| cm.display.cachedCharWidth = | |
| cm.display.cachedTextHeight = | |
| cm.display.cachedPaddingH = | |
| null; | |
| if (!cm.options.lineWrapping) { | |
| cm.display.maxLineChanged = true; | |
| } | |
| cm.display.lineNumChars = null; | |
| } | |
| function pageScrollX() { | |
| // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 | |
| // which causes page_Offset and bounding client rects to use | |
| // different reference viewports and invalidate our calculations. | |
| if (chrome && android) { | |
| return -( | |
| document.body.getBoundingClientRect().left - | |
| parseInt(getComputedStyle(document.body).marginLeft) | |
| ); | |
| } | |
| return ( | |
| window.pageXOffset || | |
| (document.documentElement || document.body).scrollLeft | |
| ); | |
| } | |
| function pageScrollY() { | |
| if (chrome && android) { | |
| return -( | |
| document.body.getBoundingClientRect().top - | |
| parseInt(getComputedStyle(document.body).marginTop) | |
| ); | |
| } | |
| return ( | |
| window.pageYOffset || | |
| (document.documentElement || document.body).scrollTop | |
| ); | |
| } | |
| // Converts a {top, bottom, left, right} box from line-local | |
| // coordinates into another coordinate system. Context may be one of | |
| // "line", "div" (display.lineDiv), "local"./null (editor), "window", | |
| // or "page". | |
| function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { | |
| if (!includeWidgets && lineObj.widgets) { | |
| for (var i = 0; i < lineObj.widgets.length; ++i) { | |
| if (lineObj.widgets[i].above) { | |
| var size = widgetHeight(lineObj.widgets[i]); | |
| rect.top += size; | |
| rect.bottom += size; | |
| } | |
| } | |
| } | |
| if (context == "line") { | |
| return rect; | |
| } | |
| if (!context) { | |
| context = "local"; | |
| } | |
| var yOff = heightAtLine(lineObj); | |
| if (context == "local") { | |
| yOff += paddingTop(cm.display); | |
| } else { | |
| yOff -= cm.display.viewOffset; | |
| } | |
| if (context == "page" || context == "window") { | |
| var lOff = cm.display.lineSpace.getBoundingClientRect(); | |
| yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); | |
| var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); | |
| rect.left += xOff; | |
| rect.right += xOff; | |
| } | |
| rect.top += yOff; | |
| rect.bottom += yOff; | |
| return rect; | |
| } | |
| // Coverts a box from "div" coords to another coordinate system. | |
| // Context may be "window", "page", "div", or "local"./null. | |
| function fromCoordSystem(cm, coords, context) { | |
| if (context == "div") { | |
| return coords; | |
| } | |
| var left = coords.left, | |
| top = coords.top; | |
| // First move into "page" coordinate system | |
| if (context == "page") { | |
| left -= pageScrollX(); | |
| top -= pageScrollY(); | |
| } else if (context == "local" || !context) { | |
| var localBox = cm.display.sizer.getBoundingClientRect(); | |
| left += localBox.left; | |
| top += localBox.top; | |
| } | |
| var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); | |
| return { left: left - lineSpaceBox.left, top: top - lineSpaceBox.top }; | |
| } | |
| function charCoords(cm, pos, context, lineObj, bias) { | |
| if (!lineObj) { | |
| lineObj = getLine(cm.doc, pos.line); | |
| } | |
| return intoCoordSystem( | |
| cm, | |
| lineObj, | |
| measureChar(cm, lineObj, pos.ch, bias), | |
| context | |
| ); | |
| } | |
| // Returns a box for a given cursor position, which may have an | |
| // 'other' property containing the position of the secondary cursor | |
| // on a bidi boundary. | |
| // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` | |
| // and after `char - 1` in writing order of `char - 1` | |
| // A cursor Pos(line, char, "after") is on the same visual line as `char` | |
| // and before `char` in writing order of `char` | |
| // Examples (upper-case letters are RTL, lower-case are LTR): | |
| // Pos(0, 1, ...) | |
| // before after | |
| // ab a|b a|b | |
| // aB a|B aB| | |
| // Ab |Ab A|b | |
| // AB B|A B|A | |
| // Every position after the last character on a line is considered to stick | |
| // to the last character on the line. | |
| function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { | |
| lineObj = lineObj || getLine(cm.doc, pos.line); | |
| if (!preparedMeasure) { | |
| preparedMeasure = prepareMeasureForLine(cm, lineObj); | |
| } | |
| function get(ch, right) { | |
| var m = measureCharPrepared( | |
| cm, | |
| preparedMeasure, | |
| ch, | |
| right ? "right" : "left", | |
| varHeight | |
| ); | |
| if (right) { | |
| m.left = m.right; | |
| } else { | |
| m.right = m.left; | |
| } | |
| return intoCoordSystem(cm, lineObj, m, context); | |
| } | |
| var order = getOrder(lineObj, cm.doc.direction), | |
| ch = pos.ch, | |
| sticky = pos.sticky; | |
| if (ch >= lineObj.text.length) { | |
| ch = lineObj.text.length; | |
| sticky = "before"; | |
| } else if (ch <= 0) { | |
| ch = 0; | |
| sticky = "after"; | |
| } | |
| if (!order) { | |
| return get(sticky == "before" ? ch - 1 : ch, sticky == "before"); | |
| } | |
| function getBidi(ch, partPos, invert) { | |
| var part = order[partPos], | |
| right = part.level % 2 != 0; | |
| return get(invert ? ch - 1 : ch, right != invert); | |
| } | |
| var partPos = getBidiPartAt(order, ch, sticky); | |
| var other = bidiOther; | |
| var val = getBidi(ch, partPos, sticky == "before"); | |
| if (other != null) { | |
| val.other = getBidi(ch, other, sticky != "before"); | |
| } | |
| return val; | |
| } | |
| // Used to cheaply estimate the coordinates for a position. Used for | |
| // intermediate scroll updates. | |
| function estimateCoords(cm, pos) { | |
| var left = 0; | |
| pos = clipPos(cm.doc, pos); | |
| if (!cm.options.lineWrapping) { | |
| left = charWidth(cm.display) * pos.ch; | |
| } | |
| var lineObj = getLine(cm.doc, pos.line); | |
| var top = heightAtLine(lineObj) + paddingTop(cm.display); | |
| return { left: left, right: left, top: top, bottom: top + lineObj.height }; | |
| } | |
| // Positions returned by coordsChar contain some extra information. | |
| // xRel is the relative x position of the input coordinates compared | |
| // to the found position (so xRel > 0 means the coordinates are to | |
| // the right of the character position, for example). When outside | |
| // is true, that means the coordinates lie outside the line's | |
| // vertical range. | |
| function PosWithInfo(line, ch, sticky, outside, xRel) { | |
| var pos = Pos(line, ch, sticky); | |
| pos.xRel = xRel; | |
| if (outside) { | |
| pos.outside = true; | |
| } | |
| return pos; | |
| } | |
| // Compute the character position closest to the given coordinates. | |
| // Input must be lineSpace-local ("div" coordinate system). | |
| function coordsChar(cm, x, y) { | |
| var doc = cm.doc; | |
| y += cm.display.viewOffset; | |
| if (y < 0) { | |
| return PosWithInfo(doc.first, 0, null, true, -1); | |
| } | |
| var lineN = lineAtHeight(doc, y), | |
| last = doc.first + doc.size - 1; | |
| if (lineN > last) { | |
| return PosWithInfo( | |
| doc.first + doc.size - 1, | |
| getLine(doc, last).text.length, | |
| null, | |
| true, | |
| 1 | |
| ); | |
| } | |
| if (x < 0) { | |
| x = 0; | |
| } | |
| var lineObj = getLine(doc, lineN); | |
| for (;;) { | |
| var found = coordsCharInner(cm, lineObj, lineN, x, y); | |
| var merged = collapsedSpanAtEnd(lineObj); | |
| var mergedPos = merged && merged.find(0, true); | |
| if ( | |
| merged && | |
| (found.ch > mergedPos.from.ch || | |
| (found.ch == mergedPos.from.ch && found.xRel > 0)) | |
| ) { | |
| lineN = lineNo((lineObj = mergedPos.to.line)); | |
| } else { | |
| return found; | |
| } | |
| } | |
| } | |
| function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { | |
| var measure = function (ch) { | |
| return intoCoordSystem( | |
| cm, | |
| lineObj, | |
| measureCharPrepared(cm, preparedMeasure, ch), | |
| "line" | |
| ); | |
| }; | |
| var end = lineObj.text.length; | |
| var begin = findFirst( | |
| function (ch) { | |
| return measure(ch - 1).bottom <= y; | |
| }, | |
| end, | |
| 0 | |
| ); | |
| end = findFirst( | |
| function (ch) { | |
| return measure(ch).top > y; | |
| }, | |
| begin, | |
| end | |
| ); | |
| return { begin: begin, end: end }; | |
| } | |
| function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { | |
| var targetTop = intoCoordSystem( | |
| cm, | |
| lineObj, | |
| measureCharPrepared(cm, preparedMeasure, target), | |
| "line" | |
| ).top; | |
| return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop); | |
| } | |
| function coordsCharInner(cm, lineObj, lineNo, x, y) { | |
| y -= heightAtLine(lineObj); | |
| var begin = 0, | |
| end = lineObj.text.length; | |
| var preparedMeasure = prepareMeasureForLine(cm, lineObj); | |
| var pos; | |
| var order = getOrder(lineObj, cm.doc.direction); | |
| if (order) { | |
| if (cm.options.lineWrapping) { | |
| var assign; | |
| (assign = wrappedLineExtent(cm, lineObj, preparedMeasure, y)), | |
| (begin = assign.begin), | |
| (end = assign.end), | |
| assign; | |
| } | |
| pos = new Pos(lineNo, Math.floor(begin + (end - begin) / 2)); | |
| var beginLeft = cursorCoords( | |
| cm, | |
| pos, | |
| "line", | |
| lineObj, | |
| preparedMeasure | |
| ).left; | |
| var dir = beginLeft < x ? 1 : -1; | |
| var prevDiff, | |
| diff = beginLeft - x, | |
| prevPos; | |
| var steps = Math.ceil((end - begin) / 4); | |
| outer: do { | |
| prevDiff = diff; | |
| prevPos = pos; | |
| var i = 0; | |
| for (; i < steps; ++i) { | |
| var prevPos$1 = pos; | |
| pos = moveVisually(cm, lineObj, pos, dir); | |
| if ( | |
| pos == null || | |
| pos.ch < begin || | |
| end <= (pos.sticky == "before" ? pos.ch - 1 : pos.ch) | |
| ) { | |
| pos = prevPos$1; | |
| break outer; | |
| } | |
| } | |
| diff = cursorCoords(cm, pos, "line", lineObj, preparedMeasure).left - x; | |
| if (steps > 1) { | |
| var diff_change_per_step = Math.abs(diff - prevDiff) / steps; | |
| steps = Math.min( | |
| steps, | |
| Math.ceil(Math.abs(diff) / diff_change_per_step) | |
| ); | |
| dir = diff < 0 ? 1 : -1; | |
| } | |
| } while ( | |
| diff != 0 && | |
| (steps > 1 || | |
| (dir < 0 != diff < 0 && Math.abs(diff) <= Math.abs(prevDiff))) | |
| ); | |
| if (Math.abs(diff) > Math.abs(prevDiff)) { | |
| if (diff < 0 == prevDiff < 0) { | |
| throw new Error("Broke out of infinite loop in coordsCharInner"); | |
| } | |
| pos = prevPos; | |
| } | |
| } else { | |
| var ch = findFirst( | |
| function (ch) { | |
| var box = intoCoordSystem( | |
| cm, | |
| lineObj, | |
| measureCharPrepared(cm, preparedMeasure, ch), | |
| "line" | |
| ); | |
| if (box.top > y) { | |
| // For the cursor stickiness | |
| end = Math.min(ch, end); | |
| return true; | |
| } else if (box.bottom <= y) { | |
| return false; | |
| } else if (box.left > x) { | |
| return true; | |
| } else if (box.right < x) { | |
| return false; | |
| } else { | |
| return x - box.left < box.right - x; | |
| } | |
| }, | |
| begin, | |
| end | |
| ); | |
| ch = skipExtendingChars(lineObj.text, ch, 1); | |
| pos = new Pos(lineNo, ch, ch == end ? "before" : "after"); | |
| } | |
| var coords = cursorCoords(cm, pos, "line", lineObj, preparedMeasure); | |
| if (y < coords.top || coords.bottom < y) { | |
| pos.outside = true; | |
| } | |
| pos.xRel = x < coords.left ? -1 : x > coords.right ? 1 : 0; | |
| return pos; | |
| } | |
| var measureText; | |
| // Compute the default text height. | |
| function textHeight(display) { | |
| if (display.cachedTextHeight != null) { | |
| return display.cachedTextHeight; | |
| } | |
| if (measureText == null) { | |
| measureText = elt("pre"); | |
| // Measure a bunch of lines, for browsers that compute | |
| // fractional heights. | |
| for (var i = 0; i < 49; ++i) { | |
| measureText.appendChild(document.createTextNode("x")); | |
| measureText.appendChild(elt("br")); | |
| } | |
| measureText.appendChild(document.createTextNode("x")); | |
| } | |
| removeChildrenAndAdd(display.measure, measureText); | |
| var height = measureText.offsetHeight / 50; | |
| if (height > 3) { | |
| display.cachedTextHeight = height; | |
| } | |
| removeChildren(display.measure); | |
| return height || 1; | |
| } | |
| // Compute the default character width. | |
| function charWidth(display) { | |
| if (display.cachedCharWidth != null) { | |
| return display.cachedCharWidth; | |
| } | |
| var anchor = elt("span", "xxxxxxxxxx"); | |
| var pre = elt("pre", [anchor]); | |
| removeChildrenAndAdd(display.measure, pre); | |
| var rect = anchor.getBoundingClientRect(), | |
| width = (rect.right - rect.left) / 10; | |
| if (width > 2) { | |
| display.cachedCharWidth = width; | |
| } | |
| return width || 10; | |
| } | |
| // Do a bulk-read of the DOM positions and sizes needed to draw the | |
| // view, so that we don't interleave reading and writing to the DOM. | |
| function getDimensions(cm) { | |
| var d = cm.display, | |
| left = {}, | |
| width = {}; | |
| var gutterLeft = d.gutters.clientLeft; | |
| for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { | |
| left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; | |
| width[cm.options.gutters[i]] = n.clientWidth; | |
| } | |
| return { | |
| fixedPos: compensateForHScroll(d), | |
| gutterTotalWidth: d.gutters.offsetWidth, | |
| gutterLeft: left, | |
| gutterWidth: width, | |
| wrapperWidth: d.wrapper.clientWidth, | |
| }; | |
| } | |
| // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, | |
| // but using getBoundingClientRect to get a sub-pixel-accurate | |
| // result. | |
| function compensateForHScroll(display) { | |
| return ( | |
| display.scroller.getBoundingClientRect().left - | |
| display.sizer.getBoundingClientRect().left | |
| ); | |
| } | |
| // Returns a function that estimates the height of a line, to use as | |
| // first approximation until the line becomes visible (and is thus | |
| // properly measurable). | |
| function estimateHeight(cm) { | |
| var th = textHeight(cm.display), | |
| wrapping = cm.options.lineWrapping; | |
| var perLine = | |
| wrapping && | |
| Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); | |
| return function (line) { | |
| if (lineIsHidden(cm.doc, line)) { | |
| return 0; | |
| } | |
| var widgetsHeight = 0; | |
| if (line.widgets) { | |
| for (var i = 0; i < line.widgets.length; i++) { | |
| if (line.widgets[i].height) { | |
| widgetsHeight += line.widgets[i].height; | |
| } | |
| } | |
| } | |
| if (wrapping) { | |
| return ( | |
| widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th | |
| ); | |
| } else { | |
| return widgetsHeight + th; | |
| } | |
| }; | |
| } | |
| function estimateLineHeights(cm) { | |
| var doc = cm.doc, | |
| est = estimateHeight(cm); | |
| doc.iter(function (line) { | |
| var estHeight = est(line); | |
| if (estHeight != line.height) { | |
| updateLineHeight(line, estHeight); | |
| } | |
| }); | |
| } | |
| // Given a mouse event, find the corresponding position. If liberal | |
| // is false, it checks whether a gutter or scrollbar was clicked, | |
| // and returns null if it was. forRect is used by rectangular | |
| // selections, and tries to estimate a character position even for | |
| // coordinates beyond the right of the text. | |
| function posFromMouse(cm, e, liberal, forRect) { | |
| var display = cm.display; | |
| if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { | |
| return null; | |
| } | |
| var x, | |
| y, | |
| space = display.lineSpace.getBoundingClientRect(); | |
| // Fails unpredictably on IE[67] when mouse is dragged around quickly. | |
| try { | |
| x = e.clientX - space.left; | |
| y = e.clientY - space.top; | |
| } catch (e) { | |
| return null; | |
| } | |
| var coords = coordsChar(cm, x, y), | |
| line; | |
| if ( | |
| forRect && | |
| coords.xRel == 1 && | |
| (line = getLine(cm.doc, coords.line).text).length == coords.ch | |
| ) { | |
| var colDiff = | |
| countColumn(line, line.length, cm.options.tabSize) - line.length; | |
| coords = Pos( | |
| coords.line, | |
| Math.max( | |
| 0, | |
| Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - | |
| colDiff | |
| ) | |
| ); | |
| } | |
| return coords; | |
| } | |
| // Find the view element corresponding to a given line. Return null | |
| // when the line isn't visible. | |
| function findViewIndex(cm, n) { | |
| if (n >= cm.display.viewTo) { | |
| return null; | |
| } | |
| n -= cm.display.viewFrom; | |
| if (n < 0) { | |
| return null; | |
| } | |
| var view = cm.display.view; | |
| for (var i = 0; i < view.length; i++) { | |
| n -= view[i].size; | |
| if (n < 0) { | |
| return i; | |
| } | |
| } | |
| } | |
| function updateSelection(cm) { | |
| cm.display.input.showSelection(cm.display.input.prepareSelection()); | |
| } | |
| function prepareSelection(cm, primary) { | |
| var doc = cm.doc, | |
| result = {}; | |
| var curFragment = (result.cursors = document.createDocumentFragment()); | |
| var selFragment = (result.selection = document.createDocumentFragment()); | |
| for (var i = 0; i < doc.sel.ranges.length; i++) { | |
| if (primary === false && i == doc.sel.primIndex) { | |
| continue; | |
| } | |
| var range = doc.sel.ranges[i]; | |
| if ( | |
| range.from().line >= cm.display.viewTo || | |
| range.to().line < cm.display.viewFrom | |
| ) { | |
| continue; | |
| } | |
| var collapsed = range.empty(); | |
| if (collapsed || cm.options.showCursorWhenSelecting) { | |
| drawSelectionCursor(cm, range.head, curFragment); | |
| } | |
| if (!collapsed) { | |
| drawSelectionRange(cm, range, selFragment); | |
| } | |
| } | |
| return result; | |
| } | |
| // Draws a cursor for the given range | |
| function drawSelectionCursor(cm, head, output) { | |
| var pos = cursorCoords( | |
| cm, | |
| head, | |
| "div", | |
| null, | |
| null, | |
| !cm.options.singleCursorHeightPerLine | |
| ); | |
| var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); | |
| cursor.style.left = pos.left + "px"; | |
| cursor.style.top = pos.top + "px"; | |
| cursor.style.height = | |
| Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; | |
| if (pos.other) { | |
| // Secondary cursor, shown when on a 'jump' in bi-directional text | |
| var otherCursor = output.appendChild( | |
| elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor") | |
| ); | |
| otherCursor.style.display = ""; | |
| otherCursor.style.left = pos.other.left + "px"; | |
| otherCursor.style.top = pos.other.top + "px"; | |
| otherCursor.style.height = | |
| (pos.other.bottom - pos.other.top) * 0.85 + "px"; | |
| } | |
| } | |
| // Draws the given range as a highlighted selection | |
| function drawSelectionRange(cm, range, output) { | |
| var display = cm.display, | |
| doc = cm.doc; | |
| var fragment = document.createDocumentFragment(); | |
| var padding = paddingH(cm.display), | |
| leftSide = padding.left; | |
| var rightSide = | |
| Math.max( | |
| display.sizerWidth, | |
| displayWidth(cm) - display.sizer.offsetLeft | |
| ) - padding.right; | |
| function add(left, top, width, bottom) { | |
| if (top < 0) { | |
| top = 0; | |
| } | |
| top = Math.round(top); | |
| bottom = Math.round(bottom); | |
| fragment.appendChild( | |
| elt( | |
| "div", | |
| null, | |
| "CodeMirror-selected", | |
| "position: absolute; left: " + | |
| left + | |
| "px;\n top: " + | |
| top + | |
| "px; width: " + | |
| (width == null ? rightSide - left : width) + | |
| "px;\n height: " + | |
| (bottom - top) + | |
| "px" | |
| ) | |
| ); | |
| } | |
| function drawForLine(line, fromArg, toArg) { | |
| var lineObj = getLine(doc, line); | |
| var lineLen = lineObj.text.length; | |
| var start, end; | |
| function coords(ch, bias) { | |
| return charCoords(cm, Pos(line, ch), "div", lineObj, bias); | |
| } | |
| iterateBidiSections( | |
| getOrder(lineObj, doc.direction), | |
| fromArg || 0, | |
| toArg == null ? lineLen : toArg, | |
| function (from, to, dir) { | |
| var leftPos = coords(from, "left"), | |
| rightPos, | |
| left, | |
| right; | |
| if (from == to) { | |
| rightPos = leftPos; | |
| left = right = leftPos.left; | |
| } else { | |
| rightPos = coords(to - 1, "right"); | |
| if (dir == "rtl") { | |
| var tmp = leftPos; | |
| leftPos = rightPos; | |
| rightPos = tmp; | |
| } | |
| left = leftPos.left; | |
| right = rightPos.right; | |
| } | |
| if (fromArg == null && from == 0) { | |
| left = leftSide; | |
| } | |
| if (rightPos.top - leftPos.top > 3) { | |
| // Different lines, draw top part | |
| add(left, leftPos.top, null, leftPos.bottom); | |
| left = leftSide; | |
| if (leftPos.bottom < rightPos.top) { | |
| add(left, leftPos.bottom, null, rightPos.top); | |
| } | |
| } | |
| if (toArg == null && to == lineLen) { | |
| right = rightSide; | |
| } | |
| if ( | |
| !start || | |
| leftPos.top < start.top || | |
| (leftPos.top == start.top && leftPos.left < start.left) | |
| ) { | |
| start = leftPos; | |
| } | |
| if ( | |
| !end || | |
| rightPos.bottom > end.bottom || | |
| (rightPos.bottom == end.bottom && rightPos.right > end.right) | |
| ) { | |
| end = rightPos; | |
| } | |
| if (left < leftSide + 1) { | |
| left = leftSide; | |
| } | |
| add(left, rightPos.top, right - left, rightPos.bottom); | |
| } | |
| ); | |
| return { start: start, end: end }; | |
| } | |
| var sFrom = range.from(), | |
| sTo = range.to(); | |
| if (sFrom.line == sTo.line) { | |
| drawForLine(sFrom.line, sFrom.ch, sTo.ch); | |
| } else { | |
| var fromLine = getLine(doc, sFrom.line), | |
| toLine = getLine(doc, sTo.line); | |
| var singleVLine = visualLine(fromLine) == visualLine(toLine); | |
| var leftEnd = drawForLine( | |
| sFrom.line, | |
| sFrom.ch, | |
| singleVLine ? fromLine.text.length + 1 : null | |
| ).end; | |
| var rightStart = drawForLine( | |
| sTo.line, | |
| singleVLine ? 0 : null, | |
| sTo.ch | |
| ).start; | |
| if (singleVLine) { | |
| if (leftEnd.top < rightStart.top - 2) { | |
| add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); | |
| add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); | |
| } else { | |
| add( | |
| leftEnd.right, | |
| leftEnd.top, | |
| rightStart.left - leftEnd.right, | |
| leftEnd.bottom | |
| ); | |
| } | |
| } | |
| if (leftEnd.bottom < rightStart.top) { | |
| add(leftSide, leftEnd.bottom, null, rightStart.top); | |
| } | |
| } | |
| output.appendChild(fragment); | |
| } | |
| // Cursor-blinking | |
| function restartBlink(cm) { | |
| if (!cm.state.focused) { | |
| return; | |
| } | |
| var display = cm.display; | |
| clearInterval(display.blinker); | |
| var on = true; | |
| display.cursorDiv.style.visibility = ""; | |
| if (cm.options.cursorBlinkRate > 0) { | |
| display.blinker = setInterval(function () { | |
| return (display.cursorDiv.style.visibility = (on = !on) | |
| ? "" | |
| : "hidden"); | |
| }, cm.options.cursorBlinkRate); | |
| } else if (cm.options.cursorBlinkRate < 0) { | |
| display.cursorDiv.style.visibility = "hidden"; | |
| } | |
| } | |
| function ensureFocus(cm) { | |
| if (!cm.state.focused) { | |
| cm.display.input.focus(); | |
| onFocus(cm); | |
| } | |
| } | |
| function delayBlurEvent(cm) { | |
| cm.state.delayingBlurEvent = true; | |
| setTimeout(function () { | |
| if (cm.state.delayingBlurEvent) { | |
| cm.state.delayingBlurEvent = false; | |
| onBlur(cm); | |
| } | |
| }, 100); | |
| } | |
| function onFocus(cm, e) { | |
| if (cm.state.delayingBlurEvent) { | |
| cm.state.delayingBlurEvent = false; | |
| } | |
| if (cm.options.readOnly == "nocursor") { | |
| return; | |
| } | |
| if (!cm.state.focused) { | |
| signal(cm, "focus", cm, e); | |
| cm.state.focused = true; | |
| addClass(cm.display.wrapper, "CodeMirror-focused"); | |
| // This test prevents this from firing when a context | |
| // menu is closed (since the input reset would kill the | |
| // select-all detection hack) | |
| if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { | |
| cm.display.input.reset(); | |
| if (webkit) { | |
| setTimeout(function () { | |
| return cm.display.input.reset(true); | |
| }, 20); | |
| } // Issue #1730 | |
| } | |
| cm.display.input.receivedFocus(); | |
| } | |
| restartBlink(cm); | |
| } | |
| function onBlur(cm, e) { | |
| if (cm.state.delayingBlurEvent) { | |
| return; | |
| } | |
| if (cm.state.focused) { | |
| signal(cm, "blur", cm, e); | |
| cm.state.focused = false; | |
| rmClass(cm.display.wrapper, "CodeMirror-focused"); | |
| } | |
| clearInterval(cm.display.blinker); | |
| setTimeout(function () { | |
| if (!cm.state.focused) { | |
| cm.display.shift = false; | |
| } | |
| }, 150); | |
| } | |
| // Read the actual heights of the rendered lines, and update their | |
| // stored heights to match. | |
| function updateHeightsInViewport(cm) { | |
| var display = cm.display; | |
| var prevBottom = display.lineDiv.offsetTop; | |
| for (var i = 0; i < display.view.length; i++) { | |
| var cur = display.view[i], | |
| height = void 0; | |
| if (cur.hidden) { | |
| continue; | |
| } | |
| if (ie && ie_version < 8) { | |
| var bot = cur.node.offsetTop + cur.node.offsetHeight; | |
| height = bot - prevBottom; | |
| prevBottom = bot; | |
| } else { | |
| var box = cur.node.getBoundingClientRect(); | |
| height = box.bottom - box.top; | |
| } | |
| var diff = cur.line.height - height; | |
| if (height < 2) { | |
| height = textHeight(display); | |
| } | |
| if (diff > 0.005 || diff < -0.005) { | |
| updateLineHeight(cur.line, height); | |
| updateWidgetHeight(cur.line); | |
| if (cur.rest) { | |
| for (var j = 0; j < cur.rest.length; j++) { | |
| updateWidgetHeight(cur.rest[j]); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| // Read and store the height of line widgets associated with the | |
| // given line. | |
| function updateWidgetHeight(line) { | |
| if (line.widgets) { | |
| for (var i = 0; i < line.widgets.length; ++i) { | |
| line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight; | |
| } | |
| } | |
| } | |
| // Compute the lines that are visible in a given viewport (defaults | |
| // the the current scroll position). viewport may contain top, | |
| // height, and ensure (see op.scrollToPos) properties. | |
| function visibleLines(display, doc, viewport) { | |
| var top = | |
| viewport && viewport.top != null | |
| ? Math.max(0, viewport.top) | |
| : display.scroller.scrollTop; | |
| top = Math.floor(top - paddingTop(display)); | |
| var bottom = | |
| viewport && viewport.bottom != null | |
| ? viewport.bottom | |
| : top + display.wrapper.clientHeight; | |
| var from = lineAtHeight(doc, top), | |
| to = lineAtHeight(doc, bottom); | |
| // Ensure is a {from: {line, ch}, to: {line, ch}} object, and | |
| // forces those lines into the viewport (if possible). | |
| if (viewport && viewport.ensure) { | |
| var ensureFrom = viewport.ensure.from.line, | |
| ensureTo = viewport.ensure.to.line; | |
| if (ensureFrom < from) { | |
| from = ensureFrom; | |
| to = lineAtHeight( | |
| doc, | |
| heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight | |
| ); | |
| } else if (Math.min(ensureTo, doc.lastLine()) >= to) { | |
| from = lineAtHeight( | |
| doc, | |
| heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight | |
| ); | |
| to = ensureTo; | |
| } | |
| } | |
| return { from: from, to: Math.max(to, from + 1) }; | |
| } | |
| // Re-align line numbers and gutter marks to compensate for | |
| // horizontal scrolling. | |
| function alignHorizontally(cm) { | |
| var display = cm.display, | |
| view = display.view; | |
| if ( | |
| !display.alignWidgets && | |
| (!display.gutters.firstChild || !cm.options.fixedGutter) | |
| ) { | |
| return; | |
| } | |
| var comp = | |
| compensateForHScroll(display) - | |
| display.scroller.scrollLeft + | |
| cm.doc.scrollLeft; | |
| var gutterW = display.gutters.offsetWidth, | |
| left = comp + "px"; | |
| for (var i = 0; i < view.length; i++) { | |
| if (!view[i].hidden) { | |
| if (cm.options.fixedGutter) { | |
| if (view[i].gutter) { | |
| view[i].gutter.style.left = left; | |
| } | |
| if (view[i].gutterBackground) { | |
| view[i].gutterBackground.style.left = left; | |
| } | |
| } | |
| var align = view[i].alignable; | |
| if (align) { | |
| for (var j = 0; j < align.length; j++) { | |
| align[j].style.left = left; | |
| } | |
| } | |
| } | |
| } | |
| if (cm.options.fixedGutter) { | |
| display.gutters.style.left = comp + gutterW + "px"; | |
| } | |
| } | |
| // Used to ensure that the line number gutter is still the right | |
| // size for the current document size. Returns true when an update | |
| // is needed. | |
| function maybeUpdateLineNumberWidth(cm) { | |
| if (!cm.options.lineNumbers) { | |
| return false; | |
| } | |
| var doc = cm.doc, | |
| last = lineNumberFor(cm.options, doc.first + doc.size - 1), | |
| display = cm.display; | |
| if (last.length != display.lineNumChars) { | |
| var test = display.measure.appendChild( | |
| elt( | |
| "div", | |
| [elt("div", last)], | |
| "CodeMirror-linenumber CodeMirror-gutter-elt" | |
| ) | |
| ); | |
| var innerW = test.firstChild.offsetWidth, | |
| padding = test.offsetWidth - innerW; | |
| display.lineGutter.style.width = ""; | |
| display.lineNumInnerWidth = | |
| Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; | |
| display.lineNumWidth = display.lineNumInnerWidth + padding; | |
| display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; | |
| display.lineGutter.style.width = display.lineNumWidth + "px"; | |
| updateGutterSpace(cm); | |
| return true; | |
| } | |
| return false; | |
| } | |
| // SCROLLING THINGS INTO VIEW | |
| // If an editor sits on the top or bottom of the window, partially | |
| // scrolled out of view, this ensures that the cursor is visible. | |
| function maybeScrollWindow(cm, rect) { | |
| if (signalDOMEvent(cm, "scrollCursorIntoView")) { | |
| return; | |
| } | |
| var display = cm.display, | |
| box = display.sizer.getBoundingClientRect(), | |
| doScroll = null; | |
| if (rect.top + box.top < 0) { | |
| doScroll = true; | |
| } else if ( | |
| rect.bottom + box.top > | |
| (window.innerHeight || document.documentElement.clientHeight) | |
| ) { | |
| doScroll = false; | |
| } | |
| if (doScroll != null && !phantom) { | |
| var scrollNode = elt( | |
| "div", | |
| "\u200b", | |
| null, | |
| "position: absolute;\n top: " + | |
| (rect.top - display.viewOffset - paddingTop(cm.display)) + | |
| "px;\n height: " + | |
| (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + | |
| "px;\n left: " + | |
| rect.left + | |
| "px; width: " + | |
| Math.max(2, rect.right - rect.left) + | |
| "px;" | |
| ); | |
| cm.display.lineSpace.appendChild(scrollNode); | |
| scrollNode.scrollIntoView(doScroll); | |
| cm.display.lineSpace.removeChild(scrollNode); | |
| } | |
| } | |
| // Scroll a given position into view (immediately), verifying that | |
| // it actually became visible (as line heights are accurately | |
| // measured, the position of something may 'drift' during drawing). | |
| function scrollPosIntoView(cm, pos, end, margin) { | |
| if (margin == null) { | |
| margin = 0; | |
| } | |
| var rect; | |
| if (!cm.options.lineWrapping && pos == end) { | |
| // Set pos and end to the cursor positions around the character pos sticks to | |
| // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch | |
| // If pos == Pos(_, 0, "before"), pos and end are unchanged | |
| pos = pos.ch | |
| ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") | |
| : pos; | |
| end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; | |
| } | |
| for (var limit = 0; limit < 5; limit++) { | |
| var changed = false; | |
| var coords = cursorCoords(cm, pos); | |
| var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); | |
| rect = { | |
| left: Math.min(coords.left, endCoords.left), | |
| top: Math.min(coords.top, endCoords.top) - margin, | |
| right: Math.max(coords.left, endCoords.left), | |
| bottom: Math.max(coords.bottom, endCoords.bottom) + margin, | |
| }; | |
| var scrollPos = calculateScrollPos(cm, rect); | |
| var startTop = cm.doc.scrollTop, | |
| startLeft = cm.doc.scrollLeft; | |
| if (scrollPos.scrollTop != null) { | |
| updateScrollTop(cm, scrollPos.scrollTop); | |
| if (Math.abs(cm.doc.scrollTop - startTop) > 1) { | |
| changed = true; | |
| } | |
| } | |
| if (scrollPos.scrollLeft != null) { | |
| setScrollLeft(cm, scrollPos.scrollLeft); | |
| if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { | |
| changed = true; | |
| } | |
| } | |
| if (!changed) { | |
| break; | |
| } | |
| } | |
| return rect; | |
| } | |
| // Scroll a given set of coordinates into view (immediately). | |
| function scrollIntoView(cm, rect) { | |
| var scrollPos = calculateScrollPos(cm, rect); | |
| if (scrollPos.scrollTop != null) { | |
| updateScrollTop(cm, scrollPos.scrollTop); | |
| } | |
| if (scrollPos.scrollLeft != null) { | |
| setScrollLeft(cm, scrollPos.scrollLeft); | |
| } | |
| } | |
| // Calculate a new scroll position needed to scroll the given | |
| // rectangle into view. Returns an object with scrollTop and | |
| // scrollLeft properties. When these are undefined, the | |
| // vertical/horizontal position does not need to be adjusted. | |
| function calculateScrollPos(cm, rect) { | |
| var display = cm.display, | |
| snapMargin = textHeight(cm.display); | |
| if (rect.top < 0) { | |
| rect.top = 0; | |
| } | |
| var screentop = | |
| cm.curOp && cm.curOp.scrollTop != null | |
| ? cm.curOp.scrollTop | |
| : display.scroller.scrollTop; | |
| var screen = displayHeight(cm), | |
| result = {}; | |
| if (rect.bottom - rect.top > screen) { | |
| rect.bottom = rect.top + screen; | |
| } | |
| var docBottom = cm.doc.height + paddingVert(display); | |
| var atTop = rect.top < snapMargin, | |
| atBottom = rect.bottom > docBottom - snapMargin; | |
| if (rect.top < screentop) { | |
| result.scrollTop = atTop ? 0 : rect.top; | |
| } else if (rect.bottom > screentop + screen) { | |
| var newTop = Math.min( | |
| rect.top, | |
| (atBottom ? docBottom : rect.bottom) - screen | |
| ); | |
| if (newTop != screentop) { | |
| result.scrollTop = newTop; | |
| } | |
| } | |
| var screenleft = | |
| cm.curOp && cm.curOp.scrollLeft != null | |
| ? cm.curOp.scrollLeft | |
| : display.scroller.scrollLeft; | |
| var screenw = | |
| displayWidth(cm) - | |
| (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); | |
| var tooWide = rect.right - rect.left > screenw; | |
| if (tooWide) { | |
| rect.right = rect.left + screenw; | |
| } | |
| if (rect.left < 10) { | |
| result.scrollLeft = 0; | |
| } else if (rect.left < screenleft) { | |
| result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); | |
| } else if (rect.right > screenw + screenleft - 3) { | |
| result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; | |
| } | |
| return result; | |
| } | |
| // Store a relative adjustment to the scroll position in the current | |
| // operation (to be applied when the operation finishes). | |
| function addToScrollTop(cm, top) { | |
| if (top == null) { | |
| return; | |
| } | |
| resolveScrollToPos(cm); | |
| cm.curOp.scrollTop = | |
| (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + | |
| top; | |
| } | |
| // Make sure that at the end of the operation the current cursor is | |
| // shown. | |
| function ensureCursorVisible(cm) { | |
| resolveScrollToPos(cm); | |
| var cur = cm.getCursor(); | |
| cm.curOp.scrollToPos = { | |
| from: cur, | |
| to: cur, | |
| margin: cm.options.cursorScrollMargin, | |
| }; | |
| } | |
| function scrollToCoords(cm, x, y) { | |
| if (x != null || y != null) { | |
| resolveScrollToPos(cm); | |
| } | |
| if (x != null) { | |
| cm.curOp.scrollLeft = x; | |
| } | |
| if (y != null) { | |
| cm.curOp.scrollTop = y; | |
| } | |
| } | |
| function scrollToRange(cm, range) { | |
| resolveScrollToPos(cm); | |
| cm.curOp.scrollToPos = range; | |
| } | |
| // When an operation has its scrollToPos property set, and another | |
| // scroll action is applied before the end of the operation, this | |
| // 'simulates' scrolling that position into view in a cheap way, so | |
| // that the effect of intermediate scroll commands is not ignored. | |
| function resolveScrollToPos(cm) { | |
| var range = cm.curOp.scrollToPos; | |
| if (range) { | |
| cm.curOp.scrollToPos = null; | |
| var from = estimateCoords(cm, range.from), | |
| to = estimateCoords(cm, range.to); | |
| scrollToCoordsRange(cm, from, to, range.margin); | |
| } | |
| } | |
| function scrollToCoordsRange(cm, from, to, margin) { | |
| var sPos = calculateScrollPos(cm, { | |
| left: Math.min(from.left, to.left), | |
| top: Math.min(from.top, to.top) - margin, | |
| right: Math.max(from.right, to.right), | |
| bottom: Math.max(from.bottom, to.bottom) + margin, | |
| }); | |
| scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); | |
| } | |
| // Sync the scrollable area and scrollbars, ensure the viewport | |
| // covers the visible area. | |
| function updateScrollTop(cm, val) { | |
| if (Math.abs(cm.doc.scrollTop - val) < 2) { | |
| return; | |
| } | |
| if (!gecko) { | |
| updateDisplaySimple(cm, { top: val }); | |
| } | |
| setScrollTop(cm, val, true); | |
| if (gecko) { | |
| updateDisplaySimple(cm); | |
| } | |
| startWorker(cm, 100); | |
| } | |
| function setScrollTop(cm, val, forceScroll) { | |
| val = Math.min( | |
| cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, | |
| val | |
| ); | |
| if (cm.display.scroller.scrollTop == val && !forceScroll) { | |
| return; | |
| } | |
| cm.doc.scrollTop = val; | |
| cm.display.scrollbars.setScrollTop(val); | |
| if (cm.display.scroller.scrollTop != val) { | |
| cm.display.scroller.scrollTop = val; | |
| } | |
| } | |
| // Sync scroller and scrollbar, ensure the gutter elements are | |
| // aligned. | |
| function setScrollLeft(cm, val, isScroller, forceScroll) { | |
| val = Math.min( | |
| val, | |
| cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth | |
| ); | |
| if ( | |
| (isScroller | |
| ? val == cm.doc.scrollLeft | |
| : Math.abs(cm.doc.scrollLeft - val) < 2) && | |
| !forceScroll | |
| ) { | |
| return; | |
| } | |
| cm.doc.scrollLeft = val; | |
| alignHorizontally(cm); | |
| if (cm.display.scroller.scrollLeft != val) { | |
| cm.display.scroller.scrollLeft = val; | |
| } | |
| cm.display.scrollbars.setScrollLeft(val); | |
| } | |
| // SCROLLBARS | |
| // Prepare DOM reads needed to update the scrollbars. Done in one | |
| // shot to minimize update/measure roundtrips. | |
| function measureForScrollbars(cm) { | |
| var d = cm.display, | |
| gutterW = d.gutters.offsetWidth; | |
| var docH = Math.round(cm.doc.height + paddingVert(cm.display)); | |
| return { | |
| clientHeight: d.scroller.clientHeight, | |
| viewHeight: d.wrapper.clientHeight, | |
| scrollWidth: d.scroller.scrollWidth, | |
| clientWidth: d.scroller.clientWidth, | |
| viewWidth: d.wrapper.clientWidth, | |
| barLeft: cm.options.fixedGutter ? gutterW : 0, | |
| docHeight: docH, | |
| scrollHeight: docH + scrollGap(cm) + d.barHeight, | |
| nativeBarWidth: d.nativeBarWidth, | |
| gutterWidth: gutterW, | |
| }; | |
| } | |
| var NativeScrollbars = function (place, scroll, cm) { | |
| this.cm = cm; | |
| var vert = (this.vert = elt( | |
| "div", | |
| [elt("div", null, null, "min-width: 1px")], | |
| "CodeMirror-vscrollbar" | |
| )); | |
| var horiz = (this.horiz = elt( | |
| "div", | |
| [elt("div", null, null, "height: 100%; min-height: 1px")], | |
| "CodeMirror-hscrollbar" | |
| )); | |
| place(vert); | |
| place(horiz); | |
| on(vert, "scroll", function () { | |
| if (vert.clientHeight) { | |
| scroll(vert.scrollTop, "vertical"); | |
| } | |
| }); | |
| on(horiz, "scroll", function () { | |
| if (horiz.clientWidth) { | |
| scroll(horiz.scrollLeft, "horizontal"); | |
| } | |
| }); | |
| this.checkedZeroWidth = false; | |
| // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). | |
| if (ie && ie_version < 8) { | |
| this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; | |
| } | |
| }; | |
| NativeScrollbars.prototype.update = function (measure) { | |
| var needsH = measure.scrollWidth > measure.clientWidth + 1; | |
| var needsV = measure.scrollHeight > measure.clientHeight + 1; | |
| var sWidth = measure.nativeBarWidth; | |
| if (needsV) { | |
| this.vert.style.display = "block"; | |
| this.vert.style.bottom = needsH ? sWidth + "px" : "0"; | |
| var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); | |
| // A bug in IE8 can cause this value to be negative, so guard it. | |
| this.vert.firstChild.style.height = | |
| Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + | |
| "px"; | |
| } else { | |
| this.vert.style.display = ""; | |
| this.vert.firstChild.style.height = "0"; | |
| } | |
| if (needsH) { | |
| this.horiz.style.display = "block"; | |
| this.horiz.style.right = needsV ? sWidth + "px" : "0"; | |
| this.horiz.style.left = measure.barLeft + "px"; | |
| var totalWidth = | |
| measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); | |
| this.horiz.firstChild.style.width = | |
| Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + | |
| "px"; | |
| } else { | |
| this.horiz.style.display = ""; | |
| this.horiz.firstChild.style.width = "0"; | |
| } | |
| if (!this.checkedZeroWidth && measure.clientHeight > 0) { | |
| if (sWidth == 0) { | |
| this.zeroWidthHack(); | |
| } | |
| this.checkedZeroWidth = true; | |
| } | |
| return { right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0 }; | |
| }; | |
| NativeScrollbars.prototype.setScrollLeft = function (pos) { | |
| if (this.horiz.scrollLeft != pos) { | |
| this.horiz.scrollLeft = pos; | |
| } | |
| if (this.disableHoriz) { | |
| this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); | |
| } | |
| }; | |
| NativeScrollbars.prototype.setScrollTop = function (pos) { | |
| if (this.vert.scrollTop != pos) { | |
| this.vert.scrollTop = pos; | |
| } | |
| if (this.disableVert) { | |
| this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); | |
| } | |
| }; | |
| NativeScrollbars.prototype.zeroWidthHack = function () { | |
| var w = mac && !mac_geMountainLion ? "12px" : "18px"; | |
| this.horiz.style.height = this.vert.style.width = w; | |
| this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; | |
| this.disableHoriz = new Delayed(); | |
| this.disableVert = new Delayed(); | |
| }; | |
| NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { | |
| bar.style.pointerEvents = "auto"; | |
| function maybeDisable() { | |
| // To find out whether the scrollbar is still visible, we | |
| // check whether the element under the pixel in the bottom | |
| // right corner of the scrollbar box is the scrollbar box | |
| // itself (when the bar is still visible) or its filler child | |
| // (when the bar is hidden). If it is still visible, we keep | |
| // it enabled, if it's hidden, we disable pointer events. | |
| var box = bar.getBoundingClientRect(); | |
| var elt = | |
| type == "vert" | |
| ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) | |
| : document.elementFromPoint( | |
| (box.right + box.left) / 2, | |
| box.bottom - 1 | |
| ); | |
| if (elt != bar) { | |
| bar.style.pointerEvents = "none"; | |
| } else { | |
| delay.set(1000, maybeDisable); | |
| } | |
| } | |
| delay.set(1000, maybeDisable); | |
| }; | |
| NativeScrollbars.prototype.clear = function () { | |
| var parent = this.horiz.parentNode; | |
| parent.removeChild(this.horiz); | |
| parent.removeChild(this.vert); | |
| }; | |
| var NullScrollbars = function () {}; | |
| NullScrollbars.prototype.update = function () { | |
| return { bottom: 0, right: 0 }; | |
| }; | |
| NullScrollbars.prototype.setScrollLeft = function () {}; | |
| NullScrollbars.prototype.setScrollTop = function () {}; | |
| NullScrollbars.prototype.clear = function () {}; | |
| function updateScrollbars(cm, measure) { | |
| if (!measure) { | |
| measure = measureForScrollbars(cm); | |
| } | |
| var startWidth = cm.display.barWidth, | |
| startHeight = cm.display.barHeight; | |
| updateScrollbarsInner(cm, measure); | |
| for ( | |
| var i = 0; | |
| (i < 4 && startWidth != cm.display.barWidth) || | |
| startHeight != cm.display.barHeight; | |
| i++ | |
| ) { | |
| if (startWidth != cm.display.barWidth && cm.options.lineWrapping) { | |
| updateHeightsInViewport(cm); | |
| } | |
| updateScrollbarsInner(cm, measureForScrollbars(cm)); | |
| startWidth = cm.display.barWidth; | |
| startHeight = cm.display.barHeight; | |
| } | |
| } | |
| // Re-synchronize the fake scrollbars with the actual size of the | |
| // content. | |
| function updateScrollbarsInner(cm, measure) { | |
| var d = cm.display; | |
| var sizes = d.scrollbars.update(measure); | |
| d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; | |
| d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; | |
| d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; | |
| if (sizes.right && sizes.bottom) { | |
| d.scrollbarFiller.style.display = "block"; | |
| d.scrollbarFiller.style.height = sizes.bottom + "px"; | |
| d.scrollbarFiller.style.width = sizes.right + "px"; | |
| } else { | |
| d.scrollbarFiller.style.display = ""; | |
| } | |
| if ( | |
| sizes.bottom && | |
| cm.options.coverGutterNextToScrollbar && | |
| cm.options.fixedGutter | |
| ) { | |
| d.gutterFiller.style.display = "block"; | |
| d.gutterFiller.style.height = sizes.bottom + "px"; | |
| d.gutterFiller.style.width = measure.gutterWidth + "px"; | |
| } else { | |
| d.gutterFiller.style.display = ""; | |
| } | |
| } | |
| var scrollbarModel = { native: NativeScrollbars, null: NullScrollbars }; | |
| function initScrollbars(cm) { | |
| if (cm.display.scrollbars) { | |
| cm.display.scrollbars.clear(); | |
| if (cm.display.scrollbars.addClass) { | |
| rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); | |
| } | |
| } | |
| cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle]( | |
| function (node) { | |
| cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); | |
| // Prevent clicks in the scrollbars from killing focus | |
| on(node, "mousedown", function () { | |
| if (cm.state.focused) { | |
| setTimeout(function () { | |
| return cm.display.input.focus(); | |
| }, 0); | |
| } | |
| }); | |
| node.setAttribute("cm-not-content", "true"); | |
| }, | |
| function (pos, axis) { | |
| if (axis == "horizontal") { | |
| setScrollLeft(cm, pos); | |
| } else { | |
| updateScrollTop(cm, pos); | |
| } | |
| }, | |
| cm | |
| ); | |
| if (cm.display.scrollbars.addClass) { | |
| addClass(cm.display.wrapper, cm.display.scrollbars.addClass); | |
| } | |
| } | |
| // Operations are used to wrap a series of changes to the editor | |
| // state in such a way that each change won't have to update the | |
| // cursor and display (which would be awkward, slow, and | |
| // error-prone). Instead, display updates are batched and then all | |
| // combined and executed at once. | |
| var nextOpId = 0; | |
| // Start a new operation. | |
| function startOperation(cm) { | |
| cm.curOp = { | |
| cm: cm, | |
| viewChanged: false, // Flag that indicates that lines might need to be redrawn | |
| startHeight: cm.doc.height, // Used to detect need to update scrollbar | |
| forceUpdate: false, // Used to force a redraw | |
| updateInput: null, // Whether to reset the input textarea | |
| typing: false, // Whether this reset should be careful to leave existing text (for compositing) | |
| changeObjs: null, // Accumulated changes, for firing change events | |
| cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on | |
| cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already | |
| selectionChanged: false, // Whether the selection needs to be redrawn | |
| updateMaxLine: false, // Set when the widest line needs to be determined anew | |
| scrollLeft: null, | |
| scrollTop: null, // Intermediate scroll position, not pushed to DOM yet | |
| scrollToPos: null, // Used to scroll to a specific position | |
| focus: false, | |
| id: ++nextOpId, // Unique ID | |
| }; | |
| pushOperation(cm.curOp); | |
| } | |
| // Finish an operation, updating the display and signalling delayed events | |
| function endOperation(cm) { | |
| var op = cm.curOp; | |
| finishOperation(op, function (group) { | |
| for (var i = 0; i < group.ops.length; i++) { | |
| group.ops[i].cm.curOp = null; | |
| } | |
| endOperations(group); | |
| }); | |
| } | |
| // The DOM updates done when an operation finishes are batched so | |
| // that the minimum number of relayouts are required. | |
| function endOperations(group) { | |
| var ops = group.ops; | |
| for ( | |
| var i = 0; | |
| i < ops.length; | |
| i++ // Read DOM | |
| ) { | |
| endOperation_R1(ops[i]); | |
| } | |
| for ( | |
| var i$1 = 0; | |
| i$1 < ops.length; | |
| i$1++ // Write DOM (maybe) | |
| ) { | |
| endOperation_W1(ops[i$1]); | |
| } | |
| for ( | |
| var i$2 = 0; | |
| i$2 < ops.length; | |
| i$2++ // Read DOM | |
| ) { | |
| endOperation_R2(ops[i$2]); | |
| } | |
| for ( | |
| var i$3 = 0; | |
| i$3 < ops.length; | |
| i$3++ // Write DOM (maybe) | |
| ) { | |
| endOperation_W2(ops[i$3]); | |
| } | |
| for ( | |
| var i$4 = 0; | |
| i$4 < ops.length; | |
| i$4++ // Read DOM | |
| ) { | |
| endOperation_finish(ops[i$4]); | |
| } | |
| } | |
| function endOperation_R1(op) { | |
| var cm = op.cm, | |
| display = cm.display; | |
| maybeClipScrollbars(cm); | |
| if (op.updateMaxLine) { | |
| findMaxLine(cm); | |
| } | |
| op.mustUpdate = | |
| op.viewChanged || | |
| op.forceUpdate || | |
| op.scrollTop != null || | |
| (op.scrollToPos && | |
| (op.scrollToPos.from.line < display.viewFrom || | |
| op.scrollToPos.to.line >= display.viewTo)) || | |
| (display.maxLineChanged && cm.options.lineWrapping); | |
| op.update = | |
| op.mustUpdate && | |
| new DisplayUpdate( | |
| cm, | |
| op.mustUpdate && { top: op.scrollTop, ensure: op.scrollToPos }, | |
| op.forceUpdate | |
| ); | |
| } | |
| function endOperation_W1(op) { | |
| op.updatedDisplay = | |
| op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); | |
| } | |
| function endOperation_R2(op) { | |
| var cm = op.cm, | |
| display = cm.display; | |
| if (op.updatedDisplay) { | |
| updateHeightsInViewport(cm); | |
| } | |
| op.barMeasure = measureForScrollbars(cm); | |
| // If the max line changed since it was last measured, measure it, | |
| // and ensure the document's width matches it. | |
| // updateDisplay_W2 will use these properties to do the actual resizing | |
| if (display.maxLineChanged && !cm.options.lineWrapping) { | |
| op.adjustWidthTo = | |
| measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; | |
| cm.display.sizerWidth = op.adjustWidthTo; | |
| op.barMeasure.scrollWidth = Math.max( | |
| display.scroller.clientWidth, | |
| display.sizer.offsetLeft + | |
| op.adjustWidthTo + | |
| scrollGap(cm) + | |
| cm.display.barWidth | |
| ); | |
| op.maxScrollLeft = Math.max( | |
| 0, | |
| display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm) | |
| ); | |
| } | |
| if (op.updatedDisplay || op.selectionChanged) { | |
| op.preparedSelection = display.input.prepareSelection(op.focus); | |
| } | |
| } | |
| function endOperation_W2(op) { | |
| var cm = op.cm; | |
| if (op.adjustWidthTo != null) { | |
| cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; | |
| if (op.maxScrollLeft < cm.doc.scrollLeft) { | |
| setScrollLeft( | |
| cm, | |
| Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), | |
| true | |
| ); | |
| } | |
| cm.display.maxLineChanged = false; | |
| } | |
| var takeFocus = | |
| op.focus && | |
| op.focus == activeElt() && | |
| (!document.hasFocus || document.hasFocus()); | |
| if (op.preparedSelection) { | |
| cm.display.input.showSelection(op.preparedSelection, takeFocus); | |
| } | |
| if (op.updatedDisplay || op.startHeight != cm.doc.height) { | |
| updateScrollbars(cm, op.barMeasure); | |
| } | |
| if (op.updatedDisplay) { | |
| setDocumentHeight(cm, op.barMeasure); | |
| } | |
| if (op.selectionChanged) { | |
| restartBlink(cm); | |
| } | |
| if (cm.state.focused && op.updateInput) { | |
| cm.display.input.reset(op.typing); | |
| } | |
| if (takeFocus) { | |
| ensureFocus(op.cm); | |
| } | |
| } | |
| function endOperation_finish(op) { | |
| var cm = op.cm, | |
| display = cm.display, | |
| doc = cm.doc; | |
| if (op.updatedDisplay) { | |
| postUpdateDisplay(cm, op.update); | |
| } | |
| // Abort mouse wheel delta measurement, when scrolling explicitly | |
| if ( | |
| display.wheelStartX != null && | |
| (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos) | |
| ) { | |
| display.wheelStartX = display.wheelStartY = null; | |
| } | |
| // Propagate the scroll position to the actual DOM scroller | |
| if (op.scrollTop != null) { | |
| setScrollTop(cm, op.scrollTop, op.forceScroll); | |
| } | |
| if (op.scrollLeft != null) { | |
| setScrollLeft(cm, op.scrollLeft, true, true); | |
| } | |
| // If we need to scroll a specific position into view, do so. | |
| if (op.scrollToPos) { | |
| var rect = scrollPosIntoView( | |
| cm, | |
| clipPos(doc, op.scrollToPos.from), | |
| clipPos(doc, op.scrollToPos.to), | |
| op.scrollToPos.margin | |
| ); | |
| maybeScrollWindow(cm, rect); | |
| } | |
| // Fire events for markers that are hidden/unidden by editing or | |
| // undoing | |
| var hidden = op.maybeHiddenMarkers, | |
| unhidden = op.maybeUnhiddenMarkers; | |
| if (hidden) { | |
| for (var i = 0; i < hidden.length; ++i) { | |
| if (!hidden[i].lines.length) { | |
| signal(hidden[i], "hide"); | |
| } | |
| } | |
| } | |
| if (unhidden) { | |
| for (var i$1 = 0; i$1 < unhidden.length; ++i$1) { | |
| if (unhidden[i$1].lines.length) { | |
| signal(unhidden[i$1], "unhide"); | |
| } | |
| } | |
| } | |
| if (display.wrapper.offsetHeight) { | |
| doc.scrollTop = cm.display.scroller.scrollTop; | |
| } | |
| // Fire change events, and delayed event handlers | |
| if (op.changeObjs) { | |
| signal(cm, "changes", cm, op.changeObjs); | |
| } | |
| if (op.update) { | |
| op.update.finish(); | |
| } | |
| } | |
| // Run the given function in an operation | |
| function runInOp(cm, f) { | |
| if (cm.curOp) { | |
| return f(); | |
| } | |
| startOperation(cm); | |
| try { | |
| return f(); | |
| } finally { | |
| endOperation(cm); | |
| } | |
| } | |
| // Wraps a function in an operation. Returns the wrapped function. | |
| function operation(cm, f) { | |
| return function () { | |
| if (cm.curOp) { | |
| return f.apply(cm, arguments); | |
| } | |
| startOperation(cm); | |
| try { | |
| return f.apply(cm, arguments); | |
| } finally { | |
| endOperation(cm); | |
| } | |
| }; | |
| } | |
| // Used to add methods to editor and doc instances, wrapping them in | |
| // operations. | |
| function methodOp(f) { | |
| return function () { | |
| if (this.curOp) { | |
| return f.apply(this, arguments); | |
| } | |
| startOperation(this); | |
| try { | |
| return f.apply(this, arguments); | |
| } finally { | |
| endOperation(this); | |
| } | |
| }; | |
| } | |
| function docMethodOp(f) { | |
| return function () { | |
| var cm = this.cm; | |
| if (!cm || cm.curOp) { | |
| return f.apply(this, arguments); | |
| } | |
| startOperation(cm); | |
| try { | |
| return f.apply(this, arguments); | |
| } finally { | |
| endOperation(cm); | |
| } | |
| }; | |
| } | |
| // Updates the display.view data structure for a given change to the | |
| // document. From and to are in pre-change coordinates. Lendiff is | |
| // the amount of lines added or subtracted by the change. This is | |
| // used for changes that span multiple lines, or change the way | |
| // lines are divided into visual lines. regLineChange (below) | |
| // registers single-line changes. | |
| function regChange(cm, from, to, lendiff) { | |
| if (from == null) { | |
| from = cm.doc.first; | |
| } | |
| if (to == null) { | |
| to = cm.doc.first + cm.doc.size; | |
| } | |
| if (!lendiff) { | |
| lendiff = 0; | |
| } | |
| var display = cm.display; | |
| if ( | |
| lendiff && | |
| to < display.viewTo && | |
| (display.updateLineNumbers == null || display.updateLineNumbers > from) | |
| ) { | |
| display.updateLineNumbers = from; | |
| } | |
| cm.curOp.viewChanged = true; | |
| if (from >= display.viewTo) { | |
| // Change after | |
| if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) { | |
| resetView(cm); | |
| } | |
| } else if (to <= display.viewFrom) { | |
| // Change before | |
| if ( | |
| sawCollapsedSpans && | |
| visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom | |
| ) { | |
| resetView(cm); | |
| } else { | |
| display.viewFrom += lendiff; | |
| display.viewTo += lendiff; | |
| } | |
| } else if (from <= display.viewFrom && to >= display.viewTo) { | |
| // Full overlap | |
| resetView(cm); | |
| } else if (from <= display.viewFrom) { | |
| // Top overlap | |
| var cut = viewCuttingPoint(cm, to, to + lendiff, 1); | |
| if (cut) { | |
| display.view = display.view.slice(cut.index); | |
| display.viewFrom = cut.lineN; | |
| display.viewTo += lendiff; | |
| } else { | |
| resetView(cm); | |
| } | |
| } else if (to >= display.viewTo) { | |
| // Bottom overlap | |
| var cut$1 = viewCuttingPoint(cm, from, from, -1); | |
| if (cut$1) { | |
| display.view = display.view.slice(0, cut$1.index); | |
| display.viewTo = cut$1.lineN; | |
| } else { | |
| resetView(cm); | |
| } | |
| } else { | |
| // Gap in the middle | |
| var cutTop = viewCuttingPoint(cm, from, from, -1); | |
| var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); | |
| if (cutTop && cutBot) { | |
| display.view = display.view | |
| .slice(0, cutTop.index) | |
| .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) | |
| .concat(display.view.slice(cutBot.index)); | |
| display.viewTo += lendiff; | |
| } else { | |
| resetView(cm); | |
| } | |
| } | |
| var ext = display.externalMeasured; | |
| if (ext) { | |
| if (to < ext.lineN) { | |
| ext.lineN += lendiff; | |
| } else if (from < ext.lineN + ext.size) { | |
| display.externalMeasured = null; | |
| } | |
| } | |
| } | |
| // Register a change to a single line. Type must be one of "text", | |
| // "gutter", "class", "widget" | |
| function regLineChange(cm, line, type) { | |
| cm.curOp.viewChanged = true; | |
| var display = cm.display, | |
| ext = cm.display.externalMeasured; | |
| if (ext && line >= ext.lineN && line < ext.lineN + ext.size) { | |
| display.externalMeasured = null; | |
| } | |
| if (line < display.viewFrom || line >= display.viewTo) { | |
| return; | |
| } | |
| var lineView = display.view[findViewIndex(cm, line)]; | |
| if (lineView.node == null) { | |
| return; | |
| } | |
| var arr = lineView.changes || (lineView.changes = []); | |
| if (indexOf(arr, type) == -1) { | |
| arr.push(type); | |
| } | |
| } | |
| // Clear the view. | |
| function resetView(cm) { | |
| cm.display.viewFrom = cm.display.viewTo = cm.doc.first; | |
| cm.display.view = []; | |
| cm.display.viewOffset = 0; | |
| } | |
| function viewCuttingPoint(cm, oldN, newN, dir) { | |
| var index = findViewIndex(cm, oldN), | |
| diff, | |
| view = cm.display.view; | |
| if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) { | |
| return { index: index, lineN: newN }; | |
| } | |
| var n = cm.display.viewFrom; | |
| for (var i = 0; i < index; i++) { | |
| n += view[i].size; | |
| } | |
| if (n != oldN) { | |
| if (dir > 0) { | |
| if (index == view.length - 1) { | |
| return null; | |
| } | |
| diff = n + view[index].size - oldN; | |
| index++; | |
| } else { | |
| diff = n - oldN; | |
| } | |
| oldN += diff; | |
| newN += diff; | |
| } | |
| while (visualLineNo(cm.doc, newN) != newN) { | |
| if (index == (dir < 0 ? 0 : view.length - 1)) { | |
| return null; | |
| } | |
| newN += dir * view[index - (dir < 0 ? 1 : 0)].size; | |
| index += dir; | |
| } | |
| return { index: index, lineN: newN }; | |
| } | |
| // Force the view to cover a given range, adding empty view element | |
| // or clipping off existing ones as needed. | |
| function adjustView(cm, from, to) { | |
| var display = cm.display, | |
| view = display.view; | |
| if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { | |
| display.view = buildViewArray(cm, from, to); | |
| display.viewFrom = from; | |
| } else { | |
| if (display.viewFrom > from) { | |
| display.view = buildViewArray(cm, from, display.viewFrom).concat( | |
| display.view | |
| ); | |
| } else if (display.viewFrom < from) { | |
| display.view = display.view.slice(findViewIndex(cm, from)); | |
| } | |
| display.viewFrom = from; | |
| if (display.viewTo < to) { | |
| display.view = display.view.concat( | |
| buildViewArray(cm, display.viewTo, to) | |
| ); | |
| } else if (display.viewTo > to) { | |
| display.view = display.view.slice(0, findViewIndex(cm, to)); | |
| } | |
| } | |
| display.viewTo = to; | |
| } | |
| // Count the number of lines in the view whose DOM representation is | |
| // out of date (or nonexistent). | |
| function countDirtyView(cm) { | |
| var view = cm.display.view, | |
| dirty = 0; | |
| for (var i = 0; i < view.length; i++) { | |
| var lineView = view[i]; | |
| if (!lineView.hidden && (!lineView.node || lineView.changes)) { | |
| ++dirty; | |
| } | |
| } | |
| return dirty; | |
| } | |
| // HIGHLIGHT WORKER | |
| function startWorker(cm, time) { | |
| if (cm.doc.highlightFrontier < cm.display.viewTo) { | |
| cm.state.highlight.set(time, bind(highlightWorker, cm)); | |
| } | |
| } | |
| function highlightWorker(cm) { | |
| var doc = cm.doc; | |
| if (doc.highlightFrontier >= cm.display.viewTo) { | |
| return; | |
| } | |
| var end = +new Date() + cm.options.workTime; | |
| var context = getContextBefore(cm, doc.highlightFrontier); | |
| var changedLines = []; | |
| doc.iter( | |
| context.line, | |
| Math.min(doc.first + doc.size, cm.display.viewTo + 500), | |
| function (line) { | |
| if (context.line >= cm.display.viewFrom) { | |
| // Visible | |
| var oldStyles = line.styles; | |
| var resetState = | |
| line.text.length > cm.options.maxHighlightLength | |
| ? copyState(doc.mode, context.state) | |
| : null; | |
| var highlighted = highlightLine(cm, line, context, true); | |
| if (resetState) { | |
| context.state = resetState; | |
| } | |
| line.styles = highlighted.styles; | |
| var oldCls = line.styleClasses, | |
| newCls = highlighted.classes; | |
| if (newCls) { | |
| line.styleClasses = newCls; | |
| } else if (oldCls) { | |
| line.styleClasses = null; | |
| } | |
| var ischange = | |
| !oldStyles || | |
| oldStyles.length != line.styles.length || | |
| (oldCls != newCls && | |
| (!oldCls || | |
| !newCls || | |
| oldCls.bgClass != newCls.bgClass || | |
| oldCls.textClass != newCls.textClass)); | |
| for (var i = 0; !ischange && i < oldStyles.length; ++i) { | |
| ischange = oldStyles[i] != line.styles[i]; | |
| } | |
| if (ischange) { | |
| changedLines.push(context.line); | |
| } | |
| line.stateAfter = context.save(); | |
| context.nextLine(); | |
| } else { | |
| if (line.text.length <= cm.options.maxHighlightLength) { | |
| processLine(cm, line.text, context); | |
| } | |
| line.stateAfter = context.line % 5 == 0 ? context.save() : null; | |
| context.nextLine(); | |
| } | |
| if (+new Date() > end) { | |
| startWorker(cm, cm.options.workDelay); | |
| return true; | |
| } | |
| } | |
| ); | |
| doc.highlightFrontier = context.line; | |
| doc.modeFrontier = Math.max(doc.modeFrontier, context.line); | |
| if (changedLines.length) { | |
| runInOp(cm, function () { | |
| for (var i = 0; i < changedLines.length; i++) { | |
| regLineChange(cm, changedLines[i], "text"); | |
| } | |
| }); | |
| } | |
| } | |
| // DISPLAY DRAWING | |
| var DisplayUpdate = function (cm, viewport, force) { | |
| var display = cm.display; | |
| this.viewport = viewport; | |
| // Store some values that we'll need later (but don't want to force a relayout for) | |
| this.visible = visibleLines(display, cm.doc, viewport); | |
| this.editorIsHidden = !display.wrapper.offsetWidth; | |
| this.wrapperHeight = display.wrapper.clientHeight; | |
| this.wrapperWidth = display.wrapper.clientWidth; | |
| this.oldDisplayWidth = displayWidth(cm); | |
| this.force = force; | |
| this.dims = getDimensions(cm); | |
| this.events = []; | |
| }; | |
| DisplayUpdate.prototype.signal = function (emitter, type) { | |
| if (hasHandler(emitter, type)) { | |
| this.events.push(arguments); | |
| } | |
| }; | |
| DisplayUpdate.prototype.finish = function () { | |
| var this$1 = this; | |
| for (var i = 0; i < this.events.length; i++) { | |
| signal.apply(null, this$1.events[i]); | |
| } | |
| }; | |
| function maybeClipScrollbars(cm) { | |
| var display = cm.display; | |
| if (!display.scrollbarsClipped && display.scroller.offsetWidth) { | |
| display.nativeBarWidth = | |
| display.scroller.offsetWidth - display.scroller.clientWidth; | |
| display.heightForcer.style.height = scrollGap(cm) + "px"; | |
| display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; | |
| display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; | |
| display.scrollbarsClipped = true; | |
| } | |
| } | |
| function selectionSnapshot(cm) { | |
| if (cm.hasFocus()) { | |
| return null; | |
| } | |
| var active = activeElt(); | |
| if (!active || !contains(cm.display.lineDiv, active)) { | |
| return null; | |
| } | |
| var result = { activeElt: active }; | |
| if (window.getSelection) { | |
| var sel = window.getSelection(); | |
| if ( | |
| sel.anchorNode && | |
| sel.extend && | |
| contains(cm.display.lineDiv, sel.anchorNode) | |
| ) { | |
| result.anchorNode = sel.anchorNode; | |
| result.anchorOffset = sel.anchorOffset; | |
| result.focusNode = sel.focusNode; | |
| result.focusOffset = sel.focusOffset; | |
| } | |
| } | |
| return result; | |
| } | |
| function restoreSelection(snapshot) { | |
| if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { | |
| return; | |
| } | |
| snapshot.activeElt.focus(); | |
| if ( | |
| snapshot.anchorNode && | |
| contains(document.body, snapshot.anchorNode) && | |
| contains(document.body, snapshot.focusNode) | |
| ) { | |
| var sel = window.getSelection(), | |
| range = document.createRange(); | |
| range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); | |
| range.collapse(false); | |
| sel.removeAllRanges(); | |
| sel.addRange(range); | |
| sel.extend(snapshot.focusNode, snapshot.focusOffset); | |
| } | |
| } | |
| // Does the actual updating of the line display. Bails out | |
| // (returning false) when there is nothing to be done and forced is | |
| // false. | |
| function updateDisplayIfNeeded(cm, update) { | |
| var display = cm.display, | |
| doc = cm.doc; | |
| if (update.editorIsHidden) { | |
| resetView(cm); | |
| return false; | |
| } | |
| // Bail out if the visible area is already rendered and nothing changed. | |
| if ( | |
| !update.force && | |
| update.visible.from >= display.viewFrom && | |
| update.visible.to <= display.viewTo && | |
| (display.updateLineNumbers == null || | |
| display.updateLineNumbers >= display.viewTo) && | |
| display.renderedView == display.view && | |
| countDirtyView(cm) == 0 | |
| ) { | |
| return false; | |
| } | |
| if (maybeUpdateLineNumberWidth(cm)) { | |
| resetView(cm); | |
| update.dims = getDimensions(cm); | |
| } | |
| // Compute a suitable new viewport (from & to) | |
| var end = doc.first + doc.size; | |
| var from = Math.max( | |
| update.visible.from - cm.options.viewportMargin, | |
| doc.first | |
| ); | |
| var to = Math.min(end, update.visible.to + cm.options.viewportMargin); | |
| if (display.viewFrom < from && from - display.viewFrom < 20) { | |
| from = Math.max(doc.first, display.viewFrom); | |
| } | |
| if (display.viewTo > to && display.viewTo - to < 20) { | |
| to = Math.min(end, display.viewTo); | |
| } | |
| if (sawCollapsedSpans) { | |
| from = visualLineNo(cm.doc, from); | |
| to = visualLineEndNo(cm.doc, to); | |
| } | |
| var different = | |
| from != display.viewFrom || | |
| to != display.viewTo || | |
| display.lastWrapHeight != update.wrapperHeight || | |
| display.lastWrapWidth != update.wrapperWidth; | |
| adjustView(cm, from, to); | |
| display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); | |
| // Position the mover div to align with the current scroll position | |
| cm.display.mover.style.top = display.viewOffset + "px"; | |
| var toUpdate = countDirtyView(cm); | |
| if ( | |
| !different && | |
| toUpdate == 0 && | |
| !update.force && | |
| display.renderedView == display.view && | |
| (display.updateLineNumbers == null || | |
| display.updateLineNumbers >= display.viewTo) | |
| ) { | |
| return false; | |
| } | |
| // For big changes, we hide the enclosing element during the | |
| // update, since that speeds up the operations on most browsers. | |
| var selSnapshot = selectionSnapshot(cm); | |
| if (toUpdate > 4) { | |
| display.lineDiv.style.display = "none"; | |
| } | |
| patchDisplay(cm, display.updateLineNumbers, update.dims); | |
| if (toUpdate > 4) { | |
| display.lineDiv.style.display = ""; | |
| } | |
| display.renderedView = display.view; | |
| // There might have been a widget with a focused element that got | |
| // hidden or updated, if so re-focus it. | |
| restoreSelection(selSnapshot); | |
| // Prevent selection and cursors from interfering with the scroll | |
| // width and height. | |
| removeChildren(display.cursorDiv); | |
| removeChildren(display.selectionDiv); | |
| display.gutters.style.height = display.sizer.style.minHeight = 0; | |
| if (different) { | |
| display.lastWrapHeight = update.wrapperHeight; | |
| display.lastWrapWidth = update.wrapperWidth; | |
| startWorker(cm, 400); | |
| } | |
| display.updateLineNumbers = null; | |
| return true; | |
| } | |
| function postUpdateDisplay(cm, update) { | |
| var viewport = update.viewport; | |
| for (var first = true; ; first = false) { | |
| if ( | |
| !first || | |
| !cm.options.lineWrapping || | |
| update.oldDisplayWidth == displayWidth(cm) | |
| ) { | |
| // Clip forced viewport to actual scrollable area. | |
| if (viewport && viewport.top != null) { | |
| viewport = { | |
| top: Math.min( | |
| cm.doc.height + paddingVert(cm.display) - displayHeight(cm), | |
| viewport.top | |
| ), | |
| }; | |
| } | |
| // Updated line heights might result in the drawn area not | |
| // actually covering the viewport. Keep looping until it does. | |
| update.visible = visibleLines(cm.display, cm.doc, viewport); | |
| if ( | |
| update.visible.from >= cm.display.viewFrom && | |
| update.visible.to <= cm.display.viewTo | |
| ) { | |
| break; | |
| } | |
| } | |
| if (!updateDisplayIfNeeded(cm, update)) { | |
| break; | |
| } | |
| updateHeightsInViewport(cm); | |
| var barMeasure = measureForScrollbars(cm); | |
| updateSelection(cm); | |
| updateScrollbars(cm, barMeasure); | |
| setDocumentHeight(cm, barMeasure); | |
| update.force = false; | |
| } | |
| update.signal(cm, "update", cm); | |
| if ( | |
| cm.display.viewFrom != cm.display.reportedViewFrom || | |
| cm.display.viewTo != cm.display.reportedViewTo | |
| ) { | |
| update.signal( | |
| cm, | |
| "viewportChange", | |
| cm, | |
| cm.display.viewFrom, | |
| cm.display.viewTo | |
| ); | |
| cm.display.reportedViewFrom = cm.display.viewFrom; | |
| cm.display.reportedViewTo = cm.display.viewTo; | |
| } | |
| } | |
| function updateDisplaySimple(cm, viewport) { | |
| var update = new DisplayUpdate(cm, viewport); | |
| if (updateDisplayIfNeeded(cm, update)) { | |
| updateHeightsInViewport(cm); | |
| postUpdateDisplay(cm, update); | |
| var barMeasure = measureForScrollbars(cm); | |
| updateSelection(cm); | |
| updateScrollbars(cm, barMeasure); | |
| setDocumentHeight(cm, barMeasure); | |
| update.finish(); | |
| } | |
| } | |
| // Sync the actual display DOM structure with display.view, removing | |
| // nodes for lines that are no longer in view, and creating the ones | |
| // that are not there yet, and updating the ones that are out of | |
| // date. | |
| function patchDisplay(cm, updateNumbersFrom, dims) { | |
| var display = cm.display, | |
| lineNumbers = cm.options.lineNumbers; | |
| var container = display.lineDiv, | |
| cur = container.firstChild; | |
| function rm(node) { | |
| var next = node.nextSibling; | |
| // Works around a throw-scroll bug in OS X Webkit | |
| if (webkit && mac && cm.display.currentWheelTarget == node) { | |
| node.style.display = "none"; | |
| } else { | |
| node.parentNode.removeChild(node); | |
| } | |
| return next; | |
| } | |
| var view = display.view, | |
| lineN = display.viewFrom; | |
| // Loop over the elements in the view, syncing cur (the DOM nodes | |
| // in display.lineDiv) with the view as we go. | |
| for (var i = 0; i < view.length; i++) { | |
| var lineView = view[i]; | |
| if (lineView.hidden) { | |
| } else if (!lineView.node || lineView.node.parentNode != container) { | |
| // Not drawn yet | |
| var node = buildLineElement(cm, lineView, lineN, dims); | |
| container.insertBefore(node, cur); | |
| } else { | |
| // Already drawn | |
| while (cur != lineView.node) { | |
| cur = rm(cur); | |
| } | |
| var updateNumber = | |
| lineNumbers && | |
| updateNumbersFrom != null && | |
| updateNumbersFrom <= lineN && | |
| lineView.lineNumber; | |
| if (lineView.changes) { | |
| if (indexOf(lineView.changes, "gutter") > -1) { | |
| updateNumber = false; | |
| } | |
| updateLineForChanges(cm, lineView, lineN, dims); | |
| } | |
| if (updateNumber) { | |
| removeChildren(lineView.lineNumber); | |
| lineView.lineNumber.appendChild( | |
| document.createTextNode(lineNumberFor(cm.options, lineN)) | |
| ); | |
| } | |
| cur = lineView.node.nextSibling; | |
| } | |
| lineN += lineView.size; | |
| } | |
| while (cur) { | |
| cur = rm(cur); | |
| } | |
| } | |
| function updateGutterSpace(cm) { | |
| var width = cm.display.gutters.offsetWidth; | |
| cm.display.sizer.style.marginLeft = width + "px"; | |
| } | |
| function setDocumentHeight(cm, measure) { | |
| cm.display.sizer.style.minHeight = measure.docHeight + "px"; | |
| cm.display.heightForcer.style.top = measure.docHeight + "px"; | |
| cm.display.gutters.style.height = | |
| measure.docHeight + cm.display.barHeight + scrollGap(cm) + "px"; | |
| } | |
| // Rebuild the gutter elements, ensure the margin to the left of the | |
| // code matches their width. | |
| function updateGutters(cm) { | |
| var gutters = cm.display.gutters, | |
| specs = cm.options.gutters; | |
| removeChildren(gutters); | |
| var i = 0; | |
| for (; i < specs.length; ++i) { | |
| var gutterClass = specs[i]; | |
| var gElt = gutters.appendChild( | |
| elt("div", null, "CodeMirror-gutter " + gutterClass) | |
| ); | |
| if (gutterClass == "CodeMirror-linenumbers") { | |
| cm.display.lineGutter = gElt; | |
| gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; | |
| } | |
| } | |
| gutters.style.display = i ? "" : "none"; | |
| updateGutterSpace(cm); | |
| } | |
| // Make sure the gutters options contains the element | |
| // "CodeMirror-linenumbers" when the lineNumbers option is true. | |
| function setGuttersForLineNumbers(options) { | |
| var found = indexOf(options.gutters, "CodeMirror-linenumbers"); | |
| if (found == -1 && options.lineNumbers) { | |
| options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); | |
| } else if (found > -1 && !options.lineNumbers) { | |
| options.gutters = options.gutters.slice(0); | |
| options.gutters.splice(found, 1); | |
| } | |
| } | |
| var wheelSamples = 0; | |
| var wheelPixelsPerUnit = null; | |
| // Fill in a browser-detected starting value on browsers where we | |
| // know one. These don't have to be accurate -- the result of them | |
| // being wrong would just be a slight flicker on the first wheel | |
| // scroll (if it is large enough). | |
| if (ie) { | |
| wheelPixelsPerUnit = -0.53; | |
| } else if (gecko) { | |
| wheelPixelsPerUnit = 15; | |
| } else if (chrome) { | |
| wheelPixelsPerUnit = -0.7; | |
| } else if (safari) { | |
| wheelPixelsPerUnit = -1 / 3; | |
| } | |
| function wheelEventDelta(e) { | |
| var dx = e.wheelDeltaX, | |
| dy = e.wheelDeltaY; | |
| if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { | |
| dx = e.detail; | |
| } | |
| if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { | |
| dy = e.detail; | |
| } else if (dy == null) { | |
| dy = e.wheelDelta; | |
| } | |
| return { x: dx, y: dy }; | |
| } | |
| function wheelEventPixels(e) { | |
| var delta = wheelEventDelta(e); | |
| delta.x *= wheelPixelsPerUnit; | |
| delta.y *= wheelPixelsPerUnit; | |
| return delta; | |
| } | |
| function onScrollWheel(cm, e) { | |
| var delta = wheelEventDelta(e), | |
| dx = delta.x, | |
| dy = delta.y; | |
| var display = cm.display, | |
| scroll = display.scroller; | |
| // Quit if there's nothing to scroll here | |
| var canScrollX = scroll.scrollWidth > scroll.clientWidth; | |
| var canScrollY = scroll.scrollHeight > scroll.clientHeight; | |
| if (!((dx && canScrollX) || (dy && canScrollY))) { | |
| return; | |
| } | |
| // Webkit browsers on OS X abort momentum scrolls when the target | |
| // of the scroll event is removed from the scrollable element. | |
| // This hack (see related code in patchDisplay) makes sure the | |
| // element is kept around. | |
| if (dy && mac && webkit) { | |
| outer: for ( | |
| var cur = e.target, view = display.view; | |
| cur != scroll; | |
| cur = cur.parentNode | |
| ) { | |
| for (var i = 0; i < view.length; i++) { | |
| if (view[i].node == cur) { | |
| cm.display.currentWheelTarget = cur; | |
| break outer; | |
| } | |
| } | |
| } | |
| } | |
| // On some browsers, horizontal scrolling will cause redraws to | |
| // happen before the gutter has been realigned, causing it to | |
| // wriggle around in a most unseemly way. When we have an | |
| // estimated pixels/delta value, we just handle horizontal | |
| // scrolling entirely here. It'll be slightly off from native, but | |
| // better than glitching out. | |
| if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { | |
| if (dy && canScrollY) { | |
| updateScrollTop( | |
| cm, | |
| Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit) | |
| ); | |
| } | |
| setScrollLeft( | |
| cm, | |
| Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit) | |
| ); | |
| // Only prevent default scrolling if vertical scrolling is | |
| // actually possible. Otherwise, it causes vertical scroll | |
| // jitter on OSX trackpads when deltaX is small and deltaY | |
| // is large (issue #3579) | |
| if (!dy || (dy && canScrollY)) { | |
| e_preventDefault(e); | |
| } | |
| display.wheelStartX = null; // Abort measurement, if in progress | |
| return; | |
| } | |
| // 'Project' the visible viewport to cover the area that is being | |
| // scrolled into view (if we know enough to estimate it). | |
| if (dy && wheelPixelsPerUnit != null) { | |
| var pixels = dy * wheelPixelsPerUnit; | |
| var top = cm.doc.scrollTop, | |
| bot = top + display.wrapper.clientHeight; | |
| if (pixels < 0) { | |
| top = Math.max(0, top + pixels - 50); | |
| } else { | |
| bot = Math.min(cm.doc.height, bot + pixels + 50); | |
| } | |
| updateDisplaySimple(cm, { top: top, bottom: bot }); | |
| } | |
| if (wheelSamples < 20) { | |
| if (display.wheelStartX == null) { | |
| display.wheelStartX = scroll.scrollLeft; | |
| display.wheelStartY = scroll.scrollTop; | |
| display.wheelDX = dx; | |
| display.wheelDY = dy; | |
| setTimeout(function () { | |
| if (display.wheelStartX == null) { | |
| return; | |
| } | |
| var movedX = scroll.scrollLeft - display.wheelStartX; | |
| var movedY = scroll.scrollTop - display.wheelStartY; | |
| var sample = | |
| (movedY && display.wheelDY && movedY / display.wheelDY) || | |
| (movedX && display.wheelDX && movedX / display.wheelDX); | |
| display.wheelStartX = display.wheelStartY = null; | |
| if (!sample) { | |
| return; | |
| } | |
| wheelPixelsPerUnit = | |
| (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); | |
| ++wheelSamples; | |
| }, 200); | |
| } else { | |
| display.wheelDX += dx; | |
| display.wheelDY += dy; | |
| } | |
| } | |
| } | |
| // Selection objects are immutable. A new one is created every time | |
| // the selection changes. A selection is one or more non-overlapping | |
| // (and non-touching) ranges, sorted, and an integer that indicates | |
| // which one is the primary selection (the one that's scrolled into | |
| // view, that getCursor returns, etc). | |
| var Selection = function (ranges, primIndex) { | |
| this.ranges = ranges; | |
| this.primIndex = primIndex; | |
| }; | |
| Selection.prototype.primary = function () { | |
| return this.ranges[this.primIndex]; | |
| }; | |
| Selection.prototype.equals = function (other) { | |
| var this$1 = this; | |
| if (other == this) { | |
| return true; | |
| } | |
| if ( | |
| other.primIndex != this.primIndex || | |
| other.ranges.length != this.ranges.length | |
| ) { | |
| return false; | |
| } | |
| for (var i = 0; i < this.ranges.length; i++) { | |
| var here = this$1.ranges[i], | |
| there = other.ranges[i]; | |
| if ( | |
| !equalCursorPos(here.anchor, there.anchor) || | |
| !equalCursorPos(here.head, there.head) | |
| ) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| }; | |
| Selection.prototype.deepCopy = function () { | |
| var this$1 = this; | |
| var out = []; | |
| for (var i = 0; i < this.ranges.length; i++) { | |
| out[i] = new Range( | |
| copyPos(this$1.ranges[i].anchor), | |
| copyPos(this$1.ranges[i].head) | |
| ); | |
| } | |
| return new Selection(out, this.primIndex); | |
| }; | |
| Selection.prototype.somethingSelected = function () { | |
| var this$1 = this; | |
| for (var i = 0; i < this.ranges.length; i++) { | |
| if (!this$1.ranges[i].empty()) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| }; | |
| Selection.prototype.contains = function (pos, end) { | |
| var this$1 = this; | |
| if (!end) { | |
| end = pos; | |
| } | |
| for (var i = 0; i < this.ranges.length; i++) { | |
| var range = this$1.ranges[i]; | |
| if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) { | |
| return i; | |
| } | |
| } | |
| return -1; | |
| }; | |
| var Range = function (anchor, head) { | |
| this.anchor = anchor; | |
| this.head = head; | |
| }; | |
| Range.prototype.from = function () { | |
| return minPos(this.anchor, this.head); | |
| }; | |
| Range.prototype.to = function () { | |
| return maxPos(this.anchor, this.head); | |
| }; | |
| Range.prototype.empty = function () { | |
| return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; | |
| }; | |
| // Take an unsorted, potentially overlapping set of ranges, and | |
| // build a selection out of it. 'Consumes' ranges array (modifying | |
| // it). | |
| function normalizeSelection(ranges, primIndex) { | |
| var prim = ranges[primIndex]; | |
| ranges.sort(function (a, b) { | |
| return cmp(a.from(), b.from()); | |
| }); | |
| primIndex = indexOf(ranges, prim); | |
| for (var i = 1; i < ranges.length; i++) { | |
| var cur = ranges[i], | |
| prev = ranges[i - 1]; | |
| if (cmp(prev.to(), cur.from()) >= 0) { | |
| var from = minPos(prev.from(), cur.from()), | |
| to = maxPos(prev.to(), cur.to()); | |
| var inv = prev.empty() | |
| ? cur.from() == cur.head | |
| : prev.from() == prev.head; | |
| if (i <= primIndex) { | |
| --primIndex; | |
| } | |
| ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); | |
| } | |
| } | |
| return new Selection(ranges, primIndex); | |
| } | |
| function simpleSelection(anchor, head) { | |
| return new Selection([new Range(anchor, head || anchor)], 0); | |
| } | |
| // Compute the position of the end of a change (its 'to' property | |
| // refers to the pre-change end). | |
| function changeEnd(change) { | |
| if (!change.text) { | |
| return change.to; | |
| } | |
| return Pos( | |
| change.from.line + change.text.length - 1, | |
| lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0) | |
| ); | |
| } | |
| // Adjust a position to refer to the post-change position of the | |
| // same text, or the end of the change if the change covers it. | |
| function adjustForChange(pos, change) { | |
| if (cmp(pos, change.from) < 0) { | |
| return pos; | |
| } | |
| if (cmp(pos, change.to) <= 0) { | |
| return changeEnd(change); | |
| } | |
| var line = | |
| pos.line + change.text.length - (change.to.line - change.from.line) - 1, | |
| ch = pos.ch; | |
| if (pos.line == change.to.line) { | |
| ch += changeEnd(change).ch - change.to.ch; | |
| } | |
| return Pos(line, ch); | |
| } | |
| function computeSelAfterChange(doc, change) { | |
| var out = []; | |
| for (var i = 0; i < doc.sel.ranges.length; i++) { | |
| var range = doc.sel.ranges[i]; | |
| out.push( | |
| new Range( | |
| adjustForChange(range.anchor, change), | |
| adjustForChange(range.head, change) | |
| ) | |
| ); | |
| } | |
| return normalizeSelection(out, doc.sel.primIndex); | |
| } | |
| function offsetPos(pos, old, nw) { | |
| if (pos.line == old.line) { | |
| return Pos(nw.line, pos.ch - old.ch + nw.ch); | |
| } else { | |
| return Pos(nw.line + (pos.line - old.line), pos.ch); | |
| } | |
| } | |
| // Used by replaceSelections to allow moving the selection to the | |
| // start or around the replaced test. Hint may be "start" or "around". | |
| function computeReplacedSel(doc, changes, hint) { | |
| var out = []; | |
| var oldPrev = Pos(doc.first, 0), | |
| newPrev = oldPrev; | |
| for (var i = 0; i < changes.length; i++) { | |
| var change = changes[i]; | |
| var from = offsetPos(change.from, oldPrev, newPrev); | |
| var to = offsetPos(changeEnd(change), oldPrev, newPrev); | |
| oldPrev = change.to; | |
| newPrev = to; | |
| if (hint == "around") { | |
| var range = doc.sel.ranges[i], | |
| inv = cmp(range.head, range.anchor) < 0; | |
| out[i] = new Range(inv ? to : from, inv ? from : to); | |
| } else { | |
| out[i] = new Range(from, from); | |
| } | |
| } | |
| return new Selection(out, doc.sel.primIndex); | |
| } | |
| // Used to get the editor into a consistent state again when options change. | |
| function loadMode(cm) { | |
| cm.doc.mode = getMode(cm.options, cm.doc.modeOption); | |
| resetModeState(cm); | |
| } | |
| function resetModeState(cm) { | |
| cm.doc.iter(function (line) { | |
| if (line.stateAfter) { | |
| line.stateAfter = null; | |
| } | |
| if (line.styles) { | |
| line.styles = null; | |
| } | |
| }); | |
| cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; | |
| startWorker(cm, 100); | |
| cm.state.modeGen++; | |
| if (cm.curOp) { | |
| regChange(cm); | |
| } | |
| } | |
| // DOCUMENT DATA STRUCTURE | |
| // By default, updates that start and end at the beginning of a line | |
| // are treated specially, in order to make the association of line | |
| // widgets and marker elements with the text behave more intuitive. | |
| function isWholeLineUpdate(doc, change) { | |
| return ( | |
| change.from.ch == 0 && | |
| change.to.ch == 0 && | |
| lst(change.text) == "" && | |
| (!doc.cm || doc.cm.options.wholeLineUpdateBefore) | |
| ); | |
| } | |
| // Perform a change on the document data structure. | |
| function updateDoc(doc, change, markedSpans, estimateHeight) { | |
| function spansFor(n) { | |
| return markedSpans ? markedSpans[n] : null; | |
| } | |
| function update(line, text, spans) { | |
| updateLine(line, text, spans, estimateHeight); | |
| signalLater(line, "change", line, change); | |
| } | |
| function linesFor(start, end) { | |
| var result = []; | |
| for (var i = start; i < end; ++i) { | |
| result.push(new Line(text[i], spansFor(i), estimateHeight)); | |
| } | |
| return result; | |
| } | |
| var from = change.from, | |
| to = change.to, | |
| text = change.text; | |
| var firstLine = getLine(doc, from.line), | |
| lastLine = getLine(doc, to.line); | |
| var lastText = lst(text), | |
| lastSpans = spansFor(text.length - 1), | |
| nlines = to.line - from.line; | |
| // Adjust the line structure | |
| if (change.full) { | |
| doc.insert(0, linesFor(0, text.length)); | |
| doc.remove(text.length, doc.size - text.length); | |
| } else if (isWholeLineUpdate(doc, change)) { | |
| // This is a whole-line replace. Treated specially to make | |
| // sure line objects move the way they are supposed to. | |
| var added = linesFor(0, text.length - 1); | |
| update(lastLine, lastLine.text, lastSpans); | |
| if (nlines) { | |
| doc.remove(from.line, nlines); | |
| } | |
| if (added.length) { | |
| doc.insert(from.line, added); | |
| } | |
| } else if (firstLine == lastLine) { | |
| if (text.length == 1) { | |
| update( | |
| firstLine, | |
| firstLine.text.slice(0, from.ch) + | |
| lastText + | |
| firstLine.text.slice(to.ch), | |
| lastSpans | |
| ); | |
| } else { | |
| var added$1 = linesFor(1, text.length - 1); | |
| added$1.push( | |
| new Line( | |
| lastText + firstLine.text.slice(to.ch), | |
| lastSpans, | |
| estimateHeight | |
| ) | |
| ); | |
| update( | |
| firstLine, | |
| firstLine.text.slice(0, from.ch) + text[0], | |
| spansFor(0) | |
| ); | |
| doc.insert(from.line + 1, added$1); | |
| } | |
| } else if (text.length == 1) { | |
| update( | |
| firstLine, | |
| firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), | |
| spansFor(0) | |
| ); | |
| doc.remove(from.line + 1, nlines); | |
| } else { | |
| update( | |
| firstLine, | |
| firstLine.text.slice(0, from.ch) + text[0], | |
| spansFor(0) | |
| ); | |
| update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); | |
| var added$2 = linesFor(1, text.length - 1); | |
| if (nlines > 1) { | |
| doc.remove(from.line + 1, nlines - 1); | |
| } | |
| doc.insert(from.line + 1, added$2); | |
| } | |
| signalLater(doc, "change", doc, change); | |
| } | |
| // Call f for all linked documents. | |
| function linkedDocs(doc, f, sharedHistOnly) { | |
| function propagate(doc, skip, sharedHist) { | |
| if (doc.linked) { | |
| for (var i = 0; i < doc.linked.length; ++i) { | |
| var rel = doc.linked[i]; | |
| if (rel.doc == skip) { | |
| continue; | |
| } | |
| var shared = sharedHist && rel.sharedHist; | |
| if (sharedHistOnly && !shared) { | |
| continue; | |
| } | |
| f(rel.doc, shared); | |
| propagate(rel.doc, doc, shared); | |
| } | |
| } | |
| } | |
| propagate(doc, null, true); | |
| } | |
| // Attach a document to an editor. | |
| function attachDoc(cm, doc) { | |
| if (doc.cm) { | |
| throw new Error("This document is already in use."); | |
| } | |
| cm.doc = doc; | |
| doc.cm = cm; | |
| estimateLineHeights(cm); | |
| loadMode(cm); | |
| setDirectionClass(cm); | |
| if (!cm.options.lineWrapping) { | |
| findMaxLine(cm); | |
| } | |
| cm.options.mode = doc.modeOption; | |
| regChange(cm); | |
| } | |
| function setDirectionClass(cm) { | |
| (cm.doc.direction == "rtl" | |
| ? addClass | |
| : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); | |
| } | |
| function directionChanged(cm) { | |
| runInOp(cm, function () { | |
| setDirectionClass(cm); | |
| regChange(cm); | |
| }); | |
| } | |
| function History(startGen) { | |
| // Arrays of change events and selections. Doing something adds an | |
| // event to done and clears undo. Undoing moves events from done | |
| // to undone, redoing moves them in the other direction. | |
| this.done = []; | |
| this.undone = []; | |
| this.undoDepth = Infinity; | |
| // Used to track when changes can be merged into a single undo | |
| // event | |
| this.lastModTime = this.lastSelTime = 0; | |
| this.lastOp = this.lastSelOp = null; | |
| this.lastOrigin = this.lastSelOrigin = null; | |
| // Used by the isClean() method | |
| this.generation = this.maxGeneration = startGen || 1; | |
| } | |
| // Create a history change event from an updateDoc-style change | |
| // object. | |
| function historyChangeFromChange(doc, change) { | |
| var histChange = { | |
| from: copyPos(change.from), | |
| to: changeEnd(change), | |
| text: getBetween(doc, change.from, change.to), | |
| }; | |
| attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); | |
| linkedDocs( | |
| doc, | |
| function (doc) { | |
| return attachLocalSpans( | |
| doc, | |
| histChange, | |
| change.from.line, | |
| change.to.line + 1 | |
| ); | |
| }, | |
| true | |
| ); | |
| return histChange; | |
| } | |
| // Pop all selection events off the end of a history array. Stop at | |
| // a change event. | |
| function clearSelectionEvents(array) { | |
| while (array.length) { | |
| var last = lst(array); | |
| if (last.ranges) { | |
| array.pop(); | |
| } else { | |
| break; | |
| } | |
| } | |
| } | |
| // Find the top change event in the history. Pop off selection | |
| // events that are in the way. | |
| function lastChangeEvent(hist, force) { | |
| if (force) { | |
| clearSelectionEvents(hist.done); | |
| return lst(hist.done); | |
| } else if (hist.done.length && !lst(hist.done).ranges) { | |
| return lst(hist.done); | |
| } else if ( | |
| hist.done.length > 1 && | |
| !hist.done[hist.done.length - 2].ranges | |
| ) { | |
| hist.done.pop(); | |
| return lst(hist.done); | |
| } | |
| } | |
| // Register a change in the history. Merges changes that are within | |
| // a single operation, or are close together with an origin that | |
| // allows merging (starting with "+") into a single event. | |
| function addChangeToHistory(doc, change, selAfter, opId) { | |
| var hist = doc.history; | |
| hist.undone.length = 0; | |
| var time = +new Date(), | |
| cur; | |
| var last; | |
| if ( | |
| (hist.lastOp == opId || | |
| (hist.lastOrigin == change.origin && | |
| change.origin && | |
| ((change.origin.charAt(0) == "+" && | |
| doc.cm && | |
| hist.lastModTime > time - doc.cm.options.historyEventDelay) || | |
| change.origin.charAt(0) == "*"))) && | |
| (cur = lastChangeEvent(hist, hist.lastOp == opId)) | |
| ) { | |
| // Merge this change into the last event | |
| last = lst(cur.changes); | |
| if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { | |
| // Optimized case for simple insertion -- don't want to add | |
| // new changesets for every character typed | |
| last.to = changeEnd(change); | |
| } else { | |
| // Add new sub-event | |
| cur.changes.push(historyChangeFromChange(doc, change)); | |
| } | |
| } else { | |
| // Can not be merged, start a new event. | |
| var before = lst(hist.done); | |
| if (!before || !before.ranges) { | |
| pushSelectionToHistory(doc.sel, hist.done); | |
| } | |
| cur = { | |
| changes: [historyChangeFromChange(doc, change)], | |
| generation: hist.generation, | |
| }; | |
| hist.done.push(cur); | |
| while (hist.done.length > hist.undoDepth) { | |
| hist.done.shift(); | |
| if (!hist.done[0].ranges) { | |
| hist.done.shift(); | |
| } | |
| } | |
| } | |
| hist.done.push(selAfter); | |
| hist.generation = ++hist.maxGeneration; | |
| hist.lastModTime = hist.lastSelTime = time; | |
| hist.lastOp = hist.lastSelOp = opId; | |
| hist.lastOrigin = hist.lastSelOrigin = change.origin; | |
| if (!last) { | |
| signal(doc, "historyAdded"); | |
| } | |
| } | |
| function selectionEventCanBeMerged(doc, origin, prev, sel) { | |
| var ch = origin.charAt(0); | |
| return ( | |
| ch == "*" || | |
| (ch == "+" && | |
| prev.ranges.length == sel.ranges.length && | |
| prev.somethingSelected() == sel.somethingSelected() && | |
| new Date() - doc.history.lastSelTime <= | |
| (doc.cm ? doc.cm.options.historyEventDelay : 500)) | |
| ); | |
| } | |
| // Called whenever the selection changes, sets the new selection as | |
| // the pending selection in the history, and pushes the old pending | |
| // selection into the 'done' array when it was significantly | |
| // different (in number of selected ranges, emptiness, or time). | |
| function addSelectionToHistory(doc, sel, opId, options) { | |
| var hist = doc.history, | |
| origin = options && options.origin; | |
| // A new event is started when the previous origin does not match | |
| // the current, or the origins don't allow matching. Origins | |
| // starting with * are always merged, those starting with + are | |
| // merged when similar and close together in time. | |
| if ( | |
| opId == hist.lastSelOp || | |
| (origin && | |
| hist.lastSelOrigin == origin && | |
| ((hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin) || | |
| selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) | |
| ) { | |
| hist.done[hist.done.length - 1] = sel; | |
| } else { | |
| pushSelectionToHistory(sel, hist.done); | |
| } | |
| hist.lastSelTime = +new Date(); | |
| hist.lastSelOrigin = origin; | |
| hist.lastSelOp = opId; | |
| if (options && options.clearRedo !== false) { | |
| clearSelectionEvents(hist.undone); | |
| } | |
| } | |
| function pushSelectionToHistory(sel, dest) { | |
| var top = lst(dest); | |
| if (!(top && top.ranges && top.equals(sel))) { | |
| dest.push(sel); | |
| } | |
| } | |
| // Used to store marked span information in the history. | |
| function attachLocalSpans(doc, change, from, to) { | |
| var existing = change["spans_" + doc.id], | |
| n = 0; | |
| doc.iter( | |
| Math.max(doc.first, from), | |
| Math.min(doc.first + doc.size, to), | |
| function (line) { | |
| if (line.markedSpans) { | |
| (existing || (existing = change["spans_" + doc.id] = {}))[n] = | |
| line.markedSpans; | |
| } | |
| ++n; | |
| } | |
| ); | |
| } | |
| // When un/re-doing restores text containing marked spans, those | |
| // that have been explicitly cleared should not be restored. | |
| function removeClearedSpans(spans) { | |
| if (!spans) { | |
| return null; | |
| } | |
| var out; | |
| for (var i = 0; i < spans.length; ++i) { | |
| if (spans[i].marker.explicitlyCleared) { | |
| if (!out) { | |
| out = spans.slice(0, i); | |
| } | |
| } else if (out) { | |
| out.push(spans[i]); | |
| } | |
| } | |
| return !out ? spans : out.length ? out : null; | |
| } | |
| // Retrieve and filter the old marked spans stored in a change event. | |
| function getOldSpans(doc, change) { | |
| var found = change["spans_" + doc.id]; | |
| if (!found) { | |
| return null; | |
| } | |
| var nw = []; | |
| for (var i = 0; i < change.text.length; ++i) { | |
| nw.push(removeClearedSpans(found[i])); | |
| } | |
| return nw; | |
| } | |
| // Used for un/re-doing changes from the history. Combines the | |
| // result of computing the existing spans with the set of spans that | |
| // existed in the history (so that deleting around a span and then | |
| // undoing brings back the span). | |
| function mergeOldSpans(doc, change) { | |
| var old = getOldSpans(doc, change); | |
| var stretched = stretchSpansOverChange(doc, change); | |
| if (!old) { | |
| return stretched; | |
| } | |
| if (!stretched) { | |
| return old; | |
| } | |
| for (var i = 0; i < old.length; ++i) { | |
| var oldCur = old[i], | |
| stretchCur = stretched[i]; | |
| if (oldCur && stretchCur) { | |
| spans: for (var j = 0; j < stretchCur.length; ++j) { | |
| var span = stretchCur[j]; | |
| for (var k = 0; k < oldCur.length; ++k) { | |
| if (oldCur[k].marker == span.marker) { | |
| continue spans; | |
| } | |
| } | |
| oldCur.push(span); | |
| } | |
| } else if (stretchCur) { | |
| old[i] = stretchCur; | |
| } | |
| } | |
| return old; | |
| } | |
| // Used both to provide a JSON-safe object in .getHistory, and, when | |
| // detaching a document, to split the history in two | |
| function copyHistoryArray(events, newGroup, instantiateSel) { | |
| var copy = []; | |
| for (var i = 0; i < events.length; ++i) { | |
| var event = events[i]; | |
| if (event.ranges) { | |
| copy.push( | |
| instantiateSel ? Selection.prototype.deepCopy.call(event) : event | |
| ); | |
| continue; | |
| } | |
| var changes = event.changes, | |
| newChanges = []; | |
| copy.push({ changes: newChanges }); | |
| for (var j = 0; j < changes.length; ++j) { | |
| var change = changes[j], | |
| m = void 0; | |
| newChanges.push({ | |
| from: change.from, | |
| to: change.to, | |
| text: change.text, | |
| }); | |
| if (newGroup) { | |
| for (var prop in change) { | |
| if ((m = prop.match(/^spans_(\d+)$/))) { | |
| if (indexOf(newGroup, Number(m[1])) > -1) { | |
| lst(newChanges)[prop] = change[prop]; | |
| delete change[prop]; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return copy; | |
| } | |
| // The 'scroll' parameter given to many of these indicated whether | |
| // the new cursor position should be scrolled into view after | |
| // modifying the selection. | |
| // If shift is held or the extend flag is set, extends a range to | |
| // include a given position (and optionally a second position). | |
| // Otherwise, simply returns the range between the given positions. | |
| // Used for cursor motion and such. | |
| function extendRange(range, head, other, extend) { | |
| if (extend) { | |
| var anchor = range.anchor; | |
| if (other) { | |
| var posBefore = cmp(head, anchor) < 0; | |
| if (posBefore != cmp(other, anchor) < 0) { | |
| anchor = head; | |
| head = other; | |
| } else if (posBefore != cmp(head, other) < 0) { | |
| head = other; | |
| } | |
| } | |
| return new Range(anchor, head); | |
| } else { | |
| return new Range(other || head, head); | |
| } | |
| } | |
| // Extend the primary selection range, discard the rest. | |
| function extendSelection(doc, head, other, options, extend) { | |
| if (extend == null) { | |
| extend = doc.cm && (doc.cm.display.shift || doc.extend); | |
| } | |
| setSelection( | |
| doc, | |
| new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), | |
| options | |
| ); | |
| } | |
| // Extend all selections (pos is an array of selections with length | |
| // equal the number of selections) | |
| function extendSelections(doc, heads, options) { | |
| var out = []; | |
| var extend = doc.cm && (doc.cm.display.shift || doc.extend); | |
| for (var i = 0; i < doc.sel.ranges.length; i++) { | |
| out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); | |
| } | |
| var newSel = normalizeSelection(out, doc.sel.primIndex); | |
| setSelection(doc, newSel, options); | |
| } | |
| // Updates a single range in the selection. | |
| function replaceOneSelection(doc, i, range, options) { | |
| var ranges = doc.sel.ranges.slice(0); | |
| ranges[i] = range; | |
| setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); | |
| } | |
| // Reset the selection to a single range. | |
| function setSimpleSelection(doc, anchor, head, options) { | |
| setSelection(doc, simpleSelection(anchor, head), options); | |
| } | |
| // Give beforeSelectionChange handlers a change to influence a | |
| // selection update. | |
| function filterSelectionChange(doc, sel, options) { | |
| var obj = { | |
| ranges: sel.ranges, | |
| update: function (ranges) { | |
| var this$1 = this; | |
| this.ranges = []; | |
| for (var i = 0; i < ranges.length; i++) { | |
| this$1.ranges[i] = new Range( | |
| clipPos(doc, ranges[i].anchor), | |
| clipPos(doc, ranges[i].head) | |
| ); | |
| } | |
| }, | |
| origin: options && options.origin, | |
| }; | |
| signal(doc, "beforeSelectionChange", doc, obj); | |
| if (doc.cm) { | |
| signal(doc.cm, "beforeSelectionChange", doc.cm, obj); | |
| } | |
| if (obj.ranges != sel.ranges) { | |
| return normalizeSelection(obj.ranges, obj.ranges.length - 1); | |
| } else { | |
| return sel; | |
| } | |
| } | |
| function setSelectionReplaceHistory(doc, sel, options) { | |
| var done = doc.history.done, | |
| last = lst(done); | |
| if (last && last.ranges) { | |
| done[done.length - 1] = sel; | |
| setSelectionNoUndo(doc, sel, options); | |
| } else { | |
| setSelection(doc, sel, options); | |
| } | |
| } | |
| // Set a new selection. | |
| function setSelection(doc, sel, options) { | |
| setSelectionNoUndo(doc, sel, options); | |
| addSelectionToHistory( | |
| doc, | |
| doc.sel, | |
| doc.cm ? doc.cm.curOp.id : NaN, | |
| options | |
| ); | |
| } | |
| function setSelectionNoUndo(doc, sel, options) { | |
| if ( | |
| hasHandler(doc, "beforeSelectionChange") || | |
| (doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) | |
| ) { | |
| sel = filterSelectionChange(doc, sel, options); | |
| } | |
| var bias = | |
| (options && options.bias) || | |
| (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); | |
| setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); | |
| if (!(options && options.scroll === false) && doc.cm) { | |
| ensureCursorVisible(doc.cm); | |
| } | |
| } | |
| function setSelectionInner(doc, sel) { | |
| if (sel.equals(doc.sel)) { | |
| return; | |
| } | |
| doc.sel = sel; | |
| if (doc.cm) { | |
| doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; | |
| signalCursorActivity(doc.cm); | |
| } | |
| signalLater(doc, "cursorActivity", doc); | |
| } | |
| // Verify that the selection does not partially select any atomic | |
| // marked ranges. | |
| function reCheckSelection(doc) { | |
| setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); | |
| } | |
| // Return a selection that does not partially select any atomic | |
| // ranges. | |
| function skipAtomicInSelection(doc, sel, bias, mayClear) { | |
| var out; | |
| for (var i = 0; i < sel.ranges.length; i++) { | |
| var range = sel.ranges[i]; | |
| var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; | |
| var newAnchor = skipAtomic( | |
| doc, | |
| range.anchor, | |
| old && old.anchor, | |
| bias, | |
| mayClear | |
| ); | |
| var newHead = skipAtomic( | |
| doc, | |
| range.head, | |
| old && old.head, | |
| bias, | |
| mayClear | |
| ); | |
| if (out || newAnchor != range.anchor || newHead != range.head) { | |
| if (!out) { | |
| out = sel.ranges.slice(0, i); | |
| } | |
| out[i] = new Range(newAnchor, newHead); | |
| } | |
| } | |
| return out ? normalizeSelection(out, sel.primIndex) : sel; | |
| } | |
| function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { | |
| var line = getLine(doc, pos.line); | |
| if (line.markedSpans) { | |
| for (var i = 0; i < line.markedSpans.length; ++i) { | |
| var sp = line.markedSpans[i], | |
| m = sp.marker; | |
| if ( | |
| (sp.from == null || | |
| (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && | |
| (sp.to == null || | |
| (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch)) | |
| ) { | |
| if (mayClear) { | |
| signal(m, "beforeCursorEnter"); | |
| if (m.explicitlyCleared) { | |
| if (!line.markedSpans) { | |
| break; | |
| } else { | |
| --i; | |
| continue; | |
| } | |
| } | |
| } | |
| if (!m.atomic) { | |
| continue; | |
| } | |
| if (oldPos) { | |
| var near = m.find(dir < 0 ? 1 : -1), | |
| diff = void 0; | |
| if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) { | |
| near = movePos( | |
| doc, | |
| near, | |
| -dir, | |
| near && near.line == pos.line ? line : null | |
| ); | |
| } | |
| if ( | |
| near && | |
| near.line == pos.line && | |
| (diff = cmp(near, oldPos)) && | |
| (dir < 0 ? diff < 0 : diff > 0) | |
| ) { | |
| return skipAtomicInner(doc, near, pos, dir, mayClear); | |
| } | |
| } | |
| var far = m.find(dir < 0 ? -1 : 1); | |
| if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) { | |
| far = movePos(doc, far, dir, far.line == pos.line ? line : null); | |
| } | |
| return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; | |
| } | |
| } | |
| } | |
| return pos; | |
| } | |
| // Ensure a given position is not inside an atomic range. | |
| function skipAtomic(doc, pos, oldPos, bias, mayClear) { | |
| var dir = bias || 1; | |
| var found = | |
| skipAtomicInner(doc, pos, oldPos, dir, mayClear) || | |
| (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || | |
| skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || | |
| (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); | |
| if (!found) { | |
| doc.cantEdit = true; | |
| return Pos(doc.first, 0); | |
| } | |
| return found; | |
| } | |
| function movePos(doc, pos, dir, line) { | |
| if (dir < 0 && pos.ch == 0) { | |
| if (pos.line > doc.first) { | |
| return clipPos(doc, Pos(pos.line - 1)); | |
| } else { | |
| return null; | |
| } | |
| } else if ( | |
| dir > 0 && | |
| pos.ch == (line || getLine(doc, pos.line)).text.length | |
| ) { | |
| if (pos.line < doc.first + doc.size - 1) { | |
| return Pos(pos.line + 1, 0); | |
| } else { | |
| return null; | |
| } | |
| } else { | |
| return new Pos(pos.line, pos.ch + dir); | |
| } | |
| } | |
| function selectAll(cm) { | |
| cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); | |
| } | |
| // UPDATING | |
| // Allow "beforeChange" event handlers to influence a change | |
| function filterChange(doc, change, update) { | |
| var obj = { | |
| canceled: false, | |
| from: change.from, | |
| to: change.to, | |
| text: change.text, | |
| origin: change.origin, | |
| cancel: function () { | |
| return (obj.canceled = true); | |
| }, | |
| }; | |
| if (update) { | |
| obj.update = function (from, to, text, origin) { | |
| if (from) { | |
| obj.from = clipPos(doc, from); | |
| } | |
| if (to) { | |
| obj.to = clipPos(doc, to); | |
| } | |
| if (text) { | |
| obj.text = text; | |
| } | |
| if (origin !== undefined) { | |
| obj.origin = origin; | |
| } | |
| }; | |
| } | |
| signal(doc, "beforeChange", doc, obj); | |
| if (doc.cm) { | |
| signal(doc.cm, "beforeChange", doc.cm, obj); | |
| } | |
| if (obj.canceled) { | |
| return null; | |
| } | |
| return { from: obj.from, to: obj.to, text: obj.text, origin: obj.origin }; | |
| } | |
| // Apply a change to a document, and add it to the document's | |
| // history, and propagating it to all linked documents. | |
| function makeChange(doc, change, ignoreReadOnly) { | |
| if (doc.cm) { | |
| if (!doc.cm.curOp) { | |
| return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); | |
| } | |
| if (doc.cm.state.suppressEdits) { | |
| return; | |
| } | |
| } | |
| if ( | |
| hasHandler(doc, "beforeChange") || | |
| (doc.cm && hasHandler(doc.cm, "beforeChange")) | |
| ) { | |
| change = filterChange(doc, change, true); | |
| if (!change) { | |
| return; | |
| } | |
| } | |
| // Possibly split or suppress the update based on the presence | |
| // of read-only spans in its range. | |
| var split = | |
| sawReadOnlySpans && | |
| !ignoreReadOnly && | |
| removeReadOnlyRanges(doc, change.from, change.to); | |
| if (split) { | |
| for (var i = split.length - 1; i >= 0; --i) { | |
| makeChangeInner(doc, { | |
| from: split[i].from, | |
| to: split[i].to, | |
| text: i ? [""] : change.text, | |
| }); | |
| } | |
| } else { | |
| makeChangeInner(doc, change); | |
| } | |
| } | |
| function makeChangeInner(doc, change) { | |
| if ( | |
| change.text.length == 1 && | |
| change.text[0] == "" && | |
| cmp(change.from, change.to) == 0 | |
| ) { | |
| return; | |
| } | |
| var selAfter = computeSelAfterChange(doc, change); | |
| addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); | |
| makeChangeSingleDoc( | |
| doc, | |
| change, | |
| selAfter, | |
| stretchSpansOverChange(doc, change) | |
| ); | |
| var rebased = []; | |
| linkedDocs(doc, function (doc, sharedHist) { | |
| if (!sharedHist && indexOf(rebased, doc.history) == -1) { | |
| rebaseHist(doc.history, change); | |
| rebased.push(doc.history); | |
| } | |
| makeChangeSingleDoc( | |
| doc, | |
| change, | |
| null, | |
| stretchSpansOverChange(doc, change) | |
| ); | |
| }); | |
| } | |
| // Revert a change stored in a document's history. | |
| function makeChangeFromHistory(doc, type, allowSelectionOnly) { | |
| if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { | |
| return; | |
| } | |
| var hist = doc.history, | |
| event, | |
| selAfter = doc.sel; | |
| var source = type == "undo" ? hist.done : hist.undone, | |
| dest = type == "undo" ? hist.undone : hist.done; | |
| // Verify that there is a useable event (so that ctrl-z won't | |
| // needlessly clear selection events) | |
| var i = 0; | |
| for (; i < source.length; i++) { | |
| event = source[i]; | |
| if ( | |
| allowSelectionOnly | |
| ? event.ranges && !event.equals(doc.sel) | |
| : !event.ranges | |
| ) { | |
| break; | |
| } | |
| } | |
| if (i == source.length) { | |
| return; | |
| } | |
| hist.lastOrigin = hist.lastSelOrigin = null; | |
| for (;;) { | |
| event = source.pop(); | |
| if (event.ranges) { | |
| pushSelectionToHistory(event, dest); | |
| if (allowSelectionOnly && !event.equals(doc.sel)) { | |
| setSelection(doc, event, { clearRedo: false }); | |
| return; | |
| } | |
| selAfter = event; | |
| } else { | |
| break; | |
| } | |
| } | |
| // Build up a reverse change object to add to the opposite history | |
| // stack (redo when undoing, and vice versa). | |
| var antiChanges = []; | |
| pushSelectionToHistory(selAfter, dest); | |
| dest.push({ changes: antiChanges, generation: hist.generation }); | |
| hist.generation = event.generation || ++hist.maxGeneration; | |
| var filter = | |
| hasHandler(doc, "beforeChange") || | |
| (doc.cm && hasHandler(doc.cm, "beforeChange")); | |
| var loop = function (i) { | |
| var change = event.changes[i]; | |
| change.origin = type; | |
| if (filter && !filterChange(doc, change, false)) { | |
| source.length = 0; | |
| return {}; | |
| } | |
| antiChanges.push(historyChangeFromChange(doc, change)); | |
| var after = i ? computeSelAfterChange(doc, change) : lst(source); | |
| makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); | |
| if (!i && doc.cm) { | |
| doc.cm.scrollIntoView({ from: change.from, to: changeEnd(change) }); | |
| } | |
| var rebased = []; | |
| // Propagate to the linked documents | |
| linkedDocs(doc, function (doc, sharedHist) { | |
| if (!sharedHist && indexOf(rebased, doc.history) == -1) { | |
| rebaseHist(doc.history, change); | |
| rebased.push(doc.history); | |
| } | |
| makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); | |
| }); | |
| }; | |
| for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { | |
| var returned = loop(i$1); | |
| if (returned) return returned.v; | |
| } | |
| } | |
| // Sub-views need their line numbers shifted when text is added | |
| // above or below them in the parent document. | |
| function shiftDoc(doc, distance) { | |
| if (distance == 0) { | |
| return; | |
| } | |
| doc.first += distance; | |
| doc.sel = new Selection( | |
| map(doc.sel.ranges, function (range) { | |
| return new Range( | |
| Pos(range.anchor.line + distance, range.anchor.ch), | |
| Pos(range.head.line + distance, range.head.ch) | |
| ); | |
| }), | |
| doc.sel.primIndex | |
| ); | |
| if (doc.cm) { | |
| regChange(doc.cm, doc.first, doc.first - distance, distance); | |
| for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) { | |
| regLineChange(doc.cm, l, "gutter"); | |
| } | |
| } | |
| } | |
| // More lower-level change function, handling only a single document | |
| // (not linked ones). | |
| function makeChangeSingleDoc(doc, change, selAfter, spans) { | |
| if (doc.cm && !doc.cm.curOp) { | |
| return operation(doc.cm, makeChangeSingleDoc)( | |
| doc, | |
| change, | |
| selAfter, | |
| spans | |
| ); | |
| } | |
| if (change.to.line < doc.first) { | |
| shiftDoc( | |
| doc, | |
| change.text.length - 1 - (change.to.line - change.from.line) | |
| ); | |
| return; | |
| } | |
| if (change.from.line > doc.lastLine()) { | |
| return; | |
| } | |
| // Clip the change to the size of this doc | |
| if (change.from.line < doc.first) { | |
| var shift = change.text.length - 1 - (doc.first - change.from.line); | |
| shiftDoc(doc, shift); | |
| change = { | |
| from: Pos(doc.first, 0), | |
| to: Pos(change.to.line + shift, change.to.ch), | |
| text: [lst(change.text)], | |
| origin: change.origin, | |
| }; | |
| } | |
| var last = doc.lastLine(); | |
| if (change.to.line > last) { | |
| change = { | |
| from: change.from, | |
| to: Pos(last, getLine(doc, last).text.length), | |
| text: [change.text[0]], | |
| origin: change.origin, | |
| }; | |
| } | |
| change.removed = getBetween(doc, change.from, change.to); | |
| if (!selAfter) { | |
| selAfter = computeSelAfterChange(doc, change); | |
| } | |
| if (doc.cm) { | |
| makeChangeSingleDocInEditor(doc.cm, change, spans); | |
| } else { | |
| updateDoc(doc, change, spans); | |
| } | |
| setSelectionNoUndo(doc, selAfter, sel_dontScroll); | |
| } | |
| // Handle the interaction of a change to a document with the editor | |
| // that this document is part of. | |
| function makeChangeSingleDocInEditor(cm, change, spans) { | |
| var doc = cm.doc, | |
| display = cm.display, | |
| from = change.from, | |
| to = change.to; | |
| var recomputeMaxLength = false, | |
| checkWidthStart = from.line; | |
| if (!cm.options.lineWrapping) { | |
| checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); | |
| doc.iter(checkWidthStart, to.line + 1, function (line) { | |
| if (line == display.maxLine) { | |
| recomputeMaxLength = true; | |
| return true; | |
| } | |
| }); | |
| } | |
| if (doc.sel.contains(change.from, change.to) > -1) { | |
| signalCursorActivity(cm); | |
| } | |
| updateDoc(doc, change, spans, estimateHeight(cm)); | |
| if (!cm.options.lineWrapping) { | |
| doc.iter( | |
| checkWidthStart, | |
| from.line + change.text.length, | |
| function (line) { | |
| var len = lineLength(line); | |
| if (len > display.maxLineLength) { | |
| display.maxLine = line; | |
| display.maxLineLength = len; | |
| display.maxLineChanged = true; | |
| recomputeMaxLength = false; | |
| } | |
| } | |
| ); | |
| if (recomputeMaxLength) { | |
| cm.curOp.updateMaxLine = true; | |
| } | |
| } | |
| retreatFrontier(doc, from.line); | |
| startWorker(cm, 400); | |
| var lendiff = change.text.length - (to.line - from.line) - 1; | |
| // Remember that these lines changed, for updating the display | |
| if (change.full) { | |
| regChange(cm); | |
| } else if ( | |
| from.line == to.line && | |
| change.text.length == 1 && | |
| !isWholeLineUpdate(cm.doc, change) | |
| ) { | |
| regLineChange(cm, from.line, "text"); | |
| } else { | |
| regChange(cm, from.line, to.line + 1, lendiff); | |
| } | |
| var changesHandler = hasHandler(cm, "changes"), | |
| changeHandler = hasHandler(cm, "change"); | |
| if (changeHandler || changesHandler) { | |
| var obj = { | |
| from: from, | |
| to: to, | |
| text: change.text, | |
| removed: change.removed, | |
| origin: change.origin, | |
| }; | |
| if (changeHandler) { | |
| signalLater(cm, "change", cm, obj); | |
| } | |
| if (changesHandler) { | |
| (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); | |
| } | |
| } | |
| cm.display.selForContextMenu = null; | |
| } | |
| function replaceRange(doc, code, from, to, origin) { | |
| if (!to) { | |
| to = from; | |
| } | |
| if (cmp(to, from) < 0) { | |
| var tmp = to; | |
| to = from; | |
| from = tmp; | |
| } | |
| if (typeof code == "string") { | |
| code = doc.splitLines(code); | |
| } | |
| makeChange(doc, { from: from, to: to, text: code, origin: origin }); | |
| } | |
| // Rebasing/resetting history to deal with externally-sourced changes | |
| function rebaseHistSelSingle(pos, from, to, diff) { | |
| if (to < pos.line) { | |
| pos.line += diff; | |
| } else if (from < pos.line) { | |
| pos.line = from; | |
| pos.ch = 0; | |
| } | |
| } | |
| // Tries to rebase an array of history events given a change in the | |
| // document. If the change touches the same lines as the event, the | |
| // event, and everything 'behind' it, is discarded. If the change is | |
| // before the event, the event's positions are updated. Uses a | |
| // copy-on-write scheme for the positions, to avoid having to | |
| // reallocate them all on every rebase, but also avoid problems with | |
| // shared position objects being unsafely updated. | |
| function rebaseHistArray(array, from, to, diff) { | |
| for (var i = 0; i < array.length; ++i) { | |
| var sub = array[i], | |
| ok = true; | |
| if (sub.ranges) { | |
| if (!sub.copied) { | |
| sub = array[i] = sub.deepCopy(); | |
| sub.copied = true; | |
| } | |
| for (var j = 0; j < sub.ranges.length; j++) { | |
| rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); | |
| rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); | |
| } | |
| continue; | |
| } | |
| for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { | |
| var cur = sub.changes[j$1]; | |
| if (to < cur.from.line) { | |
| cur.from = Pos(cur.from.line + diff, cur.from.ch); | |
| cur.to = Pos(cur.to.line + diff, cur.to.ch); | |
| } else if (from <= cur.to.line) { | |
| ok = false; | |
| break; | |
| } | |
| } | |
| if (!ok) { | |
| array.splice(0, i + 1); | |
| i = 0; | |
| } | |
| } | |
| } | |
| function rebaseHist(hist, change) { | |
| var from = change.from.line, | |
| to = change.to.line, | |
| diff = change.text.length - (to - from) - 1; | |
| rebaseHistArray(hist.done, from, to, diff); | |
| rebaseHistArray(hist.undone, from, to, diff); | |
| } | |
| // Utility for applying a change to a line by handle or number, | |
| // returning the number and optionally registering the line as | |
| // changed. | |
| function changeLine(doc, handle, changeType, op) { | |
| var no = handle, | |
| line = handle; | |
| if (typeof handle == "number") { | |
| line = getLine(doc, clipLine(doc, handle)); | |
| } else { | |
| no = lineNo(handle); | |
| } | |
| if (no == null) { | |
| return null; | |
| } | |
| if (op(line, no) && doc.cm) { | |
| regLineChange(doc.cm, no, changeType); | |
| } | |
| return line; | |
| } | |
| // The document is represented as a BTree consisting of leaves, with | |
| // chunk of lines in them, and branches, with up to ten leaves or | |
| // other branch nodes below them. The top node is always a branch | |
| // node, and is the document object itself (meaning it has | |
| // additional methods and properties). | |
| // | |
| // All nodes have parent links. The tree is used both to go from | |
| // line numbers to line objects, and to go from objects to numbers. | |
| // It also indexes by height, and is used to convert between height | |
| // and line object, and to find the total height of the document. | |
| // | |
| // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html | |
| function LeafChunk(lines) { | |
| var this$1 = this; | |
| this.lines = lines; | |
| this.parent = null; | |
| var height = 0; | |
| for (var i = 0; i < lines.length; ++i) { | |
| lines[i].parent = this$1; | |
| height += lines[i].height; | |
| } | |
| this.height = height; | |
| } | |
| LeafChunk.prototype = { | |
| chunkSize: function chunkSize() { | |
| return this.lines.length; | |
| }, | |
| // Remove the n lines at offset 'at'. | |
| removeInner: function removeInner(at, n) { | |
| var this$1 = this; | |
| for (var i = at, e = at + n; i < e; ++i) { | |
| var line = this$1.lines[i]; | |
| this$1.height -= line.height; | |
| cleanUpLine(line); | |
| signalLater(line, "delete"); | |
| } | |
| this.lines.splice(at, n); | |
| }, | |
| // Helper used to collapse a small branch into a single leaf. | |
| collapse: function collapse(lines) { | |
| lines.push.apply(lines, this.lines); | |
| }, | |
| // Insert the given array of lines at offset 'at', count them as | |
| // having the given height. | |
| insertInner: function insertInner(at, lines, height) { | |
| var this$1 = this; | |
| this.height += height; | |
| this.lines = this.lines | |
| .slice(0, at) | |
| .concat(lines) | |
| .concat(this.lines.slice(at)); | |
| for (var i = 0; i < lines.length; ++i) { | |
| lines[i].parent = this$1; | |
| } | |
| }, | |
| // Used to iterate over a part of the tree. | |
| iterN: function iterN(at, n, op) { | |
| var this$1 = this; | |
| for (var e = at + n; at < e; ++at) { | |
| if (op(this$1.lines[at])) { | |
| return true; | |
| } | |
| } | |
| }, | |
| }; | |
| function BranchChunk(children) { | |
| var this$1 = this; | |
| this.children = children; | |
| var size = 0, | |
| height = 0; | |
| for (var i = 0; i < children.length; ++i) { | |
| var ch = children[i]; | |
| size += ch.chunkSize(); | |
| height += ch.height; | |
| ch.parent = this$1; | |
| } | |
| this.size = size; | |
| this.height = height; | |
| this.parent = null; | |
| } | |
| BranchChunk.prototype = { | |
| chunkSize: function chunkSize() { | |
| return this.size; | |
| }, | |
| removeInner: function removeInner(at, n) { | |
| var this$1 = this; | |
| this.size -= n; | |
| for (var i = 0; i < this.children.length; ++i) { | |
| var child = this$1.children[i], | |
| sz = child.chunkSize(); | |
| if (at < sz) { | |
| var rm = Math.min(n, sz - at), | |
| oldHeight = child.height; | |
| child.removeInner(at, rm); | |
| this$1.height -= oldHeight - child.height; | |
| if (sz == rm) { | |
| this$1.children.splice(i--, 1); | |
| child.parent = null; | |
| } | |
| if ((n -= rm) == 0) { | |
| break; | |
| } | |
| at = 0; | |
| } else { | |
| at -= sz; | |
| } | |
| } | |
| // If the result is smaller than 25 lines, ensure that it is a | |
| // single leaf node. | |
| if ( | |
| this.size - n < 25 && | |
| (this.children.length > 1 || !(this.children[0] instanceof LeafChunk)) | |
| ) { | |
| var lines = []; | |
| this.collapse(lines); | |
| this.children = [new LeafChunk(lines)]; | |
| this.children[0].parent = this; | |
| } | |
| }, | |
| collapse: function collapse(lines) { | |
| var this$1 = this; | |
| for (var i = 0; i < this.children.length; ++i) { | |
| this$1.children[i].collapse(lines); | |
| } | |
| }, | |
| insertInner: function insertInner(at, lines, height) { | |
| var this$1 = this; | |
| this.size += lines.length; | |
| this.height += height; | |
| for (var i = 0; i < this.children.length; ++i) { | |
| var child = this$1.children[i], | |
| sz = child.chunkSize(); | |
| if (at <= sz) { | |
| child.insertInner(at, lines, height); | |
| if (child.lines && child.lines.length > 50) { | |
| // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. | |
| // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. | |
| var remaining = (child.lines.length % 25) + 25; | |
| for (var pos = remaining; pos < child.lines.length; ) { | |
| var leaf = new LeafChunk(child.lines.slice(pos, (pos += 25))); | |
| child.height -= leaf.height; | |
| this$1.children.splice(++i, 0, leaf); | |
| leaf.parent = this$1; | |
| } | |
| child.lines = child.lines.slice(0, remaining); | |
| this$1.maybeSpill(); | |
| } | |
| break; | |
| } | |
| at -= sz; | |
| } | |
| }, | |
| // When a node has grown, check whether it should be split. | |
| maybeSpill: function maybeSpill() { | |
| if (this.children.length <= 10) { | |
| return; | |
| } | |
| var me = this; | |
| do { | |
| var spilled = me.children.splice(me.children.length - 5, 5); | |
| var sibling = new BranchChunk(spilled); | |
| if (!me.parent) { | |
| // Become the parent node | |
| var copy = new BranchChunk(me.children); | |
| copy.parent = me; | |
| me.children = [copy, sibling]; | |
| me = copy; | |
| } else { | |
| me.size -= sibling.size; | |
| me.height -= sibling.height; | |
| var myIndex = indexOf(me.parent.children, me); | |
| me.parent.children.splice(myIndex + 1, 0, sibling); | |
| } | |
| sibling.parent = me.parent; | |
| } while (me.children.length > 10); | |
| me.parent.maybeSpill(); | |
| }, | |
| iterN: function iterN(at, n, op) { | |
| var this$1 = this; | |
| for (var i = 0; i < this.children.length; ++i) { | |
| var child = this$1.children[i], | |
| sz = child.chunkSize(); | |
| if (at < sz) { | |
| var used = Math.min(n, sz - at); | |
| if (child.iterN(at, used, op)) { | |
| return true; | |
| } | |
| if ((n -= used) == 0) { | |
| break; | |
| } | |
| at = 0; | |
| } else { | |
| at -= sz; | |
| } | |
| } | |
| }, | |
| }; | |
| // Line widgets are block elements displayed above or below a line. | |
| var LineWidget = function (doc, node, options) { | |
| var this$1 = this; | |
| if (options) { | |
| for (var opt in options) { | |
| if (options.hasOwnProperty(opt)) { | |
| this$1[opt] = options[opt]; | |
| } | |
| } | |
| } | |
| this.doc = doc; | |
| this.node = node; | |
| }; | |
| LineWidget.prototype.clear = function () { | |
| var this$1 = this; | |
| var cm = this.doc.cm, | |
| ws = this.line.widgets, | |
| line = this.line, | |
| no = lineNo(line); | |
| if (no == null || !ws) { | |
| return; | |
| } | |
| for (var i = 0; i < ws.length; ++i) { | |
| if (ws[i] == this$1) { | |
| ws.splice(i--, 1); | |
| } | |
| } | |
| if (!ws.length) { | |
| line.widgets = null; | |
| } | |
| var height = widgetHeight(this); | |
| updateLineHeight(line, Math.max(0, line.height - height)); | |
| if (cm) { | |
| runInOp(cm, function () { | |
| adjustScrollWhenAboveVisible(cm, line, -height); | |
| regLineChange(cm, no, "widget"); | |
| }); | |
| signalLater(cm, "lineWidgetCleared", cm, this, no); | |
| } | |
| }; | |
| LineWidget.prototype.changed = function () { | |
| var this$1 = this; | |
| var oldH = this.height, | |
| cm = this.doc.cm, | |
| line = this.line; | |
| this.height = null; | |
| var diff = widgetHeight(this) - oldH; | |
| if (!diff) { | |
| return; | |
| } | |
| updateLineHeight(line, line.height + diff); | |
| if (cm) { | |
| runInOp(cm, function () { | |
| cm.curOp.forceUpdate = true; | |
| adjustScrollWhenAboveVisible(cm, line, diff); | |
| signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); | |
| }); | |
| } | |
| }; | |
| eventMixin(LineWidget); | |
| function adjustScrollWhenAboveVisible(cm, line, diff) { | |
| if ( | |
| heightAtLine(line) < | |
| ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop) | |
| ) { | |
| addToScrollTop(cm, diff); | |
| } | |
| } | |
| function addLineWidget(doc, handle, node, options) { | |
| var widget = new LineWidget(doc, node, options); | |
| var cm = doc.cm; | |
| if (cm && widget.noHScroll) { | |
| cm.display.alignWidgets = true; | |
| } | |
| changeLine(doc, handle, "widget", function (line) { | |
| var widgets = line.widgets || (line.widgets = []); | |
| if (widget.insertAt == null) { | |
| widgets.push(widget); | |
| } else { | |
| widgets.splice( | |
| Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), | |
| 0, | |
| widget | |
| ); | |
| } | |
| widget.line = line; | |
| if (cm && !lineIsHidden(doc, line)) { | |
| var aboveVisible = heightAtLine(line) < doc.scrollTop; | |
| updateLineHeight(line, line.height + widgetHeight(widget)); | |
| if (aboveVisible) { | |
| addToScrollTop(cm, widget.height); | |
| } | |
| cm.curOp.forceUpdate = true; | |
| } | |
| return true; | |
| }); | |
| signalLater( | |
| cm, | |
| "lineWidgetAdded", | |
| cm, | |
| widget, | |
| typeof handle == "number" ? handle : lineNo(handle) | |
| ); | |
| return widget; | |
| } | |
| // TEXTMARKERS | |
| // Created with markText and setBookmark methods. A TextMarker is a | |
| // handle that can be used to clear or find a marked position in the | |
| // document. Line objects hold arrays (markedSpans) containing | |
| // {from, to, marker} object pointing to such marker objects, and | |
| // indicating that such a marker is present on that line. Multiple | |
| // lines may point to the same marker when it spans across lines. | |
| // The spans will have null for their from/to properties when the | |
| // marker continues beyond the start/end of the line. Markers have | |
| // links back to the lines they currently touch. | |
| // Collapsed markers have unique ids, in order to be able to order | |
| // them, which is needed for uniquely determining an outer marker | |
| // when they overlap (they may nest, but not partially overlap). | |
| var nextMarkerId = 0; | |
| var TextMarker = function (doc, type) { | |
| this.lines = []; | |
| this.type = type; | |
| this.doc = doc; | |
| this.id = ++nextMarkerId; | |
| }; | |
| // Clear the marker. | |
| TextMarker.prototype.clear = function () { | |
| var this$1 = this; | |
| if (this.explicitlyCleared) { | |
| return; | |
| } | |
| var cm = this.doc.cm, | |
| withOp = cm && !cm.curOp; | |
| if (withOp) { | |
| startOperation(cm); | |
| } | |
| if (hasHandler(this, "clear")) { | |
| var found = this.find(); | |
| if (found) { | |
| signalLater(this, "clear", found.from, found.to); | |
| } | |
| } | |
| var min = null, | |
| max = null; | |
| for (var i = 0; i < this.lines.length; ++i) { | |
| var line = this$1.lines[i]; | |
| var span = getMarkedSpanFor(line.markedSpans, this$1); | |
| if (cm && !this$1.collapsed) { | |
| regLineChange(cm, lineNo(line), "text"); | |
| } else if (cm) { | |
| if (span.to != null) { | |
| max = lineNo(line); | |
| } | |
| if (span.from != null) { | |
| min = lineNo(line); | |
| } | |
| } | |
| line.markedSpans = removeMarkedSpan(line.markedSpans, span); | |
| if ( | |
| span.from == null && | |
| this$1.collapsed && | |
| !lineIsHidden(this$1.doc, line) && | |
| cm | |
| ) { | |
| updateLineHeight(line, textHeight(cm.display)); | |
| } | |
| } | |
| if (cm && this.collapsed && !cm.options.lineWrapping) { | |
| for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { | |
| var visual = visualLine(this$1.lines[i$1]), | |
| len = lineLength(visual); | |
| if (len > cm.display.maxLineLength) { | |
| cm.display.maxLine = visual; | |
| cm.display.maxLineLength = len; | |
| cm.display.maxLineChanged = true; | |
| } | |
| } | |
| } | |
| if (min != null && cm && this.collapsed) { | |
| regChange(cm, min, max + 1); | |
| } | |
| this.lines.length = 0; | |
| this.explicitlyCleared = true; | |
| if (this.atomic && this.doc.cantEdit) { | |
| this.doc.cantEdit = false; | |
| if (cm) { | |
| reCheckSelection(cm.doc); | |
| } | |
| } | |
| if (cm) { | |
| signalLater(cm, "markerCleared", cm, this, min, max); | |
| } | |
| if (withOp) { | |
| endOperation(cm); | |
| } | |
| if (this.parent) { | |
| this.parent.clear(); | |
| } | |
| }; | |
| // Find the position of the marker in the document. Returns a {from, | |
| // to} object by default. Side can be passed to get a specific side | |
| // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the | |
| // Pos objects returned contain a line object, rather than a line | |
| // number (used to prevent looking up the same line twice). | |
| TextMarker.prototype.find = function (side, lineObj) { | |
| var this$1 = this; | |
| if (side == null && this.type == "bookmark") { | |
| side = 1; | |
| } | |
| var from, to; | |
| for (var i = 0; i < this.lines.length; ++i) { | |
| var line = this$1.lines[i]; | |
| var span = getMarkedSpanFor(line.markedSpans, this$1); | |
| if (span.from != null) { | |
| from = Pos(lineObj ? line : lineNo(line), span.from); | |
| if (side == -1) { | |
| return from; | |
| } | |
| } | |
| if (span.to != null) { | |
| to = Pos(lineObj ? line : lineNo(line), span.to); | |
| if (side == 1) { | |
| return to; | |
| } | |
| } | |
| } | |
| return from && { from: from, to: to }; | |
| }; | |
| // Signals that the marker's widget changed, and surrounding layout | |
| // should be recomputed. | |
| TextMarker.prototype.changed = function () { | |
| var this$1 = this; | |
| var pos = this.find(-1, true), | |
| widget = this, | |
| cm = this.doc.cm; | |
| if (!pos || !cm) { | |
| return; | |
| } | |
| runInOp(cm, function () { | |
| var line = pos.line, | |
| lineN = lineNo(pos.line); | |
| var view = findViewForLine(cm, lineN); | |
| if (view) { | |
| clearLineMeasurementCacheFor(view); | |
| cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; | |
| } | |
| cm.curOp.updateMaxLine = true; | |
| if (!lineIsHidden(widget.doc, line) && widget.height != null) { | |
| var oldHeight = widget.height; | |
| widget.height = null; | |
| var dHeight = widgetHeight(widget) - oldHeight; | |
| if (dHeight) { | |
| updateLineHeight(line, line.height + dHeight); | |
| } | |
| } | |
| signalLater(cm, "markerChanged", cm, this$1); | |
| }); | |
| }; | |
| TextMarker.prototype.attachLine = function (line) { | |
| if (!this.lines.length && this.doc.cm) { | |
| var op = this.doc.cm.curOp; | |
| if ( | |
| !op.maybeHiddenMarkers || | |
| indexOf(op.maybeHiddenMarkers, this) == -1 | |
| ) { | |
| (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); | |
| } | |
| } | |
| this.lines.push(line); | |
| }; | |
| TextMarker.prototype.detachLine = function (line) { | |
| this.lines.splice(indexOf(this.lines, line), 1); | |
| if (!this.lines.length && this.doc.cm) { | |
| var op = this.doc.cm.curOp; | |
| (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); | |
| } | |
| }; | |
| eventMixin(TextMarker); | |
| // Create a marker, wire it up to the right lines, and | |
| function markText(doc, from, to, options, type) { | |
| // Shared markers (across linked documents) are handled separately | |
| // (markTextShared will call out to this again, once per | |
| // document). | |
| if (options && options.shared) { | |
| return markTextShared(doc, from, to, options, type); | |
| } | |
| // Ensure we are in an operation. | |
| if (doc.cm && !doc.cm.curOp) { | |
| return operation(doc.cm, markText)(doc, from, to, options, type); | |
| } | |
| var marker = new TextMarker(doc, type), | |
| diff = cmp(from, to); | |
| if (options) { | |
| copyObj(options, marker, false); | |
| } | |
| // Don't connect empty markers unless clearWhenEmpty is false | |
| if (diff > 0 || (diff == 0 && marker.clearWhenEmpty !== false)) { | |
| return marker; | |
| } | |
| if (marker.replacedWith) { | |
| // Showing up as a widget implies collapsed (widget replaces text) | |
| marker.collapsed = true; | |
| marker.widgetNode = eltP( | |
| "span", | |
| [marker.replacedWith], | |
| "CodeMirror-widget" | |
| ); | |
| if (!options.handleMouseEvents) { | |
| marker.widgetNode.setAttribute("cm-ignore-events", "true"); | |
| } | |
| if (options.insertLeft) { | |
| marker.widgetNode.insertLeft = true; | |
| } | |
| } | |
| if (marker.collapsed) { | |
| if ( | |
| conflictingCollapsedRange(doc, from.line, from, to, marker) || | |
| (from.line != to.line && | |
| conflictingCollapsedRange(doc, to.line, from, to, marker)) | |
| ) { | |
| throw new Error( | |
| "Inserting collapsed marker partially overlapping an existing one" | |
| ); | |
| } | |
| seeCollapsedSpans(); | |
| } | |
| if (marker.addToHistory) { | |
| addChangeToHistory( | |
| doc, | |
| { from: from, to: to, origin: "markText" }, | |
| doc.sel, | |
| NaN | |
| ); | |
| } | |
| var curLine = from.line, | |
| cm = doc.cm, | |
| updateMaxLine; | |
| doc.iter(curLine, to.line + 1, function (line) { | |
| if ( | |
| cm && | |
| marker.collapsed && | |
| !cm.options.lineWrapping && | |
| visualLine(line) == cm.display.maxLine | |
| ) { | |
| updateMaxLine = true; | |
| } | |
| if (marker.collapsed && curLine != from.line) { | |
| updateLineHeight(line, 0); | |
| } | |
| addMarkedSpan( | |
| line, | |
| new MarkedSpan( | |
| marker, | |
| curLine == from.line ? from.ch : null, | |
| curLine == to.line ? to.ch : null | |
| ) | |
| ); | |
| ++curLine; | |
| }); | |
| // lineIsHidden depends on the presence of the spans, so needs a second pass | |
| if (marker.collapsed) { | |
| doc.iter(from.line, to.line + 1, function (line) { | |
| if (lineIsHidden(doc, line)) { | |
| updateLineHeight(line, 0); | |
| } | |
| }); | |
| } | |
| if (marker.clearOnEnter) { | |
| on(marker, "beforeCursorEnter", function () { | |
| return marker.clear(); | |
| }); | |
| } | |
| if (marker.readOnly) { | |
| seeReadOnlySpans(); | |
| if (doc.history.done.length || doc.history.undone.length) { | |
| doc.clearHistory(); | |
| } | |
| } | |
| if (marker.collapsed) { | |
| marker.id = ++nextMarkerId; | |
| marker.atomic = true; | |
| } | |
| if (cm) { | |
| // Sync editor state | |
| if (updateMaxLine) { | |
| cm.curOp.updateMaxLine = true; | |
| } | |
| if (marker.collapsed) { | |
| regChange(cm, from.line, to.line + 1); | |
| } else if ( | |
| marker.className || | |
| marker.title || | |
| marker.startStyle || | |
| marker.endStyle || | |
| marker.css | |
| ) { | |
| for (var i = from.line; i <= to.line; i++) { | |
| regLineChange(cm, i, "text"); | |
| } | |
| } | |
| if (marker.atomic) { | |
| reCheckSelection(cm.doc); | |
| } | |
| signalLater(cm, "markerAdded", cm, marker); | |
| } | |
| return marker; | |
| } | |
| // SHARED TEXTMARKERS | |
| // A shared marker spans multiple linked documents. It is | |
| // implemented as a meta-marker-object controlling multiple normal | |
| // markers. | |
| var SharedTextMarker = function (markers, primary) { | |
| var this$1 = this; | |
| this.markers = markers; | |
| this.primary = primary; | |
| for (var i = 0; i < markers.length; ++i) { | |
| markers[i].parent = this$1; | |
| } | |
| }; | |
| SharedTextMarker.prototype.clear = function () { | |
| var this$1 = this; | |
| if (this.explicitlyCleared) { | |
| return; | |
| } | |
| this.explicitlyCleared = true; | |
| for (var i = 0; i < this.markers.length; ++i) { | |
| this$1.markers[i].clear(); | |
| } | |
| signalLater(this, "clear"); | |
| }; | |
| SharedTextMarker.prototype.find = function (side, lineObj) { | |
| return this.primary.find(side, lineObj); | |
| }; | |
| eventMixin(SharedTextMarker); | |
| function markTextShared(doc, from, to, options, type) { | |
| options = copyObj(options); | |
| options.shared = false; | |
| var markers = [markText(doc, from, to, options, type)], | |
| primary = markers[0]; | |
| var widget = options.widgetNode; | |
| linkedDocs(doc, function (doc) { | |
| if (widget) { | |
| options.widgetNode = widget.cloneNode(true); | |
| } | |
| markers.push( | |
| markText(doc, clipPos(doc, from), clipPos(doc, to), options, type) | |
| ); | |
| for (var i = 0; i < doc.linked.length; ++i) { | |
| if (doc.linked[i].isParent) { | |
| return; | |
| } | |
| } | |
| primary = lst(markers); | |
| }); | |
| return new SharedTextMarker(markers, primary); | |
| } | |
| function findSharedMarkers(doc) { | |
| return doc.findMarks( | |
| Pos(doc.first, 0), | |
| doc.clipPos(Pos(doc.lastLine())), | |
| function (m) { | |
| return m.parent; | |
| } | |
| ); | |
| } | |
| function copySharedMarkers(doc, markers) { | |
| for (var i = 0; i < markers.length; i++) { | |
| var marker = markers[i], | |
| pos = marker.find(); | |
| var mFrom = doc.clipPos(pos.from), | |
| mTo = doc.clipPos(pos.to); | |
| if (cmp(mFrom, mTo)) { | |
| var subMark = markText( | |
| doc, | |
| mFrom, | |
| mTo, | |
| marker.primary, | |
| marker.primary.type | |
| ); | |
| marker.markers.push(subMark); | |
| subMark.parent = marker; | |
| } | |
| } | |
| } | |
| function detachSharedMarkers(markers) { | |
| var loop = function (i) { | |
| var marker = markers[i], | |
| linked = [marker.primary.doc]; | |
| linkedDocs(marker.primary.doc, function (d) { | |
| return linked.push(d); | |
| }); | |
| for (var j = 0; j < marker.markers.length; j++) { | |
| var subMarker = marker.markers[j]; | |
| if (indexOf(linked, subMarker.doc) == -1) { | |
| subMarker.parent = null; | |
| marker.markers.splice(j--, 1); | |
| } | |
| } | |
| }; | |
| for (var i = 0; i < markers.length; i++) loop(i); | |
| } | |
| var nextDocId = 0; | |
| var Doc = function (text, mode, firstLine, lineSep, direction) { | |
| if (!(this instanceof Doc)) { | |
| return new Doc(text, mode, firstLine, lineSep, direction); | |
| } | |
| if (firstLine == null) { | |
| firstLine = 0; | |
| } | |
| BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); | |
| this.first = firstLine; | |
| this.scrollTop = this.scrollLeft = 0; | |
| this.cantEdit = false; | |
| this.cleanGeneration = 1; | |
| this.modeFrontier = this.highlightFrontier = firstLine; | |
| var start = Pos(firstLine, 0); | |
| this.sel = simpleSelection(start); | |
| this.history = new History(null); | |
| this.id = ++nextDocId; | |
| this.modeOption = mode; | |
| this.lineSep = lineSep; | |
| this.direction = direction == "rtl" ? "rtl" : "ltr"; | |
| this.extend = false; | |
| if (typeof text == "string") { | |
| text = this.splitLines(text); | |
| } | |
| updateDoc(this, { from: start, to: start, text: text }); | |
| setSelection(this, simpleSelection(start), sel_dontScroll); | |
| }; | |
| Doc.prototype = createObj(BranchChunk.prototype, { | |
| constructor: Doc, | |
| // Iterate over the document. Supports two forms -- with only one | |
| // argument, it calls that for each line in the document. With | |
| // three, it iterates over the range given by the first two (with | |
| // the second being non-inclusive). | |
| iter: function (from, to, op) { | |
| if (op) { | |
| this.iterN(from - this.first, to - from, op); | |
| } else { | |
| this.iterN(this.first, this.first + this.size, from); | |
| } | |
| }, | |
| // Non-public interface for adding and removing lines. | |
| insert: function (at, lines) { | |
| var height = 0; | |
| for (var i = 0; i < lines.length; ++i) { | |
| height += lines[i].height; | |
| } | |
| this.insertInner(at - this.first, lines, height); | |
| }, | |
| remove: function (at, n) { | |
| this.removeInner(at - this.first, n); | |
| }, | |
| // From here, the methods are part of the public interface. Most | |
| // are also available from CodeMirror (editor) instances. | |
| getValue: function (lineSep) { | |
| var lines = getLines(this, this.first, this.first + this.size); | |
| if (lineSep === false) { | |
| return lines; | |
| } | |
| return lines.join(lineSep || this.lineSeparator()); | |
| }, | |
| setValue: docMethodOp(function (code) { | |
| var top = Pos(this.first, 0), | |
| last = this.first + this.size - 1; | |
| makeChange( | |
| this, | |
| { | |
| from: top, | |
| to: Pos(last, getLine(this, last).text.length), | |
| text: this.splitLines(code), | |
| origin: "setValue", | |
| full: true, | |
| }, | |
| true | |
| ); | |
| if (this.cm) { | |
| scrollToCoords(this.cm, 0, 0); | |
| } | |
| setSelection(this, simpleSelection(top), sel_dontScroll); | |
| }), | |
| replaceRange: function (code, from, to, origin) { | |
| from = clipPos(this, from); | |
| to = to ? clipPos(this, to) : from; | |
| replaceRange(this, code, from, to, origin); | |
| }, | |
| getRange: function (from, to, lineSep) { | |
| var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); | |
| if (lineSep === false) { | |
| return lines; | |
| } | |
| return lines.join(lineSep || this.lineSeparator()); | |
| }, | |
| getLine: function (line) { | |
| var l = this.getLineHandle(line); | |
| return l && l.text; | |
| }, | |
| getLineHandle: function (line) { | |
| if (isLine(this, line)) { | |
| return getLine(this, line); | |
| } | |
| }, | |
| getLineNumber: function (line) { | |
| return lineNo(line); | |
| }, | |
| getLineHandleVisualStart: function (line) { | |
| if (typeof line == "number") { | |
| line = getLine(this, line); | |
| } | |
| return visualLine(line); | |
| }, | |
| lineCount: function () { | |
| return this.size; | |
| }, | |
| firstLine: function () { | |
| return this.first; | |
| }, | |
| lastLine: function () { | |
| return this.first + this.size - 1; | |
| }, | |
| clipPos: function (pos) { | |
| return clipPos(this, pos); | |
| }, | |
| getCursor: function (start) { | |
| var range = this.sel.primary(), | |
| pos; | |
| if (start == null || start == "head") { | |
| pos = range.head; | |
| } else if (start == "anchor") { | |
| pos = range.anchor; | |
| } else if (start == "end" || start == "to" || start === false) { | |
| pos = range.to(); | |
| } else { | |
| pos = range.from(); | |
| } | |
| return pos; | |
| }, | |
| listSelections: function () { | |
| return this.sel.ranges; | |
| }, | |
| somethingSelected: function () { | |
| return this.sel.somethingSelected(); | |
| }, | |
| setCursor: docMethodOp(function (line, ch, options) { | |
| setSimpleSelection( | |
| this, | |
| clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), | |
| null, | |
| options | |
| ); | |
| }), | |
| setSelection: docMethodOp(function (anchor, head, options) { | |
| setSimpleSelection( | |
| this, | |
| clipPos(this, anchor), | |
| clipPos(this, head || anchor), | |
| options | |
| ); | |
| }), | |
| extendSelection: docMethodOp(function (head, other, options) { | |
| extendSelection( | |
| this, | |
| clipPos(this, head), | |
| other && clipPos(this, other), | |
| options | |
| ); | |
| }), | |
| extendSelections: docMethodOp(function (heads, options) { | |
| extendSelections(this, clipPosArray(this, heads), options); | |
| }), | |
| extendSelectionsBy: docMethodOp(function (f, options) { | |
| var heads = map(this.sel.ranges, f); | |
| extendSelections(this, clipPosArray(this, heads), options); | |
| }), | |
| setSelections: docMethodOp(function (ranges, primary, options) { | |
| var this$1 = this; | |
| if (!ranges.length) { | |
| return; | |
| } | |
| var out = []; | |
| for (var i = 0; i < ranges.length; i++) { | |
| out[i] = new Range( | |
| clipPos(this$1, ranges[i].anchor), | |
| clipPos(this$1, ranges[i].head) | |
| ); | |
| } | |
| if (primary == null) { | |
| primary = Math.min(ranges.length - 1, this.sel.primIndex); | |
| } | |
| setSelection(this, normalizeSelection(out, primary), options); | |
| }), | |
| addSelection: docMethodOp(function (anchor, head, options) { | |
| var ranges = this.sel.ranges.slice(0); | |
| ranges.push( | |
| new Range(clipPos(this, anchor), clipPos(this, head || anchor)) | |
| ); | |
| setSelection( | |
| this, | |
| normalizeSelection(ranges, ranges.length - 1), | |
| options | |
| ); | |
| }), | |
| getSelection: function (lineSep) { | |
| var this$1 = this; | |
| var ranges = this.sel.ranges, | |
| lines; | |
| for (var i = 0; i < ranges.length; i++) { | |
| var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); | |
| lines = lines ? lines.concat(sel) : sel; | |
| } | |
| if (lineSep === false) { | |
| return lines; | |
| } else { | |
| return lines.join(lineSep || this.lineSeparator()); | |
| } | |
| }, | |
| getSelections: function (lineSep) { | |
| var this$1 = this; | |
| var parts = [], | |
| ranges = this.sel.ranges; | |
| for (var i = 0; i < ranges.length; i++) { | |
| var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()); | |
| if (lineSep !== false) { | |
| sel = sel.join(lineSep || this$1.lineSeparator()); | |
| } | |
| parts[i] = sel; | |
| } | |
| return parts; | |
| }, | |
| replaceSelection: function (code, collapse, origin) { | |
| var dup = []; | |
| for (var i = 0; i < this.sel.ranges.length; i++) { | |
| dup[i] = code; | |
| } | |
| this.replaceSelections(dup, collapse, origin || "+input"); | |
| }, | |
| replaceSelections: docMethodOp(function (code, collapse, origin) { | |
| var this$1 = this; | |
| var changes = [], | |
| sel = this.sel; | |
| for (var i = 0; i < sel.ranges.length; i++) { | |
| var range = sel.ranges[i]; | |
| changes[i] = { | |
| from: range.from(), | |
| to: range.to(), | |
| text: this$1.splitLines(code[i]), | |
| origin: origin, | |
| }; | |
| } | |
| var newSel = | |
| collapse && | |
| collapse != "end" && | |
| computeReplacedSel(this, changes, collapse); | |
| for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) { | |
| makeChange(this$1, changes[i$1]); | |
| } | |
| if (newSel) { | |
| setSelectionReplaceHistory(this, newSel); | |
| } else if (this.cm) { | |
| ensureCursorVisible(this.cm); | |
| } | |
| }), | |
| undo: docMethodOp(function () { | |
| makeChangeFromHistory(this, "undo"); | |
| }), | |
| redo: docMethodOp(function () { | |
| makeChangeFromHistory(this, "redo"); | |
| }), | |
| undoSelection: docMethodOp(function () { | |
| makeChangeFromHistory(this, "undo", true); | |
| }), | |
| redoSelection: docMethodOp(function () { | |
| makeChangeFromHistory(this, "redo", true); | |
| }), | |
| setExtending: function (val) { | |
| this.extend = val; | |
| }, | |
| getExtending: function () { | |
| return this.extend; | |
| }, | |
| historySize: function () { | |
| var hist = this.history, | |
| done = 0, | |
| undone = 0; | |
| for (var i = 0; i < hist.done.length; i++) { | |
| if (!hist.done[i].ranges) { | |
| ++done; | |
| } | |
| } | |
| for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { | |
| if (!hist.undone[i$1].ranges) { | |
| ++undone; | |
| } | |
| } | |
| return { undo: done, redo: undone }; | |
| }, | |
| clearHistory: function () { | |
| this.history = new History(this.history.maxGeneration); | |
| }, | |
| markClean: function () { | |
| this.cleanGeneration = this.changeGeneration(true); | |
| }, | |
| changeGeneration: function (forceSplit) { | |
| if (forceSplit) { | |
| this.history.lastOp = | |
| this.history.lastSelOp = | |
| this.history.lastOrigin = | |
| null; | |
| } | |
| return this.history.generation; | |
| }, | |
| isClean: function (gen) { | |
| return this.history.generation == (gen || this.cleanGeneration); | |
| }, | |
| getHistory: function () { | |
| return { | |
| done: copyHistoryArray(this.history.done), | |
| undone: copyHistoryArray(this.history.undone), | |
| }; | |
| }, | |
| setHistory: function (histData) { | |
| var hist = (this.history = new History(this.history.maxGeneration)); | |
| hist.done = copyHistoryArray(histData.done.slice(0), null, true); | |
| hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); | |
| }, | |
| setGutterMarker: docMethodOp(function (line, gutterID, value) { | |
| return changeLine(this, line, "gutter", function (line) { | |
| var markers = line.gutterMarkers || (line.gutterMarkers = {}); | |
| markers[gutterID] = value; | |
| if (!value && isEmpty(markers)) { | |
| line.gutterMarkers = null; | |
| } | |
| return true; | |
| }); | |
| }), | |
| clearGutter: docMethodOp(function (gutterID) { | |
| var this$1 = this; | |
| this.iter(function (line) { | |
| if (line.gutterMarkers && line.gutterMarkers[gutterID]) { | |
| changeLine(this$1, line, "gutter", function () { | |
| line.gutterMarkers[gutterID] = null; | |
| if (isEmpty(line.gutterMarkers)) { | |
| line.gutterMarkers = null; | |
| } | |
| return true; | |
| }); | |
| } | |
| }); | |
| }), | |
| lineInfo: function (line) { | |
| var n; | |
| if (typeof line == "number") { | |
| if (!isLine(this, line)) { | |
| return null; | |
| } | |
| n = line; | |
| line = getLine(this, line); | |
| if (!line) { | |
| return null; | |
| } | |
| } else { | |
| n = lineNo(line); | |
| if (n == null) { | |
| return null; | |
| } | |
| } | |
| return { | |
| line: n, | |
| handle: line, | |
| text: line.text, | |
| gutterMarkers: line.gutterMarkers, | |
| textClass: line.textClass, | |
| bgClass: line.bgClass, | |
| wrapClass: line.wrapClass, | |
| widgets: line.widgets, | |
| }; | |
| }, | |
| addLineClass: docMethodOp(function (handle, where, cls) { | |
| return changeLine( | |
| this, | |
| handle, | |
| where == "gutter" ? "gutter" : "class", | |
| function (line) { | |
| var prop = | |
| where == "text" | |
| ? "textClass" | |
| : where == "background" | |
| ? "bgClass" | |
| : where == "gutter" | |
| ? "gutterClass" | |
| : "wrapClass"; | |
| if (!line[prop]) { | |
| line[prop] = cls; | |
| } else if (classTest(cls).test(line[prop])) { | |
| return false; | |
| } else { | |
| line[prop] += " " + cls; | |
| } | |
| return true; | |
| } | |
| ); | |
| }), | |
| removeLineClass: docMethodOp(function (handle, where, cls) { | |
| return changeLine( | |
| this, | |
| handle, | |
| where == "gutter" ? "gutter" : "class", | |
| function (line) { | |
| var prop = | |
| where == "text" | |
| ? "textClass" | |
| : where == "background" | |
| ? "bgClass" | |
| : where == "gutter" | |
| ? "gutterClass" | |
| : "wrapClass"; | |
| var cur = line[prop]; | |
| if (!cur) { | |
| return false; | |
| } else if (cls == null) { | |
| line[prop] = null; | |
| } else { | |
| var found = cur.match(classTest(cls)); | |
| if (!found) { | |
| return false; | |
| } | |
| var end = found.index + found[0].length; | |
| line[prop] = | |
| cur.slice(0, found.index) + | |
| (!found.index || end == cur.length ? "" : " ") + | |
| cur.slice(end) || null; | |
| } | |
| return true; | |
| } | |
| ); | |
| }), | |
| addLineWidget: docMethodOp(function (handle, node, options) { | |
| return addLineWidget(this, handle, node, options); | |
| }), | |
| removeLineWidget: function (widget) { | |
| widget.clear(); | |
| }, | |
| markText: function (from, to, options) { | |
| return markText( | |
| this, | |
| clipPos(this, from), | |
| clipPos(this, to), | |
| options, | |
| (options && options.type) || "range" | |
| ); | |
| }, | |
| setBookmark: function (pos, options) { | |
| var realOpts = { | |
| replacedWith: | |
| options && (options.nodeType == null ? options.widget : options), | |
| insertLeft: options && options.insertLeft, | |
| clearWhenEmpty: false, | |
| shared: options && options.shared, | |
| handleMouseEvents: options && options.handleMouseEvents, | |
| }; | |
| pos = clipPos(this, pos); | |
| return markText(this, pos, pos, realOpts, "bookmark"); | |
| }, | |
| findMarksAt: function (pos) { | |
| pos = clipPos(this, pos); | |
| var markers = [], | |
| spans = getLine(this, pos.line).markedSpans; | |
| if (spans) { | |
| for (var i = 0; i < spans.length; ++i) { | |
| var span = spans[i]; | |
| if ( | |
| (span.from == null || span.from <= pos.ch) && | |
| (span.to == null || span.to >= pos.ch) | |
| ) { | |
| markers.push(span.marker.parent || span.marker); | |
| } | |
| } | |
| } | |
| return markers; | |
| }, | |
| findMarks: function (from, to, filter) { | |
| from = clipPos(this, from); | |
| to = clipPos(this, to); | |
| var found = [], | |
| lineNo = from.line; | |
| this.iter(from.line, to.line + 1, function (line) { | |
| var spans = line.markedSpans; | |
| if (spans) { | |
| for (var i = 0; i < spans.length; i++) { | |
| var span = spans[i]; | |
| if ( | |
| !( | |
| (span.to != null && | |
| lineNo == from.line && | |
| from.ch >= span.to) || | |
| (span.from == null && lineNo != from.line) || | |
| (span.from != null && lineNo == to.line && span.from >= to.ch) | |
| ) && | |
| (!filter || filter(span.marker)) | |
| ) { | |
| found.push(span.marker.parent || span.marker); | |
| } | |
| } | |
| } | |
| ++lineNo; | |
| }); | |
| return found; | |
| }, | |
| getAllMarks: function () { | |
| var markers = []; | |
| this.iter(function (line) { | |
| var sps = line.markedSpans; | |
| if (sps) { | |
| for (var i = 0; i < sps.length; ++i) { | |
| if (sps[i].from != null) { | |
| markers.push(sps[i].marker); | |
| } | |
| } | |
| } | |
| }); | |
| return markers; | |
| }, | |
| posFromIndex: function (off) { | |
| var ch, | |
| lineNo = this.first, | |
| sepSize = this.lineSeparator().length; | |
| this.iter(function (line) { | |
| var sz = line.text.length + sepSize; | |
| if (sz > off) { | |
| ch = off; | |
| return true; | |
| } | |
| off -= sz; | |
| ++lineNo; | |
| }); | |
| return clipPos(this, Pos(lineNo, ch)); | |
| }, | |
| indexFromPos: function (coords) { | |
| coords = clipPos(this, coords); | |
| var index = coords.ch; | |
| if (coords.line < this.first || coords.ch < 0) { | |
| return 0; | |
| } | |
| var sepSize = this.lineSeparator().length; | |
| this.iter(this.first, coords.line, function (line) { | |
| // iter aborts when callback returns a truthy value | |
| index += line.text.length + sepSize; | |
| }); | |
| return index; | |
| }, | |
| copy: function (copyHistory) { | |
| var doc = new Doc( | |
| getLines(this, this.first, this.first + this.size), | |
| this.modeOption, | |
| this.first, | |
| this.lineSep, | |
| this.direction | |
| ); | |
| doc.scrollTop = this.scrollTop; | |
| doc.scrollLeft = this.scrollLeft; | |
| doc.sel = this.sel; | |
| doc.extend = false; | |
| if (copyHistory) { | |
| doc.history.undoDepth = this.history.undoDepth; | |
| doc.setHistory(this.getHistory()); | |
| } | |
| return doc; | |
| }, | |
| linkedDoc: function (options) { | |
| if (!options) { | |
| options = {}; | |
| } | |
| var from = this.first, | |
| to = this.first + this.size; | |
| if (options.from != null && options.from > from) { | |
| from = options.from; | |
| } | |
| if (options.to != null && options.to < to) { | |
| to = options.to; | |
| } | |
| var copy = new Doc( | |
| getLines(this, from, to), | |
| options.mode || this.modeOption, | |
| from, | |
| this.lineSep, | |
| this.direction | |
| ); | |
| if (options.sharedHist) { | |
| copy.history = this.history; | |
| } | |
| (this.linked || (this.linked = [])).push({ | |
| doc: copy, | |
| sharedHist: options.sharedHist, | |
| }); | |
| copy.linked = [ | |
| { doc: this, isParent: true, sharedHist: options.sharedHist }, | |
| ]; | |
| copySharedMarkers(copy, findSharedMarkers(this)); | |
| return copy; | |
| }, | |
| unlinkDoc: function (other) { | |
| var this$1 = this; | |
| if (other instanceof CodeMirror) { | |
| other = other.doc; | |
| } | |
| if (this.linked) { | |
| for (var i = 0; i < this.linked.length; ++i) { | |
| var link = this$1.linked[i]; | |
| if (link.doc != other) { | |
| continue; | |
| } | |
| this$1.linked.splice(i, 1); | |
| other.unlinkDoc(this$1); | |
| detachSharedMarkers(findSharedMarkers(this$1)); | |
| break; | |
| } | |
| } | |
| // If the histories were shared, split them again | |
| if (other.history == this.history) { | |
| var splitIds = [other.id]; | |
| linkedDocs( | |
| other, | |
| function (doc) { | |
| return splitIds.push(doc.id); | |
| }, | |
| true | |
| ); | |
| other.history = new History(null); | |
| other.history.done = copyHistoryArray(this.history.done, splitIds); | |
| other.history.undone = copyHistoryArray(this.history.undone, splitIds); | |
| } | |
| }, | |
| iterLinkedDocs: function (f) { | |
| linkedDocs(this, f); | |
| }, | |
| getMode: function () { | |
| return this.mode; | |
| }, | |
| getEditor: function () { | |
| return this.cm; | |
| }, | |
| splitLines: function (str) { | |
| if (this.lineSep) { | |
| return str.split(this.lineSep); | |
| } | |
| return splitLinesAuto(str); | |
| }, | |
| lineSeparator: function () { | |
| return this.lineSep || "\n"; | |
| }, | |
| setDirection: docMethodOp(function (dir) { | |
| if (dir != "rtl") { | |
| dir = "ltr"; | |
| } | |
| if (dir == this.direction) { | |
| return; | |
| } | |
| this.direction = dir; | |
| this.iter(function (line) { | |
| return (line.order = null); | |
| }); | |
| if (this.cm) { | |
| directionChanged(this.cm); | |
| } | |
| }), | |
| }); | |
| // Public alias. | |
| Doc.prototype.eachLine = Doc.prototype.iter; | |
| // Kludge to work around strange IE behavior where it'll sometimes | |
| // re-fire a series of drag-related events right after the drop (#1551) | |
| var lastDrop = 0; | |
| function onDrop(e) { | |
| var cm = this; | |
| clearDragCursor(cm); | |
| if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { | |
| return; | |
| } | |
| e_preventDefault(e); | |
| if (ie) { | |
| lastDrop = +new Date(); | |
| } | |
| var pos = posFromMouse(cm, e, true), | |
| files = e.dataTransfer.files; | |
| if (!pos || cm.isReadOnly()) { | |
| return; | |
| } | |
| // Might be a file drop, in which case we simply extract the text | |
| // and insert it. | |
| if (files && files.length && window.FileReader && window.File) { | |
| var n = files.length, | |
| text = Array(n), | |
| read = 0; | |
| var loadFile = function (file, i) { | |
| if ( | |
| cm.options.allowDropFileTypes && | |
| indexOf(cm.options.allowDropFileTypes, file.type) == -1 | |
| ) { | |
| return; | |
| } | |
| var reader = new FileReader(); | |
| reader.onload = operation(cm, function () { | |
| var content = reader.result; | |
| if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { | |
| content = ""; | |
| } | |
| text[i] = content; | |
| if (++read == n) { | |
| pos = clipPos(cm.doc, pos); | |
| var change = { | |
| from: pos, | |
| to: pos, | |
| text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), | |
| origin: "paste", | |
| }; | |
| makeChange(cm.doc, change); | |
| setSelectionReplaceHistory( | |
| cm.doc, | |
| simpleSelection(pos, changeEnd(change)) | |
| ); | |
| } | |
| }); | |
| reader.readAsText(file); | |
| }; | |
| for (var i = 0; i < n; ++i) { | |
| loadFile(files[i], i); | |
| } | |
| } else { | |
| // Normal drop | |
| // Don't do a replace if the drop happened inside of the selected text. | |
| if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { | |
| cm.state.draggingText(e); | |
| // Ensure the editor is re-focused | |
| setTimeout(function () { | |
| return cm.display.input.focus(); | |
| }, 20); | |
| return; | |
| } | |
| try { | |
| var text$1 = e.dataTransfer.getData("Text"); | |
| if (text$1) { | |
| var selected; | |
| if (cm.state.draggingText && !cm.state.draggingText.copy) { | |
| selected = cm.listSelections(); | |
| } | |
| setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); | |
| if (selected) { | |
| for (var i$1 = 0; i$1 < selected.length; ++i$1) { | |
| replaceRange( | |
| cm.doc, | |
| "", | |
| selected[i$1].anchor, | |
| selected[i$1].head, | |
| "drag" | |
| ); | |
| } | |
| } | |
| cm.replaceSelection(text$1, "around", "paste"); | |
| cm.display.input.focus(); | |
| } | |
| } catch (e) {} | |
| } | |
| } | |
| function onDragStart(cm, e) { | |
| if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) { | |
| e_stop(e); | |
| return; | |
| } | |
| if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { | |
| return; | |
| } | |
| e.dataTransfer.setData("Text", cm.getSelection()); | |
| e.dataTransfer.effectAllowed = "copyMove"; | |
| // Use dummy image instead of default browsers image. | |
| // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. | |
| if (e.dataTransfer.setDragImage && !safari) { | |
| var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); | |
| img.src = | |
| "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; | |
| if (presto) { | |
| img.width = img.height = 1; | |
| cm.display.wrapper.appendChild(img); | |
| // Force a relayout, or Opera won't use our image for some obscure reason | |
| img._top = img.offsetTop; | |
| } | |
| e.dataTransfer.setDragImage(img, 0, 0); | |
| if (presto) { | |
| img.parentNode.removeChild(img); | |
| } | |
| } | |
| } | |
| function onDragOver(cm, e) { | |
| var pos = posFromMouse(cm, e); | |
| if (!pos) { | |
| return; | |
| } | |
| var frag = document.createDocumentFragment(); | |
| drawSelectionCursor(cm, pos, frag); | |
| if (!cm.display.dragCursor) { | |
| cm.display.dragCursor = elt( | |
| "div", | |
| null, | |
| "CodeMirror-cursors CodeMirror-dragcursors" | |
| ); | |
| cm.display.lineSpace.insertBefore( | |
| cm.display.dragCursor, | |
| cm.display.cursorDiv | |
| ); | |
| } | |
| removeChildrenAndAdd(cm.display.dragCursor, frag); | |
| } | |
| function clearDragCursor(cm) { | |
| if (cm.display.dragCursor) { | |
| cm.display.lineSpace.removeChild(cm.display.dragCursor); | |
| cm.display.dragCursor = null; | |
| } | |
| } | |
| // These must be handled carefully, because naively registering a | |
| // handler for each editor will cause the editors to never be | |
| // garbage collected. | |
| function forEachCodeMirror(f) { | |
| if (!document.getElementsByClassName) { | |
| return; | |
| } | |
| var byClass = document.getElementsByClassName("CodeMirror"); | |
| for (var i = 0; i < byClass.length; i++) { | |
| var cm = byClass[i].CodeMirror; | |
| if (cm) { | |
| f(cm); | |
| } | |
| } | |
| } | |
| var globalsRegistered = false; | |
| function ensureGlobalHandlers() { | |
| if (globalsRegistered) { | |
| return; | |
| } | |
| registerGlobalHandlers(); | |
| globalsRegistered = true; | |
| } | |
| function registerGlobalHandlers() { | |
| // When the window resizes, we need to refresh active editors. | |
| var resizeTimer; | |
| on(window, "resize", function () { | |
| if (resizeTimer == null) { | |
| resizeTimer = setTimeout(function () { | |
| resizeTimer = null; | |
| forEachCodeMirror(onResize); | |
| }, 100); | |
| } | |
| }); | |
| // When the window loses focus, we want to show the editor as blurred | |
| on(window, "blur", function () { | |
| return forEachCodeMirror(onBlur); | |
| }); | |
| } | |
| // Called when the window resizes | |
| function onResize(cm) { | |
| var d = cm.display; | |
| if ( | |
| d.lastWrapHeight == d.wrapper.clientHeight && | |
| d.lastWrapWidth == d.wrapper.clientWidth | |
| ) { | |
| return; | |
| } | |
| // Might be a text scaling operation, clear size caches. | |
| d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; | |
| d.scrollbarsClipped = false; | |
| cm.setSize(); | |
| } | |
| var keyNames = { | |
| 3: "Enter", | |
| 8: "Backspace", | |
| 9: "Tab", | |
| 13: "Enter", | |
| 16: "Shift", | |
| 17: "Ctrl", | |
| 18: "Alt", | |
| 19: "Pause", | |
| 20: "CapsLock", | |
| 27: "Esc", | |
| 32: "Space", | |
| 33: "PageUp", | |
| 34: "PageDown", | |
| 35: "End", | |
| 36: "Home", | |
| 37: "Left", | |
| 38: "Up", | |
| 39: "Right", | |
| 40: "Down", | |
| 44: "PrintScrn", | |
| 45: "Insert", | |
| 46: "Delete", | |
| 59: ";", | |
| 61: "=", | |
| 91: "Mod", | |
| 92: "Mod", | |
| 93: "Mod", | |
| 106: "*", | |
| 107: "=", | |
| 109: "-", | |
| 110: ".", | |
| 111: "/", | |
| 127: "Delete", | |
| 173: "-", | |
| 186: ";", | |
| 187: "=", | |
| 188: ",", | |
| 189: "-", | |
| 190: ".", | |
| 191: "/", | |
| 192: "`", | |
| 219: "[", | |
| 220: "\\", | |
| 221: "]", | |
| 222: "'", | |
| 63232: "Up", | |
| 63233: "Down", | |
| 63234: "Left", | |
| 63235: "Right", | |
| 63272: "Delete", | |
| 63273: "Home", | |
| 63275: "End", | |
| 63276: "PageUp", | |
| 63277: "PageDown", | |
| 63302: "Insert", | |
| }; | |
| // Number keys | |
| for (var i = 0; i < 10; i++) { | |
| keyNames[i + 48] = keyNames[i + 96] = String(i); | |
| } | |
| // Alphabetic keys | |
| for (var i$1 = 65; i$1 <= 90; i$1++) { | |
| keyNames[i$1] = String.fromCharCode(i$1); | |
| } | |
| // Function keys | |
| for (var i$2 = 1; i$2 <= 12; i$2++) { | |
| keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; | |
| } | |
| var keyMap = {}; | |
| keyMap.basic = { | |
| Left: "goCharLeft", | |
| Right: "goCharRight", | |
| Up: "goLineUp", | |
| Down: "goLineDown", | |
| End: "goLineEnd", | |
| Home: "goLineStartSmart", | |
| PageUp: "goPageUp", | |
| PageDown: "goPageDown", | |
| Delete: "delCharAfter", | |
| Backspace: "delCharBefore", | |
| "Shift-Backspace": "delCharBefore", | |
| Tab: "defaultTab", | |
| "Shift-Tab": "indentAuto", | |
| Enter: "newlineAndIndent", | |
| Insert: "toggleOverwrite", | |
| Esc: "singleSelection", | |
| }; | |
| // Note that the save and find-related commands aren't defined by | |
| // default. User code or addons can define them. Unknown commands | |
| // are simply ignored. | |
| keyMap.pcDefault = { | |
| "Ctrl-A": "selectAll", | |
| "Ctrl-D": "deleteLine", | |
| "Ctrl-Z": "undo", | |
| "Shift-Ctrl-Z": "redo", | |
| "Ctrl-Y": "redo", | |
| "Ctrl-Home": "goDocStart", | |
| "Ctrl-End": "goDocEnd", | |
| "Ctrl-Up": "goLineUp", | |
| "Ctrl-Down": "goLineDown", | |
| "Ctrl-Left": "goGroupLeft", | |
| "Ctrl-Right": "goGroupRight", | |
| "Alt-Left": "goLineStart", | |
| "Alt-Right": "goLineEnd", | |
| "Ctrl-Backspace": "delGroupBefore", | |
| "Ctrl-Delete": "delGroupAfter", | |
| "Ctrl-S": "save", | |
| "Ctrl-F": "find", | |
| "Ctrl-G": "findNext", | |
| "Shift-Ctrl-G": "findPrev", | |
| "Shift-Ctrl-F": "replace", | |
| "Shift-Ctrl-R": "replaceAll", | |
| "Ctrl-[": "indentLess", | |
| "Ctrl-]": "indentMore", | |
| "Ctrl-U": "undoSelection", | |
| "Shift-Ctrl-U": "redoSelection", | |
| "Alt-U": "redoSelection", | |
| fallthrough: "basic", | |
| }; | |
| // Very basic readline/emacs-style bindings, which are standard on Mac. | |
| keyMap.emacsy = { | |
| "Ctrl-F": "goCharRight", | |
| "Ctrl-B": "goCharLeft", | |
| "Ctrl-P": "goLineUp", | |
| "Ctrl-N": "goLineDown", | |
| "Alt-F": "goWordRight", | |
| "Alt-B": "goWordLeft", | |
| "Ctrl-A": "goLineStart", | |
| "Ctrl-E": "goLineEnd", | |
| "Ctrl-V": "goPageDown", | |
| "Shift-Ctrl-V": "goPageUp", | |
| "Ctrl-D": "delCharAfter", | |
| "Ctrl-H": "delCharBefore", | |
| "Alt-D": "delWordAfter", | |
| "Alt-Backspace": "delWordBefore", | |
| "Ctrl-K": "killLine", | |
| "Ctrl-T": "transposeChars", | |
| "Ctrl-O": "openLine", | |
| }; | |
| keyMap.macDefault = { | |
| "Cmd-A": "selectAll", | |
| "Cmd-D": "deleteLine", | |
| "Cmd-Z": "undo", | |
| "Shift-Cmd-Z": "redo", | |
| "Cmd-Y": "redo", | |
| "Cmd-Home": "goDocStart", | |
| "Cmd-Up": "goDocStart", | |
| "Cmd-End": "goDocEnd", | |
| "Cmd-Down": "goDocEnd", | |
| "Alt-Left": "goGroupLeft", | |
| "Alt-Right": "goGroupRight", | |
| "Cmd-Left": "goLineLeft", | |
| "Cmd-Right": "goLineRight", | |
| "Alt-Backspace": "delGroupBefore", | |
| "Ctrl-Alt-Backspace": "delGroupAfter", | |
| "Alt-Delete": "delGroupAfter", | |
| "Cmd-S": "save", | |
| "Cmd-F": "find", | |
| "Cmd-G": "findNext", | |
| "Shift-Cmd-G": "findPrev", | |
| "Cmd-Alt-F": "replace", | |
| "Shift-Cmd-Alt-F": "replaceAll", | |
| "Cmd-[": "indentLess", | |
| "Cmd-]": "indentMore", | |
| "Cmd-Backspace": "delWrappedLineLeft", | |
| "Cmd-Delete": "delWrappedLineRight", | |
| "Cmd-U": "undoSelection", | |
| "Shift-Cmd-U": "redoSelection", | |
| "Ctrl-Up": "goDocStart", | |
| "Ctrl-Down": "goDocEnd", | |
| fallthrough: ["basic", "emacsy"], | |
| }; | |
| keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; | |
| // KEYMAP DISPATCH | |
| function normalizeKeyName(name) { | |
| var parts = name.split(/-(?!$)/); | |
| name = parts[parts.length - 1]; | |
| var alt, ctrl, shift, cmd; | |
| for (var i = 0; i < parts.length - 1; i++) { | |
| var mod = parts[i]; | |
| if (/^(cmd|meta|m)$/i.test(mod)) { | |
| cmd = true; | |
| } else if (/^a(lt)?$/i.test(mod)) { | |
| alt = true; | |
| } else if (/^(c|ctrl|control)$/i.test(mod)) { | |
| ctrl = true; | |
| } else if (/^s(hift)?$/i.test(mod)) { | |
| shift = true; | |
| } else { | |
| throw new Error("Unrecognized modifier name: " + mod); | |
| } | |
| } | |
| if (alt) { | |
| name = "Alt-" + name; | |
| } | |
| if (ctrl) { | |
| name = "Ctrl-" + name; | |
| } | |
| if (cmd) { | |
| name = "Cmd-" + name; | |
| } | |
| if (shift) { | |
| name = "Shift-" + name; | |
| } | |
| return name; | |
| } | |
| // This is a kludge to keep keymaps mostly working as raw objects | |
| // (backwards compatibility) while at the same time support features | |
| // like normalization and multi-stroke key bindings. It compiles a | |
| // new normalized keymap, and then updates the old object to reflect | |
| // this. | |
| function normalizeKeyMap(keymap) { | |
| var copy = {}; | |
| for (var keyname in keymap) { | |
| if (keymap.hasOwnProperty(keyname)) { | |
| var value = keymap[keyname]; | |
| if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { | |
| continue; | |
| } | |
| if (value == "...") { | |
| delete keymap[keyname]; | |
| continue; | |
| } | |
| var keys = map(keyname.split(" "), normalizeKeyName); | |
| for (var i = 0; i < keys.length; i++) { | |
| var val = void 0, | |
| name = void 0; | |
| if (i == keys.length - 1) { | |
| name = keys.join(" "); | |
| val = value; | |
| } else { | |
| name = keys.slice(0, i + 1).join(" "); | |
| val = "..."; | |
| } | |
| var prev = copy[name]; | |
| if (!prev) { | |
| copy[name] = val; | |
| } else if (prev != val) { | |
| throw new Error("Inconsistent bindings for " + name); | |
| } | |
| } | |
| delete keymap[keyname]; | |
| } | |
| } | |
| for (var prop in copy) { | |
| keymap[prop] = copy[prop]; | |
| } | |
| return keymap; | |
| } | |
| function lookupKey(key, map, handle, context) { | |
| map = getKeyMap(map); | |
| var found = map.call ? map.call(key, context) : map[key]; | |
| if (found === false) { | |
| return "nothing"; | |
| } | |
| if (found === "...") { | |
| return "multi"; | |
| } | |
| if (found != null && handle(found)) { | |
| return "handled"; | |
| } | |
| if (map.fallthrough) { | |
| if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") { | |
| return lookupKey(key, map.fallthrough, handle, context); | |
| } | |
| for (var i = 0; i < map.fallthrough.length; i++) { | |
| var result = lookupKey(key, map.fallthrough[i], handle, context); | |
| if (result) { | |
| return result; | |
| } | |
| } | |
| } | |
| } | |
| // Modifier key presses don't count as 'real' key presses for the | |
| // purpose of keymap fallthrough. | |
| function isModifierKey(value) { | |
| var name = typeof value == "string" ? value : keyNames[value.keyCode]; | |
| return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; | |
| } | |
| function addModifierNames(name, event, noShift) { | |
| var base = name; | |
| if (event.altKey && base != "Alt") { | |
| name = "Alt-" + name; | |
| } | |
| if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { | |
| name = "Ctrl-" + name; | |
| } | |
| if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { | |
| name = "Cmd-" + name; | |
| } | |
| if (!noShift && event.shiftKey && base != "Shift") { | |
| name = "Shift-" + name; | |
| } | |
| return name; | |
| } | |
| // Look up the name of a key as indicated by an event object. | |
| function keyName(event, noShift) { | |
| if (presto && event.keyCode == 34 && event["char"]) { | |
| return false; | |
| } | |
| var name = keyNames[event.keyCode]; | |
| if (name == null || event.altGraphKey) { | |
| return false; | |
| } | |
| return addModifierNames(name, event, noShift); | |
| } | |
| function getKeyMap(val) { | |
| return typeof val == "string" ? keyMap[val] : val; | |
| } | |
| // Helper for deleting text near the selection(s), used to implement | |
| // backspace, delete, and similar functionality. | |
| function deleteNearSelection(cm, compute) { | |
| var ranges = cm.doc.sel.ranges, | |
| kill = []; | |
| // Build up a set of ranges to kill first, merging overlapping | |
| // ranges. | |
| for (var i = 0; i < ranges.length; i++) { | |
| var toKill = compute(ranges[i]); | |
| while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { | |
| var replaced = kill.pop(); | |
| if (cmp(replaced.from, toKill.from) < 0) { | |
| toKill.from = replaced.from; | |
| break; | |
| } | |
| } | |
| kill.push(toKill); | |
| } | |
| // Next, remove those actual ranges. | |
| runInOp(cm, function () { | |
| for (var i = kill.length - 1; i >= 0; i--) { | |
| replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); | |
| } | |
| ensureCursorVisible(cm); | |
| }); | |
| } | |
| // Commands are parameter-less actions that can be performed on an | |
| // editor, mostly used for keybindings. | |
| var commands = { | |
| selectAll: selectAll, | |
| singleSelection: function (cm) { | |
| return cm.setSelection( | |
| cm.getCursor("anchor"), | |
| cm.getCursor("head"), | |
| sel_dontScroll | |
| ); | |
| }, | |
| killLine: function (cm) { | |
| return deleteNearSelection(cm, function (range) { | |
| if (range.empty()) { | |
| var len = getLine(cm.doc, range.head.line).text.length; | |
| if (range.head.ch == len && range.head.line < cm.lastLine()) { | |
| return { from: range.head, to: Pos(range.head.line + 1, 0) }; | |
| } else { | |
| return { from: range.head, to: Pos(range.head.line, len) }; | |
| } | |
| } else { | |
| return { from: range.from(), to: range.to() }; | |
| } | |
| }); | |
| }, | |
| deleteLine: function (cm) { | |
| return deleteNearSelection(cm, function (range) { | |
| return { | |
| from: Pos(range.from().line, 0), | |
| to: clipPos(cm.doc, Pos(range.to().line + 1, 0)), | |
| }; | |
| }); | |
| }, | |
| delLineLeft: function (cm) { | |
| return deleteNearSelection(cm, function (range) { | |
| return { | |
| from: Pos(range.from().line, 0), | |
| to: range.from(), | |
| }; | |
| }); | |
| }, | |
| delWrappedLineLeft: function (cm) { | |
| return deleteNearSelection(cm, function (range) { | |
| var top = cm.charCoords(range.head, "div").top + 5; | |
| var leftPos = cm.coordsChar({ left: 0, top: top }, "div"); | |
| return { from: leftPos, to: range.from() }; | |
| }); | |
| }, | |
| delWrappedLineRight: function (cm) { | |
| return deleteNearSelection(cm, function (range) { | |
| var top = cm.charCoords(range.head, "div").top + 5; | |
| var rightPos = cm.coordsChar( | |
| { left: cm.display.lineDiv.offsetWidth + 100, top: top }, | |
| "div" | |
| ); | |
| return { from: range.from(), to: rightPos }; | |
| }); | |
| }, | |
| undo: function (cm) { | |
| return cm.undo(); | |
| }, | |
| redo: function (cm) { | |
| return cm.redo(); | |
| }, | |
| undoSelection: function (cm) { | |
| return cm.undoSelection(); | |
| }, | |
| redoSelection: function (cm) { | |
| return cm.redoSelection(); | |
| }, | |
| goDocStart: function (cm) { | |
| return cm.extendSelection(Pos(cm.firstLine(), 0)); | |
| }, | |
| goDocEnd: function (cm) { | |
| return cm.extendSelection(Pos(cm.lastLine())); | |
| }, | |
| goLineStart: function (cm) { | |
| return cm.extendSelectionsBy( | |
| function (range) { | |
| return lineStart(cm, range.head.line); | |
| }, | |
| { origin: "+move", bias: 1 } | |
| ); | |
| }, | |
| goLineStartSmart: function (cm) { | |
| return cm.extendSelectionsBy( | |
| function (range) { | |
| return lineStartSmart(cm, range.head); | |
| }, | |
| { origin: "+move", bias: 1 } | |
| ); | |
| }, | |
| goLineEnd: function (cm) { | |
| return cm.extendSelectionsBy( | |
| function (range) { | |
| return lineEnd(cm, range.head.line); | |
| }, | |
| { origin: "+move", bias: -1 } | |
| ); | |
| }, | |
| goLineRight: function (cm) { | |
| return cm.extendSelectionsBy(function (range) { | |
| var top = cm.cursorCoords(range.head, "div").top + 5; | |
| return cm.coordsChar( | |
| { left: cm.display.lineDiv.offsetWidth + 100, top: top }, | |
| "div" | |
| ); | |
| }, sel_move); | |
| }, | |
| goLineLeft: function (cm) { | |
| return cm.extendSelectionsBy(function (range) { | |
| var top = cm.cursorCoords(range.head, "div").top + 5; | |
| return cm.coordsChar({ left: 0, top: top }, "div"); | |
| }, sel_move); | |
| }, | |
| goLineLeftSmart: function (cm) { | |
| return cm.extendSelectionsBy(function (range) { | |
| var top = cm.cursorCoords(range.head, "div").top + 5; | |
| var pos = cm.coordsChar({ left: 0, top: top }, "div"); | |
| if (pos.ch < cm.getLine(pos.line).search(/\S/)) { | |
| return lineStartSmart(cm, range.head); | |
| } | |
| return pos; | |
| }, sel_move); | |
| }, | |
| goLineUp: function (cm) { | |
| return cm.moveV(-1, "line"); | |
| }, | |
| goLineDown: function (cm) { | |
| return cm.moveV(1, "line"); | |
| }, | |
| goPageUp: function (cm) { | |
| return cm.moveV(-1, "page"); | |
| }, | |
| goPageDown: function (cm) { | |
| return cm.moveV(1, "page"); | |
| }, | |
| goCharLeft: function (cm) { | |
| return cm.moveH(-1, "char"); | |
| }, | |
| goCharRight: function (cm) { | |
| return cm.moveH(1, "char"); | |
| }, | |
| goColumnLeft: function (cm) { | |
| return cm.moveH(-1, "column"); | |
| }, | |
| goColumnRight: function (cm) { | |
| return cm.moveH(1, "column"); | |
| }, | |
| goWordLeft: function (cm) { | |
| return cm.moveH(-1, "word"); | |
| }, | |
| goGroupRight: function (cm) { | |
| return cm.moveH(1, "group"); | |
| }, | |
| goGroupLeft: function (cm) { | |
| return cm.moveH(-1, "group"); | |
| }, | |
| goWordRight: function (cm) { | |
| return cm.moveH(1, "word"); | |
| }, | |
| delCharBefore: function (cm) { | |
| return cm.deleteH(-1, "char"); | |
| }, | |
| delCharAfter: function (cm) { | |
| return cm.deleteH(1, "char"); | |
| }, | |
| delWordBefore: function (cm) { | |
| return cm.deleteH(-1, "word"); | |
| }, | |
| delWordAfter: function (cm) { | |
| return cm.deleteH(1, "word"); | |
| }, | |
| delGroupBefore: function (cm) { | |
| return cm.deleteH(-1, "group"); | |
| }, | |
| delGroupAfter: function (cm) { | |
| return cm.deleteH(1, "group"); | |
| }, | |
| indentAuto: function (cm) { | |
| return cm.indentSelection("smart"); | |
| }, | |
| indentMore: function (cm) { | |
| return cm.indentSelection("add"); | |
| }, | |
| indentLess: function (cm) { | |
| return cm.indentSelection("subtract"); | |
| }, | |
| insertTab: function (cm) { | |
| return cm.replaceSelection("\t"); | |
| }, | |
| insertSoftTab: function (cm) { | |
| var spaces = [], | |
| ranges = cm.listSelections(), | |
| tabSize = cm.options.tabSize; | |
| for (var i = 0; i < ranges.length; i++) { | |
| var pos = ranges[i].from(); | |
| var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); | |
| spaces.push(spaceStr(tabSize - (col % tabSize))); | |
| } | |
| cm.replaceSelections(spaces); | |
| }, | |
| defaultTab: function (cm) { | |
| if (cm.somethingSelected()) { | |
| cm.indentSelection("add"); | |
| } else { | |
| cm.execCommand("insertTab"); | |
| } | |
| }, | |
| // Swap the two chars left and right of each selection's head. | |
| // Move cursor behind the two swapped characters afterwards. | |
| // | |
| // Doesn't consider line feeds a character. | |
| // Doesn't scan more than one line above to find a character. | |
| // Doesn't do anything on an empty line. | |
| // Doesn't do anything with non-empty selections. | |
| transposeChars: function (cm) { | |
| return runInOp(cm, function () { | |
| var ranges = cm.listSelections(), | |
| newSel = []; | |
| for (var i = 0; i < ranges.length; i++) { | |
| if (!ranges[i].empty()) { | |
| continue; | |
| } | |
| var cur = ranges[i].head, | |
| line = getLine(cm.doc, cur.line).text; | |
| if (line) { | |
| if (cur.ch == line.length) { | |
| cur = new Pos(cur.line, cur.ch - 1); | |
| } | |
| if (cur.ch > 0) { | |
| cur = new Pos(cur.line, cur.ch + 1); | |
| cm.replaceRange( | |
| line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), | |
| Pos(cur.line, cur.ch - 2), | |
| cur, | |
| "+transpose" | |
| ); | |
| } else if (cur.line > cm.doc.first) { | |
| var prev = getLine(cm.doc, cur.line - 1).text; | |
| if (prev) { | |
| cur = new Pos(cur.line, 1); | |
| cm.replaceRange( | |
| line.charAt(0) + | |
| cm.doc.lineSeparator() + | |
| prev.charAt(prev.length - 1), | |
| Pos(cur.line - 1, prev.length - 1), | |
| cur, | |
| "+transpose" | |
| ); | |
| } | |
| } | |
| } | |
| newSel.push(new Range(cur, cur)); | |
| } | |
| cm.setSelections(newSel); | |
| }); | |
| }, | |
| newlineAndIndent: function (cm) { | |
| return runInOp(cm, function () { | |
| var sels = cm.listSelections(); | |
| for (var i = sels.length - 1; i >= 0; i--) { | |
| cm.replaceRange( | |
| cm.doc.lineSeparator(), | |
| sels[i].anchor, | |
| sels[i].head, | |
| "+input" | |
| ); | |
| } | |
| sels = cm.listSelections(); | |
| for (var i$1 = 0; i$1 < sels.length; i$1++) { | |
| cm.indentLine(sels[i$1].from().line, null, true); | |
| } | |
| ensureCursorVisible(cm); | |
| }); | |
| }, | |
| openLine: function (cm) { | |
| return cm.replaceSelection("\n", "start"); | |
| }, | |
| toggleOverwrite: function (cm) { | |
| return cm.toggleOverwrite(); | |
| }, | |
| }; | |
| function lineStart(cm, lineN) { | |
| var line = getLine(cm.doc, lineN); | |
| var visual = visualLine(line); | |
| if (visual != line) { | |
| lineN = lineNo(visual); | |
| } | |
| return endOfLine(true, cm, visual, lineN, 1); | |
| } | |
| function lineEnd(cm, lineN) { | |
| var line = getLine(cm.doc, lineN); | |
| var visual = visualLineEnd(line); | |
| if (visual != line) { | |
| lineN = lineNo(visual); | |
| } | |
| return endOfLine(true, cm, line, lineN, -1); | |
| } | |
| function lineStartSmart(cm, pos) { | |
| var start = lineStart(cm, pos.line); | |
| var line = getLine(cm.doc, start.line); | |
| var order = getOrder(line, cm.doc.direction); | |
| if (!order || order[0].level == 0) { | |
| var firstNonWS = Math.max(0, line.text.search(/\S/)); | |
| var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; | |
| return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky); | |
| } | |
| return start; | |
| } | |
| // Run a handler that was bound to a key. | |
| function doHandleBinding(cm, bound, dropShift) { | |
| if (typeof bound == "string") { | |
| bound = commands[bound]; | |
| if (!bound) { | |
| return false; | |
| } | |
| } | |
| // Ensure previous input has been read, so that the handler sees a | |
| // consistent view of the document | |
| cm.display.input.ensurePolled(); | |
| var prevShift = cm.display.shift, | |
| done = false; | |
| try { | |
| if (cm.isReadOnly()) { | |
| cm.state.suppressEdits = true; | |
| } | |
| if (dropShift) { | |
| cm.display.shift = false; | |
| } | |
| done = bound(cm) != Pass; | |
| } finally { | |
| cm.display.shift = prevShift; | |
| cm.state.suppressEdits = false; | |
| } | |
| return done; | |
| } | |
| function lookupKeyForEditor(cm, name, handle) { | |
| for (var i = 0; i < cm.state.keyMaps.length; i++) { | |
| var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); | |
| if (result) { | |
| return result; | |
| } | |
| } | |
| return ( | |
| (cm.options.extraKeys && | |
| lookupKey(name, cm.options.extraKeys, handle, cm)) || | |
| lookupKey(name, cm.options.keyMap, handle, cm) | |
| ); | |
| } | |
| // Note that, despite the name, this function is also used to check | |
| // for bound mouse clicks. | |
| var stopSeq = new Delayed(); | |
| function dispatchKey(cm, name, e, handle) { | |
| var seq = cm.state.keySeq; | |
| if (seq) { | |
| if (isModifierKey(name)) { | |
| return "handled"; | |
| } | |
| stopSeq.set(50, function () { | |
| if (cm.state.keySeq == seq) { | |
| cm.state.keySeq = null; | |
| cm.display.input.reset(); | |
| } | |
| }); | |
| name = seq + " " + name; | |
| } | |
| var result = lookupKeyForEditor(cm, name, handle); | |
| if (result == "multi") { | |
| cm.state.keySeq = name; | |
| } | |
| if (result == "handled") { | |
| signalLater(cm, "keyHandled", cm, name, e); | |
| } | |
| if (result == "handled" || result == "multi") { | |
| e_preventDefault(e); | |
| restartBlink(cm); | |
| } | |
| if (seq && !result && /\'$/.test(name)) { | |
| e_preventDefault(e); | |
| return true; | |
| } | |
| return !!result; | |
| } | |
| // Handle a key from the keydown event. | |
| function handleKeyBinding(cm, e) { | |
| var name = keyName(e, true); | |
| if (!name) { | |
| return false; | |
| } | |
| if (e.shiftKey && !cm.state.keySeq) { | |
| // First try to resolve full name (including 'Shift-'). Failing | |
| // that, see if there is a cursor-motion command (starting with | |
| // 'go') bound to the keyname without 'Shift-'. | |
| return ( | |
| dispatchKey(cm, "Shift-" + name, e, function (b) { | |
| return doHandleBinding(cm, b, true); | |
| }) || | |
| dispatchKey(cm, name, e, function (b) { | |
| if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) { | |
| return doHandleBinding(cm, b); | |
| } | |
| }) | |
| ); | |
| } else { | |
| return dispatchKey(cm, name, e, function (b) { | |
| return doHandleBinding(cm, b); | |
| }); | |
| } | |
| } | |
| // Handle a key from the keypress event | |
| function handleCharBinding(cm, e, ch) { | |
| return dispatchKey(cm, "'" + ch + "'", e, function (b) { | |
| return doHandleBinding(cm, b, true); | |
| }); | |
| } | |
| var lastStoppedKey = null; | |
| function onKeyDown(e) { | |
| var cm = this; | |
| cm.curOp.focus = activeElt(); | |
| if (signalDOMEvent(cm, e)) { | |
| return; | |
| } | |
| // IE does strange things with escape. | |
| if (ie && ie_version < 11 && e.keyCode == 27) { | |
| e.returnValue = false; | |
| } | |
| var code = e.keyCode; | |
| cm.display.shift = code == 16 || e.shiftKey; | |
| var handled = handleKeyBinding(cm, e); | |
| if (presto) { | |
| lastStoppedKey = handled ? code : null; | |
| // Opera has no cut event... we try to at least catch the key combo | |
| if ( | |
| !handled && | |
| code == 88 && | |
| !hasCopyEvent && | |
| (mac ? e.metaKey : e.ctrlKey) | |
| ) { | |
| cm.replaceSelection("", null, "cut"); | |
| } | |
| } | |
| // Turn mouse into crosshair when Alt is held on Mac. | |
| if ( | |
| code == 18 && | |
| !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className) | |
| ) { | |
| showCrossHair(cm); | |
| } | |
| } | |
| function showCrossHair(cm) { | |
| var lineDiv = cm.display.lineDiv; | |
| addClass(lineDiv, "CodeMirror-crosshair"); | |
| function up(e) { | |
| if (e.keyCode == 18 || !e.altKey) { | |
| rmClass(lineDiv, "CodeMirror-crosshair"); | |
| off(document, "keyup", up); | |
| off(document, "mouseover", up); | |
| } | |
| } | |
| on(document, "keyup", up); | |
| on(document, "mouseover", up); | |
| } | |
| function onKeyUp(e) { | |
| if (e.keyCode == 16) { | |
| this.doc.sel.shift = false; | |
| } | |
| signalDOMEvent(this, e); | |
| } | |
| function onKeyPress(e) { | |
| var cm = this; | |
| if ( | |
| eventInWidget(cm.display, e) || | |
| signalDOMEvent(cm, e) || | |
| (e.ctrlKey && !e.altKey) || | |
| (mac && e.metaKey) | |
| ) { | |
| return; | |
| } | |
| var keyCode = e.keyCode, | |
| charCode = e.charCode; | |
| if (presto && keyCode == lastStoppedKey) { | |
| lastStoppedKey = null; | |
| e_preventDefault(e); | |
| return; | |
| } | |
| if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) { | |
| return; | |
| } | |
| var ch = String.fromCharCode(charCode == null ? keyCode : charCode); | |
| // Some browsers fire keypress events for backspace | |
| if (ch == "\x08") { | |
| return; | |
| } | |
| if (handleCharBinding(cm, e, ch)) { | |
| return; | |
| } | |
| cm.display.input.onKeyPress(e); | |
| } | |
| var DOUBLECLICK_DELAY = 400; | |
| var PastClick = function (time, pos, button) { | |
| this.time = time; | |
| this.pos = pos; | |
| this.button = button; | |
| }; | |
| PastClick.prototype.compare = function (time, pos, button) { | |
| return ( | |
| this.time + DOUBLECLICK_DELAY > time && | |
| cmp(pos, this.pos) == 0 && | |
| button == this.button | |
| ); | |
| }; | |
| var lastClick; | |
| var lastDoubleClick; | |
| function clickRepeat(pos, button) { | |
| var now = +new Date(); | |
| if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { | |
| lastClick = lastDoubleClick = null; | |
| return "triple"; | |
| } else if (lastClick && lastClick.compare(now, pos, button)) { | |
| lastDoubleClick = new PastClick(now, pos, button); | |
| lastClick = null; | |
| return "double"; | |
| } else { | |
| lastClick = new PastClick(now, pos, button); | |
| lastDoubleClick = null; | |
| return "single"; | |
| } | |
| } | |
| // A mouse down can be a single click, double click, triple click, | |
| // start of selection drag, start of text drag, new cursor | |
| // (ctrl-click), rectangle drag (alt-drag), or xwin | |
| // middle-click-paste. Or it might be a click on something we should | |
| // not interfere with, such as a scrollbar or widget. | |
| function onMouseDown(e) { | |
| var cm = this, | |
| display = cm.display; | |
| if ( | |
| signalDOMEvent(cm, e) || | |
| (display.activeTouch && display.input.supportsTouch()) | |
| ) { | |
| return; | |
| } | |
| display.input.ensurePolled(); | |
| display.shift = e.shiftKey; | |
| if (eventInWidget(display, e)) { | |
| if (!webkit) { | |
| // Briefly turn off draggability, to allow widgets to do | |
| // normal dragging things. | |
| display.scroller.draggable = false; | |
| setTimeout(function () { | |
| return (display.scroller.draggable = true); | |
| }, 100); | |
| } | |
| return; | |
| } | |
| if (clickInGutter(cm, e)) { | |
| return; | |
| } | |
| var pos = posFromMouse(cm, e), | |
| button = e_button(e), | |
| repeat = pos ? clickRepeat(pos, button) : "single"; | |
| window.focus(); | |
| // #3261: make sure, that we're not starting a second selection | |
| if (button == 1 && cm.state.selectingText) { | |
| cm.state.selectingText(e); | |
| } | |
| if (pos && handleMappedButton(cm, button, pos, repeat, e)) { | |
| return; | |
| } | |
| if (button == 1) { | |
| if (pos) { | |
| leftButtonDown(cm, pos, repeat, e); | |
| } else if (e_target(e) == display.scroller) { | |
| e_preventDefault(e); | |
| } | |
| } else if (button == 2) { | |
| if (pos) { | |
| extendSelection(cm.doc, pos); | |
| } | |
| setTimeout(function () { | |
| return display.input.focus(); | |
| }, 20); | |
| } else if (button == 3) { | |
| if (captureRightClick) { | |
| onContextMenu(cm, e); | |
| } else { | |
| delayBlurEvent(cm); | |
| } | |
| } | |
| } | |
| function handleMappedButton(cm, button, pos, repeat, event) { | |
| var name = "Click"; | |
| if (repeat == "double") { | |
| name = "Double" + name; | |
| } else if (repeat == "triple") { | |
| name = "Triple" + name; | |
| } | |
| name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; | |
| return dispatchKey( | |
| cm, | |
| addModifierNames(name, event), | |
| event, | |
| function (bound) { | |
| if (typeof bound == "string") { | |
| bound = commands[bound]; | |
| } | |
| if (!bound) { | |
| return false; | |
| } | |
| var done = false; | |
| try { | |
| if (cm.isReadOnly()) { | |
| cm.state.suppressEdits = true; | |
| } | |
| done = bound(cm, pos) != Pass; | |
| } finally { | |
| cm.state.suppressEdits = false; | |
| } | |
| return done; | |
| } | |
| ); | |
| } | |
| function configureMouse(cm, repeat, event) { | |
| var option = cm.getOption("configureMouse"); | |
| var value = option ? option(cm, repeat, event) : {}; | |
| if (value.unit == null) { | |
| var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; | |
| value.unit = rect | |
| ? "rectangle" | |
| : repeat == "single" | |
| ? "char" | |
| : repeat == "double" | |
| ? "word" | |
| : "line"; | |
| } | |
| if (value.extend == null || cm.doc.extend) { | |
| value.extend = cm.doc.extend || event.shiftKey; | |
| } | |
| if (value.addNew == null) { | |
| value.addNew = mac ? event.metaKey : event.ctrlKey; | |
| } | |
| if (value.moveOnDrag == null) { | |
| value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); | |
| } | |
| return value; | |
| } | |
| function leftButtonDown(cm, pos, repeat, event) { | |
| if (ie) { | |
| setTimeout(bind(ensureFocus, cm), 0); | |
| } else { | |
| cm.curOp.focus = activeElt(); | |
| } | |
| var behavior = configureMouse(cm, repeat, event); | |
| var sel = cm.doc.sel, | |
| contained; | |
| if ( | |
| cm.options.dragDrop && | |
| dragAndDrop && | |
| !cm.isReadOnly() && | |
| repeat == "single" && | |
| (contained = sel.contains(pos)) > -1 && | |
| (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || | |
| pos.xRel > 0) && | |
| (cmp(contained.to(), pos) > 0 || pos.xRel < 0) | |
| ) { | |
| leftButtonStartDrag(cm, event, pos, behavior); | |
| } else { | |
| leftButtonSelect(cm, event, pos, behavior); | |
| } | |
| } | |
| // Start a text drag. When it ends, see if any dragging actually | |
| // happen, and treat as a click if it didn't. | |
| function leftButtonStartDrag(cm, event, pos, behavior) { | |
| var display = cm.display, | |
| moved = false; | |
| var dragEnd = operation(cm, function (e) { | |
| if (webkit) { | |
| display.scroller.draggable = false; | |
| } | |
| cm.state.draggingText = false; | |
| off(document, "mouseup", dragEnd); | |
| off(document, "mousemove", mouseMove); | |
| off(display.scroller, "dragstart", dragStart); | |
| off(display.scroller, "drop", dragEnd); | |
| if (!moved) { | |
| e_preventDefault(e); | |
| if (!behavior.addNew) { | |
| extendSelection(cm.doc, pos, null, null, behavior.extend); | |
| } | |
| // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) | |
| if (webkit || (ie && ie_version == 9)) { | |
| setTimeout(function () { | |
| document.body.focus(); | |
| display.input.focus(); | |
| }, 20); | |
| } else { | |
| display.input.focus(); | |
| } | |
| } | |
| }); | |
| var mouseMove = function (e2) { | |
| moved = | |
| moved || | |
| Math.abs(event.clientX - e2.clientX) + | |
| Math.abs(event.clientY - e2.clientY) >= | |
| 10; | |
| }; | |
| var dragStart = function () { | |
| return (moved = true); | |
| }; | |
| // Let the drag handler handle this. | |
| if (webkit) { | |
| display.scroller.draggable = true; | |
| } | |
| cm.state.draggingText = dragEnd; | |
| dragEnd.copy = !behavior.moveOnDrag; | |
| // IE's approach to draggable | |
| if (display.scroller.dragDrop) { | |
| display.scroller.dragDrop(); | |
| } | |
| on(document, "mouseup", dragEnd); | |
| on(document, "mousemove", mouseMove); | |
| on(display.scroller, "dragstart", dragStart); | |
| on(display.scroller, "drop", dragEnd); | |
| delayBlurEvent(cm); | |
| setTimeout(function () { | |
| return display.input.focus(); | |
| }, 20); | |
| } | |
| function rangeForUnit(cm, pos, unit) { | |
| if (unit == "char") { | |
| return new Range(pos, pos); | |
| } | |
| if (unit == "word") { | |
| return cm.findWordAt(pos); | |
| } | |
| if (unit == "line") { | |
| return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); | |
| } | |
| var result = unit(cm, pos); | |
| return new Range(result.from, result.to); | |
| } | |
| // Normal selection, as opposed to text dragging. | |
| function leftButtonSelect(cm, event, start, behavior) { | |
| var display = cm.display, | |
| doc = cm.doc; | |
| e_preventDefault(event); | |
| var ourRange, | |
| ourIndex, | |
| startSel = doc.sel, | |
| ranges = startSel.ranges; | |
| if (behavior.addNew && !behavior.extend) { | |
| ourIndex = doc.sel.contains(start); | |
| if (ourIndex > -1) { | |
| ourRange = ranges[ourIndex]; | |
| } else { | |
| ourRange = new Range(start, start); | |
| } | |
| } else { | |
| ourRange = doc.sel.primary(); | |
| ourIndex = doc.sel.primIndex; | |
| } | |
| if (behavior.unit == "rectangle") { | |
| if (!behavior.addNew) { | |
| ourRange = new Range(start, start); | |
| } | |
| start = posFromMouse(cm, event, true, true); | |
| ourIndex = -1; | |
| } else { | |
| var range = rangeForUnit(cm, start, behavior.unit); | |
| if (behavior.extend) { | |
| ourRange = extendRange( | |
| ourRange, | |
| range.anchor, | |
| range.head, | |
| behavior.extend | |
| ); | |
| } else { | |
| ourRange = range; | |
| } | |
| } | |
| if (!behavior.addNew) { | |
| ourIndex = 0; | |
| setSelection(doc, new Selection([ourRange], 0), sel_mouse); | |
| startSel = doc.sel; | |
| } else if (ourIndex == -1) { | |
| ourIndex = ranges.length; | |
| setSelection( | |
| doc, | |
| normalizeSelection(ranges.concat([ourRange]), ourIndex), | |
| { scroll: false, origin: "*mouse" } | |
| ); | |
| } else if ( | |
| ranges.length > 1 && | |
| ranges[ourIndex].empty() && | |
| behavior.unit == "char" && | |
| !behavior.extend | |
| ) { | |
| setSelection( | |
| doc, | |
| normalizeSelection( | |
| ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), | |
| 0 | |
| ), | |
| { scroll: false, origin: "*mouse" } | |
| ); | |
| startSel = doc.sel; | |
| } else { | |
| replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); | |
| } | |
| var lastPos = start; | |
| function extendTo(pos) { | |
| if (cmp(lastPos, pos) == 0) { | |
| return; | |
| } | |
| lastPos = pos; | |
| if (behavior.unit == "rectangle") { | |
| var ranges = [], | |
| tabSize = cm.options.tabSize; | |
| var startCol = countColumn( | |
| getLine(doc, start.line).text, | |
| start.ch, | |
| tabSize | |
| ); | |
| var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); | |
| var left = Math.min(startCol, posCol), | |
| right = Math.max(startCol, posCol); | |
| for ( | |
| var line = Math.min(start.line, pos.line), | |
| end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); | |
| line <= end; | |
| line++ | |
| ) { | |
| var text = getLine(doc, line).text, | |
| leftPos = findColumn(text, left, tabSize); | |
| if (left == right) { | |
| ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); | |
| } else if (text.length > leftPos) { | |
| ranges.push( | |
| new Range( | |
| Pos(line, leftPos), | |
| Pos(line, findColumn(text, right, tabSize)) | |
| ) | |
| ); | |
| } | |
| } | |
| if (!ranges.length) { | |
| ranges.push(new Range(start, start)); | |
| } | |
| setSelection( | |
| doc, | |
| normalizeSelection( | |
| startSel.ranges.slice(0, ourIndex).concat(ranges), | |
| ourIndex | |
| ), | |
| { origin: "*mouse", scroll: false } | |
| ); | |
| cm.scrollIntoView(pos); | |
| } else { | |
| var oldRange = ourRange; | |
| var range = rangeForUnit(cm, pos, behavior.unit); | |
| var anchor = oldRange.anchor, | |
| head; | |
| if (cmp(range.anchor, anchor) > 0) { | |
| head = range.head; | |
| anchor = minPos(oldRange.from(), range.anchor); | |
| } else { | |
| head = range.anchor; | |
| anchor = maxPos(oldRange.to(), range.head); | |
| } | |
| var ranges$1 = startSel.ranges.slice(0); | |
| ranges$1[ourIndex] = new Range(clipPos(doc, anchor), head); | |
| setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse); | |
| } | |
| } | |
| var editorSize = display.wrapper.getBoundingClientRect(); | |
| // Used to ensure timeout re-tries don't fire when another extend | |
| // happened in the meantime (clearTimeout isn't reliable -- at | |
| // least on Chrome, the timeouts still happen even when cleared, | |
| // if the clear happens after their scheduled firing time). | |
| var counter = 0; | |
| function extend(e) { | |
| var curCount = ++counter; | |
| var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); | |
| if (!cur) { | |
| return; | |
| } | |
| if (cmp(cur, lastPos) != 0) { | |
| cm.curOp.focus = activeElt(); | |
| extendTo(cur); | |
| var visible = visibleLines(display, doc); | |
| if (cur.line >= visible.to || cur.line < visible.from) { | |
| setTimeout( | |
| operation(cm, function () { | |
| if (counter == curCount) { | |
| extend(e); | |
| } | |
| }), | |
| 150 | |
| ); | |
| } | |
| } else { | |
| var outside = | |
| e.clientY < editorSize.top | |
| ? -20 | |
| : e.clientY > editorSize.bottom | |
| ? 20 | |
| : 0; | |
| if (outside) { | |
| setTimeout( | |
| operation(cm, function () { | |
| if (counter != curCount) { | |
| return; | |
| } | |
| display.scroller.scrollTop += outside; | |
| extend(e); | |
| }), | |
| 50 | |
| ); | |
| } | |
| } | |
| } | |
| function done(e) { | |
| cm.state.selectingText = false; | |
| counter = Infinity; | |
| e_preventDefault(e); | |
| display.input.focus(); | |
| off(document, "mousemove", move); | |
| off(document, "mouseup", up); | |
| doc.history.lastSelOrigin = null; | |
| } | |
| var move = operation(cm, function (e) { | |
| if (!e_button(e)) { | |
| done(e); | |
| } else { | |
| extend(e); | |
| } | |
| }); | |
| var up = operation(cm, done); | |
| cm.state.selectingText = up; | |
| on(document, "mousemove", move); | |
| on(document, "mouseup", up); | |
| } | |
| // Determines whether an event happened in the gutter, and fires the | |
| // handlers for the corresponding event. | |
| function gutterEvent(cm, e, type, prevent) { | |
| var mX, mY; | |
| try { | |
| mX = e.clientX; | |
| mY = e.clientY; | |
| } catch (e) { | |
| return false; | |
| } | |
| if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { | |
| return false; | |
| } | |
| if (prevent) { | |
| e_preventDefault(e); | |
| } | |
| var display = cm.display; | |
| var lineBox = display.lineDiv.getBoundingClientRect(); | |
| if (mY > lineBox.bottom || !hasHandler(cm, type)) { | |
| return e_defaultPrevented(e); | |
| } | |
| mY -= lineBox.top - display.viewOffset; | |
| for (var i = 0; i < cm.options.gutters.length; ++i) { | |
| var g = display.gutters.childNodes[i]; | |
| if (g && g.getBoundingClientRect().right >= mX) { | |
| var line = lineAtHeight(cm.doc, mY); | |
| var gutter = cm.options.gutters[i]; | |
| signal(cm, type, cm, line, gutter, e); | |
| return e_defaultPrevented(e); | |
| } | |
| } | |
| } | |
| function clickInGutter(cm, e) { | |
| return gutterEvent(cm, e, "gutterClick", true); | |
| } | |
| // CONTEXT MENU HANDLING | |
| // To make the context menu work, we need to briefly unhide the | |
| // textarea (making it as unobtrusive as possible) to let the | |
| // right-click take effect on it. | |
| function onContextMenu(cm, e) { | |
| if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { | |
| return; | |
| } | |
| if (signalDOMEvent(cm, e, "contextmenu")) { | |
| return; | |
| } | |
| cm.display.input.onContextMenu(e); | |
| } | |
| function contextMenuInGutter(cm, e) { | |
| if (!hasHandler(cm, "gutterContextMenu")) { | |
| return false; | |
| } | |
| return gutterEvent(cm, e, "gutterContextMenu", false); | |
| } | |
| function themeChanged(cm) { | |
| cm.display.wrapper.className = | |
| cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + | |
| cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); | |
| clearCaches(cm); | |
| } | |
| var Init = { | |
| toString: function () { | |
| return "CodeMirror.Init"; | |
| }, | |
| }; | |
| var defaults = {}; | |
| var optionHandlers = {}; | |
| function defineOptions(CodeMirror) { | |
| var optionHandlers = CodeMirror.optionHandlers; | |
| function option(name, deflt, handle, notOnInit) { | |
| CodeMirror.defaults[name] = deflt; | |
| if (handle) { | |
| optionHandlers[name] = notOnInit | |
| ? function (cm, val, old) { | |
| if (old != Init) { | |
| handle(cm, val, old); | |
| } | |
| } | |
| : handle; | |
| } | |
| } | |
| CodeMirror.defineOption = option; | |
| // Passed to option handlers when there is no old value. | |
| CodeMirror.Init = Init; | |
| // These two are, on init, called from the constructor because they | |
| // have to be initialized before the editor can start at all. | |
| option( | |
| "value", | |
| "", | |
| function (cm, val) { | |
| return cm.setValue(val); | |
| }, | |
| true | |
| ); | |
| option( | |
| "mode", | |
| null, | |
| function (cm, val) { | |
| cm.doc.modeOption = val; | |
| loadMode(cm); | |
| }, | |
| true | |
| ); | |
| option("indentUnit", 2, loadMode, true); | |
| option("indentWithTabs", false); | |
| option("smartIndent", true); | |
| option( | |
| "tabSize", | |
| 4, | |
| function (cm) { | |
| resetModeState(cm); | |
| clearCaches(cm); | |
| regChange(cm); | |
| }, | |
| true | |
| ); | |
| option("lineSeparator", null, function (cm, val) { | |
| cm.doc.lineSep = val; | |
| if (!val) { | |
| return; | |
| } | |
| var newBreaks = [], | |
| lineNo = cm.doc.first; | |
| cm.doc.iter(function (line) { | |
| for (var pos = 0; ; ) { | |
| var found = line.text.indexOf(val, pos); | |
| if (found == -1) { | |
| break; | |
| } | |
| pos = found + val.length; | |
| newBreaks.push(Pos(lineNo, found)); | |
| } | |
| lineNo++; | |
| }); | |
| for (var i = newBreaks.length - 1; i >= 0; i--) { | |
| replaceRange( | |
| cm.doc, | |
| val, | |
| newBreaks[i], | |
| Pos(newBreaks[i].line, newBreaks[i].ch + val.length) | |
| ); | |
| } | |
| }); | |
| option( | |
| "specialChars", | |
| /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, | |
| function (cm, val, old) { | |
| cm.state.specialChars = new RegExp( | |
| val.source + (val.test("\t") ? "" : "|\t"), | |
| "g" | |
| ); | |
| if (old != Init) { | |
| cm.refresh(); | |
| } | |
| } | |
| ); | |
| option( | |
| "specialCharPlaceholder", | |
| defaultSpecialCharPlaceholder, | |
| function (cm) { | |
| return cm.refresh(); | |
| }, | |
| true | |
| ); | |
| option("electricChars", true); | |
| option( | |
| "inputStyle", | |
| mobile ? "contenteditable" : "textarea", | |
| function () { | |
| throw new Error( | |
| "inputStyle can not (yet) be changed in a running editor" | |
| ); // FIXME | |
| }, | |
| true | |
| ); | |
| option( | |
| "spellcheck", | |
| false, | |
| function (cm, val) { | |
| return (cm.getInputField().spellcheck = val); | |
| }, | |
| true | |
| ); | |
| option("rtlMoveVisually", !windows); | |
| option("wholeLineUpdateBefore", true); | |
| option( | |
| "theme", | |
| "default", | |
| function (cm) { | |
| themeChanged(cm); | |
| guttersChanged(cm); | |
| }, | |
| true | |
| ); | |
| option("keyMap", "default", function (cm, val, old) { | |
| var next = getKeyMap(val); | |
| var prev = old != Init && getKeyMap(old); | |
| if (prev && prev.detach) { | |
| prev.detach(cm, next); | |
| } | |
| if (next.attach) { | |
| next.attach(cm, prev || null); | |
| } | |
| }); | |
| option("extraKeys", null); | |
| option("configureMouse", null); | |
| option("lineWrapping", false, wrappingChanged, true); | |
| option( | |
| "gutters", | |
| [], | |
| function (cm) { | |
| setGuttersForLineNumbers(cm.options); | |
| guttersChanged(cm); | |
| }, | |
| true | |
| ); | |
| option( | |
| "fixedGutter", | |
| true, | |
| function (cm, val) { | |
| cm.display.gutters.style.left = val | |
| ? compensateForHScroll(cm.display) + "px" | |
| : "0"; | |
| cm.refresh(); | |
| }, | |
| true | |
| ); | |
| option( | |
| "coverGutterNextToScrollbar", | |
| false, | |
| function (cm) { | |
| return updateScrollbars(cm); | |
| }, | |
| true | |
| ); | |
| option( | |
| "scrollbarStyle", | |
| "native", | |
| function (cm) { | |
| initScrollbars(cm); | |
| updateScrollbars(cm); | |
| cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); | |
| cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); | |
| }, | |
| true | |
| ); | |
| option( | |
| "lineNumbers", | |
| false, | |
| function (cm) { | |
| setGuttersForLineNumbers(cm.options); | |
| guttersChanged(cm); | |
| }, | |
| true | |
| ); | |
| option("firstLineNumber", 1, guttersChanged, true); | |
| option( | |
| "lineNumberFormatter", | |
| function (integer) { | |
| return integer; | |
| }, | |
| guttersChanged, | |
| true | |
| ); | |
| option("showCursorWhenSelecting", false, updateSelection, true); | |
| option("resetSelectionOnContextMenu", true); | |
| option("lineWiseCopyCut", true); | |
| option("pasteLinesPerSelection", true); | |
| option("readOnly", false, function (cm, val) { | |
| if (val == "nocursor") { | |
| onBlur(cm); | |
| cm.display.input.blur(); | |
| } | |
| cm.display.input.readOnlyChanged(val); | |
| }); | |
| option( | |
| "disableInput", | |
| false, | |
| function (cm, val) { | |
| if (!val) { | |
| cm.display.input.reset(); | |
| } | |
| }, | |
| true | |
| ); | |
| option("dragDrop", true, dragDropChanged); | |
| option("allowDropFileTypes", null); | |
| option("cursorBlinkRate", 530); | |
| option("cursorScrollMargin", 0); | |
| option("cursorHeight", 1, updateSelection, true); | |
| option("singleCursorHeightPerLine", true, updateSelection, true); | |
| option("workTime", 100); | |
| option("workDelay", 100); | |
| option("flattenSpans", true, resetModeState, true); | |
| option("addModeClass", false, resetModeState, true); | |
| option("pollInterval", 100); | |
| option("undoDepth", 200, function (cm, val) { | |
| return (cm.doc.history.undoDepth = val); | |
| }); | |
| option("historyEventDelay", 1250); | |
| option( | |
| "viewportMargin", | |
| 10, | |
| function (cm) { | |
| return cm.refresh(); | |
| }, | |
| true | |
| ); | |
| option("maxHighlightLength", 10000, resetModeState, true); | |
| option("moveInputWithCursor", true, function (cm, val) { | |
| if (!val) { | |
| cm.display.input.resetPosition(); | |
| } | |
| }); | |
| option("tabindex", null, function (cm, val) { | |
| return (cm.display.input.getField().tabIndex = val || ""); | |
| }); | |
| option("autofocus", null); | |
| option( | |
| "direction", | |
| "ltr", | |
| function (cm, val) { | |
| return cm.doc.setDirection(val); | |
| }, | |
| true | |
| ); | |
| } | |
| function guttersChanged(cm) { | |
| updateGutters(cm); | |
| regChange(cm); | |
| alignHorizontally(cm); | |
| } | |
| function dragDropChanged(cm, value, old) { | |
| var wasOn = old && old != Init; | |
| if (!value != !wasOn) { | |
| var funcs = cm.display.dragFunctions; | |
| var toggle = value ? on : off; | |
| toggle(cm.display.scroller, "dragstart", funcs.start); | |
| toggle(cm.display.scroller, "dragenter", funcs.enter); | |
| toggle(cm.display.scroller, "dragover", funcs.over); | |
| toggle(cm.display.scroller, "dragleave", funcs.leave); | |
| toggle(cm.display.scroller, "drop", funcs.drop); | |
| } | |
| } | |
| function wrappingChanged(cm) { | |
| if (cm.options.lineWrapping) { | |
| addClass(cm.display.wrapper, "CodeMirror-wrap"); | |
| cm.display.sizer.style.minWidth = ""; | |
| cm.display.sizerWidth = null; | |
| } else { | |
| rmClass(cm.display.wrapper, "CodeMirror-wrap"); | |
| findMaxLine(cm); | |
| } | |
| estimateLineHeights(cm); | |
| regChange(cm); | |
| clearCaches(cm); | |
| setTimeout(function () { | |
| return updateScrollbars(cm); | |
| }, 100); | |
| } | |
| // A CodeMirror instance represents an editor. This is the object | |
| // that user code is usually dealing with. | |
| function CodeMirror(place, options) { | |
| var this$1 = this; | |
| if (!(this instanceof CodeMirror)) { | |
| return new CodeMirror(place, options); | |
| } | |
| this.options = options = options ? copyObj(options) : {}; | |
| // Determine effective options based on given values and defaults. | |
| copyObj(defaults, options, false); | |
| setGuttersForLineNumbers(options); | |
| var doc = options.value; | |
| if (typeof doc == "string") { | |
| doc = new Doc( | |
| doc, | |
| options.mode, | |
| null, | |
| options.lineSeparator, | |
| options.direction | |
| ); | |
| } | |
| this.doc = doc; | |
| var input = new CodeMirror.inputStyles[options.inputStyle](this); | |
| var display = (this.display = new Display(place, doc, input)); | |
| display.wrapper.CodeMirror = this; | |
| updateGutters(this); | |
| themeChanged(this); | |
| if (options.lineWrapping) { | |
| this.display.wrapper.className += " CodeMirror-wrap"; | |
| } | |
| initScrollbars(this); | |
| this.state = { | |
| keyMaps: [], // stores maps added by addKeyMap | |
| overlays: [], // highlighting overlays, as added by addOverlay | |
| modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info | |
| overwrite: false, | |
| delayingBlurEvent: false, | |
| focused: false, | |
| suppressEdits: false, // used to disable editing during key handlers when in readOnly mode | |
| pasteIncoming: false, | |
| cutIncoming: false, // help recognize paste/cut edits in input.poll | |
| selectingText: false, | |
| draggingText: false, | |
| highlight: new Delayed(), // stores highlight worker timeout | |
| keySeq: null, // Unfinished key sequence | |
| specialChars: null, | |
| }; | |
| if (options.autofocus && !mobile) { | |
| display.input.focus(); | |
| } | |
| // Override magic textarea content restore that IE sometimes does | |
| // on our hidden textarea on reload | |
| if (ie && ie_version < 11) { | |
| setTimeout(function () { | |
| return this$1.display.input.reset(true); | |
| }, 20); | |
| } | |
| registerEventHandlers(this); | |
| ensureGlobalHandlers(); | |
| startOperation(this); | |
| this.curOp.forceUpdate = true; | |
| attachDoc(this, doc); | |
| if ((options.autofocus && !mobile) || this.hasFocus()) { | |
| setTimeout(bind(onFocus, this), 20); | |
| } else { | |
| onBlur(this); | |
| } | |
| for (var opt in optionHandlers) { | |
| if (optionHandlers.hasOwnProperty(opt)) { | |
| optionHandlers[opt](this$1, options[opt], Init); | |
| } | |
| } | |
| maybeUpdateLineNumberWidth(this); | |
| if (options.finishInit) { | |
| options.finishInit(this); | |
| } | |
| for (var i = 0; i < initHooks.length; ++i) { | |
| initHooks[i](this$1); | |
| } | |
| endOperation(this); | |
| // Suppress optimizelegibility in Webkit, since it breaks text | |
| // measuring on line wrapping boundaries. | |
| if ( | |
| webkit && | |
| options.lineWrapping && | |
| getComputedStyle(display.lineDiv).textRendering == "optimizelegibility" | |
| ) { | |
| display.lineDiv.style.textRendering = "auto"; | |
| } | |
| } | |
| // The default configuration options. | |
| CodeMirror.defaults = defaults; | |
| // Functions to run when options are changed. | |
| CodeMirror.optionHandlers = optionHandlers; | |
| // Attach the necessary event handlers when initializing the editor | |
| function registerEventHandlers(cm) { | |
| var d = cm.display; | |
| on(d.scroller, "mousedown", operation(cm, onMouseDown)); | |
| // Older IE's will not fire a second mousedown for a double click | |
| if (ie && ie_version < 11) { | |
| on( | |
| d.scroller, | |
| "dblclick", | |
| operation(cm, function (e) { | |
| if (signalDOMEvent(cm, e)) { | |
| return; | |
| } | |
| var pos = posFromMouse(cm, e); | |
| if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { | |
| return; | |
| } | |
| e_preventDefault(e); | |
| var word = cm.findWordAt(pos); | |
| extendSelection(cm.doc, word.anchor, word.head); | |
| }) | |
| ); | |
| } else { | |
| on(d.scroller, "dblclick", function (e) { | |
| return signalDOMEvent(cm, e) || e_preventDefault(e); | |
| }); | |
| } | |
| // Some browsers fire contextmenu *after* opening the menu, at | |
| // which point we can't mess with it anymore. Context menu is | |
| // handled in onMouseDown for these browsers. | |
| if (!captureRightClick) { | |
| on(d.scroller, "contextmenu", function (e) { | |
| return onContextMenu(cm, e); | |
| }); | |
| } | |
| // Used to suppress mouse event handling when a touch happens | |
| var touchFinished, | |
| prevTouch = { end: 0 }; | |
| function finishTouch() { | |
| if (d.activeTouch) { | |
| touchFinished = setTimeout(function () { | |
| return (d.activeTouch = null); | |
| }, 1000); | |
| prevTouch = d.activeTouch; | |
| prevTouch.end = +new Date(); | |
| } | |
| } | |
| function isMouseLikeTouchEvent(e) { | |
| if (e.touches.length != 1) { | |
| return false; | |
| } | |
| var touch = e.touches[0]; | |
| return touch.radiusX <= 1 && touch.radiusY <= 1; | |
| } | |
| function farAway(touch, other) { | |
| if (other.left == null) { | |
| return true; | |
| } | |
| var dx = other.left - touch.left, | |
| dy = other.top - touch.top; | |
| return dx * dx + dy * dy > 20 * 20; | |
| } | |
| on(d.scroller, "touchstart", function (e) { | |
| if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { | |
| d.input.ensurePolled(); | |
| clearTimeout(touchFinished); | |
| var now = +new Date(); | |
| d.activeTouch = { | |
| start: now, | |
| moved: false, | |
| prev: now - prevTouch.end <= 300 ? prevTouch : null, | |
| }; | |
| if (e.touches.length == 1) { | |
| d.activeTouch.left = e.touches[0].pageX; | |
| d.activeTouch.top = e.touches[0].pageY; | |
| } | |
| } | |
| }); | |
| on(d.scroller, "touchmove", function () { | |
| if (d.activeTouch) { | |
| d.activeTouch.moved = true; | |
| } | |
| }); | |
| on(d.scroller, "touchend", function (e) { | |
| var touch = d.activeTouch; | |
| if ( | |
| touch && | |
| !eventInWidget(d, e) && | |
| touch.left != null && | |
| !touch.moved && | |
| new Date() - touch.start < 300 | |
| ) { | |
| var pos = cm.coordsChar(d.activeTouch, "page"), | |
| range; | |
| if (!touch.prev || farAway(touch, touch.prev)) { | |
| // Single tap | |
| range = new Range(pos, pos); | |
| } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) { | |
| // Double tap | |
| range = cm.findWordAt(pos); | |
| } // Triple tap | |
| else { | |
| range = new Range( | |
| Pos(pos.line, 0), | |
| clipPos(cm.doc, Pos(pos.line + 1, 0)) | |
| ); | |
| } | |
| cm.setSelection(range.anchor, range.head); | |
| cm.focus(); | |
| e_preventDefault(e); | |
| } | |
| finishTouch(); | |
| }); | |
| on(d.scroller, "touchcancel", finishTouch); | |
| // Sync scrolling between fake scrollbars and real scrollable | |
| // area, ensure viewport is updated when scrolling. | |
| on(d.scroller, "scroll", function () { | |
| if (d.scroller.clientHeight) { | |
| updateScrollTop(cm, d.scroller.scrollTop); | |
| setScrollLeft(cm, d.scroller.scrollLeft, true); | |
| signal(cm, "scroll", cm); | |
| } | |
| }); | |
| // Listen to wheel events in order to try and update the viewport on time. | |
| on(d.scroller, "mousewheel", function (e) { | |
| return onScrollWheel(cm, e); | |
| }); | |
| on(d.scroller, "DOMMouseScroll", function (e) { | |
| return onScrollWheel(cm, e); | |
| }); | |
| // Prevent wrapper from ever scrolling | |
| on(d.wrapper, "scroll", function () { | |
| return (d.wrapper.scrollTop = d.wrapper.scrollLeft = 0); | |
| }); | |
| d.dragFunctions = { | |
| enter: function (e) { | |
| if (!signalDOMEvent(cm, e)) { | |
| e_stop(e); | |
| } | |
| }, | |
| over: function (e) { | |
| if (!signalDOMEvent(cm, e)) { | |
| onDragOver(cm, e); | |
| e_stop(e); | |
| } | |
| }, | |
| start: function (e) { | |
| return onDragStart(cm, e); | |
| }, | |
| drop: operation(cm, onDrop), | |
| leave: function (e) { | |
| if (!signalDOMEvent(cm, e)) { | |
| clearDragCursor(cm); | |
| } | |
| }, | |
| }; | |
| var inp = d.input.getField(); | |
| on(inp, "keyup", function (e) { | |
| return onKeyUp.call(cm, e); | |
| }); | |
| on(inp, "keydown", operation(cm, onKeyDown)); | |
| on(inp, "keypress", operation(cm, onKeyPress)); | |
| on(inp, "focus", function (e) { | |
| return onFocus(cm, e); | |
| }); | |
| on(inp, "blur", function (e) { | |
| return onBlur(cm, e); | |
| }); | |
| } | |
| var initHooks = []; | |
| CodeMirror.defineInitHook = function (f) { | |
| return initHooks.push(f); | |
| }; | |
| // Indent the given line. The how parameter can be "smart", | |
| // "add"/null, "subtract", or "prev". When aggressive is false | |
| // (typically set to true for forced single-line indents), empty | |
| // lines are not indented, and places where the mode returns Pass | |
| // are left alone. | |
| function indentLine(cm, n, how, aggressive) { | |
| var doc = cm.doc, | |
| state; | |
| if (how == null) { | |
| how = "add"; | |
| } | |
| if (how == "smart") { | |
| // Fall back to "prev" when the mode doesn't have an indentation | |
| // method. | |
| if (!doc.mode.indent) { | |
| how = "prev"; | |
| } else { | |
| state = getContextBefore(cm, n).state; | |
| } | |
| } | |
| var tabSize = cm.options.tabSize; | |
| var line = getLine(doc, n), | |
| curSpace = countColumn(line.text, null, tabSize); | |
| if (line.stateAfter) { | |
| line.stateAfter = null; | |
| } | |
| var curSpaceString = line.text.match(/^\s*/)[0], | |
| indentation; | |
| if (!aggressive && !/\S/.test(line.text)) { | |
| indentation = 0; | |
| how = "not"; | |
| } else if (how == "smart") { | |
| indentation = doc.mode.indent( | |
| state, | |
| line.text.slice(curSpaceString.length), | |
| line.text | |
| ); | |
| if (indentation == Pass || indentation > 150) { | |
| if (!aggressive) { | |
| return; | |
| } | |
| how = "prev"; | |
| } | |
| } | |
| if (how == "prev") { | |
| if (n > doc.first) { | |
| indentation = countColumn(getLine(doc, n - 1).text, null, tabSize); | |
| } else { | |
| indentation = 0; | |
| } | |
| } else if (how == "add") { | |
| indentation = curSpace + cm.options.indentUnit; | |
| } else if (how == "subtract") { | |
| indentation = curSpace - cm.options.indentUnit; | |
| } else if (typeof how == "number") { | |
| indentation = curSpace + how; | |
| } | |
| indentation = Math.max(0, indentation); | |
| var indentString = "", | |
| pos = 0; | |
| if (cm.options.indentWithTabs) { | |
| for (var i = Math.floor(indentation / tabSize); i; --i) { | |
| pos += tabSize; | |
| indentString += "\t"; | |
| } | |
| } | |
| if (pos < indentation) { | |
| indentString += spaceStr(indentation - pos); | |
| } | |
| if (indentString != curSpaceString) { | |
| replaceRange( | |
| doc, | |
| indentString, | |
| Pos(n, 0), | |
| Pos(n, curSpaceString.length), | |
| "+input" | |
| ); | |
| line.stateAfter = null; | |
| return true; | |
| } else { | |
| // Ensure that, if the cursor was in the whitespace at the start | |
| // of the line, it is moved to the end of that space. | |
| for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { | |
| var range = doc.sel.ranges[i$1]; | |
| if (range.head.line == n && range.head.ch < curSpaceString.length) { | |
| var pos$1 = Pos(n, curSpaceString.length); | |
| replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| // This will be set to a {lineWise: bool, text: [string]} object, so | |
| // that, when pasting, we know what kind of selections the copied | |
| // text was made out of. | |
| var lastCopied = null; | |
| function setLastCopied(newLastCopied) { | |
| lastCopied = newLastCopied; | |
| } | |
| function applyTextInput(cm, inserted, deleted, sel, origin) { | |
| var doc = cm.doc; | |
| cm.display.shift = false; | |
| if (!sel) { | |
| sel = doc.sel; | |
| } | |
| var paste = cm.state.pasteIncoming || origin == "paste"; | |
| var textLines = splitLinesAuto(inserted), | |
| multiPaste = null; | |
| // When pasing N lines into N selections, insert one line per selection | |
| if (paste && sel.ranges.length > 1) { | |
| if (lastCopied && lastCopied.text.join("\n") == inserted) { | |
| if (sel.ranges.length % lastCopied.text.length == 0) { | |
| multiPaste = []; | |
| for (var i = 0; i < lastCopied.text.length; i++) { | |
| multiPaste.push(doc.splitLines(lastCopied.text[i])); | |
| } | |
| } | |
| } else if ( | |
| textLines.length == sel.ranges.length && | |
| cm.options.pasteLinesPerSelection | |
| ) { | |
| multiPaste = map(textLines, function (l) { | |
| return [l]; | |
| }); | |
| } | |
| } | |
| var updateInput; | |
| // Normal behavior is to insert the new text into every selection | |
| for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { | |
| var range = sel.ranges[i$1]; | |
| var from = range.from(), | |
| to = range.to(); | |
| if (range.empty()) { | |
| if (deleted && deleted > 0) { | |
| // Handle deletion | |
| from = Pos(from.line, from.ch - deleted); | |
| } else if (cm.state.overwrite && !paste) { | |
| // Handle overwrite | |
| to = Pos( | |
| to.line, | |
| Math.min( | |
| getLine(doc, to.line).text.length, | |
| to.ch + lst(textLines).length | |
| ) | |
| ); | |
| } else if ( | |
| lastCopied && | |
| lastCopied.lineWise && | |
| lastCopied.text.join("\n") == inserted | |
| ) { | |
| from = to = Pos(from.line, 0); | |
| } | |
| } | |
| updateInput = cm.curOp.updateInput; | |
| var changeEvent = { | |
| from: from, | |
| to: to, | |
| text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, | |
| origin: | |
| origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input"), | |
| }; | |
| makeChange(cm.doc, changeEvent); | |
| signalLater(cm, "inputRead", cm, changeEvent); | |
| } | |
| if (inserted && !paste) { | |
| triggerElectric(cm, inserted); | |
| } | |
| ensureCursorVisible(cm); | |
| cm.curOp.updateInput = updateInput; | |
| cm.curOp.typing = true; | |
| cm.state.pasteIncoming = cm.state.cutIncoming = false; | |
| } | |
| function handlePaste(e, cm) { | |
| var pasted = e.clipboardData && e.clipboardData.getData("Text"); | |
| if (pasted) { | |
| e.preventDefault(); | |
| if (!cm.isReadOnly() && !cm.options.disableInput) { | |
| runInOp(cm, function () { | |
| return applyTextInput(cm, pasted, 0, null, "paste"); | |
| }); | |
| } | |
| return true; | |
| } | |
| } | |
| function triggerElectric(cm, inserted) { | |
| // When an 'electric' character is inserted, immediately trigger a reindent | |
| if (!cm.options.electricChars || !cm.options.smartIndent) { | |
| return; | |
| } | |
| var sel = cm.doc.sel; | |
| for (var i = sel.ranges.length - 1; i >= 0; i--) { | |
| var range = sel.ranges[i]; | |
| if ( | |
| range.head.ch > 100 || | |
| (i && sel.ranges[i - 1].head.line == range.head.line) | |
| ) { | |
| continue; | |
| } | |
| var mode = cm.getModeAt(range.head); | |
| var indented = false; | |
| if (mode.electricChars) { | |
| for (var j = 0; j < mode.electricChars.length; j++) { | |
| if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { | |
| indented = indentLine(cm, range.head.line, "smart"); | |
| break; | |
| } | |
| } | |
| } else if (mode.electricInput) { | |
| if ( | |
| mode.electricInput.test( | |
| getLine(cm.doc, range.head.line).text.slice(0, range.head.ch) | |
| ) | |
| ) { | |
| indented = indentLine(cm, range.head.line, "smart"); | |
| } | |
| } | |
| if (indented) { | |
| signalLater(cm, "electricInput", cm, range.head.line); | |
| } | |
| } | |
| } | |
| function copyableRanges(cm) { | |
| var text = [], | |
| ranges = []; | |
| for (var i = 0; i < cm.doc.sel.ranges.length; i++) { | |
| var line = cm.doc.sel.ranges[i].head.line; | |
| var lineRange = { anchor: Pos(line, 0), head: Pos(line + 1, 0) }; | |
| ranges.push(lineRange); | |
| text.push(cm.getRange(lineRange.anchor, lineRange.head)); | |
| } | |
| return { text: text, ranges: ranges }; | |
| } | |
| function disableBrowserMagic(field, spellcheck) { | |
| field.setAttribute("autocorrect", "off"); | |
| field.setAttribute("autocapitalize", "off"); | |
| field.setAttribute("spellcheck", !!spellcheck); | |
| } | |
| function hiddenTextarea() { | |
| var te = elt( | |
| "textarea", | |
| null, | |
| null, | |
| "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none" | |
| ); | |
| var div = elt( | |
| "div", | |
| [te], | |
| null, | |
| "overflow: hidden; position: relative; width: 3px; height: 0px;" | |
| ); | |
| // The textarea is kept positioned near the cursor to prevent the | |
| // fact that it'll be scrolled into view on input from scrolling | |
| // our fake cursor out of view. On webkit, when wrap=off, paste is | |
| // very slow. So make the area wide instead. | |
| if (webkit) { | |
| te.style.width = "1000px"; | |
| } else { | |
| te.setAttribute("wrap", "off"); | |
| } | |
| // If border: 0; -- iOS fails to open keyboard (issue #1287) | |
| if (ios) { | |
| te.style.border = "1px solid black"; | |
| } | |
| disableBrowserMagic(te); | |
| return div; | |
| } | |
| // The publicly visible API. Note that methodOp(f) means | |
| // 'wrap f in an operation, performed on its `this` parameter'. | |
| // This is not the complete set of editor methods. Most of the | |
| // methods defined on the Doc type are also injected into | |
| // CodeMirror.prototype, for backwards compatibility and | |
| // convenience. | |
| function addEditorMethods(CodeMirror) { | |
| var optionHandlers = CodeMirror.optionHandlers; | |
| var helpers = (CodeMirror.helpers = {}); | |
| CodeMirror.prototype = { | |
| constructor: CodeMirror, | |
| focus: function () { | |
| window.focus(); | |
| this.display.input.focus(); | |
| }, | |
| setOption: function (option, value) { | |
| var options = this.options, | |
| old = options[option]; | |
| if (options[option] == value && option != "mode") { | |
| return; | |
| } | |
| options[option] = value; | |
| if (optionHandlers.hasOwnProperty(option)) { | |
| operation(this, optionHandlers[option])(this, value, old); | |
| } | |
| signal(this, "optionChange", this, option); | |
| }, | |
| getOption: function (option) { | |
| return this.options[option]; | |
| }, | |
| getDoc: function () { | |
| return this.doc; | |
| }, | |
| addKeyMap: function (map, bottom) { | |
| this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); | |
| }, | |
| removeKeyMap: function (map) { | |
| var maps = this.state.keyMaps; | |
| for (var i = 0; i < maps.length; ++i) { | |
| if (maps[i] == map || maps[i].name == map) { | |
| maps.splice(i, 1); | |
| return true; | |
| } | |
| } | |
| }, | |
| addOverlay: methodOp(function (spec, options) { | |
| var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); | |
| if (mode.startState) { | |
| throw new Error("Overlays may not be stateful."); | |
| } | |
| insertSorted( | |
| this.state.overlays, | |
| { | |
| mode: mode, | |
| modeSpec: spec, | |
| opaque: options && options.opaque, | |
| priority: (options && options.priority) || 0, | |
| }, | |
| function (overlay) { | |
| return overlay.priority; | |
| } | |
| ); | |
| this.state.modeGen++; | |
| regChange(this); | |
| }), | |
| removeOverlay: methodOp(function (spec) { | |
| var this$1 = this; | |
| var overlays = this.state.overlays; | |
| for (var i = 0; i < overlays.length; ++i) { | |
| var cur = overlays[i].modeSpec; | |
| if (cur == spec || (typeof spec == "string" && cur.name == spec)) { | |
| overlays.splice(i, 1); | |
| this$1.state.modeGen++; | |
| regChange(this$1); | |
| return; | |
| } | |
| } | |
| }), | |
| indentLine: methodOp(function (n, dir, aggressive) { | |
| if (typeof dir != "string" && typeof dir != "number") { | |
| if (dir == null) { | |
| dir = this.options.smartIndent ? "smart" : "prev"; | |
| } else { | |
| dir = dir ? "add" : "subtract"; | |
| } | |
| } | |
| if (isLine(this.doc, n)) { | |
| indentLine(this, n, dir, aggressive); | |
| } | |
| }), | |
| indentSelection: methodOp(function (how) { | |
| var this$1 = this; | |
| var ranges = this.doc.sel.ranges, | |
| end = -1; | |
| for (var i = 0; i < ranges.length; i++) { | |
| var range = ranges[i]; | |
| if (!range.empty()) { | |
| var from = range.from(), | |
| to = range.to(); | |
| var start = Math.max(end, from.line); | |
| end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; | |
| for (var j = start; j < end; ++j) { | |
| indentLine(this$1, j, how); | |
| } | |
| var newRanges = this$1.doc.sel.ranges; | |
| if ( | |
| from.ch == 0 && | |
| ranges.length == newRanges.length && | |
| newRanges[i].from().ch > 0 | |
| ) { | |
| replaceOneSelection( | |
| this$1.doc, | |
| i, | |
| new Range(from, newRanges[i].to()), | |
| sel_dontScroll | |
| ); | |
| } | |
| } else if (range.head.line > end) { | |
| indentLine(this$1, range.head.line, how, true); | |
| end = range.head.line; | |
| if (i == this$1.doc.sel.primIndex) { | |
| ensureCursorVisible(this$1); | |
| } | |
| } | |
| } | |
| }), | |
| // Fetch the parser token for a given character. Useful for hacks | |
| // that want to inspect the mode state (say, for completion). | |
| getTokenAt: function (pos, precise) { | |
| return takeToken(this, pos, precise); | |
| }, | |
| getLineTokens: function (line, precise) { | |
| return takeToken(this, Pos(line), precise, true); | |
| }, | |
| getTokenTypeAt: function (pos) { | |
| pos = clipPos(this.doc, pos); | |
| var styles = getLineStyles(this, getLine(this.doc, pos.line)); | |
| var before = 0, | |
| after = (styles.length - 1) / 2, | |
| ch = pos.ch; | |
| var type; | |
| if (ch == 0) { | |
| type = styles[2]; | |
| } else { | |
| for (;;) { | |
| var mid = (before + after) >> 1; | |
| if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { | |
| after = mid; | |
| } else if (styles[mid * 2 + 1] < ch) { | |
| before = mid + 1; | |
| } else { | |
| type = styles[mid * 2 + 2]; | |
| break; | |
| } | |
| } | |
| } | |
| var cut = type ? type.indexOf("overlay ") : -1; | |
| return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); | |
| }, | |
| getModeAt: function (pos) { | |
| var mode = this.doc.mode; | |
| if (!mode.innerMode) { | |
| return mode; | |
| } | |
| return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; | |
| }, | |
| getHelper: function (pos, type) { | |
| return this.getHelpers(pos, type)[0]; | |
| }, | |
| getHelpers: function (pos, type) { | |
| var this$1 = this; | |
| var found = []; | |
| if (!helpers.hasOwnProperty(type)) { | |
| return found; | |
| } | |
| var help = helpers[type], | |
| mode = this.getModeAt(pos); | |
| if (typeof mode[type] == "string") { | |
| if (help[mode[type]]) { | |
| found.push(help[mode[type]]); | |
| } | |
| } else if (mode[type]) { | |
| for (var i = 0; i < mode[type].length; i++) { | |
| var val = help[mode[type][i]]; | |
| if (val) { | |
| found.push(val); | |
| } | |
| } | |
| } else if (mode.helperType && help[mode.helperType]) { | |
| found.push(help[mode.helperType]); | |
| } else if (help[mode.name]) { | |
| found.push(help[mode.name]); | |
| } | |
| for (var i$1 = 0; i$1 < help._global.length; i$1++) { | |
| var cur = help._global[i$1]; | |
| if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1) { | |
| found.push(cur.val); | |
| } | |
| } | |
| return found; | |
| }, | |
| getStateAfter: function (line, precise) { | |
| var doc = this.doc; | |
| line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line); | |
| return getContextBefore(this, line + 1, precise).state; | |
| }, | |
| cursorCoords: function (start, mode) { | |
| var pos, | |
| range = this.doc.sel.primary(); | |
| if (start == null) { | |
| pos = range.head; | |
| } else if (typeof start == "object") { | |
| pos = clipPos(this.doc, start); | |
| } else { | |
| pos = start ? range.from() : range.to(); | |
| } | |
| return cursorCoords(this, pos, mode || "page"); | |
| }, | |
| charCoords: function (pos, mode) { | |
| return charCoords(this, clipPos(this.doc, pos), mode || "page"); | |
| }, | |
| coordsChar: function (coords, mode) { | |
| coords = fromCoordSystem(this, coords, mode || "page"); | |
| return coordsChar(this, coords.left, coords.top); | |
| }, | |
| lineAtHeight: function (height, mode) { | |
| height = fromCoordSystem( | |
| this, | |
| { top: height, left: 0 }, | |
| mode || "page" | |
| ).top; | |
| return lineAtHeight(this.doc, height + this.display.viewOffset); | |
| }, | |
| heightAtLine: function (line, mode, includeWidgets) { | |
| var end = false, | |
| lineObj; | |
| if (typeof line == "number") { | |
| var last = this.doc.first + this.doc.size - 1; | |
| if (line < this.doc.first) { | |
| line = this.doc.first; | |
| } else if (line > last) { | |
| line = last; | |
| end = true; | |
| } | |
| lineObj = getLine(this.doc, line); | |
| } else { | |
| lineObj = line; | |
| } | |
| return ( | |
| intoCoordSystem( | |
| this, | |
| lineObj, | |
| { top: 0, left: 0 }, | |
| mode || "page", | |
| includeWidgets || end | |
| ).top + (end ? this.doc.height - heightAtLine(lineObj) : 0) | |
| ); | |
| }, | |
| defaultTextHeight: function () { | |
| return textHeight(this.display); | |
| }, | |
| defaultCharWidth: function () { | |
| return charWidth(this.display); | |
| }, | |
| getViewport: function () { | |
| return { from: this.display.viewFrom, to: this.display.viewTo }; | |
| }, | |
| addWidget: function (pos, node, scroll, vert, horiz) { | |
| var display = this.display; | |
| pos = cursorCoords(this, clipPos(this.doc, pos)); | |
| var top = pos.bottom, | |
| left = pos.left; | |
| node.style.position = "absolute"; | |
| node.setAttribute("cm-ignore-events", "true"); | |
| this.display.input.setUneditable(node); | |
| display.sizer.appendChild(node); | |
| if (vert == "over") { | |
| top = pos.top; | |
| } else if (vert == "above" || vert == "near") { | |
| var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), | |
| hspace = Math.max( | |
| display.sizer.clientWidth, | |
| display.lineSpace.clientWidth | |
| ); | |
| // Default to positioning above (if specified and possible); otherwise default to positioning below | |
| if ( | |
| (vert == "above" || pos.bottom + node.offsetHeight > vspace) && | |
| pos.top > node.offsetHeight | |
| ) { | |
| top = pos.top - node.offsetHeight; | |
| } else if (pos.bottom + node.offsetHeight <= vspace) { | |
| top = pos.bottom; | |
| } | |
| if (left + node.offsetWidth > hspace) { | |
| left = hspace - node.offsetWidth; | |
| } | |
| } | |
| node.style.top = top + "px"; | |
| node.style.left = node.style.right = ""; | |
| if (horiz == "right") { | |
| left = display.sizer.clientWidth - node.offsetWidth; | |
| node.style.right = "0px"; | |
| } else { | |
| if (horiz == "left") { | |
| left = 0; | |
| } else if (horiz == "middle") { | |
| left = (display.sizer.clientWidth - node.offsetWidth) / 2; | |
| } | |
| node.style.left = left + "px"; | |
| } | |
| if (scroll) { | |
| scrollIntoView(this, { | |
| left: left, | |
| top: top, | |
| right: left + node.offsetWidth, | |
| bottom: top + node.offsetHeight, | |
| }); | |
| } | |
| }, | |
| triggerOnKeyDown: methodOp(onKeyDown), | |
| triggerOnKeyPress: methodOp(onKeyPress), | |
| triggerOnKeyUp: onKeyUp, | |
| triggerOnMouseDown: methodOp(onMouseDown), | |
| execCommand: function (cmd) { | |
| if (commands.hasOwnProperty(cmd)) { | |
| return commands[cmd].call(null, this); | |
| } | |
| }, | |
| triggerElectric: methodOp(function (text) { | |
| triggerElectric(this, text); | |
| }), | |
| findPosH: function (from, amount, unit, visually) { | |
| var this$1 = this; | |
| var dir = 1; | |
| if (amount < 0) { | |
| dir = -1; | |
| amount = -amount; | |
| } | |
| var cur = clipPos(this.doc, from); | |
| for (var i = 0; i < amount; ++i) { | |
| cur = findPosH(this$1.doc, cur, dir, unit, visually); | |
| if (cur.hitSide) { | |
| break; | |
| } | |
| } | |
| return cur; | |
| }, | |
| moveH: methodOp(function (dir, unit) { | |
| var this$1 = this; | |
| this.extendSelectionsBy(function (range) { | |
| if (this$1.display.shift || this$1.doc.extend || range.empty()) { | |
| return findPosH( | |
| this$1.doc, | |
| range.head, | |
| dir, | |
| unit, | |
| this$1.options.rtlMoveVisually | |
| ); | |
| } else { | |
| return dir < 0 ? range.from() : range.to(); | |
| } | |
| }, sel_move); | |
| }), | |
| deleteH: methodOp(function (dir, unit) { | |
| var sel = this.doc.sel, | |
| doc = this.doc; | |
| if (sel.somethingSelected()) { | |
| doc.replaceSelection("", null, "+delete"); | |
| } else { | |
| deleteNearSelection(this, function (range) { | |
| var other = findPosH(doc, range.head, dir, unit, false); | |
| return dir < 0 | |
| ? { from: other, to: range.head } | |
| : { from: range.head, to: other }; | |
| }); | |
| } | |
| }), | |
| findPosV: function (from, amount, unit, goalColumn) { | |
| var this$1 = this; | |
| var dir = 1, | |
| x = goalColumn; | |
| if (amount < 0) { | |
| dir = -1; | |
| amount = -amount; | |
| } | |
| var cur = clipPos(this.doc, from); | |
| for (var i = 0; i < amount; ++i) { | |
| var coords = cursorCoords(this$1, cur, "div"); | |
| if (x == null) { | |
| x = coords.left; | |
| } else { | |
| coords.left = x; | |
| } | |
| cur = findPosV(this$1, coords, dir, unit); | |
| if (cur.hitSide) { | |
| break; | |
| } | |
| } | |
| return cur; | |
| }, | |
| moveV: methodOp(function (dir, unit) { | |
| var this$1 = this; | |
| var doc = this.doc, | |
| goals = []; | |
| var collapse = | |
| !this.display.shift && !doc.extend && doc.sel.somethingSelected(); | |
| doc.extendSelectionsBy(function (range) { | |
| if (collapse) { | |
| return dir < 0 ? range.from() : range.to(); | |
| } | |
| var headPos = cursorCoords(this$1, range.head, "div"); | |
| if (range.goalColumn != null) { | |
| headPos.left = range.goalColumn; | |
| } | |
| goals.push(headPos.left); | |
| var pos = findPosV(this$1, headPos, dir, unit); | |
| if (unit == "page" && range == doc.sel.primary()) { | |
| addToScrollTop( | |
| this$1, | |
| charCoords(this$1, pos, "div").top - headPos.top | |
| ); | |
| } | |
| return pos; | |
| }, sel_move); | |
| if (goals.length) { | |
| for (var i = 0; i < doc.sel.ranges.length; i++) { | |
| doc.sel.ranges[i].goalColumn = goals[i]; | |
| } | |
| } | |
| }), | |
| // Find the word at the given position (as returned by coordsChar). | |
| findWordAt: function (pos) { | |
| var doc = this.doc, | |
| line = getLine(doc, pos.line).text; | |
| var start = pos.ch, | |
| end = pos.ch; | |
| if (line) { | |
| var helper = this.getHelper(pos, "wordChars"); | |
| if ((pos.sticky == "before" || end == line.length) && start) { | |
| --start; | |
| } else { | |
| ++end; | |
| } | |
| var startChar = line.charAt(start); | |
| var check = isWordChar(startChar, helper) | |
| ? function (ch) { | |
| return isWordChar(ch, helper); | |
| } | |
| : /\s/.test(startChar) | |
| ? function (ch) { | |
| return /\s/.test(ch); | |
| } | |
| : function (ch) { | |
| return !/\s/.test(ch) && !isWordChar(ch); | |
| }; | |
| while (start > 0 && check(line.charAt(start - 1))) { | |
| --start; | |
| } | |
| while (end < line.length && check(line.charAt(end))) { | |
| ++end; | |
| } | |
| } | |
| return new Range(Pos(pos.line, start), Pos(pos.line, end)); | |
| }, | |
| toggleOverwrite: function (value) { | |
| if (value != null && value == this.state.overwrite) { | |
| return; | |
| } | |
| if ((this.state.overwrite = !this.state.overwrite)) { | |
| addClass(this.display.cursorDiv, "CodeMirror-overwrite"); | |
| } else { | |
| rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); | |
| } | |
| signal(this, "overwriteToggle", this, this.state.overwrite); | |
| }, | |
| hasFocus: function () { | |
| return this.display.input.getField() == activeElt(); | |
| }, | |
| isReadOnly: function () { | |
| return !!(this.options.readOnly || this.doc.cantEdit); | |
| }, | |
| scrollTo: methodOp(function (x, y) { | |
| scrollToCoords(this, x, y); | |
| }), | |
| getScrollInfo: function () { | |
| var scroller = this.display.scroller; | |
| return { | |
| left: scroller.scrollLeft, | |
| top: scroller.scrollTop, | |
| height: | |
| scroller.scrollHeight - scrollGap(this) - this.display.barHeight, | |
| width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, | |
| clientHeight: displayHeight(this), | |
| clientWidth: displayWidth(this), | |
| }; | |
| }, | |
| scrollIntoView: methodOp(function (range, margin) { | |
| if (range == null) { | |
| range = { from: this.doc.sel.primary().head, to: null }; | |
| if (margin == null) { | |
| margin = this.options.cursorScrollMargin; | |
| } | |
| } else if (typeof range == "number") { | |
| range = { from: Pos(range, 0), to: null }; | |
| } else if (range.from == null) { | |
| range = { from: range, to: null }; | |
| } | |
| if (!range.to) { | |
| range.to = range.from; | |
| } | |
| range.margin = margin || 0; | |
| if (range.from.line != null) { | |
| scrollToRange(this, range); | |
| } else { | |
| scrollToCoordsRange(this, range.from, range.to, range.margin); | |
| } | |
| }), | |
| setSize: methodOp(function (width, height) { | |
| var this$1 = this; | |
| var interpret = function (val) { | |
| return typeof val == "number" || /^\d+$/.test(String(val)) | |
| ? val + "px" | |
| : val; | |
| }; | |
| if (width != null) { | |
| this.display.wrapper.style.width = interpret(width); | |
| } | |
| if (height != null) { | |
| this.display.wrapper.style.height = interpret(height); | |
| } | |
| if (this.options.lineWrapping) { | |
| clearLineMeasurementCache(this); | |
| } | |
| var lineNo = this.display.viewFrom; | |
| this.doc.iter(lineNo, this.display.viewTo, function (line) { | |
| if (line.widgets) { | |
| for (var i = 0; i < line.widgets.length; i++) { | |
| if (line.widgets[i].noHScroll) { | |
| regLineChange(this$1, lineNo, "widget"); | |
| break; | |
| } | |
| } | |
| } | |
| ++lineNo; | |
| }); | |
| this.curOp.forceUpdate = true; | |
| signal(this, "refresh", this); | |
| }), | |
| operation: function (f) { | |
| return runInOp(this, f); | |
| }, | |
| startOperation: function () { | |
| return startOperation(this); | |
| }, | |
| endOperation: function () { | |
| return endOperation(this); | |
| }, | |
| refresh: methodOp(function () { | |
| var oldHeight = this.display.cachedTextHeight; | |
| regChange(this); | |
| this.curOp.forceUpdate = true; | |
| clearCaches(this); | |
| scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); | |
| updateGutterSpace(this); | |
| if ( | |
| oldHeight == null || | |
| Math.abs(oldHeight - textHeight(this.display)) > 0.5 | |
| ) { | |
| estimateLineHeights(this); | |
| } | |
| signal(this, "refresh", this); | |
| }), | |
| swapDoc: methodOp(function (doc) { | |
| var old = this.doc; | |
| old.cm = null; | |
| attachDoc(this, doc); | |
| clearCaches(this); | |
| this.display.input.reset(); | |
| scrollToCoords(this, doc.scrollLeft, doc.scrollTop); | |
| this.curOp.forceScroll = true; | |
| signalLater(this, "swapDoc", this, old); | |
| return old; | |
| }), | |
| getInputField: function () { | |
| return this.display.input.getField(); | |
| }, | |
| getWrapperElement: function () { | |
| return this.display.wrapper; | |
| }, | |
| getScrollerElement: function () { | |
| return this.display.scroller; | |
| }, | |
| getGutterElement: function () { | |
| return this.display.gutters; | |
| }, | |
| }; | |
| eventMixin(CodeMirror); | |
| CodeMirror.registerHelper = function (type, name, value) { | |
| if (!helpers.hasOwnProperty(type)) { | |
| helpers[type] = CodeMirror[type] = { _global: [] }; | |
| } | |
| helpers[type][name] = value; | |
| }; | |
| CodeMirror.registerGlobalHelper = function (type, name, predicate, value) { | |
| CodeMirror.registerHelper(type, name, value); | |
| helpers[type]._global.push({ pred: predicate, val: value }); | |
| }; | |
| } | |
| // Used for horizontal relative motion. Dir is -1 or 1 (left or | |
| // right), unit can be "char", "column" (like char, but doesn't | |
| // cross line boundaries), "word" (across next word), or "group" (to | |
| // the start of next group of word or non-word-non-whitespace | |
| // chars). The visually param controls whether, in right-to-left | |
| // text, direction 1 means to move towards the next index in the | |
| // string, or towards the character to the right of the current | |
| // position. The resulting position will have a hitSide=true | |
| // property if it reached the end of the document. | |
| function findPosH(doc, pos, dir, unit, visually) { | |
| var oldPos = pos; | |
| var origDir = dir; | |
| var lineObj = getLine(doc, pos.line); | |
| function findNextLine() { | |
| var l = pos.line + dir; | |
| if (l < doc.first || l >= doc.first + doc.size) { | |
| return false; | |
| } | |
| pos = new Pos(l, pos.ch, pos.sticky); | |
| return (lineObj = getLine(doc, l)); | |
| } | |
| function moveOnce(boundToLine) { | |
| var next; | |
| if (visually) { | |
| next = moveVisually(doc.cm, lineObj, pos, dir); | |
| } else { | |
| next = moveLogically(lineObj, pos, dir); | |
| } | |
| if (next == null) { | |
| if (!boundToLine && findNextLine()) { | |
| pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); | |
| } else { | |
| return false; | |
| } | |
| } else { | |
| pos = next; | |
| } | |
| return true; | |
| } | |
| if (unit == "char") { | |
| moveOnce(); | |
| } else if (unit == "column") { | |
| moveOnce(true); | |
| } else if (unit == "word" || unit == "group") { | |
| var sawType = null, | |
| group = unit == "group"; | |
| var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); | |
| for (var first = true; ; first = false) { | |
| if (dir < 0 && !moveOnce(!first)) { | |
| break; | |
| } | |
| var cur = lineObj.text.charAt(pos.ch) || "\n"; | |
| var type = isWordChar(cur, helper) | |
| ? "w" | |
| : group && cur == "\n" | |
| ? "n" | |
| : !group || /\s/.test(cur) | |
| ? null | |
| : "p"; | |
| if (group && !first && !type) { | |
| type = "s"; | |
| } | |
| if (sawType && sawType != type) { | |
| if (dir < 0) { | |
| dir = 1; | |
| moveOnce(); | |
| pos.sticky = "after"; | |
| } | |
| break; | |
| } | |
| if (type) { | |
| sawType = type; | |
| } | |
| if (dir > 0 && !moveOnce(!first)) { | |
| break; | |
| } | |
| } | |
| } | |
| var result = skipAtomic(doc, pos, oldPos, origDir, true); | |
| if (equalCursorPos(oldPos, result)) { | |
| result.hitSide = true; | |
| } | |
| return result; | |
| } | |
| // For relative vertical movement. Dir may be -1 or 1. Unit can be | |
| // "page" or "line". The resulting position will have a hitSide=true | |
| // property if it reached the end of the document. | |
| function findPosV(cm, pos, dir, unit) { | |
| var doc = cm.doc, | |
| x = pos.left, | |
| y; | |
| if (unit == "page") { | |
| var pageSize = Math.min( | |
| cm.display.wrapper.clientHeight, | |
| window.innerHeight || document.documentElement.clientHeight | |
| ); | |
| var moveAmount = Math.max(pageSize - 0.5 * textHeight(cm.display), 3); | |
| y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; | |
| } else if (unit == "line") { | |
| y = dir > 0 ? pos.bottom + 3 : pos.top - 3; | |
| } | |
| var target; | |
| for (;;) { | |
| target = coordsChar(cm, x, y); | |
| if (!target.outside) { | |
| break; | |
| } | |
| if (dir < 0 ? y <= 0 : y >= doc.height) { | |
| target.hitSide = true; | |
| break; | |
| } | |
| y += dir * 5; | |
| } | |
| return target; | |
| } | |
| // CONTENTEDITABLE INPUT STYLE | |
| var ContentEditableInput = function (cm) { | |
| this.cm = cm; | |
| this.lastAnchorNode = | |
| this.lastAnchorOffset = | |
| this.lastFocusNode = | |
| this.lastFocusOffset = | |
| null; | |
| this.polling = new Delayed(); | |
| this.composing = null; | |
| this.gracePeriod = false; | |
| this.readDOMTimeout = null; | |
| }; | |
| ContentEditableInput.prototype.init = function (display) { | |
| var this$1 = this; | |
| var input = this, | |
| cm = input.cm; | |
| var div = (input.div = display.lineDiv); | |
| disableBrowserMagic(div, cm.options.spellcheck); | |
| on(div, "paste", function (e) { | |
| if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { | |
| return; | |
| } | |
| // IE doesn't fire input events, so we schedule a read for the pasted content in this way | |
| if (ie_version <= 11) { | |
| setTimeout( | |
| operation(cm, function () { | |
| return this$1.updateFromDOM(); | |
| }), | |
| 20 | |
| ); | |
| } | |
| }); | |
| on(div, "compositionstart", function (e) { | |
| this$1.composing = { data: e.data, done: false }; | |
| }); | |
| on(div, "compositionupdate", function (e) { | |
| if (!this$1.composing) { | |
| this$1.composing = { data: e.data, done: false }; | |
| } | |
| }); | |
| on(div, "compositionend", function (e) { | |
| if (this$1.composing) { | |
| if (e.data != this$1.composing.data) { | |
| this$1.readFromDOMSoon(); | |
| } | |
| this$1.composing.done = true; | |
| } | |
| }); | |
| on(div, "touchstart", function () { | |
| return input.forceCompositionEnd(); | |
| }); | |
| on(div, "input", function () { | |
| if (!this$1.composing) { | |
| this$1.readFromDOMSoon(); | |
| } | |
| }); | |
| function onCopyCut(e) { | |
| if (signalDOMEvent(cm, e)) { | |
| return; | |
| } | |
| if (cm.somethingSelected()) { | |
| setLastCopied({ lineWise: false, text: cm.getSelections() }); | |
| if (e.type == "cut") { | |
| cm.replaceSelection("", null, "cut"); | |
| } | |
| } else if (!cm.options.lineWiseCopyCut) { | |
| return; | |
| } else { | |
| var ranges = copyableRanges(cm); | |
| setLastCopied({ lineWise: true, text: ranges.text }); | |
| if (e.type == "cut") { | |
| cm.operation(function () { | |
| cm.setSelections(ranges.ranges, 0, sel_dontScroll); | |
| cm.replaceSelection("", null, "cut"); | |
| }); | |
| } | |
| } | |
| if (e.clipboardData) { | |
| e.clipboardData.clearData(); | |
| var content = lastCopied.text.join("\n"); | |
| // iOS exposes the clipboard API, but seems to discard content inserted into it | |
| e.clipboardData.setData("Text", content); | |
| if (e.clipboardData.getData("Text") == content) { | |
| e.preventDefault(); | |
| return; | |
| } | |
| } | |
| // Old-fashioned briefly-focus-a-textarea hack | |
| var kludge = hiddenTextarea(), | |
| te = kludge.firstChild; | |
| cm.display.lineSpace.insertBefore( | |
| kludge, | |
| cm.display.lineSpace.firstChild | |
| ); | |
| te.value = lastCopied.text.join("\n"); | |
| var hadFocus = document.activeElement; | |
| selectInput(te); | |
| setTimeout(function () { | |
| cm.display.lineSpace.removeChild(kludge); | |
| hadFocus.focus(); | |
| if (hadFocus == div) { | |
| input.showPrimarySelection(); | |
| } | |
| }, 50); | |
| } | |
| on(div, "copy", onCopyCut); | |
| on(div, "cut", onCopyCut); | |
| }; | |
| ContentEditableInput.prototype.prepareSelection = function () { | |
| var result = prepareSelection(this.cm, false); | |
| result.focus = this.cm.state.focused; | |
| return result; | |
| }; | |
| ContentEditableInput.prototype.showSelection = function (info, takeFocus) { | |
| if (!info || !this.cm.display.view.length) { | |
| return; | |
| } | |
| if (info.focus || takeFocus) { | |
| this.showPrimarySelection(); | |
| } | |
| this.showMultipleSelections(info); | |
| }; | |
| ContentEditableInput.prototype.showPrimarySelection = function () { | |
| var sel = window.getSelection(), | |
| cm = this.cm, | |
| prim = cm.doc.sel.primary(); | |
| var from = prim.from(), | |
| to = prim.to(); | |
| if ( | |
| cm.display.viewTo == cm.display.viewFrom || | |
| from.line >= cm.display.viewTo || | |
| to.line < cm.display.viewFrom | |
| ) { | |
| sel.removeAllRanges(); | |
| return; | |
| } | |
| var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); | |
| var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); | |
| if ( | |
| curAnchor && | |
| !curAnchor.bad && | |
| curFocus && | |
| !curFocus.bad && | |
| cmp(minPos(curAnchor, curFocus), from) == 0 && | |
| cmp(maxPos(curAnchor, curFocus), to) == 0 | |
| ) { | |
| return; | |
| } | |
| var view = cm.display.view; | |
| var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || { | |
| node: view[0].measure.map[2], | |
| offset: 0, | |
| }; | |
| var end = to.line < cm.display.viewTo && posToDOM(cm, to); | |
| if (!end) { | |
| var measure = view[view.length - 1].measure; | |
| var map = measure.maps | |
| ? measure.maps[measure.maps.length - 1] | |
| : measure.map; | |
| end = { | |
| node: map[map.length - 1], | |
| offset: map[map.length - 2] - map[map.length - 3], | |
| }; | |
| } | |
| if (!start || !end) { | |
| sel.removeAllRanges(); | |
| return; | |
| } | |
| var old = sel.rangeCount && sel.getRangeAt(0), | |
| rng; | |
| try { | |
| rng = range(start.node, start.offset, end.offset, end.node); | |
| } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible | |
| if (rng) { | |
| if (!gecko && cm.state.focused) { | |
| sel.collapse(start.node, start.offset); | |
| if (!rng.collapsed) { | |
| sel.removeAllRanges(); | |
| sel.addRange(rng); | |
| } | |
| } else { | |
| sel.removeAllRanges(); | |
| sel.addRange(rng); | |
| } | |
| if (old && sel.anchorNode == null) { | |
| sel.addRange(old); | |
| } else if (gecko) { | |
| this.startGracePeriod(); | |
| } | |
| } | |
| this.rememberSelection(); | |
| }; | |
| ContentEditableInput.prototype.startGracePeriod = function () { | |
| var this$1 = this; | |
| clearTimeout(this.gracePeriod); | |
| this.gracePeriod = setTimeout(function () { | |
| this$1.gracePeriod = false; | |
| if (this$1.selectionChanged()) { | |
| this$1.cm.operation(function () { | |
| return (this$1.cm.curOp.selectionChanged = true); | |
| }); | |
| } | |
| }, 20); | |
| }; | |
| ContentEditableInput.prototype.showMultipleSelections = function (info) { | |
| removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); | |
| removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); | |
| }; | |
| ContentEditableInput.prototype.rememberSelection = function () { | |
| var sel = window.getSelection(); | |
| this.lastAnchorNode = sel.anchorNode; | |
| this.lastAnchorOffset = sel.anchorOffset; | |
| this.lastFocusNode = sel.focusNode; | |
| this.lastFocusOffset = sel.focusOffset; | |
| }; | |
| ContentEditableInput.prototype.selectionInEditor = function () { | |
| var sel = window.getSelection(); | |
| if (!sel.rangeCount) { | |
| return false; | |
| } | |
| var node = sel.getRangeAt(0).commonAncestorContainer; | |
| return contains(this.div, node); | |
| }; | |
| ContentEditableInput.prototype.focus = function () { | |
| if (this.cm.options.readOnly != "nocursor") { | |
| if (!this.selectionInEditor()) { | |
| this.showSelection(this.prepareSelection(), true); | |
| } | |
| this.div.focus(); | |
| } | |
| }; | |
| ContentEditableInput.prototype.blur = function () { | |
| this.div.blur(); | |
| }; | |
| ContentEditableInput.prototype.getField = function () { | |
| return this.div; | |
| }; | |
| ContentEditableInput.prototype.supportsTouch = function () { | |
| return true; | |
| }; | |
| ContentEditableInput.prototype.receivedFocus = function () { | |
| var input = this; | |
| if (this.selectionInEditor()) { | |
| this.pollSelection(); | |
| } else { | |
| runInOp(this.cm, function () { | |
| return (input.cm.curOp.selectionChanged = true); | |
| }); | |
| } | |
| function poll() { | |
| if (input.cm.state.focused) { | |
| input.pollSelection(); | |
| input.polling.set(input.cm.options.pollInterval, poll); | |
| } | |
| } | |
| this.polling.set(this.cm.options.pollInterval, poll); | |
| }; | |
| ContentEditableInput.prototype.selectionChanged = function () { | |
| var sel = window.getSelection(); | |
| return ( | |
| sel.anchorNode != this.lastAnchorNode || | |
| sel.anchorOffset != this.lastAnchorOffset || | |
| sel.focusNode != this.lastFocusNode || | |
| sel.focusOffset != this.lastFocusOffset | |
| ); | |
| }; | |
| ContentEditableInput.prototype.pollSelection = function () { | |
| if ( | |
| this.readDOMTimeout != null || | |
| this.gracePeriod || | |
| !this.selectionChanged() | |
| ) { | |
| return; | |
| } | |
| var sel = window.getSelection(), | |
| cm = this.cm; | |
| // On Android Chrome (version 56, at least), backspacing into an | |
| // uneditable block element will put the cursor in that element, | |
| // and then, because it's not editable, hide the virtual keyboard. | |
| // Because Android doesn't allow us to actually detect backspace | |
| // presses in a sane way, this code checks for when that happens | |
| // and simulates a backspace press in this case. | |
| if ( | |
| android && | |
| chrome && | |
| this.cm.options.gutters.length && | |
| isInGutter(sel.anchorNode) | |
| ) { | |
| this.cm.triggerOnKeyDown({ | |
| type: "keydown", | |
| keyCode: 8, | |
| preventDefault: Math.abs, | |
| }); | |
| this.blur(); | |
| this.focus(); | |
| return; | |
| } | |
| if (this.composing) { | |
| return; | |
| } | |
| this.rememberSelection(); | |
| var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); | |
| var head = domToPos(cm, sel.focusNode, sel.focusOffset); | |
| if (anchor && head) { | |
| runInOp(cm, function () { | |
| setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); | |
| if (anchor.bad || head.bad) { | |
| cm.curOp.selectionChanged = true; | |
| } | |
| }); | |
| } | |
| }; | |
| ContentEditableInput.prototype.pollContent = function () { | |
| if (this.readDOMTimeout != null) { | |
| clearTimeout(this.readDOMTimeout); | |
| this.readDOMTimeout = null; | |
| } | |
| var cm = this.cm, | |
| display = cm.display, | |
| sel = cm.doc.sel.primary(); | |
| var from = sel.from(), | |
| to = sel.to(); | |
| if (from.ch == 0 && from.line > cm.firstLine()) { | |
| from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); | |
| } | |
| if ( | |
| to.ch == getLine(cm.doc, to.line).text.length && | |
| to.line < cm.lastLine() | |
| ) { | |
| to = Pos(to.line + 1, 0); | |
| } | |
| if (from.line < display.viewFrom || to.line > display.viewTo - 1) { | |
| return false; | |
| } | |
| var fromIndex, fromLine, fromNode; | |
| if ( | |
| from.line == display.viewFrom || | |
| (fromIndex = findViewIndex(cm, from.line)) == 0 | |
| ) { | |
| fromLine = lineNo(display.view[0].line); | |
| fromNode = display.view[0].node; | |
| } else { | |
| fromLine = lineNo(display.view[fromIndex].line); | |
| fromNode = display.view[fromIndex - 1].node.nextSibling; | |
| } | |
| var toIndex = findViewIndex(cm, to.line); | |
| var toLine, toNode; | |
| if (toIndex == display.view.length - 1) { | |
| toLine = display.viewTo - 1; | |
| toNode = display.lineDiv.lastChild; | |
| } else { | |
| toLine = lineNo(display.view[toIndex + 1].line) - 1; | |
| toNode = display.view[toIndex + 1].node.previousSibling; | |
| } | |
| if (!fromNode) { | |
| return false; | |
| } | |
| var newText = cm.doc.splitLines( | |
| domTextBetween(cm, fromNode, toNode, fromLine, toLine) | |
| ); | |
| var oldText = getBetween( | |
| cm.doc, | |
| Pos(fromLine, 0), | |
| Pos(toLine, getLine(cm.doc, toLine).text.length) | |
| ); | |
| while (newText.length > 1 && oldText.length > 1) { | |
| if (lst(newText) == lst(oldText)) { | |
| newText.pop(); | |
| oldText.pop(); | |
| toLine--; | |
| } else if (newText[0] == oldText[0]) { | |
| newText.shift(); | |
| oldText.shift(); | |
| fromLine++; | |
| } else { | |
| break; | |
| } | |
| } | |
| var cutFront = 0, | |
| cutEnd = 0; | |
| var newTop = newText[0], | |
| oldTop = oldText[0], | |
| maxCutFront = Math.min(newTop.length, oldTop.length); | |
| while ( | |
| cutFront < maxCutFront && | |
| newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront) | |
| ) { | |
| ++cutFront; | |
| } | |
| var newBot = lst(newText), | |
| oldBot = lst(oldText); | |
| var maxCutEnd = Math.min( | |
| newBot.length - (newText.length == 1 ? cutFront : 0), | |
| oldBot.length - (oldText.length == 1 ? cutFront : 0) | |
| ); | |
| while ( | |
| cutEnd < maxCutEnd && | |
| newBot.charCodeAt(newBot.length - cutEnd - 1) == | |
| oldBot.charCodeAt(oldBot.length - cutEnd - 1) | |
| ) { | |
| ++cutEnd; | |
| } | |
| // Try to move start of change to start of selection if ambiguous | |
| if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { | |
| while ( | |
| cutFront && | |
| cutFront > from.ch && | |
| newBot.charCodeAt(newBot.length - cutEnd - 1) == | |
| oldBot.charCodeAt(oldBot.length - cutEnd - 1) | |
| ) { | |
| cutFront--; | |
| cutEnd++; | |
| } | |
| } | |
| newText[newText.length - 1] = newBot | |
| .slice(0, newBot.length - cutEnd) | |
| .replace(/^\u200b+/, ""); | |
| newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); | |
| var chFrom = Pos(fromLine, cutFront); | |
| var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); | |
| if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { | |
| replaceRange(cm.doc, newText, chFrom, chTo, "+input"); | |
| return true; | |
| } | |
| }; | |
| ContentEditableInput.prototype.ensurePolled = function () { | |
| this.forceCompositionEnd(); | |
| }; | |
| ContentEditableInput.prototype.reset = function () { | |
| this.forceCompositionEnd(); | |
| }; | |
| ContentEditableInput.prototype.forceCompositionEnd = function () { | |
| if (!this.composing) { | |
| return; | |
| } | |
| clearTimeout(this.readDOMTimeout); | |
| this.composing = null; | |
| this.updateFromDOM(); | |
| this.div.blur(); | |
| this.div.focus(); | |
| }; | |
| ContentEditableInput.prototype.readFromDOMSoon = function () { | |
| var this$1 = this; | |
| if (this.readDOMTimeout != null) { | |
| return; | |
| } | |
| this.readDOMTimeout = setTimeout(function () { | |
| this$1.readDOMTimeout = null; | |
| if (this$1.composing) { | |
| if (this$1.composing.done) { | |
| this$1.composing = null; | |
| } else { | |
| return; | |
| } | |
| } | |
| this$1.updateFromDOM(); | |
| }, 80); | |
| }; | |
| ContentEditableInput.prototype.updateFromDOM = function () { | |
| var this$1 = this; | |
| if (this.cm.isReadOnly() || !this.pollContent()) { | |
| runInOp(this.cm, function () { | |
| return regChange(this$1.cm); | |
| }); | |
| } | |
| }; | |
| ContentEditableInput.prototype.setUneditable = function (node) { | |
| node.contentEditable = "false"; | |
| }; | |
| ContentEditableInput.prototype.onKeyPress = function (e) { | |
| if (e.charCode == 0) { | |
| return; | |
| } | |
| e.preventDefault(); | |
| if (!this.cm.isReadOnly()) { | |
| operation(this.cm, applyTextInput)( | |
| this.cm, | |
| String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), | |
| 0 | |
| ); | |
| } | |
| }; | |
| ContentEditableInput.prototype.readOnlyChanged = function (val) { | |
| this.div.contentEditable = String(val != "nocursor"); | |
| }; | |
| ContentEditableInput.prototype.onContextMenu = function () {}; | |
| ContentEditableInput.prototype.resetPosition = function () {}; | |
| ContentEditableInput.prototype.needsContentAttribute = true; | |
| function posToDOM(cm, pos) { | |
| var view = findViewForLine(cm, pos.line); | |
| if (!view || view.hidden) { | |
| return null; | |
| } | |
| var line = getLine(cm.doc, pos.line); | |
| var info = mapFromLineView(view, line, pos.line); | |
| var order = getOrder(line, cm.doc.direction), | |
| side = "left"; | |
| if (order) { | |
| var partPos = getBidiPartAt(order, pos.ch); | |
| side = partPos % 2 ? "right" : "left"; | |
| } | |
| var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); | |
| result.offset = result.collapse == "right" ? result.end : result.start; | |
| return result; | |
| } | |
| function isInGutter(node) { | |
| for (var scan = node; scan; scan = scan.parentNode) { | |
| if (/CodeMirror-gutter-wrapper/.test(scan.className)) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| function badPos(pos, bad) { | |
| if (bad) { | |
| pos.bad = true; | |
| } | |
| return pos; | |
| } | |
| function domTextBetween(cm, from, to, fromLine, toLine) { | |
| var text = "", | |
| closing = false, | |
| lineSep = cm.doc.lineSeparator(); | |
| function recognizeMarker(id) { | |
| return function (marker) { | |
| return marker.id == id; | |
| }; | |
| } | |
| function close() { | |
| if (closing) { | |
| text += lineSep; | |
| closing = false; | |
| } | |
| } | |
| function addText(str) { | |
| if (str) { | |
| close(); | |
| text += str; | |
| } | |
| } | |
| function walk(node) { | |
| if (node.nodeType == 1) { | |
| var cmText = node.getAttribute("cm-text"); | |
| if (cmText != null) { | |
| addText(cmText || node.textContent.replace(/\u200b/g, "")); | |
| return; | |
| } | |
| var markerID = node.getAttribute("cm-marker"), | |
| range; | |
| if (markerID) { | |
| var found = cm.findMarks( | |
| Pos(fromLine, 0), | |
| Pos(toLine + 1, 0), | |
| recognizeMarker(+markerID) | |
| ); | |
| if (found.length && (range = found[0].find())) { | |
| addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); | |
| } | |
| return; | |
| } | |
| if (node.getAttribute("contenteditable") == "false") { | |
| return; | |
| } | |
| var isBlock = /^(pre|div|p)$/i.test(node.nodeName); | |
| if (isBlock) { | |
| close(); | |
| } | |
| for (var i = 0; i < node.childNodes.length; i++) { | |
| walk(node.childNodes[i]); | |
| } | |
| if (isBlock) { | |
| closing = true; | |
| } | |
| } else if (node.nodeType == 3) { | |
| addText(node.nodeValue); | |
| } | |
| } | |
| for (;;) { | |
| walk(from); | |
| if (from == to) { | |
| break; | |
| } | |
| from = from.nextSibling; | |
| } | |
| return text; | |
| } | |
| function domToPos(cm, node, offset) { | |
| var lineNode; | |
| if (node == cm.display.lineDiv) { | |
| lineNode = cm.display.lineDiv.childNodes[offset]; | |
| if (!lineNode) { | |
| return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); | |
| } | |
| node = null; | |
| offset = 0; | |
| } else { | |
| for (lineNode = node; ; lineNode = lineNode.parentNode) { | |
| if (!lineNode || lineNode == cm.display.lineDiv) { | |
| return null; | |
| } | |
| if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { | |
| break; | |
| } | |
| } | |
| } | |
| for (var i = 0; i < cm.display.view.length; i++) { | |
| var lineView = cm.display.view[i]; | |
| if (lineView.node == lineNode) { | |
| return locateNodeInLineView(lineView, node, offset); | |
| } | |
| } | |
| } | |
| function locateNodeInLineView(lineView, node, offset) { | |
| var wrapper = lineView.text.firstChild, | |
| bad = false; | |
| if (!node || !contains(wrapper, node)) { | |
| return badPos(Pos(lineNo(lineView.line), 0), true); | |
| } | |
| if (node == wrapper) { | |
| bad = true; | |
| node = wrapper.childNodes[offset]; | |
| offset = 0; | |
| if (!node) { | |
| var line = lineView.rest ? lst(lineView.rest) : lineView.line; | |
| return badPos(Pos(lineNo(line), line.text.length), bad); | |
| } | |
| } | |
| var textNode = node.nodeType == 3 ? node : null, | |
| topNode = node; | |
| if ( | |
| !textNode && | |
| node.childNodes.length == 1 && | |
| node.firstChild.nodeType == 3 | |
| ) { | |
| textNode = node.firstChild; | |
| if (offset) { | |
| offset = textNode.nodeValue.length; | |
| } | |
| } | |
| while (topNode.parentNode != wrapper) { | |
| topNode = topNode.parentNode; | |
| } | |
| var measure = lineView.measure, | |
| maps = measure.maps; | |
| function find(textNode, topNode, offset) { | |
| for (var i = -1; i < (maps ? maps.length : 0); i++) { | |
| var map = i < 0 ? measure.map : maps[i]; | |
| for (var j = 0; j < map.length; j += 3) { | |
| var curNode = map[j + 2]; | |
| if (curNode == textNode || curNode == topNode) { | |
| var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); | |
| var ch = map[j] + offset; | |
| if (offset < 0 || curNode != textNode) { | |
| ch = map[j + (offset ? 1 : 0)]; | |
| } | |
| return Pos(line, ch); | |
| } | |
| } | |
| } | |
| } | |
| var found = find(textNode, topNode, offset); | |
| if (found) { | |
| return badPos(found, bad); | |
| } | |
| // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems | |
| for ( | |
| var after = topNode.nextSibling, | |
| dist = textNode ? textNode.nodeValue.length - offset : 0; | |
| after; | |
| after = after.nextSibling | |
| ) { | |
| found = find(after, after.firstChild, 0); | |
| if (found) { | |
| return badPos(Pos(found.line, found.ch - dist), bad); | |
| } else { | |
| dist += after.textContent.length; | |
| } | |
| } | |
| for ( | |
| var before = topNode.previousSibling, dist$1 = offset; | |
| before; | |
| before = before.previousSibling | |
| ) { | |
| found = find(before, before.firstChild, -1); | |
| if (found) { | |
| return badPos(Pos(found.line, found.ch + dist$1), bad); | |
| } else { | |
| dist$1 += before.textContent.length; | |
| } | |
| } | |
| } | |
| // TEXTAREA INPUT STYLE | |
| var TextareaInput = function (cm) { | |
| this.cm = cm; | |
| // See input.poll and input.reset | |
| this.prevInput = ""; | |
| // Flag that indicates whether we expect input to appear real soon | |
| // now (after some event like 'keypress' or 'input') and are | |
| // polling intensively. | |
| this.pollingFast = false; | |
| // Self-resetting timeout for the poller | |
| this.polling = new Delayed(); | |
| // Used to work around IE issue with selection being forgotten when focus moves away from textarea | |
| this.hasSelection = false; | |
| this.composing = null; | |
| }; | |
| TextareaInput.prototype.init = function (display) { | |
| var this$1 = this; | |
| var input = this, | |
| cm = this.cm; | |
| // Wraps and hides input textarea | |
| var div = (this.wrapper = hiddenTextarea()); | |
| // The semihidden textarea that is focused when the editor is | |
| // focused, and receives input. | |
| var te = (this.textarea = div.firstChild); | |
| display.wrapper.insertBefore(div, display.wrapper.firstChild); | |
| // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) | |
| if (ios) { | |
| te.style.width = "0px"; | |
| } | |
| on(te, "input", function () { | |
| if (ie && ie_version >= 9 && this$1.hasSelection) { | |
| this$1.hasSelection = null; | |
| } | |
| input.poll(); | |
| }); | |
| on(te, "paste", function (e) { | |
| if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { | |
| return; | |
| } | |
| cm.state.pasteIncoming = true; | |
| input.fastPoll(); | |
| }); | |
| function prepareCopyCut(e) { | |
| if (signalDOMEvent(cm, e)) { | |
| return; | |
| } | |
| if (cm.somethingSelected()) { | |
| setLastCopied({ lineWise: false, text: cm.getSelections() }); | |
| } else if (!cm.options.lineWiseCopyCut) { | |
| return; | |
| } else { | |
| var ranges = copyableRanges(cm); | |
| setLastCopied({ lineWise: true, text: ranges.text }); | |
| if (e.type == "cut") { | |
| cm.setSelections(ranges.ranges, null, sel_dontScroll); | |
| } else { | |
| input.prevInput = ""; | |
| te.value = ranges.text.join("\n"); | |
| selectInput(te); | |
| } | |
| } | |
| if (e.type == "cut") { | |
| cm.state.cutIncoming = true; | |
| } | |
| } | |
| on(te, "cut", prepareCopyCut); | |
| on(te, "copy", prepareCopyCut); | |
| on(display.scroller, "paste", function (e) { | |
| if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { | |
| return; | |
| } | |
| cm.state.pasteIncoming = true; | |
| input.focus(); | |
| }); | |
| // Prevent normal selection in the editor (we handle our own) | |
| on(display.lineSpace, "selectstart", function (e) { | |
| if (!eventInWidget(display, e)) { | |
| e_preventDefault(e); | |
| } | |
| }); | |
| on(te, "compositionstart", function () { | |
| var start = cm.getCursor("from"); | |
| if (input.composing) { | |
| input.composing.range.clear(); | |
| } | |
| input.composing = { | |
| start: start, | |
| range: cm.markText(start, cm.getCursor("to"), { | |
| className: "CodeMirror-composing", | |
| }), | |
| }; | |
| }); | |
| on(te, "compositionend", function () { | |
| if (input.composing) { | |
| input.poll(); | |
| input.composing.range.clear(); | |
| input.composing = null; | |
| } | |
| }); | |
| }; | |
| TextareaInput.prototype.prepareSelection = function () { | |
| // Redraw the selection and/or cursor | |
| var cm = this.cm, | |
| display = cm.display, | |
| doc = cm.doc; | |
| var result = prepareSelection(cm); | |
| // Move the hidden textarea near the cursor to prevent scrolling artifacts | |
| if (cm.options.moveInputWithCursor) { | |
| var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); | |
| var wrapOff = display.wrapper.getBoundingClientRect(), | |
| lineOff = display.lineDiv.getBoundingClientRect(); | |
| result.teTop = Math.max( | |
| 0, | |
| Math.min( | |
| display.wrapper.clientHeight - 10, | |
| headPos.top + lineOff.top - wrapOff.top | |
| ) | |
| ); | |
| result.teLeft = Math.max( | |
| 0, | |
| Math.min( | |
| display.wrapper.clientWidth - 10, | |
| headPos.left + lineOff.left - wrapOff.left | |
| ) | |
| ); | |
| } | |
| return result; | |
| }; | |
| TextareaInput.prototype.showSelection = function (drawn) { | |
| var cm = this.cm, | |
| display = cm.display; | |
| removeChildrenAndAdd(display.cursorDiv, drawn.cursors); | |
| removeChildrenAndAdd(display.selectionDiv, drawn.selection); | |
| if (drawn.teTop != null) { | |
| this.wrapper.style.top = drawn.teTop + "px"; | |
| this.wrapper.style.left = drawn.teLeft + "px"; | |
| } | |
| }; | |
| // Reset the input to correspond to the selection (or to be empty, | |
| // when not typing and nothing is selected) | |
| TextareaInput.prototype.reset = function (typing) { | |
| if (this.contextMenuPending || this.composing) { | |
| return; | |
| } | |
| var cm = this.cm; | |
| if (cm.somethingSelected()) { | |
| this.prevInput = ""; | |
| var content = cm.getSelection(); | |
| this.textarea.value = content; | |
| if (cm.state.focused) { | |
| selectInput(this.textarea); | |
| } | |
| if (ie && ie_version >= 9) { | |
| this.hasSelection = content; | |
| } | |
| } else if (!typing) { | |
| this.prevInput = this.textarea.value = ""; | |
| if (ie && ie_version >= 9) { | |
| this.hasSelection = null; | |
| } | |
| } | |
| }; | |
| TextareaInput.prototype.getField = function () { | |
| return this.textarea; | |
| }; | |
| TextareaInput.prototype.supportsTouch = function () { | |
| return false; | |
| }; | |
| TextareaInput.prototype.focus = function () { | |
| if ( | |
| this.cm.options.readOnly != "nocursor" && | |
| (!mobile || activeElt() != this.textarea) | |
| ) { | |
| try { | |
| this.textarea.focus(); | |
| } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM | |
| } | |
| }; | |
| TextareaInput.prototype.blur = function () { | |
| this.textarea.blur(); | |
| }; | |
| TextareaInput.prototype.resetPosition = function () { | |
| this.wrapper.style.top = this.wrapper.style.left = 0; | |
| }; | |
| TextareaInput.prototype.receivedFocus = function () { | |
| this.slowPoll(); | |
| }; | |
| // Poll for input changes, using the normal rate of polling. This | |
| // runs as long as the editor is focused. | |
| TextareaInput.prototype.slowPoll = function () { | |
| var this$1 = this; | |
| if (this.pollingFast) { | |
| return; | |
| } | |
| this.polling.set(this.cm.options.pollInterval, function () { | |
| this$1.poll(); | |
| if (this$1.cm.state.focused) { | |
| this$1.slowPoll(); | |
| } | |
| }); | |
| }; | |
| // When an event has just come in that is likely to add or change | |
| // something in the input textarea, we poll faster, to ensure that | |
| // the change appears on the screen quickly. | |
| TextareaInput.prototype.fastPoll = function () { | |
| var missed = false, | |
| input = this; | |
| input.pollingFast = true; | |
| function p() { | |
| var changed = input.poll(); | |
| if (!changed && !missed) { | |
| missed = true; | |
| input.polling.set(60, p); | |
| } else { | |
| input.pollingFast = false; | |
| input.slowPoll(); | |
| } | |
| } | |
| input.polling.set(20, p); | |
| }; | |
| // Read input from the textarea, and update the document to match. | |
| // When something is selected, it is present in the textarea, and | |
| // selected (unless it is huge, in which case a placeholder is | |
| // used). When nothing is selected, the cursor sits after previously | |
| // seen text (can be empty), which is stored in prevInput (we must | |
| // not reset the textarea when typing, because that breaks IME). | |
| TextareaInput.prototype.poll = function () { | |
| var this$1 = this; | |
| var cm = this.cm, | |
| input = this.textarea, | |
| prevInput = this.prevInput; | |
| // Since this is called a *lot*, try to bail out as cheaply as | |
| // possible when it is clear that nothing happened. hasSelection | |
| // will be the case when there is a lot of text in the textarea, | |
| // in which case reading its value would be expensive. | |
| if ( | |
| this.contextMenuPending || | |
| !cm.state.focused || | |
| (hasSelection(input) && !prevInput && !this.composing) || | |
| cm.isReadOnly() || | |
| cm.options.disableInput || | |
| cm.state.keySeq | |
| ) { | |
| return false; | |
| } | |
| var text = input.value; | |
| // If nothing changed, bail. | |
| if (text == prevInput && !cm.somethingSelected()) { | |
| return false; | |
| } | |
| // Work around nonsensical selection resetting in IE9/10, and | |
| // inexplicable appearance of private area unicode characters on | |
| // some key combos in Mac (#2689). | |
| if ( | |
| (ie && ie_version >= 9 && this.hasSelection === text) || | |
| (mac && /[\uf700-\uf7ff]/.test(text)) | |
| ) { | |
| cm.display.input.reset(); | |
| return false; | |
| } | |
| if (cm.doc.sel == cm.display.selForContextMenu) { | |
| var first = text.charCodeAt(0); | |
| if (first == 0x200b && !prevInput) { | |
| prevInput = "\u200b"; | |
| } | |
| if (first == 0x21da) { | |
| this.reset(); | |
| return this.cm.execCommand("undo"); | |
| } | |
| } | |
| // Find the part of the input that is actually new | |
| var same = 0, | |
| l = Math.min(prevInput.length, text.length); | |
| while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { | |
| ++same; | |
| } | |
| runInOp(cm, function () { | |
| applyTextInput( | |
| cm, | |
| text.slice(same), | |
| prevInput.length - same, | |
| null, | |
| this$1.composing ? "*compose" : null | |
| ); | |
| // Don't leave long text in the textarea, since it makes further polling slow | |
| if (text.length > 1000 || text.indexOf("\n") > -1) { | |
| input.value = this$1.prevInput = ""; | |
| } else { | |
| this$1.prevInput = text; | |
| } | |
| if (this$1.composing) { | |
| this$1.composing.range.clear(); | |
| this$1.composing.range = cm.markText( | |
| this$1.composing.start, | |
| cm.getCursor("to"), | |
| { className: "CodeMirror-composing" } | |
| ); | |
| } | |
| }); | |
| return true; | |
| }; | |
| TextareaInput.prototype.ensurePolled = function () { | |
| if (this.pollingFast && this.poll()) { | |
| this.pollingFast = false; | |
| } | |
| }; | |
| TextareaInput.prototype.onKeyPress = function () { | |
| if (ie && ie_version >= 9) { | |
| this.hasSelection = null; | |
| } | |
| this.fastPoll(); | |
| }; | |
| TextareaInput.prototype.onContextMenu = function (e) { | |
| var input = this, | |
| cm = input.cm, | |
| display = cm.display, | |
| te = input.textarea; | |
| var pos = posFromMouse(cm, e), | |
| scrollPos = display.scroller.scrollTop; | |
| if (!pos || presto) { | |
| return; | |
| } // Opera is difficult. | |
| // Reset the current text selection only if the click is done outside of the selection | |
| // and 'resetSelectionOnContextMenu' option is true. | |
| var reset = cm.options.resetSelectionOnContextMenu; | |
| if (reset && cm.doc.sel.contains(pos) == -1) { | |
| operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); | |
| } | |
| var oldCSS = te.style.cssText, | |
| oldWrapperCSS = input.wrapper.style.cssText; | |
| input.wrapper.style.cssText = "position: absolute"; | |
| var wrapperBox = input.wrapper.getBoundingClientRect(); | |
| te.style.cssText = | |
| "position: absolute; width: 30px; height: 30px;\n top: " + | |
| (e.clientY - wrapperBox.top - 5) + | |
| "px; left: " + | |
| (e.clientX - wrapperBox.left - 5) + | |
| "px;\n z-index: 1000; background: " + | |
| (ie ? "rgba(255, 255, 255, .05)" : "transparent") + | |
| ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; | |
| var oldScrollY; | |
| if (webkit) { | |
| oldScrollY = window.scrollY; | |
| } // Work around Chrome issue (#2712) | |
| display.input.focus(); | |
| if (webkit) { | |
| window.scrollTo(null, oldScrollY); | |
| } | |
| display.input.reset(); | |
| // Adds "Select all" to context menu in FF | |
| if (!cm.somethingSelected()) { | |
| te.value = input.prevInput = " "; | |
| } | |
| input.contextMenuPending = true; | |
| display.selForContextMenu = cm.doc.sel; | |
| clearTimeout(display.detectingSelectAll); | |
| // Select-all will be greyed out if there's nothing to select, so | |
| // this adds a zero-width space so that we can later check whether | |
| // it got selected. | |
| function prepareSelectAllHack() { | |
| if (te.selectionStart != null) { | |
| var selected = cm.somethingSelected(); | |
| var extval = "\u200b" + (selected ? te.value : ""); | |
| te.value = "\u21da"; // Used to catch context-menu undo | |
| te.value = extval; | |
| input.prevInput = selected ? "" : "\u200b"; | |
| te.selectionStart = 1; | |
| te.selectionEnd = extval.length; | |
| // Re-set this, in case some other handler touched the | |
| // selection in the meantime. | |
| display.selForContextMenu = cm.doc.sel; | |
| } | |
| } | |
| function rehide() { | |
| input.contextMenuPending = false; | |
| input.wrapper.style.cssText = oldWrapperCSS; | |
| te.style.cssText = oldCSS; | |
| if (ie && ie_version < 9) { | |
| display.scrollbars.setScrollTop( | |
| (display.scroller.scrollTop = scrollPos) | |
| ); | |
| } | |
| // Try to detect the user choosing select-all | |
| if (te.selectionStart != null) { | |
| if (!ie || (ie && ie_version < 9)) { | |
| prepareSelectAllHack(); | |
| } | |
| var i = 0, | |
| poll = function () { | |
| if ( | |
| display.selForContextMenu == cm.doc.sel && | |
| te.selectionStart == 0 && | |
| te.selectionEnd > 0 && | |
| input.prevInput == "\u200b" | |
| ) { | |
| operation(cm, selectAll)(cm); | |
| } else if (i++ < 10) { | |
| display.detectingSelectAll = setTimeout(poll, 500); | |
| } else { | |
| display.selForContextMenu = null; | |
| display.input.reset(); | |
| } | |
| }; | |
| display.detectingSelectAll = setTimeout(poll, 200); | |
| } | |
| } | |
| if (ie && ie_version >= 9) { | |
| prepareSelectAllHack(); | |
| } | |
| if (captureRightClick) { | |
| e_stop(e); | |
| var mouseup = function () { | |
| off(window, "mouseup", mouseup); | |
| setTimeout(rehide, 20); | |
| }; | |
| on(window, "mouseup", mouseup); | |
| } else { | |
| setTimeout(rehide, 50); | |
| } | |
| }; | |
| TextareaInput.prototype.readOnlyChanged = function (val) { | |
| if (!val) { | |
| this.reset(); | |
| } | |
| this.textarea.disabled = val == "nocursor"; | |
| }; | |
| TextareaInput.prototype.setUneditable = function () {}; | |
| TextareaInput.prototype.needsContentAttribute = false; | |
| function fromTextArea(textarea, options) { | |
| options = options ? copyObj(options) : {}; | |
| options.value = textarea.value; | |
| if (!options.tabindex && textarea.tabIndex) { | |
| options.tabindex = textarea.tabIndex; | |
| } | |
| if (!options.placeholder && textarea.placeholder) { | |
| options.placeholder = textarea.placeholder; | |
| } | |
| // Set autofocus to true if this textarea is focused, or if it has | |
| // autofocus and no other element is focused. | |
| if (options.autofocus == null) { | |
| var hasFocus = activeElt(); | |
| options.autofocus = | |
| hasFocus == textarea || | |
| (textarea.getAttribute("autofocus") != null && | |
| hasFocus == document.body); | |
| } | |
| function save() { | |
| textarea.value = cm.getValue(); | |
| } | |
| var realSubmit; | |
| if (textarea.form) { | |
| on(textarea.form, "submit", save); | |
| // Deplorable hack to make the submit method do the right thing. | |
| if (!options.leaveSubmitMethodAlone) { | |
| var form = textarea.form; | |
| realSubmit = form.submit; | |
| try { | |
| var wrappedSubmit = (form.submit = function () { | |
| save(); | |
| form.submit = realSubmit; | |
| form.submit(); | |
| form.submit = wrappedSubmit; | |
| }); | |
| } catch (e) {} | |
| } | |
| } | |
| options.finishInit = function (cm) { | |
| cm.save = save; | |
| cm.getTextArea = function () { | |
| return textarea; | |
| }; | |
| cm.toTextArea = function () { | |
| cm.toTextArea = isNaN; // Prevent this from being ran twice | |
| save(); | |
| textarea.parentNode.removeChild(cm.getWrapperElement()); | |
| textarea.style.display = ""; | |
| if (textarea.form) { | |
| off(textarea.form, "submit", save); | |
| if (typeof textarea.form.submit == "function") { | |
| textarea.form.submit = realSubmit; | |
| } | |
| } | |
| }; | |
| }; | |
| textarea.style.display = "none"; | |
| var cm = CodeMirror(function (node) { | |
| return textarea.parentNode.insertBefore(node, textarea.nextSibling); | |
| }, options); | |
| return cm; | |
| } | |
| function addLegacyProps(CodeMirror) { | |
| CodeMirror.off = off; | |
| CodeMirror.on = on; | |
| CodeMirror.wheelEventPixels = wheelEventPixels; | |
| CodeMirror.Doc = Doc; | |
| CodeMirror.splitLines = splitLinesAuto; | |
| CodeMirror.countColumn = countColumn; | |
| CodeMirror.findColumn = findColumn; | |
| CodeMirror.isWordChar = isWordCharBasic; | |
| CodeMirror.Pass = Pass; | |
| CodeMirror.signal = signal; | |
| CodeMirror.Line = Line; | |
| CodeMirror.changeEnd = changeEnd; | |
| CodeMirror.scrollbarModel = scrollbarModel; | |
| CodeMirror.Pos = Pos; | |
| CodeMirror.cmpPos = cmp; | |
| CodeMirror.modes = modes; | |
| CodeMirror.mimeModes = mimeModes; | |
| CodeMirror.resolveMode = resolveMode; | |
| CodeMirror.getMode = getMode; | |
| CodeMirror.modeExtensions = modeExtensions; | |
| CodeMirror.extendMode = extendMode; | |
| CodeMirror.copyState = copyState; | |
| CodeMirror.startState = startState; | |
| CodeMirror.innerMode = innerMode; | |
| CodeMirror.commands = commands; | |
| CodeMirror.keyMap = keyMap; | |
| CodeMirror.keyName = keyName; | |
| CodeMirror.isModifierKey = isModifierKey; | |
| CodeMirror.lookupKey = lookupKey; | |
| CodeMirror.normalizeKeyMap = normalizeKeyMap; | |
| CodeMirror.StringStream = StringStream; | |
| CodeMirror.SharedTextMarker = SharedTextMarker; | |
| CodeMirror.TextMarker = TextMarker; | |
| CodeMirror.LineWidget = LineWidget; | |
| CodeMirror.e_preventDefault = e_preventDefault; | |
| CodeMirror.e_stopPropagation = e_stopPropagation; | |
| CodeMirror.e_stop = e_stop; | |
| CodeMirror.addClass = addClass; | |
| CodeMirror.contains = contains; | |
| CodeMirror.rmClass = rmClass; | |
| CodeMirror.keyNames = keyNames; | |
| } | |
| // EDITOR CONSTRUCTOR | |
| defineOptions(CodeMirror); | |
| addEditorMethods(CodeMirror); | |
| // Set up methods on CodeMirror's prototype to redirect to the editor's document. | |
| var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); | |
| for (var prop in Doc.prototype) { | |
| if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) { | |
| CodeMirror.prototype[prop] = (function (method) { | |
| return function () { | |
| return method.apply(this.doc, arguments); | |
| }; | |
| })(Doc.prototype[prop]); | |
| } | |
| } | |
| eventMixin(Doc); | |
| // INPUT HANDLING | |
| CodeMirror.inputStyles = { | |
| textarea: TextareaInput, | |
| contenteditable: ContentEditableInput, | |
| }; | |
| // MODE DEFINITION AND QUERYING | |
| // Extra arguments are stored as the mode's dependencies, which is | |
| // used by (legacy) mechanisms like loadmode.js to automatically | |
| // load a mode. (Preferred mechanism is the require/define calls.) | |
| CodeMirror.defineMode = function (name /*, mode, …*/) { | |
| if (!CodeMirror.defaults.mode && name != "null") { | |
| CodeMirror.defaults.mode = name; | |
| } | |
| defineMode.apply(this, arguments); | |
| }; | |
| CodeMirror.defineMIME = defineMIME; | |
| // Minimal default mode. | |
| CodeMirror.defineMode("null", function () { | |
| return { | |
| token: function (stream) { | |
| return stream.skipToEnd(); | |
| }, | |
| }; | |
| }); | |
| CodeMirror.defineMIME("text/plain", "null"); | |
| // EXTENSIONS | |
| CodeMirror.defineExtension = function (name, func) { | |
| CodeMirror.prototype[name] = func; | |
| }; | |
| CodeMirror.defineDocExtension = function (name, func) { | |
| Doc.prototype[name] = func; | |
| }; | |
| CodeMirror.fromTextArea = fromTextArea; | |
| addLegacyProps(CodeMirror); | |
| CodeMirror.version = "5.28.0"; | |
| return CodeMirror; | |
| }); |
| /* | |
| Copyright (c) 2011, Yahoo! Inc. All rights reserved. | |
| Code licensed under the BSD License: | |
| http://developer.yahoo.com/yui/license.html | |
| version: 2.9.0 | |
| */ | |
| YAHOO.util.Color = (function () { | |
| var a = "0", | |
| b = YAHOO.lang.isArray, | |
| c = YAHOO.lang.isNumber; | |
| return { | |
| real2dec: function (d) { | |
| return Math.min(255, Math.round(d * 256)); | |
| }, | |
| hsv2rgb: function (l, y, w) { | |
| if (b(l)) { | |
| return this.hsv2rgb.call(this, l[0], l[1], l[2]); | |
| } | |
| var d, | |
| m, | |
| u, | |
| k = Math.floor((l / 60) % 6), | |
| n = l / 60 - k, | |
| j = w * (1 - y), | |
| e = w * (1 - n * y), | |
| x = w * (1 - (1 - n) * y), | |
| o; | |
| switch (k) { | |
| case 0: | |
| d = w; | |
| m = x; | |
| u = j; | |
| break; | |
| case 1: | |
| d = e; | |
| m = w; | |
| u = j; | |
| break; | |
| case 2: | |
| d = j; | |
| m = w; | |
| u = x; | |
| break; | |
| case 3: | |
| d = j; | |
| m = e; | |
| u = w; | |
| break; | |
| case 4: | |
| d = x; | |
| m = j; | |
| u = w; | |
| break; | |
| case 5: | |
| d = w; | |
| m = j; | |
| u = e; | |
| break; | |
| } | |
| o = this.real2dec; | |
| return [o(d), o(m), o(u)]; | |
| }, | |
| rgb2hsv: function (d, j, k) { | |
| if (b(d)) { | |
| return this.rgb2hsv.apply(this, d); | |
| } | |
| d /= 255; | |
| j /= 255; | |
| k /= 255; | |
| var i, | |
| n, | |
| e = Math.min(Math.min(d, j), k), | |
| l = Math.max(Math.max(d, j), k), | |
| m = l - e, | |
| f; | |
| switch (l) { | |
| case e: | |
| i = 0; | |
| break; | |
| case d: | |
| i = (60 * (j - k)) / m; | |
| if (j < k) { | |
| i += 360; | |
| } | |
| break; | |
| case j: | |
| i = (60 * (k - d)) / m + 120; | |
| break; | |
| case k: | |
| i = (60 * (d - j)) / m + 240; | |
| break; | |
| } | |
| n = l === 0 ? 0 : 1 - e / l; | |
| f = [Math.round(i), n, l]; | |
| return f; | |
| }, | |
| rgb2hex: function (h, e, d) { | |
| if (b(h)) { | |
| return this.rgb2hex.apply(this, h); | |
| } | |
| var i = this.dec2hex; | |
| return i(h) + i(e) + i(d); | |
| }, | |
| dec2hex: function (d) { | |
| d = parseInt(d, 10) | 0; | |
| d = d > 255 || d < 0 ? 0 : d; | |
| return (a + d.toString(16)).slice(-2).toUpperCase(); | |
| }, | |
| hex2dec: function (d) { | |
| return parseInt(d, 16); | |
| }, | |
| hex2rgb: function (d) { | |
| var e = this.hex2dec; | |
| return [e(d.slice(0, 2)), e(d.slice(2, 4)), e(d.slice(4, 6))]; | |
| }, | |
| websafe: function (h, e, d) { | |
| if (b(h)) { | |
| return this.websafe.apply(this, h); | |
| } | |
| var i = function (f) { | |
| if (c(f)) { | |
| f = Math.min(Math.max(0, f), 255); | |
| var g, j; | |
| for (g = 0; g < 256; g = g + 51) { | |
| j = g + 51; | |
| if (f >= g && f <= j) { | |
| return f - g > 25 ? j : g; | |
| } | |
| } | |
| } | |
| return f; | |
| }; | |
| return [i(h), i(e), i(d)]; | |
| }, | |
| }; | |
| })(); | |
| (function () { | |
| var k = 0, | |
| g = YAHOO.util, | |
| d = YAHOO.lang, | |
| e = YAHOO.widget.Slider, | |
| c = g.Color, | |
| f = g.Dom, | |
| j = g.Event, | |
| a = d.substitute, | |
| i = "yui-picker"; | |
| function h(l, b) { | |
| k = k + 1; | |
| b = b || {}; | |
| if (arguments.length === 1 && !YAHOO.lang.isString(l) && !l.nodeName) { | |
| b = l; | |
| l = b.element || null; | |
| } | |
| if (!l && !b.element) { | |
| l = this._createHostElement(b); | |
| } | |
| h.superclass.constructor.call(this, l, b); | |
| this.initPicker(); | |
| } | |
| YAHOO.extend(h, YAHOO.util.Element, { | |
| ID: { | |
| R: i + "-r", | |
| R_HEX: i + "-rhex", | |
| G: i + "-g", | |
| G_HEX: i + "-ghex", | |
| B: i + "-b", | |
| B_HEX: i + "-bhex", | |
| H: i + "-h", | |
| S: i + "-s", | |
| V: i + "-v", | |
| PICKER_BG: i + "-bg", | |
| PICKER_THUMB: i + "-thumb", | |
| HUE_BG: i + "-hue-bg", | |
| HUE_THUMB: i + "-hue-thumb", | |
| HEX: i + "-hex", | |
| SWATCH: i + "-swatch", | |
| WEBSAFE_SWATCH: i + "-websafe-swatch", | |
| CONTROLS: i + "-controls", | |
| RGB_CONTROLS: i + "-rgb-controls", | |
| HSV_CONTROLS: i + "-hsv-controls", | |
| HEX_CONTROLS: i + "-hex-controls", | |
| HEX_SUMMARY: i + "-hex-summary", | |
| CONTROLS_LABEL: i + "-controls-label", | |
| }, | |
| TXT: { | |
| ILLEGAL_HEX: "Illegal hex value entered", | |
| SHOW_CONTROLS: "Show color details", | |
| HIDE_CONTROLS: "Hide color details", | |
| CURRENT_COLOR: "Currently selected color: {rgb}", | |
| CLOSEST_WEBSAFE: "Closest websafe color: {rgb}. Click to select.", | |
| R: "R", | |
| G: "G", | |
| B: "B", | |
| H: "H", | |
| S: "S", | |
| V: "V", | |
| HEX: "#", | |
| DEG: "\u00B0", | |
| PERCENT: "%", | |
| }, | |
| IMAGE: { | |
| PICKER_THUMB: "../../build/colorpicker/assets/picker_thumb.png", | |
| HUE_THUMB: "../../build/colorpicker/assets/hue_thumb.png", | |
| }, | |
| DEFAULT: { PICKER_SIZE: 180 }, | |
| OPT: { | |
| HUE: "hue", | |
| SATURATION: "saturation", | |
| VALUE: "value", | |
| RED: "red", | |
| GREEN: "green", | |
| BLUE: "blue", | |
| HSV: "hsv", | |
| RGB: "rgb", | |
| WEBSAFE: "websafe", | |
| HEX: "hex", | |
| PICKER_SIZE: "pickersize", | |
| SHOW_CONTROLS: "showcontrols", | |
| SHOW_RGB_CONTROLS: "showrgbcontrols", | |
| SHOW_HSV_CONTROLS: "showhsvcontrols", | |
| SHOW_HEX_CONTROLS: "showhexcontrols", | |
| SHOW_HEX_SUMMARY: "showhexsummary", | |
| SHOW_WEBSAFE: "showwebsafe", | |
| CONTAINER: "container", | |
| IDS: "ids", | |
| ELEMENTS: "elements", | |
| TXT: "txt", | |
| IMAGES: "images", | |
| ANIMATE: "animate", | |
| }, | |
| skipAnim: true, | |
| _createHostElement: function () { | |
| var b = document.createElement("div"); | |
| if (this.CSS.BASE) { | |
| b.className = this.CSS.BASE; | |
| } | |
| return b; | |
| }, | |
| _updateHueSlider: function () { | |
| var b = this.get(this.OPT.PICKER_SIZE), | |
| l = this.get(this.OPT.HUE); | |
| l = b - Math.round((l / 360) * b); | |
| if (l === b) { | |
| l = 0; | |
| } | |
| this.hueSlider.setValue(l, this.skipAnim); | |
| }, | |
| _updatePickerSlider: function () { | |
| var l = this.get(this.OPT.PICKER_SIZE), | |
| m = this.get(this.OPT.SATURATION), | |
| b = this.get(this.OPT.VALUE); | |
| m = Math.round((m * l) / 100); | |
| b = Math.round(l - (b * l) / 100); | |
| this.pickerSlider.setRegionValue(m, b, this.skipAnim); | |
| }, | |
| _updateSliders: function () { | |
| this._updateHueSlider(); | |
| this._updatePickerSlider(); | |
| }, | |
| setValue: function (l, b) { | |
| b = b || false; | |
| this.set(this.OPT.RGB, l, b); | |
| this._updateSliders(); | |
| }, | |
| hueSlider: null, | |
| pickerSlider: null, | |
| _getH: function () { | |
| var b = this.get(this.OPT.PICKER_SIZE), | |
| l = (b - this.hueSlider.getValue()) / b; | |
| l = Math.round(l * 360); | |
| return l === 360 ? 0 : l; | |
| }, | |
| _getS: function () { | |
| return this.pickerSlider.getXValue() / this.get(this.OPT.PICKER_SIZE); | |
| }, | |
| _getV: function () { | |
| var b = this.get(this.OPT.PICKER_SIZE); | |
| return (b - this.pickerSlider.getYValue()) / b; | |
| }, | |
| _updateSwatch: function () { | |
| var m = this.get(this.OPT.RGB), | |
| o = this.get(this.OPT.WEBSAFE), | |
| n = this.getElement(this.ID.SWATCH), | |
| l = m.join(","), | |
| b = this.get(this.OPT.TXT); | |
| f.setStyle(n, "background-color", "rgb(" + l + ")"); | |
| n.title = a(b.CURRENT_COLOR, { rgb: "#" + this.get(this.OPT.HEX) }); | |
| n = this.getElement(this.ID.WEBSAFE_SWATCH); | |
| l = o.join(","); | |
| f.setStyle(n, "background-color", "rgb(" + l + ")"); | |
| n.title = a(b.CLOSEST_WEBSAFE, { rgb: "#" + c.rgb2hex(o) }); | |
| }, | |
| _getValuesFromSliders: function () { | |
| this.set( | |
| this.OPT.RGB, | |
| c.hsv2rgb(this._getH(), this._getS(), this._getV()) | |
| ); | |
| }, | |
| _updateFormFields: function () { | |
| this.getElement(this.ID.H).value = this.get(this.OPT.HUE); | |
| this.getElement(this.ID.S).value = this.get(this.OPT.SATURATION); | |
| this.getElement(this.ID.V).value = this.get(this.OPT.VALUE); | |
| this.getElement(this.ID.R).value = this.get(this.OPT.RED); | |
| this.getElement(this.ID.R_HEX).innerHTML = c.dec2hex( | |
| this.get(this.OPT.RED) | |
| ); | |
| this.getElement(this.ID.G).value = this.get(this.OPT.GREEN); | |
| this.getElement(this.ID.G_HEX).innerHTML = c.dec2hex( | |
| this.get(this.OPT.GREEN) | |
| ); | |
| this.getElement(this.ID.B).value = this.get(this.OPT.BLUE); | |
| this.getElement(this.ID.B_HEX).innerHTML = c.dec2hex( | |
| this.get(this.OPT.BLUE) | |
| ); | |
| this.getElement(this.ID.HEX).value = this.get(this.OPT.HEX); | |
| }, | |
| _onHueSliderChange: function (n) { | |
| var l = this._getH(), | |
| b = c.hsv2rgb(l, 1, 1), | |
| m = "rgb(" + b.join(",") + ")"; | |
| this.set(this.OPT.HUE, l, true); | |
| f.setStyle(this.getElement(this.ID.PICKER_BG), "background-color", m); | |
| if (this.hueSlider.valueChangeSource !== e.SOURCE_SET_VALUE) { | |
| this._getValuesFromSliders(); | |
| } | |
| this._updateFormFields(); | |
| this._updateSwatch(); | |
| }, | |
| _onPickerSliderChange: function (m) { | |
| var l = this._getS(), | |
| b = this._getV(); | |
| this.set(this.OPT.SATURATION, Math.round(l * 100), true); | |
| this.set(this.OPT.VALUE, Math.round(b * 100), true); | |
| if (this.pickerSlider.valueChangeSource !== e.SOURCE_SET_VALUE) { | |
| this._getValuesFromSliders(); | |
| } | |
| this._updateFormFields(); | |
| this._updateSwatch(); | |
| }, | |
| _getCommand: function (b) { | |
| var l = j.getCharCode(b); | |
| if (l === 38) { | |
| return 3; | |
| } else { | |
| if (l === 13) { | |
| return 6; | |
| } else { | |
| if (l === 40) { | |
| return 4; | |
| } else { | |
| if (l >= 48 && l <= 57) { | |
| return 1; | |
| } else { | |
| if (l >= 97 && l <= 102) { | |
| return 2; | |
| } else { | |
| if (l >= 65 && l <= 70) { | |
| return 2; | |
| } else { | |
| if ( | |
| "8, 9, 13, 27, 37, 39".indexOf(l) > -1 || | |
| b.ctrlKey || | |
| b.metaKey | |
| ) { | |
| return 5; | |
| } else { | |
| return 0; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| _useFieldValue: function (l, b, n) { | |
| var m = b.value; | |
| if (n !== this.OPT.HEX) { | |
| m = parseInt(m, 10); | |
| } | |
| if (m !== this.get(n)) { | |
| this.set(n, m); | |
| } | |
| }, | |
| _rgbFieldKeypress: function (m, b, o) { | |
| var n = this._getCommand(m), | |
| l = m.shiftKey ? 10 : 1; | |
| switch (n) { | |
| case 6: | |
| this._useFieldValue.apply(this, arguments); | |
| break; | |
| case 3: | |
| this.set(o, Math.min(this.get(o) + l, 255)); | |
| this._updateFormFields(); | |
| break; | |
| case 4: | |
| this.set(o, Math.max(this.get(o) - l, 0)); | |
| this._updateFormFields(); | |
| break; | |
| default: | |
| } | |
| }, | |
| _hexFieldKeypress: function (l, b, n) { | |
| var m = this._getCommand(l); | |
| if (m === 6) { | |
| this._useFieldValue.apply(this, arguments); | |
| } | |
| }, | |
| _hexOnly: function (l, b) { | |
| var m = this._getCommand(l); | |
| switch (m) { | |
| case 6: | |
| case 5: | |
| case 1: | |
| break; | |
| case 2: | |
| if (b !== true) { | |
| break; | |
| } | |
| default: | |
| j.stopEvent(l); | |
| return false; | |
| } | |
| }, | |
| _numbersOnly: function (b) { | |
| return this._hexOnly(b, true); | |
| }, | |
| getElement: function (b) { | |
| return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[b]]; | |
| }, | |
| _createElements: function () { | |
| var n, | |
| m, | |
| q, | |
| o, | |
| l, | |
| b = this.get(this.OPT.IDS), | |
| r = this.get(this.OPT.TXT), | |
| t = this.get(this.OPT.IMAGES), | |
| s = function (p, v) { | |
| var w = document.createElement(p); | |
| if (v) { | |
| d.augmentObject(w, v, true); | |
| } | |
| return w; | |
| }, | |
| u = function (p, v) { | |
| var w = d.merge( | |
| { autocomplete: "off", value: "0", size: 3, maxlength: 3 }, | |
| v | |
| ); | |
| w.name = w.id; | |
| return new s(p, w); | |
| }; | |
| l = this.get("element"); | |
| n = new s("div", { | |
| id: b[this.ID.PICKER_BG], | |
| className: "yui-picker-bg", | |
| tabIndex: -1, | |
| hideFocus: true, | |
| }); | |
| m = new s("div", { | |
| id: b[this.ID.PICKER_THUMB], | |
| className: "yui-picker-thumb", | |
| }); | |
| q = new s("img", { src: t.PICKER_THUMB }); | |
| m.appendChild(q); | |
| n.appendChild(m); | |
| l.appendChild(n); | |
| n = new s("div", { | |
| id: b[this.ID.HUE_BG], | |
| className: "yui-picker-hue-bg", | |
| tabIndex: -1, | |
| hideFocus: true, | |
| }); | |
| m = new s("div", { | |
| id: b[this.ID.HUE_THUMB], | |
| className: "yui-picker-hue-thumb", | |
| }); | |
| q = new s("img", { src: t.HUE_THUMB }); | |
| m.appendChild(q); | |
| n.appendChild(m); | |
| l.appendChild(n); | |
| n = new s("div", { | |
| id: b[this.ID.CONTROLS], | |
| className: "yui-picker-controls", | |
| }); | |
| l.appendChild(n); | |
| l = n; | |
| n = new s("div", { className: "hd" }); | |
| m = new s("a", { id: b[this.ID.CONTROLS_LABEL], href: "#" }); | |
| n.appendChild(m); | |
| l.appendChild(n); | |
| n = new s("div", { className: "bd" }); | |
| l.appendChild(n); | |
| l = n; | |
| n = new s("ul", { | |
| id: b[this.ID.RGB_CONTROLS], | |
| className: "yui-picker-rgb-controls", | |
| }); | |
| m = new s("li"); | |
| m.appendChild(document.createTextNode(r.R + " ")); | |
| o = new u("input", { id: b[this.ID.R], className: "yui-picker-r" }); | |
| m.appendChild(o); | |
| n.appendChild(m); | |
| m = new s("li"); | |
| m.appendChild(document.createTextNode(r.G + " ")); | |
| o = new u("input", { id: b[this.ID.G], className: "yui-picker-g" }); | |
| m.appendChild(o); | |
| n.appendChild(m); | |
| m = new s("li"); | |
| m.appendChild(document.createTextNode(r.B + " ")); | |
| o = new u("input", { id: b[this.ID.B], className: "yui-picker-b" }); | |
| m.appendChild(o); | |
| n.appendChild(m); | |
| l.appendChild(n); | |
| n = new s("ul", { | |
| id: b[this.ID.HSV_CONTROLS], | |
| className: "yui-picker-hsv-controls", | |
| }); | |
| m = new s("li"); | |
| m.appendChild(document.createTextNode(r.H + " ")); | |
| o = new u("input", { id: b[this.ID.H], className: "yui-picker-h" }); | |
| m.appendChild(o); | |
| m.appendChild(document.createTextNode(" " + r.DEG)); | |
| n.appendChild(m); | |
| m = new s("li"); | |
| m.appendChild(document.createTextNode(r.S + " ")); | |
| o = new u("input", { id: b[this.ID.S], className: "yui-picker-s" }); | |
| m.appendChild(o); | |
| m.appendChild(document.createTextNode(" " + r.PERCENT)); | |
| n.appendChild(m); | |
| m = new s("li"); | |
| m.appendChild(document.createTextNode(r.V + " ")); | |
| o = new u("input", { id: b[this.ID.V], className: "yui-picker-v" }); | |
| m.appendChild(o); | |
| m.appendChild(document.createTextNode(" " + r.PERCENT)); | |
| n.appendChild(m); | |
| l.appendChild(n); | |
| n = new s("ul", { | |
| id: b[this.ID.HEX_SUMMARY], | |
| className: "yui-picker-hex_summary", | |
| }); | |
| m = new s("li", { id: b[this.ID.R_HEX] }); | |
| n.appendChild(m); | |
| m = new s("li", { id: b[this.ID.G_HEX] }); | |
| n.appendChild(m); | |
| m = new s("li", { id: b[this.ID.B_HEX] }); | |
| n.appendChild(m); | |
| l.appendChild(n); | |
| n = new s("div", { | |
| id: b[this.ID.HEX_CONTROLS], | |
| className: "yui-picker-hex-controls", | |
| }); | |
| n.appendChild(document.createTextNode(r.HEX + " ")); | |
| m = new u("input", { | |
| id: b[this.ID.HEX], | |
| className: "yui-picker-hex", | |
| size: 6, | |
| maxlength: 6, | |
| }); | |
| n.appendChild(m); | |
| l.appendChild(n); | |
| l = this.get("element"); | |
| n = new s("div", { | |
| id: b[this.ID.SWATCH], | |
| className: "yui-picker-swatch", | |
| }); | |
| l.appendChild(n); | |
| n = new s("div", { | |
| id: b[this.ID.WEBSAFE_SWATCH], | |
| className: "yui-picker-websafe-swatch", | |
| }); | |
| l.appendChild(n); | |
| }, | |
| _attachRGBHSV: function (l, b) { | |
| j.on( | |
| this.getElement(l), | |
| "keydown", | |
| function (n, m) { | |
| m._rgbFieldKeypress(n, this, b); | |
| }, | |
| this | |
| ); | |
| j.on(this.getElement(l), "keypress", this._numbersOnly, this, true); | |
| j.on( | |
| this.getElement(l), | |
| "blur", | |
| function (n, m) { | |
| m._useFieldValue(n, this, b); | |
| }, | |
| this | |
| ); | |
| }, | |
| _updateRGB: function () { | |
| var b = [ | |
| this.get(this.OPT.RED), | |
| this.get(this.OPT.GREEN), | |
| this.get(this.OPT.BLUE), | |
| ]; | |
| this.set(this.OPT.RGB, b); | |
| this._updateSliders(); | |
| }, | |
| _initElements: function () { | |
| var p = this.OPT, | |
| n = this.get(p.IDS), | |
| l = this.get(p.ELEMENTS), | |
| b, | |
| m, | |
| q; | |
| for (b in this.ID) { | |
| if (d.hasOwnProperty(this.ID, b)) { | |
| n[this.ID[b]] = n[b]; | |
| } | |
| } | |
| m = f.get(n[this.ID.PICKER_BG]); | |
| if (!m) { | |
| this._createElements(); | |
| } else { | |
| } | |
| for (b in n) { | |
| if (d.hasOwnProperty(n, b)) { | |
| m = f.get(n[b]); | |
| q = f.generateId(m); | |
| n[b] = q; | |
| n[n[b]] = q; | |
| l[q] = m; | |
| } | |
| } | |
| }, | |
| initPicker: function () { | |
| this._initSliders(); | |
| this._bindUI(); | |
| this.syncUI(true); | |
| }, | |
| _initSliders: function () { | |
| var b = this.ID, | |
| l = this.get(this.OPT.PICKER_SIZE); | |
| this.hueSlider = e.getVertSlider( | |
| this.getElement(b.HUE_BG), | |
| this.getElement(b.HUE_THUMB), | |
| 0, | |
| l | |
| ); | |
| this.pickerSlider = e.getSliderRegion( | |
| this.getElement(b.PICKER_BG), | |
| this.getElement(b.PICKER_THUMB), | |
| 0, | |
| l, | |
| 0, | |
| l | |
| ); | |
| this.set(this.OPT.ANIMATE, this.get(this.OPT.ANIMATE)); | |
| }, | |
| _bindUI: function () { | |
| var b = this.ID, | |
| l = this.OPT; | |
| this.hueSlider.subscribe("change", this._onHueSliderChange, this, true); | |
| this.pickerSlider.subscribe( | |
| "change", | |
| this._onPickerSliderChange, | |
| this, | |
| true | |
| ); | |
| j.on( | |
| this.getElement(b.WEBSAFE_SWATCH), | |
| "click", | |
| function (m) { | |
| this.setValue(this.get(l.WEBSAFE)); | |
| }, | |
| this, | |
| true | |
| ); | |
| j.on( | |
| this.getElement(b.CONTROLS_LABEL), | |
| "click", | |
| function (m) { | |
| this.set(l.SHOW_CONTROLS, !this.get(l.SHOW_CONTROLS)); | |
| j.preventDefault(m); | |
| }, | |
| this, | |
| true | |
| ); | |
| this._attachRGBHSV(b.R, l.RED); | |
| this._attachRGBHSV(b.G, l.GREEN); | |
| this._attachRGBHSV(b.B, l.BLUE); | |
| this._attachRGBHSV(b.H, l.HUE); | |
| this._attachRGBHSV(b.S, l.SATURATION); | |
| this._attachRGBHSV(b.V, l.VALUE); | |
| j.on( | |
| this.getElement(b.HEX), | |
| "keydown", | |
| function (n, m) { | |
| m._hexFieldKeypress(n, this, l.HEX); | |
| }, | |
| this | |
| ); | |
| j.on(this.getElement(this.ID.HEX), "keypress", this._hexOnly, this, true); | |
| j.on( | |
| this.getElement(this.ID.HEX), | |
| "blur", | |
| function (n, m) { | |
| m._useFieldValue(n, this, l.HEX); | |
| }, | |
| this | |
| ); | |
| }, | |
| syncUI: function (b) { | |
| this.skipAnim = b; | |
| this._updateRGB(); | |
| this.skipAnim = false; | |
| }, | |
| _updateRGBFromHSV: function () { | |
| var l = [ | |
| this.get(this.OPT.HUE), | |
| this.get(this.OPT.SATURATION) / 100, | |
| this.get(this.OPT.VALUE) / 100, | |
| ], | |
| b = c.hsv2rgb(l); | |
| this.set(this.OPT.RGB, b); | |
| this._updateSliders(); | |
| }, | |
| _updateHex: function () { | |
| var o = this.get(this.OPT.HEX), | |
| b = o.length, | |
| p, | |
| n, | |
| m; | |
| if (b === 3) { | |
| p = o.split(""); | |
| for (n = 0; n < b; n = n + 1) { | |
| p[n] = p[n] + p[n]; | |
| } | |
| o = p.join(""); | |
| } | |
| if (o.length !== 6) { | |
| return false; | |
| } | |
| m = c.hex2rgb(o); | |
| this.setValue(m); | |
| }, | |
| _hideShowEl: function (m, b) { | |
| var l = d.isString(m) ? this.getElement(m) : m; | |
| f.setStyle(l, "display", b ? "" : "none"); | |
| }, | |
| initAttributes: function (b) { | |
| b = b || {}; | |
| h.superclass.initAttributes.call(this, b); | |
| this.setAttributeConfig(this.OPT.PICKER_SIZE, { | |
| value: b.size || this.DEFAULT.PICKER_SIZE, | |
| }); | |
| this.setAttributeConfig(this.OPT.HUE, { | |
| value: b.hue || 0, | |
| validator: d.isNumber, | |
| }); | |
| this.setAttributeConfig(this.OPT.SATURATION, { | |
| value: b.saturation || 0, | |
| validator: d.isNumber, | |
| }); | |
| this.setAttributeConfig(this.OPT.VALUE, { | |
| value: d.isNumber(b.value) ? b.value : 100, | |
| validator: d.isNumber, | |
| }); | |
| this.setAttributeConfig(this.OPT.RED, { | |
| value: d.isNumber(b.red) ? b.red : 255, | |
| validator: d.isNumber, | |
| }); | |
| this.setAttributeConfig(this.OPT.GREEN, { | |
| value: d.isNumber(b.green) ? b.green : 255, | |
| validator: d.isNumber, | |
| }); | |
| this.setAttributeConfig(this.OPT.BLUE, { | |
| value: d.isNumber(b.blue) ? b.blue : 255, | |
| validator: d.isNumber, | |
| }); | |
| this.setAttributeConfig(this.OPT.HEX, { | |
| value: b.hex || "FFFFFF", | |
| validator: d.isString, | |
| }); | |
| this.setAttributeConfig(this.OPT.RGB, { | |
| value: b.rgb || [255, 255, 255], | |
| method: function (o) { | |
| this.set(this.OPT.RED, o[0], true); | |
| this.set(this.OPT.GREEN, o[1], true); | |
| this.set(this.OPT.BLUE, o[2], true); | |
| var q = c.websafe(o), | |
| p = c.rgb2hex(o), | |
| n = c.rgb2hsv(o); | |
| this.set(this.OPT.WEBSAFE, q, true); | |
| this.set(this.OPT.HEX, p, true); | |
| if (n[1]) { | |
| this.set(this.OPT.HUE, n[0], true); | |
| } | |
| this.set(this.OPT.SATURATION, Math.round(n[1] * 100), true); | |
| this.set(this.OPT.VALUE, Math.round(n[2] * 100), true); | |
| }, | |
| readonly: true, | |
| }); | |
| this.setAttributeConfig(this.OPT.CONTAINER, { | |
| value: null, | |
| method: function (n) { | |
| if (n) { | |
| n.showEvent.subscribe( | |
| function () { | |
| this.pickerSlider.focus(); | |
| }, | |
| this, | |
| true | |
| ); | |
| } | |
| }, | |
| }); | |
| this.setAttributeConfig(this.OPT.WEBSAFE, { | |
| value: b.websafe || [255, 255, 255], | |
| }); | |
| var m = b.ids || d.merge({}, this.ID), | |
| l; | |
| if (!b.ids && k > 1) { | |
| for (l in m) { | |
| if (d.hasOwnProperty(m, l)) { | |
| m[l] = m[l] + k; | |
| } | |
| } | |
| } | |
| this.setAttributeConfig(this.OPT.IDS, { value: m, writeonce: true }); | |
| this.setAttributeConfig(this.OPT.TXT, { | |
| value: b.txt || this.TXT, | |
| writeonce: true, | |
| }); | |
| this.setAttributeConfig(this.OPT.IMAGES, { | |
| value: b.images || this.IMAGE, | |
| writeonce: true, | |
| }); | |
| this.setAttributeConfig(this.OPT.ELEMENTS, { value: {}, readonly: true }); | |
| this.setAttributeConfig(this.OPT.SHOW_CONTROLS, { | |
| value: d.isBoolean(b.showcontrols) ? b.showcontrols : true, | |
| method: function (n) { | |
| var o = f.getElementsByClassName( | |
| "bd", | |
| "div", | |
| this.getElement(this.ID.CONTROLS) | |
| )[0]; | |
| this._hideShowEl(o, n); | |
| this.getElement(this.ID.CONTROLS_LABEL).innerHTML = n | |
| ? this.get(this.OPT.TXT).HIDE_CONTROLS | |
| : this.get(this.OPT.TXT).SHOW_CONTROLS; | |
| }, | |
| }); | |
| this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS, { | |
| value: d.isBoolean(b.showrgbcontrols) ? b.showrgbcontrols : true, | |
| method: function (n) { | |
| this._hideShowEl(this.ID.RGB_CONTROLS, n); | |
| }, | |
| }); | |
| this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS, { | |
| value: d.isBoolean(b.showhsvcontrols) ? b.showhsvcontrols : false, | |
| method: function (n) { | |
| this._hideShowEl(this.ID.HSV_CONTROLS, n); | |
| if (n && this.get(this.OPT.SHOW_HEX_SUMMARY)) { | |
| this.set(this.OPT.SHOW_HEX_SUMMARY, false); | |
| } | |
| }, | |
| }); | |
| this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS, { | |
| value: d.isBoolean(b.showhexcontrols) ? b.showhexcontrols : false, | |
| method: function (n) { | |
| this._hideShowEl(this.ID.HEX_CONTROLS, n); | |
| }, | |
| }); | |
| this.setAttributeConfig(this.OPT.SHOW_WEBSAFE, { | |
| value: d.isBoolean(b.showwebsafe) ? b.showwebsafe : true, | |
| method: function (n) { | |
| this._hideShowEl(this.ID.WEBSAFE_SWATCH, n); | |
| }, | |
| }); | |
| this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY, { | |
| value: d.isBoolean(b.showhexsummary) ? b.showhexsummary : true, | |
| method: function (n) { | |
| this._hideShowEl(this.ID.HEX_SUMMARY, n); | |
| if (n && this.get(this.OPT.SHOW_HSV_CONTROLS)) { | |
| this.set(this.OPT.SHOW_HSV_CONTROLS, false); | |
| } | |
| }, | |
| }); | |
| this.setAttributeConfig(this.OPT.ANIMATE, { | |
| value: d.isBoolean(b.animate) ? b.animate : true, | |
| method: function (n) { | |
| if (this.pickerSlider) { | |
| this.pickerSlider.animate = n; | |
| this.hueSlider.animate = n; | |
| } | |
| }, | |
| }); | |
| this.on(this.OPT.HUE + "Change", this._updateRGBFromHSV, this, true); | |
| this.on( | |
| this.OPT.SATURATION + "Change", | |
| this._updateRGBFromHSV, | |
| this, | |
| true | |
| ); | |
| this.on(this.OPT.VALUE + "Change", this._updateRGBFromHSV, this, true); | |
| this.on(this.OPT.RED + "Change", this._updateRGB, this, true); | |
| this.on(this.OPT.GREEN + "Change", this._updateRGB, this, true); | |
| this.on(this.OPT.BLUE + "Change", this._updateRGB, this, true); | |
| this.on(this.OPT.HEX + "Change", this._updateHex, this, true); | |
| this._initElements(); | |
| }, | |
| }); | |
| YAHOO.widget.ColorPicker = h; | |
| })(); | |
| YAHOO.register("colorpicker", YAHOO.widget.ColorPicker, { | |
| version: "2.9.0", | |
| build: "2800", | |
| }); |
| /** | |
| * @version: 1.0 Alpha-1 | |
| * @author: Coolite Inc. http://www.coolite.com/ | |
| * @date: 2008-05-13 | |
| * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved. | |
| * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. | |
| * @website: http://www.datejs.com/ | |
| */ | |
| Date.CultureInfo = { | |
| name: "en-US", | |
| englishName: "English (United States)", | |
| nativeName: "English (United States)", | |
| dayNames: [ | |
| "Sunday", | |
| "Monday", | |
| "Tuesday", | |
| "Wednesday", | |
| "Thursday", | |
| "Friday", | |
| "Saturday", | |
| ], | |
| abbreviatedDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| shortestDayNames: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| firstLetterDayNames: ["S", "M", "T", "W", "T", "F", "S"], | |
| monthNames: [ | |
| "January", | |
| "February", | |
| "March", | |
| "April", | |
| "May", | |
| "June", | |
| "July", | |
| "August", | |
| "September", | |
| "October", | |
| "November", | |
| "December", | |
| ], | |
| abbreviatedMonthNames: [ | |
| "Jan", | |
| "Feb", | |
| "Mar", | |
| "Apr", | |
| "May", | |
| "Jun", | |
| "Jul", | |
| "Aug", | |
| "Sep", | |
| "Oct", | |
| "Nov", | |
| "Dec", | |
| ], | |
| amDesignator: "AM", | |
| pmDesignator: "PM", | |
| firstDayOfWeek: 0, | |
| twoDigitYearMax: 2029, | |
| dateElementOrder: "mdy", | |
| formatPatterns: { | |
| shortDate: "M/d/yyyy", | |
| longDate: "dddd, MMMM dd, yyyy", | |
| shortTime: "h:mm tt", | |
| longTime: "h:mm:ss tt", | |
| fullDateTime: "dddd, MMMM dd, yyyy h:mm:ss tt", | |
| sortableDateTime: "yyyy-MM-ddTHH:mm:ss", | |
| universalSortableDateTime: "yyyy-MM-dd HH:mm:ssZ", | |
| rfc1123: "ddd, dd MMM yyyy HH:mm:ss GMT", | |
| monthDay: "MMMM dd", | |
| yearMonth: "MMMM, yyyy", | |
| }, | |
| regexPatterns: { | |
| jan: /^jan(uary)?/i, | |
| feb: /^feb(ruary)?/i, | |
| mar: /^mar(ch)?/i, | |
| apr: /^apr(il)?/i, | |
| may: /^may/i, | |
| jun: /^jun(e)?/i, | |
| jul: /^jul(y)?/i, | |
| aug: /^aug(ust)?/i, | |
| sep: /^sep(t(ember)?)?/i, | |
| oct: /^oct(ober)?/i, | |
| nov: /^nov(ember)?/i, | |
| dec: /^dec(ember)?/i, | |
| sun: /^su(n(day)?)?/i, | |
| mon: /^mo(n(day)?)?/i, | |
| tue: /^tu(e(s(day)?)?)?/i, | |
| wed: /^we(d(nesday)?)?/i, | |
| thu: /^th(u(r(s(day)?)?)?)?/i, | |
| fri: /^fr(i(day)?)?/i, | |
| sat: /^sa(t(urday)?)?/i, | |
| future: /^next/i, | |
| past: /^last|past|prev(ious)?/i, | |
| add: /^(\+|aft(er)?|from|hence)/i, | |
| subtract: /^(\-|bef(ore)?|ago)/i, | |
| yesterday: /^yes(terday)?/i, | |
| today: /^t(od(ay)?)?/i, | |
| tomorrow: /^tom(orrow)?/i, | |
| now: /^n(ow)?/i, | |
| millisecond: /^ms|milli(second)?s?/i, | |
| second: /^sec(ond)?s?/i, | |
| minute: /^mn|min(ute)?s?/i, | |
| hour: /^h(our)?s?/i, | |
| week: /^w(eek)?s?/i, | |
| month: /^m(onth)?s?/i, | |
| day: /^d(ay)?s?/i, | |
| year: /^y(ear)?s?/i, | |
| shortMeridian: /^(a|p)/i, | |
| longMeridian: /^(a\.?m?\.?|p\.?m?\.?)/i, | |
| timezone: | |
| /^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i, | |
| ordinalSuffix: /^\s*(st|nd|rd|th)/i, | |
| timeContext: /^\s*(\:|a(?!u|p)|p)/i, | |
| }, | |
| timezones: [ | |
| { name: "UTC", offset: "-000" }, | |
| { name: "GMT", offset: "-000" }, | |
| { name: "EST", offset: "-0500" }, | |
| { name: "EDT", offset: "-0400" }, | |
| { name: "CST", offset: "-0600" }, | |
| { name: "CDT", offset: "-0500" }, | |
| { name: "MST", offset: "-0700" }, | |
| { name: "MDT", offset: "-0600" }, | |
| { name: "PST", offset: "-0800" }, | |
| { name: "PDT", offset: "-0700" }, | |
| ], | |
| }; | |
| (function () { | |
| var $D = Date, | |
| $P = $D.prototype, | |
| $C = $D.CultureInfo, | |
| p = function (s, l) { | |
| if (!l) { | |
| l = 2; | |
| } | |
| return ("000" + s).slice(l * -1); | |
| }; | |
| $P.clearTime = function () { | |
| this.setHours(0); | |
| this.setMinutes(0); | |
| this.setSeconds(0); | |
| this.setMilliseconds(0); | |
| return this; | |
| }; | |
| $P.setTimeToNow = function () { | |
| var n = new Date(); | |
| this.setHours(n.getHours()); | |
| this.setMinutes(n.getMinutes()); | |
| this.setSeconds(n.getSeconds()); | |
| this.setMilliseconds(n.getMilliseconds()); | |
| return this; | |
| }; | |
| $D.today = function () { | |
| return new Date().clearTime(); | |
| }; | |
| $D.compare = function (date1, date2) { | |
| if (isNaN(date1) || isNaN(date2)) { | |
| throw new Error(date1 + " - " + date2); | |
| } else if (date1 instanceof Date && date2 instanceof Date) { | |
| return date1 < date2 ? -1 : date1 > date2 ? 1 : 0; | |
| } else { | |
| throw new TypeError(date1 + " - " + date2); | |
| } | |
| }; | |
| $D.equals = function (date1, date2) { | |
| return date1.compareTo(date2) === 0; | |
| }; | |
| $D.getDayNumberFromName = function (name) { | |
| var n = $C.dayNames, | |
| m = $C.abbreviatedDayNames, | |
| o = $C.shortestDayNames, | |
| s = name.toLowerCase(); | |
| for (var i = 0; i < n.length; i++) { | |
| if ( | |
| n[i].toLowerCase() == s || | |
| m[i].toLowerCase() == s || | |
| o[i].toLowerCase() == s | |
| ) { | |
| return i; | |
| } | |
| } | |
| return -1; | |
| }; | |
| $D.getMonthNumberFromName = function (name) { | |
| var n = $C.monthNames, | |
| m = $C.abbreviatedMonthNames, | |
| s = name.toLowerCase(); | |
| for (var i = 0; i < n.length; i++) { | |
| if (n[i].toLowerCase() == s || m[i].toLowerCase() == s) { | |
| return i; | |
| } | |
| } | |
| return -1; | |
| }; | |
| $D.isLeapYear = function (year) { | |
| return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; | |
| }; | |
| $D.getDaysInMonth = function (year, month) { | |
| return [ | |
| 31, | |
| $D.isLeapYear(year) ? 29 : 28, | |
| 31, | |
| 30, | |
| 31, | |
| 30, | |
| 31, | |
| 31, | |
| 30, | |
| 31, | |
| 30, | |
| 31, | |
| ][month]; | |
| }; | |
| $D.getTimezoneAbbreviation = function (offset) { | |
| var z = $C.timezones, | |
| p; | |
| for (var i = 0; i < z.length; i++) { | |
| if (z[i].offset === offset) { | |
| return z[i].name; | |
| } | |
| } | |
| return null; | |
| }; | |
| $D.getTimezoneOffset = function (name) { | |
| var z = $C.timezones, | |
| p; | |
| for (var i = 0; i < z.length; i++) { | |
| if (z[i].name === name.toUpperCase()) { | |
| return z[i].offset; | |
| } | |
| } | |
| return null; | |
| }; | |
| $P.clone = function () { | |
| return new Date(this.getTime()); | |
| }; | |
| $P.compareTo = function (date) { | |
| return Date.compare(this, date); | |
| }; | |
| $P.equals = function (date) { | |
| return Date.equals(this, date || new Date()); | |
| }; | |
| $P.between = function (start, end) { | |
| return this.getTime() >= start.getTime() && this.getTime() <= end.getTime(); | |
| }; | |
| $P.isAfter = function (date) { | |
| return this.compareTo(date || new Date()) === 1; | |
| }; | |
| $P.isBefore = function (date) { | |
| return this.compareTo(date || new Date()) === -1; | |
| }; | |
| $P.isToday = function () { | |
| return this.isSameDay(new Date()); | |
| }; | |
| $P.isSameDay = function (date) { | |
| return this.clone().clearTime().equals(date.clone().clearTime()); | |
| }; | |
| $P.addMilliseconds = function (value) { | |
| this.setMilliseconds(this.getMilliseconds() + value); | |
| return this; | |
| }; | |
| $P.addSeconds = function (value) { | |
| return this.addMilliseconds(value * 1000); | |
| }; | |
| $P.addMinutes = function (value) { | |
| return this.addMilliseconds(value * 60000); | |
| }; | |
| $P.addHours = function (value) { | |
| return this.addMilliseconds(value * 3600000); | |
| }; | |
| $P.addDays = function (value) { | |
| this.setDate(this.getDate() + value); | |
| return this; | |
| }; | |
| $P.addWeeks = function (value) { | |
| return this.addDays(value * 7); | |
| }; | |
| $P.addMonths = function (value) { | |
| var n = this.getDate(); | |
| this.setDate(1); | |
| this.setMonth(this.getMonth() + value); | |
| this.setDate( | |
| Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())) | |
| ); | |
| return this; | |
| }; | |
| $P.addYears = function (value) { | |
| return this.addMonths(value * 12); | |
| }; | |
| $P.add = function (config) { | |
| if (typeof config == "number") { | |
| this._orient = config; | |
| return this; | |
| } | |
| var x = config; | |
| if (x.milliseconds) { | |
| this.addMilliseconds(x.milliseconds); | |
| } | |
| if (x.seconds) { | |
| this.addSeconds(x.seconds); | |
| } | |
| if (x.minutes) { | |
| this.addMinutes(x.minutes); | |
| } | |
| if (x.hours) { | |
| this.addHours(x.hours); | |
| } | |
| if (x.weeks) { | |
| this.addWeeks(x.weeks); | |
| } | |
| if (x.months) { | |
| this.addMonths(x.months); | |
| } | |
| if (x.years) { | |
| this.addYears(x.years); | |
| } | |
| if (x.days) { | |
| this.addDays(x.days); | |
| } | |
| return this; | |
| }; | |
| var $y, $m, $d; | |
| $P.getWeek = function () { | |
| var a, b, c, d, e, f, g, n, s, w; | |
| $y = !$y ? this.getFullYear() : $y; | |
| $m = !$m ? this.getMonth() + 1 : $m; | |
| $d = !$d ? this.getDate() : $d; | |
| if ($m <= 2) { | |
| a = $y - 1; | |
| b = ((a / 4) | 0) - ((a / 100) | 0) + ((a / 400) | 0); | |
| c = (((a - 1) / 4) | 0) - (((a - 1) / 100) | 0) + (((a - 1) / 400) | 0); | |
| s = b - c; | |
| e = 0; | |
| f = $d - 1 + 31 * ($m - 1); | |
| } else { | |
| a = $y; | |
| b = ((a / 4) | 0) - ((a / 100) | 0) + ((a / 400) | 0); | |
| c = (((a - 1) / 4) | 0) - (((a - 1) / 100) | 0) + (((a - 1) / 400) | 0); | |
| s = b - c; | |
| e = s + 1; | |
| f = $d + (153 * ($m - 3) + 2) / 5 + 58 + s; | |
| } | |
| g = (a + b) % 7; | |
| d = (f + g - e) % 7; | |
| n = (f + 3 - d) | 0; | |
| if (n < 0) { | |
| w = 53 - (((g - s) / 5) | 0); | |
| } else if (n > 364 + s) { | |
| w = 1; | |
| } else { | |
| w = ((n / 7) | 0) + 1; | |
| } | |
| $y = $m = $d = null; | |
| return w; | |
| }; | |
| $P.getISOWeek = function () { | |
| $y = this.getUTCFullYear(); | |
| $m = this.getUTCMonth() + 1; | |
| $d = this.getUTCDate(); | |
| return p(this.getWeek()); | |
| }; | |
| $P.setWeek = function (n) { | |
| return this.moveToDayOfWeek(1).addWeeks(n - this.getWeek()); | |
| }; | |
| $D._validate = function (n, min, max, name) { | |
| if (typeof n == "undefined") { | |
| return false; | |
| } else if (typeof n != "number") { | |
| throw new TypeError(n + " is not a Number."); | |
| } else if (n < min || n > max) { | |
| throw new RangeError(n + " is not a valid value for " + name + "."); | |
| } | |
| return true; | |
| }; | |
| $D.validateMillisecond = function (value) { | |
| return $D._validate(value, 0, 999, "millisecond"); | |
| }; | |
| $D.validateSecond = function (value) { | |
| return $D._validate(value, 0, 59, "second"); | |
| }; | |
| $D.validateMinute = function (value) { | |
| return $D._validate(value, 0, 59, "minute"); | |
| }; | |
| $D.validateHour = function (value) { | |
| return $D._validate(value, 0, 23, "hour"); | |
| }; | |
| $D.validateDay = function (value, year, month) { | |
| return $D._validate(value, 1, $D.getDaysInMonth(year, month), "day"); | |
| }; | |
| $D.validateMonth = function (value) { | |
| return $D._validate(value, 0, 11, "month"); | |
| }; | |
| $D.validateYear = function (value) { | |
| return $D._validate(value, 0, 9999, "year"); | |
| }; | |
| $P.set = function (config) { | |
| if ($D.validateMillisecond(config.millisecond)) { | |
| this.addMilliseconds(config.millisecond - this.getMilliseconds()); | |
| } | |
| if ($D.validateSecond(config.second)) { | |
| this.addSeconds(config.second - this.getSeconds()); | |
| } | |
| if ($D.validateMinute(config.minute)) { | |
| this.addMinutes(config.minute - this.getMinutes()); | |
| } | |
| if ($D.validateHour(config.hour)) { | |
| this.addHours(config.hour - this.getHours()); | |
| } | |
| if ($D.validateMonth(config.month)) { | |
| this.addMonths(config.month - this.getMonth()); | |
| } | |
| if ($D.validateYear(config.year)) { | |
| this.addYears(config.year - this.getFullYear()); | |
| } | |
| if ($D.validateDay(config.day, this.getFullYear(), this.getMonth())) { | |
| this.addDays(config.day - this.getDate()); | |
| } | |
| if (config.timezone) { | |
| this.setTimezone(config.timezone); | |
| } | |
| if (config.timezoneOffset) { | |
| this.setTimezoneOffset(config.timezoneOffset); | |
| } | |
| if (config.week && $D._validate(config.week, 0, 53, "week")) { | |
| this.setWeek(config.week); | |
| } | |
| return this; | |
| }; | |
| $P.moveToFirstDayOfMonth = function () { | |
| return this.set({ day: 1 }); | |
| }; | |
| $P.moveToLastDayOfMonth = function () { | |
| return this.set({ | |
| day: $D.getDaysInMonth(this.getFullYear(), this.getMonth()), | |
| }); | |
| }; | |
| $P.moveToNthOccurrence = function (dayOfWeek, occurrence) { | |
| var shift = 0; | |
| if (occurrence > 0) { | |
| shift = occurrence - 1; | |
| } else if (occurrence === -1) { | |
| this.moveToLastDayOfMonth(); | |
| if (this.getDay() !== dayOfWeek) { | |
| this.moveToDayOfWeek(dayOfWeek, -1); | |
| } | |
| return this; | |
| } | |
| return this.moveToFirstDayOfMonth() | |
| .addDays(-1) | |
| .moveToDayOfWeek(dayOfWeek, +1) | |
| .addWeeks(shift); | |
| }; | |
| $P.moveToDayOfWeek = function (dayOfWeek, orient) { | |
| var diff = (dayOfWeek - this.getDay() + 7 * (orient || +1)) % 7; | |
| return this.addDays(diff === 0 ? (diff += 7 * (orient || +1)) : diff); | |
| }; | |
| $P.moveToMonth = function (month, orient) { | |
| var diff = (month - this.getMonth() + 12 * (orient || +1)) % 12; | |
| return this.addMonths(diff === 0 ? (diff += 12 * (orient || +1)) : diff); | |
| }; | |
| $P.getOrdinalNumber = function () { | |
| return ( | |
| Math.ceil( | |
| (this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / | |
| 86400000 | |
| ) + 1 | |
| ); | |
| }; | |
| $P.getTimezone = function () { | |
| return $D.getTimezoneAbbreviation(this.getUTCOffset()); | |
| }; | |
| $P.setTimezoneOffset = function (offset) { | |
| var here = this.getTimezoneOffset(), | |
| there = (Number(offset) * -6) / 10; | |
| return this.addMinutes(there - here); | |
| }; | |
| $P.setTimezone = function (offset) { | |
| return this.setTimezoneOffset($D.getTimezoneOffset(offset)); | |
| }; | |
| $P.hasDaylightSavingTime = function () { | |
| return ( | |
| Date.today().set({ month: 0, day: 1 }).getTimezoneOffset() !== | |
| Date.today().set({ month: 6, day: 1 }).getTimezoneOffset() | |
| ); | |
| }; | |
| $P.isDaylightSavingTime = function () { | |
| return ( | |
| this.hasDaylightSavingTime() && | |
| new Date().getTimezoneOffset() === | |
| Date.today().set({ month: 6, day: 1 }).getTimezoneOffset() | |
| ); | |
| }; | |
| $P.getUTCOffset = function () { | |
| var n = (this.getTimezoneOffset() * -10) / 6, | |
| r; | |
| if (n < 0) { | |
| r = (n - 10000).toString(); | |
| return r.charAt(0) + r.substr(2); | |
| } else { | |
| r = (n + 10000).toString(); | |
| return "+" + r.substr(1); | |
| } | |
| }; | |
| $P.getElapsed = function (date) { | |
| return (date || new Date()) - this; | |
| }; | |
| if (!$P.toISOString) { | |
| $P.toISOString = function () { | |
| function f(n) { | |
| return n < 10 ? "0" + n : n; | |
| } | |
| return ( | |
| '"' + | |
| this.getUTCFullYear() + | |
| "-" + | |
| f(this.getUTCMonth() + 1) + | |
| "-" + | |
| f(this.getUTCDate()) + | |
| "T" + | |
| f(this.getUTCHours()) + | |
| ":" + | |
| f(this.getUTCMinutes()) + | |
| ":" + | |
| f(this.getUTCSeconds()) + | |
| 'Z"' | |
| ); | |
| }; | |
| } | |
| $P._toString = $P.toString; | |
| $P.toString = function (format) { | |
| var x = this; | |
| if (format && format.length == 1) { | |
| var c = $C.formatPatterns; | |
| x.t = x.toString; | |
| switch (format) { | |
| case "d": | |
| return x.t(c.shortDate); | |
| case "D": | |
| return x.t(c.longDate); | |
| case "F": | |
| return x.t(c.fullDateTime); | |
| case "m": | |
| return x.t(c.monthDay); | |
| case "r": | |
| return x.t(c.rfc1123); | |
| case "s": | |
| return x.t(c.sortableDateTime); | |
| case "t": | |
| return x.t(c.shortTime); | |
| case "T": | |
| return x.t(c.longTime); | |
| case "u": | |
| return x.t(c.universalSortableDateTime); | |
| case "y": | |
| return x.t(c.yearMonth); | |
| } | |
| } | |
| var ord = function (n) { | |
| switch (n * 1) { | |
| case 1: | |
| case 21: | |
| case 31: | |
| return "st"; | |
| case 2: | |
| case 22: | |
| return "nd"; | |
| case 3: | |
| case 23: | |
| return "rd"; | |
| default: | |
| return "th"; | |
| } | |
| }; | |
| return format | |
| ? format.replace( | |
| /(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g, | |
| function (m) { | |
| if (m.charAt(0) === "\\") { | |
| return m.replace("\\", ""); | |
| } | |
| x.h = x.getHours; | |
| switch (m) { | |
| case "hh": | |
| return p(x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : x.h() - 12); | |
| case "h": | |
| return x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : x.h() - 12; | |
| case "HH": | |
| return p(x.h()); | |
| case "H": | |
| return x.h(); | |
| case "mm": | |
| return p(x.getMinutes()); | |
| case "m": | |
| return x.getMinutes(); | |
| case "ss": | |
| return p(x.getSeconds()); | |
| case "s": | |
| return x.getSeconds(); | |
| case "yyyy": | |
| return p(x.getFullYear(), 4); | |
| case "yy": | |
| return p(x.getFullYear()); | |
| case "dddd": | |
| return $C.dayNames[x.getDay()]; | |
| case "ddd": | |
| return $C.abbreviatedDayNames[x.getDay()]; | |
| case "dd": | |
| return p(x.getDate()); | |
| case "d": | |
| return x.getDate(); | |
| case "MMMM": | |
| return $C.monthNames[x.getMonth()]; | |
| case "MMM": | |
| return $C.abbreviatedMonthNames[x.getMonth()]; | |
| case "MM": | |
| return p(x.getMonth() + 1); | |
| case "M": | |
| return x.getMonth() + 1; | |
| case "t": | |
| return x.h() < 12 | |
| ? $C.amDesignator.substring(0, 1) | |
| : $C.pmDesignator.substring(0, 1); | |
| case "tt": | |
| return x.h() < 12 ? $C.amDesignator : $C.pmDesignator; | |
| case "S": | |
| return ord(x.getDate()); | |
| default: | |
| return m; | |
| } | |
| } | |
| ) | |
| : this._toString(); | |
| }; | |
| })(); | |
| (function () { | |
| var $D = Date, | |
| $P = $D.prototype, | |
| $C = $D.CultureInfo, | |
| $N = Number.prototype; | |
| $P._orient = +1; | |
| $P._nth = null; | |
| $P._is = false; | |
| $P._same = false; | |
| $P._isSecond = false; | |
| $N._dateElement = "day"; | |
| $P.next = function () { | |
| this._orient = +1; | |
| return this; | |
| }; | |
| $D.next = function () { | |
| return $D.today().next(); | |
| }; | |
| $P.last = | |
| $P.prev = | |
| $P.previous = | |
| function () { | |
| this._orient = -1; | |
| return this; | |
| }; | |
| $D.last = | |
| $D.prev = | |
| $D.previous = | |
| function () { | |
| return $D.today().last(); | |
| }; | |
| $P.is = function () { | |
| this._is = true; | |
| return this; | |
| }; | |
| $P.same = function () { | |
| this._same = true; | |
| this._isSecond = false; | |
| return this; | |
| }; | |
| $P.today = function () { | |
| return this.same().day(); | |
| }; | |
| $P.weekday = function () { | |
| if (this._is) { | |
| this._is = false; | |
| return !this.is().sat() && !this.is().sun(); | |
| } | |
| return false; | |
| }; | |
| $P.at = function (time) { | |
| return typeof time === "string" | |
| ? $D.parse(this.toString("d") + " " + time) | |
| : this.set(time); | |
| }; | |
| $N.fromNow = $N.after = function (date) { | |
| var c = {}; | |
| c[this._dateElement] = this; | |
| return (!date ? new Date() : date.clone()).add(c); | |
| }; | |
| $N.ago = $N.before = function (date) { | |
| var c = {}; | |
| c[this._dateElement] = this * -1; | |
| return (!date ? new Date() : date.clone()).add(c); | |
| }; | |
| var dx = "sunday monday tuesday wednesday thursday friday saturday".split( | |
| /\s/ | |
| ), | |
| mx = | |
| "january february march april may june july august september october november december".split( | |
| /\s/ | |
| ), | |
| px = "Millisecond Second Minute Hour Day Week Month Year".split(/\s/), | |
| pxf = "Milliseconds Seconds Minutes Hours Date Week Month FullYear".split( | |
| /\s/ | |
| ), | |
| nth = "final first second third fourth fifth".split(/\s/), | |
| de; | |
| $P.toObject = function () { | |
| var o = {}; | |
| for (var i = 0; i < px.length; i++) { | |
| o[px[i].toLowerCase()] = this["get" + pxf[i]](); | |
| } | |
| return o; | |
| }; | |
| $D.fromObject = function (config) { | |
| config.week = null; | |
| return Date.today().set(config); | |
| }; | |
| var df = function (n) { | |
| return function () { | |
| if (this._is) { | |
| this._is = false; | |
| return this.getDay() == n; | |
| } | |
| if (this._nth !== null) { | |
| if (this._isSecond) { | |
| this.addSeconds(this._orient * -1); | |
| } | |
| this._isSecond = false; | |
| var ntemp = this._nth; | |
| this._nth = null; | |
| var temp = this.clone().moveToLastDayOfMonth(); | |
| this.moveToNthOccurrence(n, ntemp); | |
| if (this > temp) { | |
| throw new RangeError( | |
| $D.getDayName(n) + | |
| " does not occur " + | |
| ntemp + | |
| " times in the month of " + | |
| $D.getMonthName(temp.getMonth()) + | |
| " " + | |
| temp.getFullYear() + | |
| "." | |
| ); | |
| } | |
| return this; | |
| } | |
| return this.moveToDayOfWeek(n, this._orient); | |
| }; | |
| }; | |
| var sdf = function (n) { | |
| return function () { | |
| var t = $D.today(), | |
| shift = n - t.getDay(); | |
| if (n === 0 && $C.firstDayOfWeek === 1 && t.getDay() !== 0) { | |
| shift = shift + 7; | |
| } | |
| return t.addDays(shift); | |
| }; | |
| }; | |
| for (var i = 0; i < dx.length; i++) { | |
| $D[dx[i].toUpperCase()] = $D[dx[i].toUpperCase().substring(0, 3)] = i; | |
| $D[dx[i]] = $D[dx[i].substring(0, 3)] = sdf(i); | |
| $P[dx[i]] = $P[dx[i].substring(0, 3)] = df(i); | |
| } | |
| var mf = function (n) { | |
| return function () { | |
| if (this._is) { | |
| this._is = false; | |
| return this.getMonth() === n; | |
| } | |
| return this.moveToMonth(n, this._orient); | |
| }; | |
| }; | |
| var smf = function (n) { | |
| return function () { | |
| return $D.today().set({ month: n, day: 1 }); | |
| }; | |
| }; | |
| for (var j = 0; j < mx.length; j++) { | |
| $D[mx[j].toUpperCase()] = $D[mx[j].toUpperCase().substring(0, 3)] = j; | |
| $D[mx[j]] = $D[mx[j].substring(0, 3)] = smf(j); | |
| $P[mx[j]] = $P[mx[j].substring(0, 3)] = mf(j); | |
| } | |
| var ef = function (j) { | |
| return function () { | |
| if (this._isSecond) { | |
| this._isSecond = false; | |
| return this; | |
| } | |
| if (this._same) { | |
| this._same = this._is = false; | |
| var o1 = this.toObject(), | |
| o2 = (arguments[0] || new Date()).toObject(), | |
| v = "", | |
| k = j.toLowerCase(); | |
| for (var m = px.length - 1; m > -1; m--) { | |
| v = px[m].toLowerCase(); | |
| if (o1[v] != o2[v]) { | |
| return false; | |
| } | |
| if (k == v) { | |
| break; | |
| } | |
| } | |
| return true; | |
| } | |
| if (j.substring(j.length - 1) != "s") { | |
| j += "s"; | |
| } | |
| return this["add" + j](this._orient); | |
| }; | |
| }; | |
| var nf = function (n) { | |
| return function () { | |
| this._dateElement = n; | |
| return this; | |
| }; | |
| }; | |
| for (var k = 0; k < px.length; k++) { | |
| de = px[k].toLowerCase(); | |
| $P[de] = $P[de + "s"] = ef(px[k]); | |
| $N[de] = $N[de + "s"] = nf(de); | |
| } | |
| $P._ss = ef("Second"); | |
| var nthfn = function (n) { | |
| return function (dayOfWeek) { | |
| if (this._same) { | |
| return this._ss(arguments[0]); | |
| } | |
| if (dayOfWeek || dayOfWeek === 0) { | |
| return this.moveToNthOccurrence(dayOfWeek, n); | |
| } | |
| this._nth = n; | |
| if (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) { | |
| this._isSecond = true; | |
| return this.addSeconds(this._orient); | |
| } | |
| return this; | |
| }; | |
| }; | |
| for (var l = 0; l < nth.length; l++) { | |
| $P[nth[l]] = l === 0 ? nthfn(-1) : nthfn(l); | |
| } | |
| })(); | |
| (function () { | |
| Date.Parsing = { | |
| Exception: function (s) { | |
| this.message = "Parse error at '" + s.substring(0, 10) + " ...'"; | |
| }, | |
| }; | |
| var $P = Date.Parsing; | |
| var _ = ($P.Operators = { | |
| rtoken: function (r) { | |
| return function (s) { | |
| var mx = s.match(r); | |
| if (mx) { | |
| return [mx[0], s.substring(mx[0].length)]; | |
| } else { | |
| throw new $P.Exception(s); | |
| } | |
| }; | |
| }, | |
| token: function (s) { | |
| return function (s) { | |
| return _.rtoken(new RegExp("^s*" + s + "s*"))(s); | |
| }; | |
| }, | |
| stoken: function (s) { | |
| return _.rtoken(new RegExp("^" + s)); | |
| }, | |
| until: function (p) { | |
| return function (s) { | |
| var qx = [], | |
| rx = null; | |
| while (s.length) { | |
| try { | |
| rx = p.call(this, s); | |
| } catch (e) { | |
| qx.push(rx[0]); | |
| s = rx[1]; | |
| continue; | |
| } | |
| break; | |
| } | |
| return [qx, s]; | |
| }; | |
| }, | |
| many: function (p) { | |
| return function (s) { | |
| var rx = [], | |
| r = null; | |
| while (s.length) { | |
| try { | |
| r = p.call(this, s); | |
| } catch (e) { | |
| return [rx, s]; | |
| } | |
| rx.push(r[0]); | |
| s = r[1]; | |
| } | |
| return [rx, s]; | |
| }; | |
| }, | |
| optional: function (p) { | |
| return function (s) { | |
| var r = null; | |
| try { | |
| r = p.call(this, s); | |
| } catch (e) { | |
| return [null, s]; | |
| } | |
| return [r[0], r[1]]; | |
| }; | |
| }, | |
| not: function (p) { | |
| return function (s) { | |
| try { | |
| p.call(this, s); | |
| } catch (e) { | |
| return [null, s]; | |
| } | |
| throw new $P.Exception(s); | |
| }; | |
| }, | |
| ignore: function (p) { | |
| return p | |
| ? function (s) { | |
| var r = null; | |
| r = p.call(this, s); | |
| return [null, r[1]]; | |
| } | |
| : null; | |
| }, | |
| product: function () { | |
| var px = arguments[0], | |
| qx = Array.prototype.slice.call(arguments, 1), | |
| rx = []; | |
| for (var i = 0; i < px.length; i++) { | |
| rx.push(_.each(px[i], qx)); | |
| } | |
| return rx; | |
| }, | |
| cache: function (rule) { | |
| var cache = {}, | |
| r = null; | |
| return function (s) { | |
| try { | |
| r = cache[s] = cache[s] || rule.call(this, s); | |
| } catch (e) { | |
| r = cache[s] = e; | |
| } | |
| if (r instanceof $P.Exception) { | |
| throw r; | |
| } else { | |
| return r; | |
| } | |
| }; | |
| }, | |
| any: function () { | |
| var px = arguments; | |
| return function (s) { | |
| var r = null; | |
| for (var i = 0; i < px.length; i++) { | |
| if (px[i] == null) { | |
| continue; | |
| } | |
| try { | |
| r = px[i].call(this, s); | |
| } catch (e) { | |
| r = null; | |
| } | |
| if (r) { | |
| return r; | |
| } | |
| } | |
| throw new $P.Exception(s); | |
| }; | |
| }, | |
| each: function () { | |
| var px = arguments; | |
| return function (s) { | |
| var rx = [], | |
| r = null; | |
| for (var i = 0; i < px.length; i++) { | |
| if (px[i] == null) { | |
| continue; | |
| } | |
| try { | |
| r = px[i].call(this, s); | |
| } catch (e) { | |
| throw new $P.Exception(s); | |
| } | |
| rx.push(r[0]); | |
| s = r[1]; | |
| } | |
| return [rx, s]; | |
| }; | |
| }, | |
| all: function () { | |
| var px = arguments, | |
| _ = _; | |
| return _.each(_.optional(px)); | |
| }, | |
| sequence: function (px, d, c) { | |
| d = d || _.rtoken(/^\s*/); | |
| c = c || null; | |
| if (px.length == 1) { | |
| return px[0]; | |
| } | |
| return function (s) { | |
| var r = null, | |
| q = null; | |
| var rx = []; | |
| for (var i = 0; i < px.length; i++) { | |
| try { | |
| r = px[i].call(this, s); | |
| } catch (e) { | |
| break; | |
| } | |
| rx.push(r[0]); | |
| try { | |
| q = d.call(this, r[1]); | |
| } catch (ex) { | |
| q = null; | |
| break; | |
| } | |
| s = q[1]; | |
| } | |
| if (!r) { | |
| throw new $P.Exception(s); | |
| } | |
| if (q) { | |
| throw new $P.Exception(q[1]); | |
| } | |
| if (c) { | |
| try { | |
| r = c.call(this, r[1]); | |
| } catch (ey) { | |
| throw new $P.Exception(r[1]); | |
| } | |
| } | |
| return [rx, r ? r[1] : s]; | |
| }; | |
| }, | |
| between: function (d1, p, d2) { | |
| d2 = d2 || d1; | |
| var _fn = _.each(_.ignore(d1), p, _.ignore(d2)); | |
| return function (s) { | |
| var rx = _fn.call(this, s); | |
| return [[rx[0][0], r[0][2]], rx[1]]; | |
| }; | |
| }, | |
| list: function (p, d, c) { | |
| d = d || _.rtoken(/^\s*/); | |
| c = c || null; | |
| return p instanceof Array | |
| ? _.each( | |
| _.product(p.slice(0, -1), _.ignore(d)), | |
| p.slice(-1), | |
| _.ignore(c) | |
| ) | |
| : _.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)); | |
| }, | |
| set: function (px, d, c) { | |
| d = d || _.rtoken(/^\s*/); | |
| c = c || null; | |
| return function (s) { | |
| var r = null, | |
| p = null, | |
| q = null, | |
| rx = null, | |
| best = [[], s], | |
| last = false; | |
| for (var i = 0; i < px.length; i++) { | |
| q = null; | |
| p = null; | |
| r = null; | |
| last = px.length == 1; | |
| try { | |
| r = px[i].call(this, s); | |
| } catch (e) { | |
| continue; | |
| } | |
| rx = [[r[0]], r[1]]; | |
| if (r[1].length > 0 && !last) { | |
| try { | |
| q = d.call(this, r[1]); | |
| } catch (ex) { | |
| last = true; | |
| } | |
| } else { | |
| last = true; | |
| } | |
| if (!last && q[1].length === 0) { | |
| last = true; | |
| } | |
| if (!last) { | |
| var qx = []; | |
| for (var j = 0; j < px.length; j++) { | |
| if (i != j) { | |
| qx.push(px[j]); | |
| } | |
| } | |
| p = _.set(qx, d).call(this, q[1]); | |
| if (p[0].length > 0) { | |
| rx[0] = rx[0].concat(p[0]); | |
| rx[1] = p[1]; | |
| } | |
| } | |
| if (rx[1].length < best[1].length) { | |
| best = rx; | |
| } | |
| if (best[1].length === 0) { | |
| break; | |
| } | |
| } | |
| if (best[0].length === 0) { | |
| return best; | |
| } | |
| if (c) { | |
| try { | |
| q = c.call(this, best[1]); | |
| } catch (ey) { | |
| throw new $P.Exception(best[1]); | |
| } | |
| best[1] = q[1]; | |
| } | |
| return best; | |
| }; | |
| }, | |
| forward: function (gr, fname) { | |
| return function (s) { | |
| return gr[fname].call(this, s); | |
| }; | |
| }, | |
| replace: function (rule, repl) { | |
| return function (s) { | |
| var r = rule.call(this, s); | |
| return [repl, r[1]]; | |
| }; | |
| }, | |
| process: function (rule, fn) { | |
| return function (s) { | |
| var r = rule.call(this, s); | |
| return [fn.call(this, r[0]), r[1]]; | |
| }; | |
| }, | |
| min: function (min, rule) { | |
| return function (s) { | |
| var rx = rule.call(this, s); | |
| if (rx[0].length < min) { | |
| throw new $P.Exception(s); | |
| } | |
| return rx; | |
| }; | |
| }, | |
| }); | |
| var _generator = function (op) { | |
| return function () { | |
| var args = null, | |
| rx = []; | |
| if (arguments.length > 1) { | |
| args = Array.prototype.slice.call(arguments); | |
| } else if (arguments[0] instanceof Array) { | |
| args = arguments[0]; | |
| } | |
| if (args) { | |
| for (var i = 0, px = args.shift(); i < px.length; i++) { | |
| args.unshift(px[i]); | |
| rx.push(op.apply(null, args)); | |
| args.shift(); | |
| return rx; | |
| } | |
| } else { | |
| return op.apply(null, arguments); | |
| } | |
| }; | |
| }; | |
| var gx = "optional not ignore cache".split(/\s/); | |
| for (var i = 0; i < gx.length; i++) { | |
| _[gx[i]] = _generator(_[gx[i]]); | |
| } | |
| var _vector = function (op) { | |
| return function () { | |
| if (arguments[0] instanceof Array) { | |
| return op.apply(null, arguments[0]); | |
| } else { | |
| return op.apply(null, arguments); | |
| } | |
| }; | |
| }; | |
| var vx = "each any all".split(/\s/); | |
| for (var j = 0; j < vx.length; j++) { | |
| _[vx[j]] = _vector(_[vx[j]]); | |
| } | |
| })(); | |
| (function () { | |
| var $D = Date, | |
| $P = $D.prototype, | |
| $C = $D.CultureInfo; | |
| var flattenAndCompact = function (ax) { | |
| var rx = []; | |
| for (var i = 0; i < ax.length; i++) { | |
| if (ax[i] instanceof Array) { | |
| rx = rx.concat(flattenAndCompact(ax[i])); | |
| } else { | |
| if (ax[i]) { | |
| rx.push(ax[i]); | |
| } | |
| } | |
| } | |
| return rx; | |
| }; | |
| $D.Grammar = {}; | |
| $D.Translator = { | |
| hour: function (s) { | |
| return function () { | |
| this.hour = Number(s); | |
| }; | |
| }, | |
| minute: function (s) { | |
| return function () { | |
| this.minute = Number(s); | |
| }; | |
| }, | |
| second: function (s) { | |
| return function () { | |
| this.second = Number(s); | |
| }; | |
| }, | |
| meridian: function (s) { | |
| return function () { | |
| this.meridian = s.slice(0, 1).toLowerCase(); | |
| }; | |
| }, | |
| timezone: function (s) { | |
| return function () { | |
| var n = s.replace(/[^\d\+\-]/g, ""); | |
| if (n.length) { | |
| this.timezoneOffset = Number(n); | |
| } else { | |
| this.timezone = s.toLowerCase(); | |
| } | |
| }; | |
| }, | |
| day: function (x) { | |
| var s = x[0]; | |
| return function () { | |
| this.day = Number(s.match(/\d+/)[0]); | |
| }; | |
| }, | |
| month: function (s) { | |
| return function () { | |
| this.month = | |
| s.length == 3 | |
| ? "jan feb mar apr may jun jul aug sep oct nov dec".indexOf(s) / 4 | |
| : Number(s) - 1; | |
| }; | |
| }, | |
| year: function (s) { | |
| return function () { | |
| var n = Number(s); | |
| this.year = | |
| s.length > 2 ? n : n + (n + 2000 < $C.twoDigitYearMax ? 2000 : 1900); | |
| }; | |
| }, | |
| rday: function (s) { | |
| return function () { | |
| switch (s) { | |
| case "yesterday": | |
| this.days = -1; | |
| break; | |
| case "tomorrow": | |
| this.days = 1; | |
| break; | |
| case "today": | |
| this.days = 0; | |
| break; | |
| case "now": | |
| this.days = 0; | |
| this.now = true; | |
| break; | |
| } | |
| }; | |
| }, | |
| finishExact: function (x) { | |
| x = x instanceof Array ? x : [x]; | |
| for (var i = 0; i < x.length; i++) { | |
| if (x[i]) { | |
| x[i].call(this); | |
| } | |
| } | |
| var now = new Date(); | |
| if ( | |
| (this.hour || this.minute) && | |
| !this.month && | |
| !this.year && | |
| !this.day | |
| ) { | |
| this.day = now.getDate(); | |
| } | |
| if (!this.year) { | |
| this.year = now.getFullYear(); | |
| } | |
| if (!this.month && this.month !== 0) { | |
| this.month = now.getMonth(); | |
| } | |
| if (!this.day) { | |
| this.day = 1; | |
| } | |
| if (!this.hour) { | |
| this.hour = 0; | |
| } | |
| if (!this.minute) { | |
| this.minute = 0; | |
| } | |
| if (!this.second) { | |
| this.second = 0; | |
| } | |
| if (this.meridian && this.hour) { | |
| if (this.meridian == "p" && this.hour < 12) { | |
| this.hour = this.hour + 12; | |
| } else if (this.meridian == "a" && this.hour == 12) { | |
| this.hour = 0; | |
| } | |
| } | |
| if (this.day > $D.getDaysInMonth(this.year, this.month)) { | |
| throw new RangeError(this.day + " is not a valid value for days."); | |
| } | |
| var r = new Date( | |
| this.year, | |
| this.month, | |
| this.day, | |
| this.hour, | |
| this.minute, | |
| this.second | |
| ); | |
| if (this.timezone) { | |
| r.set({ timezone: this.timezone }); | |
| } else if (this.timezoneOffset) { | |
| r.set({ timezoneOffset: this.timezoneOffset }); | |
| } | |
| return r; | |
| }, | |
| finish: function (x) { | |
| x = x instanceof Array ? flattenAndCompact(x) : [x]; | |
| if (x.length === 0) { | |
| return null; | |
| } | |
| for (var i = 0; i < x.length; i++) { | |
| if (typeof x[i] == "function") { | |
| x[i].call(this); | |
| } | |
| } | |
| var today = $D.today(); | |
| if (this.now && !this.unit && !this.operator) { | |
| return new Date(); | |
| } else if (this.now) { | |
| today = new Date(); | |
| } | |
| var expression = !!( | |
| (this.days && this.days !== null) || | |
| this.orient || | |
| this.operator | |
| ); | |
| var gap, mod, orient; | |
| orient = this.orient == "past" || this.operator == "subtract" ? -1 : 1; | |
| if (!this.now && "hour minute second".indexOf(this.unit) != -1) { | |
| today.setTimeToNow(); | |
| } | |
| if (this.month || this.month === 0) { | |
| if ("year day hour minute second".indexOf(this.unit) != -1) { | |
| this.value = this.month + 1; | |
| this.month = null; | |
| expression = true; | |
| } | |
| } | |
| if (!expression && this.weekday && !this.day && !this.days) { | |
| var temp = Date[this.weekday](); | |
| this.day = temp.getDate(); | |
| if (!this.month) { | |
| this.month = temp.getMonth(); | |
| } | |
| this.year = temp.getFullYear(); | |
| } | |
| if (expression && this.weekday && this.unit != "month") { | |
| this.unit = "day"; | |
| gap = $D.getDayNumberFromName(this.weekday) - today.getDay(); | |
| mod = 7; | |
| this.days = gap ? (gap + orient * mod) % mod : orient * mod; | |
| } | |
| if (this.month && this.unit == "day" && this.operator) { | |
| this.value = this.month + 1; | |
| this.month = null; | |
| } | |
| if (this.value != null && this.month != null && this.year != null) { | |
| this.day = this.value * 1; | |
| } | |
| if (this.month && !this.day && this.value) { | |
| today.set({ day: this.value * 1 }); | |
| if (!expression) { | |
| this.day = this.value * 1; | |
| } | |
| } | |
| if (!this.month && this.value && this.unit == "month" && !this.now) { | |
| this.month = this.value; | |
| expression = true; | |
| } | |
| if ( | |
| expression && | |
| (this.month || this.month === 0) && | |
| this.unit != "year" | |
| ) { | |
| this.unit = "month"; | |
| gap = this.month - today.getMonth(); | |
| mod = 12; | |
| this.months = gap ? (gap + orient * mod) % mod : orient * mod; | |
| this.month = null; | |
| } | |
| if (!this.unit) { | |
| this.unit = "day"; | |
| } | |
| if ( | |
| !this.value && | |
| this.operator && | |
| this.operator !== null && | |
| this[this.unit + "s"] && | |
| this[this.unit + "s"] !== null | |
| ) { | |
| this[this.unit + "s"] = | |
| this[this.unit + "s"] + | |
| (this.operator == "add" ? 1 : -1) + | |
| (this.value || 0) * orient; | |
| } else if (this[this.unit + "s"] == null || this.operator != null) { | |
| if (!this.value) { | |
| this.value = 1; | |
| } | |
| this[this.unit + "s"] = this.value * orient; | |
| } | |
| if (this.meridian && this.hour) { | |
| if (this.meridian == "p" && this.hour < 12) { | |
| this.hour = this.hour + 12; | |
| } else if (this.meridian == "a" && this.hour == 12) { | |
| this.hour = 0; | |
| } | |
| } | |
| if (this.weekday && !this.day && !this.days) { | |
| var temp = Date[this.weekday](); | |
| this.day = temp.getDate(); | |
| if (temp.getMonth() !== today.getMonth()) { | |
| this.month = temp.getMonth(); | |
| } | |
| } | |
| if ((this.month || this.month === 0) && !this.day) { | |
| this.day = 1; | |
| } | |
| if ( | |
| !this.orient && | |
| !this.operator && | |
| this.unit == "week" && | |
| this.value && | |
| !this.day && | |
| !this.month | |
| ) { | |
| return Date.today().setWeek(this.value); | |
| } | |
| if (expression && this.timezone && this.day && this.days) { | |
| this.day = this.days; | |
| } | |
| return expression ? today.add(this) : today.set(this); | |
| }, | |
| }; | |
| var _ = $D.Parsing.Operators, | |
| g = $D.Grammar, | |
| t = $D.Translator, | |
| _fn; | |
| g.datePartDelimiter = _.rtoken(/^([\s\-\.\,\/\x27]+)/); | |
| g.timePartDelimiter = _.stoken(":"); | |
| g.whiteSpace = _.rtoken(/^\s*/); | |
| g.generalDelimiter = _.rtoken(/^(([\s\,]|at|@|on)+)/); | |
| var _C = {}; | |
| g.ctoken = function (keys) { | |
| var fn = _C[keys]; | |
| if (!fn) { | |
| var c = $C.regexPatterns; | |
| var kx = keys.split(/\s+/), | |
| px = []; | |
| for (var i = 0; i < kx.length; i++) { | |
| px.push(_.replace(_.rtoken(c[kx[i]]), kx[i])); | |
| } | |
| fn = _C[keys] = _.any.apply(null, px); | |
| } | |
| return fn; | |
| }; | |
| g.ctoken2 = function (key) { | |
| return _.rtoken($C.regexPatterns[key]); | |
| }; | |
| g.h = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/), t.hour)); | |
| g.hh = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/), t.hour)); | |
| g.H = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/), t.hour)); | |
| g.HH = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/), t.hour)); | |
| g.m = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.minute)); | |
| g.mm = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.minute)); | |
| g.s = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.second)); | |
| g.ss = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.second)); | |
| g.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter)); | |
| g.t = _.cache(_.process(g.ctoken2("shortMeridian"), t.meridian)); | |
| g.tt = _.cache(_.process(g.ctoken2("longMeridian"), t.meridian)); | |
| g.z = _.cache( | |
| _.process( | |
| _.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), | |
| t.timezone | |
| ) | |
| ); | |
| g.zz = _.cache( | |
| _.process( | |
| _.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/), | |
| t.timezone | |
| ) | |
| ); | |
| g.zzz = _.cache(_.process(g.ctoken2("timezone"), t.timezone)); | |
| g.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([g.tt, g.zzz])); | |
| g.time = _.each(_.optional(_.ignore(_.stoken("T"))), g.hms, g.timeSuffix); | |
| g.d = _.cache( | |
| _.process( | |
| _.each( | |
| _.rtoken(/^([0-2]\d|3[0-1]|\d)/), | |
| _.optional(g.ctoken2("ordinalSuffix")) | |
| ), | |
| t.day | |
| ) | |
| ); | |
| g.dd = _.cache( | |
| _.process( | |
| _.each( | |
| _.rtoken(/^([0-2]\d|3[0-1])/), | |
| _.optional(g.ctoken2("ordinalSuffix")) | |
| ), | |
| t.day | |
| ) | |
| ); | |
| g.ddd = g.dddd = _.cache( | |
| _.process(g.ctoken("sun mon tue wed thu fri sat"), function (s) { | |
| return function () { | |
| this.weekday = s; | |
| }; | |
| }) | |
| ); | |
| g.M = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/), t.month)); | |
| g.MM = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/), t.month)); | |
| g.MMM = g.MMMM = _.cache( | |
| _.process( | |
| g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"), | |
| t.month | |
| ) | |
| ); | |
| g.y = _.cache(_.process(_.rtoken(/^(\d\d?)/), t.year)); | |
| g.yy = _.cache(_.process(_.rtoken(/^(\d\d)/), t.year)); | |
| g.yyy = _.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/), t.year)); | |
| g.yyyy = _.cache(_.process(_.rtoken(/^(\d\d\d\d)/), t.year)); | |
| _fn = function () { | |
| return _.each( | |
| _.any.apply(null, arguments), | |
| _.not(g.ctoken2("timeContext")) | |
| ); | |
| }; | |
| g.day = _fn(g.d, g.dd); | |
| g.month = _fn(g.M, g.MMM); | |
| g.year = _fn(g.yyyy, g.yy); | |
| g.orientation = _.process(g.ctoken("past future"), function (s) { | |
| return function () { | |
| this.orient = s; | |
| }; | |
| }); | |
| g.operator = _.process(g.ctoken("add subtract"), function (s) { | |
| return function () { | |
| this.operator = s; | |
| }; | |
| }); | |
| g.rday = _.process(g.ctoken("yesterday tomorrow today now"), t.rday); | |
| g.unit = _.process( | |
| g.ctoken("second minute hour day week month year"), | |
| function (s) { | |
| return function () { | |
| this.unit = s; | |
| }; | |
| } | |
| ); | |
| g.value = _.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/), function (s) { | |
| return function () { | |
| this.value = s.replace(/\D/g, ""); | |
| }; | |
| }); | |
| g.expression = _.set([ | |
| g.rday, | |
| g.operator, | |
| g.value, | |
| g.unit, | |
| g.orientation, | |
| g.ddd, | |
| g.MMM, | |
| ]); | |
| _fn = function () { | |
| return _.set(arguments, g.datePartDelimiter); | |
| }; | |
| g.mdy = _fn(g.ddd, g.month, g.day, g.year); | |
| g.ymd = _fn(g.ddd, g.year, g.month, g.day); | |
| g.dmy = _fn(g.ddd, g.day, g.month, g.year); | |
| g.date = function (s) { | |
| return (g[$C.dateElementOrder] || g.mdy).call(this, s); | |
| }; | |
| g.format = _.process( | |
| _.many( | |
| _.any( | |
| _.process( | |
| _.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/), | |
| function (fmt) { | |
| if (g[fmt]) { | |
| return g[fmt]; | |
| } else { | |
| throw $D.Parsing.Exception(fmt); | |
| } | |
| } | |
| ), | |
| _.process(_.rtoken(/^[^dMyhHmstz]+/), function (s) { | |
| return _.ignore(_.stoken(s)); | |
| }) | |
| ) | |
| ), | |
| function (rules) { | |
| return _.process(_.each.apply(null, rules), t.finishExact); | |
| } | |
| ); | |
| var _F = {}; | |
| var _get = function (f) { | |
| return (_F[f] = _F[f] || g.format(f)[0]); | |
| }; | |
| g.formats = function (fx) { | |
| if (fx instanceof Array) { | |
| var rx = []; | |
| for (var i = 0; i < fx.length; i++) { | |
| rx.push(_get(fx[i])); | |
| } | |
| return _.any.apply(null, rx); | |
| } else { | |
| return _get(fx); | |
| } | |
| }; | |
| g._formats = g.formats([ | |
| '"yyyy-MM-ddTHH:mm:ssZ"', | |
| "yyyy-MM-ddTHH:mm:ssZ", | |
| "yyyy-MM-ddTHH:mm:ssz", | |
| "yyyy-MM-ddTHH:mm:ss", | |
| "yyyy-MM-ddTHH:mmZ", | |
| "yyyy-MM-ddTHH:mmz", | |
| "yyyy-MM-ddTHH:mm", | |
| "ddd, MMM dd, yyyy H:mm:ss tt", | |
| "ddd MMM d yyyy HH:mm:ss zzz", | |
| "MMddyyyy", | |
| "ddMMyyyy", | |
| "Mddyyyy", | |
| "ddMyyyy", | |
| "Mdyyyy", | |
| "dMyyyy", | |
| "yyyy", | |
| "Mdyy", | |
| "dMyy", | |
| "d", | |
| ]); | |
| g._start = _.process( | |
| _.set([g.date, g.time, g.expression], g.generalDelimiter, g.whiteSpace), | |
| t.finish | |
| ); | |
| g.start = function (s) { | |
| try { | |
| var r = g._formats.call({}, s); | |
| if (r[1].length === 0) { | |
| return r; | |
| } | |
| } catch (e) {} | |
| return g._start.call({}, s); | |
| }; | |
| $D._parse = $D.parse; | |
| $D.parse = function (s) { | |
| var r = null; | |
| if (!s) { | |
| return null; | |
| } | |
| if (s instanceof Date) { | |
| return s; | |
| } | |
| try { | |
| r = $D.Grammar.start.call({}, s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1")); | |
| } catch (e) { | |
| return null; | |
| } | |
| return r[1].length === 0 ? r[0] : null; | |
| }; | |
| $D.getParseFunction = function (fx) { | |
| var fn = $D.Grammar.formats(fx); | |
| return function (s) { | |
| var r = null; | |
| try { | |
| r = fn.call({}, s); | |
| } catch (e) { | |
| return null; | |
| } | |
| return r[1].length === 0 ? r[0] : null; | |
| }; | |
| }; | |
| $D.parseExact = function (s, fx) { | |
| return $D.getParseFunction(fx)(s); | |
| }; | |
| })(); |
| /* decimal.js v10.1.1 https://github.com/MikeMcl/decimal.js/LICENCE */ | |
| !(function (n) { | |
| "use strict"; | |
| var h, | |
| R, | |
| e, | |
| o, | |
| u = 9e15, | |
| g = 1e9, | |
| m = "0123456789abcdef", | |
| t = | |
| "2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058", | |
| r = | |
| "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789", | |
| c = { | |
| precision: 20, | |
| rounding: 4, | |
| modulo: 1, | |
| toExpNeg: -7, | |
| toExpPos: 21, | |
| minE: -u, | |
| maxE: u, | |
| crypto: !1, | |
| }, | |
| N = !0, | |
| f = "[DecimalError] ", | |
| w = f + "Invalid argument: ", | |
| s = f + "Precision limit exceeded", | |
| a = f + "crypto unavailable", | |
| L = Math.floor, | |
| v = Math.pow, | |
| l = /^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i, | |
| d = /^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i, | |
| p = /^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i, | |
| b = /^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, | |
| T = 1e7, | |
| U = 7, | |
| E = t.length - 1, | |
| x = r.length - 1, | |
| y = { name: "[object Decimal]" }; | |
| function M(n) { | |
| var e, | |
| i, | |
| t, | |
| r = n.length - 1, | |
| s = "", | |
| o = n[0]; | |
| if (0 < r) { | |
| for (s += o, e = 1; e < r; e++) | |
| (t = n[e] + ""), (i = U - t.length) && (s += C(i)), (s += t); | |
| (o = n[e]), (i = U - (t = o + "").length) && (s += C(i)); | |
| } else if (0 === o) return "0"; | |
| for (; o % 10 == 0; ) o /= 10; | |
| return s + o; | |
| } | |
| function q(n, e, i) { | |
| if (n !== ~~n || n < e || i < n) throw Error(w + n); | |
| } | |
| function O(n, e, i, t) { | |
| var r, s, o; | |
| for (s = n[0]; 10 <= s; s /= 10) --e; | |
| return ( | |
| --e < 0 ? ((e += U), (r = 0)) : ((r = Math.ceil((e + 1) / U)), (e %= U)), | |
| (s = v(10, U - e)), | |
| (o = n[r] % s | 0), | |
| null == t | |
| ? e < 3 | |
| ? (0 == e ? (o = (o / 100) | 0) : 1 == e && (o = (o / 10) | 0), | |
| (i < 4 && 99999 == o) || | |
| (3 < i && 49999 == o) || | |
| 5e4 == o || | |
| 0 == o) | |
| : (((i < 4 && o + 1 == s) || (3 < i && o + 1 == s / 2)) && | |
| ((n[r + 1] / s / 100) | 0) == v(10, e - 2) - 1) || | |
| ((o == s / 2 || 0 == o) && 0 == ((n[r + 1] / s / 100) | 0)) | |
| : e < 4 | |
| ? (0 == e | |
| ? (o = (o / 1e3) | 0) | |
| : 1 == e | |
| ? (o = (o / 100) | 0) | |
| : 2 == e && (o = (o / 10) | 0), | |
| ((t || i < 4) && 9999 == o) || (!t && 3 < i && 4999 == o)) | |
| : (((t || i < 4) && o + 1 == s) || (!t && 3 < i && o + 1 == s / 2)) && | |
| ((n[r + 1] / s / 1e3) | 0) == v(10, e - 3) - 1 | |
| ); | |
| } | |
| function D(n, e, i) { | |
| for (var t, r, s = [0], o = 0, u = n.length; o < u; ) { | |
| for (r = s.length; r--; ) s[r] *= e; | |
| for (s[0] += m.indexOf(n.charAt(o++)), t = 0; t < s.length; t++) | |
| s[t] > i - 1 && | |
| (void 0 === s[t + 1] && (s[t + 1] = 0), | |
| (s[t + 1] += (s[t] / i) | 0), | |
| (s[t] %= i)); | |
| } | |
| return s.reverse(); | |
| } | |
| (y.absoluteValue = y.abs = | |
| function () { | |
| var n = new this.constructor(this); | |
| return n.s < 0 && (n.s = 1), _(n); | |
| }), | |
| (y.ceil = function () { | |
| return _(new this.constructor(this), this.e + 1, 2); | |
| }), | |
| (y.comparedTo = y.cmp = | |
| function (n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s = this, | |
| o = s.d, | |
| u = (n = new s.constructor(n)).d, | |
| c = s.s, | |
| f = n.s; | |
| if (!o || !u) | |
| return c && f | |
| ? c !== f | |
| ? c | |
| : o === u | |
| ? 0 | |
| : !o ^ (c < 0) | |
| ? 1 | |
| : -1 | |
| : NaN; | |
| if (!o[0] || !u[0]) return o[0] ? c : u[0] ? -f : 0; | |
| if (c !== f) return c; | |
| if (s.e !== n.e) return (s.e > n.e) ^ (c < 0) ? 1 : -1; | |
| for (e = 0, i = (t = o.length) < (r = u.length) ? t : r; e < i; ++e) | |
| if (o[e] !== u[e]) return (o[e] > u[e]) ^ (c < 0) ? 1 : -1; | |
| return t === r ? 0 : (r < t) ^ (c < 0) ? 1 : -1; | |
| }), | |
| (y.cosine = y.cos = | |
| function () { | |
| var n, | |
| e, | |
| i = this, | |
| t = i.constructor; | |
| return i.d | |
| ? i.d[0] | |
| ? ((n = t.precision), | |
| (e = t.rounding), | |
| (t.precision = n + Math.max(i.e, i.sd()) + U), | |
| (t.rounding = 1), | |
| (i = (function (n, e) { | |
| var i, | |
| t, | |
| r = e.d.length; | |
| t = | |
| r < 32 | |
| ? ((i = Math.ceil(r / 3)), Math.pow(4, -i).toString()) | |
| : ((i = 16), "2.3283064365386962890625e-10"); | |
| (n.precision += i), (e = W(n, 1, e.times(t), new n(1))); | |
| for (var s = i; s--; ) { | |
| var o = e.times(e); | |
| e = o.times(o).minus(o).times(8).plus(1); | |
| } | |
| return (n.precision -= i), e; | |
| })(t, J(t, i))), | |
| (t.precision = n), | |
| (t.rounding = e), | |
| _(2 == o || 3 == o ? i.neg() : i, n, e, !0)) | |
| : new t(1) | |
| : new t(NaN); | |
| }), | |
| (y.cubeRoot = y.cbrt = | |
| function () { | |
| var n, | |
| e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a = this, | |
| h = a.constructor; | |
| if (!a.isFinite() || a.isZero()) return new h(a); | |
| for ( | |
| N = !1, | |
| (s = a.s * Math.pow(a.s * a, 1 / 3)) && Math.abs(s) != 1 / 0 | |
| ? (t = new h(s.toString())) | |
| : ((i = M(a.d)), | |
| (s = ((n = a.e) - i.length + 1) % 3) && | |
| (i += 1 == s || -2 == s ? "0" : "00"), | |
| (s = Math.pow(i, 1 / 3)), | |
| (n = L((n + 1) / 3) - (n % 3 == (n < 0 ? -1 : 2))), | |
| ((t = new h( | |
| (i = | |
| s == 1 / 0 | |
| ? "5e" + n | |
| : (i = s.toExponential()).slice(0, i.indexOf("e") + 1) + | |
| n) | |
| )).s = a.s)), | |
| o = (n = h.precision) + 3; | |
| ; | |
| ) | |
| if ( | |
| ((f = (c = (u = t).times(u).times(u)).plus(a)), | |
| (t = F(f.plus(a).times(u), f.plus(c), o + 2, 1)), | |
| M(u.d).slice(0, o) === (i = M(t.d)).slice(0, o)) | |
| ) { | |
| if ("9999" != (i = i.slice(o - 3, o + 1)) && (r || "4999" != i)) { | |
| (+i && (+i.slice(1) || "5" != i.charAt(0))) || | |
| (_(t, n + 1, 1), (e = !t.times(t).times(t).eq(a))); | |
| break; | |
| } | |
| if (!r && (_(u, n + 1, 0), u.times(u).times(u).eq(a))) { | |
| t = u; | |
| break; | |
| } | |
| (o += 4), (r = 1); | |
| } | |
| return (N = !0), _(t, n, h.rounding, e); | |
| }), | |
| (y.decimalPlaces = y.dp = | |
| function () { | |
| var n, | |
| e = this.d, | |
| i = NaN; | |
| if (e) { | |
| if (((i = ((n = e.length - 1) - L(this.e / U)) * U), (n = e[n]))) | |
| for (; n % 10 == 0; n /= 10) i--; | |
| i < 0 && (i = 0); | |
| } | |
| return i; | |
| }), | |
| (y.dividedBy = y.div = | |
| function (n) { | |
| return F(this, new this.constructor(n)); | |
| }), | |
| (y.dividedToIntegerBy = y.divToInt = | |
| function (n) { | |
| var e = this.constructor; | |
| return _(F(this, new e(n), 0, 1, 1), e.precision, e.rounding); | |
| }), | |
| (y.equals = y.eq = | |
| function (n) { | |
| return 0 === this.cmp(n); | |
| }), | |
| (y.floor = function () { | |
| return _(new this.constructor(this), this.e + 1, 3); | |
| }), | |
| (y.greaterThan = y.gt = | |
| function (n) { | |
| return 0 < this.cmp(n); | |
| }), | |
| (y.greaterThanOrEqualTo = y.gte = | |
| function (n) { | |
| var e = this.cmp(n); | |
| return 1 == e || 0 === e; | |
| }), | |
| (y.hyperbolicCosine = y.cosh = | |
| function () { | |
| var n, | |
| e, | |
| i, | |
| t, | |
| r, | |
| s = this, | |
| o = s.constructor, | |
| u = new o(1); | |
| if (!s.isFinite()) return new o(s.s ? 1 / 0 : NaN); | |
| if (s.isZero()) return u; | |
| (i = o.precision), | |
| (t = o.rounding), | |
| (o.precision = i + Math.max(s.e, s.sd()) + 4), | |
| (o.rounding = 1), | |
| (e = | |
| (r = s.d.length) < 32 | |
| ? ((n = Math.ceil(r / 3)), Math.pow(4, -n).toString()) | |
| : ((n = 16), "2.3283064365386962890625e-10")), | |
| (s = W(o, 1, s.times(e), new o(1), !0)); | |
| for (var c, f = n, a = new o(8); f--; ) | |
| (c = s.times(s)), (s = u.minus(c.times(a.minus(c.times(a))))); | |
| return _(s, (o.precision = i), (o.rounding = t), !0); | |
| }), | |
| (y.hyperbolicSine = y.sinh = | |
| function () { | |
| var n, | |
| e, | |
| i, | |
| t, | |
| r = this, | |
| s = r.constructor; | |
| if (!r.isFinite() || r.isZero()) return new s(r); | |
| if ( | |
| ((e = s.precision), | |
| (i = s.rounding), | |
| (s.precision = e + Math.max(r.e, r.sd()) + 4), | |
| (s.rounding = 1), | |
| (t = r.d.length) < 3) | |
| ) | |
| r = W(s, 2, r, r, !0); | |
| else { | |
| (n = 16 < (n = 1.4 * Math.sqrt(t)) ? 16 : 0 | n), | |
| (r = W(s, 2, (r = r.times(Math.pow(5, -n))), r, !0)); | |
| for (var o, u = new s(5), c = new s(16), f = new s(20); n--; ) | |
| (o = r.times(r)), | |
| (r = r.times(u.plus(o.times(c.times(o).plus(f))))); | |
| } | |
| return _(r, (s.precision = e), (s.rounding = i), !0); | |
| }), | |
| (y.hyperbolicTangent = y.tanh = | |
| function () { | |
| var n, | |
| e, | |
| i = this, | |
| t = i.constructor; | |
| return i.isFinite() | |
| ? i.isZero() | |
| ? new t(i) | |
| : ((n = t.precision), | |
| (e = t.rounding), | |
| (t.precision = n + 7), | |
| (t.rounding = 1), | |
| F(i.sinh(), i.cosh(), (t.precision = n), (t.rounding = e))) | |
| : new t(i.s); | |
| }), | |
| (y.inverseCosine = y.acos = | |
| function () { | |
| var n, | |
| e = this, | |
| i = e.constructor, | |
| t = e.abs().cmp(1), | |
| r = i.precision, | |
| s = i.rounding; | |
| return -1 !== t | |
| ? 0 === t | |
| ? e.isNeg() | |
| ? P(i, r, s) | |
| : new i(0) | |
| : new i(NaN) | |
| : e.isZero() | |
| ? P(i, r + 4, s).times(0.5) | |
| : ((i.precision = r + 6), | |
| (i.rounding = 1), | |
| (e = e.asin()), | |
| (n = P(i, r + 4, s).times(0.5)), | |
| (i.precision = r), | |
| (i.rounding = s), | |
| n.minus(e)); | |
| }), | |
| (y.inverseHyperbolicCosine = y.acosh = | |
| function () { | |
| var n, | |
| e, | |
| i = this, | |
| t = i.constructor; | |
| return i.lte(1) | |
| ? new t(i.eq(1) ? 0 : NaN) | |
| : i.isFinite() | |
| ? ((n = t.precision), | |
| (e = t.rounding), | |
| (t.precision = n + Math.max(Math.abs(i.e), i.sd()) + 4), | |
| (t.rounding = 1), | |
| (N = !1), | |
| (i = i.times(i).minus(1).sqrt().plus(i)), | |
| (N = !0), | |
| (t.precision = n), | |
| (t.rounding = e), | |
| i.ln()) | |
| : new t(i); | |
| }), | |
| (y.inverseHyperbolicSine = y.asinh = | |
| function () { | |
| var n, | |
| e, | |
| i = this, | |
| t = i.constructor; | |
| return !i.isFinite() || i.isZero() | |
| ? new t(i) | |
| : ((n = t.precision), | |
| (e = t.rounding), | |
| (t.precision = n + 2 * Math.max(Math.abs(i.e), i.sd()) + 6), | |
| (t.rounding = 1), | |
| (N = !1), | |
| (i = i.times(i).plus(1).sqrt().plus(i)), | |
| (N = !0), | |
| (t.precision = n), | |
| (t.rounding = e), | |
| i.ln()); | |
| }), | |
| (y.inverseHyperbolicTangent = y.atanh = | |
| function () { | |
| var n, | |
| e, | |
| i, | |
| t, | |
| r = this, | |
| s = r.constructor; | |
| return r.isFinite() | |
| ? 0 <= r.e | |
| ? new s(r.abs().eq(1) ? r.s / 0 : r.isZero() ? r : NaN) | |
| : ((n = s.precision), | |
| (e = s.rounding), | |
| (t = r.sd()), | |
| Math.max(t, n) < 2 * -r.e - 1 | |
| ? _(new s(r), n, e, !0) | |
| : ((s.precision = i = t - r.e), | |
| (r = F(r.plus(1), new s(1).minus(r), i + n, 1)), | |
| (s.precision = n + 4), | |
| (s.rounding = 1), | |
| (r = r.ln()), | |
| (s.precision = n), | |
| (s.rounding = e), | |
| r.times(0.5))) | |
| : new s(NaN); | |
| }), | |
| (y.inverseSine = y.asin = | |
| function () { | |
| var n, | |
| e, | |
| i, | |
| t, | |
| r = this, | |
| s = r.constructor; | |
| return r.isZero() | |
| ? new s(r) | |
| : ((e = r.abs().cmp(1)), | |
| (i = s.precision), | |
| (t = s.rounding), | |
| -1 !== e | |
| ? 0 === e | |
| ? (((n = P(s, i + 4, t).times(0.5)).s = r.s), n) | |
| : new s(NaN) | |
| : ((s.precision = i + 6), | |
| (s.rounding = 1), | |
| (r = r.div(new s(1).minus(r.times(r)).sqrt().plus(1)).atan()), | |
| (s.precision = i), | |
| (s.rounding = t), | |
| r.times(2))); | |
| }), | |
| (y.inverseTangent = y.atan = | |
| function () { | |
| var n, | |
| e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f = this, | |
| a = f.constructor, | |
| h = a.precision, | |
| l = a.rounding; | |
| if (f.isFinite()) { | |
| if (f.isZero()) return new a(f); | |
| if (f.abs().eq(1) && h + 4 <= x) | |
| return ((o = P(a, h + 4, l).times(0.25)).s = f.s), o; | |
| } else { | |
| if (!f.s) return new a(NaN); | |
| if (h + 4 <= x) return ((o = P(a, h + 4, l).times(0.5)).s = f.s), o; | |
| } | |
| for ( | |
| a.precision = u = h + 10, | |
| a.rounding = 1, | |
| n = i = Math.min(28, (u / U + 2) | 0); | |
| n; | |
| --n | |
| ) | |
| f = f.div(f.times(f).plus(1).sqrt().plus(1)); | |
| for ( | |
| N = !1, | |
| e = Math.ceil(u / U), | |
| t = 1, | |
| c = f.times(f), | |
| o = new a(f), | |
| r = f; | |
| -1 !== n; | |
| ) | |
| if ( | |
| ((r = r.times(c)), | |
| (s = o.minus(r.div((t += 2)))), | |
| (r = r.times(c)), | |
| void 0 !== (o = s.plus(r.div((t += 2)))).d[e]) | |
| ) | |
| for (n = e; o.d[n] === s.d[n] && n--; ); | |
| return ( | |
| i && (o = o.times(2 << (i - 1))), | |
| (N = !0), | |
| _(o, (a.precision = h), (a.rounding = l), !0) | |
| ); | |
| }), | |
| (y.isFinite = function () { | |
| return !!this.d; | |
| }), | |
| (y.isInteger = y.isInt = | |
| function () { | |
| return !!this.d && L(this.e / U) > this.d.length - 2; | |
| }), | |
| (y.isNaN = function () { | |
| return !this.s; | |
| }), | |
| (y.isNegative = y.isNeg = | |
| function () { | |
| return this.s < 0; | |
| }), | |
| (y.isPositive = y.isPos = | |
| function () { | |
| return 0 < this.s; | |
| }), | |
| (y.isZero = function () { | |
| return !!this.d && 0 === this.d[0]; | |
| }), | |
| (y.lessThan = y.lt = | |
| function (n) { | |
| return this.cmp(n) < 0; | |
| }), | |
| (y.lessThanOrEqualTo = y.lte = | |
| function (n) { | |
| return this.cmp(n) < 1; | |
| }), | |
| (y.logarithm = y.log = | |
| function (n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f = this, | |
| a = f.constructor, | |
| h = a.precision, | |
| l = a.rounding; | |
| if (null == n) (n = new a(10)), (e = !0); | |
| else { | |
| if (((i = (n = new a(n)).d), n.s < 0 || !i || !i[0] || n.eq(1))) | |
| return new a(NaN); | |
| e = n.eq(10); | |
| } | |
| if (((i = f.d), f.s < 0 || !i || !i[0] || f.eq(1))) | |
| return new a(i && !i[0] ? -1 / 0 : 1 != f.s ? NaN : i ? 0 : 1 / 0); | |
| if (e) | |
| if (1 < i.length) s = !0; | |
| else { | |
| for (r = i[0]; r % 10 == 0; ) r /= 10; | |
| s = 1 !== r; | |
| } | |
| if ( | |
| ((N = !1), | |
| (o = V(f, (u = h + 5))), | |
| (t = e ? Z(a, u + 10) : V(n, u)), | |
| O((c = F(o, t, u, 1)).d, (r = h), l)) | |
| ) | |
| do { | |
| if ( | |
| ((o = V(f, (u += 10))), | |
| (t = e ? Z(a, u + 10) : V(n, u)), | |
| (c = F(o, t, u, 1)), | |
| !s) | |
| ) { | |
| +M(c.d).slice(r + 1, r + 15) + 1 == 1e14 && (c = _(c, h + 1, 0)); | |
| break; | |
| } | |
| } while (O(c.d, (r += 10), l)); | |
| return (N = !0), _(c, h, l); | |
| }), | |
| (y.minus = y.sub = | |
| function (n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a, | |
| h, | |
| l, | |
| d = this, | |
| p = d.constructor; | |
| if (((n = new p(n)), !d.d || !n.d)) | |
| return ( | |
| d.s && n.s | |
| ? d.d | |
| ? (n.s = -n.s) | |
| : (n = new p(n.d || d.s !== n.s ? d : NaN)) | |
| : (n = new p(NaN)), | |
| n | |
| ); | |
| if (d.s != n.s) return (n.s = -n.s), d.plus(n); | |
| if ( | |
| ((f = d.d), | |
| (l = n.d), | |
| (u = p.precision), | |
| (c = p.rounding), | |
| !f[0] || !l[0]) | |
| ) { | |
| if (l[0]) n.s = -n.s; | |
| else { | |
| if (!f[0]) return new p(3 === c ? -0 : 0); | |
| n = new p(d); | |
| } | |
| return N ? _(n, u, c) : n; | |
| } | |
| if ( | |
| ((i = L(n.e / U)), (a = L(d.e / U)), (f = f.slice()), (s = a - i)) | |
| ) { | |
| for ( | |
| o = (h = s < 0) | |
| ? ((e = f), (s = -s), l.length) | |
| : ((e = l), (i = a), f.length), | |
| (t = Math.max(Math.ceil(u / U), o) + 2) < s && | |
| ((s = t), (e.length = 1)), | |
| e.reverse(), | |
| t = s; | |
| t--; | |
| ) | |
| e.push(0); | |
| e.reverse(); | |
| } else { | |
| for ( | |
| (h = (t = f.length) < (o = l.length)) && (o = t), t = 0; | |
| t < o; | |
| t++ | |
| ) | |
| if (f[t] != l[t]) { | |
| h = f[t] < l[t]; | |
| break; | |
| } | |
| s = 0; | |
| } | |
| for ( | |
| h && ((e = f), (f = l), (l = e), (n.s = -n.s)), | |
| o = f.length, | |
| t = l.length - o; | |
| 0 < t; | |
| --t | |
| ) | |
| f[o++] = 0; | |
| for (t = l.length; s < t; ) { | |
| if (f[--t] < l[t]) { | |
| for (r = t; r && 0 === f[--r]; ) f[r] = T - 1; | |
| --f[r], (f[t] += T); | |
| } | |
| f[t] -= l[t]; | |
| } | |
| for (; 0 === f[--o]; ) f.pop(); | |
| for (; 0 === f[0]; f.shift()) --i; | |
| return f[0] | |
| ? ((n.d = f), (n.e = S(f, i)), N ? _(n, u, c) : n) | |
| : new p(3 === c ? -0 : 0); | |
| }), | |
| (y.modulo = y.mod = | |
| function (n) { | |
| var e, | |
| i = this, | |
| t = i.constructor; | |
| return ( | |
| (n = new t(n)), | |
| !i.d || !n.s || (n.d && !n.d[0]) | |
| ? new t(NaN) | |
| : !n.d || (i.d && !i.d[0]) | |
| ? _(new t(i), t.precision, t.rounding) | |
| : ((N = !1), | |
| 9 == t.modulo | |
| ? ((e = F(i, n.abs(), 0, 3, 1)).s *= n.s) | |
| : (e = F(i, n, 0, t.modulo, 1)), | |
| (e = e.times(n)), | |
| (N = !0), | |
| i.minus(e)) | |
| ); | |
| }), | |
| (y.naturalExponential = y.exp = | |
| function () { | |
| return B(this); | |
| }), | |
| (y.naturalLogarithm = y.ln = | |
| function () { | |
| return V(this); | |
| }), | |
| (y.negated = y.neg = | |
| function () { | |
| var n = new this.constructor(this); | |
| return (n.s = -n.s), _(n); | |
| }), | |
| (y.plus = y.add = | |
| function (n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a, | |
| h = this, | |
| l = h.constructor; | |
| if (((n = new l(n)), !h.d || !n.d)) | |
| return ( | |
| h.s && n.s | |
| ? h.d || (n = new l(n.d || h.s === n.s ? h : NaN)) | |
| : (n = new l(NaN)), | |
| n | |
| ); | |
| if (h.s != n.s) return (n.s = -n.s), h.minus(n); | |
| if ( | |
| ((f = h.d), | |
| (a = n.d), | |
| (u = l.precision), | |
| (c = l.rounding), | |
| !f[0] || !a[0]) | |
| ) | |
| return a[0] || (n = new l(h)), N ? _(n, u, c) : n; | |
| if ( | |
| ((s = L(h.e / U)), (t = L(n.e / U)), (f = f.slice()), (r = s - t)) | |
| ) { | |
| for ( | |
| (o = | |
| (o = | |
| r < 0 | |
| ? ((i = f), (r = -r), a.length) | |
| : ((i = a), (t = s), f.length)) < (s = Math.ceil(u / U)) | |
| ? s + 1 | |
| : o + 1) < r && ((r = o), (i.length = 1)), | |
| i.reverse(); | |
| r--; | |
| ) | |
| i.push(0); | |
| i.reverse(); | |
| } | |
| for ( | |
| (o = f.length) - (r = a.length) < 0 && | |
| ((r = o), (i = a), (a = f), (f = i)), | |
| e = 0; | |
| r; | |
| ) | |
| (e = ((f[--r] = f[r] + a[r] + e) / T) | 0), (f[r] %= T); | |
| for (e && (f.unshift(e), ++t), o = f.length; 0 == f[--o]; ) f.pop(); | |
| return (n.d = f), (n.e = S(f, t)), N ? _(n, u, c) : n; | |
| }), | |
| (y.precision = y.sd = | |
| function (n) { | |
| var e; | |
| if (void 0 !== n && n !== !!n && 1 !== n && 0 !== n) throw Error(w + n); | |
| return ( | |
| this.d | |
| ? ((e = k(this.d)), n && this.e + 1 > e && (e = this.e + 1)) | |
| : (e = NaN), | |
| e | |
| ); | |
| }), | |
| (y.round = function () { | |
| var n = this.constructor; | |
| return _(new n(this), this.e + 1, n.rounding); | |
| }), | |
| (y.sine = y.sin = | |
| function () { | |
| var n, | |
| e, | |
| i = this, | |
| t = i.constructor; | |
| return i.isFinite() | |
| ? i.isZero() | |
| ? new t(i) | |
| : ((n = t.precision), | |
| (e = t.rounding), | |
| (t.precision = n + Math.max(i.e, i.sd()) + U), | |
| (t.rounding = 1), | |
| (i = (function (n, e) { | |
| var i, | |
| t = e.d.length; | |
| if (t < 3) return W(n, 2, e, e); | |
| (i = 16 < (i = 1.4 * Math.sqrt(t)) ? 16 : 0 | i), | |
| (e = e.times(Math.pow(5, -i))), | |
| (e = W(n, 2, e, e)); | |
| for (var r, s = new n(5), o = new n(16), u = new n(20); i--; ) | |
| (r = e.times(e)), | |
| (e = e.times(s.plus(r.times(o.times(r).minus(u))))); | |
| return e; | |
| })(t, J(t, i))), | |
| (t.precision = n), | |
| (t.rounding = e), | |
| _(2 < o ? i.neg() : i, n, e, !0)) | |
| : new t(NaN); | |
| }), | |
| (y.squareRoot = y.sqrt = | |
| function () { | |
| var n, | |
| e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o = this, | |
| u = o.d, | |
| c = o.e, | |
| f = o.s, | |
| a = o.constructor; | |
| if (1 !== f || !u || !u[0]) | |
| return new a(!f || (f < 0 && (!u || u[0])) ? NaN : u ? o : 1 / 0); | |
| for ( | |
| N = !1, | |
| t = | |
| 0 == (f = Math.sqrt(+o)) || f == 1 / 0 | |
| ? (((e = M(u)).length + c) % 2 == 0 && (e += "0"), | |
| (f = Math.sqrt(e)), | |
| (c = L((c + 1) / 2) - (c < 0 || c % 2)), | |
| new a( | |
| (e = | |
| f == 1 / 0 | |
| ? "1e" + c | |
| : (e = f.toExponential()).slice(0, e.indexOf("e") + 1) + | |
| c) | |
| )) | |
| : new a(f.toString()), | |
| i = (c = a.precision) + 3; | |
| ; | |
| ) | |
| if ( | |
| ((t = (s = t).plus(F(o, s, i + 2, 1)).times(0.5)), | |
| M(s.d).slice(0, i) === (e = M(t.d)).slice(0, i)) | |
| ) { | |
| if ("9999" != (e = e.slice(i - 3, i + 1)) && (r || "4999" != e)) { | |
| (+e && (+e.slice(1) || "5" != e.charAt(0))) || | |
| (_(t, c + 1, 1), (n = !t.times(t).eq(o))); | |
| break; | |
| } | |
| if (!r && (_(s, c + 1, 0), s.times(s).eq(o))) { | |
| t = s; | |
| break; | |
| } | |
| (i += 4), (r = 1); | |
| } | |
| return (N = !0), _(t, c, a.rounding, n); | |
| }), | |
| (y.tangent = y.tan = | |
| function () { | |
| var n, | |
| e, | |
| i = this, | |
| t = i.constructor; | |
| return i.isFinite() | |
| ? i.isZero() | |
| ? new t(i) | |
| : ((n = t.precision), | |
| (e = t.rounding), | |
| (t.precision = n + 10), | |
| (t.rounding = 1), | |
| ((i = i.sin()).s = 1), | |
| (i = F(i, new t(1).minus(i.times(i)).sqrt(), n + 10, 0)), | |
| (t.precision = n), | |
| (t.rounding = e), | |
| _(2 == o || 4 == o ? i.neg() : i, n, e, !0)) | |
| : new t(NaN); | |
| }), | |
| (y.times = y.mul = | |
| function (n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a = this.constructor, | |
| h = this.d, | |
| l = (n = new a(n)).d; | |
| if (((n.s *= this.s), !(h && h[0] && l && l[0]))) | |
| return new a( | |
| !n.s || (h && !h[0] && !l) || (l && !l[0] && !h) | |
| ? NaN | |
| : h && l | |
| ? 0 * n.s | |
| : n.s / 0 | |
| ); | |
| for ( | |
| i = L(this.e / U) + L(n.e / U), | |
| (c = h.length) < (f = l.length) && | |
| ((s = h), (h = l), (l = s), (o = c), (c = f), (f = o)), | |
| s = [], | |
| t = o = c + f; | |
| t--; | |
| ) | |
| s.push(0); | |
| for (t = f; 0 <= --t; ) { | |
| for (e = 0, r = c + t; t < r; ) | |
| (u = s[r] + l[t] * h[r - t - 1] + e), | |
| (s[r--] = u % T | 0), | |
| (e = (u / T) | 0); | |
| s[r] = (s[r] + e) % T | 0; | |
| } | |
| for (; !s[--o]; ) s.pop(); | |
| return ( | |
| e ? ++i : s.shift(), | |
| (n.d = s), | |
| (n.e = S(s, i)), | |
| N ? _(n, a.precision, a.rounding) : n | |
| ); | |
| }), | |
| (y.toBinary = function (n, e) { | |
| return z(this, 2, n, e); | |
| }), | |
| (y.toDecimalPlaces = y.toDP = | |
| function (n, e) { | |
| var i = this, | |
| t = i.constructor; | |
| return ( | |
| (i = new t(i)), | |
| void 0 === n | |
| ? i | |
| : (q(n, 0, g), | |
| void 0 === e ? (e = t.rounding) : q(e, 0, 8), | |
| _(i, n + i.e + 1, e)) | |
| ); | |
| }), | |
| (y.toExponential = function (n, e) { | |
| var i, | |
| t = this, | |
| r = t.constructor; | |
| return ( | |
| (i = | |
| void 0 === n | |
| ? A(t, !0) | |
| : (q(n, 0, g), | |
| void 0 === e ? (e = r.rounding) : q(e, 0, 8), | |
| A((t = _(new r(t), n + 1, e)), !0, n + 1))), | |
| t.isNeg() && !t.isZero() ? "-" + i : i | |
| ); | |
| }), | |
| (y.toFixed = function (n, e) { | |
| var i, | |
| t, | |
| r = this, | |
| s = r.constructor; | |
| return ( | |
| (i = | |
| void 0 === n | |
| ? A(r) | |
| : (q(n, 0, g), | |
| void 0 === e ? (e = s.rounding) : q(e, 0, 8), | |
| A((t = _(new s(r), n + r.e + 1, e)), !1, n + t.e + 1))), | |
| r.isNeg() && !r.isZero() ? "-" + i : i | |
| ); | |
| }), | |
| (y.toFraction = function (n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a, | |
| h, | |
| l, | |
| d = this, | |
| p = d.d, | |
| g = d.constructor; | |
| if (!p) return new g(d); | |
| if ( | |
| ((f = i = new g(1)), | |
| (o = (s = (e = new g((t = c = new g(0)))).e = k(p) - d.e - 1) % U), | |
| (e.d[0] = v(10, o < 0 ? U + o : o)), | |
| null == n) | |
| ) | |
| n = 0 < s ? e : f; | |
| else { | |
| if (!(u = new g(n)).isInt() || u.lt(f)) throw Error(w + u); | |
| n = u.gt(e) ? (0 < s ? e : f) : u; | |
| } | |
| for ( | |
| N = !1, | |
| u = new g(M(p)), | |
| a = g.precision, | |
| g.precision = s = p.length * U * 2; | |
| (h = F(u, e, 0, 1, 1)), 1 != (r = i.plus(h.times(t))).cmp(n); | |
| ) | |
| (i = t), | |
| (t = r), | |
| (r = f), | |
| (f = c.plus(h.times(r))), | |
| (c = r), | |
| (r = e), | |
| (e = u.minus(h.times(r))), | |
| (u = r); | |
| return ( | |
| (r = F(n.minus(i), t, 0, 1, 1)), | |
| (c = c.plus(r.times(f))), | |
| (i = i.plus(r.times(t))), | |
| (c.s = f.s = d.s), | |
| (l = | |
| F(f, t, s, 1).minus(d).abs().cmp(F(c, i, s, 1).minus(d).abs()) < 1 | |
| ? [f, t] | |
| : [c, i]), | |
| (g.precision = a), | |
| (N = !0), | |
| l | |
| ); | |
| }), | |
| (y.toHexadecimal = y.toHex = | |
| function (n, e) { | |
| return z(this, 16, n, e); | |
| }), | |
| (y.toNearest = function (n, e) { | |
| var i = this, | |
| t = i.constructor; | |
| if (((i = new t(i)), null == n)) { | |
| if (!i.d) return i; | |
| (n = new t(1)), (e = t.rounding); | |
| } else { | |
| if ( | |
| ((n = new t(n)), void 0 === e ? (e = t.rounding) : q(e, 0, 8), !i.d) | |
| ) | |
| return n.s ? i : n; | |
| if (!n.d) return n.s && (n.s = i.s), n; | |
| } | |
| return ( | |
| n.d[0] | |
| ? ((N = !1), (i = F(i, n, 0, e, 1).times(n)), (N = !0), _(i)) | |
| : ((n.s = i.s), (i = n)), | |
| i | |
| ); | |
| }), | |
| (y.toNumber = function () { | |
| return +this; | |
| }), | |
| (y.toOctal = function (n, e) { | |
| return z(this, 8, n, e); | |
| }), | |
| (y.toPower = y.pow = | |
| function (n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u = this, | |
| c = u.constructor, | |
| f = +(n = new c(n)); | |
| if (!(u.d && n.d && u.d[0] && n.d[0])) return new c(v(+u, f)); | |
| if ((u = new c(u)).eq(1)) return u; | |
| if (((t = c.precision), (s = c.rounding), n.eq(1))) return _(u, t, s); | |
| if ( | |
| (e = L(n.e / U)) >= n.d.length - 1 && | |
| (i = f < 0 ? -f : f) <= 9007199254740991 | |
| ) | |
| return (r = I(c, u, i, t)), n.s < 0 ? new c(1).div(r) : _(r, t, s); | |
| if ((o = u.s) < 0) { | |
| if (e < n.d.length - 1) return new c(NaN); | |
| if ( | |
| (0 == (1 & n.d[e]) && (o = 1), | |
| 0 == u.e && 1 == u.d[0] && 1 == u.d.length) | |
| ) | |
| return (u.s = o), u; | |
| } | |
| return (e = | |
| 0 != (i = v(+u, f)) && isFinite(i) | |
| ? new c(i + "").e | |
| : L(f * (Math.log("0." + M(u.d)) / Math.LN10 + u.e + 1))) > | |
| c.maxE + 1 || e < c.minE - 1 | |
| ? new c(0 < e ? o / 0 : 0) | |
| : ((N = !1), | |
| (c.rounding = u.s = 1), | |
| (i = Math.min(12, (e + "").length)), | |
| (r = B(n.times(V(u, t + i)), t)).d && | |
| O((r = _(r, t + 5, 1)).d, t, s) && | |
| ((e = t + 10), | |
| +M((r = _(B(n.times(V(u, e + i)), e), e + 5, 1)).d).slice( | |
| t + 1, | |
| t + 15 | |
| ) + | |
| 1 == | |
| 1e14 && (r = _(r, t + 1, 0))), | |
| (r.s = o), | |
| (N = !0), | |
| _(r, t, (c.rounding = s))); | |
| }), | |
| (y.toPrecision = function (n, e) { | |
| var i, | |
| t = this, | |
| r = t.constructor; | |
| return ( | |
| (i = | |
| void 0 === n | |
| ? A(t, t.e <= r.toExpNeg || t.e >= r.toExpPos) | |
| : (q(n, 1, g), | |
| void 0 === e ? (e = r.rounding) : q(e, 0, 8), | |
| A((t = _(new r(t), n, e)), n <= t.e || t.e <= r.toExpNeg, n))), | |
| t.isNeg() && !t.isZero() ? "-" + i : i | |
| ); | |
| }), | |
| (y.toSignificantDigits = y.toSD = | |
| function (n, e) { | |
| var i = this.constructor; | |
| return ( | |
| void 0 === n | |
| ? ((n = i.precision), (e = i.rounding)) | |
| : (q(n, 1, g), void 0 === e ? (e = i.rounding) : q(e, 0, 8)), | |
| _(new i(this), n, e) | |
| ); | |
| }), | |
| (y.toString = function () { | |
| var n = this, | |
| e = n.constructor, | |
| i = A(n, n.e <= e.toExpNeg || n.e >= e.toExpPos); | |
| return n.isNeg() && !n.isZero() ? "-" + i : i; | |
| }), | |
| (y.truncated = y.trunc = | |
| function () { | |
| return _(new this.constructor(this), this.e + 1, 1); | |
| }), | |
| (y.valueOf = y.toJSON = | |
| function () { | |
| var n = this, | |
| e = n.constructor, | |
| i = A(n, n.e <= e.toExpNeg || n.e >= e.toExpPos); | |
| return n.isNeg() ? "-" + i : i; | |
| }); | |
| var F = (function () { | |
| function S(n, e, i) { | |
| var t, | |
| r = 0, | |
| s = n.length; | |
| for (n = n.slice(); s--; ) | |
| (t = n[s] * e + r), (n[s] = t % i | 0), (r = (t / i) | 0); | |
| return r && n.unshift(r), n; | |
| } | |
| function Z(n, e, i, t) { | |
| var r, s; | |
| if (i != t) s = t < i ? 1 : -1; | |
| else | |
| for (r = s = 0; r < i; r++) | |
| if (n[r] != e[r]) { | |
| s = n[r] > e[r] ? 1 : -1; | |
| break; | |
| } | |
| return s; | |
| } | |
| function P(n, e, i, t) { | |
| for (var r = 0; i--; ) | |
| (n[i] -= r), (r = n[i] < e[i] ? 1 : 0), (n[i] = r * t + n[i] - e[i]); | |
| for (; !n[0] && 1 < n.length; ) n.shift(); | |
| } | |
| return function (n, e, i, t, r, s) { | |
| var o, | |
| u, | |
| c, | |
| f, | |
| a, | |
| h, | |
| l, | |
| d, | |
| p, | |
| g, | |
| m, | |
| w, | |
| v, | |
| N, | |
| b, | |
| E, | |
| x, | |
| y, | |
| M, | |
| q, | |
| O = n.constructor, | |
| D = n.s == e.s ? 1 : -1, | |
| F = n.d, | |
| A = e.d; | |
| if (!(F && F[0] && A && A[0])) | |
| return new O( | |
| n.s && e.s && (F ? !A || F[0] != A[0] : A) | |
| ? (F && 0 == F[0]) || !A | |
| ? 0 * D | |
| : D / 0 | |
| : NaN | |
| ); | |
| for ( | |
| u = s | |
| ? ((a = 1), n.e - e.e) | |
| : ((s = T), (a = U), L(n.e / a) - L(e.e / a)), | |
| M = A.length, | |
| x = F.length, | |
| g = (p = new O(D)).d = [], | |
| c = 0; | |
| A[c] == (F[c] || 0); | |
| c++ | |
| ); | |
| if ( | |
| (A[c] > (F[c] || 0) && u--, | |
| null == i | |
| ? ((N = i = O.precision), (t = O.rounding)) | |
| : (N = r ? i + (n.e - e.e) + 1 : i), | |
| N < 0) | |
| ) | |
| g.push(1), (h = !0); | |
| else { | |
| if (((N = (N / a + 2) | 0), (c = 0), 1 == M)) { | |
| for (A = A[(f = 0)], N++; (c < x || f) && N--; c++) | |
| (b = f * s + (F[c] || 0)), (g[c] = (b / A) | 0), (f = b % A | 0); | |
| h = f || c < x; | |
| } else { | |
| for ( | |
| 1 < (f = (s / (A[0] + 1)) | 0) && | |
| ((A = S(A, f, s)), | |
| (F = S(F, f, s)), | |
| (M = A.length), | |
| (x = F.length)), | |
| E = M, | |
| w = (m = F.slice(0, M)).length; | |
| w < M; | |
| ) | |
| m[w++] = 0; | |
| for ( | |
| (q = A.slice()).unshift(0), y = A[0], A[1] >= s / 2 && ++y; | |
| (f = 0), | |
| (o = Z(A, m, M, w)) < 0 | |
| ? ((v = m[0]), | |
| M != w && (v = v * s + (m[1] || 0)), | |
| 1 < (f = (v / y) | 0) | |
| ? (s <= f && (f = s - 1), | |
| 1 == | |
| (o = Z( | |
| (l = S(A, f, s)), | |
| m, | |
| (d = l.length), | |
| (w = m.length) | |
| )) && (f--, P(l, M < d ? q : A, d, s))) | |
| : (0 == f && (o = f = 1), (l = A.slice())), | |
| (d = l.length) < w && l.unshift(0), | |
| P(m, l, w, s), | |
| -1 == o && | |
| (o = Z(A, m, M, (w = m.length))) < 1 && | |
| (f++, P(m, M < w ? q : A, w, s)), | |
| (w = m.length)) | |
| : 0 === o && (f++, (m = [0])), | |
| (g[c++] = f), | |
| o && m[0] ? (m[w++] = F[E] || 0) : ((m = [F[E]]), (w = 1)), | |
| (E++ < x || void 0 !== m[0]) && N--; | |
| ); | |
| h = void 0 !== m[0]; | |
| } | |
| g[0] || g.shift(); | |
| } | |
| if (1 == a) (p.e = u), (R = h); | |
| else { | |
| for (c = 1, f = g[0]; 10 <= f; f /= 10) c++; | |
| (p.e = c + u * a - 1), _(p, r ? i + p.e + 1 : i, t, h); | |
| } | |
| return p; | |
| }; | |
| })(); | |
| function _(n, e, i, t) { | |
| var r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a, | |
| h, | |
| l, | |
| d = n.constructor; | |
| n: if (null != e) { | |
| if (!(h = n.d)) return n; | |
| for (r = 1, u = h[0]; 10 <= u; u /= 10) r++; | |
| if ((s = e - r) < 0) | |
| (s += U), (o = e), (c = ((a = h[(l = 0)]) / v(10, r - o - 1)) % 10 | 0); | |
| else if (((l = Math.ceil((s + 1) / U)), (u = h.length) <= l)) { | |
| if (!t) break n; | |
| for (; u++ <= l; ) h.push(0); | |
| (a = c = 0), (o = (s %= U) - U + (r = 1)); | |
| } else { | |
| for (a = u = h[l], r = 1; 10 <= u; u /= 10) r++; | |
| c = (o = (s %= U) - U + r) < 0 ? 0 : (a / v(10, r - o - 1)) % 10 | 0; | |
| } | |
| if ( | |
| ((t = | |
| t || | |
| e < 0 || | |
| void 0 !== h[l + 1] || | |
| (o < 0 ? a : a % v(10, r - o - 1))), | |
| (f = | |
| i < 4 | |
| ? (c || t) && (0 == i || i == (n.s < 0 ? 3 : 2)) | |
| : 5 < c || | |
| (5 == c && | |
| (4 == i || | |
| t || | |
| (6 == i && | |
| (0 < s ? (0 < o ? a / v(10, r - o) : 0) : h[l - 1]) % 10 & | |
| 1) || | |
| i == (n.s < 0 ? 8 : 7)))), | |
| e < 1 || !h[0]) | |
| ) | |
| return ( | |
| (h.length = 0), | |
| f | |
| ? ((e -= n.e + 1), | |
| (h[0] = v(10, (U - (e % U)) % U)), | |
| (n.e = -e || 0)) | |
| : (h[0] = n.e = 0), | |
| n | |
| ); | |
| if ( | |
| (0 == s | |
| ? ((h.length = l), (u = 1), l--) | |
| : ((h.length = l + 1), | |
| (u = v(10, U - s)), | |
| (h[l] = 0 < o ? ((a / v(10, r - o)) % v(10, o) | 0) * u : 0)), | |
| f) | |
| ) | |
| for (;;) { | |
| if (0 == l) { | |
| for (s = 1, o = h[0]; 10 <= o; o /= 10) s++; | |
| for (o = h[0] += u, u = 1; 10 <= o; o /= 10) u++; | |
| s != u && (n.e++, h[0] == T && (h[0] = 1)); | |
| break; | |
| } | |
| if (((h[l] += u), h[l] != T)) break; | |
| (h[l--] = 0), (u = 1); | |
| } | |
| for (s = h.length; 0 === h[--s]; ) h.pop(); | |
| } | |
| return ( | |
| N && | |
| (n.e > d.maxE | |
| ? ((n.d = null), (n.e = NaN)) | |
| : n.e < d.minE && ((n.e = 0), (n.d = [0]))), | |
| n | |
| ); | |
| } | |
| function A(n, e, i) { | |
| if (!n.isFinite()) return j(n); | |
| var t, | |
| r = n.e, | |
| s = M(n.d), | |
| o = s.length; | |
| return ( | |
| e | |
| ? (i && 0 < (t = i - o) | |
| ? (s = s.charAt(0) + "." + s.slice(1) + C(t)) | |
| : 1 < o && (s = s.charAt(0) + "." + s.slice(1)), | |
| (s = s + (n.e < 0 ? "e" : "e+") + n.e)) | |
| : r < 0 | |
| ? ((s = "0." + C(-r - 1) + s), i && 0 < (t = i - o) && (s += C(t))) | |
| : o <= r | |
| ? ((s += C(r + 1 - o)), | |
| i && 0 < (t = i - r - 1) && (s = s + "." + C(t))) | |
| : ((t = r + 1) < o && (s = s.slice(0, t) + "." + s.slice(t)), | |
| i && 0 < (t = i - o) && (r + 1 === o && (s += "."), (s += C(t)))), | |
| s | |
| ); | |
| } | |
| function S(n, e) { | |
| var i = n[0]; | |
| for (e *= U; 10 <= i; i /= 10) e++; | |
| return e; | |
| } | |
| function Z(n, e, i) { | |
| if (E < e) throw ((N = !0), i && (n.precision = i), Error(s)); | |
| return _(new n(t), e, 1, !0); | |
| } | |
| function P(n, e, i) { | |
| if (x < e) throw Error(s); | |
| return _(new n(r), e, i, !0); | |
| } | |
| function k(n) { | |
| var e = n.length - 1, | |
| i = e * U + 1; | |
| if ((e = n[e])) { | |
| for (; e % 10 == 0; e /= 10) i--; | |
| for (e = n[0]; 10 <= e; e /= 10) i++; | |
| } | |
| return i; | |
| } | |
| function C(n) { | |
| for (var e = ""; n--; ) e += "0"; | |
| return e; | |
| } | |
| function I(n, e, i, t) { | |
| var r, | |
| s = new n(1), | |
| o = Math.ceil(t / U + 4); | |
| for (N = !1; ; ) { | |
| if ( | |
| (i % 2 && G((s = s.times(e)).d, o) && (r = !0), 0 === (i = L(i / 2))) | |
| ) { | |
| (i = s.d.length - 1), r && 0 === s.d[i] && ++s.d[i]; | |
| break; | |
| } | |
| G((e = e.times(e)).d, o); | |
| } | |
| return (N = !0), s; | |
| } | |
| function H(n) { | |
| return 1 & n.d[n.d.length - 1]; | |
| } | |
| function i(n, e, i) { | |
| for (var t, r = new n(e[0]), s = 0; ++s < e.length; ) { | |
| if (!(t = new n(e[s])).s) { | |
| r = t; | |
| break; | |
| } | |
| r[i](t) && (r = t); | |
| } | |
| return r; | |
| } | |
| function B(n, e) { | |
| var i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f = 0, | |
| a = 0, | |
| h = 0, | |
| l = n.constructor, | |
| d = l.rounding, | |
| p = l.precision; | |
| if (!n.d || !n.d[0] || 17 < n.e) | |
| return new l( | |
| n.d | |
| ? n.d[0] | |
| ? n.s < 0 | |
| ? 0 | |
| : 1 / 0 | |
| : 1 | |
| : n.s | |
| ? n.s < 0 | |
| ? 0 | |
| : n | |
| : NaN | |
| ); | |
| for (c = null == e ? ((N = !1), p) : e, u = new l(0.03125); -2 < n.e; ) | |
| (n = n.times(u)), (h += 5); | |
| for ( | |
| c += t = ((Math.log(v(2, h)) / Math.LN10) * 2 + 5) | 0, | |
| i = s = o = new l(1), | |
| l.precision = c; | |
| ; | |
| ) { | |
| if ( | |
| ((s = _(s.times(n), c, 1)), | |
| (i = i.times(++a)), | |
| M((u = o.plus(F(s, i, c, 1))).d).slice(0, c) === M(o.d).slice(0, c)) | |
| ) { | |
| for (r = h; r--; ) o = _(o.times(o), c, 1); | |
| if (null != e) return (l.precision = p), o; | |
| if (!(f < 3 && O(o.d, c - t, d, f))) | |
| return _(o, (l.precision = p), d, (N = !0)); | |
| (l.precision = c += 10), (i = s = u = new l(1)), (a = 0), f++; | |
| } | |
| o = u; | |
| } | |
| } | |
| function V(n, e) { | |
| var i, | |
| t, | |
| r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a, | |
| h, | |
| l, | |
| d = 1, | |
| p = n, | |
| g = p.d, | |
| m = p.constructor, | |
| w = m.rounding, | |
| v = m.precision; | |
| if (p.s < 0 || !g || !g[0] || (!p.e && 1 == g[0] && 1 == g.length)) | |
| return new m(g && !g[0] ? -1 / 0 : 1 != p.s ? NaN : g ? 0 : p); | |
| if ( | |
| ((a = null == e ? ((N = !1), v) : e), | |
| (m.precision = a += 10), | |
| (t = (i = M(g)).charAt(0)), | |
| !(Math.abs((s = p.e)) < 15e14)) | |
| ) | |
| return ( | |
| (f = Z(m, a + 2, v).times(s + "")), | |
| (p = V(new m(t + "." + i.slice(1)), a - 10).plus(f)), | |
| (m.precision = v), | |
| null == e ? _(p, v, w, (N = !0)) : p | |
| ); | |
| for (; (t < 7 && 1 != t) || (1 == t && 3 < i.charAt(1)); ) | |
| (t = (i = M((p = p.times(n)).d)).charAt(0)), d++; | |
| for ( | |
| s = p.e, | |
| 1 < t | |
| ? ((p = new m("0." + i)), s++) | |
| : (p = new m(t + "." + i.slice(1))), | |
| c = o = p = F((h = p).minus(1), p.plus(1), a, 1), | |
| l = _(p.times(p), a, 1), | |
| r = 3; | |
| ; | |
| ) { | |
| if ( | |
| ((o = _(o.times(l), a, 1)), | |
| M((f = c.plus(F(o, new m(r), a, 1))).d).slice(0, a) === | |
| M(c.d).slice(0, a)) | |
| ) { | |
| if ( | |
| ((c = c.times(2)), | |
| 0 !== s && (c = c.plus(Z(m, a + 2, v).times(s + ""))), | |
| (c = F(c, new m(d), a, 1)), | |
| null != e) | |
| ) | |
| return (m.precision = v), c; | |
| if (!O(c.d, a - 10, w, u)) return _(c, (m.precision = v), w, (N = !0)); | |
| (m.precision = a += 10), | |
| (f = o = p = F(h.minus(1), h.plus(1), a, 1)), | |
| (l = _(p.times(p), a, 1)), | |
| (r = u = 1); | |
| } | |
| (c = f), (r += 2); | |
| } | |
| } | |
| function j(n) { | |
| return String((n.s * n.s) / 0); | |
| } | |
| function $(n, e) { | |
| var i, t, r; | |
| for ( | |
| -1 < (i = e.indexOf(".")) && (e = e.replace(".", "")), | |
| 0 < (t = e.search(/e/i)) | |
| ? (i < 0 && (i = t), (i += +e.slice(t + 1)), (e = e.substring(0, t))) | |
| : i < 0 && (i = e.length), | |
| t = 0; | |
| 48 === e.charCodeAt(t); | |
| t++ | |
| ); | |
| for (r = e.length; 48 === e.charCodeAt(r - 1); --r); | |
| if ((e = e.slice(t, r))) { | |
| if ( | |
| ((r -= t), | |
| (n.e = i = i - t - 1), | |
| (n.d = []), | |
| (t = (i + 1) % U), | |
| i < 0 && (t += U), | |
| t < r) | |
| ) { | |
| for (t && n.d.push(+e.slice(0, t)), r -= U; t < r; ) | |
| n.d.push(+e.slice(t, (t += U))); | |
| (e = e.slice(t)), (t = U - e.length); | |
| } else t -= r; | |
| for (; t--; ) e += "0"; | |
| n.d.push(+e), | |
| N && | |
| (n.e > n.constructor.maxE | |
| ? ((n.d = null), (n.e = NaN)) | |
| : n.e < n.constructor.minE && ((n.e = 0), (n.d = [0]))); | |
| } else (n.e = 0), (n.d = [0]); | |
| return n; | |
| } | |
| function W(n, e, i, t, r) { | |
| var s, | |
| o, | |
| u, | |
| c, | |
| f = n.precision, | |
| a = Math.ceil(f / U); | |
| for (N = !1, c = i.times(i), u = new n(t); ; ) { | |
| if ( | |
| ((o = F(u.times(c), new n(e++ * e++), f, 1)), | |
| (u = r ? t.plus(o) : t.minus(o)), | |
| (t = F(o.times(c), new n(e++ * e++), f, 1)), | |
| void 0 !== (o = u.plus(t)).d[a]) | |
| ) { | |
| for (s = a; o.d[s] === u.d[s] && s--; ); | |
| if (-1 == s) break; | |
| } | |
| (s = u), (u = t), (t = o), (o = s), 0; | |
| } | |
| return (N = !0), (o.d.length = a + 1), o; | |
| } | |
| function J(n, e) { | |
| var i, | |
| t = e.s < 0, | |
| r = P(n, n.precision, 1), | |
| s = r.times(0.5); | |
| if ((e = e.abs()).lte(s)) return (o = t ? 4 : 1), e; | |
| if ((i = e.divToInt(r)).isZero()) o = t ? 3 : 2; | |
| else { | |
| if ((e = e.minus(i.times(r))).lte(s)) | |
| return (o = H(i) ? (t ? 2 : 3) : t ? 4 : 1), e; | |
| o = H(i) ? (t ? 1 : 4) : t ? 3 : 2; | |
| } | |
| return e.minus(r).abs(); | |
| } | |
| function z(n, e, i, t) { | |
| var r, | |
| s, | |
| o, | |
| u, | |
| c, | |
| f, | |
| a, | |
| h, | |
| l, | |
| d = n.constructor, | |
| p = void 0 !== i; | |
| if ( | |
| (p | |
| ? (q(i, 1, g), void 0 === t ? (t = d.rounding) : q(t, 0, 8)) | |
| : ((i = d.precision), (t = d.rounding)), | |
| n.isFinite()) | |
| ) { | |
| for ( | |
| p | |
| ? ((r = 2), 16 == e ? (i = 4 * i - 3) : 8 == e && (i = 3 * i - 2)) | |
| : (r = e), | |
| 0 <= (o = (a = A(n)).indexOf(".")) && | |
| ((a = a.replace(".", "")), | |
| ((l = new d(1)).e = a.length - o), | |
| (l.d = D(A(l), 10, r)), | |
| (l.e = l.d.length)), | |
| s = c = (h = D(a, 10, r)).length; | |
| 0 == h[--c]; | |
| ) | |
| h.pop(); | |
| if (h[0]) { | |
| if ( | |
| (o < 0 | |
| ? s-- | |
| : (((n = new d(n)).d = h), | |
| (n.e = s), | |
| (h = (n = F(n, l, i, t, 0, r)).d), | |
| (s = n.e), | |
| (f = R)), | |
| (o = h[i]), | |
| (u = r / 2), | |
| (f = f || void 0 !== h[i + 1]), | |
| (f = | |
| t < 4 | |
| ? (void 0 !== o || f) && (0 === t || t === (n.s < 0 ? 3 : 2)) | |
| : u < o || | |
| (o === u && | |
| (4 === t || | |
| f || | |
| (6 === t && 1 & h[i - 1]) || | |
| t === (n.s < 0 ? 8 : 7)))), | |
| (h.length = i), | |
| f) | |
| ) | |
| for (; ++h[--i] > r - 1; ) (h[i] = 0), i || (++s, h.unshift(1)); | |
| for (c = h.length; !h[c - 1]; --c); | |
| for (o = 0, a = ""; o < c; o++) a += m.charAt(h[o]); | |
| if (p) { | |
| if (1 < c) | |
| if (16 == e || 8 == e) { | |
| for (o = 16 == e ? 4 : 3, --c; c % o; c++) a += "0"; | |
| for (c = (h = D(a, r, e)).length; !h[c - 1]; --c); | |
| for (o = 1, a = "1."; o < c; o++) a += m.charAt(h[o]); | |
| } else a = a.charAt(0) + "." + a.slice(1); | |
| a = a + (s < 0 ? "p" : "p+") + s; | |
| } else if (s < 0) { | |
| for (; ++s; ) a = "0" + a; | |
| a = "0." + a; | |
| } else if (++s > c) for (s -= c; s--; ) a += "0"; | |
| else s < c && (a = a.slice(0, s) + "." + a.slice(s)); | |
| } else a = p ? "0p+0" : "0"; | |
| a = (16 == e ? "0x" : 2 == e ? "0b" : 8 == e ? "0o" : "") + a; | |
| } else a = j(n); | |
| return n.s < 0 ? "-" + a : a; | |
| } | |
| function G(n, e) { | |
| if (n.length > e) return (n.length = e), !0; | |
| } | |
| function K(n) { | |
| return new this(n).abs(); | |
| } | |
| function Q(n) { | |
| return new this(n).acos(); | |
| } | |
| function X(n) { | |
| return new this(n).acosh(); | |
| } | |
| function Y(n, e) { | |
| return new this(n).plus(e); | |
| } | |
| function nn(n) { | |
| return new this(n).asin(); | |
| } | |
| function en(n) { | |
| return new this(n).asinh(); | |
| } | |
| function tn(n) { | |
| return new this(n).atan(); | |
| } | |
| function rn(n) { | |
| return new this(n).atanh(); | |
| } | |
| function sn(n, e) { | |
| (n = new this(n)), (e = new this(e)); | |
| var i, | |
| t = this.precision, | |
| r = this.rounding, | |
| s = t + 4; | |
| return ( | |
| n.s && e.s | |
| ? n.d || e.d | |
| ? !e.d || n.isZero() | |
| ? ((i = e.s < 0 ? P(this, t, r) : new this(0)).s = n.s) | |
| : !n.d || e.isZero() | |
| ? ((i = P(this, s, 1).times(0.5)).s = n.s) | |
| : (i = | |
| e.s < 0 | |
| ? ((this.precision = s), | |
| (this.rounding = 1), | |
| (i = this.atan(F(n, e, s, 1))), | |
| (e = P(this, s, 1)), | |
| (this.precision = t), | |
| (this.rounding = r), | |
| n.s < 0 ? i.minus(e) : i.plus(e)) | |
| : this.atan(F(n, e, s, 1))) | |
| : ((i = P(this, s, 1).times(0 < e.s ? 0.25 : 0.75)).s = n.s) | |
| : (i = new this(NaN)), | |
| i | |
| ); | |
| } | |
| function on(n) { | |
| return new this(n).cbrt(); | |
| } | |
| function un(n) { | |
| return _((n = new this(n)), n.e + 1, 2); | |
| } | |
| function cn(n) { | |
| if (!n || "object" != typeof n) throw Error(f + "Object expected"); | |
| var e, | |
| i, | |
| t, | |
| r = !0 === n.defaults, | |
| s = [ | |
| "precision", | |
| 1, | |
| g, | |
| "rounding", | |
| 0, | |
| 8, | |
| "toExpNeg", | |
| -u, | |
| 0, | |
| "toExpPos", | |
| 0, | |
| u, | |
| "maxE", | |
| 0, | |
| u, | |
| "minE", | |
| -u, | |
| 0, | |
| "modulo", | |
| 0, | |
| 9, | |
| ]; | |
| for (e = 0; e < s.length; e += 3) | |
| if (((i = s[e]), r && (this[i] = c[i]), void 0 !== (t = n[i]))) { | |
| if (!(L(t) === t && s[e + 1] <= t && t <= s[e + 2])) | |
| throw Error(w + i + ": " + t); | |
| this[i] = t; | |
| } | |
| if (((i = "crypto"), r && (this[i] = c[i]), void 0 !== (t = n[i]))) { | |
| if (!0 !== t && !1 !== t && 0 !== t && 1 !== t) | |
| throw Error(w + i + ": " + t); | |
| if (t) { | |
| if ( | |
| "undefined" == typeof crypto || | |
| !crypto || | |
| (!crypto.getRandomValues && !crypto.randomBytes) | |
| ) | |
| throw Error(a); | |
| this[i] = !0; | |
| } else this[i] = !1; | |
| } | |
| return this; | |
| } | |
| function fn(n) { | |
| return new this(n).cos(); | |
| } | |
| function an(n) { | |
| return new this(n).cosh(); | |
| } | |
| function hn(n, e) { | |
| return new this(n).div(e); | |
| } | |
| function ln(n) { | |
| return new this(n).exp(); | |
| } | |
| function dn(n) { | |
| return _((n = new this(n)), n.e + 1, 3); | |
| } | |
| function pn() { | |
| var n, | |
| e, | |
| i = new this(0); | |
| for (N = !1, n = 0; n < arguments.length; ) | |
| if ((e = new this(arguments[n++])).d) i.d && (i = i.plus(e.times(e))); | |
| else { | |
| if (e.s) return (N = !0), new this(1 / 0); | |
| i = e; | |
| } | |
| return (N = !0), i.sqrt(); | |
| } | |
| function gn(n) { | |
| return n instanceof h || (n && "[object Decimal]" === n.name) || !1; | |
| } | |
| function mn(n) { | |
| return new this(n).ln(); | |
| } | |
| function wn(n, e) { | |
| return new this(n).log(e); | |
| } | |
| function vn(n) { | |
| return new this(n).log(2); | |
| } | |
| function Nn(n) { | |
| return new this(n).log(10); | |
| } | |
| function bn() { | |
| return i(this, arguments, "lt"); | |
| } | |
| function En() { | |
| return i(this, arguments, "gt"); | |
| } | |
| function xn(n, e) { | |
| return new this(n).mod(e); | |
| } | |
| function yn(n, e) { | |
| return new this(n).mul(e); | |
| } | |
| function Mn(n, e) { | |
| return new this(n).pow(e); | |
| } | |
| function qn(n) { | |
| var e, | |
| i, | |
| t, | |
| r, | |
| s = 0, | |
| o = new this(1), | |
| u = []; | |
| if ( | |
| (void 0 === n ? (n = this.precision) : q(n, 1, g), | |
| (t = Math.ceil(n / U)), | |
| this.crypto) | |
| ) | |
| if (crypto.getRandomValues) | |
| for (e = crypto.getRandomValues(new Uint32Array(t)); s < t; ) | |
| 429e7 <= (r = e[s]) | |
| ? (e[s] = crypto.getRandomValues(new Uint32Array(1))[0]) | |
| : (u[s++] = r % 1e7); | |
| else { | |
| if (!crypto.randomBytes) throw Error(a); | |
| for (e = crypto.randomBytes((t *= 4)); s < t; ) | |
| 214e7 <= | |
| (r = | |
| e[s] + | |
| (e[s + 1] << 8) + | |
| (e[s + 2] << 16) + | |
| ((127 & e[s + 3]) << 24)) | |
| ? crypto.randomBytes(4).copy(e, s) | |
| : (u.push(r % 1e7), (s += 4)); | |
| s = t / 4; | |
| } | |
| else for (; s < t; ) u[s++] = (1e7 * Math.random()) | 0; | |
| for ( | |
| t = u[--s], | |
| n %= U, | |
| t && n && ((r = v(10, U - n)), (u[s] = ((t / r) | 0) * r)); | |
| 0 === u[s]; | |
| s-- | |
| ) | |
| u.pop(); | |
| if (s < 0) u = [(i = 0)]; | |
| else { | |
| for (i = -1; 0 === u[0]; i -= U) u.shift(); | |
| for (t = 1, r = u[0]; 10 <= r; r /= 10) t++; | |
| t < U && (i -= U - t); | |
| } | |
| return (o.e = i), (o.d = u), o; | |
| } | |
| function On(n) { | |
| return _((n = new this(n)), n.e + 1, this.rounding); | |
| } | |
| function Dn(n) { | |
| return (n = new this(n)).d ? (n.d[0] ? n.s : 0 * n.s) : n.s || NaN; | |
| } | |
| function Fn(n) { | |
| return new this(n).sin(); | |
| } | |
| function An(n) { | |
| return new this(n).sinh(); | |
| } | |
| function Sn(n) { | |
| return new this(n).sqrt(); | |
| } | |
| function Zn(n, e) { | |
| return new this(n).sub(e); | |
| } | |
| function Pn(n) { | |
| return new this(n).tan(); | |
| } | |
| function Rn(n) { | |
| return new this(n).tanh(); | |
| } | |
| function Ln(n) { | |
| return _((n = new this(n)), n.e + 1, 1); | |
| } | |
| ((h = (function n(e) { | |
| var i, t, r; | |
| function s(n) { | |
| var e, | |
| i, | |
| t, | |
| r = this; | |
| if (!(r instanceof s)) return new s(n); | |
| if (n instanceof (r.constructor = s)) | |
| return ( | |
| (r.s = n.s), | |
| void (N | |
| ? !n.d || n.e > s.maxE | |
| ? ((r.e = NaN), (r.d = null)) | |
| : n.e < s.minE | |
| ? ((r.e = 0), (r.d = [0])) | |
| : ((r.e = n.e), (r.d = n.d.slice())) | |
| : ((r.e = n.e), (r.d = n.d ? n.d.slice() : n.d))) | |
| ); | |
| if ("number" == (t = typeof n)) { | |
| if (0 === n) | |
| return (r.s = 1 / n < 0 ? -1 : 1), (r.e = 0), void (r.d = [0]); | |
| if (((r.s = n < 0 ? ((n = -n), -1) : 1), n === ~~n && n < 1e7)) { | |
| for (e = 0, i = n; 10 <= i; i /= 10) e++; | |
| return void (r.d = N | |
| ? s.maxE < e | |
| ? ((r.e = NaN), null) | |
| : e < s.minE | |
| ? [(r.e = 0)] | |
| : ((r.e = e), [n]) | |
| : ((r.e = e), [n])); | |
| } | |
| return 0 * n != 0 | |
| ? (n || (r.s = NaN), (r.e = NaN), void (r.d = null)) | |
| : $(r, n.toString()); | |
| } | |
| if ("string" !== t) throw Error(w + n); | |
| return ( | |
| 45 === n.charCodeAt(0) ? ((n = n.slice(1)), (r.s = -1)) : (r.s = 1), | |
| b.test(n) | |
| ? $(r, n) | |
| : (function (n, e) { | |
| var i, t, r, s, o, u, c, f, a; | |
| if ("Infinity" === e || "NaN" === e) | |
| return +e || (n.s = NaN), (n.e = NaN), (n.d = null), n; | |
| if (d.test(e)) (i = 16), (e = e.toLowerCase()); | |
| else if (l.test(e)) i = 2; | |
| else { | |
| if (!p.test(e)) throw Error(w + e); | |
| i = 8; | |
| } | |
| for ( | |
| o = | |
| 0 <= | |
| (s = (e = | |
| 0 < (s = e.search(/p/i)) | |
| ? ((c = +e.slice(s + 1)), e.substring(2, s)) | |
| : e.slice(2)).indexOf(".")), | |
| t = n.constructor, | |
| o && | |
| ((s = (u = (e = e.replace(".", "")).length) - s), | |
| (r = I(t, new t(i), s, 2 * s))), | |
| s = a = (f = D(e, i, T)).length - 1; | |
| 0 === f[s]; | |
| --s | |
| ) | |
| f.pop(); | |
| return s < 0 | |
| ? new t(0 * n.s) | |
| : ((n.e = S(f, a)), | |
| (n.d = f), | |
| (N = !1), | |
| o && (n = F(n, r, 4 * u)), | |
| c && | |
| (n = n.times( | |
| Math.abs(c) < 54 ? Math.pow(2, c) : h.pow(2, c) | |
| )), | |
| (N = !0), | |
| n); | |
| })(r, n) | |
| ); | |
| } | |
| if ( | |
| ((s.prototype = y), | |
| (s.ROUND_UP = 0), | |
| (s.ROUND_DOWN = 1), | |
| (s.ROUND_CEIL = 2), | |
| (s.ROUND_FLOOR = 3), | |
| (s.ROUND_HALF_UP = 4), | |
| (s.ROUND_HALF_DOWN = 5), | |
| (s.ROUND_HALF_EVEN = 6), | |
| (s.ROUND_HALF_CEIL = 7), | |
| (s.ROUND_HALF_FLOOR = 8), | |
| (s.EUCLID = 9), | |
| (s.config = s.set = cn), | |
| (s.clone = n), | |
| (s.isDecimal = gn), | |
| (s.abs = K), | |
| (s.acos = Q), | |
| (s.acosh = X), | |
| (s.add = Y), | |
| (s.asin = nn), | |
| (s.asinh = en), | |
| (s.atan = tn), | |
| (s.atanh = rn), | |
| (s.atan2 = sn), | |
| (s.cbrt = on), | |
| (s.ceil = un), | |
| (s.cos = fn), | |
| (s.cosh = an), | |
| (s.div = hn), | |
| (s.exp = ln), | |
| (s.floor = dn), | |
| (s.hypot = pn), | |
| (s.ln = mn), | |
| (s.log = wn), | |
| (s.log10 = Nn), | |
| (s.log2 = vn), | |
| (s.max = bn), | |
| (s.min = En), | |
| (s.mod = xn), | |
| (s.mul = yn), | |
| (s.pow = Mn), | |
| (s.random = qn), | |
| (s.round = On), | |
| (s.sign = Dn), | |
| (s.sin = Fn), | |
| (s.sinh = An), | |
| (s.sqrt = Sn), | |
| (s.sub = Zn), | |
| (s.tan = Pn), | |
| (s.tanh = Rn), | |
| (s.trunc = Ln), | |
| void 0 === e && (e = {}), | |
| e && !0 !== e.defaults) | |
| ) | |
| for ( | |
| r = [ | |
| "precision", | |
| "rounding", | |
| "toExpNeg", | |
| "toExpPos", | |
| "maxE", | |
| "minE", | |
| "modulo", | |
| "crypto", | |
| ], | |
| i = 0; | |
| i < r.length; | |
| ) | |
| e.hasOwnProperty((t = r[i++])) || (e[t] = this[t]); | |
| return s.config(e), s; | |
| })(c)).default = h.Decimal = | |
| h), | |
| (t = new h(t)), | |
| (r = new h(r)), | |
| "function" == typeof define && define.amd | |
| ? define(function () { | |
| return h; | |
| }) | |
| : "undefined" != typeof module && module.exports | |
| ? ("function" == typeof Symbol && | |
| "symbol" == typeof Symbol.iterator && | |
| ((y[Symbol.for("nodejs.util.inspect.custom")] = y.toString), | |
| (y[Symbol.toStringTag] = "Decimal")), | |
| (module.exports = h)) | |
| : (n || | |
| (n = | |
| "undefined" != typeof self && self && self.self == self | |
| ? self | |
| : window), | |
| (e = n.Decimal), | |
| (h.noConflict = function () { | |
| return (n.Decimal = e), h; | |
| }), | |
| (n.Decimal = h)); | |
| })(this); | |
| //# sourceMappingURL=decimal.min.js.map |
| /* FileSaver.js | |
| * A saveAs() FileSaver implementation. | |
| * 2013-01-23 | |
| * | |
| * By Eli Grey, http://eligrey.com | |
| * License: X11/MIT | |
| * See LICENSE.md | |
| */ | |
| /*global self */ | |
| /*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, | |
| plusplus: true */ | |
| /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ | |
| var saveAs = | |
| saveAs || | |
| (navigator.msSaveBlob && navigator.msSaveBlob.bind(navigator)) || | |
| (function (view) { | |
| "use strict"; | |
| var doc = view.document, | |
| // only get URL when necessary in case BlobBuilder.js hasn't overridden it yet | |
| get_URL = function () { | |
| return view.URL || view.webkitURL || view; | |
| }, | |
| URL = view.URL || view.webkitURL || view, | |
| save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a"), | |
| can_use_save_link = !view.externalHost && "download" in save_link, | |
| click = function (node) { | |
| var event = doc.createEvent("MouseEvents"); | |
| event.initMouseEvent( | |
| "click", | |
| true, | |
| false, | |
| view, | |
| 0, | |
| 0, | |
| 0, | |
| 0, | |
| 0, | |
| false, | |
| false, | |
| false, | |
| false, | |
| 0, | |
| null | |
| ); | |
| node.dispatchEvent(event); | |
| }, | |
| webkit_req_fs = view.webkitRequestFileSystem, | |
| req_fs = | |
| view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem, | |
| throw_outside = function (ex) { | |
| (view.setImmediate || view.setTimeout)(function () { | |
| throw ex; | |
| }, 0); | |
| }, | |
| force_saveable_type = "application/octet-stream", | |
| fs_min_size = 0, | |
| deletion_queue = [], | |
| process_deletion_queue = function () { | |
| var i = deletion_queue.length; | |
| while (i--) { | |
| var file = deletion_queue[i]; | |
| if (typeof file === "string") { | |
| // file is an object URL | |
| URL.revokeObjectURL(file); | |
| } else { | |
| // file is a File | |
| file.remove(); | |
| } | |
| } | |
| deletion_queue.length = 0; // clear queue | |
| }, | |
| dispatch = function (filesaver, event_types, event) { | |
| event_types = [].concat(event_types); | |
| var i = event_types.length; | |
| while (i--) { | |
| var listener = filesaver["on" + event_types[i]]; | |
| if (typeof listener === "function") { | |
| try { | |
| listener.call(filesaver, event || filesaver); | |
| } catch (ex) { | |
| throw_outside(ex); | |
| } | |
| } | |
| } | |
| }, | |
| FileSaver = function (blob, name) { | |
| // First try a.download, then web filesystem, then object URLs | |
| var filesaver = this, | |
| type = blob.type, | |
| blob_changed = false, | |
| object_url, | |
| target_view, | |
| get_object_url = function () { | |
| var object_url = get_URL().createObjectURL(blob); | |
| deletion_queue.push(object_url); | |
| return object_url; | |
| }, | |
| dispatch_all = function () { | |
| dispatch( | |
| filesaver, | |
| "writestart progress write writeend".split(" ") | |
| ); | |
| }, | |
| // on any filesys errors revert to saving with object URLs | |
| fs_error = function () { | |
| // don't create more object URLs than needed | |
| if (blob_changed || !object_url) { | |
| object_url = get_object_url(blob); | |
| } | |
| if (target_view) { | |
| target_view.location.href = object_url; | |
| } else { | |
| window.open(object_url, "_blank"); | |
| } | |
| filesaver.readyState = filesaver.DONE; | |
| dispatch_all(); | |
| }, | |
| abortable = function (func) { | |
| return function () { | |
| if (filesaver.readyState !== filesaver.DONE) { | |
| return func.apply(this, arguments); | |
| } | |
| }; | |
| }, | |
| create_if_not_found = { create: true, exclusive: false }, | |
| slice; | |
| filesaver.readyState = filesaver.INIT; | |
| if (!name) { | |
| name = "download"; | |
| } | |
| if (can_use_save_link) { | |
| object_url = get_object_url(blob); | |
| save_link.href = object_url; | |
| save_link.download = name; | |
| click(save_link); | |
| filesaver.readyState = filesaver.DONE; | |
| dispatch_all(); | |
| return; | |
| } | |
| // Object and web filesystem URLs have a problem saving in Google Chrome when | |
| // viewed in a tab, so I force save with application/octet-stream | |
| // http://code.google.com/p/chromium/issues/detail?id=91158 | |
| if (view.chrome && type && type !== force_saveable_type) { | |
| slice = blob.slice || blob.webkitSlice; | |
| blob = slice.call(blob, 0, blob.size, force_saveable_type); | |
| blob_changed = true; | |
| } | |
| // Since I can't be sure that the guessed media type will trigger a download | |
| // in WebKit, I append .download to the filename. | |
| // https://bugs.webkit.org/show_bug.cgi?id=65440 | |
| if (webkit_req_fs && name !== "download") { | |
| name += ".download"; | |
| } | |
| if (type === force_saveable_type || webkit_req_fs) { | |
| target_view = view; | |
| } | |
| if (!req_fs) { | |
| fs_error(); | |
| return; | |
| } | |
| fs_min_size += blob.size; | |
| req_fs( | |
| view.TEMPORARY, | |
| fs_min_size, | |
| abortable(function (fs) { | |
| fs.root.getDirectory( | |
| "saved", | |
| create_if_not_found, | |
| abortable(function (dir) { | |
| var save = function () { | |
| dir.getFile( | |
| name, | |
| create_if_not_found, | |
| abortable(function (file) { | |
| file.createWriter( | |
| abortable(function (writer) { | |
| writer.onwriteend = function (event) { | |
| target_view.location.href = file.toURL(); | |
| deletion_queue.push(file); | |
| filesaver.readyState = filesaver.DONE; | |
| dispatch(filesaver, "writeend", event); | |
| }; | |
| writer.onerror = function () { | |
| var error = writer.error; | |
| if (error.code !== error.ABORT_ERR) { | |
| fs_error(); | |
| } | |
| }; | |
| "writestart progress write abort" | |
| .split(" ") | |
| .forEach(function (event) { | |
| writer["on" + event] = filesaver["on" + event]; | |
| }); | |
| writer.write(blob); | |
| filesaver.abort = function () { | |
| writer.abort(); | |
| filesaver.readyState = filesaver.DONE; | |
| }; | |
| filesaver.readyState = filesaver.WRITING; | |
| }), | |
| fs_error | |
| ); | |
| }), | |
| fs_error | |
| ); | |
| }; | |
| dir.getFile( | |
| name, | |
| { create: false }, | |
| abortable(function (file) { | |
| // delete file if it already exists | |
| file.remove(); | |
| save(); | |
| }), | |
| abortable(function (ex) { | |
| if (ex.code === ex.NOT_FOUND_ERR) { | |
| save(); | |
| } else { | |
| fs_error(); | |
| } | |
| }) | |
| ); | |
| }), | |
| fs_error | |
| ); | |
| }), | |
| fs_error | |
| ); | |
| }, | |
| FS_proto = FileSaver.prototype, | |
| saveAs = function (blob, name) { | |
| return new FileSaver(blob, name); | |
| }; | |
| FS_proto.abort = function () { | |
| var filesaver = this; | |
| filesaver.readyState = filesaver.DONE; | |
| dispatch(filesaver, "abort"); | |
| }; | |
| FS_proto.readyState = FS_proto.INIT = 0; | |
| FS_proto.WRITING = 1; | |
| FS_proto.DONE = 2; | |
| FS_proto.error = | |
| FS_proto.onwritestart = | |
| FS_proto.onprogress = | |
| FS_proto.onwrite = | |
| FS_proto.onabort = | |
| FS_proto.onerror = | |
| FS_proto.onwriteend = | |
| null; | |
| view.addEventListener("unload", process_deletion_queue, false); | |
| return saveAs; | |
| })(self); |
| (function (global, factory) { | |
| if (typeof define === "function" && define.amd) { | |
| define([], factory); | |
| } else if (typeof exports !== "undefined") { | |
| factory(); | |
| } else { | |
| var mod = { | |
| exports: {}, | |
| }; | |
| factory(); | |
| global.FileSaver = mod.exports; | |
| } | |
| })(this, function () { | |
| "use strict"; | |
| /* | |
| * FileSaver.js | |
| * A saveAs() FileSaver implementation. | |
| * | |
| * By Eli Grey, http://eligrey.com | |
| * | |
| * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT) | |
| * source : http://purl.eligrey.com/github/FileSaver.js | |
| */ | |
| // The one and only way of getting global scope in all environments | |
| // https://stackoverflow.com/q/3277182/1008999 | |
| var _global = | |
| typeof window === "object" && window.window === window | |
| ? window | |
| : typeof self === "object" && self.self === self | |
| ? self | |
| : typeof global === "object" && global.global === global | |
| ? global | |
| : void 0; | |
| function bom(blob, opts) { | |
| if (typeof opts === "undefined") | |
| opts = { | |
| autoBom: false, | |
| }; | |
| else if (typeof opts !== "object") { | |
| console.warn("Depricated: Expected third argument to be a object"); | |
| opts = { | |
| autoBom: !opts, | |
| }; | |
| } // prepend BOM for UTF-8 XML and text/* types (including HTML) | |
| // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF | |
| if ( | |
| opts.autoBom && | |
| /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test( | |
| blob.type | |
| ) | |
| ) { | |
| return new Blob([String.fromCharCode(0xfeff), blob], { | |
| type: blob.type, | |
| }); | |
| } | |
| return blob; | |
| } | |
| function download(url, name, opts) { | |
| var xhr = new XMLHttpRequest(); | |
| xhr.open("GET", url); | |
| xhr.responseType = "blob"; | |
| xhr.onload = function () { | |
| saveAs(xhr.response, name, opts); | |
| }; | |
| xhr.onerror = function () { | |
| console.error("could not download file"); | |
| }; | |
| xhr.send(); | |
| } | |
| function corsEnabled(url) { | |
| var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker | |
| xhr.open("HEAD", url, false); | |
| xhr.send(); | |
| return xhr.status >= 200 && xhr.status <= 299; | |
| } // `a.click()` doesn't work for all browsers (#465) | |
| function click(node) { | |
| try { | |
| node.dispatchEvent(new MouseEvent("click")); | |
| } catch (e) { | |
| var evt = document.createEvent("MouseEvents"); | |
| evt.initMouseEvent( | |
| "click", | |
| true, | |
| true, | |
| window, | |
| 0, | |
| 0, | |
| 0, | |
| 80, | |
| 20, | |
| false, | |
| false, | |
| false, | |
| false, | |
| 0, | |
| null | |
| ); | |
| node.dispatchEvent(evt); | |
| } | |
| } | |
| var saveAs = | |
| _global.saveAs || // probably in some web worker | |
| typeof window !== "object" || | |
| window !== _global | |
| ? function saveAs() {} | |
| : /* noop */ | |
| // Use download attribute first if possible (#193 Lumia mobile) | |
| "download" in HTMLAnchorElement.prototype | |
| ? function saveAs(blob, name, opts) { | |
| var URL = _global.URL || _global.webkitURL; | |
| var a = document.createElement("a"); | |
| name = name || blob.name || "download"; | |
| a.download = name; | |
| a.rel = "noopener"; // tabnabbing | |
| // TODO: detect chrome extensions & packaged apps | |
| // a.target = '_blank' | |
| if (typeof blob === "string") { | |
| // Support regular links | |
| a.href = blob; | |
| if (a.origin !== location.origin) { | |
| corsEnabled(a.href) | |
| ? download(blob, name, opts) | |
| : click(a, (a.target = "_blank")); | |
| } else { | |
| click(a); | |
| } | |
| } else { | |
| // Support blobs | |
| a.href = URL.createObjectURL(blob); | |
| setTimeout(function () { | |
| URL.revokeObjectURL(a.href); | |
| }, 4e4); // 40s | |
| setTimeout(function () { | |
| click(a); | |
| }, 0); | |
| } | |
| } // Use msSaveOrOpenBlob as a second approach | |
| : "msSaveOrOpenBlob" in navigator | |
| ? function saveAs(blob, name, opts) { | |
| name = name || blob.name || "download"; | |
| if (typeof blob === "string") { | |
| if (corsEnabled(blob)) { | |
| download(blob, name, opts); | |
| } else { | |
| var a = document.createElement("a"); | |
| a.href = blob; | |
| a.target = "_blank"; | |
| setTimeout(function () { | |
| click(a); | |
| }); | |
| } | |
| } else { | |
| navigator.msSaveOrOpenBlob(bom(blob, opts), name); | |
| } | |
| } // Fallback to using FileReader and a popup | |
| : function saveAs(blob, name, opts, popup) { | |
| // Open a popup immediately do go around popup blocker | |
| // Mostly only avalible on user interaction and the fileReader is async so... | |
| popup = popup || open("", "_blank"); | |
| if (popup) { | |
| popup.document.title = popup.document.body.innerText = | |
| "downloading..."; | |
| } | |
| if (typeof blob === "string") return download(blob, name, opts); | |
| var force = blob.type === "application/octet-stream"; | |
| var isSafari = | |
| /constructor/i.test(_global.HTMLElement) || _global.safari; | |
| var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); | |
| if ( | |
| (isChromeIOS || (force && isSafari)) && | |
| typeof FileReader === "object" | |
| ) { | |
| // Safari doesn't allow downloading of blob urls | |
| var reader = new FileReader(); | |
| reader.onloadend = function () { | |
| var url = reader.result; | |
| url = isChromeIOS | |
| ? url | |
| : url.replace(/^data:[^;]*;/, "data:attachment/file;"); | |
| if (popup) popup.location.href = url; | |
| else location = url; | |
| popup = null; // reverse-tabnabbing #460 | |
| }; | |
| reader.readAsDataURL(blob); | |
| } else { | |
| var URL = _global.URL || _global.webkitURL; | |
| var url = URL.createObjectURL(blob); | |
| if (popup) popup.location = url; | |
| else location.href = url; | |
| popup = null; // reverse-tabnabbing #460 | |
| setTimeout(function () { | |
| URL.revokeObjectURL(url); | |
| }, 4e4); // 40s | |
| } | |
| }; | |
| _global.saveAs = saveAs.saveAs = saveAs; | |
| if (typeof module !== "undefined") { | |
| module.exports = saveAs; | |
| } | |
| }); |
| (function (global) { | |
| "use strict"; | |
| if (typeof module !== "undefined" && module.exports) { | |
| module.exports = global; | |
| } | |
| global["encoding-indexes"] = { | |
| big5: [ | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 17392, | |
| 19506, | |
| 17923, | |
| 17830, | |
| 17784, | |
| 160359, | |
| 19831, | |
| 17843, | |
| 162993, | |
| 19682, | |
| 163013, | |
| 15253, | |
| 18230, | |
| 18244, | |
| 19527, | |
| 19520, | |
| 148159, | |
| 144919, | |
| 160594, | |
| 159371, | |
| 159954, | |
| 19543, | |
| 172881, | |
| 18255, | |
| 17882, | |
| 19589, | |
| 162924, | |
| 19719, | |
| 19108, | |
| 18081, | |
| 158499, | |
| 29221, | |
| 154196, | |
| 137827, | |
| 146950, | |
| 147297, | |
| 26189, | |
| 22267, | |
| null, | |
| 32149, | |
| 22813, | |
| 166841, | |
| 15860, | |
| 38708, | |
| 162799, | |
| 23515, | |
| 138590, | |
| 23204, | |
| 13861, | |
| 171696, | |
| 23249, | |
| 23479, | |
| 23804, | |
| 26478, | |
| 34195, | |
| 170309, | |
| 29793, | |
| 29853, | |
| 14453, | |
| 138579, | |
| 145054, | |
| 155681, | |
| 16108, | |
| 153822, | |
| 15093, | |
| 31484, | |
| 40855, | |
| 147809, | |
| 166157, | |
| 143850, | |
| 133770, | |
| 143966, | |
| 17162, | |
| 33924, | |
| 40854, | |
| 37935, | |
| 18736, | |
| 34323, | |
| 22678, | |
| 38730, | |
| 37400, | |
| 31184, | |
| 31282, | |
| 26208, | |
| 27177, | |
| 34973, | |
| 29772, | |
| 31685, | |
| 26498, | |
| 31276, | |
| 21071, | |
| 36934, | |
| 13542, | |
| 29636, | |
| 155065, | |
| 29894, | |
| 40903, | |
| 22451, | |
| 18735, | |
| 21580, | |
| 16689, | |
| 145038, | |
| 22552, | |
| 31346, | |
| 162661, | |
| 35727, | |
| 18094, | |
| 159368, | |
| 16769, | |
| 155033, | |
| 31662, | |
| 140476, | |
| 40904, | |
| 140481, | |
| 140489, | |
| 140492, | |
| 40905, | |
| 34052, | |
| 144827, | |
| 16564, | |
| 40906, | |
| 17633, | |
| 175615, | |
| 25281, | |
| 28782, | |
| 40907, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 12736, | |
| 12737, | |
| 12738, | |
| 12739, | |
| 12740, | |
| 131340, | |
| 12741, | |
| 131281, | |
| 131277, | |
| 12742, | |
| 12743, | |
| 131275, | |
| 139240, | |
| 12744, | |
| 131274, | |
| 12745, | |
| 12746, | |
| 12747, | |
| 12748, | |
| 131342, | |
| 12749, | |
| 12750, | |
| 256, | |
| 193, | |
| 461, | |
| 192, | |
| 274, | |
| 201, | |
| 282, | |
| 200, | |
| 332, | |
| 211, | |
| 465, | |
| 210, | |
| null, | |
| 7870, | |
| null, | |
| 7872, | |
| 202, | |
| 257, | |
| 225, | |
| 462, | |
| 224, | |
| 593, | |
| 275, | |
| 233, | |
| 283, | |
| 232, | |
| 299, | |
| 237, | |
| 464, | |
| 236, | |
| 333, | |
| 243, | |
| 466, | |
| 242, | |
| 363, | |
| 250, | |
| 468, | |
| 249, | |
| 470, | |
| 472, | |
| 474, | |
| 476, | |
| 252, | |
| null, | |
| 7871, | |
| null, | |
| 7873, | |
| 234, | |
| 609, | |
| 9178, | |
| 9179, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 172969, | |
| 135493, | |
| null, | |
| 25866, | |
| null, | |
| null, | |
| 20029, | |
| 28381, | |
| 40270, | |
| 37343, | |
| null, | |
| null, | |
| 161589, | |
| 25745, | |
| 20250, | |
| 20264, | |
| 20392, | |
| 20822, | |
| 20852, | |
| 20892, | |
| 20964, | |
| 21153, | |
| 21160, | |
| 21307, | |
| 21326, | |
| 21457, | |
| 21464, | |
| 22242, | |
| 22768, | |
| 22788, | |
| 22791, | |
| 22834, | |
| 22836, | |
| 23398, | |
| 23454, | |
| 23455, | |
| 23706, | |
| 24198, | |
| 24635, | |
| 25993, | |
| 26622, | |
| 26628, | |
| 26725, | |
| 27982, | |
| 28860, | |
| 30005, | |
| 32420, | |
| 32428, | |
| 32442, | |
| 32455, | |
| 32463, | |
| 32479, | |
| 32518, | |
| 32567, | |
| 33402, | |
| 33487, | |
| 33647, | |
| 35270, | |
| 35774, | |
| 35810, | |
| 36710, | |
| 36711, | |
| 36718, | |
| 29713, | |
| 31996, | |
| 32205, | |
| 26950, | |
| 31433, | |
| 21031, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 37260, | |
| 30904, | |
| 37214, | |
| 32956, | |
| null, | |
| 36107, | |
| 33014, | |
| 133607, | |
| null, | |
| null, | |
| 32927, | |
| 40647, | |
| 19661, | |
| 40393, | |
| 40460, | |
| 19518, | |
| 171510, | |
| 159758, | |
| 40458, | |
| 172339, | |
| 13761, | |
| null, | |
| 28314, | |
| 33342, | |
| 29977, | |
| null, | |
| 18705, | |
| 39532, | |
| 39567, | |
| 40857, | |
| 31111, | |
| 164972, | |
| 138698, | |
| 132560, | |
| 142054, | |
| 20004, | |
| 20097, | |
| 20096, | |
| 20103, | |
| 20159, | |
| 20203, | |
| 20279, | |
| 13388, | |
| 20413, | |
| 15944, | |
| 20483, | |
| 20616, | |
| 13437, | |
| 13459, | |
| 13477, | |
| 20870, | |
| 22789, | |
| 20955, | |
| 20988, | |
| 20997, | |
| 20105, | |
| 21113, | |
| 21136, | |
| 21287, | |
| 13767, | |
| 21417, | |
| 13649, | |
| 21424, | |
| 13651, | |
| 21442, | |
| 21539, | |
| 13677, | |
| 13682, | |
| 13953, | |
| 21651, | |
| 21667, | |
| 21684, | |
| 21689, | |
| 21712, | |
| 21743, | |
| 21784, | |
| 21795, | |
| 21800, | |
| 13720, | |
| 21823, | |
| 13733, | |
| 13759, | |
| 21975, | |
| 13765, | |
| 163204, | |
| 21797, | |
| null, | |
| 134210, | |
| 134421, | |
| 151851, | |
| 21904, | |
| 142534, | |
| 14828, | |
| 131905, | |
| 36422, | |
| 150968, | |
| 169189, | |
| 16467, | |
| 164030, | |
| 30586, | |
| 142392, | |
| 14900, | |
| 18389, | |
| 164189, | |
| 158194, | |
| 151018, | |
| 25821, | |
| 134524, | |
| 135092, | |
| 134357, | |
| 135412, | |
| 25741, | |
| 36478, | |
| 134806, | |
| 134155, | |
| 135012, | |
| 142505, | |
| 164438, | |
| 148691, | |
| null, | |
| 134470, | |
| 170573, | |
| 164073, | |
| 18420, | |
| 151207, | |
| 142530, | |
| 39602, | |
| 14951, | |
| 169460, | |
| 16365, | |
| 13574, | |
| 152263, | |
| 169940, | |
| 161992, | |
| 142660, | |
| 40302, | |
| 38933, | |
| null, | |
| 17369, | |
| 155813, | |
| 25780, | |
| 21731, | |
| 142668, | |
| 142282, | |
| 135287, | |
| 14843, | |
| 135279, | |
| 157402, | |
| 157462, | |
| 162208, | |
| 25834, | |
| 151634, | |
| 134211, | |
| 36456, | |
| 139681, | |
| 166732, | |
| 132913, | |
| null, | |
| 18443, | |
| 131497, | |
| 16378, | |
| 22643, | |
| 142733, | |
| null, | |
| 148936, | |
| 132348, | |
| 155799, | |
| 134988, | |
| 134550, | |
| 21881, | |
| 16571, | |
| 17338, | |
| null, | |
| 19124, | |
| 141926, | |
| 135325, | |
| 33194, | |
| 39157, | |
| 134556, | |
| 25465, | |
| 14846, | |
| 141173, | |
| 36288, | |
| 22177, | |
| 25724, | |
| 15939, | |
| null, | |
| 173569, | |
| 134665, | |
| 142031, | |
| 142537, | |
| null, | |
| 135368, | |
| 145858, | |
| 14738, | |
| 14854, | |
| 164507, | |
| 13688, | |
| 155209, | |
| 139463, | |
| 22098, | |
| 134961, | |
| 142514, | |
| 169760, | |
| 13500, | |
| 27709, | |
| 151099, | |
| null, | |
| null, | |
| 161140, | |
| 142987, | |
| 139784, | |
| 173659, | |
| 167117, | |
| 134778, | |
| 134196, | |
| 157724, | |
| 32659, | |
| 135375, | |
| 141315, | |
| 141625, | |
| 13819, | |
| 152035, | |
| 134796, | |
| 135053, | |
| 134826, | |
| 16275, | |
| 134960, | |
| 134471, | |
| 135503, | |
| 134732, | |
| null, | |
| 134827, | |
| 134057, | |
| 134472, | |
| 135360, | |
| 135485, | |
| 16377, | |
| 140950, | |
| 25650, | |
| 135085, | |
| 144372, | |
| 161337, | |
| 142286, | |
| 134526, | |
| 134527, | |
| 142417, | |
| 142421, | |
| 14872, | |
| 134808, | |
| 135367, | |
| 134958, | |
| 173618, | |
| 158544, | |
| 167122, | |
| 167321, | |
| 167114, | |
| 38314, | |
| 21708, | |
| 33476, | |
| 21945, | |
| null, | |
| 171715, | |
| 39974, | |
| 39606, | |
| 161630, | |
| 142830, | |
| 28992, | |
| 33133, | |
| 33004, | |
| 23580, | |
| 157042, | |
| 33076, | |
| 14231, | |
| 21343, | |
| 164029, | |
| 37302, | |
| 134906, | |
| 134671, | |
| 134775, | |
| 134907, | |
| 13789, | |
| 151019, | |
| 13833, | |
| 134358, | |
| 22191, | |
| 141237, | |
| 135369, | |
| 134672, | |
| 134776, | |
| 135288, | |
| 135496, | |
| 164359, | |
| 136277, | |
| 134777, | |
| 151120, | |
| 142756, | |
| 23124, | |
| 135197, | |
| 135198, | |
| 135413, | |
| 135414, | |
| 22428, | |
| 134673, | |
| 161428, | |
| 164557, | |
| 135093, | |
| 134779, | |
| 151934, | |
| 14083, | |
| 135094, | |
| 135552, | |
| 152280, | |
| 172733, | |
| 149978, | |
| 137274, | |
| 147831, | |
| 164476, | |
| 22681, | |
| 21096, | |
| 13850, | |
| 153405, | |
| 31666, | |
| 23400, | |
| 18432, | |
| 19244, | |
| 40743, | |
| 18919, | |
| 39967, | |
| 39821, | |
| 154484, | |
| 143677, | |
| 22011, | |
| 13810, | |
| 22153, | |
| 20008, | |
| 22786, | |
| 138177, | |
| 194680, | |
| 38737, | |
| 131206, | |
| 20059, | |
| 20155, | |
| 13630, | |
| 23587, | |
| 24401, | |
| 24516, | |
| 14586, | |
| 25164, | |
| 25909, | |
| 27514, | |
| 27701, | |
| 27706, | |
| 28780, | |
| 29227, | |
| 20012, | |
| 29357, | |
| 149737, | |
| 32594, | |
| 31035, | |
| 31993, | |
| 32595, | |
| 156266, | |
| 13505, | |
| null, | |
| 156491, | |
| 32770, | |
| 32896, | |
| 157202, | |
| 158033, | |
| 21341, | |
| 34916, | |
| 35265, | |
| 161970, | |
| 35744, | |
| 36125, | |
| 38021, | |
| 38264, | |
| 38271, | |
| 38376, | |
| 167439, | |
| 38886, | |
| 39029, | |
| 39118, | |
| 39134, | |
| 39267, | |
| 170000, | |
| 40060, | |
| 40479, | |
| 40644, | |
| 27503, | |
| 63751, | |
| 20023, | |
| 131207, | |
| 38429, | |
| 25143, | |
| 38050, | |
| null, | |
| 20539, | |
| 28158, | |
| 171123, | |
| 40870, | |
| 15817, | |
| 34959, | |
| 147790, | |
| 28791, | |
| 23797, | |
| 19232, | |
| 152013, | |
| 13657, | |
| 154928, | |
| 24866, | |
| 166450, | |
| 36775, | |
| 37366, | |
| 29073, | |
| 26393, | |
| 29626, | |
| 144001, | |
| 172295, | |
| 15499, | |
| 137600, | |
| 19216, | |
| 30948, | |
| 29698, | |
| 20910, | |
| 165647, | |
| 16393, | |
| 27235, | |
| 172730, | |
| 16931, | |
| 34319, | |
| 133743, | |
| 31274, | |
| 170311, | |
| 166634, | |
| 38741, | |
| 28749, | |
| 21284, | |
| 139390, | |
| 37876, | |
| 30425, | |
| 166371, | |
| 40871, | |
| 30685, | |
| 20131, | |
| 20464, | |
| 20668, | |
| 20015, | |
| 20247, | |
| 40872, | |
| 21556, | |
| 32139, | |
| 22674, | |
| 22736, | |
| 138678, | |
| 24210, | |
| 24217, | |
| 24514, | |
| 141074, | |
| 25995, | |
| 144377, | |
| 26905, | |
| 27203, | |
| 146531, | |
| 27903, | |
| null, | |
| 29184, | |
| 148741, | |
| 29580, | |
| 16091, | |
| 150035, | |
| 23317, | |
| 29881, | |
| 35715, | |
| 154788, | |
| 153237, | |
| 31379, | |
| 31724, | |
| 31939, | |
| 32364, | |
| 33528, | |
| 34199, | |
| 40873, | |
| 34960, | |
| 40874, | |
| 36537, | |
| 40875, | |
| 36815, | |
| 34143, | |
| 39392, | |
| 37409, | |
| 40876, | |
| 167353, | |
| 136255, | |
| 16497, | |
| 17058, | |
| 23066, | |
| null, | |
| null, | |
| null, | |
| 39016, | |
| 26475, | |
| 17014, | |
| 22333, | |
| null, | |
| 34262, | |
| 149883, | |
| 33471, | |
| 160013, | |
| 19585, | |
| 159092, | |
| 23931, | |
| 158485, | |
| 159678, | |
| 40877, | |
| 40878, | |
| 23446, | |
| 40879, | |
| 26343, | |
| 32347, | |
| 28247, | |
| 31178, | |
| 15752, | |
| 17603, | |
| 143958, | |
| 141206, | |
| 17306, | |
| 17718, | |
| null, | |
| 23765, | |
| 146202, | |
| 35577, | |
| 23672, | |
| 15634, | |
| 144721, | |
| 23928, | |
| 40882, | |
| 29015, | |
| 17752, | |
| 147692, | |
| 138787, | |
| 19575, | |
| 14712, | |
| 13386, | |
| 131492, | |
| 158785, | |
| 35532, | |
| 20404, | |
| 131641, | |
| 22975, | |
| 33132, | |
| 38998, | |
| 170234, | |
| 24379, | |
| 134047, | |
| null, | |
| 139713, | |
| 166253, | |
| 16642, | |
| 18107, | |
| 168057, | |
| 16135, | |
| 40883, | |
| 172469, | |
| 16632, | |
| 14294, | |
| 18167, | |
| 158790, | |
| 16764, | |
| 165554, | |
| 160767, | |
| 17773, | |
| 14548, | |
| 152730, | |
| 17761, | |
| 17691, | |
| 19849, | |
| 19579, | |
| 19830, | |
| 17898, | |
| 16328, | |
| 150287, | |
| 13921, | |
| 17630, | |
| 17597, | |
| 16877, | |
| 23870, | |
| 23880, | |
| 23894, | |
| 15868, | |
| 14351, | |
| 23972, | |
| 23993, | |
| 14368, | |
| 14392, | |
| 24130, | |
| 24253, | |
| 24357, | |
| 24451, | |
| 14600, | |
| 14612, | |
| 14655, | |
| 14669, | |
| 24791, | |
| 24893, | |
| 23781, | |
| 14729, | |
| 25015, | |
| 25017, | |
| 25039, | |
| 14776, | |
| 25132, | |
| 25232, | |
| 25317, | |
| 25368, | |
| 14840, | |
| 22193, | |
| 14851, | |
| 25570, | |
| 25595, | |
| 25607, | |
| 25690, | |
| 14923, | |
| 25792, | |
| 23829, | |
| 22049, | |
| 40863, | |
| 14999, | |
| 25990, | |
| 15037, | |
| 26111, | |
| 26195, | |
| 15090, | |
| 26258, | |
| 15138, | |
| 26390, | |
| 15170, | |
| 26532, | |
| 26624, | |
| 15192, | |
| 26698, | |
| 26756, | |
| 15218, | |
| 15217, | |
| 15227, | |
| 26889, | |
| 26947, | |
| 29276, | |
| 26980, | |
| 27039, | |
| 27013, | |
| 15292, | |
| 27094, | |
| 15325, | |
| 27237, | |
| 27252, | |
| 27249, | |
| 27266, | |
| 15340, | |
| 27289, | |
| 15346, | |
| 27307, | |
| 27317, | |
| 27348, | |
| 27382, | |
| 27521, | |
| 27585, | |
| 27626, | |
| 27765, | |
| 27818, | |
| 15563, | |
| 27906, | |
| 27910, | |
| 27942, | |
| 28033, | |
| 15599, | |
| 28068, | |
| 28081, | |
| 28181, | |
| 28184, | |
| 28201, | |
| 28294, | |
| 166336, | |
| 28347, | |
| 28386, | |
| 28378, | |
| 40831, | |
| 28392, | |
| 28393, | |
| 28452, | |
| 28468, | |
| 15686, | |
| 147265, | |
| 28545, | |
| 28606, | |
| 15722, | |
| 15733, | |
| 29111, | |
| 23705, | |
| 15754, | |
| 28716, | |
| 15761, | |
| 28752, | |
| 28756, | |
| 28783, | |
| 28799, | |
| 28809, | |
| 131877, | |
| 17345, | |
| 13809, | |
| 134872, | |
| 147159, | |
| 22462, | |
| 159443, | |
| 28990, | |
| 153568, | |
| 13902, | |
| 27042, | |
| 166889, | |
| 23412, | |
| 31305, | |
| 153825, | |
| 169177, | |
| 31333, | |
| 31357, | |
| 154028, | |
| 31419, | |
| 31408, | |
| 31426, | |
| 31427, | |
| 29137, | |
| 156813, | |
| 16842, | |
| 31450, | |
| 31453, | |
| 31466, | |
| 16879, | |
| 21682, | |
| 154625, | |
| 31499, | |
| 31573, | |
| 31529, | |
| 152334, | |
| 154878, | |
| 31650, | |
| 31599, | |
| 33692, | |
| 154548, | |
| 158847, | |
| 31696, | |
| 33825, | |
| 31634, | |
| 31672, | |
| 154912, | |
| 15789, | |
| 154725, | |
| 33938, | |
| 31738, | |
| 31750, | |
| 31797, | |
| 154817, | |
| 31812, | |
| 31875, | |
| 149634, | |
| 31910, | |
| 26237, | |
| 148856, | |
| 31945, | |
| 31943, | |
| 31974, | |
| 31860, | |
| 31987, | |
| 31989, | |
| 31950, | |
| 32359, | |
| 17693, | |
| 159300, | |
| 32093, | |
| 159446, | |
| 29837, | |
| 32137, | |
| 32171, | |
| 28981, | |
| 32179, | |
| 32210, | |
| 147543, | |
| 155689, | |
| 32228, | |
| 15635, | |
| 32245, | |
| 137209, | |
| 32229, | |
| 164717, | |
| 32285, | |
| 155937, | |
| 155994, | |
| 32366, | |
| 32402, | |
| 17195, | |
| 37996, | |
| 32295, | |
| 32576, | |
| 32577, | |
| 32583, | |
| 31030, | |
| 156368, | |
| 39393, | |
| 32663, | |
| 156497, | |
| 32675, | |
| 136801, | |
| 131176, | |
| 17756, | |
| 145254, | |
| 17667, | |
| 164666, | |
| 32762, | |
| 156809, | |
| 32773, | |
| 32776, | |
| 32797, | |
| 32808, | |
| 32815, | |
| 172167, | |
| 158915, | |
| 32827, | |
| 32828, | |
| 32865, | |
| 141076, | |
| 18825, | |
| 157222, | |
| 146915, | |
| 157416, | |
| 26405, | |
| 32935, | |
| 166472, | |
| 33031, | |
| 33050, | |
| 22704, | |
| 141046, | |
| 27775, | |
| 156824, | |
| 151480, | |
| 25831, | |
| 136330, | |
| 33304, | |
| 137310, | |
| 27219, | |
| 150117, | |
| 150165, | |
| 17530, | |
| 33321, | |
| 133901, | |
| 158290, | |
| 146814, | |
| 20473, | |
| 136445, | |
| 34018, | |
| 33634, | |
| 158474, | |
| 149927, | |
| 144688, | |
| 137075, | |
| 146936, | |
| 33450, | |
| 26907, | |
| 194964, | |
| 16859, | |
| 34123, | |
| 33488, | |
| 33562, | |
| 134678, | |
| 137140, | |
| 14017, | |
| 143741, | |
| 144730, | |
| 33403, | |
| 33506, | |
| 33560, | |
| 147083, | |
| 159139, | |
| 158469, | |
| 158615, | |
| 144846, | |
| 15807, | |
| 33565, | |
| 21996, | |
| 33669, | |
| 17675, | |
| 159141, | |
| 33708, | |
| 33729, | |
| 33747, | |
| 13438, | |
| 159444, | |
| 27223, | |
| 34138, | |
| 13462, | |
| 159298, | |
| 143087, | |
| 33880, | |
| 154596, | |
| 33905, | |
| 15827, | |
| 17636, | |
| 27303, | |
| 33866, | |
| 146613, | |
| 31064, | |
| 33960, | |
| 158614, | |
| 159351, | |
| 159299, | |
| 34014, | |
| 33807, | |
| 33681, | |
| 17568, | |
| 33939, | |
| 34020, | |
| 154769, | |
| 16960, | |
| 154816, | |
| 17731, | |
| 34100, | |
| 23282, | |
| 159385, | |
| 17703, | |
| 34163, | |
| 17686, | |
| 26559, | |
| 34326, | |
| 165413, | |
| 165435, | |
| 34241, | |
| 159880, | |
| 34306, | |
| 136578, | |
| 159949, | |
| 194994, | |
| 17770, | |
| 34344, | |
| 13896, | |
| 137378, | |
| 21495, | |
| 160666, | |
| 34430, | |
| 34673, | |
| 172280, | |
| 34798, | |
| 142375, | |
| 34737, | |
| 34778, | |
| 34831, | |
| 22113, | |
| 34412, | |
| 26710, | |
| 17935, | |
| 34885, | |
| 34886, | |
| 161248, | |
| 146873, | |
| 161252, | |
| 34910, | |
| 34972, | |
| 18011, | |
| 34996, | |
| 34997, | |
| 25537, | |
| 35013, | |
| 30583, | |
| 161551, | |
| 35207, | |
| 35210, | |
| 35238, | |
| 35241, | |
| 35239, | |
| 35260, | |
| 166437, | |
| 35303, | |
| 162084, | |
| 162493, | |
| 35484, | |
| 30611, | |
| 37374, | |
| 35472, | |
| 162393, | |
| 31465, | |
| 162618, | |
| 147343, | |
| 18195, | |
| 162616, | |
| 29052, | |
| 35596, | |
| 35615, | |
| 152624, | |
| 152933, | |
| 35647, | |
| 35660, | |
| 35661, | |
| 35497, | |
| 150138, | |
| 35728, | |
| 35739, | |
| 35503, | |
| 136927, | |
| 17941, | |
| 34895, | |
| 35995, | |
| 163156, | |
| 163215, | |
| 195028, | |
| 14117, | |
| 163155, | |
| 36054, | |
| 163224, | |
| 163261, | |
| 36114, | |
| 36099, | |
| 137488, | |
| 36059, | |
| 28764, | |
| 36113, | |
| 150729, | |
| 16080, | |
| 36215, | |
| 36265, | |
| 163842, | |
| 135188, | |
| 149898, | |
| 15228, | |
| 164284, | |
| 160012, | |
| 31463, | |
| 36525, | |
| 36534, | |
| 36547, | |
| 37588, | |
| 36633, | |
| 36653, | |
| 164709, | |
| 164882, | |
| 36773, | |
| 37635, | |
| 172703, | |
| 133712, | |
| 36787, | |
| 18730, | |
| 166366, | |
| 165181, | |
| 146875, | |
| 24312, | |
| 143970, | |
| 36857, | |
| 172052, | |
| 165564, | |
| 165121, | |
| 140069, | |
| 14720, | |
| 159447, | |
| 36919, | |
| 165180, | |
| 162494, | |
| 36961, | |
| 165228, | |
| 165387, | |
| 37032, | |
| 165651, | |
| 37060, | |
| 165606, | |
| 37038, | |
| 37117, | |
| 37223, | |
| 15088, | |
| 37289, | |
| 37316, | |
| 31916, | |
| 166195, | |
| 138889, | |
| 37390, | |
| 27807, | |
| 37441, | |
| 37474, | |
| 153017, | |
| 37561, | |
| 166598, | |
| 146587, | |
| 166668, | |
| 153051, | |
| 134449, | |
| 37676, | |
| 37739, | |
| 166625, | |
| 166891, | |
| 28815, | |
| 23235, | |
| 166626, | |
| 166629, | |
| 18789, | |
| 37444, | |
| 166892, | |
| 166969, | |
| 166911, | |
| 37747, | |
| 37979, | |
| 36540, | |
| 38277, | |
| 38310, | |
| 37926, | |
| 38304, | |
| 28662, | |
| 17081, | |
| 140922, | |
| 165592, | |
| 135804, | |
| 146990, | |
| 18911, | |
| 27676, | |
| 38523, | |
| 38550, | |
| 16748, | |
| 38563, | |
| 159445, | |
| 25050, | |
| 38582, | |
| 30965, | |
| 166624, | |
| 38589, | |
| 21452, | |
| 18849, | |
| 158904, | |
| 131700, | |
| 156688, | |
| 168111, | |
| 168165, | |
| 150225, | |
| 137493, | |
| 144138, | |
| 38705, | |
| 34370, | |
| 38710, | |
| 18959, | |
| 17725, | |
| 17797, | |
| 150249, | |
| 28789, | |
| 23361, | |
| 38683, | |
| 38748, | |
| 168405, | |
| 38743, | |
| 23370, | |
| 168427, | |
| 38751, | |
| 37925, | |
| 20688, | |
| 143543, | |
| 143548, | |
| 38793, | |
| 38815, | |
| 38833, | |
| 38846, | |
| 38848, | |
| 38866, | |
| 38880, | |
| 152684, | |
| 38894, | |
| 29724, | |
| 169011, | |
| 38911, | |
| 38901, | |
| 168989, | |
| 162170, | |
| 19153, | |
| 38964, | |
| 38963, | |
| 38987, | |
| 39014, | |
| 15118, | |
| 160117, | |
| 15697, | |
| 132656, | |
| 147804, | |
| 153350, | |
| 39114, | |
| 39095, | |
| 39112, | |
| 39111, | |
| 19199, | |
| 159015, | |
| 136915, | |
| 21936, | |
| 39137, | |
| 39142, | |
| 39148, | |
| 37752, | |
| 39225, | |
| 150057, | |
| 19314, | |
| 170071, | |
| 170245, | |
| 39413, | |
| 39436, | |
| 39483, | |
| 39440, | |
| 39512, | |
| 153381, | |
| 14020, | |
| 168113, | |
| 170965, | |
| 39648, | |
| 39650, | |
| 170757, | |
| 39668, | |
| 19470, | |
| 39700, | |
| 39725, | |
| 165376, | |
| 20532, | |
| 39732, | |
| 158120, | |
| 14531, | |
| 143485, | |
| 39760, | |
| 39744, | |
| 171326, | |
| 23109, | |
| 137315, | |
| 39822, | |
| 148043, | |
| 39938, | |
| 39935, | |
| 39948, | |
| 171624, | |
| 40404, | |
| 171959, | |
| 172434, | |
| 172459, | |
| 172257, | |
| 172323, | |
| 172511, | |
| 40318, | |
| 40323, | |
| 172340, | |
| 40462, | |
| 26760, | |
| 40388, | |
| 139611, | |
| 172435, | |
| 172576, | |
| 137531, | |
| 172595, | |
| 40249, | |
| 172217, | |
| 172724, | |
| 40592, | |
| 40597, | |
| 40606, | |
| 40610, | |
| 19764, | |
| 40618, | |
| 40623, | |
| 148324, | |
| 40641, | |
| 15200, | |
| 14821, | |
| 15645, | |
| 20274, | |
| 14270, | |
| 166955, | |
| 40706, | |
| 40712, | |
| 19350, | |
| 37924, | |
| 159138, | |
| 40727, | |
| 40726, | |
| 40761, | |
| 22175, | |
| 22154, | |
| 40773, | |
| 39352, | |
| 168075, | |
| 38898, | |
| 33919, | |
| 40802, | |
| 40809, | |
| 31452, | |
| 40846, | |
| 29206, | |
| 19390, | |
| 149877, | |
| 149947, | |
| 29047, | |
| 150008, | |
| 148296, | |
| 150097, | |
| 29598, | |
| 166874, | |
| 137466, | |
| 31135, | |
| 166270, | |
| 167478, | |
| 37737, | |
| 37875, | |
| 166468, | |
| 37612, | |
| 37761, | |
| 37835, | |
| 166252, | |
| 148665, | |
| 29207, | |
| 16107, | |
| 30578, | |
| 31299, | |
| 28880, | |
| 148595, | |
| 148472, | |
| 29054, | |
| 137199, | |
| 28835, | |
| 137406, | |
| 144793, | |
| 16071, | |
| 137349, | |
| 152623, | |
| 137208, | |
| 14114, | |
| 136955, | |
| 137273, | |
| 14049, | |
| 137076, | |
| 137425, | |
| 155467, | |
| 14115, | |
| 136896, | |
| 22363, | |
| 150053, | |
| 136190, | |
| 135848, | |
| 136134, | |
| 136374, | |
| 34051, | |
| 145062, | |
| 34051, | |
| 33877, | |
| 149908, | |
| 160101, | |
| 146993, | |
| 152924, | |
| 147195, | |
| 159826, | |
| 17652, | |
| 145134, | |
| 170397, | |
| 159526, | |
| 26617, | |
| 14131, | |
| 15381, | |
| 15847, | |
| 22636, | |
| 137506, | |
| 26640, | |
| 16471, | |
| 145215, | |
| 147681, | |
| 147595, | |
| 147727, | |
| 158753, | |
| 21707, | |
| 22174, | |
| 157361, | |
| 22162, | |
| 135135, | |
| 134056, | |
| 134669, | |
| 37830, | |
| 166675, | |
| 37788, | |
| 20216, | |
| 20779, | |
| 14361, | |
| 148534, | |
| 20156, | |
| 132197, | |
| 131967, | |
| 20299, | |
| 20362, | |
| 153169, | |
| 23144, | |
| 131499, | |
| 132043, | |
| 14745, | |
| 131850, | |
| 132116, | |
| 13365, | |
| 20265, | |
| 131776, | |
| 167603, | |
| 131701, | |
| 35546, | |
| 131596, | |
| 20120, | |
| 20685, | |
| 20749, | |
| 20386, | |
| 20227, | |
| 150030, | |
| 147082, | |
| 20290, | |
| 20526, | |
| 20588, | |
| 20609, | |
| 20428, | |
| 20453, | |
| 20568, | |
| 20732, | |
| 20825, | |
| 20827, | |
| 20829, | |
| 20830, | |
| 28278, | |
| 144789, | |
| 147001, | |
| 147135, | |
| 28018, | |
| 137348, | |
| 147081, | |
| 20904, | |
| 20931, | |
| 132576, | |
| 17629, | |
| 132259, | |
| 132242, | |
| 132241, | |
| 36218, | |
| 166556, | |
| 132878, | |
| 21081, | |
| 21156, | |
| 133235, | |
| 21217, | |
| 37742, | |
| 18042, | |
| 29068, | |
| 148364, | |
| 134176, | |
| 149932, | |
| 135396, | |
| 27089, | |
| 134685, | |
| 29817, | |
| 16094, | |
| 29849, | |
| 29716, | |
| 29782, | |
| 29592, | |
| 19342, | |
| 150204, | |
| 147597, | |
| 21456, | |
| 13700, | |
| 29199, | |
| 147657, | |
| 21940, | |
| 131909, | |
| 21709, | |
| 134086, | |
| 22301, | |
| 37469, | |
| 38644, | |
| 37734, | |
| 22493, | |
| 22413, | |
| 22399, | |
| 13886, | |
| 22731, | |
| 23193, | |
| 166470, | |
| 136954, | |
| 137071, | |
| 136976, | |
| 23084, | |
| 22968, | |
| 37519, | |
| 23166, | |
| 23247, | |
| 23058, | |
| 153926, | |
| 137715, | |
| 137313, | |
| 148117, | |
| 14069, | |
| 27909, | |
| 29763, | |
| 23073, | |
| 155267, | |
| 23169, | |
| 166871, | |
| 132115, | |
| 37856, | |
| 29836, | |
| 135939, | |
| 28933, | |
| 18802, | |
| 37896, | |
| 166395, | |
| 37821, | |
| 14240, | |
| 23582, | |
| 23710, | |
| 24158, | |
| 24136, | |
| 137622, | |
| 137596, | |
| 146158, | |
| 24269, | |
| 23375, | |
| 137475, | |
| 137476, | |
| 14081, | |
| 137376, | |
| 14045, | |
| 136958, | |
| 14035, | |
| 33066, | |
| 166471, | |
| 138682, | |
| 144498, | |
| 166312, | |
| 24332, | |
| 24334, | |
| 137511, | |
| 137131, | |
| 23147, | |
| 137019, | |
| 23364, | |
| 34324, | |
| 161277, | |
| 34912, | |
| 24702, | |
| 141408, | |
| 140843, | |
| 24539, | |
| 16056, | |
| 140719, | |
| 140734, | |
| 168072, | |
| 159603, | |
| 25024, | |
| 131134, | |
| 131142, | |
| 140827, | |
| 24985, | |
| 24984, | |
| 24693, | |
| 142491, | |
| 142599, | |
| 149204, | |
| 168269, | |
| 25713, | |
| 149093, | |
| 142186, | |
| 14889, | |
| 142114, | |
| 144464, | |
| 170218, | |
| 142968, | |
| 25399, | |
| 173147, | |
| 25782, | |
| 25393, | |
| 25553, | |
| 149987, | |
| 142695, | |
| 25252, | |
| 142497, | |
| 25659, | |
| 25963, | |
| 26994, | |
| 15348, | |
| 143502, | |
| 144045, | |
| 149897, | |
| 144043, | |
| 21773, | |
| 144096, | |
| 137433, | |
| 169023, | |
| 26318, | |
| 144009, | |
| 143795, | |
| 15072, | |
| 16784, | |
| 152964, | |
| 166690, | |
| 152975, | |
| 136956, | |
| 152923, | |
| 152613, | |
| 30958, | |
| 143619, | |
| 137258, | |
| 143924, | |
| 13412, | |
| 143887, | |
| 143746, | |
| 148169, | |
| 26254, | |
| 159012, | |
| 26219, | |
| 19347, | |
| 26160, | |
| 161904, | |
| 138731, | |
| 26211, | |
| 144082, | |
| 144097, | |
| 26142, | |
| 153714, | |
| 14545, | |
| 145466, | |
| 145340, | |
| 15257, | |
| 145314, | |
| 144382, | |
| 29904, | |
| 15254, | |
| 26511, | |
| 149034, | |
| 26806, | |
| 26654, | |
| 15300, | |
| 27326, | |
| 14435, | |
| 145365, | |
| 148615, | |
| 27187, | |
| 27218, | |
| 27337, | |
| 27397, | |
| 137490, | |
| 25873, | |
| 26776, | |
| 27212, | |
| 15319, | |
| 27258, | |
| 27479, | |
| 147392, | |
| 146586, | |
| 37792, | |
| 37618, | |
| 166890, | |
| 166603, | |
| 37513, | |
| 163870, | |
| 166364, | |
| 37991, | |
| 28069, | |
| 28427, | |
| 149996, | |
| 28007, | |
| 147327, | |
| 15759, | |
| 28164, | |
| 147516, | |
| 23101, | |
| 28170, | |
| 22599, | |
| 27940, | |
| 30786, | |
| 28987, | |
| 148250, | |
| 148086, | |
| 28913, | |
| 29264, | |
| 29319, | |
| 29332, | |
| 149391, | |
| 149285, | |
| 20857, | |
| 150180, | |
| 132587, | |
| 29818, | |
| 147192, | |
| 144991, | |
| 150090, | |
| 149783, | |
| 155617, | |
| 16134, | |
| 16049, | |
| 150239, | |
| 166947, | |
| 147253, | |
| 24743, | |
| 16115, | |
| 29900, | |
| 29756, | |
| 37767, | |
| 29751, | |
| 17567, | |
| 159210, | |
| 17745, | |
| 30083, | |
| 16227, | |
| 150745, | |
| 150790, | |
| 16216, | |
| 30037, | |
| 30323, | |
| 173510, | |
| 15129, | |
| 29800, | |
| 166604, | |
| 149931, | |
| 149902, | |
| 15099, | |
| 15821, | |
| 150094, | |
| 16127, | |
| 149957, | |
| 149747, | |
| 37370, | |
| 22322, | |
| 37698, | |
| 166627, | |
| 137316, | |
| 20703, | |
| 152097, | |
| 152039, | |
| 30584, | |
| 143922, | |
| 30478, | |
| 30479, | |
| 30587, | |
| 149143, | |
| 145281, | |
| 14942, | |
| 149744, | |
| 29752, | |
| 29851, | |
| 16063, | |
| 150202, | |
| 150215, | |
| 16584, | |
| 150166, | |
| 156078, | |
| 37639, | |
| 152961, | |
| 30750, | |
| 30861, | |
| 30856, | |
| 30930, | |
| 29648, | |
| 31065, | |
| 161601, | |
| 153315, | |
| 16654, | |
| 31131, | |
| 33942, | |
| 31141, | |
| 27181, | |
| 147194, | |
| 31290, | |
| 31220, | |
| 16750, | |
| 136934, | |
| 16690, | |
| 37429, | |
| 31217, | |
| 134476, | |
| 149900, | |
| 131737, | |
| 146874, | |
| 137070, | |
| 13719, | |
| 21867, | |
| 13680, | |
| 13994, | |
| 131540, | |
| 134157, | |
| 31458, | |
| 23129, | |
| 141045, | |
| 154287, | |
| 154268, | |
| 23053, | |
| 131675, | |
| 30960, | |
| 23082, | |
| 154566, | |
| 31486, | |
| 16889, | |
| 31837, | |
| 31853, | |
| 16913, | |
| 154547, | |
| 155324, | |
| 155302, | |
| 31949, | |
| 150009, | |
| 137136, | |
| 31886, | |
| 31868, | |
| 31918, | |
| 27314, | |
| 32220, | |
| 32263, | |
| 32211, | |
| 32590, | |
| 156257, | |
| 155996, | |
| 162632, | |
| 32151, | |
| 155266, | |
| 17002, | |
| 158581, | |
| 133398, | |
| 26582, | |
| 131150, | |
| 144847, | |
| 22468, | |
| 156690, | |
| 156664, | |
| 149858, | |
| 32733, | |
| 31527, | |
| 133164, | |
| 154345, | |
| 154947, | |
| 31500, | |
| 155150, | |
| 39398, | |
| 34373, | |
| 39523, | |
| 27164, | |
| 144447, | |
| 14818, | |
| 150007, | |
| 157101, | |
| 39455, | |
| 157088, | |
| 33920, | |
| 160039, | |
| 158929, | |
| 17642, | |
| 33079, | |
| 17410, | |
| 32966, | |
| 33033, | |
| 33090, | |
| 157620, | |
| 39107, | |
| 158274, | |
| 33378, | |
| 33381, | |
| 158289, | |
| 33875, | |
| 159143, | |
| 34320, | |
| 160283, | |
| 23174, | |
| 16767, | |
| 137280, | |
| 23339, | |
| 137377, | |
| 23268, | |
| 137432, | |
| 34464, | |
| 195004, | |
| 146831, | |
| 34861, | |
| 160802, | |
| 23042, | |
| 34926, | |
| 20293, | |
| 34951, | |
| 35007, | |
| 35046, | |
| 35173, | |
| 35149, | |
| 153219, | |
| 35156, | |
| 161669, | |
| 161668, | |
| 166901, | |
| 166873, | |
| 166812, | |
| 166393, | |
| 16045, | |
| 33955, | |
| 18165, | |
| 18127, | |
| 14322, | |
| 35389, | |
| 35356, | |
| 169032, | |
| 24397, | |
| 37419, | |
| 148100, | |
| 26068, | |
| 28969, | |
| 28868, | |
| 137285, | |
| 40301, | |
| 35999, | |
| 36073, | |
| 163292, | |
| 22938, | |
| 30659, | |
| 23024, | |
| 17262, | |
| 14036, | |
| 36394, | |
| 36519, | |
| 150537, | |
| 36656, | |
| 36682, | |
| 17140, | |
| 27736, | |
| 28603, | |
| 140065, | |
| 18587, | |
| 28537, | |
| 28299, | |
| 137178, | |
| 39913, | |
| 14005, | |
| 149807, | |
| 37051, | |
| 37015, | |
| 21873, | |
| 18694, | |
| 37307, | |
| 37892, | |
| 166475, | |
| 16482, | |
| 166652, | |
| 37927, | |
| 166941, | |
| 166971, | |
| 34021, | |
| 35371, | |
| 38297, | |
| 38311, | |
| 38295, | |
| 38294, | |
| 167220, | |
| 29765, | |
| 16066, | |
| 149759, | |
| 150082, | |
| 148458, | |
| 16103, | |
| 143909, | |
| 38543, | |
| 167655, | |
| 167526, | |
| 167525, | |
| 16076, | |
| 149997, | |
| 150136, | |
| 147438, | |
| 29714, | |
| 29803, | |
| 16124, | |
| 38721, | |
| 168112, | |
| 26695, | |
| 18973, | |
| 168083, | |
| 153567, | |
| 38749, | |
| 37736, | |
| 166281, | |
| 166950, | |
| 166703, | |
| 156606, | |
| 37562, | |
| 23313, | |
| 35689, | |
| 18748, | |
| 29689, | |
| 147995, | |
| 38811, | |
| 38769, | |
| 39224, | |
| 134950, | |
| 24001, | |
| 166853, | |
| 150194, | |
| 38943, | |
| 169178, | |
| 37622, | |
| 169431, | |
| 37349, | |
| 17600, | |
| 166736, | |
| 150119, | |
| 166756, | |
| 39132, | |
| 166469, | |
| 16128, | |
| 37418, | |
| 18725, | |
| 33812, | |
| 39227, | |
| 39245, | |
| 162566, | |
| 15869, | |
| 39323, | |
| 19311, | |
| 39338, | |
| 39516, | |
| 166757, | |
| 153800, | |
| 27279, | |
| 39457, | |
| 23294, | |
| 39471, | |
| 170225, | |
| 19344, | |
| 170312, | |
| 39356, | |
| 19389, | |
| 19351, | |
| 37757, | |
| 22642, | |
| 135938, | |
| 22562, | |
| 149944, | |
| 136424, | |
| 30788, | |
| 141087, | |
| 146872, | |
| 26821, | |
| 15741, | |
| 37976, | |
| 14631, | |
| 24912, | |
| 141185, | |
| 141675, | |
| 24839, | |
| 40015, | |
| 40019, | |
| 40059, | |
| 39989, | |
| 39952, | |
| 39807, | |
| 39887, | |
| 171565, | |
| 39839, | |
| 172533, | |
| 172286, | |
| 40225, | |
| 19630, | |
| 147716, | |
| 40472, | |
| 19632, | |
| 40204, | |
| 172468, | |
| 172269, | |
| 172275, | |
| 170287, | |
| 40357, | |
| 33981, | |
| 159250, | |
| 159711, | |
| 158594, | |
| 34300, | |
| 17715, | |
| 159140, | |
| 159364, | |
| 159216, | |
| 33824, | |
| 34286, | |
| 159232, | |
| 145367, | |
| 155748, | |
| 31202, | |
| 144796, | |
| 144960, | |
| 18733, | |
| 149982, | |
| 15714, | |
| 37851, | |
| 37566, | |
| 37704, | |
| 131775, | |
| 30905, | |
| 37495, | |
| 37965, | |
| 20452, | |
| 13376, | |
| 36964, | |
| 152925, | |
| 30781, | |
| 30804, | |
| 30902, | |
| 30795, | |
| 137047, | |
| 143817, | |
| 149825, | |
| 13978, | |
| 20338, | |
| 28634, | |
| 28633, | |
| 28702, | |
| 28702, | |
| 21524, | |
| 147893, | |
| 22459, | |
| 22771, | |
| 22410, | |
| 40214, | |
| 22487, | |
| 28980, | |
| 13487, | |
| 147884, | |
| 29163, | |
| 158784, | |
| 151447, | |
| 23336, | |
| 137141, | |
| 166473, | |
| 24844, | |
| 23246, | |
| 23051, | |
| 17084, | |
| 148616, | |
| 14124, | |
| 19323, | |
| 166396, | |
| 37819, | |
| 37816, | |
| 137430, | |
| 134941, | |
| 33906, | |
| 158912, | |
| 136211, | |
| 148218, | |
| 142374, | |
| 148417, | |
| 22932, | |
| 146871, | |
| 157505, | |
| 32168, | |
| 155995, | |
| 155812, | |
| 149945, | |
| 149899, | |
| 166394, | |
| 37605, | |
| 29666, | |
| 16105, | |
| 29876, | |
| 166755, | |
| 137375, | |
| 16097, | |
| 150195, | |
| 27352, | |
| 29683, | |
| 29691, | |
| 16086, | |
| 150078, | |
| 150164, | |
| 137177, | |
| 150118, | |
| 132007, | |
| 136228, | |
| 149989, | |
| 29768, | |
| 149782, | |
| 28837, | |
| 149878, | |
| 37508, | |
| 29670, | |
| 37727, | |
| 132350, | |
| 37681, | |
| 166606, | |
| 166422, | |
| 37766, | |
| 166887, | |
| 153045, | |
| 18741, | |
| 166530, | |
| 29035, | |
| 149827, | |
| 134399, | |
| 22180, | |
| 132634, | |
| 134123, | |
| 134328, | |
| 21762, | |
| 31172, | |
| 137210, | |
| 32254, | |
| 136898, | |
| 150096, | |
| 137298, | |
| 17710, | |
| 37889, | |
| 14090, | |
| 166592, | |
| 149933, | |
| 22960, | |
| 137407, | |
| 137347, | |
| 160900, | |
| 23201, | |
| 14050, | |
| 146779, | |
| 14000, | |
| 37471, | |
| 23161, | |
| 166529, | |
| 137314, | |
| 37748, | |
| 15565, | |
| 133812, | |
| 19094, | |
| 14730, | |
| 20724, | |
| 15721, | |
| 15692, | |
| 136092, | |
| 29045, | |
| 17147, | |
| 164376, | |
| 28175, | |
| 168164, | |
| 17643, | |
| 27991, | |
| 163407, | |
| 28775, | |
| 27823, | |
| 15574, | |
| 147437, | |
| 146989, | |
| 28162, | |
| 28428, | |
| 15727, | |
| 132085, | |
| 30033, | |
| 14012, | |
| 13512, | |
| 18048, | |
| 16090, | |
| 18545, | |
| 22980, | |
| 37486, | |
| 18750, | |
| 36673, | |
| 166940, | |
| 158656, | |
| 22546, | |
| 22472, | |
| 14038, | |
| 136274, | |
| 28926, | |
| 148322, | |
| 150129, | |
| 143331, | |
| 135856, | |
| 140221, | |
| 26809, | |
| 26983, | |
| 136088, | |
| 144613, | |
| 162804, | |
| 145119, | |
| 166531, | |
| 145366, | |
| 144378, | |
| 150687, | |
| 27162, | |
| 145069, | |
| 158903, | |
| 33854, | |
| 17631, | |
| 17614, | |
| 159014, | |
| 159057, | |
| 158850, | |
| 159710, | |
| 28439, | |
| 160009, | |
| 33597, | |
| 137018, | |
| 33773, | |
| 158848, | |
| 159827, | |
| 137179, | |
| 22921, | |
| 23170, | |
| 137139, | |
| 23137, | |
| 23153, | |
| 137477, | |
| 147964, | |
| 14125, | |
| 23023, | |
| 137020, | |
| 14023, | |
| 29070, | |
| 37776, | |
| 26266, | |
| 148133, | |
| 23150, | |
| 23083, | |
| 148115, | |
| 27179, | |
| 147193, | |
| 161590, | |
| 148571, | |
| 148170, | |
| 28957, | |
| 148057, | |
| 166369, | |
| 20400, | |
| 159016, | |
| 23746, | |
| 148686, | |
| 163405, | |
| 148413, | |
| 27148, | |
| 148054, | |
| 135940, | |
| 28838, | |
| 28979, | |
| 148457, | |
| 15781, | |
| 27871, | |
| 194597, | |
| 150095, | |
| 32357, | |
| 23019, | |
| 23855, | |
| 15859, | |
| 24412, | |
| 150109, | |
| 137183, | |
| 32164, | |
| 33830, | |
| 21637, | |
| 146170, | |
| 144128, | |
| 131604, | |
| 22398, | |
| 133333, | |
| 132633, | |
| 16357, | |
| 139166, | |
| 172726, | |
| 28675, | |
| 168283, | |
| 23920, | |
| 29583, | |
| 31955, | |
| 166489, | |
| 168992, | |
| 20424, | |
| 32743, | |
| 29389, | |
| 29456, | |
| 162548, | |
| 29496, | |
| 29497, | |
| 153334, | |
| 29505, | |
| 29512, | |
| 16041, | |
| 162584, | |
| 36972, | |
| 29173, | |
| 149746, | |
| 29665, | |
| 33270, | |
| 16074, | |
| 30476, | |
| 16081, | |
| 27810, | |
| 22269, | |
| 29721, | |
| 29726, | |
| 29727, | |
| 16098, | |
| 16112, | |
| 16116, | |
| 16122, | |
| 29907, | |
| 16142, | |
| 16211, | |
| 30018, | |
| 30061, | |
| 30066, | |
| 30093, | |
| 16252, | |
| 30152, | |
| 30172, | |
| 16320, | |
| 30285, | |
| 16343, | |
| 30324, | |
| 16348, | |
| 30330, | |
| 151388, | |
| 29064, | |
| 22051, | |
| 35200, | |
| 22633, | |
| 16413, | |
| 30531, | |
| 16441, | |
| 26465, | |
| 16453, | |
| 13787, | |
| 30616, | |
| 16490, | |
| 16495, | |
| 23646, | |
| 30654, | |
| 30667, | |
| 22770, | |
| 30744, | |
| 28857, | |
| 30748, | |
| 16552, | |
| 30777, | |
| 30791, | |
| 30801, | |
| 30822, | |
| 33864, | |
| 152885, | |
| 31027, | |
| 26627, | |
| 31026, | |
| 16643, | |
| 16649, | |
| 31121, | |
| 31129, | |
| 36795, | |
| 31238, | |
| 36796, | |
| 16743, | |
| 31377, | |
| 16818, | |
| 31420, | |
| 33401, | |
| 16836, | |
| 31439, | |
| 31451, | |
| 16847, | |
| 20001, | |
| 31586, | |
| 31596, | |
| 31611, | |
| 31762, | |
| 31771, | |
| 16992, | |
| 17018, | |
| 31867, | |
| 31900, | |
| 17036, | |
| 31928, | |
| 17044, | |
| 31981, | |
| 36755, | |
| 28864, | |
| 134351, | |
| 32207, | |
| 32212, | |
| 32208, | |
| 32253, | |
| 32686, | |
| 32692, | |
| 29343, | |
| 17303, | |
| 32800, | |
| 32805, | |
| 31545, | |
| 32814, | |
| 32817, | |
| 32852, | |
| 15820, | |
| 22452, | |
| 28832, | |
| 32951, | |
| 33001, | |
| 17389, | |
| 33036, | |
| 29482, | |
| 33038, | |
| 33042, | |
| 30048, | |
| 33044, | |
| 17409, | |
| 15161, | |
| 33110, | |
| 33113, | |
| 33114, | |
| 17427, | |
| 22586, | |
| 33148, | |
| 33156, | |
| 17445, | |
| 33171, | |
| 17453, | |
| 33189, | |
| 22511, | |
| 33217, | |
| 33252, | |
| 33364, | |
| 17551, | |
| 33446, | |
| 33398, | |
| 33482, | |
| 33496, | |
| 33535, | |
| 17584, | |
| 33623, | |
| 38505, | |
| 27018, | |
| 33797, | |
| 28917, | |
| 33892, | |
| 24803, | |
| 33928, | |
| 17668, | |
| 33982, | |
| 34017, | |
| 34040, | |
| 34064, | |
| 34104, | |
| 34130, | |
| 17723, | |
| 34159, | |
| 34160, | |
| 34272, | |
| 17783, | |
| 34418, | |
| 34450, | |
| 34482, | |
| 34543, | |
| 38469, | |
| 34699, | |
| 17926, | |
| 17943, | |
| 34990, | |
| 35071, | |
| 35108, | |
| 35143, | |
| 35217, | |
| 162151, | |
| 35369, | |
| 35384, | |
| 35476, | |
| 35508, | |
| 35921, | |
| 36052, | |
| 36082, | |
| 36124, | |
| 18328, | |
| 22623, | |
| 36291, | |
| 18413, | |
| 20206, | |
| 36410, | |
| 21976, | |
| 22356, | |
| 36465, | |
| 22005, | |
| 36528, | |
| 18487, | |
| 36558, | |
| 36578, | |
| 36580, | |
| 36589, | |
| 36594, | |
| 36791, | |
| 36801, | |
| 36810, | |
| 36812, | |
| 36915, | |
| 39364, | |
| 18605, | |
| 39136, | |
| 37395, | |
| 18718, | |
| 37416, | |
| 37464, | |
| 37483, | |
| 37553, | |
| 37550, | |
| 37567, | |
| 37603, | |
| 37611, | |
| 37619, | |
| 37620, | |
| 37629, | |
| 37699, | |
| 37764, | |
| 37805, | |
| 18757, | |
| 18769, | |
| 40639, | |
| 37911, | |
| 21249, | |
| 37917, | |
| 37933, | |
| 37950, | |
| 18794, | |
| 37972, | |
| 38009, | |
| 38189, | |
| 38306, | |
| 18855, | |
| 38388, | |
| 38451, | |
| 18917, | |
| 26528, | |
| 18980, | |
| 38720, | |
| 18997, | |
| 38834, | |
| 38850, | |
| 22100, | |
| 19172, | |
| 24808, | |
| 39097, | |
| 19225, | |
| 39153, | |
| 22596, | |
| 39182, | |
| 39193, | |
| 20916, | |
| 39196, | |
| 39223, | |
| 39234, | |
| 39261, | |
| 39266, | |
| 19312, | |
| 39365, | |
| 19357, | |
| 39484, | |
| 39695, | |
| 31363, | |
| 39785, | |
| 39809, | |
| 39901, | |
| 39921, | |
| 39924, | |
| 19565, | |
| 39968, | |
| 14191, | |
| 138178, | |
| 40265, | |
| 39994, | |
| 40702, | |
| 22096, | |
| 40339, | |
| 40381, | |
| 40384, | |
| 40444, | |
| 38134, | |
| 36790, | |
| 40571, | |
| 40620, | |
| 40625, | |
| 40637, | |
| 40646, | |
| 38108, | |
| 40674, | |
| 40689, | |
| 40696, | |
| 31432, | |
| 40772, | |
| 131220, | |
| 131767, | |
| 132000, | |
| 26906, | |
| 38083, | |
| 22956, | |
| 132311, | |
| 22592, | |
| 38081, | |
| 14265, | |
| 132565, | |
| 132629, | |
| 132726, | |
| 136890, | |
| 22359, | |
| 29043, | |
| 133826, | |
| 133837, | |
| 134079, | |
| 21610, | |
| 194619, | |
| 134091, | |
| 21662, | |
| 134139, | |
| 134203, | |
| 134227, | |
| 134245, | |
| 134268, | |
| 24807, | |
| 134285, | |
| 22138, | |
| 134325, | |
| 134365, | |
| 134381, | |
| 134511, | |
| 134578, | |
| 134600, | |
| 26965, | |
| 39983, | |
| 34725, | |
| 134660, | |
| 134670, | |
| 134871, | |
| 135056, | |
| 134957, | |
| 134771, | |
| 23584, | |
| 135100, | |
| 24075, | |
| 135260, | |
| 135247, | |
| 135286, | |
| 26398, | |
| 135291, | |
| 135304, | |
| 135318, | |
| 13895, | |
| 135359, | |
| 135379, | |
| 135471, | |
| 135483, | |
| 21348, | |
| 33965, | |
| 135907, | |
| 136053, | |
| 135990, | |
| 35713, | |
| 136567, | |
| 136729, | |
| 137155, | |
| 137159, | |
| 20088, | |
| 28859, | |
| 137261, | |
| 137578, | |
| 137773, | |
| 137797, | |
| 138282, | |
| 138352, | |
| 138412, | |
| 138952, | |
| 25283, | |
| 138965, | |
| 139029, | |
| 29080, | |
| 26709, | |
| 139333, | |
| 27113, | |
| 14024, | |
| 139900, | |
| 140247, | |
| 140282, | |
| 141098, | |
| 141425, | |
| 141647, | |
| 33533, | |
| 141671, | |
| 141715, | |
| 142037, | |
| 35237, | |
| 142056, | |
| 36768, | |
| 142094, | |
| 38840, | |
| 142143, | |
| 38983, | |
| 39613, | |
| 142412, | |
| null, | |
| 142472, | |
| 142519, | |
| 154600, | |
| 142600, | |
| 142610, | |
| 142775, | |
| 142741, | |
| 142914, | |
| 143220, | |
| 143308, | |
| 143411, | |
| 143462, | |
| 144159, | |
| 144350, | |
| 24497, | |
| 26184, | |
| 26303, | |
| 162425, | |
| 144743, | |
| 144883, | |
| 29185, | |
| 149946, | |
| 30679, | |
| 144922, | |
| 145174, | |
| 32391, | |
| 131910, | |
| 22709, | |
| 26382, | |
| 26904, | |
| 146087, | |
| 161367, | |
| 155618, | |
| 146961, | |
| 147129, | |
| 161278, | |
| 139418, | |
| 18640, | |
| 19128, | |
| 147737, | |
| 166554, | |
| 148206, | |
| 148237, | |
| 147515, | |
| 148276, | |
| 148374, | |
| 150085, | |
| 132554, | |
| 20946, | |
| 132625, | |
| 22943, | |
| 138920, | |
| 15294, | |
| 146687, | |
| 148484, | |
| 148694, | |
| 22408, | |
| 149108, | |
| 14747, | |
| 149295, | |
| 165352, | |
| 170441, | |
| 14178, | |
| 139715, | |
| 35678, | |
| 166734, | |
| 39382, | |
| 149522, | |
| 149755, | |
| 150037, | |
| 29193, | |
| 150208, | |
| 134264, | |
| 22885, | |
| 151205, | |
| 151430, | |
| 132985, | |
| 36570, | |
| 151596, | |
| 21135, | |
| 22335, | |
| 29041, | |
| 152217, | |
| 152601, | |
| 147274, | |
| 150183, | |
| 21948, | |
| 152646, | |
| 152686, | |
| 158546, | |
| 37332, | |
| 13427, | |
| 152895, | |
| 161330, | |
| 152926, | |
| 18200, | |
| 152930, | |
| 152934, | |
| 153543, | |
| 149823, | |
| 153693, | |
| 20582, | |
| 13563, | |
| 144332, | |
| 24798, | |
| 153859, | |
| 18300, | |
| 166216, | |
| 154286, | |
| 154505, | |
| 154630, | |
| 138640, | |
| 22433, | |
| 29009, | |
| 28598, | |
| 155906, | |
| 162834, | |
| 36950, | |
| 156082, | |
| 151450, | |
| 35682, | |
| 156674, | |
| 156746, | |
| 23899, | |
| 158711, | |
| 36662, | |
| 156804, | |
| 137500, | |
| 35562, | |
| 150006, | |
| 156808, | |
| 147439, | |
| 156946, | |
| 19392, | |
| 157119, | |
| 157365, | |
| 141083, | |
| 37989, | |
| 153569, | |
| 24981, | |
| 23079, | |
| 194765, | |
| 20411, | |
| 22201, | |
| 148769, | |
| 157436, | |
| 20074, | |
| 149812, | |
| 38486, | |
| 28047, | |
| 158909, | |
| 13848, | |
| 35191, | |
| 157593, | |
| 157806, | |
| 156689, | |
| 157790, | |
| 29151, | |
| 157895, | |
| 31554, | |
| 168128, | |
| 133649, | |
| 157990, | |
| 37124, | |
| 158009, | |
| 31301, | |
| 40432, | |
| 158202, | |
| 39462, | |
| 158253, | |
| 13919, | |
| 156777, | |
| 131105, | |
| 31107, | |
| 158260, | |
| 158555, | |
| 23852, | |
| 144665, | |
| 33743, | |
| 158621, | |
| 18128, | |
| 158884, | |
| 30011, | |
| 34917, | |
| 159150, | |
| 22710, | |
| 14108, | |
| 140685, | |
| 159819, | |
| 160205, | |
| 15444, | |
| 160384, | |
| 160389, | |
| 37505, | |
| 139642, | |
| 160395, | |
| 37680, | |
| 160486, | |
| 149968, | |
| 27705, | |
| 38047, | |
| 160848, | |
| 134904, | |
| 34855, | |
| 35061, | |
| 141606, | |
| 164979, | |
| 137137, | |
| 28344, | |
| 150058, | |
| 137248, | |
| 14756, | |
| 14009, | |
| 23568, | |
| 31203, | |
| 17727, | |
| 26294, | |
| 171181, | |
| 170148, | |
| 35139, | |
| 161740, | |
| 161880, | |
| 22230, | |
| 16607, | |
| 136714, | |
| 14753, | |
| 145199, | |
| 164072, | |
| 136133, | |
| 29101, | |
| 33638, | |
| 162269, | |
| 168360, | |
| 23143, | |
| 19639, | |
| 159919, | |
| 166315, | |
| 162301, | |
| 162314, | |
| 162571, | |
| 163174, | |
| 147834, | |
| 31555, | |
| 31102, | |
| 163849, | |
| 28597, | |
| 172767, | |
| 27139, | |
| 164632, | |
| 21410, | |
| 159239, | |
| 37823, | |
| 26678, | |
| 38749, | |
| 164207, | |
| 163875, | |
| 158133, | |
| 136173, | |
| 143919, | |
| 163912, | |
| 23941, | |
| 166960, | |
| 163971, | |
| 22293, | |
| 38947, | |
| 166217, | |
| 23979, | |
| 149896, | |
| 26046, | |
| 27093, | |
| 21458, | |
| 150181, | |
| 147329, | |
| 15377, | |
| 26422, | |
| 163984, | |
| 164084, | |
| 164142, | |
| 139169, | |
| 164175, | |
| 164233, | |
| 164271, | |
| 164378, | |
| 164614, | |
| 164655, | |
| 164746, | |
| 13770, | |
| 164968, | |
| 165546, | |
| 18682, | |
| 25574, | |
| 166230, | |
| 30728, | |
| 37461, | |
| 166328, | |
| 17394, | |
| 166375, | |
| 17375, | |
| 166376, | |
| 166726, | |
| 166868, | |
| 23032, | |
| 166921, | |
| 36619, | |
| 167877, | |
| 168172, | |
| 31569, | |
| 168208, | |
| 168252, | |
| 15863, | |
| 168286, | |
| 150218, | |
| 36816, | |
| 29327, | |
| 22155, | |
| 169191, | |
| 169449, | |
| 169392, | |
| 169400, | |
| 169778, | |
| 170193, | |
| 170313, | |
| 170346, | |
| 170435, | |
| 170536, | |
| 170766, | |
| 171354, | |
| 171419, | |
| 32415, | |
| 171768, | |
| 171811, | |
| 19620, | |
| 38215, | |
| 172691, | |
| 29090, | |
| 172799, | |
| 19857, | |
| 36882, | |
| 173515, | |
| 19868, | |
| 134300, | |
| 36798, | |
| 21953, | |
| 36794, | |
| 140464, | |
| 36793, | |
| 150163, | |
| 17673, | |
| 32383, | |
| 28502, | |
| 27313, | |
| 20202, | |
| 13540, | |
| 166700, | |
| 161949, | |
| 14138, | |
| 36480, | |
| 137205, | |
| 163876, | |
| 166764, | |
| 166809, | |
| 162366, | |
| 157359, | |
| 15851, | |
| 161365, | |
| 146615, | |
| 153141, | |
| 153942, | |
| 20122, | |
| 155265, | |
| 156248, | |
| 22207, | |
| 134765, | |
| 36366, | |
| 23405, | |
| 147080, | |
| 150686, | |
| 25566, | |
| 25296, | |
| 137206, | |
| 137339, | |
| 25904, | |
| 22061, | |
| 154698, | |
| 21530, | |
| 152337, | |
| 15814, | |
| 171416, | |
| 19581, | |
| 22050, | |
| 22046, | |
| 32585, | |
| 155352, | |
| 22901, | |
| 146752, | |
| 34672, | |
| 19996, | |
| 135146, | |
| 134473, | |
| 145082, | |
| 33047, | |
| 40286, | |
| 36120, | |
| 30267, | |
| 40005, | |
| 30286, | |
| 30649, | |
| 37701, | |
| 21554, | |
| 33096, | |
| 33527, | |
| 22053, | |
| 33074, | |
| 33816, | |
| 32957, | |
| 21994, | |
| 31074, | |
| 22083, | |
| 21526, | |
| 134813, | |
| 13774, | |
| 22021, | |
| 22001, | |
| 26353, | |
| 164578, | |
| 13869, | |
| 30004, | |
| 22000, | |
| 21946, | |
| 21655, | |
| 21874, | |
| 134209, | |
| 134294, | |
| 24272, | |
| 151880, | |
| 134774, | |
| 142434, | |
| 134818, | |
| 40619, | |
| 32090, | |
| 21982, | |
| 135285, | |
| 25245, | |
| 38765, | |
| 21652, | |
| 36045, | |
| 29174, | |
| 37238, | |
| 25596, | |
| 25529, | |
| 25598, | |
| 21865, | |
| 142147, | |
| 40050, | |
| 143027, | |
| 20890, | |
| 13535, | |
| 134567, | |
| 20903, | |
| 21581, | |
| 21790, | |
| 21779, | |
| 30310, | |
| 36397, | |
| 157834, | |
| 30129, | |
| 32950, | |
| 34820, | |
| 34694, | |
| 35015, | |
| 33206, | |
| 33820, | |
| 135361, | |
| 17644, | |
| 29444, | |
| 149254, | |
| 23440, | |
| 33547, | |
| 157843, | |
| 22139, | |
| 141044, | |
| 163119, | |
| 147875, | |
| 163187, | |
| 159440, | |
| 160438, | |
| 37232, | |
| 135641, | |
| 37384, | |
| 146684, | |
| 173737, | |
| 134828, | |
| 134905, | |
| 29286, | |
| 138402, | |
| 18254, | |
| 151490, | |
| 163833, | |
| 135147, | |
| 16634, | |
| 40029, | |
| 25887, | |
| 142752, | |
| 18675, | |
| 149472, | |
| 171388, | |
| 135148, | |
| 134666, | |
| 24674, | |
| 161187, | |
| 135149, | |
| null, | |
| 155720, | |
| 135559, | |
| 29091, | |
| 32398, | |
| 40272, | |
| 19994, | |
| 19972, | |
| 13687, | |
| 23309, | |
| 27826, | |
| 21351, | |
| 13996, | |
| 14812, | |
| 21373, | |
| 13989, | |
| 149016, | |
| 22682, | |
| 150382, | |
| 33325, | |
| 21579, | |
| 22442, | |
| 154261, | |
| 133497, | |
| null, | |
| 14930, | |
| 140389, | |
| 29556, | |
| 171692, | |
| 19721, | |
| 39917, | |
| 146686, | |
| 171824, | |
| 19547, | |
| 151465, | |
| 169374, | |
| 171998, | |
| 33884, | |
| 146870, | |
| 160434, | |
| 157619, | |
| 145184, | |
| 25390, | |
| 32037, | |
| 147191, | |
| 146988, | |
| 14890, | |
| 36872, | |
| 21196, | |
| 15988, | |
| 13946, | |
| 17897, | |
| 132238, | |
| 30272, | |
| 23280, | |
| 134838, | |
| 30842, | |
| 163630, | |
| 22695, | |
| 16575, | |
| 22140, | |
| 39819, | |
| 23924, | |
| 30292, | |
| 173108, | |
| 40581, | |
| 19681, | |
| 30201, | |
| 14331, | |
| 24857, | |
| 143578, | |
| 148466, | |
| null, | |
| 22109, | |
| 135849, | |
| 22439, | |
| 149859, | |
| 171526, | |
| 21044, | |
| 159918, | |
| 13741, | |
| 27722, | |
| 40316, | |
| 31830, | |
| 39737, | |
| 22494, | |
| 137068, | |
| 23635, | |
| 25811, | |
| 169168, | |
| 156469, | |
| 160100, | |
| 34477, | |
| 134440, | |
| 159010, | |
| 150242, | |
| 134513, | |
| null, | |
| 20990, | |
| 139023, | |
| 23950, | |
| 38659, | |
| 138705, | |
| 40577, | |
| 36940, | |
| 31519, | |
| 39682, | |
| 23761, | |
| 31651, | |
| 25192, | |
| 25397, | |
| 39679, | |
| 31695, | |
| 39722, | |
| 31870, | |
| 39726, | |
| 31810, | |
| 31878, | |
| 39957, | |
| 31740, | |
| 39689, | |
| 40727, | |
| 39963, | |
| 149822, | |
| 40794, | |
| 21875, | |
| 23491, | |
| 20477, | |
| 40600, | |
| 20466, | |
| 21088, | |
| 15878, | |
| 21201, | |
| 22375, | |
| 20566, | |
| 22967, | |
| 24082, | |
| 38856, | |
| 40363, | |
| 36700, | |
| 21609, | |
| 38836, | |
| 39232, | |
| 38842, | |
| 21292, | |
| 24880, | |
| 26924, | |
| 21466, | |
| 39946, | |
| 40194, | |
| 19515, | |
| 38465, | |
| 27008, | |
| 20646, | |
| 30022, | |
| 137069, | |
| 39386, | |
| 21107, | |
| null, | |
| 37209, | |
| 38529, | |
| 37212, | |
| null, | |
| 37201, | |
| 167575, | |
| 25471, | |
| 159011, | |
| 27338, | |
| 22033, | |
| 37262, | |
| 30074, | |
| 25221, | |
| 132092, | |
| 29519, | |
| 31856, | |
| 154657, | |
| 146685, | |
| null, | |
| 149785, | |
| 30422, | |
| 39837, | |
| 20010, | |
| 134356, | |
| 33726, | |
| 34882, | |
| null, | |
| 23626, | |
| 27072, | |
| 20717, | |
| 22394, | |
| 21023, | |
| 24053, | |
| 20174, | |
| 27697, | |
| 131570, | |
| 20281, | |
| 21660, | |
| 21722, | |
| 21146, | |
| 36226, | |
| 13822, | |
| 24332, | |
| 13811, | |
| null, | |
| 27474, | |
| 37244, | |
| 40869, | |
| 39831, | |
| 38958, | |
| 39092, | |
| 39610, | |
| 40616, | |
| 40580, | |
| 29050, | |
| 31508, | |
| null, | |
| 27642, | |
| 34840, | |
| 32632, | |
| null, | |
| 22048, | |
| 173642, | |
| 36471, | |
| 40787, | |
| null, | |
| 36308, | |
| 36431, | |
| 40476, | |
| 36353, | |
| 25218, | |
| 164733, | |
| 36392, | |
| 36469, | |
| 31443, | |
| 150135, | |
| 31294, | |
| 30936, | |
| 27882, | |
| 35431, | |
| 30215, | |
| 166490, | |
| 40742, | |
| 27854, | |
| 34774, | |
| 30147, | |
| 172722, | |
| 30803, | |
| 194624, | |
| 36108, | |
| 29410, | |
| 29553, | |
| 35629, | |
| 29442, | |
| 29937, | |
| 36075, | |
| 150203, | |
| 34351, | |
| 24506, | |
| 34976, | |
| 17591, | |
| null, | |
| 137275, | |
| 159237, | |
| null, | |
| 35454, | |
| 140571, | |
| null, | |
| 24829, | |
| 30311, | |
| 39639, | |
| 40260, | |
| 37742, | |
| 39823, | |
| 34805, | |
| null, | |
| 34831, | |
| 36087, | |
| 29484, | |
| 38689, | |
| 39856, | |
| 13782, | |
| 29362, | |
| 19463, | |
| 31825, | |
| 39242, | |
| 155993, | |
| 24921, | |
| 19460, | |
| 40598, | |
| 24957, | |
| null, | |
| 22367, | |
| 24943, | |
| 25254, | |
| 25145, | |
| 25294, | |
| 14940, | |
| 25058, | |
| 21418, | |
| 144373, | |
| 25444, | |
| 26626, | |
| 13778, | |
| 23895, | |
| 166850, | |
| 36826, | |
| 167481, | |
| null, | |
| 20697, | |
| 138566, | |
| 30982, | |
| 21298, | |
| 38456, | |
| 134971, | |
| 16485, | |
| null, | |
| 30718, | |
| null, | |
| 31938, | |
| 155418, | |
| 31962, | |
| 31277, | |
| 32870, | |
| 32867, | |
| 32077, | |
| 29957, | |
| 29938, | |
| 35220, | |
| 33306, | |
| 26380, | |
| 32866, | |
| 160902, | |
| 32859, | |
| 29936, | |
| 33027, | |
| 30500, | |
| 35209, | |
| 157644, | |
| 30035, | |
| 159441, | |
| 34729, | |
| 34766, | |
| 33224, | |
| 34700, | |
| 35401, | |
| 36013, | |
| 35651, | |
| 30507, | |
| 29944, | |
| 34010, | |
| 13877, | |
| 27058, | |
| 36262, | |
| null, | |
| 35241, | |
| 29800, | |
| 28089, | |
| 34753, | |
| 147473, | |
| 29927, | |
| 15835, | |
| 29046, | |
| 24740, | |
| 24988, | |
| 15569, | |
| 29026, | |
| 24695, | |
| null, | |
| 32625, | |
| 166701, | |
| 29264, | |
| 24809, | |
| 19326, | |
| 21024, | |
| 15384, | |
| 146631, | |
| 155351, | |
| 161366, | |
| 152881, | |
| 137540, | |
| 135934, | |
| 170243, | |
| 159196, | |
| 159917, | |
| 23745, | |
| 156077, | |
| 166415, | |
| 145015, | |
| 131310, | |
| 157766, | |
| 151310, | |
| 17762, | |
| 23327, | |
| 156492, | |
| 40784, | |
| 40614, | |
| 156267, | |
| 12288, | |
| 65292, | |
| 12289, | |
| 12290, | |
| 65294, | |
| 8231, | |
| 65307, | |
| 65306, | |
| 65311, | |
| 65281, | |
| 65072, | |
| 8230, | |
| 8229, | |
| 65104, | |
| 65105, | |
| 65106, | |
| 183, | |
| 65108, | |
| 65109, | |
| 65110, | |
| 65111, | |
| 65372, | |
| 8211, | |
| 65073, | |
| 8212, | |
| 65075, | |
| 9588, | |
| 65076, | |
| 65103, | |
| 65288, | |
| 65289, | |
| 65077, | |
| 65078, | |
| 65371, | |
| 65373, | |
| 65079, | |
| 65080, | |
| 12308, | |
| 12309, | |
| 65081, | |
| 65082, | |
| 12304, | |
| 12305, | |
| 65083, | |
| 65084, | |
| 12298, | |
| 12299, | |
| 65085, | |
| 65086, | |
| 12296, | |
| 12297, | |
| 65087, | |
| 65088, | |
| 12300, | |
| 12301, | |
| 65089, | |
| 65090, | |
| 12302, | |
| 12303, | |
| 65091, | |
| 65092, | |
| 65113, | |
| 65114, | |
| 65115, | |
| 65116, | |
| 65117, | |
| 65118, | |
| 8216, | |
| 8217, | |
| 8220, | |
| 8221, | |
| 12317, | |
| 12318, | |
| 8245, | |
| 8242, | |
| 65283, | |
| 65286, | |
| 65290, | |
| 8251, | |
| 167, | |
| 12291, | |
| 9675, | |
| 9679, | |
| 9651, | |
| 9650, | |
| 9678, | |
| 9734, | |
| 9733, | |
| 9671, | |
| 9670, | |
| 9633, | |
| 9632, | |
| 9661, | |
| 9660, | |
| 12963, | |
| 8453, | |
| 175, | |
| 65507, | |
| 65343, | |
| 717, | |
| 65097, | |
| 65098, | |
| 65101, | |
| 65102, | |
| 65099, | |
| 65100, | |
| 65119, | |
| 65120, | |
| 65121, | |
| 65291, | |
| 65293, | |
| 215, | |
| 247, | |
| 177, | |
| 8730, | |
| 65308, | |
| 65310, | |
| 65309, | |
| 8806, | |
| 8807, | |
| 8800, | |
| 8734, | |
| 8786, | |
| 8801, | |
| 65122, | |
| 65123, | |
| 65124, | |
| 65125, | |
| 65126, | |
| 65374, | |
| 8745, | |
| 8746, | |
| 8869, | |
| 8736, | |
| 8735, | |
| 8895, | |
| 13266, | |
| 13265, | |
| 8747, | |
| 8750, | |
| 8757, | |
| 8756, | |
| 9792, | |
| 9794, | |
| 8853, | |
| 8857, | |
| 8593, | |
| 8595, | |
| 8592, | |
| 8594, | |
| 8598, | |
| 8599, | |
| 8601, | |
| 8600, | |
| 8741, | |
| 8739, | |
| 65295, | |
| 65340, | |
| 8725, | |
| 65128, | |
| 65284, | |
| 65509, | |
| 12306, | |
| 65504, | |
| 65505, | |
| 65285, | |
| 65312, | |
| 8451, | |
| 8457, | |
| 65129, | |
| 65130, | |
| 65131, | |
| 13269, | |
| 13212, | |
| 13213, | |
| 13214, | |
| 13262, | |
| 13217, | |
| 13198, | |
| 13199, | |
| 13252, | |
| 176, | |
| 20825, | |
| 20827, | |
| 20830, | |
| 20829, | |
| 20833, | |
| 20835, | |
| 21991, | |
| 29929, | |
| 31950, | |
| 9601, | |
| 9602, | |
| 9603, | |
| 9604, | |
| 9605, | |
| 9606, | |
| 9607, | |
| 9608, | |
| 9615, | |
| 9614, | |
| 9613, | |
| 9612, | |
| 9611, | |
| 9610, | |
| 9609, | |
| 9532, | |
| 9524, | |
| 9516, | |
| 9508, | |
| 9500, | |
| 9620, | |
| 9472, | |
| 9474, | |
| 9621, | |
| 9484, | |
| 9488, | |
| 9492, | |
| 9496, | |
| 9581, | |
| 9582, | |
| 9584, | |
| 9583, | |
| 9552, | |
| 9566, | |
| 9578, | |
| 9569, | |
| 9698, | |
| 9699, | |
| 9701, | |
| 9700, | |
| 9585, | |
| 9586, | |
| 9587, | |
| 65296, | |
| 65297, | |
| 65298, | |
| 65299, | |
| 65300, | |
| 65301, | |
| 65302, | |
| 65303, | |
| 65304, | |
| 65305, | |
| 8544, | |
| 8545, | |
| 8546, | |
| 8547, | |
| 8548, | |
| 8549, | |
| 8550, | |
| 8551, | |
| 8552, | |
| 8553, | |
| 12321, | |
| 12322, | |
| 12323, | |
| 12324, | |
| 12325, | |
| 12326, | |
| 12327, | |
| 12328, | |
| 12329, | |
| 21313, | |
| 21316, | |
| 21317, | |
| 65313, | |
| 65314, | |
| 65315, | |
| 65316, | |
| 65317, | |
| 65318, | |
| 65319, | |
| 65320, | |
| 65321, | |
| 65322, | |
| 65323, | |
| 65324, | |
| 65325, | |
| 65326, | |
| 65327, | |
| 65328, | |
| 65329, | |
| 65330, | |
| 65331, | |
| 65332, | |
| 65333, | |
| 65334, | |
| 65335, | |
| 65336, | |
| 65337, | |
| 65338, | |
| 65345, | |
| 65346, | |
| 65347, | |
| 65348, | |
| 65349, | |
| 65350, | |
| 65351, | |
| 65352, | |
| 65353, | |
| 65354, | |
| 65355, | |
| 65356, | |
| 65357, | |
| 65358, | |
| 65359, | |
| 65360, | |
| 65361, | |
| 65362, | |
| 65363, | |
| 65364, | |
| 65365, | |
| 65366, | |
| 65367, | |
| 65368, | |
| 65369, | |
| 65370, | |
| 913, | |
| 914, | |
| 915, | |
| 916, | |
| 917, | |
| 918, | |
| 919, | |
| 920, | |
| 921, | |
| 922, | |
| 923, | |
| 924, | |
| 925, | |
| 926, | |
| 927, | |
| 928, | |
| 929, | |
| 931, | |
| 932, | |
| 933, | |
| 934, | |
| 935, | |
| 936, | |
| 937, | |
| 945, | |
| 946, | |
| 947, | |
| 948, | |
| 949, | |
| 950, | |
| 951, | |
| 952, | |
| 953, | |
| 954, | |
| 955, | |
| 956, | |
| 957, | |
| 958, | |
| 959, | |
| 960, | |
| 961, | |
| 963, | |
| 964, | |
| 965, | |
| 966, | |
| 967, | |
| 968, | |
| 969, | |
| 12549, | |
| 12550, | |
| 12551, | |
| 12552, | |
| 12553, | |
| 12554, | |
| 12555, | |
| 12556, | |
| 12557, | |
| 12558, | |
| 12559, | |
| 12560, | |
| 12561, | |
| 12562, | |
| 12563, | |
| 12564, | |
| 12565, | |
| 12566, | |
| 12567, | |
| 12568, | |
| 12569, | |
| 12570, | |
| 12571, | |
| 12572, | |
| 12573, | |
| 12574, | |
| 12575, | |
| 12576, | |
| 12577, | |
| 12578, | |
| 12579, | |
| 12580, | |
| 12581, | |
| 12582, | |
| 12583, | |
| 12584, | |
| 12585, | |
| 729, | |
| 713, | |
| 714, | |
| 711, | |
| 715, | |
| 9216, | |
| 9217, | |
| 9218, | |
| 9219, | |
| 9220, | |
| 9221, | |
| 9222, | |
| 9223, | |
| 9224, | |
| 9225, | |
| 9226, | |
| 9227, | |
| 9228, | |
| 9229, | |
| 9230, | |
| 9231, | |
| 9232, | |
| 9233, | |
| 9234, | |
| 9235, | |
| 9236, | |
| 9237, | |
| 9238, | |
| 9239, | |
| 9240, | |
| 9241, | |
| 9242, | |
| 9243, | |
| 9244, | |
| 9245, | |
| 9246, | |
| 9247, | |
| 9249, | |
| 8364, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 19968, | |
| 20057, | |
| 19969, | |
| 19971, | |
| 20035, | |
| 20061, | |
| 20102, | |
| 20108, | |
| 20154, | |
| 20799, | |
| 20837, | |
| 20843, | |
| 20960, | |
| 20992, | |
| 20993, | |
| 21147, | |
| 21269, | |
| 21313, | |
| 21340, | |
| 21448, | |
| 19977, | |
| 19979, | |
| 19976, | |
| 19978, | |
| 20011, | |
| 20024, | |
| 20961, | |
| 20037, | |
| 20040, | |
| 20063, | |
| 20062, | |
| 20110, | |
| 20129, | |
| 20800, | |
| 20995, | |
| 21242, | |
| 21315, | |
| 21449, | |
| 21475, | |
| 22303, | |
| 22763, | |
| 22805, | |
| 22823, | |
| 22899, | |
| 23376, | |
| 23377, | |
| 23379, | |
| 23544, | |
| 23567, | |
| 23586, | |
| 23608, | |
| 23665, | |
| 24029, | |
| 24037, | |
| 24049, | |
| 24050, | |
| 24051, | |
| 24062, | |
| 24178, | |
| 24318, | |
| 24331, | |
| 24339, | |
| 25165, | |
| 19985, | |
| 19984, | |
| 19981, | |
| 20013, | |
| 20016, | |
| 20025, | |
| 20043, | |
| 23609, | |
| 20104, | |
| 20113, | |
| 20117, | |
| 20114, | |
| 20116, | |
| 20130, | |
| 20161, | |
| 20160, | |
| 20163, | |
| 20166, | |
| 20167, | |
| 20173, | |
| 20170, | |
| 20171, | |
| 20164, | |
| 20803, | |
| 20801, | |
| 20839, | |
| 20845, | |
| 20846, | |
| 20844, | |
| 20887, | |
| 20982, | |
| 20998, | |
| 20999, | |
| 21000, | |
| 21243, | |
| 21246, | |
| 21247, | |
| 21270, | |
| 21305, | |
| 21320, | |
| 21319, | |
| 21317, | |
| 21342, | |
| 21380, | |
| 21451, | |
| 21450, | |
| 21453, | |
| 22764, | |
| 22825, | |
| 22827, | |
| 22826, | |
| 22829, | |
| 23380, | |
| 23569, | |
| 23588, | |
| 23610, | |
| 23663, | |
| 24052, | |
| 24187, | |
| 24319, | |
| 24340, | |
| 24341, | |
| 24515, | |
| 25096, | |
| 25142, | |
| 25163, | |
| 25166, | |
| 25903, | |
| 25991, | |
| 26007, | |
| 26020, | |
| 26041, | |
| 26085, | |
| 26352, | |
| 26376, | |
| 26408, | |
| 27424, | |
| 27490, | |
| 27513, | |
| 27595, | |
| 27604, | |
| 27611, | |
| 27663, | |
| 27700, | |
| 28779, | |
| 29226, | |
| 29238, | |
| 29243, | |
| 29255, | |
| 29273, | |
| 29275, | |
| 29356, | |
| 29579, | |
| 19993, | |
| 19990, | |
| 19989, | |
| 19988, | |
| 19992, | |
| 20027, | |
| 20045, | |
| 20047, | |
| 20046, | |
| 20197, | |
| 20184, | |
| 20180, | |
| 20181, | |
| 20182, | |
| 20183, | |
| 20195, | |
| 20196, | |
| 20185, | |
| 20190, | |
| 20805, | |
| 20804, | |
| 20873, | |
| 20874, | |
| 20908, | |
| 20985, | |
| 20986, | |
| 20984, | |
| 21002, | |
| 21152, | |
| 21151, | |
| 21253, | |
| 21254, | |
| 21271, | |
| 21277, | |
| 20191, | |
| 21322, | |
| 21321, | |
| 21345, | |
| 21344, | |
| 21359, | |
| 21358, | |
| 21435, | |
| 21487, | |
| 21476, | |
| 21491, | |
| 21484, | |
| 21486, | |
| 21481, | |
| 21480, | |
| 21500, | |
| 21496, | |
| 21493, | |
| 21483, | |
| 21478, | |
| 21482, | |
| 21490, | |
| 21489, | |
| 21488, | |
| 21477, | |
| 21485, | |
| 21499, | |
| 22235, | |
| 22234, | |
| 22806, | |
| 22830, | |
| 22833, | |
| 22900, | |
| 22902, | |
| 23381, | |
| 23427, | |
| 23612, | |
| 24040, | |
| 24039, | |
| 24038, | |
| 24066, | |
| 24067, | |
| 24179, | |
| 24188, | |
| 24321, | |
| 24344, | |
| 24343, | |
| 24517, | |
| 25098, | |
| 25171, | |
| 25172, | |
| 25170, | |
| 25169, | |
| 26021, | |
| 26086, | |
| 26414, | |
| 26412, | |
| 26410, | |
| 26411, | |
| 26413, | |
| 27491, | |
| 27597, | |
| 27665, | |
| 27664, | |
| 27704, | |
| 27713, | |
| 27712, | |
| 27710, | |
| 29359, | |
| 29572, | |
| 29577, | |
| 29916, | |
| 29926, | |
| 29976, | |
| 29983, | |
| 29992, | |
| 29993, | |
| 30000, | |
| 30001, | |
| 30002, | |
| 30003, | |
| 30091, | |
| 30333, | |
| 30382, | |
| 30399, | |
| 30446, | |
| 30683, | |
| 30690, | |
| 30707, | |
| 31034, | |
| 31166, | |
| 31348, | |
| 31435, | |
| 19998, | |
| 19999, | |
| 20050, | |
| 20051, | |
| 20073, | |
| 20121, | |
| 20132, | |
| 20134, | |
| 20133, | |
| 20223, | |
| 20233, | |
| 20249, | |
| 20234, | |
| 20245, | |
| 20237, | |
| 20240, | |
| 20241, | |
| 20239, | |
| 20210, | |
| 20214, | |
| 20219, | |
| 20208, | |
| 20211, | |
| 20221, | |
| 20225, | |
| 20235, | |
| 20809, | |
| 20807, | |
| 20806, | |
| 20808, | |
| 20840, | |
| 20849, | |
| 20877, | |
| 20912, | |
| 21015, | |
| 21009, | |
| 21010, | |
| 21006, | |
| 21014, | |
| 21155, | |
| 21256, | |
| 21281, | |
| 21280, | |
| 21360, | |
| 21361, | |
| 21513, | |
| 21519, | |
| 21516, | |
| 21514, | |
| 21520, | |
| 21505, | |
| 21515, | |
| 21508, | |
| 21521, | |
| 21517, | |
| 21512, | |
| 21507, | |
| 21518, | |
| 21510, | |
| 21522, | |
| 22240, | |
| 22238, | |
| 22237, | |
| 22323, | |
| 22320, | |
| 22312, | |
| 22317, | |
| 22316, | |
| 22319, | |
| 22313, | |
| 22809, | |
| 22810, | |
| 22839, | |
| 22840, | |
| 22916, | |
| 22904, | |
| 22915, | |
| 22909, | |
| 22905, | |
| 22914, | |
| 22913, | |
| 23383, | |
| 23384, | |
| 23431, | |
| 23432, | |
| 23429, | |
| 23433, | |
| 23546, | |
| 23574, | |
| 23673, | |
| 24030, | |
| 24070, | |
| 24182, | |
| 24180, | |
| 24335, | |
| 24347, | |
| 24537, | |
| 24534, | |
| 25102, | |
| 25100, | |
| 25101, | |
| 25104, | |
| 25187, | |
| 25179, | |
| 25176, | |
| 25910, | |
| 26089, | |
| 26088, | |
| 26092, | |
| 26093, | |
| 26354, | |
| 26355, | |
| 26377, | |
| 26429, | |
| 26420, | |
| 26417, | |
| 26421, | |
| 27425, | |
| 27492, | |
| 27515, | |
| 27670, | |
| 27741, | |
| 27735, | |
| 27737, | |
| 27743, | |
| 27744, | |
| 27728, | |
| 27733, | |
| 27745, | |
| 27739, | |
| 27725, | |
| 27726, | |
| 28784, | |
| 29279, | |
| 29277, | |
| 30334, | |
| 31481, | |
| 31859, | |
| 31992, | |
| 32566, | |
| 32650, | |
| 32701, | |
| 32769, | |
| 32771, | |
| 32780, | |
| 32786, | |
| 32819, | |
| 32895, | |
| 32905, | |
| 32907, | |
| 32908, | |
| 33251, | |
| 33258, | |
| 33267, | |
| 33276, | |
| 33292, | |
| 33307, | |
| 33311, | |
| 33390, | |
| 33394, | |
| 33406, | |
| 34411, | |
| 34880, | |
| 34892, | |
| 34915, | |
| 35199, | |
| 38433, | |
| 20018, | |
| 20136, | |
| 20301, | |
| 20303, | |
| 20295, | |
| 20311, | |
| 20318, | |
| 20276, | |
| 20315, | |
| 20309, | |
| 20272, | |
| 20304, | |
| 20305, | |
| 20285, | |
| 20282, | |
| 20280, | |
| 20291, | |
| 20308, | |
| 20284, | |
| 20294, | |
| 20323, | |
| 20316, | |
| 20320, | |
| 20271, | |
| 20302, | |
| 20278, | |
| 20313, | |
| 20317, | |
| 20296, | |
| 20314, | |
| 20812, | |
| 20811, | |
| 20813, | |
| 20853, | |
| 20918, | |
| 20919, | |
| 21029, | |
| 21028, | |
| 21033, | |
| 21034, | |
| 21032, | |
| 21163, | |
| 21161, | |
| 21162, | |
| 21164, | |
| 21283, | |
| 21363, | |
| 21365, | |
| 21533, | |
| 21549, | |
| 21534, | |
| 21566, | |
| 21542, | |
| 21582, | |
| 21543, | |
| 21574, | |
| 21571, | |
| 21555, | |
| 21576, | |
| 21570, | |
| 21531, | |
| 21545, | |
| 21578, | |
| 21561, | |
| 21563, | |
| 21560, | |
| 21550, | |
| 21557, | |
| 21558, | |
| 21536, | |
| 21564, | |
| 21568, | |
| 21553, | |
| 21547, | |
| 21535, | |
| 21548, | |
| 22250, | |
| 22256, | |
| 22244, | |
| 22251, | |
| 22346, | |
| 22353, | |
| 22336, | |
| 22349, | |
| 22343, | |
| 22350, | |
| 22334, | |
| 22352, | |
| 22351, | |
| 22331, | |
| 22767, | |
| 22846, | |
| 22941, | |
| 22930, | |
| 22952, | |
| 22942, | |
| 22947, | |
| 22937, | |
| 22934, | |
| 22925, | |
| 22948, | |
| 22931, | |
| 22922, | |
| 22949, | |
| 23389, | |
| 23388, | |
| 23386, | |
| 23387, | |
| 23436, | |
| 23435, | |
| 23439, | |
| 23596, | |
| 23616, | |
| 23617, | |
| 23615, | |
| 23614, | |
| 23696, | |
| 23697, | |
| 23700, | |
| 23692, | |
| 24043, | |
| 24076, | |
| 24207, | |
| 24199, | |
| 24202, | |
| 24311, | |
| 24324, | |
| 24351, | |
| 24420, | |
| 24418, | |
| 24439, | |
| 24441, | |
| 24536, | |
| 24524, | |
| 24535, | |
| 24525, | |
| 24561, | |
| 24555, | |
| 24568, | |
| 24554, | |
| 25106, | |
| 25105, | |
| 25220, | |
| 25239, | |
| 25238, | |
| 25216, | |
| 25206, | |
| 25225, | |
| 25197, | |
| 25226, | |
| 25212, | |
| 25214, | |
| 25209, | |
| 25203, | |
| 25234, | |
| 25199, | |
| 25240, | |
| 25198, | |
| 25237, | |
| 25235, | |
| 25233, | |
| 25222, | |
| 25913, | |
| 25915, | |
| 25912, | |
| 26097, | |
| 26356, | |
| 26463, | |
| 26446, | |
| 26447, | |
| 26448, | |
| 26449, | |
| 26460, | |
| 26454, | |
| 26462, | |
| 26441, | |
| 26438, | |
| 26464, | |
| 26451, | |
| 26455, | |
| 27493, | |
| 27599, | |
| 27714, | |
| 27742, | |
| 27801, | |
| 27777, | |
| 27784, | |
| 27785, | |
| 27781, | |
| 27803, | |
| 27754, | |
| 27770, | |
| 27792, | |
| 27760, | |
| 27788, | |
| 27752, | |
| 27798, | |
| 27794, | |
| 27773, | |
| 27779, | |
| 27762, | |
| 27774, | |
| 27764, | |
| 27782, | |
| 27766, | |
| 27789, | |
| 27796, | |
| 27800, | |
| 27778, | |
| 28790, | |
| 28796, | |
| 28797, | |
| 28792, | |
| 29282, | |
| 29281, | |
| 29280, | |
| 29380, | |
| 29378, | |
| 29590, | |
| 29996, | |
| 29995, | |
| 30007, | |
| 30008, | |
| 30338, | |
| 30447, | |
| 30691, | |
| 31169, | |
| 31168, | |
| 31167, | |
| 31350, | |
| 31995, | |
| 32597, | |
| 32918, | |
| 32915, | |
| 32925, | |
| 32920, | |
| 32923, | |
| 32922, | |
| 32946, | |
| 33391, | |
| 33426, | |
| 33419, | |
| 33421, | |
| 35211, | |
| 35282, | |
| 35328, | |
| 35895, | |
| 35910, | |
| 35925, | |
| 35997, | |
| 36196, | |
| 36208, | |
| 36275, | |
| 36523, | |
| 36554, | |
| 36763, | |
| 36784, | |
| 36802, | |
| 36806, | |
| 36805, | |
| 36804, | |
| 24033, | |
| 37009, | |
| 37026, | |
| 37034, | |
| 37030, | |
| 37027, | |
| 37193, | |
| 37318, | |
| 37324, | |
| 38450, | |
| 38446, | |
| 38449, | |
| 38442, | |
| 38444, | |
| 20006, | |
| 20054, | |
| 20083, | |
| 20107, | |
| 20123, | |
| 20126, | |
| 20139, | |
| 20140, | |
| 20335, | |
| 20381, | |
| 20365, | |
| 20339, | |
| 20351, | |
| 20332, | |
| 20379, | |
| 20363, | |
| 20358, | |
| 20355, | |
| 20336, | |
| 20341, | |
| 20360, | |
| 20329, | |
| 20347, | |
| 20374, | |
| 20350, | |
| 20367, | |
| 20369, | |
| 20346, | |
| 20820, | |
| 20818, | |
| 20821, | |
| 20841, | |
| 20855, | |
| 20854, | |
| 20856, | |
| 20925, | |
| 20989, | |
| 21051, | |
| 21048, | |
| 21047, | |
| 21050, | |
| 21040, | |
| 21038, | |
| 21046, | |
| 21057, | |
| 21182, | |
| 21179, | |
| 21330, | |
| 21332, | |
| 21331, | |
| 21329, | |
| 21350, | |
| 21367, | |
| 21368, | |
| 21369, | |
| 21462, | |
| 21460, | |
| 21463, | |
| 21619, | |
| 21621, | |
| 21654, | |
| 21624, | |
| 21653, | |
| 21632, | |
| 21627, | |
| 21623, | |
| 21636, | |
| 21650, | |
| 21638, | |
| 21628, | |
| 21648, | |
| 21617, | |
| 21622, | |
| 21644, | |
| 21658, | |
| 21602, | |
| 21608, | |
| 21643, | |
| 21629, | |
| 21646, | |
| 22266, | |
| 22403, | |
| 22391, | |
| 22378, | |
| 22377, | |
| 22369, | |
| 22374, | |
| 22372, | |
| 22396, | |
| 22812, | |
| 22857, | |
| 22855, | |
| 22856, | |
| 22852, | |
| 22868, | |
| 22974, | |
| 22971, | |
| 22996, | |
| 22969, | |
| 22958, | |
| 22993, | |
| 22982, | |
| 22992, | |
| 22989, | |
| 22987, | |
| 22995, | |
| 22986, | |
| 22959, | |
| 22963, | |
| 22994, | |
| 22981, | |
| 23391, | |
| 23396, | |
| 23395, | |
| 23447, | |
| 23450, | |
| 23448, | |
| 23452, | |
| 23449, | |
| 23451, | |
| 23578, | |
| 23624, | |
| 23621, | |
| 23622, | |
| 23735, | |
| 23713, | |
| 23736, | |
| 23721, | |
| 23723, | |
| 23729, | |
| 23731, | |
| 24088, | |
| 24090, | |
| 24086, | |
| 24085, | |
| 24091, | |
| 24081, | |
| 24184, | |
| 24218, | |
| 24215, | |
| 24220, | |
| 24213, | |
| 24214, | |
| 24310, | |
| 24358, | |
| 24359, | |
| 24361, | |
| 24448, | |
| 24449, | |
| 24447, | |
| 24444, | |
| 24541, | |
| 24544, | |
| 24573, | |
| 24565, | |
| 24575, | |
| 24591, | |
| 24596, | |
| 24623, | |
| 24629, | |
| 24598, | |
| 24618, | |
| 24597, | |
| 24609, | |
| 24615, | |
| 24617, | |
| 24619, | |
| 24603, | |
| 25110, | |
| 25109, | |
| 25151, | |
| 25150, | |
| 25152, | |
| 25215, | |
| 25289, | |
| 25292, | |
| 25284, | |
| 25279, | |
| 25282, | |
| 25273, | |
| 25298, | |
| 25307, | |
| 25259, | |
| 25299, | |
| 25300, | |
| 25291, | |
| 25288, | |
| 25256, | |
| 25277, | |
| 25276, | |
| 25296, | |
| 25305, | |
| 25287, | |
| 25293, | |
| 25269, | |
| 25306, | |
| 25265, | |
| 25304, | |
| 25302, | |
| 25303, | |
| 25286, | |
| 25260, | |
| 25294, | |
| 25918, | |
| 26023, | |
| 26044, | |
| 26106, | |
| 26132, | |
| 26131, | |
| 26124, | |
| 26118, | |
| 26114, | |
| 26126, | |
| 26112, | |
| 26127, | |
| 26133, | |
| 26122, | |
| 26119, | |
| 26381, | |
| 26379, | |
| 26477, | |
| 26507, | |
| 26517, | |
| 26481, | |
| 26524, | |
| 26483, | |
| 26487, | |
| 26503, | |
| 26525, | |
| 26519, | |
| 26479, | |
| 26480, | |
| 26495, | |
| 26505, | |
| 26494, | |
| 26512, | |
| 26485, | |
| 26522, | |
| 26515, | |
| 26492, | |
| 26474, | |
| 26482, | |
| 27427, | |
| 27494, | |
| 27495, | |
| 27519, | |
| 27667, | |
| 27675, | |
| 27875, | |
| 27880, | |
| 27891, | |
| 27825, | |
| 27852, | |
| 27877, | |
| 27827, | |
| 27837, | |
| 27838, | |
| 27836, | |
| 27874, | |
| 27819, | |
| 27861, | |
| 27859, | |
| 27832, | |
| 27844, | |
| 27833, | |
| 27841, | |
| 27822, | |
| 27863, | |
| 27845, | |
| 27889, | |
| 27839, | |
| 27835, | |
| 27873, | |
| 27867, | |
| 27850, | |
| 27820, | |
| 27887, | |
| 27868, | |
| 27862, | |
| 27872, | |
| 28821, | |
| 28814, | |
| 28818, | |
| 28810, | |
| 28825, | |
| 29228, | |
| 29229, | |
| 29240, | |
| 29256, | |
| 29287, | |
| 29289, | |
| 29376, | |
| 29390, | |
| 29401, | |
| 29399, | |
| 29392, | |
| 29609, | |
| 29608, | |
| 29599, | |
| 29611, | |
| 29605, | |
| 30013, | |
| 30109, | |
| 30105, | |
| 30106, | |
| 30340, | |
| 30402, | |
| 30450, | |
| 30452, | |
| 30693, | |
| 30717, | |
| 31038, | |
| 31040, | |
| 31041, | |
| 31177, | |
| 31176, | |
| 31354, | |
| 31353, | |
| 31482, | |
| 31998, | |
| 32596, | |
| 32652, | |
| 32651, | |
| 32773, | |
| 32954, | |
| 32933, | |
| 32930, | |
| 32945, | |
| 32929, | |
| 32939, | |
| 32937, | |
| 32948, | |
| 32938, | |
| 32943, | |
| 33253, | |
| 33278, | |
| 33293, | |
| 33459, | |
| 33437, | |
| 33433, | |
| 33453, | |
| 33469, | |
| 33439, | |
| 33465, | |
| 33457, | |
| 33452, | |
| 33445, | |
| 33455, | |
| 33464, | |
| 33443, | |
| 33456, | |
| 33470, | |
| 33463, | |
| 34382, | |
| 34417, | |
| 21021, | |
| 34920, | |
| 36555, | |
| 36814, | |
| 36820, | |
| 36817, | |
| 37045, | |
| 37048, | |
| 37041, | |
| 37046, | |
| 37319, | |
| 37329, | |
| 38263, | |
| 38272, | |
| 38428, | |
| 38464, | |
| 38463, | |
| 38459, | |
| 38468, | |
| 38466, | |
| 38585, | |
| 38632, | |
| 38738, | |
| 38750, | |
| 20127, | |
| 20141, | |
| 20142, | |
| 20449, | |
| 20405, | |
| 20399, | |
| 20415, | |
| 20448, | |
| 20433, | |
| 20431, | |
| 20445, | |
| 20419, | |
| 20406, | |
| 20440, | |
| 20447, | |
| 20426, | |
| 20439, | |
| 20398, | |
| 20432, | |
| 20420, | |
| 20418, | |
| 20442, | |
| 20430, | |
| 20446, | |
| 20407, | |
| 20823, | |
| 20882, | |
| 20881, | |
| 20896, | |
| 21070, | |
| 21059, | |
| 21066, | |
| 21069, | |
| 21068, | |
| 21067, | |
| 21063, | |
| 21191, | |
| 21193, | |
| 21187, | |
| 21185, | |
| 21261, | |
| 21335, | |
| 21371, | |
| 21402, | |
| 21467, | |
| 21676, | |
| 21696, | |
| 21672, | |
| 21710, | |
| 21705, | |
| 21688, | |
| 21670, | |
| 21683, | |
| 21703, | |
| 21698, | |
| 21693, | |
| 21674, | |
| 21697, | |
| 21700, | |
| 21704, | |
| 21679, | |
| 21675, | |
| 21681, | |
| 21691, | |
| 21673, | |
| 21671, | |
| 21695, | |
| 22271, | |
| 22402, | |
| 22411, | |
| 22432, | |
| 22435, | |
| 22434, | |
| 22478, | |
| 22446, | |
| 22419, | |
| 22869, | |
| 22865, | |
| 22863, | |
| 22862, | |
| 22864, | |
| 23004, | |
| 23000, | |
| 23039, | |
| 23011, | |
| 23016, | |
| 23043, | |
| 23013, | |
| 23018, | |
| 23002, | |
| 23014, | |
| 23041, | |
| 23035, | |
| 23401, | |
| 23459, | |
| 23462, | |
| 23460, | |
| 23458, | |
| 23461, | |
| 23553, | |
| 23630, | |
| 23631, | |
| 23629, | |
| 23627, | |
| 23769, | |
| 23762, | |
| 24055, | |
| 24093, | |
| 24101, | |
| 24095, | |
| 24189, | |
| 24224, | |
| 24230, | |
| 24314, | |
| 24328, | |
| 24365, | |
| 24421, | |
| 24456, | |
| 24453, | |
| 24458, | |
| 24459, | |
| 24455, | |
| 24460, | |
| 24457, | |
| 24594, | |
| 24605, | |
| 24608, | |
| 24613, | |
| 24590, | |
| 24616, | |
| 24653, | |
| 24688, | |
| 24680, | |
| 24674, | |
| 24646, | |
| 24643, | |
| 24684, | |
| 24683, | |
| 24682, | |
| 24676, | |
| 25153, | |
| 25308, | |
| 25366, | |
| 25353, | |
| 25340, | |
| 25325, | |
| 25345, | |
| 25326, | |
| 25341, | |
| 25351, | |
| 25329, | |
| 25335, | |
| 25327, | |
| 25324, | |
| 25342, | |
| 25332, | |
| 25361, | |
| 25346, | |
| 25919, | |
| 25925, | |
| 26027, | |
| 26045, | |
| 26082, | |
| 26149, | |
| 26157, | |
| 26144, | |
| 26151, | |
| 26159, | |
| 26143, | |
| 26152, | |
| 26161, | |
| 26148, | |
| 26359, | |
| 26623, | |
| 26579, | |
| 26609, | |
| 26580, | |
| 26576, | |
| 26604, | |
| 26550, | |
| 26543, | |
| 26613, | |
| 26601, | |
| 26607, | |
| 26564, | |
| 26577, | |
| 26548, | |
| 26586, | |
| 26597, | |
| 26552, | |
| 26575, | |
| 26590, | |
| 26611, | |
| 26544, | |
| 26585, | |
| 26594, | |
| 26589, | |
| 26578, | |
| 27498, | |
| 27523, | |
| 27526, | |
| 27573, | |
| 27602, | |
| 27607, | |
| 27679, | |
| 27849, | |
| 27915, | |
| 27954, | |
| 27946, | |
| 27969, | |
| 27941, | |
| 27916, | |
| 27953, | |
| 27934, | |
| 27927, | |
| 27963, | |
| 27965, | |
| 27966, | |
| 27958, | |
| 27931, | |
| 27893, | |
| 27961, | |
| 27943, | |
| 27960, | |
| 27945, | |
| 27950, | |
| 27957, | |
| 27918, | |
| 27947, | |
| 28843, | |
| 28858, | |
| 28851, | |
| 28844, | |
| 28847, | |
| 28845, | |
| 28856, | |
| 28846, | |
| 28836, | |
| 29232, | |
| 29298, | |
| 29295, | |
| 29300, | |
| 29417, | |
| 29408, | |
| 29409, | |
| 29623, | |
| 29642, | |
| 29627, | |
| 29618, | |
| 29645, | |
| 29632, | |
| 29619, | |
| 29978, | |
| 29997, | |
| 30031, | |
| 30028, | |
| 30030, | |
| 30027, | |
| 30123, | |
| 30116, | |
| 30117, | |
| 30114, | |
| 30115, | |
| 30328, | |
| 30342, | |
| 30343, | |
| 30344, | |
| 30408, | |
| 30406, | |
| 30403, | |
| 30405, | |
| 30465, | |
| 30457, | |
| 30456, | |
| 30473, | |
| 30475, | |
| 30462, | |
| 30460, | |
| 30471, | |
| 30684, | |
| 30722, | |
| 30740, | |
| 30732, | |
| 30733, | |
| 31046, | |
| 31049, | |
| 31048, | |
| 31047, | |
| 31161, | |
| 31162, | |
| 31185, | |
| 31186, | |
| 31179, | |
| 31359, | |
| 31361, | |
| 31487, | |
| 31485, | |
| 31869, | |
| 32002, | |
| 32005, | |
| 32000, | |
| 32009, | |
| 32007, | |
| 32004, | |
| 32006, | |
| 32568, | |
| 32654, | |
| 32703, | |
| 32772, | |
| 32784, | |
| 32781, | |
| 32785, | |
| 32822, | |
| 32982, | |
| 32997, | |
| 32986, | |
| 32963, | |
| 32964, | |
| 32972, | |
| 32993, | |
| 32987, | |
| 32974, | |
| 32990, | |
| 32996, | |
| 32989, | |
| 33268, | |
| 33314, | |
| 33511, | |
| 33539, | |
| 33541, | |
| 33507, | |
| 33499, | |
| 33510, | |
| 33540, | |
| 33509, | |
| 33538, | |
| 33545, | |
| 33490, | |
| 33495, | |
| 33521, | |
| 33537, | |
| 33500, | |
| 33492, | |
| 33489, | |
| 33502, | |
| 33491, | |
| 33503, | |
| 33519, | |
| 33542, | |
| 34384, | |
| 34425, | |
| 34427, | |
| 34426, | |
| 34893, | |
| 34923, | |
| 35201, | |
| 35284, | |
| 35336, | |
| 35330, | |
| 35331, | |
| 35998, | |
| 36000, | |
| 36212, | |
| 36211, | |
| 36276, | |
| 36557, | |
| 36556, | |
| 36848, | |
| 36838, | |
| 36834, | |
| 36842, | |
| 36837, | |
| 36845, | |
| 36843, | |
| 36836, | |
| 36840, | |
| 37066, | |
| 37070, | |
| 37057, | |
| 37059, | |
| 37195, | |
| 37194, | |
| 37325, | |
| 38274, | |
| 38480, | |
| 38475, | |
| 38476, | |
| 38477, | |
| 38754, | |
| 38761, | |
| 38859, | |
| 38893, | |
| 38899, | |
| 38913, | |
| 39080, | |
| 39131, | |
| 39135, | |
| 39318, | |
| 39321, | |
| 20056, | |
| 20147, | |
| 20492, | |
| 20493, | |
| 20515, | |
| 20463, | |
| 20518, | |
| 20517, | |
| 20472, | |
| 20521, | |
| 20502, | |
| 20486, | |
| 20540, | |
| 20511, | |
| 20506, | |
| 20498, | |
| 20497, | |
| 20474, | |
| 20480, | |
| 20500, | |
| 20520, | |
| 20465, | |
| 20513, | |
| 20491, | |
| 20505, | |
| 20504, | |
| 20467, | |
| 20462, | |
| 20525, | |
| 20522, | |
| 20478, | |
| 20523, | |
| 20489, | |
| 20860, | |
| 20900, | |
| 20901, | |
| 20898, | |
| 20941, | |
| 20940, | |
| 20934, | |
| 20939, | |
| 21078, | |
| 21084, | |
| 21076, | |
| 21083, | |
| 21085, | |
| 21290, | |
| 21375, | |
| 21407, | |
| 21405, | |
| 21471, | |
| 21736, | |
| 21776, | |
| 21761, | |
| 21815, | |
| 21756, | |
| 21733, | |
| 21746, | |
| 21766, | |
| 21754, | |
| 21780, | |
| 21737, | |
| 21741, | |
| 21729, | |
| 21769, | |
| 21742, | |
| 21738, | |
| 21734, | |
| 21799, | |
| 21767, | |
| 21757, | |
| 21775, | |
| 22275, | |
| 22276, | |
| 22466, | |
| 22484, | |
| 22475, | |
| 22467, | |
| 22537, | |
| 22799, | |
| 22871, | |
| 22872, | |
| 22874, | |
| 23057, | |
| 23064, | |
| 23068, | |
| 23071, | |
| 23067, | |
| 23059, | |
| 23020, | |
| 23072, | |
| 23075, | |
| 23081, | |
| 23077, | |
| 23052, | |
| 23049, | |
| 23403, | |
| 23640, | |
| 23472, | |
| 23475, | |
| 23478, | |
| 23476, | |
| 23470, | |
| 23477, | |
| 23481, | |
| 23480, | |
| 23556, | |
| 23633, | |
| 23637, | |
| 23632, | |
| 23789, | |
| 23805, | |
| 23803, | |
| 23786, | |
| 23784, | |
| 23792, | |
| 23798, | |
| 23809, | |
| 23796, | |
| 24046, | |
| 24109, | |
| 24107, | |
| 24235, | |
| 24237, | |
| 24231, | |
| 24369, | |
| 24466, | |
| 24465, | |
| 24464, | |
| 24665, | |
| 24675, | |
| 24677, | |
| 24656, | |
| 24661, | |
| 24685, | |
| 24681, | |
| 24687, | |
| 24708, | |
| 24735, | |
| 24730, | |
| 24717, | |
| 24724, | |
| 24716, | |
| 24709, | |
| 24726, | |
| 25159, | |
| 25331, | |
| 25352, | |
| 25343, | |
| 25422, | |
| 25406, | |
| 25391, | |
| 25429, | |
| 25410, | |
| 25414, | |
| 25423, | |
| 25417, | |
| 25402, | |
| 25424, | |
| 25405, | |
| 25386, | |
| 25387, | |
| 25384, | |
| 25421, | |
| 25420, | |
| 25928, | |
| 25929, | |
| 26009, | |
| 26049, | |
| 26053, | |
| 26178, | |
| 26185, | |
| 26191, | |
| 26179, | |
| 26194, | |
| 26188, | |
| 26181, | |
| 26177, | |
| 26360, | |
| 26388, | |
| 26389, | |
| 26391, | |
| 26657, | |
| 26680, | |
| 26696, | |
| 26694, | |
| 26707, | |
| 26681, | |
| 26690, | |
| 26708, | |
| 26665, | |
| 26803, | |
| 26647, | |
| 26700, | |
| 26705, | |
| 26685, | |
| 26612, | |
| 26704, | |
| 26688, | |
| 26684, | |
| 26691, | |
| 26666, | |
| 26693, | |
| 26643, | |
| 26648, | |
| 26689, | |
| 27530, | |
| 27529, | |
| 27575, | |
| 27683, | |
| 27687, | |
| 27688, | |
| 27686, | |
| 27684, | |
| 27888, | |
| 28010, | |
| 28053, | |
| 28040, | |
| 28039, | |
| 28006, | |
| 28024, | |
| 28023, | |
| 27993, | |
| 28051, | |
| 28012, | |
| 28041, | |
| 28014, | |
| 27994, | |
| 28020, | |
| 28009, | |
| 28044, | |
| 28042, | |
| 28025, | |
| 28037, | |
| 28005, | |
| 28052, | |
| 28874, | |
| 28888, | |
| 28900, | |
| 28889, | |
| 28872, | |
| 28879, | |
| 29241, | |
| 29305, | |
| 29436, | |
| 29433, | |
| 29437, | |
| 29432, | |
| 29431, | |
| 29574, | |
| 29677, | |
| 29705, | |
| 29678, | |
| 29664, | |
| 29674, | |
| 29662, | |
| 30036, | |
| 30045, | |
| 30044, | |
| 30042, | |
| 30041, | |
| 30142, | |
| 30149, | |
| 30151, | |
| 30130, | |
| 30131, | |
| 30141, | |
| 30140, | |
| 30137, | |
| 30146, | |
| 30136, | |
| 30347, | |
| 30384, | |
| 30410, | |
| 30413, | |
| 30414, | |
| 30505, | |
| 30495, | |
| 30496, | |
| 30504, | |
| 30697, | |
| 30768, | |
| 30759, | |
| 30776, | |
| 30749, | |
| 30772, | |
| 30775, | |
| 30757, | |
| 30765, | |
| 30752, | |
| 30751, | |
| 30770, | |
| 31061, | |
| 31056, | |
| 31072, | |
| 31071, | |
| 31062, | |
| 31070, | |
| 31069, | |
| 31063, | |
| 31066, | |
| 31204, | |
| 31203, | |
| 31207, | |
| 31199, | |
| 31206, | |
| 31209, | |
| 31192, | |
| 31364, | |
| 31368, | |
| 31449, | |
| 31494, | |
| 31505, | |
| 31881, | |
| 32033, | |
| 32023, | |
| 32011, | |
| 32010, | |
| 32032, | |
| 32034, | |
| 32020, | |
| 32016, | |
| 32021, | |
| 32026, | |
| 32028, | |
| 32013, | |
| 32025, | |
| 32027, | |
| 32570, | |
| 32607, | |
| 32660, | |
| 32709, | |
| 32705, | |
| 32774, | |
| 32792, | |
| 32789, | |
| 32793, | |
| 32791, | |
| 32829, | |
| 32831, | |
| 33009, | |
| 33026, | |
| 33008, | |
| 33029, | |
| 33005, | |
| 33012, | |
| 33030, | |
| 33016, | |
| 33011, | |
| 33032, | |
| 33021, | |
| 33034, | |
| 33020, | |
| 33007, | |
| 33261, | |
| 33260, | |
| 33280, | |
| 33296, | |
| 33322, | |
| 33323, | |
| 33320, | |
| 33324, | |
| 33467, | |
| 33579, | |
| 33618, | |
| 33620, | |
| 33610, | |
| 33592, | |
| 33616, | |
| 33609, | |
| 33589, | |
| 33588, | |
| 33615, | |
| 33586, | |
| 33593, | |
| 33590, | |
| 33559, | |
| 33600, | |
| 33585, | |
| 33576, | |
| 33603, | |
| 34388, | |
| 34442, | |
| 34474, | |
| 34451, | |
| 34468, | |
| 34473, | |
| 34444, | |
| 34467, | |
| 34460, | |
| 34928, | |
| 34935, | |
| 34945, | |
| 34946, | |
| 34941, | |
| 34937, | |
| 35352, | |
| 35344, | |
| 35342, | |
| 35340, | |
| 35349, | |
| 35338, | |
| 35351, | |
| 35347, | |
| 35350, | |
| 35343, | |
| 35345, | |
| 35912, | |
| 35962, | |
| 35961, | |
| 36001, | |
| 36002, | |
| 36215, | |
| 36524, | |
| 36562, | |
| 36564, | |
| 36559, | |
| 36785, | |
| 36865, | |
| 36870, | |
| 36855, | |
| 36864, | |
| 36858, | |
| 36852, | |
| 36867, | |
| 36861, | |
| 36869, | |
| 36856, | |
| 37013, | |
| 37089, | |
| 37085, | |
| 37090, | |
| 37202, | |
| 37197, | |
| 37196, | |
| 37336, | |
| 37341, | |
| 37335, | |
| 37340, | |
| 37337, | |
| 38275, | |
| 38498, | |
| 38499, | |
| 38497, | |
| 38491, | |
| 38493, | |
| 38500, | |
| 38488, | |
| 38494, | |
| 38587, | |
| 39138, | |
| 39340, | |
| 39592, | |
| 39640, | |
| 39717, | |
| 39730, | |
| 39740, | |
| 20094, | |
| 20602, | |
| 20605, | |
| 20572, | |
| 20551, | |
| 20547, | |
| 20556, | |
| 20570, | |
| 20553, | |
| 20581, | |
| 20598, | |
| 20558, | |
| 20565, | |
| 20597, | |
| 20596, | |
| 20599, | |
| 20559, | |
| 20495, | |
| 20591, | |
| 20589, | |
| 20828, | |
| 20885, | |
| 20976, | |
| 21098, | |
| 21103, | |
| 21202, | |
| 21209, | |
| 21208, | |
| 21205, | |
| 21264, | |
| 21263, | |
| 21273, | |
| 21311, | |
| 21312, | |
| 21310, | |
| 21443, | |
| 26364, | |
| 21830, | |
| 21866, | |
| 21862, | |
| 21828, | |
| 21854, | |
| 21857, | |
| 21827, | |
| 21834, | |
| 21809, | |
| 21846, | |
| 21839, | |
| 21845, | |
| 21807, | |
| 21860, | |
| 21816, | |
| 21806, | |
| 21852, | |
| 21804, | |
| 21859, | |
| 21811, | |
| 21825, | |
| 21847, | |
| 22280, | |
| 22283, | |
| 22281, | |
| 22495, | |
| 22533, | |
| 22538, | |
| 22534, | |
| 22496, | |
| 22500, | |
| 22522, | |
| 22530, | |
| 22581, | |
| 22519, | |
| 22521, | |
| 22816, | |
| 22882, | |
| 23094, | |
| 23105, | |
| 23113, | |
| 23142, | |
| 23146, | |
| 23104, | |
| 23100, | |
| 23138, | |
| 23130, | |
| 23110, | |
| 23114, | |
| 23408, | |
| 23495, | |
| 23493, | |
| 23492, | |
| 23490, | |
| 23487, | |
| 23494, | |
| 23561, | |
| 23560, | |
| 23559, | |
| 23648, | |
| 23644, | |
| 23645, | |
| 23815, | |
| 23814, | |
| 23822, | |
| 23835, | |
| 23830, | |
| 23842, | |
| 23825, | |
| 23849, | |
| 23828, | |
| 23833, | |
| 23844, | |
| 23847, | |
| 23831, | |
| 24034, | |
| 24120, | |
| 24118, | |
| 24115, | |
| 24119, | |
| 24247, | |
| 24248, | |
| 24246, | |
| 24245, | |
| 24254, | |
| 24373, | |
| 24375, | |
| 24407, | |
| 24428, | |
| 24425, | |
| 24427, | |
| 24471, | |
| 24473, | |
| 24478, | |
| 24472, | |
| 24481, | |
| 24480, | |
| 24476, | |
| 24703, | |
| 24739, | |
| 24713, | |
| 24736, | |
| 24744, | |
| 24779, | |
| 24756, | |
| 24806, | |
| 24765, | |
| 24773, | |
| 24763, | |
| 24757, | |
| 24796, | |
| 24764, | |
| 24792, | |
| 24789, | |
| 24774, | |
| 24799, | |
| 24760, | |
| 24794, | |
| 24775, | |
| 25114, | |
| 25115, | |
| 25160, | |
| 25504, | |
| 25511, | |
| 25458, | |
| 25494, | |
| 25506, | |
| 25509, | |
| 25463, | |
| 25447, | |
| 25496, | |
| 25514, | |
| 25457, | |
| 25513, | |
| 25481, | |
| 25475, | |
| 25499, | |
| 25451, | |
| 25512, | |
| 25476, | |
| 25480, | |
| 25497, | |
| 25505, | |
| 25516, | |
| 25490, | |
| 25487, | |
| 25472, | |
| 25467, | |
| 25449, | |
| 25448, | |
| 25466, | |
| 25949, | |
| 25942, | |
| 25937, | |
| 25945, | |
| 25943, | |
| 21855, | |
| 25935, | |
| 25944, | |
| 25941, | |
| 25940, | |
| 26012, | |
| 26011, | |
| 26028, | |
| 26063, | |
| 26059, | |
| 26060, | |
| 26062, | |
| 26205, | |
| 26202, | |
| 26212, | |
| 26216, | |
| 26214, | |
| 26206, | |
| 26361, | |
| 21207, | |
| 26395, | |
| 26753, | |
| 26799, | |
| 26786, | |
| 26771, | |
| 26805, | |
| 26751, | |
| 26742, | |
| 26801, | |
| 26791, | |
| 26775, | |
| 26800, | |
| 26755, | |
| 26820, | |
| 26797, | |
| 26758, | |
| 26757, | |
| 26772, | |
| 26781, | |
| 26792, | |
| 26783, | |
| 26785, | |
| 26754, | |
| 27442, | |
| 27578, | |
| 27627, | |
| 27628, | |
| 27691, | |
| 28046, | |
| 28092, | |
| 28147, | |
| 28121, | |
| 28082, | |
| 28129, | |
| 28108, | |
| 28132, | |
| 28155, | |
| 28154, | |
| 28165, | |
| 28103, | |
| 28107, | |
| 28079, | |
| 28113, | |
| 28078, | |
| 28126, | |
| 28153, | |
| 28088, | |
| 28151, | |
| 28149, | |
| 28101, | |
| 28114, | |
| 28186, | |
| 28085, | |
| 28122, | |
| 28139, | |
| 28120, | |
| 28138, | |
| 28145, | |
| 28142, | |
| 28136, | |
| 28102, | |
| 28100, | |
| 28074, | |
| 28140, | |
| 28095, | |
| 28134, | |
| 28921, | |
| 28937, | |
| 28938, | |
| 28925, | |
| 28911, | |
| 29245, | |
| 29309, | |
| 29313, | |
| 29468, | |
| 29467, | |
| 29462, | |
| 29459, | |
| 29465, | |
| 29575, | |
| 29701, | |
| 29706, | |
| 29699, | |
| 29702, | |
| 29694, | |
| 29709, | |
| 29920, | |
| 29942, | |
| 29943, | |
| 29980, | |
| 29986, | |
| 30053, | |
| 30054, | |
| 30050, | |
| 30064, | |
| 30095, | |
| 30164, | |
| 30165, | |
| 30133, | |
| 30154, | |
| 30157, | |
| 30350, | |
| 30420, | |
| 30418, | |
| 30427, | |
| 30519, | |
| 30526, | |
| 30524, | |
| 30518, | |
| 30520, | |
| 30522, | |
| 30827, | |
| 30787, | |
| 30798, | |
| 31077, | |
| 31080, | |
| 31085, | |
| 31227, | |
| 31378, | |
| 31381, | |
| 31520, | |
| 31528, | |
| 31515, | |
| 31532, | |
| 31526, | |
| 31513, | |
| 31518, | |
| 31534, | |
| 31890, | |
| 31895, | |
| 31893, | |
| 32070, | |
| 32067, | |
| 32113, | |
| 32046, | |
| 32057, | |
| 32060, | |
| 32064, | |
| 32048, | |
| 32051, | |
| 32068, | |
| 32047, | |
| 32066, | |
| 32050, | |
| 32049, | |
| 32573, | |
| 32670, | |
| 32666, | |
| 32716, | |
| 32718, | |
| 32722, | |
| 32796, | |
| 32842, | |
| 32838, | |
| 33071, | |
| 33046, | |
| 33059, | |
| 33067, | |
| 33065, | |
| 33072, | |
| 33060, | |
| 33282, | |
| 33333, | |
| 33335, | |
| 33334, | |
| 33337, | |
| 33678, | |
| 33694, | |
| 33688, | |
| 33656, | |
| 33698, | |
| 33686, | |
| 33725, | |
| 33707, | |
| 33682, | |
| 33674, | |
| 33683, | |
| 33673, | |
| 33696, | |
| 33655, | |
| 33659, | |
| 33660, | |
| 33670, | |
| 33703, | |
| 34389, | |
| 24426, | |
| 34503, | |
| 34496, | |
| 34486, | |
| 34500, | |
| 34485, | |
| 34502, | |
| 34507, | |
| 34481, | |
| 34479, | |
| 34505, | |
| 34899, | |
| 34974, | |
| 34952, | |
| 34987, | |
| 34962, | |
| 34966, | |
| 34957, | |
| 34955, | |
| 35219, | |
| 35215, | |
| 35370, | |
| 35357, | |
| 35363, | |
| 35365, | |
| 35377, | |
| 35373, | |
| 35359, | |
| 35355, | |
| 35362, | |
| 35913, | |
| 35930, | |
| 36009, | |
| 36012, | |
| 36011, | |
| 36008, | |
| 36010, | |
| 36007, | |
| 36199, | |
| 36198, | |
| 36286, | |
| 36282, | |
| 36571, | |
| 36575, | |
| 36889, | |
| 36877, | |
| 36890, | |
| 36887, | |
| 36899, | |
| 36895, | |
| 36893, | |
| 36880, | |
| 36885, | |
| 36894, | |
| 36896, | |
| 36879, | |
| 36898, | |
| 36886, | |
| 36891, | |
| 36884, | |
| 37096, | |
| 37101, | |
| 37117, | |
| 37207, | |
| 37326, | |
| 37365, | |
| 37350, | |
| 37347, | |
| 37351, | |
| 37357, | |
| 37353, | |
| 38281, | |
| 38506, | |
| 38517, | |
| 38515, | |
| 38520, | |
| 38512, | |
| 38516, | |
| 38518, | |
| 38519, | |
| 38508, | |
| 38592, | |
| 38634, | |
| 38633, | |
| 31456, | |
| 31455, | |
| 38914, | |
| 38915, | |
| 39770, | |
| 40165, | |
| 40565, | |
| 40575, | |
| 40613, | |
| 40635, | |
| 20642, | |
| 20621, | |
| 20613, | |
| 20633, | |
| 20625, | |
| 20608, | |
| 20630, | |
| 20632, | |
| 20634, | |
| 26368, | |
| 20977, | |
| 21106, | |
| 21108, | |
| 21109, | |
| 21097, | |
| 21214, | |
| 21213, | |
| 21211, | |
| 21338, | |
| 21413, | |
| 21883, | |
| 21888, | |
| 21927, | |
| 21884, | |
| 21898, | |
| 21917, | |
| 21912, | |
| 21890, | |
| 21916, | |
| 21930, | |
| 21908, | |
| 21895, | |
| 21899, | |
| 21891, | |
| 21939, | |
| 21934, | |
| 21919, | |
| 21822, | |
| 21938, | |
| 21914, | |
| 21947, | |
| 21932, | |
| 21937, | |
| 21886, | |
| 21897, | |
| 21931, | |
| 21913, | |
| 22285, | |
| 22575, | |
| 22570, | |
| 22580, | |
| 22564, | |
| 22576, | |
| 22577, | |
| 22561, | |
| 22557, | |
| 22560, | |
| 22777, | |
| 22778, | |
| 22880, | |
| 23159, | |
| 23194, | |
| 23167, | |
| 23186, | |
| 23195, | |
| 23207, | |
| 23411, | |
| 23409, | |
| 23506, | |
| 23500, | |
| 23507, | |
| 23504, | |
| 23562, | |
| 23563, | |
| 23601, | |
| 23884, | |
| 23888, | |
| 23860, | |
| 23879, | |
| 24061, | |
| 24133, | |
| 24125, | |
| 24128, | |
| 24131, | |
| 24190, | |
| 24266, | |
| 24257, | |
| 24258, | |
| 24260, | |
| 24380, | |
| 24429, | |
| 24489, | |
| 24490, | |
| 24488, | |
| 24785, | |
| 24801, | |
| 24754, | |
| 24758, | |
| 24800, | |
| 24860, | |
| 24867, | |
| 24826, | |
| 24853, | |
| 24816, | |
| 24827, | |
| 24820, | |
| 24936, | |
| 24817, | |
| 24846, | |
| 24822, | |
| 24841, | |
| 24832, | |
| 24850, | |
| 25119, | |
| 25161, | |
| 25507, | |
| 25484, | |
| 25551, | |
| 25536, | |
| 25577, | |
| 25545, | |
| 25542, | |
| 25549, | |
| 25554, | |
| 25571, | |
| 25552, | |
| 25569, | |
| 25558, | |
| 25581, | |
| 25582, | |
| 25462, | |
| 25588, | |
| 25578, | |
| 25563, | |
| 25682, | |
| 25562, | |
| 25593, | |
| 25950, | |
| 25958, | |
| 25954, | |
| 25955, | |
| 26001, | |
| 26000, | |
| 26031, | |
| 26222, | |
| 26224, | |
| 26228, | |
| 26230, | |
| 26223, | |
| 26257, | |
| 26234, | |
| 26238, | |
| 26231, | |
| 26366, | |
| 26367, | |
| 26399, | |
| 26397, | |
| 26874, | |
| 26837, | |
| 26848, | |
| 26840, | |
| 26839, | |
| 26885, | |
| 26847, | |
| 26869, | |
| 26862, | |
| 26855, | |
| 26873, | |
| 26834, | |
| 26866, | |
| 26851, | |
| 26827, | |
| 26829, | |
| 26893, | |
| 26898, | |
| 26894, | |
| 26825, | |
| 26842, | |
| 26990, | |
| 26875, | |
| 27454, | |
| 27450, | |
| 27453, | |
| 27544, | |
| 27542, | |
| 27580, | |
| 27631, | |
| 27694, | |
| 27695, | |
| 27692, | |
| 28207, | |
| 28216, | |
| 28244, | |
| 28193, | |
| 28210, | |
| 28263, | |
| 28234, | |
| 28192, | |
| 28197, | |
| 28195, | |
| 28187, | |
| 28251, | |
| 28248, | |
| 28196, | |
| 28246, | |
| 28270, | |
| 28205, | |
| 28198, | |
| 28271, | |
| 28212, | |
| 28237, | |
| 28218, | |
| 28204, | |
| 28227, | |
| 28189, | |
| 28222, | |
| 28363, | |
| 28297, | |
| 28185, | |
| 28238, | |
| 28259, | |
| 28228, | |
| 28274, | |
| 28265, | |
| 28255, | |
| 28953, | |
| 28954, | |
| 28966, | |
| 28976, | |
| 28961, | |
| 28982, | |
| 29038, | |
| 28956, | |
| 29260, | |
| 29316, | |
| 29312, | |
| 29494, | |
| 29477, | |
| 29492, | |
| 29481, | |
| 29754, | |
| 29738, | |
| 29747, | |
| 29730, | |
| 29733, | |
| 29749, | |
| 29750, | |
| 29748, | |
| 29743, | |
| 29723, | |
| 29734, | |
| 29736, | |
| 29989, | |
| 29990, | |
| 30059, | |
| 30058, | |
| 30178, | |
| 30171, | |
| 30179, | |
| 30169, | |
| 30168, | |
| 30174, | |
| 30176, | |
| 30331, | |
| 30332, | |
| 30358, | |
| 30355, | |
| 30388, | |
| 30428, | |
| 30543, | |
| 30701, | |
| 30813, | |
| 30828, | |
| 30831, | |
| 31245, | |
| 31240, | |
| 31243, | |
| 31237, | |
| 31232, | |
| 31384, | |
| 31383, | |
| 31382, | |
| 31461, | |
| 31459, | |
| 31561, | |
| 31574, | |
| 31558, | |
| 31568, | |
| 31570, | |
| 31572, | |
| 31565, | |
| 31563, | |
| 31567, | |
| 31569, | |
| 31903, | |
| 31909, | |
| 32094, | |
| 32080, | |
| 32104, | |
| 32085, | |
| 32043, | |
| 32110, | |
| 32114, | |
| 32097, | |
| 32102, | |
| 32098, | |
| 32112, | |
| 32115, | |
| 21892, | |
| 32724, | |
| 32725, | |
| 32779, | |
| 32850, | |
| 32901, | |
| 33109, | |
| 33108, | |
| 33099, | |
| 33105, | |
| 33102, | |
| 33081, | |
| 33094, | |
| 33086, | |
| 33100, | |
| 33107, | |
| 33140, | |
| 33298, | |
| 33308, | |
| 33769, | |
| 33795, | |
| 33784, | |
| 33805, | |
| 33760, | |
| 33733, | |
| 33803, | |
| 33729, | |
| 33775, | |
| 33777, | |
| 33780, | |
| 33879, | |
| 33802, | |
| 33776, | |
| 33804, | |
| 33740, | |
| 33789, | |
| 33778, | |
| 33738, | |
| 33848, | |
| 33806, | |
| 33796, | |
| 33756, | |
| 33799, | |
| 33748, | |
| 33759, | |
| 34395, | |
| 34527, | |
| 34521, | |
| 34541, | |
| 34516, | |
| 34523, | |
| 34532, | |
| 34512, | |
| 34526, | |
| 34903, | |
| 35009, | |
| 35010, | |
| 34993, | |
| 35203, | |
| 35222, | |
| 35387, | |
| 35424, | |
| 35413, | |
| 35422, | |
| 35388, | |
| 35393, | |
| 35412, | |
| 35419, | |
| 35408, | |
| 35398, | |
| 35380, | |
| 35386, | |
| 35382, | |
| 35414, | |
| 35937, | |
| 35970, | |
| 36015, | |
| 36028, | |
| 36019, | |
| 36029, | |
| 36033, | |
| 36027, | |
| 36032, | |
| 36020, | |
| 36023, | |
| 36022, | |
| 36031, | |
| 36024, | |
| 36234, | |
| 36229, | |
| 36225, | |
| 36302, | |
| 36317, | |
| 36299, | |
| 36314, | |
| 36305, | |
| 36300, | |
| 36315, | |
| 36294, | |
| 36603, | |
| 36600, | |
| 36604, | |
| 36764, | |
| 36910, | |
| 36917, | |
| 36913, | |
| 36920, | |
| 36914, | |
| 36918, | |
| 37122, | |
| 37109, | |
| 37129, | |
| 37118, | |
| 37219, | |
| 37221, | |
| 37327, | |
| 37396, | |
| 37397, | |
| 37411, | |
| 37385, | |
| 37406, | |
| 37389, | |
| 37392, | |
| 37383, | |
| 37393, | |
| 38292, | |
| 38287, | |
| 38283, | |
| 38289, | |
| 38291, | |
| 38290, | |
| 38286, | |
| 38538, | |
| 38542, | |
| 38539, | |
| 38525, | |
| 38533, | |
| 38534, | |
| 38541, | |
| 38514, | |
| 38532, | |
| 38593, | |
| 38597, | |
| 38596, | |
| 38598, | |
| 38599, | |
| 38639, | |
| 38642, | |
| 38860, | |
| 38917, | |
| 38918, | |
| 38920, | |
| 39143, | |
| 39146, | |
| 39151, | |
| 39145, | |
| 39154, | |
| 39149, | |
| 39342, | |
| 39341, | |
| 40643, | |
| 40653, | |
| 40657, | |
| 20098, | |
| 20653, | |
| 20661, | |
| 20658, | |
| 20659, | |
| 20677, | |
| 20670, | |
| 20652, | |
| 20663, | |
| 20667, | |
| 20655, | |
| 20679, | |
| 21119, | |
| 21111, | |
| 21117, | |
| 21215, | |
| 21222, | |
| 21220, | |
| 21218, | |
| 21219, | |
| 21295, | |
| 21983, | |
| 21992, | |
| 21971, | |
| 21990, | |
| 21966, | |
| 21980, | |
| 21959, | |
| 21969, | |
| 21987, | |
| 21988, | |
| 21999, | |
| 21978, | |
| 21985, | |
| 21957, | |
| 21958, | |
| 21989, | |
| 21961, | |
| 22290, | |
| 22291, | |
| 22622, | |
| 22609, | |
| 22616, | |
| 22615, | |
| 22618, | |
| 22612, | |
| 22635, | |
| 22604, | |
| 22637, | |
| 22602, | |
| 22626, | |
| 22610, | |
| 22603, | |
| 22887, | |
| 23233, | |
| 23241, | |
| 23244, | |
| 23230, | |
| 23229, | |
| 23228, | |
| 23219, | |
| 23234, | |
| 23218, | |
| 23913, | |
| 23919, | |
| 24140, | |
| 24185, | |
| 24265, | |
| 24264, | |
| 24338, | |
| 24409, | |
| 24492, | |
| 24494, | |
| 24858, | |
| 24847, | |
| 24904, | |
| 24863, | |
| 24819, | |
| 24859, | |
| 24825, | |
| 24833, | |
| 24840, | |
| 24910, | |
| 24908, | |
| 24900, | |
| 24909, | |
| 24894, | |
| 24884, | |
| 24871, | |
| 24845, | |
| 24838, | |
| 24887, | |
| 25121, | |
| 25122, | |
| 25619, | |
| 25662, | |
| 25630, | |
| 25642, | |
| 25645, | |
| 25661, | |
| 25644, | |
| 25615, | |
| 25628, | |
| 25620, | |
| 25613, | |
| 25654, | |
| 25622, | |
| 25623, | |
| 25606, | |
| 25964, | |
| 26015, | |
| 26032, | |
| 26263, | |
| 26249, | |
| 26247, | |
| 26248, | |
| 26262, | |
| 26244, | |
| 26264, | |
| 26253, | |
| 26371, | |
| 27028, | |
| 26989, | |
| 26970, | |
| 26999, | |
| 26976, | |
| 26964, | |
| 26997, | |
| 26928, | |
| 27010, | |
| 26954, | |
| 26984, | |
| 26987, | |
| 26974, | |
| 26963, | |
| 27001, | |
| 27014, | |
| 26973, | |
| 26979, | |
| 26971, | |
| 27463, | |
| 27506, | |
| 27584, | |
| 27583, | |
| 27603, | |
| 27645, | |
| 28322, | |
| 28335, | |
| 28371, | |
| 28342, | |
| 28354, | |
| 28304, | |
| 28317, | |
| 28359, | |
| 28357, | |
| 28325, | |
| 28312, | |
| 28348, | |
| 28346, | |
| 28331, | |
| 28369, | |
| 28310, | |
| 28316, | |
| 28356, | |
| 28372, | |
| 28330, | |
| 28327, | |
| 28340, | |
| 29006, | |
| 29017, | |
| 29033, | |
| 29028, | |
| 29001, | |
| 29031, | |
| 29020, | |
| 29036, | |
| 29030, | |
| 29004, | |
| 29029, | |
| 29022, | |
| 28998, | |
| 29032, | |
| 29014, | |
| 29242, | |
| 29266, | |
| 29495, | |
| 29509, | |
| 29503, | |
| 29502, | |
| 29807, | |
| 29786, | |
| 29781, | |
| 29791, | |
| 29790, | |
| 29761, | |
| 29759, | |
| 29785, | |
| 29787, | |
| 29788, | |
| 30070, | |
| 30072, | |
| 30208, | |
| 30192, | |
| 30209, | |
| 30194, | |
| 30193, | |
| 30202, | |
| 30207, | |
| 30196, | |
| 30195, | |
| 30430, | |
| 30431, | |
| 30555, | |
| 30571, | |
| 30566, | |
| 30558, | |
| 30563, | |
| 30585, | |
| 30570, | |
| 30572, | |
| 30556, | |
| 30565, | |
| 30568, | |
| 30562, | |
| 30702, | |
| 30862, | |
| 30896, | |
| 30871, | |
| 30872, | |
| 30860, | |
| 30857, | |
| 30844, | |
| 30865, | |
| 30867, | |
| 30847, | |
| 31098, | |
| 31103, | |
| 31105, | |
| 33836, | |
| 31165, | |
| 31260, | |
| 31258, | |
| 31264, | |
| 31252, | |
| 31263, | |
| 31262, | |
| 31391, | |
| 31392, | |
| 31607, | |
| 31680, | |
| 31584, | |
| 31598, | |
| 31591, | |
| 31921, | |
| 31923, | |
| 31925, | |
| 32147, | |
| 32121, | |
| 32145, | |
| 32129, | |
| 32143, | |
| 32091, | |
| 32622, | |
| 32617, | |
| 32618, | |
| 32626, | |
| 32681, | |
| 32680, | |
| 32676, | |
| 32854, | |
| 32856, | |
| 32902, | |
| 32900, | |
| 33137, | |
| 33136, | |
| 33144, | |
| 33125, | |
| 33134, | |
| 33139, | |
| 33131, | |
| 33145, | |
| 33146, | |
| 33126, | |
| 33285, | |
| 33351, | |
| 33922, | |
| 33911, | |
| 33853, | |
| 33841, | |
| 33909, | |
| 33894, | |
| 33899, | |
| 33865, | |
| 33900, | |
| 33883, | |
| 33852, | |
| 33845, | |
| 33889, | |
| 33891, | |
| 33897, | |
| 33901, | |
| 33862, | |
| 34398, | |
| 34396, | |
| 34399, | |
| 34553, | |
| 34579, | |
| 34568, | |
| 34567, | |
| 34560, | |
| 34558, | |
| 34555, | |
| 34562, | |
| 34563, | |
| 34566, | |
| 34570, | |
| 34905, | |
| 35039, | |
| 35028, | |
| 35033, | |
| 35036, | |
| 35032, | |
| 35037, | |
| 35041, | |
| 35018, | |
| 35029, | |
| 35026, | |
| 35228, | |
| 35299, | |
| 35435, | |
| 35442, | |
| 35443, | |
| 35430, | |
| 35433, | |
| 35440, | |
| 35463, | |
| 35452, | |
| 35427, | |
| 35488, | |
| 35441, | |
| 35461, | |
| 35437, | |
| 35426, | |
| 35438, | |
| 35436, | |
| 35449, | |
| 35451, | |
| 35390, | |
| 35432, | |
| 35938, | |
| 35978, | |
| 35977, | |
| 36042, | |
| 36039, | |
| 36040, | |
| 36036, | |
| 36018, | |
| 36035, | |
| 36034, | |
| 36037, | |
| 36321, | |
| 36319, | |
| 36328, | |
| 36335, | |
| 36339, | |
| 36346, | |
| 36330, | |
| 36324, | |
| 36326, | |
| 36530, | |
| 36611, | |
| 36617, | |
| 36606, | |
| 36618, | |
| 36767, | |
| 36786, | |
| 36939, | |
| 36938, | |
| 36947, | |
| 36930, | |
| 36948, | |
| 36924, | |
| 36949, | |
| 36944, | |
| 36935, | |
| 36943, | |
| 36942, | |
| 36941, | |
| 36945, | |
| 36926, | |
| 36929, | |
| 37138, | |
| 37143, | |
| 37228, | |
| 37226, | |
| 37225, | |
| 37321, | |
| 37431, | |
| 37463, | |
| 37432, | |
| 37437, | |
| 37440, | |
| 37438, | |
| 37467, | |
| 37451, | |
| 37476, | |
| 37457, | |
| 37428, | |
| 37449, | |
| 37453, | |
| 37445, | |
| 37433, | |
| 37439, | |
| 37466, | |
| 38296, | |
| 38552, | |
| 38548, | |
| 38549, | |
| 38605, | |
| 38603, | |
| 38601, | |
| 38602, | |
| 38647, | |
| 38651, | |
| 38649, | |
| 38646, | |
| 38742, | |
| 38772, | |
| 38774, | |
| 38928, | |
| 38929, | |
| 38931, | |
| 38922, | |
| 38930, | |
| 38924, | |
| 39164, | |
| 39156, | |
| 39165, | |
| 39166, | |
| 39347, | |
| 39345, | |
| 39348, | |
| 39649, | |
| 40169, | |
| 40578, | |
| 40718, | |
| 40723, | |
| 40736, | |
| 20711, | |
| 20718, | |
| 20709, | |
| 20694, | |
| 20717, | |
| 20698, | |
| 20693, | |
| 20687, | |
| 20689, | |
| 20721, | |
| 20686, | |
| 20713, | |
| 20834, | |
| 20979, | |
| 21123, | |
| 21122, | |
| 21297, | |
| 21421, | |
| 22014, | |
| 22016, | |
| 22043, | |
| 22039, | |
| 22013, | |
| 22036, | |
| 22022, | |
| 22025, | |
| 22029, | |
| 22030, | |
| 22007, | |
| 22038, | |
| 22047, | |
| 22024, | |
| 22032, | |
| 22006, | |
| 22296, | |
| 22294, | |
| 22645, | |
| 22654, | |
| 22659, | |
| 22675, | |
| 22666, | |
| 22649, | |
| 22661, | |
| 22653, | |
| 22781, | |
| 22821, | |
| 22818, | |
| 22820, | |
| 22890, | |
| 22889, | |
| 23265, | |
| 23270, | |
| 23273, | |
| 23255, | |
| 23254, | |
| 23256, | |
| 23267, | |
| 23413, | |
| 23518, | |
| 23527, | |
| 23521, | |
| 23525, | |
| 23526, | |
| 23528, | |
| 23522, | |
| 23524, | |
| 23519, | |
| 23565, | |
| 23650, | |
| 23940, | |
| 23943, | |
| 24155, | |
| 24163, | |
| 24149, | |
| 24151, | |
| 24148, | |
| 24275, | |
| 24278, | |
| 24330, | |
| 24390, | |
| 24432, | |
| 24505, | |
| 24903, | |
| 24895, | |
| 24907, | |
| 24951, | |
| 24930, | |
| 24931, | |
| 24927, | |
| 24922, | |
| 24920, | |
| 24949, | |
| 25130, | |
| 25735, | |
| 25688, | |
| 25684, | |
| 25764, | |
| 25720, | |
| 25695, | |
| 25722, | |
| 25681, | |
| 25703, | |
| 25652, | |
| 25709, | |
| 25723, | |
| 25970, | |
| 26017, | |
| 26071, | |
| 26070, | |
| 26274, | |
| 26280, | |
| 26269, | |
| 27036, | |
| 27048, | |
| 27029, | |
| 27073, | |
| 27054, | |
| 27091, | |
| 27083, | |
| 27035, | |
| 27063, | |
| 27067, | |
| 27051, | |
| 27060, | |
| 27088, | |
| 27085, | |
| 27053, | |
| 27084, | |
| 27046, | |
| 27075, | |
| 27043, | |
| 27465, | |
| 27468, | |
| 27699, | |
| 28467, | |
| 28436, | |
| 28414, | |
| 28435, | |
| 28404, | |
| 28457, | |
| 28478, | |
| 28448, | |
| 28460, | |
| 28431, | |
| 28418, | |
| 28450, | |
| 28415, | |
| 28399, | |
| 28422, | |
| 28465, | |
| 28472, | |
| 28466, | |
| 28451, | |
| 28437, | |
| 28459, | |
| 28463, | |
| 28552, | |
| 28458, | |
| 28396, | |
| 28417, | |
| 28402, | |
| 28364, | |
| 28407, | |
| 29076, | |
| 29081, | |
| 29053, | |
| 29066, | |
| 29060, | |
| 29074, | |
| 29246, | |
| 29330, | |
| 29334, | |
| 29508, | |
| 29520, | |
| 29796, | |
| 29795, | |
| 29802, | |
| 29808, | |
| 29805, | |
| 29956, | |
| 30097, | |
| 30247, | |
| 30221, | |
| 30219, | |
| 30217, | |
| 30227, | |
| 30433, | |
| 30435, | |
| 30596, | |
| 30589, | |
| 30591, | |
| 30561, | |
| 30913, | |
| 30879, | |
| 30887, | |
| 30899, | |
| 30889, | |
| 30883, | |
| 31118, | |
| 31119, | |
| 31117, | |
| 31278, | |
| 31281, | |
| 31402, | |
| 31401, | |
| 31469, | |
| 31471, | |
| 31649, | |
| 31637, | |
| 31627, | |
| 31605, | |
| 31639, | |
| 31645, | |
| 31636, | |
| 31631, | |
| 31672, | |
| 31623, | |
| 31620, | |
| 31929, | |
| 31933, | |
| 31934, | |
| 32187, | |
| 32176, | |
| 32156, | |
| 32189, | |
| 32190, | |
| 32160, | |
| 32202, | |
| 32180, | |
| 32178, | |
| 32177, | |
| 32186, | |
| 32162, | |
| 32191, | |
| 32181, | |
| 32184, | |
| 32173, | |
| 32210, | |
| 32199, | |
| 32172, | |
| 32624, | |
| 32736, | |
| 32737, | |
| 32735, | |
| 32862, | |
| 32858, | |
| 32903, | |
| 33104, | |
| 33152, | |
| 33167, | |
| 33160, | |
| 33162, | |
| 33151, | |
| 33154, | |
| 33255, | |
| 33274, | |
| 33287, | |
| 33300, | |
| 33310, | |
| 33355, | |
| 33993, | |
| 33983, | |
| 33990, | |
| 33988, | |
| 33945, | |
| 33950, | |
| 33970, | |
| 33948, | |
| 33995, | |
| 33976, | |
| 33984, | |
| 34003, | |
| 33936, | |
| 33980, | |
| 34001, | |
| 33994, | |
| 34623, | |
| 34588, | |
| 34619, | |
| 34594, | |
| 34597, | |
| 34612, | |
| 34584, | |
| 34645, | |
| 34615, | |
| 34601, | |
| 35059, | |
| 35074, | |
| 35060, | |
| 35065, | |
| 35064, | |
| 35069, | |
| 35048, | |
| 35098, | |
| 35055, | |
| 35494, | |
| 35468, | |
| 35486, | |
| 35491, | |
| 35469, | |
| 35489, | |
| 35475, | |
| 35492, | |
| 35498, | |
| 35493, | |
| 35496, | |
| 35480, | |
| 35473, | |
| 35482, | |
| 35495, | |
| 35946, | |
| 35981, | |
| 35980, | |
| 36051, | |
| 36049, | |
| 36050, | |
| 36203, | |
| 36249, | |
| 36245, | |
| 36348, | |
| 36628, | |
| 36626, | |
| 36629, | |
| 36627, | |
| 36771, | |
| 36960, | |
| 36952, | |
| 36956, | |
| 36963, | |
| 36953, | |
| 36958, | |
| 36962, | |
| 36957, | |
| 36955, | |
| 37145, | |
| 37144, | |
| 37150, | |
| 37237, | |
| 37240, | |
| 37239, | |
| 37236, | |
| 37496, | |
| 37504, | |
| 37509, | |
| 37528, | |
| 37526, | |
| 37499, | |
| 37523, | |
| 37532, | |
| 37544, | |
| 37500, | |
| 37521, | |
| 38305, | |
| 38312, | |
| 38313, | |
| 38307, | |
| 38309, | |
| 38308, | |
| 38553, | |
| 38556, | |
| 38555, | |
| 38604, | |
| 38610, | |
| 38656, | |
| 38780, | |
| 38789, | |
| 38902, | |
| 38935, | |
| 38936, | |
| 39087, | |
| 39089, | |
| 39171, | |
| 39173, | |
| 39180, | |
| 39177, | |
| 39361, | |
| 39599, | |
| 39600, | |
| 39654, | |
| 39745, | |
| 39746, | |
| 40180, | |
| 40182, | |
| 40179, | |
| 40636, | |
| 40763, | |
| 40778, | |
| 20740, | |
| 20736, | |
| 20731, | |
| 20725, | |
| 20729, | |
| 20738, | |
| 20744, | |
| 20745, | |
| 20741, | |
| 20956, | |
| 21127, | |
| 21128, | |
| 21129, | |
| 21133, | |
| 21130, | |
| 21232, | |
| 21426, | |
| 22062, | |
| 22075, | |
| 22073, | |
| 22066, | |
| 22079, | |
| 22068, | |
| 22057, | |
| 22099, | |
| 22094, | |
| 22103, | |
| 22132, | |
| 22070, | |
| 22063, | |
| 22064, | |
| 22656, | |
| 22687, | |
| 22686, | |
| 22707, | |
| 22684, | |
| 22702, | |
| 22697, | |
| 22694, | |
| 22893, | |
| 23305, | |
| 23291, | |
| 23307, | |
| 23285, | |
| 23308, | |
| 23304, | |
| 23534, | |
| 23532, | |
| 23529, | |
| 23531, | |
| 23652, | |
| 23653, | |
| 23965, | |
| 23956, | |
| 24162, | |
| 24159, | |
| 24161, | |
| 24290, | |
| 24282, | |
| 24287, | |
| 24285, | |
| 24291, | |
| 24288, | |
| 24392, | |
| 24433, | |
| 24503, | |
| 24501, | |
| 24950, | |
| 24935, | |
| 24942, | |
| 24925, | |
| 24917, | |
| 24962, | |
| 24956, | |
| 24944, | |
| 24939, | |
| 24958, | |
| 24999, | |
| 24976, | |
| 25003, | |
| 24974, | |
| 25004, | |
| 24986, | |
| 24996, | |
| 24980, | |
| 25006, | |
| 25134, | |
| 25705, | |
| 25711, | |
| 25721, | |
| 25758, | |
| 25778, | |
| 25736, | |
| 25744, | |
| 25776, | |
| 25765, | |
| 25747, | |
| 25749, | |
| 25769, | |
| 25746, | |
| 25774, | |
| 25773, | |
| 25771, | |
| 25754, | |
| 25772, | |
| 25753, | |
| 25762, | |
| 25779, | |
| 25973, | |
| 25975, | |
| 25976, | |
| 26286, | |
| 26283, | |
| 26292, | |
| 26289, | |
| 27171, | |
| 27167, | |
| 27112, | |
| 27137, | |
| 27166, | |
| 27161, | |
| 27133, | |
| 27169, | |
| 27155, | |
| 27146, | |
| 27123, | |
| 27138, | |
| 27141, | |
| 27117, | |
| 27153, | |
| 27472, | |
| 27470, | |
| 27556, | |
| 27589, | |
| 27590, | |
| 28479, | |
| 28540, | |
| 28548, | |
| 28497, | |
| 28518, | |
| 28500, | |
| 28550, | |
| 28525, | |
| 28507, | |
| 28536, | |
| 28526, | |
| 28558, | |
| 28538, | |
| 28528, | |
| 28516, | |
| 28567, | |
| 28504, | |
| 28373, | |
| 28527, | |
| 28512, | |
| 28511, | |
| 29087, | |
| 29100, | |
| 29105, | |
| 29096, | |
| 29270, | |
| 29339, | |
| 29518, | |
| 29527, | |
| 29801, | |
| 29835, | |
| 29827, | |
| 29822, | |
| 29824, | |
| 30079, | |
| 30240, | |
| 30249, | |
| 30239, | |
| 30244, | |
| 30246, | |
| 30241, | |
| 30242, | |
| 30362, | |
| 30394, | |
| 30436, | |
| 30606, | |
| 30599, | |
| 30604, | |
| 30609, | |
| 30603, | |
| 30923, | |
| 30917, | |
| 30906, | |
| 30922, | |
| 30910, | |
| 30933, | |
| 30908, | |
| 30928, | |
| 31295, | |
| 31292, | |
| 31296, | |
| 31293, | |
| 31287, | |
| 31291, | |
| 31407, | |
| 31406, | |
| 31661, | |
| 31665, | |
| 31684, | |
| 31668, | |
| 31686, | |
| 31687, | |
| 31681, | |
| 31648, | |
| 31692, | |
| 31946, | |
| 32224, | |
| 32244, | |
| 32239, | |
| 32251, | |
| 32216, | |
| 32236, | |
| 32221, | |
| 32232, | |
| 32227, | |
| 32218, | |
| 32222, | |
| 32233, | |
| 32158, | |
| 32217, | |
| 32242, | |
| 32249, | |
| 32629, | |
| 32631, | |
| 32687, | |
| 32745, | |
| 32806, | |
| 33179, | |
| 33180, | |
| 33181, | |
| 33184, | |
| 33178, | |
| 33176, | |
| 34071, | |
| 34109, | |
| 34074, | |
| 34030, | |
| 34092, | |
| 34093, | |
| 34067, | |
| 34065, | |
| 34083, | |
| 34081, | |
| 34068, | |
| 34028, | |
| 34085, | |
| 34047, | |
| 34054, | |
| 34690, | |
| 34676, | |
| 34678, | |
| 34656, | |
| 34662, | |
| 34680, | |
| 34664, | |
| 34649, | |
| 34647, | |
| 34636, | |
| 34643, | |
| 34907, | |
| 34909, | |
| 35088, | |
| 35079, | |
| 35090, | |
| 35091, | |
| 35093, | |
| 35082, | |
| 35516, | |
| 35538, | |
| 35527, | |
| 35524, | |
| 35477, | |
| 35531, | |
| 35576, | |
| 35506, | |
| 35529, | |
| 35522, | |
| 35519, | |
| 35504, | |
| 35542, | |
| 35533, | |
| 35510, | |
| 35513, | |
| 35547, | |
| 35916, | |
| 35918, | |
| 35948, | |
| 36064, | |
| 36062, | |
| 36070, | |
| 36068, | |
| 36076, | |
| 36077, | |
| 36066, | |
| 36067, | |
| 36060, | |
| 36074, | |
| 36065, | |
| 36205, | |
| 36255, | |
| 36259, | |
| 36395, | |
| 36368, | |
| 36381, | |
| 36386, | |
| 36367, | |
| 36393, | |
| 36383, | |
| 36385, | |
| 36382, | |
| 36538, | |
| 36637, | |
| 36635, | |
| 36639, | |
| 36649, | |
| 36646, | |
| 36650, | |
| 36636, | |
| 36638, | |
| 36645, | |
| 36969, | |
| 36974, | |
| 36968, | |
| 36973, | |
| 36983, | |
| 37168, | |
| 37165, | |
| 37159, | |
| 37169, | |
| 37255, | |
| 37257, | |
| 37259, | |
| 37251, | |
| 37573, | |
| 37563, | |
| 37559, | |
| 37610, | |
| 37548, | |
| 37604, | |
| 37569, | |
| 37555, | |
| 37564, | |
| 37586, | |
| 37575, | |
| 37616, | |
| 37554, | |
| 38317, | |
| 38321, | |
| 38660, | |
| 38662, | |
| 38663, | |
| 38665, | |
| 38752, | |
| 38797, | |
| 38795, | |
| 38799, | |
| 38945, | |
| 38955, | |
| 38940, | |
| 39091, | |
| 39178, | |
| 39187, | |
| 39186, | |
| 39192, | |
| 39389, | |
| 39376, | |
| 39391, | |
| 39387, | |
| 39377, | |
| 39381, | |
| 39378, | |
| 39385, | |
| 39607, | |
| 39662, | |
| 39663, | |
| 39719, | |
| 39749, | |
| 39748, | |
| 39799, | |
| 39791, | |
| 40198, | |
| 40201, | |
| 40195, | |
| 40617, | |
| 40638, | |
| 40654, | |
| 22696, | |
| 40786, | |
| 20754, | |
| 20760, | |
| 20756, | |
| 20752, | |
| 20757, | |
| 20864, | |
| 20906, | |
| 20957, | |
| 21137, | |
| 21139, | |
| 21235, | |
| 22105, | |
| 22123, | |
| 22137, | |
| 22121, | |
| 22116, | |
| 22136, | |
| 22122, | |
| 22120, | |
| 22117, | |
| 22129, | |
| 22127, | |
| 22124, | |
| 22114, | |
| 22134, | |
| 22721, | |
| 22718, | |
| 22727, | |
| 22725, | |
| 22894, | |
| 23325, | |
| 23348, | |
| 23416, | |
| 23536, | |
| 23566, | |
| 24394, | |
| 25010, | |
| 24977, | |
| 25001, | |
| 24970, | |
| 25037, | |
| 25014, | |
| 25022, | |
| 25034, | |
| 25032, | |
| 25136, | |
| 25797, | |
| 25793, | |
| 25803, | |
| 25787, | |
| 25788, | |
| 25818, | |
| 25796, | |
| 25799, | |
| 25794, | |
| 25805, | |
| 25791, | |
| 25810, | |
| 25812, | |
| 25790, | |
| 25972, | |
| 26310, | |
| 26313, | |
| 26297, | |
| 26308, | |
| 26311, | |
| 26296, | |
| 27197, | |
| 27192, | |
| 27194, | |
| 27225, | |
| 27243, | |
| 27224, | |
| 27193, | |
| 27204, | |
| 27234, | |
| 27233, | |
| 27211, | |
| 27207, | |
| 27189, | |
| 27231, | |
| 27208, | |
| 27481, | |
| 27511, | |
| 27653, | |
| 28610, | |
| 28593, | |
| 28577, | |
| 28611, | |
| 28580, | |
| 28609, | |
| 28583, | |
| 28595, | |
| 28608, | |
| 28601, | |
| 28598, | |
| 28582, | |
| 28576, | |
| 28596, | |
| 29118, | |
| 29129, | |
| 29136, | |
| 29138, | |
| 29128, | |
| 29141, | |
| 29113, | |
| 29134, | |
| 29145, | |
| 29148, | |
| 29123, | |
| 29124, | |
| 29544, | |
| 29852, | |
| 29859, | |
| 29848, | |
| 29855, | |
| 29854, | |
| 29922, | |
| 29964, | |
| 29965, | |
| 30260, | |
| 30264, | |
| 30266, | |
| 30439, | |
| 30437, | |
| 30624, | |
| 30622, | |
| 30623, | |
| 30629, | |
| 30952, | |
| 30938, | |
| 30956, | |
| 30951, | |
| 31142, | |
| 31309, | |
| 31310, | |
| 31302, | |
| 31308, | |
| 31307, | |
| 31418, | |
| 31705, | |
| 31761, | |
| 31689, | |
| 31716, | |
| 31707, | |
| 31713, | |
| 31721, | |
| 31718, | |
| 31957, | |
| 31958, | |
| 32266, | |
| 32273, | |
| 32264, | |
| 32283, | |
| 32291, | |
| 32286, | |
| 32285, | |
| 32265, | |
| 32272, | |
| 32633, | |
| 32690, | |
| 32752, | |
| 32753, | |
| 32750, | |
| 32808, | |
| 33203, | |
| 33193, | |
| 33192, | |
| 33275, | |
| 33288, | |
| 33368, | |
| 33369, | |
| 34122, | |
| 34137, | |
| 34120, | |
| 34152, | |
| 34153, | |
| 34115, | |
| 34121, | |
| 34157, | |
| 34154, | |
| 34142, | |
| 34691, | |
| 34719, | |
| 34718, | |
| 34722, | |
| 34701, | |
| 34913, | |
| 35114, | |
| 35122, | |
| 35109, | |
| 35115, | |
| 35105, | |
| 35242, | |
| 35238, | |
| 35558, | |
| 35578, | |
| 35563, | |
| 35569, | |
| 35584, | |
| 35548, | |
| 35559, | |
| 35566, | |
| 35582, | |
| 35585, | |
| 35586, | |
| 35575, | |
| 35565, | |
| 35571, | |
| 35574, | |
| 35580, | |
| 35947, | |
| 35949, | |
| 35987, | |
| 36084, | |
| 36420, | |
| 36401, | |
| 36404, | |
| 36418, | |
| 36409, | |
| 36405, | |
| 36667, | |
| 36655, | |
| 36664, | |
| 36659, | |
| 36776, | |
| 36774, | |
| 36981, | |
| 36980, | |
| 36984, | |
| 36978, | |
| 36988, | |
| 36986, | |
| 37172, | |
| 37266, | |
| 37664, | |
| 37686, | |
| 37624, | |
| 37683, | |
| 37679, | |
| 37666, | |
| 37628, | |
| 37675, | |
| 37636, | |
| 37658, | |
| 37648, | |
| 37670, | |
| 37665, | |
| 37653, | |
| 37678, | |
| 37657, | |
| 38331, | |
| 38567, | |
| 38568, | |
| 38570, | |
| 38613, | |
| 38670, | |
| 38673, | |
| 38678, | |
| 38669, | |
| 38675, | |
| 38671, | |
| 38747, | |
| 38748, | |
| 38758, | |
| 38808, | |
| 38960, | |
| 38968, | |
| 38971, | |
| 38967, | |
| 38957, | |
| 38969, | |
| 38948, | |
| 39184, | |
| 39208, | |
| 39198, | |
| 39195, | |
| 39201, | |
| 39194, | |
| 39405, | |
| 39394, | |
| 39409, | |
| 39608, | |
| 39612, | |
| 39675, | |
| 39661, | |
| 39720, | |
| 39825, | |
| 40213, | |
| 40227, | |
| 40230, | |
| 40232, | |
| 40210, | |
| 40219, | |
| 40664, | |
| 40660, | |
| 40845, | |
| 40860, | |
| 20778, | |
| 20767, | |
| 20769, | |
| 20786, | |
| 21237, | |
| 22158, | |
| 22144, | |
| 22160, | |
| 22149, | |
| 22151, | |
| 22159, | |
| 22741, | |
| 22739, | |
| 22737, | |
| 22734, | |
| 23344, | |
| 23338, | |
| 23332, | |
| 23418, | |
| 23607, | |
| 23656, | |
| 23996, | |
| 23994, | |
| 23997, | |
| 23992, | |
| 24171, | |
| 24396, | |
| 24509, | |
| 25033, | |
| 25026, | |
| 25031, | |
| 25062, | |
| 25035, | |
| 25138, | |
| 25140, | |
| 25806, | |
| 25802, | |
| 25816, | |
| 25824, | |
| 25840, | |
| 25830, | |
| 25836, | |
| 25841, | |
| 25826, | |
| 25837, | |
| 25986, | |
| 25987, | |
| 26329, | |
| 26326, | |
| 27264, | |
| 27284, | |
| 27268, | |
| 27298, | |
| 27292, | |
| 27355, | |
| 27299, | |
| 27262, | |
| 27287, | |
| 27280, | |
| 27296, | |
| 27484, | |
| 27566, | |
| 27610, | |
| 27656, | |
| 28632, | |
| 28657, | |
| 28639, | |
| 28640, | |
| 28635, | |
| 28644, | |
| 28651, | |
| 28655, | |
| 28544, | |
| 28652, | |
| 28641, | |
| 28649, | |
| 28629, | |
| 28654, | |
| 28656, | |
| 29159, | |
| 29151, | |
| 29166, | |
| 29158, | |
| 29157, | |
| 29165, | |
| 29164, | |
| 29172, | |
| 29152, | |
| 29237, | |
| 29254, | |
| 29552, | |
| 29554, | |
| 29865, | |
| 29872, | |
| 29862, | |
| 29864, | |
| 30278, | |
| 30274, | |
| 30284, | |
| 30442, | |
| 30643, | |
| 30634, | |
| 30640, | |
| 30636, | |
| 30631, | |
| 30637, | |
| 30703, | |
| 30967, | |
| 30970, | |
| 30964, | |
| 30959, | |
| 30977, | |
| 31143, | |
| 31146, | |
| 31319, | |
| 31423, | |
| 31751, | |
| 31757, | |
| 31742, | |
| 31735, | |
| 31756, | |
| 31712, | |
| 31968, | |
| 31964, | |
| 31966, | |
| 31970, | |
| 31967, | |
| 31961, | |
| 31965, | |
| 32302, | |
| 32318, | |
| 32326, | |
| 32311, | |
| 32306, | |
| 32323, | |
| 32299, | |
| 32317, | |
| 32305, | |
| 32325, | |
| 32321, | |
| 32308, | |
| 32313, | |
| 32328, | |
| 32309, | |
| 32319, | |
| 32303, | |
| 32580, | |
| 32755, | |
| 32764, | |
| 32881, | |
| 32882, | |
| 32880, | |
| 32879, | |
| 32883, | |
| 33222, | |
| 33219, | |
| 33210, | |
| 33218, | |
| 33216, | |
| 33215, | |
| 33213, | |
| 33225, | |
| 33214, | |
| 33256, | |
| 33289, | |
| 33393, | |
| 34218, | |
| 34180, | |
| 34174, | |
| 34204, | |
| 34193, | |
| 34196, | |
| 34223, | |
| 34203, | |
| 34183, | |
| 34216, | |
| 34186, | |
| 34407, | |
| 34752, | |
| 34769, | |
| 34739, | |
| 34770, | |
| 34758, | |
| 34731, | |
| 34747, | |
| 34746, | |
| 34760, | |
| 34763, | |
| 35131, | |
| 35126, | |
| 35140, | |
| 35128, | |
| 35133, | |
| 35244, | |
| 35598, | |
| 35607, | |
| 35609, | |
| 35611, | |
| 35594, | |
| 35616, | |
| 35613, | |
| 35588, | |
| 35600, | |
| 35905, | |
| 35903, | |
| 35955, | |
| 36090, | |
| 36093, | |
| 36092, | |
| 36088, | |
| 36091, | |
| 36264, | |
| 36425, | |
| 36427, | |
| 36424, | |
| 36426, | |
| 36676, | |
| 36670, | |
| 36674, | |
| 36677, | |
| 36671, | |
| 36991, | |
| 36989, | |
| 36996, | |
| 36993, | |
| 36994, | |
| 36992, | |
| 37177, | |
| 37283, | |
| 37278, | |
| 37276, | |
| 37709, | |
| 37762, | |
| 37672, | |
| 37749, | |
| 37706, | |
| 37733, | |
| 37707, | |
| 37656, | |
| 37758, | |
| 37740, | |
| 37723, | |
| 37744, | |
| 37722, | |
| 37716, | |
| 38346, | |
| 38347, | |
| 38348, | |
| 38344, | |
| 38342, | |
| 38577, | |
| 38584, | |
| 38614, | |
| 38684, | |
| 38686, | |
| 38816, | |
| 38867, | |
| 38982, | |
| 39094, | |
| 39221, | |
| 39425, | |
| 39423, | |
| 39854, | |
| 39851, | |
| 39850, | |
| 39853, | |
| 40251, | |
| 40255, | |
| 40587, | |
| 40655, | |
| 40670, | |
| 40668, | |
| 40669, | |
| 40667, | |
| 40766, | |
| 40779, | |
| 21474, | |
| 22165, | |
| 22190, | |
| 22745, | |
| 22744, | |
| 23352, | |
| 24413, | |
| 25059, | |
| 25139, | |
| 25844, | |
| 25842, | |
| 25854, | |
| 25862, | |
| 25850, | |
| 25851, | |
| 25847, | |
| 26039, | |
| 26332, | |
| 26406, | |
| 27315, | |
| 27308, | |
| 27331, | |
| 27323, | |
| 27320, | |
| 27330, | |
| 27310, | |
| 27311, | |
| 27487, | |
| 27512, | |
| 27567, | |
| 28681, | |
| 28683, | |
| 28670, | |
| 28678, | |
| 28666, | |
| 28689, | |
| 28687, | |
| 29179, | |
| 29180, | |
| 29182, | |
| 29176, | |
| 29559, | |
| 29557, | |
| 29863, | |
| 29887, | |
| 29973, | |
| 30294, | |
| 30296, | |
| 30290, | |
| 30653, | |
| 30655, | |
| 30651, | |
| 30652, | |
| 30990, | |
| 31150, | |
| 31329, | |
| 31330, | |
| 31328, | |
| 31428, | |
| 31429, | |
| 31787, | |
| 31783, | |
| 31786, | |
| 31774, | |
| 31779, | |
| 31777, | |
| 31975, | |
| 32340, | |
| 32341, | |
| 32350, | |
| 32346, | |
| 32353, | |
| 32338, | |
| 32345, | |
| 32584, | |
| 32761, | |
| 32763, | |
| 32887, | |
| 32886, | |
| 33229, | |
| 33231, | |
| 33290, | |
| 34255, | |
| 34217, | |
| 34253, | |
| 34256, | |
| 34249, | |
| 34224, | |
| 34234, | |
| 34233, | |
| 34214, | |
| 34799, | |
| 34796, | |
| 34802, | |
| 34784, | |
| 35206, | |
| 35250, | |
| 35316, | |
| 35624, | |
| 35641, | |
| 35628, | |
| 35627, | |
| 35920, | |
| 36101, | |
| 36441, | |
| 36451, | |
| 36454, | |
| 36452, | |
| 36447, | |
| 36437, | |
| 36544, | |
| 36681, | |
| 36685, | |
| 36999, | |
| 36995, | |
| 37000, | |
| 37291, | |
| 37292, | |
| 37328, | |
| 37780, | |
| 37770, | |
| 37782, | |
| 37794, | |
| 37811, | |
| 37806, | |
| 37804, | |
| 37808, | |
| 37784, | |
| 37786, | |
| 37783, | |
| 38356, | |
| 38358, | |
| 38352, | |
| 38357, | |
| 38626, | |
| 38620, | |
| 38617, | |
| 38619, | |
| 38622, | |
| 38692, | |
| 38819, | |
| 38822, | |
| 38829, | |
| 38905, | |
| 38989, | |
| 38991, | |
| 38988, | |
| 38990, | |
| 38995, | |
| 39098, | |
| 39230, | |
| 39231, | |
| 39229, | |
| 39214, | |
| 39333, | |
| 39438, | |
| 39617, | |
| 39683, | |
| 39686, | |
| 39759, | |
| 39758, | |
| 39757, | |
| 39882, | |
| 39881, | |
| 39933, | |
| 39880, | |
| 39872, | |
| 40273, | |
| 40285, | |
| 40288, | |
| 40672, | |
| 40725, | |
| 40748, | |
| 20787, | |
| 22181, | |
| 22750, | |
| 22751, | |
| 22754, | |
| 23541, | |
| 40848, | |
| 24300, | |
| 25074, | |
| 25079, | |
| 25078, | |
| 25077, | |
| 25856, | |
| 25871, | |
| 26336, | |
| 26333, | |
| 27365, | |
| 27357, | |
| 27354, | |
| 27347, | |
| 28699, | |
| 28703, | |
| 28712, | |
| 28698, | |
| 28701, | |
| 28693, | |
| 28696, | |
| 29190, | |
| 29197, | |
| 29272, | |
| 29346, | |
| 29560, | |
| 29562, | |
| 29885, | |
| 29898, | |
| 29923, | |
| 30087, | |
| 30086, | |
| 30303, | |
| 30305, | |
| 30663, | |
| 31001, | |
| 31153, | |
| 31339, | |
| 31337, | |
| 31806, | |
| 31807, | |
| 31800, | |
| 31805, | |
| 31799, | |
| 31808, | |
| 32363, | |
| 32365, | |
| 32377, | |
| 32361, | |
| 32362, | |
| 32645, | |
| 32371, | |
| 32694, | |
| 32697, | |
| 32696, | |
| 33240, | |
| 34281, | |
| 34269, | |
| 34282, | |
| 34261, | |
| 34276, | |
| 34277, | |
| 34295, | |
| 34811, | |
| 34821, | |
| 34829, | |
| 34809, | |
| 34814, | |
| 35168, | |
| 35167, | |
| 35158, | |
| 35166, | |
| 35649, | |
| 35676, | |
| 35672, | |
| 35657, | |
| 35674, | |
| 35662, | |
| 35663, | |
| 35654, | |
| 35673, | |
| 36104, | |
| 36106, | |
| 36476, | |
| 36466, | |
| 36487, | |
| 36470, | |
| 36460, | |
| 36474, | |
| 36468, | |
| 36692, | |
| 36686, | |
| 36781, | |
| 37002, | |
| 37003, | |
| 37297, | |
| 37294, | |
| 37857, | |
| 37841, | |
| 37855, | |
| 37827, | |
| 37832, | |
| 37852, | |
| 37853, | |
| 37846, | |
| 37858, | |
| 37837, | |
| 37848, | |
| 37860, | |
| 37847, | |
| 37864, | |
| 38364, | |
| 38580, | |
| 38627, | |
| 38698, | |
| 38695, | |
| 38753, | |
| 38876, | |
| 38907, | |
| 39006, | |
| 39000, | |
| 39003, | |
| 39100, | |
| 39237, | |
| 39241, | |
| 39446, | |
| 39449, | |
| 39693, | |
| 39912, | |
| 39911, | |
| 39894, | |
| 39899, | |
| 40329, | |
| 40289, | |
| 40306, | |
| 40298, | |
| 40300, | |
| 40594, | |
| 40599, | |
| 40595, | |
| 40628, | |
| 21240, | |
| 22184, | |
| 22199, | |
| 22198, | |
| 22196, | |
| 22204, | |
| 22756, | |
| 23360, | |
| 23363, | |
| 23421, | |
| 23542, | |
| 24009, | |
| 25080, | |
| 25082, | |
| 25880, | |
| 25876, | |
| 25881, | |
| 26342, | |
| 26407, | |
| 27372, | |
| 28734, | |
| 28720, | |
| 28722, | |
| 29200, | |
| 29563, | |
| 29903, | |
| 30306, | |
| 30309, | |
| 31014, | |
| 31018, | |
| 31020, | |
| 31019, | |
| 31431, | |
| 31478, | |
| 31820, | |
| 31811, | |
| 31821, | |
| 31983, | |
| 31984, | |
| 36782, | |
| 32381, | |
| 32380, | |
| 32386, | |
| 32588, | |
| 32768, | |
| 33242, | |
| 33382, | |
| 34299, | |
| 34297, | |
| 34321, | |
| 34298, | |
| 34310, | |
| 34315, | |
| 34311, | |
| 34314, | |
| 34836, | |
| 34837, | |
| 35172, | |
| 35258, | |
| 35320, | |
| 35696, | |
| 35692, | |
| 35686, | |
| 35695, | |
| 35679, | |
| 35691, | |
| 36111, | |
| 36109, | |
| 36489, | |
| 36481, | |
| 36485, | |
| 36482, | |
| 37300, | |
| 37323, | |
| 37912, | |
| 37891, | |
| 37885, | |
| 38369, | |
| 38704, | |
| 39108, | |
| 39250, | |
| 39249, | |
| 39336, | |
| 39467, | |
| 39472, | |
| 39479, | |
| 39477, | |
| 39955, | |
| 39949, | |
| 40569, | |
| 40629, | |
| 40680, | |
| 40751, | |
| 40799, | |
| 40803, | |
| 40801, | |
| 20791, | |
| 20792, | |
| 22209, | |
| 22208, | |
| 22210, | |
| 22804, | |
| 23660, | |
| 24013, | |
| 25084, | |
| 25086, | |
| 25885, | |
| 25884, | |
| 26005, | |
| 26345, | |
| 27387, | |
| 27396, | |
| 27386, | |
| 27570, | |
| 28748, | |
| 29211, | |
| 29351, | |
| 29910, | |
| 29908, | |
| 30313, | |
| 30675, | |
| 31824, | |
| 32399, | |
| 32396, | |
| 32700, | |
| 34327, | |
| 34349, | |
| 34330, | |
| 34851, | |
| 34850, | |
| 34849, | |
| 34847, | |
| 35178, | |
| 35180, | |
| 35261, | |
| 35700, | |
| 35703, | |
| 35709, | |
| 36115, | |
| 36490, | |
| 36493, | |
| 36491, | |
| 36703, | |
| 36783, | |
| 37306, | |
| 37934, | |
| 37939, | |
| 37941, | |
| 37946, | |
| 37944, | |
| 37938, | |
| 37931, | |
| 38370, | |
| 38712, | |
| 38713, | |
| 38706, | |
| 38911, | |
| 39015, | |
| 39013, | |
| 39255, | |
| 39493, | |
| 39491, | |
| 39488, | |
| 39486, | |
| 39631, | |
| 39764, | |
| 39761, | |
| 39981, | |
| 39973, | |
| 40367, | |
| 40372, | |
| 40386, | |
| 40376, | |
| 40605, | |
| 40687, | |
| 40729, | |
| 40796, | |
| 40806, | |
| 40807, | |
| 20796, | |
| 20795, | |
| 22216, | |
| 22218, | |
| 22217, | |
| 23423, | |
| 24020, | |
| 24018, | |
| 24398, | |
| 25087, | |
| 25892, | |
| 27402, | |
| 27489, | |
| 28753, | |
| 28760, | |
| 29568, | |
| 29924, | |
| 30090, | |
| 30318, | |
| 30316, | |
| 31155, | |
| 31840, | |
| 31839, | |
| 32894, | |
| 32893, | |
| 33247, | |
| 35186, | |
| 35183, | |
| 35324, | |
| 35712, | |
| 36118, | |
| 36119, | |
| 36497, | |
| 36499, | |
| 36705, | |
| 37192, | |
| 37956, | |
| 37969, | |
| 37970, | |
| 38717, | |
| 38718, | |
| 38851, | |
| 38849, | |
| 39019, | |
| 39253, | |
| 39509, | |
| 39501, | |
| 39634, | |
| 39706, | |
| 40009, | |
| 39985, | |
| 39998, | |
| 39995, | |
| 40403, | |
| 40407, | |
| 40756, | |
| 40812, | |
| 40810, | |
| 40852, | |
| 22220, | |
| 24022, | |
| 25088, | |
| 25891, | |
| 25899, | |
| 25898, | |
| 26348, | |
| 27408, | |
| 29914, | |
| 31434, | |
| 31844, | |
| 31843, | |
| 31845, | |
| 32403, | |
| 32406, | |
| 32404, | |
| 33250, | |
| 34360, | |
| 34367, | |
| 34865, | |
| 35722, | |
| 37008, | |
| 37007, | |
| 37987, | |
| 37984, | |
| 37988, | |
| 38760, | |
| 39023, | |
| 39260, | |
| 39514, | |
| 39515, | |
| 39511, | |
| 39635, | |
| 39636, | |
| 39633, | |
| 40020, | |
| 40023, | |
| 40022, | |
| 40421, | |
| 40607, | |
| 40692, | |
| 22225, | |
| 22761, | |
| 25900, | |
| 28766, | |
| 30321, | |
| 30322, | |
| 30679, | |
| 32592, | |
| 32648, | |
| 34870, | |
| 34873, | |
| 34914, | |
| 35731, | |
| 35730, | |
| 35734, | |
| 33399, | |
| 36123, | |
| 37312, | |
| 37994, | |
| 38722, | |
| 38728, | |
| 38724, | |
| 38854, | |
| 39024, | |
| 39519, | |
| 39714, | |
| 39768, | |
| 40031, | |
| 40441, | |
| 40442, | |
| 40572, | |
| 40573, | |
| 40711, | |
| 40823, | |
| 40818, | |
| 24307, | |
| 27414, | |
| 28771, | |
| 31852, | |
| 31854, | |
| 34875, | |
| 35264, | |
| 36513, | |
| 37313, | |
| 38002, | |
| 38000, | |
| 39025, | |
| 39262, | |
| 39638, | |
| 39715, | |
| 40652, | |
| 28772, | |
| 30682, | |
| 35738, | |
| 38007, | |
| 38857, | |
| 39522, | |
| 39525, | |
| 32412, | |
| 35740, | |
| 36522, | |
| 37317, | |
| 38013, | |
| 38014, | |
| 38012, | |
| 40055, | |
| 40056, | |
| 40695, | |
| 35924, | |
| 38015, | |
| 40474, | |
| 29224, | |
| 39530, | |
| 39729, | |
| 40475, | |
| 40478, | |
| 31858, | |
| 9312, | |
| 9313, | |
| 9314, | |
| 9315, | |
| 9316, | |
| 9317, | |
| 9318, | |
| 9319, | |
| 9320, | |
| 9321, | |
| 9332, | |
| 9333, | |
| 9334, | |
| 9335, | |
| 9336, | |
| 9337, | |
| 9338, | |
| 9339, | |
| 9340, | |
| 9341, | |
| 8560, | |
| 8561, | |
| 8562, | |
| 8563, | |
| 8564, | |
| 8565, | |
| 8566, | |
| 8567, | |
| 8568, | |
| 8569, | |
| 20022, | |
| 20031, | |
| 20101, | |
| 20128, | |
| 20866, | |
| 20886, | |
| 20907, | |
| 21241, | |
| 21304, | |
| 21353, | |
| 21430, | |
| 22794, | |
| 23424, | |
| 24027, | |
| 12083, | |
| 24191, | |
| 24308, | |
| 24400, | |
| 24417, | |
| 25908, | |
| 26080, | |
| 30098, | |
| 30326, | |
| 36789, | |
| 38582, | |
| 168, | |
| 710, | |
| 12541, | |
| 12542, | |
| 12445, | |
| 12446, | |
| 12291, | |
| 20189, | |
| 12293, | |
| 12294, | |
| 12295, | |
| 12540, | |
| 65339, | |
| 65341, | |
| 10045, | |
| 12353, | |
| 12354, | |
| 12355, | |
| 12356, | |
| 12357, | |
| 12358, | |
| 12359, | |
| 12360, | |
| 12361, | |
| 12362, | |
| 12363, | |
| 12364, | |
| 12365, | |
| 12366, | |
| 12367, | |
| 12368, | |
| 12369, | |
| 12370, | |
| 12371, | |
| 12372, | |
| 12373, | |
| 12374, | |
| 12375, | |
| 12376, | |
| 12377, | |
| 12378, | |
| 12379, | |
| 12380, | |
| 12381, | |
| 12382, | |
| 12383, | |
| 12384, | |
| 12385, | |
| 12386, | |
| 12387, | |
| 12388, | |
| 12389, | |
| 12390, | |
| 12391, | |
| 12392, | |
| 12393, | |
| 12394, | |
| 12395, | |
| 12396, | |
| 12397, | |
| 12398, | |
| 12399, | |
| 12400, | |
| 12401, | |
| 12402, | |
| 12403, | |
| 12404, | |
| 12405, | |
| 12406, | |
| 12407, | |
| 12408, | |
| 12409, | |
| 12410, | |
| 12411, | |
| 12412, | |
| 12413, | |
| 12414, | |
| 12415, | |
| 12416, | |
| 12417, | |
| 12418, | |
| 12419, | |
| 12420, | |
| 12421, | |
| 12422, | |
| 12423, | |
| 12424, | |
| 12425, | |
| 12426, | |
| 12427, | |
| 12428, | |
| 12429, | |
| 12430, | |
| 12431, | |
| 12432, | |
| 12433, | |
| 12434, | |
| 12435, | |
| 12449, | |
| 12450, | |
| 12451, | |
| 12452, | |
| 12453, | |
| 12454, | |
| 12455, | |
| 12456, | |
| 12457, | |
| 12458, | |
| 12459, | |
| 12460, | |
| 12461, | |
| 12462, | |
| 12463, | |
| 12464, | |
| 12465, | |
| 12466, | |
| 12467, | |
| 12468, | |
| 12469, | |
| 12470, | |
| 12471, | |
| 12472, | |
| 12473, | |
| 12474, | |
| 12475, | |
| 12476, | |
| 12477, | |
| 12478, | |
| 12479, | |
| 12480, | |
| 12481, | |
| 12482, | |
| 12483, | |
| 12484, | |
| 12485, | |
| 12486, | |
| 12487, | |
| 12488, | |
| 12489, | |
| 12490, | |
| 12491, | |
| 12492, | |
| 12493, | |
| 12494, | |
| 12495, | |
| 12496, | |
| 12497, | |
| 12498, | |
| 12499, | |
| 12500, | |
| 12501, | |
| 12502, | |
| 12503, | |
| 12504, | |
| 12505, | |
| 12506, | |
| 12507, | |
| 12508, | |
| 12509, | |
| 12510, | |
| 12511, | |
| 12512, | |
| 12513, | |
| 12514, | |
| 12515, | |
| 12516, | |
| 12517, | |
| 12518, | |
| 12519, | |
| 12520, | |
| 12521, | |
| 12522, | |
| 12523, | |
| 12524, | |
| 12525, | |
| 12526, | |
| 12527, | |
| 12528, | |
| 12529, | |
| 12530, | |
| 12531, | |
| 12532, | |
| 12533, | |
| 12534, | |
| 1040, | |
| 1041, | |
| 1042, | |
| 1043, | |
| 1044, | |
| 1045, | |
| 1025, | |
| 1046, | |
| 1047, | |
| 1048, | |
| 1049, | |
| 1050, | |
| 1051, | |
| 1052, | |
| 1053, | |
| 1054, | |
| 1055, | |
| 1056, | |
| 1057, | |
| 1058, | |
| 1059, | |
| 1060, | |
| 1061, | |
| 1062, | |
| 1063, | |
| 1064, | |
| 1065, | |
| 1066, | |
| 1067, | |
| 1068, | |
| 1069, | |
| 1070, | |
| 1071, | |
| 1072, | |
| 1073, | |
| 1074, | |
| 1075, | |
| 1076, | |
| 1077, | |
| 1105, | |
| 1078, | |
| 1079, | |
| 1080, | |
| 1081, | |
| 1082, | |
| 1083, | |
| 1084, | |
| 1085, | |
| 1086, | |
| 1087, | |
| 1088, | |
| 1089, | |
| 1090, | |
| 1091, | |
| 1092, | |
| 1093, | |
| 1094, | |
| 1095, | |
| 1096, | |
| 1097, | |
| 1098, | |
| 1099, | |
| 1100, | |
| 1101, | |
| 1102, | |
| 1103, | |
| 8679, | |
| 8632, | |
| 8633, | |
| 12751, | |
| 131276, | |
| 20058, | |
| 131210, | |
| 20994, | |
| 17553, | |
| 40880, | |
| 20872, | |
| 40881, | |
| 161287, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 65506, | |
| 65508, | |
| 65287, | |
| 65282, | |
| 12849, | |
| 8470, | |
| 8481, | |
| 12443, | |
| 12444, | |
| 11904, | |
| 11908, | |
| 11910, | |
| 11911, | |
| 11912, | |
| 11914, | |
| 11916, | |
| 11917, | |
| 11925, | |
| 11932, | |
| 11933, | |
| 11941, | |
| 11943, | |
| 11946, | |
| 11948, | |
| 11950, | |
| 11958, | |
| 11964, | |
| 11966, | |
| 11974, | |
| 11978, | |
| 11980, | |
| 11981, | |
| 11983, | |
| 11990, | |
| 11991, | |
| 11998, | |
| 12003, | |
| null, | |
| null, | |
| null, | |
| 643, | |
| 592, | |
| 603, | |
| 596, | |
| 629, | |
| 339, | |
| 248, | |
| 331, | |
| 650, | |
| 618, | |
| 20034, | |
| 20060, | |
| 20981, | |
| 21274, | |
| 21378, | |
| 19975, | |
| 19980, | |
| 20039, | |
| 20109, | |
| 22231, | |
| 64012, | |
| 23662, | |
| 24435, | |
| 19983, | |
| 20871, | |
| 19982, | |
| 20014, | |
| 20115, | |
| 20162, | |
| 20169, | |
| 20168, | |
| 20888, | |
| 21244, | |
| 21356, | |
| 21433, | |
| 22304, | |
| 22787, | |
| 22828, | |
| 23568, | |
| 24063, | |
| 26081, | |
| 27571, | |
| 27596, | |
| 27668, | |
| 29247, | |
| 20017, | |
| 20028, | |
| 20200, | |
| 20188, | |
| 20201, | |
| 20193, | |
| 20189, | |
| 20186, | |
| 21004, | |
| 21276, | |
| 21324, | |
| 22306, | |
| 22307, | |
| 22807, | |
| 22831, | |
| 23425, | |
| 23428, | |
| 23570, | |
| 23611, | |
| 23668, | |
| 23667, | |
| 24068, | |
| 24192, | |
| 24194, | |
| 24521, | |
| 25097, | |
| 25168, | |
| 27669, | |
| 27702, | |
| 27715, | |
| 27711, | |
| 27707, | |
| 29358, | |
| 29360, | |
| 29578, | |
| 31160, | |
| 32906, | |
| 38430, | |
| 20238, | |
| 20248, | |
| 20268, | |
| 20213, | |
| 20244, | |
| 20209, | |
| 20224, | |
| 20215, | |
| 20232, | |
| 20253, | |
| 20226, | |
| 20229, | |
| 20258, | |
| 20243, | |
| 20228, | |
| 20212, | |
| 20242, | |
| 20913, | |
| 21011, | |
| 21001, | |
| 21008, | |
| 21158, | |
| 21282, | |
| 21279, | |
| 21325, | |
| 21386, | |
| 21511, | |
| 22241, | |
| 22239, | |
| 22318, | |
| 22314, | |
| 22324, | |
| 22844, | |
| 22912, | |
| 22908, | |
| 22917, | |
| 22907, | |
| 22910, | |
| 22903, | |
| 22911, | |
| 23382, | |
| 23573, | |
| 23589, | |
| 23676, | |
| 23674, | |
| 23675, | |
| 23678, | |
| 24031, | |
| 24181, | |
| 24196, | |
| 24322, | |
| 24346, | |
| 24436, | |
| 24533, | |
| 24532, | |
| 24527, | |
| 25180, | |
| 25182, | |
| 25188, | |
| 25185, | |
| 25190, | |
| 25186, | |
| 25177, | |
| 25184, | |
| 25178, | |
| 25189, | |
| 26095, | |
| 26094, | |
| 26430, | |
| 26425, | |
| 26424, | |
| 26427, | |
| 26426, | |
| 26431, | |
| 26428, | |
| 26419, | |
| 27672, | |
| 27718, | |
| 27730, | |
| 27740, | |
| 27727, | |
| 27722, | |
| 27732, | |
| 27723, | |
| 27724, | |
| 28785, | |
| 29278, | |
| 29364, | |
| 29365, | |
| 29582, | |
| 29994, | |
| 30335, | |
| 31349, | |
| 32593, | |
| 33400, | |
| 33404, | |
| 33408, | |
| 33405, | |
| 33407, | |
| 34381, | |
| 35198, | |
| 37017, | |
| 37015, | |
| 37016, | |
| 37019, | |
| 37012, | |
| 38434, | |
| 38436, | |
| 38432, | |
| 38435, | |
| 20310, | |
| 20283, | |
| 20322, | |
| 20297, | |
| 20307, | |
| 20324, | |
| 20286, | |
| 20327, | |
| 20306, | |
| 20319, | |
| 20289, | |
| 20312, | |
| 20269, | |
| 20275, | |
| 20287, | |
| 20321, | |
| 20879, | |
| 20921, | |
| 21020, | |
| 21022, | |
| 21025, | |
| 21165, | |
| 21166, | |
| 21257, | |
| 21347, | |
| 21362, | |
| 21390, | |
| 21391, | |
| 21552, | |
| 21559, | |
| 21546, | |
| 21588, | |
| 21573, | |
| 21529, | |
| 21532, | |
| 21541, | |
| 21528, | |
| 21565, | |
| 21583, | |
| 21569, | |
| 21544, | |
| 21540, | |
| 21575, | |
| 22254, | |
| 22247, | |
| 22245, | |
| 22337, | |
| 22341, | |
| 22348, | |
| 22345, | |
| 22347, | |
| 22354, | |
| 22790, | |
| 22848, | |
| 22950, | |
| 22936, | |
| 22944, | |
| 22935, | |
| 22926, | |
| 22946, | |
| 22928, | |
| 22927, | |
| 22951, | |
| 22945, | |
| 23438, | |
| 23442, | |
| 23592, | |
| 23594, | |
| 23693, | |
| 23695, | |
| 23688, | |
| 23691, | |
| 23689, | |
| 23698, | |
| 23690, | |
| 23686, | |
| 23699, | |
| 23701, | |
| 24032, | |
| 24074, | |
| 24078, | |
| 24203, | |
| 24201, | |
| 24204, | |
| 24200, | |
| 24205, | |
| 24325, | |
| 24349, | |
| 24440, | |
| 24438, | |
| 24530, | |
| 24529, | |
| 24528, | |
| 24557, | |
| 24552, | |
| 24558, | |
| 24563, | |
| 24545, | |
| 24548, | |
| 24547, | |
| 24570, | |
| 24559, | |
| 24567, | |
| 24571, | |
| 24576, | |
| 24564, | |
| 25146, | |
| 25219, | |
| 25228, | |
| 25230, | |
| 25231, | |
| 25236, | |
| 25223, | |
| 25201, | |
| 25211, | |
| 25210, | |
| 25200, | |
| 25217, | |
| 25224, | |
| 25207, | |
| 25213, | |
| 25202, | |
| 25204, | |
| 25911, | |
| 26096, | |
| 26100, | |
| 26099, | |
| 26098, | |
| 26101, | |
| 26437, | |
| 26439, | |
| 26457, | |
| 26453, | |
| 26444, | |
| 26440, | |
| 26461, | |
| 26445, | |
| 26458, | |
| 26443, | |
| 27600, | |
| 27673, | |
| 27674, | |
| 27768, | |
| 27751, | |
| 27755, | |
| 27780, | |
| 27787, | |
| 27791, | |
| 27761, | |
| 27759, | |
| 27753, | |
| 27802, | |
| 27757, | |
| 27783, | |
| 27797, | |
| 27804, | |
| 27750, | |
| 27763, | |
| 27749, | |
| 27771, | |
| 27790, | |
| 28788, | |
| 28794, | |
| 29283, | |
| 29375, | |
| 29373, | |
| 29379, | |
| 29382, | |
| 29377, | |
| 29370, | |
| 29381, | |
| 29589, | |
| 29591, | |
| 29587, | |
| 29588, | |
| 29586, | |
| 30010, | |
| 30009, | |
| 30100, | |
| 30101, | |
| 30337, | |
| 31037, | |
| 32820, | |
| 32917, | |
| 32921, | |
| 32912, | |
| 32914, | |
| 32924, | |
| 33424, | |
| 33423, | |
| 33413, | |
| 33422, | |
| 33425, | |
| 33427, | |
| 33418, | |
| 33411, | |
| 33412, | |
| 35960, | |
| 36809, | |
| 36799, | |
| 37023, | |
| 37025, | |
| 37029, | |
| 37022, | |
| 37031, | |
| 37024, | |
| 38448, | |
| 38440, | |
| 38447, | |
| 38445, | |
| 20019, | |
| 20376, | |
| 20348, | |
| 20357, | |
| 20349, | |
| 20352, | |
| 20359, | |
| 20342, | |
| 20340, | |
| 20361, | |
| 20356, | |
| 20343, | |
| 20300, | |
| 20375, | |
| 20330, | |
| 20378, | |
| 20345, | |
| 20353, | |
| 20344, | |
| 20368, | |
| 20380, | |
| 20372, | |
| 20382, | |
| 20370, | |
| 20354, | |
| 20373, | |
| 20331, | |
| 20334, | |
| 20894, | |
| 20924, | |
| 20926, | |
| 21045, | |
| 21042, | |
| 21043, | |
| 21062, | |
| 21041, | |
| 21180, | |
| 21258, | |
| 21259, | |
| 21308, | |
| 21394, | |
| 21396, | |
| 21639, | |
| 21631, | |
| 21633, | |
| 21649, | |
| 21634, | |
| 21640, | |
| 21611, | |
| 21626, | |
| 21630, | |
| 21605, | |
| 21612, | |
| 21620, | |
| 21606, | |
| 21645, | |
| 21615, | |
| 21601, | |
| 21600, | |
| 21656, | |
| 21603, | |
| 21607, | |
| 21604, | |
| 22263, | |
| 22265, | |
| 22383, | |
| 22386, | |
| 22381, | |
| 22379, | |
| 22385, | |
| 22384, | |
| 22390, | |
| 22400, | |
| 22389, | |
| 22395, | |
| 22387, | |
| 22388, | |
| 22370, | |
| 22376, | |
| 22397, | |
| 22796, | |
| 22853, | |
| 22965, | |
| 22970, | |
| 22991, | |
| 22990, | |
| 22962, | |
| 22988, | |
| 22977, | |
| 22966, | |
| 22972, | |
| 22979, | |
| 22998, | |
| 22961, | |
| 22973, | |
| 22976, | |
| 22984, | |
| 22964, | |
| 22983, | |
| 23394, | |
| 23397, | |
| 23443, | |
| 23445, | |
| 23620, | |
| 23623, | |
| 23726, | |
| 23716, | |
| 23712, | |
| 23733, | |
| 23727, | |
| 23720, | |
| 23724, | |
| 23711, | |
| 23715, | |
| 23725, | |
| 23714, | |
| 23722, | |
| 23719, | |
| 23709, | |
| 23717, | |
| 23734, | |
| 23728, | |
| 23718, | |
| 24087, | |
| 24084, | |
| 24089, | |
| 24360, | |
| 24354, | |
| 24355, | |
| 24356, | |
| 24404, | |
| 24450, | |
| 24446, | |
| 24445, | |
| 24542, | |
| 24549, | |
| 24621, | |
| 24614, | |
| 24601, | |
| 24626, | |
| 24587, | |
| 24628, | |
| 24586, | |
| 24599, | |
| 24627, | |
| 24602, | |
| 24606, | |
| 24620, | |
| 24610, | |
| 24589, | |
| 24592, | |
| 24622, | |
| 24595, | |
| 24593, | |
| 24588, | |
| 24585, | |
| 24604, | |
| 25108, | |
| 25149, | |
| 25261, | |
| 25268, | |
| 25297, | |
| 25278, | |
| 25258, | |
| 25270, | |
| 25290, | |
| 25262, | |
| 25267, | |
| 25263, | |
| 25275, | |
| 25257, | |
| 25264, | |
| 25272, | |
| 25917, | |
| 26024, | |
| 26043, | |
| 26121, | |
| 26108, | |
| 26116, | |
| 26130, | |
| 26120, | |
| 26107, | |
| 26115, | |
| 26123, | |
| 26125, | |
| 26117, | |
| 26109, | |
| 26129, | |
| 26128, | |
| 26358, | |
| 26378, | |
| 26501, | |
| 26476, | |
| 26510, | |
| 26514, | |
| 26486, | |
| 26491, | |
| 26520, | |
| 26502, | |
| 26500, | |
| 26484, | |
| 26509, | |
| 26508, | |
| 26490, | |
| 26527, | |
| 26513, | |
| 26521, | |
| 26499, | |
| 26493, | |
| 26497, | |
| 26488, | |
| 26489, | |
| 26516, | |
| 27429, | |
| 27520, | |
| 27518, | |
| 27614, | |
| 27677, | |
| 27795, | |
| 27884, | |
| 27883, | |
| 27886, | |
| 27865, | |
| 27830, | |
| 27860, | |
| 27821, | |
| 27879, | |
| 27831, | |
| 27856, | |
| 27842, | |
| 27834, | |
| 27843, | |
| 27846, | |
| 27885, | |
| 27890, | |
| 27858, | |
| 27869, | |
| 27828, | |
| 27786, | |
| 27805, | |
| 27776, | |
| 27870, | |
| 27840, | |
| 27952, | |
| 27853, | |
| 27847, | |
| 27824, | |
| 27897, | |
| 27855, | |
| 27881, | |
| 27857, | |
| 28820, | |
| 28824, | |
| 28805, | |
| 28819, | |
| 28806, | |
| 28804, | |
| 28817, | |
| 28822, | |
| 28802, | |
| 28826, | |
| 28803, | |
| 29290, | |
| 29398, | |
| 29387, | |
| 29400, | |
| 29385, | |
| 29404, | |
| 29394, | |
| 29396, | |
| 29402, | |
| 29388, | |
| 29393, | |
| 29604, | |
| 29601, | |
| 29613, | |
| 29606, | |
| 29602, | |
| 29600, | |
| 29612, | |
| 29597, | |
| 29917, | |
| 29928, | |
| 30015, | |
| 30016, | |
| 30014, | |
| 30092, | |
| 30104, | |
| 30383, | |
| 30451, | |
| 30449, | |
| 30448, | |
| 30453, | |
| 30712, | |
| 30716, | |
| 30713, | |
| 30715, | |
| 30714, | |
| 30711, | |
| 31042, | |
| 31039, | |
| 31173, | |
| 31352, | |
| 31355, | |
| 31483, | |
| 31861, | |
| 31997, | |
| 32821, | |
| 32911, | |
| 32942, | |
| 32931, | |
| 32952, | |
| 32949, | |
| 32941, | |
| 33312, | |
| 33440, | |
| 33472, | |
| 33451, | |
| 33434, | |
| 33432, | |
| 33435, | |
| 33461, | |
| 33447, | |
| 33454, | |
| 33468, | |
| 33438, | |
| 33466, | |
| 33460, | |
| 33448, | |
| 33441, | |
| 33449, | |
| 33474, | |
| 33444, | |
| 33475, | |
| 33462, | |
| 33442, | |
| 34416, | |
| 34415, | |
| 34413, | |
| 34414, | |
| 35926, | |
| 36818, | |
| 36811, | |
| 36819, | |
| 36813, | |
| 36822, | |
| 36821, | |
| 36823, | |
| 37042, | |
| 37044, | |
| 37039, | |
| 37043, | |
| 37040, | |
| 38457, | |
| 38461, | |
| 38460, | |
| 38458, | |
| 38467, | |
| 20429, | |
| 20421, | |
| 20435, | |
| 20402, | |
| 20425, | |
| 20427, | |
| 20417, | |
| 20436, | |
| 20444, | |
| 20441, | |
| 20411, | |
| 20403, | |
| 20443, | |
| 20423, | |
| 20438, | |
| 20410, | |
| 20416, | |
| 20409, | |
| 20460, | |
| 21060, | |
| 21065, | |
| 21184, | |
| 21186, | |
| 21309, | |
| 21372, | |
| 21399, | |
| 21398, | |
| 21401, | |
| 21400, | |
| 21690, | |
| 21665, | |
| 21677, | |
| 21669, | |
| 21711, | |
| 21699, | |
| 33549, | |
| 21687, | |
| 21678, | |
| 21718, | |
| 21686, | |
| 21701, | |
| 21702, | |
| 21664, | |
| 21616, | |
| 21692, | |
| 21666, | |
| 21694, | |
| 21618, | |
| 21726, | |
| 21680, | |
| 22453, | |
| 22430, | |
| 22431, | |
| 22436, | |
| 22412, | |
| 22423, | |
| 22429, | |
| 22427, | |
| 22420, | |
| 22424, | |
| 22415, | |
| 22425, | |
| 22437, | |
| 22426, | |
| 22421, | |
| 22772, | |
| 22797, | |
| 22867, | |
| 23009, | |
| 23006, | |
| 23022, | |
| 23040, | |
| 23025, | |
| 23005, | |
| 23034, | |
| 23037, | |
| 23036, | |
| 23030, | |
| 23012, | |
| 23026, | |
| 23031, | |
| 23003, | |
| 23017, | |
| 23027, | |
| 23029, | |
| 23008, | |
| 23038, | |
| 23028, | |
| 23021, | |
| 23464, | |
| 23628, | |
| 23760, | |
| 23768, | |
| 23756, | |
| 23767, | |
| 23755, | |
| 23771, | |
| 23774, | |
| 23770, | |
| 23753, | |
| 23751, | |
| 23754, | |
| 23766, | |
| 23763, | |
| 23764, | |
| 23759, | |
| 23752, | |
| 23750, | |
| 23758, | |
| 23775, | |
| 23800, | |
| 24057, | |
| 24097, | |
| 24098, | |
| 24099, | |
| 24096, | |
| 24100, | |
| 24240, | |
| 24228, | |
| 24226, | |
| 24219, | |
| 24227, | |
| 24229, | |
| 24327, | |
| 24366, | |
| 24406, | |
| 24454, | |
| 24631, | |
| 24633, | |
| 24660, | |
| 24690, | |
| 24670, | |
| 24645, | |
| 24659, | |
| 24647, | |
| 24649, | |
| 24667, | |
| 24652, | |
| 24640, | |
| 24642, | |
| 24671, | |
| 24612, | |
| 24644, | |
| 24664, | |
| 24678, | |
| 24686, | |
| 25154, | |
| 25155, | |
| 25295, | |
| 25357, | |
| 25355, | |
| 25333, | |
| 25358, | |
| 25347, | |
| 25323, | |
| 25337, | |
| 25359, | |
| 25356, | |
| 25336, | |
| 25334, | |
| 25344, | |
| 25363, | |
| 25364, | |
| 25338, | |
| 25365, | |
| 25339, | |
| 25328, | |
| 25921, | |
| 25923, | |
| 26026, | |
| 26047, | |
| 26166, | |
| 26145, | |
| 26162, | |
| 26165, | |
| 26140, | |
| 26150, | |
| 26146, | |
| 26163, | |
| 26155, | |
| 26170, | |
| 26141, | |
| 26164, | |
| 26169, | |
| 26158, | |
| 26383, | |
| 26384, | |
| 26561, | |
| 26610, | |
| 26568, | |
| 26554, | |
| 26588, | |
| 26555, | |
| 26616, | |
| 26584, | |
| 26560, | |
| 26551, | |
| 26565, | |
| 26603, | |
| 26596, | |
| 26591, | |
| 26549, | |
| 26573, | |
| 26547, | |
| 26615, | |
| 26614, | |
| 26606, | |
| 26595, | |
| 26562, | |
| 26553, | |
| 26574, | |
| 26599, | |
| 26608, | |
| 26546, | |
| 26620, | |
| 26566, | |
| 26605, | |
| 26572, | |
| 26542, | |
| 26598, | |
| 26587, | |
| 26618, | |
| 26569, | |
| 26570, | |
| 26563, | |
| 26602, | |
| 26571, | |
| 27432, | |
| 27522, | |
| 27524, | |
| 27574, | |
| 27606, | |
| 27608, | |
| 27616, | |
| 27680, | |
| 27681, | |
| 27944, | |
| 27956, | |
| 27949, | |
| 27935, | |
| 27964, | |
| 27967, | |
| 27922, | |
| 27914, | |
| 27866, | |
| 27955, | |
| 27908, | |
| 27929, | |
| 27962, | |
| 27930, | |
| 27921, | |
| 27904, | |
| 27933, | |
| 27970, | |
| 27905, | |
| 27928, | |
| 27959, | |
| 27907, | |
| 27919, | |
| 27968, | |
| 27911, | |
| 27936, | |
| 27948, | |
| 27912, | |
| 27938, | |
| 27913, | |
| 27920, | |
| 28855, | |
| 28831, | |
| 28862, | |
| 28849, | |
| 28848, | |
| 28833, | |
| 28852, | |
| 28853, | |
| 28841, | |
| 29249, | |
| 29257, | |
| 29258, | |
| 29292, | |
| 29296, | |
| 29299, | |
| 29294, | |
| 29386, | |
| 29412, | |
| 29416, | |
| 29419, | |
| 29407, | |
| 29418, | |
| 29414, | |
| 29411, | |
| 29573, | |
| 29644, | |
| 29634, | |
| 29640, | |
| 29637, | |
| 29625, | |
| 29622, | |
| 29621, | |
| 29620, | |
| 29675, | |
| 29631, | |
| 29639, | |
| 29630, | |
| 29635, | |
| 29638, | |
| 29624, | |
| 29643, | |
| 29932, | |
| 29934, | |
| 29998, | |
| 30023, | |
| 30024, | |
| 30119, | |
| 30122, | |
| 30329, | |
| 30404, | |
| 30472, | |
| 30467, | |
| 30468, | |
| 30469, | |
| 30474, | |
| 30455, | |
| 30459, | |
| 30458, | |
| 30695, | |
| 30696, | |
| 30726, | |
| 30737, | |
| 30738, | |
| 30725, | |
| 30736, | |
| 30735, | |
| 30734, | |
| 30729, | |
| 30723, | |
| 30739, | |
| 31050, | |
| 31052, | |
| 31051, | |
| 31045, | |
| 31044, | |
| 31189, | |
| 31181, | |
| 31183, | |
| 31190, | |
| 31182, | |
| 31360, | |
| 31358, | |
| 31441, | |
| 31488, | |
| 31489, | |
| 31866, | |
| 31864, | |
| 31865, | |
| 31871, | |
| 31872, | |
| 31873, | |
| 32003, | |
| 32008, | |
| 32001, | |
| 32600, | |
| 32657, | |
| 32653, | |
| 32702, | |
| 32775, | |
| 32782, | |
| 32783, | |
| 32788, | |
| 32823, | |
| 32984, | |
| 32967, | |
| 32992, | |
| 32977, | |
| 32968, | |
| 32962, | |
| 32976, | |
| 32965, | |
| 32995, | |
| 32985, | |
| 32988, | |
| 32970, | |
| 32981, | |
| 32969, | |
| 32975, | |
| 32983, | |
| 32998, | |
| 32973, | |
| 33279, | |
| 33313, | |
| 33428, | |
| 33497, | |
| 33534, | |
| 33529, | |
| 33543, | |
| 33512, | |
| 33536, | |
| 33493, | |
| 33594, | |
| 33515, | |
| 33494, | |
| 33524, | |
| 33516, | |
| 33505, | |
| 33522, | |
| 33525, | |
| 33548, | |
| 33531, | |
| 33526, | |
| 33520, | |
| 33514, | |
| 33508, | |
| 33504, | |
| 33530, | |
| 33523, | |
| 33517, | |
| 34423, | |
| 34420, | |
| 34428, | |
| 34419, | |
| 34881, | |
| 34894, | |
| 34919, | |
| 34922, | |
| 34921, | |
| 35283, | |
| 35332, | |
| 35335, | |
| 36210, | |
| 36835, | |
| 36833, | |
| 36846, | |
| 36832, | |
| 37105, | |
| 37053, | |
| 37055, | |
| 37077, | |
| 37061, | |
| 37054, | |
| 37063, | |
| 37067, | |
| 37064, | |
| 37332, | |
| 37331, | |
| 38484, | |
| 38479, | |
| 38481, | |
| 38483, | |
| 38474, | |
| 38478, | |
| 20510, | |
| 20485, | |
| 20487, | |
| 20499, | |
| 20514, | |
| 20528, | |
| 20507, | |
| 20469, | |
| 20468, | |
| 20531, | |
| 20535, | |
| 20524, | |
| 20470, | |
| 20471, | |
| 20503, | |
| 20508, | |
| 20512, | |
| 20519, | |
| 20533, | |
| 20527, | |
| 20529, | |
| 20494, | |
| 20826, | |
| 20884, | |
| 20883, | |
| 20938, | |
| 20932, | |
| 20933, | |
| 20936, | |
| 20942, | |
| 21089, | |
| 21082, | |
| 21074, | |
| 21086, | |
| 21087, | |
| 21077, | |
| 21090, | |
| 21197, | |
| 21262, | |
| 21406, | |
| 21798, | |
| 21730, | |
| 21783, | |
| 21778, | |
| 21735, | |
| 21747, | |
| 21732, | |
| 21786, | |
| 21759, | |
| 21764, | |
| 21768, | |
| 21739, | |
| 21777, | |
| 21765, | |
| 21745, | |
| 21770, | |
| 21755, | |
| 21751, | |
| 21752, | |
| 21728, | |
| 21774, | |
| 21763, | |
| 21771, | |
| 22273, | |
| 22274, | |
| 22476, | |
| 22578, | |
| 22485, | |
| 22482, | |
| 22458, | |
| 22470, | |
| 22461, | |
| 22460, | |
| 22456, | |
| 22454, | |
| 22463, | |
| 22471, | |
| 22480, | |
| 22457, | |
| 22465, | |
| 22798, | |
| 22858, | |
| 23065, | |
| 23062, | |
| 23085, | |
| 23086, | |
| 23061, | |
| 23055, | |
| 23063, | |
| 23050, | |
| 23070, | |
| 23091, | |
| 23404, | |
| 23463, | |
| 23469, | |
| 23468, | |
| 23555, | |
| 23638, | |
| 23636, | |
| 23788, | |
| 23807, | |
| 23790, | |
| 23793, | |
| 23799, | |
| 23808, | |
| 23801, | |
| 24105, | |
| 24104, | |
| 24232, | |
| 24238, | |
| 24234, | |
| 24236, | |
| 24371, | |
| 24368, | |
| 24423, | |
| 24669, | |
| 24666, | |
| 24679, | |
| 24641, | |
| 24738, | |
| 24712, | |
| 24704, | |
| 24722, | |
| 24705, | |
| 24733, | |
| 24707, | |
| 24725, | |
| 24731, | |
| 24727, | |
| 24711, | |
| 24732, | |
| 24718, | |
| 25113, | |
| 25158, | |
| 25330, | |
| 25360, | |
| 25430, | |
| 25388, | |
| 25412, | |
| 25413, | |
| 25398, | |
| 25411, | |
| 25572, | |
| 25401, | |
| 25419, | |
| 25418, | |
| 25404, | |
| 25385, | |
| 25409, | |
| 25396, | |
| 25432, | |
| 25428, | |
| 25433, | |
| 25389, | |
| 25415, | |
| 25395, | |
| 25434, | |
| 25425, | |
| 25400, | |
| 25431, | |
| 25408, | |
| 25416, | |
| 25930, | |
| 25926, | |
| 26054, | |
| 26051, | |
| 26052, | |
| 26050, | |
| 26186, | |
| 26207, | |
| 26183, | |
| 26193, | |
| 26386, | |
| 26387, | |
| 26655, | |
| 26650, | |
| 26697, | |
| 26674, | |
| 26675, | |
| 26683, | |
| 26699, | |
| 26703, | |
| 26646, | |
| 26673, | |
| 26652, | |
| 26677, | |
| 26667, | |
| 26669, | |
| 26671, | |
| 26702, | |
| 26692, | |
| 26676, | |
| 26653, | |
| 26642, | |
| 26644, | |
| 26662, | |
| 26664, | |
| 26670, | |
| 26701, | |
| 26682, | |
| 26661, | |
| 26656, | |
| 27436, | |
| 27439, | |
| 27437, | |
| 27441, | |
| 27444, | |
| 27501, | |
| 32898, | |
| 27528, | |
| 27622, | |
| 27620, | |
| 27624, | |
| 27619, | |
| 27618, | |
| 27623, | |
| 27685, | |
| 28026, | |
| 28003, | |
| 28004, | |
| 28022, | |
| 27917, | |
| 28001, | |
| 28050, | |
| 27992, | |
| 28002, | |
| 28013, | |
| 28015, | |
| 28049, | |
| 28045, | |
| 28143, | |
| 28031, | |
| 28038, | |
| 27998, | |
| 28007, | |
| 28000, | |
| 28055, | |
| 28016, | |
| 28028, | |
| 27999, | |
| 28034, | |
| 28056, | |
| 27951, | |
| 28008, | |
| 28043, | |
| 28030, | |
| 28032, | |
| 28036, | |
| 27926, | |
| 28035, | |
| 28027, | |
| 28029, | |
| 28021, | |
| 28048, | |
| 28892, | |
| 28883, | |
| 28881, | |
| 28893, | |
| 28875, | |
| 32569, | |
| 28898, | |
| 28887, | |
| 28882, | |
| 28894, | |
| 28896, | |
| 28884, | |
| 28877, | |
| 28869, | |
| 28870, | |
| 28871, | |
| 28890, | |
| 28878, | |
| 28897, | |
| 29250, | |
| 29304, | |
| 29303, | |
| 29302, | |
| 29440, | |
| 29434, | |
| 29428, | |
| 29438, | |
| 29430, | |
| 29427, | |
| 29435, | |
| 29441, | |
| 29651, | |
| 29657, | |
| 29669, | |
| 29654, | |
| 29628, | |
| 29671, | |
| 29667, | |
| 29673, | |
| 29660, | |
| 29650, | |
| 29659, | |
| 29652, | |
| 29661, | |
| 29658, | |
| 29655, | |
| 29656, | |
| 29672, | |
| 29918, | |
| 29919, | |
| 29940, | |
| 29941, | |
| 29985, | |
| 30043, | |
| 30047, | |
| 30128, | |
| 30145, | |
| 30139, | |
| 30148, | |
| 30144, | |
| 30143, | |
| 30134, | |
| 30138, | |
| 30346, | |
| 30409, | |
| 30493, | |
| 30491, | |
| 30480, | |
| 30483, | |
| 30482, | |
| 30499, | |
| 30481, | |
| 30485, | |
| 30489, | |
| 30490, | |
| 30498, | |
| 30503, | |
| 30755, | |
| 30764, | |
| 30754, | |
| 30773, | |
| 30767, | |
| 30760, | |
| 30766, | |
| 30763, | |
| 30753, | |
| 30761, | |
| 30771, | |
| 30762, | |
| 30769, | |
| 31060, | |
| 31067, | |
| 31055, | |
| 31068, | |
| 31059, | |
| 31058, | |
| 31057, | |
| 31211, | |
| 31212, | |
| 31200, | |
| 31214, | |
| 31213, | |
| 31210, | |
| 31196, | |
| 31198, | |
| 31197, | |
| 31366, | |
| 31369, | |
| 31365, | |
| 31371, | |
| 31372, | |
| 31370, | |
| 31367, | |
| 31448, | |
| 31504, | |
| 31492, | |
| 31507, | |
| 31493, | |
| 31503, | |
| 31496, | |
| 31498, | |
| 31502, | |
| 31497, | |
| 31506, | |
| 31876, | |
| 31889, | |
| 31882, | |
| 31884, | |
| 31880, | |
| 31885, | |
| 31877, | |
| 32030, | |
| 32029, | |
| 32017, | |
| 32014, | |
| 32024, | |
| 32022, | |
| 32019, | |
| 32031, | |
| 32018, | |
| 32015, | |
| 32012, | |
| 32604, | |
| 32609, | |
| 32606, | |
| 32608, | |
| 32605, | |
| 32603, | |
| 32662, | |
| 32658, | |
| 32707, | |
| 32706, | |
| 32704, | |
| 32790, | |
| 32830, | |
| 32825, | |
| 33018, | |
| 33010, | |
| 33017, | |
| 33013, | |
| 33025, | |
| 33019, | |
| 33024, | |
| 33281, | |
| 33327, | |
| 33317, | |
| 33587, | |
| 33581, | |
| 33604, | |
| 33561, | |
| 33617, | |
| 33573, | |
| 33622, | |
| 33599, | |
| 33601, | |
| 33574, | |
| 33564, | |
| 33570, | |
| 33602, | |
| 33614, | |
| 33563, | |
| 33578, | |
| 33544, | |
| 33596, | |
| 33613, | |
| 33558, | |
| 33572, | |
| 33568, | |
| 33591, | |
| 33583, | |
| 33577, | |
| 33607, | |
| 33605, | |
| 33612, | |
| 33619, | |
| 33566, | |
| 33580, | |
| 33611, | |
| 33575, | |
| 33608, | |
| 34387, | |
| 34386, | |
| 34466, | |
| 34472, | |
| 34454, | |
| 34445, | |
| 34449, | |
| 34462, | |
| 34439, | |
| 34455, | |
| 34438, | |
| 34443, | |
| 34458, | |
| 34437, | |
| 34469, | |
| 34457, | |
| 34465, | |
| 34471, | |
| 34453, | |
| 34456, | |
| 34446, | |
| 34461, | |
| 34448, | |
| 34452, | |
| 34883, | |
| 34884, | |
| 34925, | |
| 34933, | |
| 34934, | |
| 34930, | |
| 34944, | |
| 34929, | |
| 34943, | |
| 34927, | |
| 34947, | |
| 34942, | |
| 34932, | |
| 34940, | |
| 35346, | |
| 35911, | |
| 35927, | |
| 35963, | |
| 36004, | |
| 36003, | |
| 36214, | |
| 36216, | |
| 36277, | |
| 36279, | |
| 36278, | |
| 36561, | |
| 36563, | |
| 36862, | |
| 36853, | |
| 36866, | |
| 36863, | |
| 36859, | |
| 36868, | |
| 36860, | |
| 36854, | |
| 37078, | |
| 37088, | |
| 37081, | |
| 37082, | |
| 37091, | |
| 37087, | |
| 37093, | |
| 37080, | |
| 37083, | |
| 37079, | |
| 37084, | |
| 37092, | |
| 37200, | |
| 37198, | |
| 37199, | |
| 37333, | |
| 37346, | |
| 37338, | |
| 38492, | |
| 38495, | |
| 38588, | |
| 39139, | |
| 39647, | |
| 39727, | |
| 20095, | |
| 20592, | |
| 20586, | |
| 20577, | |
| 20574, | |
| 20576, | |
| 20563, | |
| 20555, | |
| 20573, | |
| 20594, | |
| 20552, | |
| 20557, | |
| 20545, | |
| 20571, | |
| 20554, | |
| 20578, | |
| 20501, | |
| 20549, | |
| 20575, | |
| 20585, | |
| 20587, | |
| 20579, | |
| 20580, | |
| 20550, | |
| 20544, | |
| 20590, | |
| 20595, | |
| 20567, | |
| 20561, | |
| 20944, | |
| 21099, | |
| 21101, | |
| 21100, | |
| 21102, | |
| 21206, | |
| 21203, | |
| 21293, | |
| 21404, | |
| 21877, | |
| 21878, | |
| 21820, | |
| 21837, | |
| 21840, | |
| 21812, | |
| 21802, | |
| 21841, | |
| 21858, | |
| 21814, | |
| 21813, | |
| 21808, | |
| 21842, | |
| 21829, | |
| 21772, | |
| 21810, | |
| 21861, | |
| 21838, | |
| 21817, | |
| 21832, | |
| 21805, | |
| 21819, | |
| 21824, | |
| 21835, | |
| 22282, | |
| 22279, | |
| 22523, | |
| 22548, | |
| 22498, | |
| 22518, | |
| 22492, | |
| 22516, | |
| 22528, | |
| 22509, | |
| 22525, | |
| 22536, | |
| 22520, | |
| 22539, | |
| 22515, | |
| 22479, | |
| 22535, | |
| 22510, | |
| 22499, | |
| 22514, | |
| 22501, | |
| 22508, | |
| 22497, | |
| 22542, | |
| 22524, | |
| 22544, | |
| 22503, | |
| 22529, | |
| 22540, | |
| 22513, | |
| 22505, | |
| 22512, | |
| 22541, | |
| 22532, | |
| 22876, | |
| 23136, | |
| 23128, | |
| 23125, | |
| 23143, | |
| 23134, | |
| 23096, | |
| 23093, | |
| 23149, | |
| 23120, | |
| 23135, | |
| 23141, | |
| 23148, | |
| 23123, | |
| 23140, | |
| 23127, | |
| 23107, | |
| 23133, | |
| 23122, | |
| 23108, | |
| 23131, | |
| 23112, | |
| 23182, | |
| 23102, | |
| 23117, | |
| 23097, | |
| 23116, | |
| 23152, | |
| 23145, | |
| 23111, | |
| 23121, | |
| 23126, | |
| 23106, | |
| 23132, | |
| 23410, | |
| 23406, | |
| 23489, | |
| 23488, | |
| 23641, | |
| 23838, | |
| 23819, | |
| 23837, | |
| 23834, | |
| 23840, | |
| 23820, | |
| 23848, | |
| 23821, | |
| 23846, | |
| 23845, | |
| 23823, | |
| 23856, | |
| 23826, | |
| 23843, | |
| 23839, | |
| 23854, | |
| 24126, | |
| 24116, | |
| 24241, | |
| 24244, | |
| 24249, | |
| 24242, | |
| 24243, | |
| 24374, | |
| 24376, | |
| 24475, | |
| 24470, | |
| 24479, | |
| 24714, | |
| 24720, | |
| 24710, | |
| 24766, | |
| 24752, | |
| 24762, | |
| 24787, | |
| 24788, | |
| 24783, | |
| 24804, | |
| 24793, | |
| 24797, | |
| 24776, | |
| 24753, | |
| 24795, | |
| 24759, | |
| 24778, | |
| 24767, | |
| 24771, | |
| 24781, | |
| 24768, | |
| 25394, | |
| 25445, | |
| 25482, | |
| 25474, | |
| 25469, | |
| 25533, | |
| 25502, | |
| 25517, | |
| 25501, | |
| 25495, | |
| 25515, | |
| 25486, | |
| 25455, | |
| 25479, | |
| 25488, | |
| 25454, | |
| 25519, | |
| 25461, | |
| 25500, | |
| 25453, | |
| 25518, | |
| 25468, | |
| 25508, | |
| 25403, | |
| 25503, | |
| 25464, | |
| 25477, | |
| 25473, | |
| 25489, | |
| 25485, | |
| 25456, | |
| 25939, | |
| 26061, | |
| 26213, | |
| 26209, | |
| 26203, | |
| 26201, | |
| 26204, | |
| 26210, | |
| 26392, | |
| 26745, | |
| 26759, | |
| 26768, | |
| 26780, | |
| 26733, | |
| 26734, | |
| 26798, | |
| 26795, | |
| 26966, | |
| 26735, | |
| 26787, | |
| 26796, | |
| 26793, | |
| 26741, | |
| 26740, | |
| 26802, | |
| 26767, | |
| 26743, | |
| 26770, | |
| 26748, | |
| 26731, | |
| 26738, | |
| 26794, | |
| 26752, | |
| 26737, | |
| 26750, | |
| 26779, | |
| 26774, | |
| 26763, | |
| 26784, | |
| 26761, | |
| 26788, | |
| 26744, | |
| 26747, | |
| 26769, | |
| 26764, | |
| 26762, | |
| 26749, | |
| 27446, | |
| 27443, | |
| 27447, | |
| 27448, | |
| 27537, | |
| 27535, | |
| 27533, | |
| 27534, | |
| 27532, | |
| 27690, | |
| 28096, | |
| 28075, | |
| 28084, | |
| 28083, | |
| 28276, | |
| 28076, | |
| 28137, | |
| 28130, | |
| 28087, | |
| 28150, | |
| 28116, | |
| 28160, | |
| 28104, | |
| 28128, | |
| 28127, | |
| 28118, | |
| 28094, | |
| 28133, | |
| 28124, | |
| 28125, | |
| 28123, | |
| 28148, | |
| 28106, | |
| 28093, | |
| 28141, | |
| 28144, | |
| 28090, | |
| 28117, | |
| 28098, | |
| 28111, | |
| 28105, | |
| 28112, | |
| 28146, | |
| 28115, | |
| 28157, | |
| 28119, | |
| 28109, | |
| 28131, | |
| 28091, | |
| 28922, | |
| 28941, | |
| 28919, | |
| 28951, | |
| 28916, | |
| 28940, | |
| 28912, | |
| 28932, | |
| 28915, | |
| 28944, | |
| 28924, | |
| 28927, | |
| 28934, | |
| 28947, | |
| 28928, | |
| 28920, | |
| 28918, | |
| 28939, | |
| 28930, | |
| 28942, | |
| 29310, | |
| 29307, | |
| 29308, | |
| 29311, | |
| 29469, | |
| 29463, | |
| 29447, | |
| 29457, | |
| 29464, | |
| 29450, | |
| 29448, | |
| 29439, | |
| 29455, | |
| 29470, | |
| 29576, | |
| 29686, | |
| 29688, | |
| 29685, | |
| 29700, | |
| 29697, | |
| 29693, | |
| 29703, | |
| 29696, | |
| 29690, | |
| 29692, | |
| 29695, | |
| 29708, | |
| 29707, | |
| 29684, | |
| 29704, | |
| 30052, | |
| 30051, | |
| 30158, | |
| 30162, | |
| 30159, | |
| 30155, | |
| 30156, | |
| 30161, | |
| 30160, | |
| 30351, | |
| 30345, | |
| 30419, | |
| 30521, | |
| 30511, | |
| 30509, | |
| 30513, | |
| 30514, | |
| 30516, | |
| 30515, | |
| 30525, | |
| 30501, | |
| 30523, | |
| 30517, | |
| 30792, | |
| 30802, | |
| 30793, | |
| 30797, | |
| 30794, | |
| 30796, | |
| 30758, | |
| 30789, | |
| 30800, | |
| 31076, | |
| 31079, | |
| 31081, | |
| 31082, | |
| 31075, | |
| 31083, | |
| 31073, | |
| 31163, | |
| 31226, | |
| 31224, | |
| 31222, | |
| 31223, | |
| 31375, | |
| 31380, | |
| 31376, | |
| 31541, | |
| 31559, | |
| 31540, | |
| 31525, | |
| 31536, | |
| 31522, | |
| 31524, | |
| 31539, | |
| 31512, | |
| 31530, | |
| 31517, | |
| 31537, | |
| 31531, | |
| 31533, | |
| 31535, | |
| 31538, | |
| 31544, | |
| 31514, | |
| 31523, | |
| 31892, | |
| 31896, | |
| 31894, | |
| 31907, | |
| 32053, | |
| 32061, | |
| 32056, | |
| 32054, | |
| 32058, | |
| 32069, | |
| 32044, | |
| 32041, | |
| 32065, | |
| 32071, | |
| 32062, | |
| 32063, | |
| 32074, | |
| 32059, | |
| 32040, | |
| 32611, | |
| 32661, | |
| 32668, | |
| 32669, | |
| 32667, | |
| 32714, | |
| 32715, | |
| 32717, | |
| 32720, | |
| 32721, | |
| 32711, | |
| 32719, | |
| 32713, | |
| 32799, | |
| 32798, | |
| 32795, | |
| 32839, | |
| 32835, | |
| 32840, | |
| 33048, | |
| 33061, | |
| 33049, | |
| 33051, | |
| 33069, | |
| 33055, | |
| 33068, | |
| 33054, | |
| 33057, | |
| 33045, | |
| 33063, | |
| 33053, | |
| 33058, | |
| 33297, | |
| 33336, | |
| 33331, | |
| 33338, | |
| 33332, | |
| 33330, | |
| 33396, | |
| 33680, | |
| 33699, | |
| 33704, | |
| 33677, | |
| 33658, | |
| 33651, | |
| 33700, | |
| 33652, | |
| 33679, | |
| 33665, | |
| 33685, | |
| 33689, | |
| 33653, | |
| 33684, | |
| 33705, | |
| 33661, | |
| 33667, | |
| 33676, | |
| 33693, | |
| 33691, | |
| 33706, | |
| 33675, | |
| 33662, | |
| 33701, | |
| 33711, | |
| 33672, | |
| 33687, | |
| 33712, | |
| 33663, | |
| 33702, | |
| 33671, | |
| 33710, | |
| 33654, | |
| 33690, | |
| 34393, | |
| 34390, | |
| 34495, | |
| 34487, | |
| 34498, | |
| 34497, | |
| 34501, | |
| 34490, | |
| 34480, | |
| 34504, | |
| 34489, | |
| 34483, | |
| 34488, | |
| 34508, | |
| 34484, | |
| 34491, | |
| 34492, | |
| 34499, | |
| 34493, | |
| 34494, | |
| 34898, | |
| 34953, | |
| 34965, | |
| 34984, | |
| 34978, | |
| 34986, | |
| 34970, | |
| 34961, | |
| 34977, | |
| 34975, | |
| 34968, | |
| 34983, | |
| 34969, | |
| 34971, | |
| 34967, | |
| 34980, | |
| 34988, | |
| 34956, | |
| 34963, | |
| 34958, | |
| 35202, | |
| 35286, | |
| 35289, | |
| 35285, | |
| 35376, | |
| 35367, | |
| 35372, | |
| 35358, | |
| 35897, | |
| 35899, | |
| 35932, | |
| 35933, | |
| 35965, | |
| 36005, | |
| 36221, | |
| 36219, | |
| 36217, | |
| 36284, | |
| 36290, | |
| 36281, | |
| 36287, | |
| 36289, | |
| 36568, | |
| 36574, | |
| 36573, | |
| 36572, | |
| 36567, | |
| 36576, | |
| 36577, | |
| 36900, | |
| 36875, | |
| 36881, | |
| 36892, | |
| 36876, | |
| 36897, | |
| 37103, | |
| 37098, | |
| 37104, | |
| 37108, | |
| 37106, | |
| 37107, | |
| 37076, | |
| 37099, | |
| 37100, | |
| 37097, | |
| 37206, | |
| 37208, | |
| 37210, | |
| 37203, | |
| 37205, | |
| 37356, | |
| 37364, | |
| 37361, | |
| 37363, | |
| 37368, | |
| 37348, | |
| 37369, | |
| 37354, | |
| 37355, | |
| 37367, | |
| 37352, | |
| 37358, | |
| 38266, | |
| 38278, | |
| 38280, | |
| 38524, | |
| 38509, | |
| 38507, | |
| 38513, | |
| 38511, | |
| 38591, | |
| 38762, | |
| 38916, | |
| 39141, | |
| 39319, | |
| 20635, | |
| 20629, | |
| 20628, | |
| 20638, | |
| 20619, | |
| 20643, | |
| 20611, | |
| 20620, | |
| 20622, | |
| 20637, | |
| 20584, | |
| 20636, | |
| 20626, | |
| 20610, | |
| 20615, | |
| 20831, | |
| 20948, | |
| 21266, | |
| 21265, | |
| 21412, | |
| 21415, | |
| 21905, | |
| 21928, | |
| 21925, | |
| 21933, | |
| 21879, | |
| 22085, | |
| 21922, | |
| 21907, | |
| 21896, | |
| 21903, | |
| 21941, | |
| 21889, | |
| 21923, | |
| 21906, | |
| 21924, | |
| 21885, | |
| 21900, | |
| 21926, | |
| 21887, | |
| 21909, | |
| 21921, | |
| 21902, | |
| 22284, | |
| 22569, | |
| 22583, | |
| 22553, | |
| 22558, | |
| 22567, | |
| 22563, | |
| 22568, | |
| 22517, | |
| 22600, | |
| 22565, | |
| 22556, | |
| 22555, | |
| 22579, | |
| 22591, | |
| 22582, | |
| 22574, | |
| 22585, | |
| 22584, | |
| 22573, | |
| 22572, | |
| 22587, | |
| 22881, | |
| 23215, | |
| 23188, | |
| 23199, | |
| 23162, | |
| 23202, | |
| 23198, | |
| 23160, | |
| 23206, | |
| 23164, | |
| 23205, | |
| 23212, | |
| 23189, | |
| 23214, | |
| 23095, | |
| 23172, | |
| 23178, | |
| 23191, | |
| 23171, | |
| 23179, | |
| 23209, | |
| 23163, | |
| 23165, | |
| 23180, | |
| 23196, | |
| 23183, | |
| 23187, | |
| 23197, | |
| 23530, | |
| 23501, | |
| 23499, | |
| 23508, | |
| 23505, | |
| 23498, | |
| 23502, | |
| 23564, | |
| 23600, | |
| 23863, | |
| 23875, | |
| 23915, | |
| 23873, | |
| 23883, | |
| 23871, | |
| 23861, | |
| 23889, | |
| 23886, | |
| 23893, | |
| 23859, | |
| 23866, | |
| 23890, | |
| 23869, | |
| 23857, | |
| 23897, | |
| 23874, | |
| 23865, | |
| 23881, | |
| 23864, | |
| 23868, | |
| 23858, | |
| 23862, | |
| 23872, | |
| 23877, | |
| 24132, | |
| 24129, | |
| 24408, | |
| 24486, | |
| 24485, | |
| 24491, | |
| 24777, | |
| 24761, | |
| 24780, | |
| 24802, | |
| 24782, | |
| 24772, | |
| 24852, | |
| 24818, | |
| 24842, | |
| 24854, | |
| 24837, | |
| 24821, | |
| 24851, | |
| 24824, | |
| 24828, | |
| 24830, | |
| 24769, | |
| 24835, | |
| 24856, | |
| 24861, | |
| 24848, | |
| 24831, | |
| 24836, | |
| 24843, | |
| 25162, | |
| 25492, | |
| 25521, | |
| 25520, | |
| 25550, | |
| 25573, | |
| 25576, | |
| 25583, | |
| 25539, | |
| 25757, | |
| 25587, | |
| 25546, | |
| 25568, | |
| 25590, | |
| 25557, | |
| 25586, | |
| 25589, | |
| 25697, | |
| 25567, | |
| 25534, | |
| 25565, | |
| 25564, | |
| 25540, | |
| 25560, | |
| 25555, | |
| 25538, | |
| 25543, | |
| 25548, | |
| 25547, | |
| 25544, | |
| 25584, | |
| 25559, | |
| 25561, | |
| 25906, | |
| 25959, | |
| 25962, | |
| 25956, | |
| 25948, | |
| 25960, | |
| 25957, | |
| 25996, | |
| 26013, | |
| 26014, | |
| 26030, | |
| 26064, | |
| 26066, | |
| 26236, | |
| 26220, | |
| 26235, | |
| 26240, | |
| 26225, | |
| 26233, | |
| 26218, | |
| 26226, | |
| 26369, | |
| 26892, | |
| 26835, | |
| 26884, | |
| 26844, | |
| 26922, | |
| 26860, | |
| 26858, | |
| 26865, | |
| 26895, | |
| 26838, | |
| 26871, | |
| 26859, | |
| 26852, | |
| 26870, | |
| 26899, | |
| 26896, | |
| 26867, | |
| 26849, | |
| 26887, | |
| 26828, | |
| 26888, | |
| 26992, | |
| 26804, | |
| 26897, | |
| 26863, | |
| 26822, | |
| 26900, | |
| 26872, | |
| 26832, | |
| 26877, | |
| 26876, | |
| 26856, | |
| 26891, | |
| 26890, | |
| 26903, | |
| 26830, | |
| 26824, | |
| 26845, | |
| 26846, | |
| 26854, | |
| 26868, | |
| 26833, | |
| 26886, | |
| 26836, | |
| 26857, | |
| 26901, | |
| 26917, | |
| 26823, | |
| 27449, | |
| 27451, | |
| 27455, | |
| 27452, | |
| 27540, | |
| 27543, | |
| 27545, | |
| 27541, | |
| 27581, | |
| 27632, | |
| 27634, | |
| 27635, | |
| 27696, | |
| 28156, | |
| 28230, | |
| 28231, | |
| 28191, | |
| 28233, | |
| 28296, | |
| 28220, | |
| 28221, | |
| 28229, | |
| 28258, | |
| 28203, | |
| 28223, | |
| 28225, | |
| 28253, | |
| 28275, | |
| 28188, | |
| 28211, | |
| 28235, | |
| 28224, | |
| 28241, | |
| 28219, | |
| 28163, | |
| 28206, | |
| 28254, | |
| 28264, | |
| 28252, | |
| 28257, | |
| 28209, | |
| 28200, | |
| 28256, | |
| 28273, | |
| 28267, | |
| 28217, | |
| 28194, | |
| 28208, | |
| 28243, | |
| 28261, | |
| 28199, | |
| 28280, | |
| 28260, | |
| 28279, | |
| 28245, | |
| 28281, | |
| 28242, | |
| 28262, | |
| 28213, | |
| 28214, | |
| 28250, | |
| 28960, | |
| 28958, | |
| 28975, | |
| 28923, | |
| 28974, | |
| 28977, | |
| 28963, | |
| 28965, | |
| 28962, | |
| 28978, | |
| 28959, | |
| 28968, | |
| 28986, | |
| 28955, | |
| 29259, | |
| 29274, | |
| 29320, | |
| 29321, | |
| 29318, | |
| 29317, | |
| 29323, | |
| 29458, | |
| 29451, | |
| 29488, | |
| 29474, | |
| 29489, | |
| 29491, | |
| 29479, | |
| 29490, | |
| 29485, | |
| 29478, | |
| 29475, | |
| 29493, | |
| 29452, | |
| 29742, | |
| 29740, | |
| 29744, | |
| 29739, | |
| 29718, | |
| 29722, | |
| 29729, | |
| 29741, | |
| 29745, | |
| 29732, | |
| 29731, | |
| 29725, | |
| 29737, | |
| 29728, | |
| 29746, | |
| 29947, | |
| 29999, | |
| 30063, | |
| 30060, | |
| 30183, | |
| 30170, | |
| 30177, | |
| 30182, | |
| 30173, | |
| 30175, | |
| 30180, | |
| 30167, | |
| 30357, | |
| 30354, | |
| 30426, | |
| 30534, | |
| 30535, | |
| 30532, | |
| 30541, | |
| 30533, | |
| 30538, | |
| 30542, | |
| 30539, | |
| 30540, | |
| 30686, | |
| 30700, | |
| 30816, | |
| 30820, | |
| 30821, | |
| 30812, | |
| 30829, | |
| 30833, | |
| 30826, | |
| 30830, | |
| 30832, | |
| 30825, | |
| 30824, | |
| 30814, | |
| 30818, | |
| 31092, | |
| 31091, | |
| 31090, | |
| 31088, | |
| 31234, | |
| 31242, | |
| 31235, | |
| 31244, | |
| 31236, | |
| 31385, | |
| 31462, | |
| 31460, | |
| 31562, | |
| 31547, | |
| 31556, | |
| 31560, | |
| 31564, | |
| 31566, | |
| 31552, | |
| 31576, | |
| 31557, | |
| 31906, | |
| 31902, | |
| 31912, | |
| 31905, | |
| 32088, | |
| 32111, | |
| 32099, | |
| 32083, | |
| 32086, | |
| 32103, | |
| 32106, | |
| 32079, | |
| 32109, | |
| 32092, | |
| 32107, | |
| 32082, | |
| 32084, | |
| 32105, | |
| 32081, | |
| 32095, | |
| 32078, | |
| 32574, | |
| 32575, | |
| 32613, | |
| 32614, | |
| 32674, | |
| 32672, | |
| 32673, | |
| 32727, | |
| 32849, | |
| 32847, | |
| 32848, | |
| 33022, | |
| 32980, | |
| 33091, | |
| 33098, | |
| 33106, | |
| 33103, | |
| 33095, | |
| 33085, | |
| 33101, | |
| 33082, | |
| 33254, | |
| 33262, | |
| 33271, | |
| 33272, | |
| 33273, | |
| 33284, | |
| 33340, | |
| 33341, | |
| 33343, | |
| 33397, | |
| 33595, | |
| 33743, | |
| 33785, | |
| 33827, | |
| 33728, | |
| 33768, | |
| 33810, | |
| 33767, | |
| 33764, | |
| 33788, | |
| 33782, | |
| 33808, | |
| 33734, | |
| 33736, | |
| 33771, | |
| 33763, | |
| 33727, | |
| 33793, | |
| 33757, | |
| 33765, | |
| 33752, | |
| 33791, | |
| 33761, | |
| 33739, | |
| 33742, | |
| 33750, | |
| 33781, | |
| 33737, | |
| 33801, | |
| 33807, | |
| 33758, | |
| 33809, | |
| 33798, | |
| 33730, | |
| 33779, | |
| 33749, | |
| 33786, | |
| 33735, | |
| 33745, | |
| 33770, | |
| 33811, | |
| 33731, | |
| 33772, | |
| 33774, | |
| 33732, | |
| 33787, | |
| 33751, | |
| 33762, | |
| 33819, | |
| 33755, | |
| 33790, | |
| 34520, | |
| 34530, | |
| 34534, | |
| 34515, | |
| 34531, | |
| 34522, | |
| 34538, | |
| 34525, | |
| 34539, | |
| 34524, | |
| 34540, | |
| 34537, | |
| 34519, | |
| 34536, | |
| 34513, | |
| 34888, | |
| 34902, | |
| 34901, | |
| 35002, | |
| 35031, | |
| 35001, | |
| 35000, | |
| 35008, | |
| 35006, | |
| 34998, | |
| 35004, | |
| 34999, | |
| 35005, | |
| 34994, | |
| 35073, | |
| 35017, | |
| 35221, | |
| 35224, | |
| 35223, | |
| 35293, | |
| 35290, | |
| 35291, | |
| 35406, | |
| 35405, | |
| 35385, | |
| 35417, | |
| 35392, | |
| 35415, | |
| 35416, | |
| 35396, | |
| 35397, | |
| 35410, | |
| 35400, | |
| 35409, | |
| 35402, | |
| 35404, | |
| 35407, | |
| 35935, | |
| 35969, | |
| 35968, | |
| 36026, | |
| 36030, | |
| 36016, | |
| 36025, | |
| 36021, | |
| 36228, | |
| 36224, | |
| 36233, | |
| 36312, | |
| 36307, | |
| 36301, | |
| 36295, | |
| 36310, | |
| 36316, | |
| 36303, | |
| 36309, | |
| 36313, | |
| 36296, | |
| 36311, | |
| 36293, | |
| 36591, | |
| 36599, | |
| 36602, | |
| 36601, | |
| 36582, | |
| 36590, | |
| 36581, | |
| 36597, | |
| 36583, | |
| 36584, | |
| 36598, | |
| 36587, | |
| 36593, | |
| 36588, | |
| 36596, | |
| 36585, | |
| 36909, | |
| 36916, | |
| 36911, | |
| 37126, | |
| 37164, | |
| 37124, | |
| 37119, | |
| 37116, | |
| 37128, | |
| 37113, | |
| 37115, | |
| 37121, | |
| 37120, | |
| 37127, | |
| 37125, | |
| 37123, | |
| 37217, | |
| 37220, | |
| 37215, | |
| 37218, | |
| 37216, | |
| 37377, | |
| 37386, | |
| 37413, | |
| 37379, | |
| 37402, | |
| 37414, | |
| 37391, | |
| 37388, | |
| 37376, | |
| 37394, | |
| 37375, | |
| 37373, | |
| 37382, | |
| 37380, | |
| 37415, | |
| 37378, | |
| 37404, | |
| 37412, | |
| 37401, | |
| 37399, | |
| 37381, | |
| 37398, | |
| 38267, | |
| 38285, | |
| 38284, | |
| 38288, | |
| 38535, | |
| 38526, | |
| 38536, | |
| 38537, | |
| 38531, | |
| 38528, | |
| 38594, | |
| 38600, | |
| 38595, | |
| 38641, | |
| 38640, | |
| 38764, | |
| 38768, | |
| 38766, | |
| 38919, | |
| 39081, | |
| 39147, | |
| 40166, | |
| 40697, | |
| 20099, | |
| 20100, | |
| 20150, | |
| 20669, | |
| 20671, | |
| 20678, | |
| 20654, | |
| 20676, | |
| 20682, | |
| 20660, | |
| 20680, | |
| 20674, | |
| 20656, | |
| 20673, | |
| 20666, | |
| 20657, | |
| 20683, | |
| 20681, | |
| 20662, | |
| 20664, | |
| 20951, | |
| 21114, | |
| 21112, | |
| 21115, | |
| 21116, | |
| 21955, | |
| 21979, | |
| 21964, | |
| 21968, | |
| 21963, | |
| 21962, | |
| 21981, | |
| 21952, | |
| 21972, | |
| 21956, | |
| 21993, | |
| 21951, | |
| 21970, | |
| 21901, | |
| 21967, | |
| 21973, | |
| 21986, | |
| 21974, | |
| 21960, | |
| 22002, | |
| 21965, | |
| 21977, | |
| 21954, | |
| 22292, | |
| 22611, | |
| 22632, | |
| 22628, | |
| 22607, | |
| 22605, | |
| 22601, | |
| 22639, | |
| 22613, | |
| 22606, | |
| 22621, | |
| 22617, | |
| 22629, | |
| 22619, | |
| 22589, | |
| 22627, | |
| 22641, | |
| 22780, | |
| 23239, | |
| 23236, | |
| 23243, | |
| 23226, | |
| 23224, | |
| 23217, | |
| 23221, | |
| 23216, | |
| 23231, | |
| 23240, | |
| 23227, | |
| 23238, | |
| 23223, | |
| 23232, | |
| 23242, | |
| 23220, | |
| 23222, | |
| 23245, | |
| 23225, | |
| 23184, | |
| 23510, | |
| 23512, | |
| 23513, | |
| 23583, | |
| 23603, | |
| 23921, | |
| 23907, | |
| 23882, | |
| 23909, | |
| 23922, | |
| 23916, | |
| 23902, | |
| 23912, | |
| 23911, | |
| 23906, | |
| 24048, | |
| 24143, | |
| 24142, | |
| 24138, | |
| 24141, | |
| 24139, | |
| 24261, | |
| 24268, | |
| 24262, | |
| 24267, | |
| 24263, | |
| 24384, | |
| 24495, | |
| 24493, | |
| 24823, | |
| 24905, | |
| 24906, | |
| 24875, | |
| 24901, | |
| 24886, | |
| 24882, | |
| 24878, | |
| 24902, | |
| 24879, | |
| 24911, | |
| 24873, | |
| 24896, | |
| 25120, | |
| 37224, | |
| 25123, | |
| 25125, | |
| 25124, | |
| 25541, | |
| 25585, | |
| 25579, | |
| 25616, | |
| 25618, | |
| 25609, | |
| 25632, | |
| 25636, | |
| 25651, | |
| 25667, | |
| 25631, | |
| 25621, | |
| 25624, | |
| 25657, | |
| 25655, | |
| 25634, | |
| 25635, | |
| 25612, | |
| 25638, | |
| 25648, | |
| 25640, | |
| 25665, | |
| 25653, | |
| 25647, | |
| 25610, | |
| 25626, | |
| 25664, | |
| 25637, | |
| 25639, | |
| 25611, | |
| 25575, | |
| 25627, | |
| 25646, | |
| 25633, | |
| 25614, | |
| 25967, | |
| 26002, | |
| 26067, | |
| 26246, | |
| 26252, | |
| 26261, | |
| 26256, | |
| 26251, | |
| 26250, | |
| 26265, | |
| 26260, | |
| 26232, | |
| 26400, | |
| 26982, | |
| 26975, | |
| 26936, | |
| 26958, | |
| 26978, | |
| 26993, | |
| 26943, | |
| 26949, | |
| 26986, | |
| 26937, | |
| 26946, | |
| 26967, | |
| 26969, | |
| 27002, | |
| 26952, | |
| 26953, | |
| 26933, | |
| 26988, | |
| 26931, | |
| 26941, | |
| 26981, | |
| 26864, | |
| 27000, | |
| 26932, | |
| 26985, | |
| 26944, | |
| 26991, | |
| 26948, | |
| 26998, | |
| 26968, | |
| 26945, | |
| 26996, | |
| 26956, | |
| 26939, | |
| 26955, | |
| 26935, | |
| 26972, | |
| 26959, | |
| 26961, | |
| 26930, | |
| 26962, | |
| 26927, | |
| 27003, | |
| 26940, | |
| 27462, | |
| 27461, | |
| 27459, | |
| 27458, | |
| 27464, | |
| 27457, | |
| 27547, | |
| 64013, | |
| 27643, | |
| 27644, | |
| 27641, | |
| 27639, | |
| 27640, | |
| 28315, | |
| 28374, | |
| 28360, | |
| 28303, | |
| 28352, | |
| 28319, | |
| 28307, | |
| 28308, | |
| 28320, | |
| 28337, | |
| 28345, | |
| 28358, | |
| 28370, | |
| 28349, | |
| 28353, | |
| 28318, | |
| 28361, | |
| 28343, | |
| 28336, | |
| 28365, | |
| 28326, | |
| 28367, | |
| 28338, | |
| 28350, | |
| 28355, | |
| 28380, | |
| 28376, | |
| 28313, | |
| 28306, | |
| 28302, | |
| 28301, | |
| 28324, | |
| 28321, | |
| 28351, | |
| 28339, | |
| 28368, | |
| 28362, | |
| 28311, | |
| 28334, | |
| 28323, | |
| 28999, | |
| 29012, | |
| 29010, | |
| 29027, | |
| 29024, | |
| 28993, | |
| 29021, | |
| 29026, | |
| 29042, | |
| 29048, | |
| 29034, | |
| 29025, | |
| 28994, | |
| 29016, | |
| 28995, | |
| 29003, | |
| 29040, | |
| 29023, | |
| 29008, | |
| 29011, | |
| 28996, | |
| 29005, | |
| 29018, | |
| 29263, | |
| 29325, | |
| 29324, | |
| 29329, | |
| 29328, | |
| 29326, | |
| 29500, | |
| 29506, | |
| 29499, | |
| 29498, | |
| 29504, | |
| 29514, | |
| 29513, | |
| 29764, | |
| 29770, | |
| 29771, | |
| 29778, | |
| 29777, | |
| 29783, | |
| 29760, | |
| 29775, | |
| 29776, | |
| 29774, | |
| 29762, | |
| 29766, | |
| 29773, | |
| 29780, | |
| 29921, | |
| 29951, | |
| 29950, | |
| 29949, | |
| 29981, | |
| 30073, | |
| 30071, | |
| 27011, | |
| 30191, | |
| 30223, | |
| 30211, | |
| 30199, | |
| 30206, | |
| 30204, | |
| 30201, | |
| 30200, | |
| 30224, | |
| 30203, | |
| 30198, | |
| 30189, | |
| 30197, | |
| 30205, | |
| 30361, | |
| 30389, | |
| 30429, | |
| 30549, | |
| 30559, | |
| 30560, | |
| 30546, | |
| 30550, | |
| 30554, | |
| 30569, | |
| 30567, | |
| 30548, | |
| 30553, | |
| 30573, | |
| 30688, | |
| 30855, | |
| 30874, | |
| 30868, | |
| 30863, | |
| 30852, | |
| 30869, | |
| 30853, | |
| 30854, | |
| 30881, | |
| 30851, | |
| 30841, | |
| 30873, | |
| 30848, | |
| 30870, | |
| 30843, | |
| 31100, | |
| 31106, | |
| 31101, | |
| 31097, | |
| 31249, | |
| 31256, | |
| 31257, | |
| 31250, | |
| 31255, | |
| 31253, | |
| 31266, | |
| 31251, | |
| 31259, | |
| 31248, | |
| 31395, | |
| 31394, | |
| 31390, | |
| 31467, | |
| 31590, | |
| 31588, | |
| 31597, | |
| 31604, | |
| 31593, | |
| 31602, | |
| 31589, | |
| 31603, | |
| 31601, | |
| 31600, | |
| 31585, | |
| 31608, | |
| 31606, | |
| 31587, | |
| 31922, | |
| 31924, | |
| 31919, | |
| 32136, | |
| 32134, | |
| 32128, | |
| 32141, | |
| 32127, | |
| 32133, | |
| 32122, | |
| 32142, | |
| 32123, | |
| 32131, | |
| 32124, | |
| 32140, | |
| 32148, | |
| 32132, | |
| 32125, | |
| 32146, | |
| 32621, | |
| 32619, | |
| 32615, | |
| 32616, | |
| 32620, | |
| 32678, | |
| 32677, | |
| 32679, | |
| 32731, | |
| 32732, | |
| 32801, | |
| 33124, | |
| 33120, | |
| 33143, | |
| 33116, | |
| 33129, | |
| 33115, | |
| 33122, | |
| 33138, | |
| 26401, | |
| 33118, | |
| 33142, | |
| 33127, | |
| 33135, | |
| 33092, | |
| 33121, | |
| 33309, | |
| 33353, | |
| 33348, | |
| 33344, | |
| 33346, | |
| 33349, | |
| 34033, | |
| 33855, | |
| 33878, | |
| 33910, | |
| 33913, | |
| 33935, | |
| 33933, | |
| 33893, | |
| 33873, | |
| 33856, | |
| 33926, | |
| 33895, | |
| 33840, | |
| 33869, | |
| 33917, | |
| 33882, | |
| 33881, | |
| 33908, | |
| 33907, | |
| 33885, | |
| 34055, | |
| 33886, | |
| 33847, | |
| 33850, | |
| 33844, | |
| 33914, | |
| 33859, | |
| 33912, | |
| 33842, | |
| 33861, | |
| 33833, | |
| 33753, | |
| 33867, | |
| 33839, | |
| 33858, | |
| 33837, | |
| 33887, | |
| 33904, | |
| 33849, | |
| 33870, | |
| 33868, | |
| 33874, | |
| 33903, | |
| 33989, | |
| 33934, | |
| 33851, | |
| 33863, | |
| 33846, | |
| 33843, | |
| 33896, | |
| 33918, | |
| 33860, | |
| 33835, | |
| 33888, | |
| 33876, | |
| 33902, | |
| 33872, | |
| 34571, | |
| 34564, | |
| 34551, | |
| 34572, | |
| 34554, | |
| 34518, | |
| 34549, | |
| 34637, | |
| 34552, | |
| 34574, | |
| 34569, | |
| 34561, | |
| 34550, | |
| 34573, | |
| 34565, | |
| 35030, | |
| 35019, | |
| 35021, | |
| 35022, | |
| 35038, | |
| 35035, | |
| 35034, | |
| 35020, | |
| 35024, | |
| 35205, | |
| 35227, | |
| 35295, | |
| 35301, | |
| 35300, | |
| 35297, | |
| 35296, | |
| 35298, | |
| 35292, | |
| 35302, | |
| 35446, | |
| 35462, | |
| 35455, | |
| 35425, | |
| 35391, | |
| 35447, | |
| 35458, | |
| 35460, | |
| 35445, | |
| 35459, | |
| 35457, | |
| 35444, | |
| 35450, | |
| 35900, | |
| 35915, | |
| 35914, | |
| 35941, | |
| 35940, | |
| 35942, | |
| 35974, | |
| 35972, | |
| 35973, | |
| 36044, | |
| 36200, | |
| 36201, | |
| 36241, | |
| 36236, | |
| 36238, | |
| 36239, | |
| 36237, | |
| 36243, | |
| 36244, | |
| 36240, | |
| 36242, | |
| 36336, | |
| 36320, | |
| 36332, | |
| 36337, | |
| 36334, | |
| 36304, | |
| 36329, | |
| 36323, | |
| 36322, | |
| 36327, | |
| 36338, | |
| 36331, | |
| 36340, | |
| 36614, | |
| 36607, | |
| 36609, | |
| 36608, | |
| 36613, | |
| 36615, | |
| 36616, | |
| 36610, | |
| 36619, | |
| 36946, | |
| 36927, | |
| 36932, | |
| 36937, | |
| 36925, | |
| 37136, | |
| 37133, | |
| 37135, | |
| 37137, | |
| 37142, | |
| 37140, | |
| 37131, | |
| 37134, | |
| 37230, | |
| 37231, | |
| 37448, | |
| 37458, | |
| 37424, | |
| 37434, | |
| 37478, | |
| 37427, | |
| 37477, | |
| 37470, | |
| 37507, | |
| 37422, | |
| 37450, | |
| 37446, | |
| 37485, | |
| 37484, | |
| 37455, | |
| 37472, | |
| 37479, | |
| 37487, | |
| 37430, | |
| 37473, | |
| 37488, | |
| 37425, | |
| 37460, | |
| 37475, | |
| 37456, | |
| 37490, | |
| 37454, | |
| 37459, | |
| 37452, | |
| 37462, | |
| 37426, | |
| 38303, | |
| 38300, | |
| 38302, | |
| 38299, | |
| 38546, | |
| 38547, | |
| 38545, | |
| 38551, | |
| 38606, | |
| 38650, | |
| 38653, | |
| 38648, | |
| 38645, | |
| 38771, | |
| 38775, | |
| 38776, | |
| 38770, | |
| 38927, | |
| 38925, | |
| 38926, | |
| 39084, | |
| 39158, | |
| 39161, | |
| 39343, | |
| 39346, | |
| 39344, | |
| 39349, | |
| 39597, | |
| 39595, | |
| 39771, | |
| 40170, | |
| 40173, | |
| 40167, | |
| 40576, | |
| 40701, | |
| 20710, | |
| 20692, | |
| 20695, | |
| 20712, | |
| 20723, | |
| 20699, | |
| 20714, | |
| 20701, | |
| 20708, | |
| 20691, | |
| 20716, | |
| 20720, | |
| 20719, | |
| 20707, | |
| 20704, | |
| 20952, | |
| 21120, | |
| 21121, | |
| 21225, | |
| 21227, | |
| 21296, | |
| 21420, | |
| 22055, | |
| 22037, | |
| 22028, | |
| 22034, | |
| 22012, | |
| 22031, | |
| 22044, | |
| 22017, | |
| 22035, | |
| 22018, | |
| 22010, | |
| 22045, | |
| 22020, | |
| 22015, | |
| 22009, | |
| 22665, | |
| 22652, | |
| 22672, | |
| 22680, | |
| 22662, | |
| 22657, | |
| 22655, | |
| 22644, | |
| 22667, | |
| 22650, | |
| 22663, | |
| 22673, | |
| 22670, | |
| 22646, | |
| 22658, | |
| 22664, | |
| 22651, | |
| 22676, | |
| 22671, | |
| 22782, | |
| 22891, | |
| 23260, | |
| 23278, | |
| 23269, | |
| 23253, | |
| 23274, | |
| 23258, | |
| 23277, | |
| 23275, | |
| 23283, | |
| 23266, | |
| 23264, | |
| 23259, | |
| 23276, | |
| 23262, | |
| 23261, | |
| 23257, | |
| 23272, | |
| 23263, | |
| 23415, | |
| 23520, | |
| 23523, | |
| 23651, | |
| 23938, | |
| 23936, | |
| 23933, | |
| 23942, | |
| 23930, | |
| 23937, | |
| 23927, | |
| 23946, | |
| 23945, | |
| 23944, | |
| 23934, | |
| 23932, | |
| 23949, | |
| 23929, | |
| 23935, | |
| 24152, | |
| 24153, | |
| 24147, | |
| 24280, | |
| 24273, | |
| 24279, | |
| 24270, | |
| 24284, | |
| 24277, | |
| 24281, | |
| 24274, | |
| 24276, | |
| 24388, | |
| 24387, | |
| 24431, | |
| 24502, | |
| 24876, | |
| 24872, | |
| 24897, | |
| 24926, | |
| 24945, | |
| 24947, | |
| 24914, | |
| 24915, | |
| 24946, | |
| 24940, | |
| 24960, | |
| 24948, | |
| 24916, | |
| 24954, | |
| 24923, | |
| 24933, | |
| 24891, | |
| 24938, | |
| 24929, | |
| 24918, | |
| 25129, | |
| 25127, | |
| 25131, | |
| 25643, | |
| 25677, | |
| 25691, | |
| 25693, | |
| 25716, | |
| 25718, | |
| 25714, | |
| 25715, | |
| 25725, | |
| 25717, | |
| 25702, | |
| 25766, | |
| 25678, | |
| 25730, | |
| 25694, | |
| 25692, | |
| 25675, | |
| 25683, | |
| 25696, | |
| 25680, | |
| 25727, | |
| 25663, | |
| 25708, | |
| 25707, | |
| 25689, | |
| 25701, | |
| 25719, | |
| 25971, | |
| 26016, | |
| 26273, | |
| 26272, | |
| 26271, | |
| 26373, | |
| 26372, | |
| 26402, | |
| 27057, | |
| 27062, | |
| 27081, | |
| 27040, | |
| 27086, | |
| 27030, | |
| 27056, | |
| 27052, | |
| 27068, | |
| 27025, | |
| 27033, | |
| 27022, | |
| 27047, | |
| 27021, | |
| 27049, | |
| 27070, | |
| 27055, | |
| 27071, | |
| 27076, | |
| 27069, | |
| 27044, | |
| 27092, | |
| 27065, | |
| 27082, | |
| 27034, | |
| 27087, | |
| 27059, | |
| 27027, | |
| 27050, | |
| 27041, | |
| 27038, | |
| 27097, | |
| 27031, | |
| 27024, | |
| 27074, | |
| 27061, | |
| 27045, | |
| 27078, | |
| 27466, | |
| 27469, | |
| 27467, | |
| 27550, | |
| 27551, | |
| 27552, | |
| 27587, | |
| 27588, | |
| 27646, | |
| 28366, | |
| 28405, | |
| 28401, | |
| 28419, | |
| 28453, | |
| 28408, | |
| 28471, | |
| 28411, | |
| 28462, | |
| 28425, | |
| 28494, | |
| 28441, | |
| 28442, | |
| 28455, | |
| 28440, | |
| 28475, | |
| 28434, | |
| 28397, | |
| 28426, | |
| 28470, | |
| 28531, | |
| 28409, | |
| 28398, | |
| 28461, | |
| 28480, | |
| 28464, | |
| 28476, | |
| 28469, | |
| 28395, | |
| 28423, | |
| 28430, | |
| 28483, | |
| 28421, | |
| 28413, | |
| 28406, | |
| 28473, | |
| 28444, | |
| 28412, | |
| 28474, | |
| 28447, | |
| 28429, | |
| 28446, | |
| 28424, | |
| 28449, | |
| 29063, | |
| 29072, | |
| 29065, | |
| 29056, | |
| 29061, | |
| 29058, | |
| 29071, | |
| 29051, | |
| 29062, | |
| 29057, | |
| 29079, | |
| 29252, | |
| 29267, | |
| 29335, | |
| 29333, | |
| 29331, | |
| 29507, | |
| 29517, | |
| 29521, | |
| 29516, | |
| 29794, | |
| 29811, | |
| 29809, | |
| 29813, | |
| 29810, | |
| 29799, | |
| 29806, | |
| 29952, | |
| 29954, | |
| 29955, | |
| 30077, | |
| 30096, | |
| 30230, | |
| 30216, | |
| 30220, | |
| 30229, | |
| 30225, | |
| 30218, | |
| 30228, | |
| 30392, | |
| 30593, | |
| 30588, | |
| 30597, | |
| 30594, | |
| 30574, | |
| 30592, | |
| 30575, | |
| 30590, | |
| 30595, | |
| 30898, | |
| 30890, | |
| 30900, | |
| 30893, | |
| 30888, | |
| 30846, | |
| 30891, | |
| 30878, | |
| 30885, | |
| 30880, | |
| 30892, | |
| 30882, | |
| 30884, | |
| 31128, | |
| 31114, | |
| 31115, | |
| 31126, | |
| 31125, | |
| 31124, | |
| 31123, | |
| 31127, | |
| 31112, | |
| 31122, | |
| 31120, | |
| 31275, | |
| 31306, | |
| 31280, | |
| 31279, | |
| 31272, | |
| 31270, | |
| 31400, | |
| 31403, | |
| 31404, | |
| 31470, | |
| 31624, | |
| 31644, | |
| 31626, | |
| 31633, | |
| 31632, | |
| 31638, | |
| 31629, | |
| 31628, | |
| 31643, | |
| 31630, | |
| 31621, | |
| 31640, | |
| 21124, | |
| 31641, | |
| 31652, | |
| 31618, | |
| 31931, | |
| 31935, | |
| 31932, | |
| 31930, | |
| 32167, | |
| 32183, | |
| 32194, | |
| 32163, | |
| 32170, | |
| 32193, | |
| 32192, | |
| 32197, | |
| 32157, | |
| 32206, | |
| 32196, | |
| 32198, | |
| 32203, | |
| 32204, | |
| 32175, | |
| 32185, | |
| 32150, | |
| 32188, | |
| 32159, | |
| 32166, | |
| 32174, | |
| 32169, | |
| 32161, | |
| 32201, | |
| 32627, | |
| 32738, | |
| 32739, | |
| 32741, | |
| 32734, | |
| 32804, | |
| 32861, | |
| 32860, | |
| 33161, | |
| 33158, | |
| 33155, | |
| 33159, | |
| 33165, | |
| 33164, | |
| 33163, | |
| 33301, | |
| 33943, | |
| 33956, | |
| 33953, | |
| 33951, | |
| 33978, | |
| 33998, | |
| 33986, | |
| 33964, | |
| 33966, | |
| 33963, | |
| 33977, | |
| 33972, | |
| 33985, | |
| 33997, | |
| 33962, | |
| 33946, | |
| 33969, | |
| 34000, | |
| 33949, | |
| 33959, | |
| 33979, | |
| 33954, | |
| 33940, | |
| 33991, | |
| 33996, | |
| 33947, | |
| 33961, | |
| 33967, | |
| 33960, | |
| 34006, | |
| 33944, | |
| 33974, | |
| 33999, | |
| 33952, | |
| 34007, | |
| 34004, | |
| 34002, | |
| 34011, | |
| 33968, | |
| 33937, | |
| 34401, | |
| 34611, | |
| 34595, | |
| 34600, | |
| 34667, | |
| 34624, | |
| 34606, | |
| 34590, | |
| 34593, | |
| 34585, | |
| 34587, | |
| 34627, | |
| 34604, | |
| 34625, | |
| 34622, | |
| 34630, | |
| 34592, | |
| 34610, | |
| 34602, | |
| 34605, | |
| 34620, | |
| 34578, | |
| 34618, | |
| 34609, | |
| 34613, | |
| 34626, | |
| 34598, | |
| 34599, | |
| 34616, | |
| 34596, | |
| 34586, | |
| 34608, | |
| 34577, | |
| 35063, | |
| 35047, | |
| 35057, | |
| 35058, | |
| 35066, | |
| 35070, | |
| 35054, | |
| 35068, | |
| 35062, | |
| 35067, | |
| 35056, | |
| 35052, | |
| 35051, | |
| 35229, | |
| 35233, | |
| 35231, | |
| 35230, | |
| 35305, | |
| 35307, | |
| 35304, | |
| 35499, | |
| 35481, | |
| 35467, | |
| 35474, | |
| 35471, | |
| 35478, | |
| 35901, | |
| 35944, | |
| 35945, | |
| 36053, | |
| 36047, | |
| 36055, | |
| 36246, | |
| 36361, | |
| 36354, | |
| 36351, | |
| 36365, | |
| 36349, | |
| 36362, | |
| 36355, | |
| 36359, | |
| 36358, | |
| 36357, | |
| 36350, | |
| 36352, | |
| 36356, | |
| 36624, | |
| 36625, | |
| 36622, | |
| 36621, | |
| 37155, | |
| 37148, | |
| 37152, | |
| 37154, | |
| 37151, | |
| 37149, | |
| 37146, | |
| 37156, | |
| 37153, | |
| 37147, | |
| 37242, | |
| 37234, | |
| 37241, | |
| 37235, | |
| 37541, | |
| 37540, | |
| 37494, | |
| 37531, | |
| 37498, | |
| 37536, | |
| 37524, | |
| 37546, | |
| 37517, | |
| 37542, | |
| 37530, | |
| 37547, | |
| 37497, | |
| 37527, | |
| 37503, | |
| 37539, | |
| 37614, | |
| 37518, | |
| 37506, | |
| 37525, | |
| 37538, | |
| 37501, | |
| 37512, | |
| 37537, | |
| 37514, | |
| 37510, | |
| 37516, | |
| 37529, | |
| 37543, | |
| 37502, | |
| 37511, | |
| 37545, | |
| 37533, | |
| 37515, | |
| 37421, | |
| 38558, | |
| 38561, | |
| 38655, | |
| 38744, | |
| 38781, | |
| 38778, | |
| 38782, | |
| 38787, | |
| 38784, | |
| 38786, | |
| 38779, | |
| 38788, | |
| 38785, | |
| 38783, | |
| 38862, | |
| 38861, | |
| 38934, | |
| 39085, | |
| 39086, | |
| 39170, | |
| 39168, | |
| 39175, | |
| 39325, | |
| 39324, | |
| 39363, | |
| 39353, | |
| 39355, | |
| 39354, | |
| 39362, | |
| 39357, | |
| 39367, | |
| 39601, | |
| 39651, | |
| 39655, | |
| 39742, | |
| 39743, | |
| 39776, | |
| 39777, | |
| 39775, | |
| 40177, | |
| 40178, | |
| 40181, | |
| 40615, | |
| 20735, | |
| 20739, | |
| 20784, | |
| 20728, | |
| 20742, | |
| 20743, | |
| 20726, | |
| 20734, | |
| 20747, | |
| 20748, | |
| 20733, | |
| 20746, | |
| 21131, | |
| 21132, | |
| 21233, | |
| 21231, | |
| 22088, | |
| 22082, | |
| 22092, | |
| 22069, | |
| 22081, | |
| 22090, | |
| 22089, | |
| 22086, | |
| 22104, | |
| 22106, | |
| 22080, | |
| 22067, | |
| 22077, | |
| 22060, | |
| 22078, | |
| 22072, | |
| 22058, | |
| 22074, | |
| 22298, | |
| 22699, | |
| 22685, | |
| 22705, | |
| 22688, | |
| 22691, | |
| 22703, | |
| 22700, | |
| 22693, | |
| 22689, | |
| 22783, | |
| 23295, | |
| 23284, | |
| 23293, | |
| 23287, | |
| 23286, | |
| 23299, | |
| 23288, | |
| 23298, | |
| 23289, | |
| 23297, | |
| 23303, | |
| 23301, | |
| 23311, | |
| 23655, | |
| 23961, | |
| 23959, | |
| 23967, | |
| 23954, | |
| 23970, | |
| 23955, | |
| 23957, | |
| 23968, | |
| 23964, | |
| 23969, | |
| 23962, | |
| 23966, | |
| 24169, | |
| 24157, | |
| 24160, | |
| 24156, | |
| 32243, | |
| 24283, | |
| 24286, | |
| 24289, | |
| 24393, | |
| 24498, | |
| 24971, | |
| 24963, | |
| 24953, | |
| 25009, | |
| 25008, | |
| 24994, | |
| 24969, | |
| 24987, | |
| 24979, | |
| 25007, | |
| 25005, | |
| 24991, | |
| 24978, | |
| 25002, | |
| 24993, | |
| 24973, | |
| 24934, | |
| 25011, | |
| 25133, | |
| 25710, | |
| 25712, | |
| 25750, | |
| 25760, | |
| 25733, | |
| 25751, | |
| 25756, | |
| 25743, | |
| 25739, | |
| 25738, | |
| 25740, | |
| 25763, | |
| 25759, | |
| 25704, | |
| 25777, | |
| 25752, | |
| 25974, | |
| 25978, | |
| 25977, | |
| 25979, | |
| 26034, | |
| 26035, | |
| 26293, | |
| 26288, | |
| 26281, | |
| 26290, | |
| 26295, | |
| 26282, | |
| 26287, | |
| 27136, | |
| 27142, | |
| 27159, | |
| 27109, | |
| 27128, | |
| 27157, | |
| 27121, | |
| 27108, | |
| 27168, | |
| 27135, | |
| 27116, | |
| 27106, | |
| 27163, | |
| 27165, | |
| 27134, | |
| 27175, | |
| 27122, | |
| 27118, | |
| 27156, | |
| 27127, | |
| 27111, | |
| 27200, | |
| 27144, | |
| 27110, | |
| 27131, | |
| 27149, | |
| 27132, | |
| 27115, | |
| 27145, | |
| 27140, | |
| 27160, | |
| 27173, | |
| 27151, | |
| 27126, | |
| 27174, | |
| 27143, | |
| 27124, | |
| 27158, | |
| 27473, | |
| 27557, | |
| 27555, | |
| 27554, | |
| 27558, | |
| 27649, | |
| 27648, | |
| 27647, | |
| 27650, | |
| 28481, | |
| 28454, | |
| 28542, | |
| 28551, | |
| 28614, | |
| 28562, | |
| 28557, | |
| 28553, | |
| 28556, | |
| 28514, | |
| 28495, | |
| 28549, | |
| 28506, | |
| 28566, | |
| 28534, | |
| 28524, | |
| 28546, | |
| 28501, | |
| 28530, | |
| 28498, | |
| 28496, | |
| 28503, | |
| 28564, | |
| 28563, | |
| 28509, | |
| 28416, | |
| 28513, | |
| 28523, | |
| 28541, | |
| 28519, | |
| 28560, | |
| 28499, | |
| 28555, | |
| 28521, | |
| 28543, | |
| 28565, | |
| 28515, | |
| 28535, | |
| 28522, | |
| 28539, | |
| 29106, | |
| 29103, | |
| 29083, | |
| 29104, | |
| 29088, | |
| 29082, | |
| 29097, | |
| 29109, | |
| 29085, | |
| 29093, | |
| 29086, | |
| 29092, | |
| 29089, | |
| 29098, | |
| 29084, | |
| 29095, | |
| 29107, | |
| 29336, | |
| 29338, | |
| 29528, | |
| 29522, | |
| 29534, | |
| 29535, | |
| 29536, | |
| 29533, | |
| 29531, | |
| 29537, | |
| 29530, | |
| 29529, | |
| 29538, | |
| 29831, | |
| 29833, | |
| 29834, | |
| 29830, | |
| 29825, | |
| 29821, | |
| 29829, | |
| 29832, | |
| 29820, | |
| 29817, | |
| 29960, | |
| 29959, | |
| 30078, | |
| 30245, | |
| 30238, | |
| 30233, | |
| 30237, | |
| 30236, | |
| 30243, | |
| 30234, | |
| 30248, | |
| 30235, | |
| 30364, | |
| 30365, | |
| 30366, | |
| 30363, | |
| 30605, | |
| 30607, | |
| 30601, | |
| 30600, | |
| 30925, | |
| 30907, | |
| 30927, | |
| 30924, | |
| 30929, | |
| 30926, | |
| 30932, | |
| 30920, | |
| 30915, | |
| 30916, | |
| 30921, | |
| 31130, | |
| 31137, | |
| 31136, | |
| 31132, | |
| 31138, | |
| 31131, | |
| 27510, | |
| 31289, | |
| 31410, | |
| 31412, | |
| 31411, | |
| 31671, | |
| 31691, | |
| 31678, | |
| 31660, | |
| 31694, | |
| 31663, | |
| 31673, | |
| 31690, | |
| 31669, | |
| 31941, | |
| 31944, | |
| 31948, | |
| 31947, | |
| 32247, | |
| 32219, | |
| 32234, | |
| 32231, | |
| 32215, | |
| 32225, | |
| 32259, | |
| 32250, | |
| 32230, | |
| 32246, | |
| 32241, | |
| 32240, | |
| 32238, | |
| 32223, | |
| 32630, | |
| 32684, | |
| 32688, | |
| 32685, | |
| 32749, | |
| 32747, | |
| 32746, | |
| 32748, | |
| 32742, | |
| 32744, | |
| 32868, | |
| 32871, | |
| 33187, | |
| 33183, | |
| 33182, | |
| 33173, | |
| 33186, | |
| 33177, | |
| 33175, | |
| 33302, | |
| 33359, | |
| 33363, | |
| 33362, | |
| 33360, | |
| 33358, | |
| 33361, | |
| 34084, | |
| 34107, | |
| 34063, | |
| 34048, | |
| 34089, | |
| 34062, | |
| 34057, | |
| 34061, | |
| 34079, | |
| 34058, | |
| 34087, | |
| 34076, | |
| 34043, | |
| 34091, | |
| 34042, | |
| 34056, | |
| 34060, | |
| 34036, | |
| 34090, | |
| 34034, | |
| 34069, | |
| 34039, | |
| 34027, | |
| 34035, | |
| 34044, | |
| 34066, | |
| 34026, | |
| 34025, | |
| 34070, | |
| 34046, | |
| 34088, | |
| 34077, | |
| 34094, | |
| 34050, | |
| 34045, | |
| 34078, | |
| 34038, | |
| 34097, | |
| 34086, | |
| 34023, | |
| 34024, | |
| 34032, | |
| 34031, | |
| 34041, | |
| 34072, | |
| 34080, | |
| 34096, | |
| 34059, | |
| 34073, | |
| 34095, | |
| 34402, | |
| 34646, | |
| 34659, | |
| 34660, | |
| 34679, | |
| 34785, | |
| 34675, | |
| 34648, | |
| 34644, | |
| 34651, | |
| 34642, | |
| 34657, | |
| 34650, | |
| 34641, | |
| 34654, | |
| 34669, | |
| 34666, | |
| 34640, | |
| 34638, | |
| 34655, | |
| 34653, | |
| 34671, | |
| 34668, | |
| 34682, | |
| 34670, | |
| 34652, | |
| 34661, | |
| 34639, | |
| 34683, | |
| 34677, | |
| 34658, | |
| 34663, | |
| 34665, | |
| 34906, | |
| 35077, | |
| 35084, | |
| 35092, | |
| 35083, | |
| 35095, | |
| 35096, | |
| 35097, | |
| 35078, | |
| 35094, | |
| 35089, | |
| 35086, | |
| 35081, | |
| 35234, | |
| 35236, | |
| 35235, | |
| 35309, | |
| 35312, | |
| 35308, | |
| 35535, | |
| 35526, | |
| 35512, | |
| 35539, | |
| 35537, | |
| 35540, | |
| 35541, | |
| 35515, | |
| 35543, | |
| 35518, | |
| 35520, | |
| 35525, | |
| 35544, | |
| 35523, | |
| 35514, | |
| 35517, | |
| 35545, | |
| 35902, | |
| 35917, | |
| 35983, | |
| 36069, | |
| 36063, | |
| 36057, | |
| 36072, | |
| 36058, | |
| 36061, | |
| 36071, | |
| 36256, | |
| 36252, | |
| 36257, | |
| 36251, | |
| 36384, | |
| 36387, | |
| 36389, | |
| 36388, | |
| 36398, | |
| 36373, | |
| 36379, | |
| 36374, | |
| 36369, | |
| 36377, | |
| 36390, | |
| 36391, | |
| 36372, | |
| 36370, | |
| 36376, | |
| 36371, | |
| 36380, | |
| 36375, | |
| 36378, | |
| 36652, | |
| 36644, | |
| 36632, | |
| 36634, | |
| 36640, | |
| 36643, | |
| 36630, | |
| 36631, | |
| 36979, | |
| 36976, | |
| 36975, | |
| 36967, | |
| 36971, | |
| 37167, | |
| 37163, | |
| 37161, | |
| 37162, | |
| 37170, | |
| 37158, | |
| 37166, | |
| 37253, | |
| 37254, | |
| 37258, | |
| 37249, | |
| 37250, | |
| 37252, | |
| 37248, | |
| 37584, | |
| 37571, | |
| 37572, | |
| 37568, | |
| 37593, | |
| 37558, | |
| 37583, | |
| 37617, | |
| 37599, | |
| 37592, | |
| 37609, | |
| 37591, | |
| 37597, | |
| 37580, | |
| 37615, | |
| 37570, | |
| 37608, | |
| 37578, | |
| 37576, | |
| 37582, | |
| 37606, | |
| 37581, | |
| 37589, | |
| 37577, | |
| 37600, | |
| 37598, | |
| 37607, | |
| 37585, | |
| 37587, | |
| 37557, | |
| 37601, | |
| 37574, | |
| 37556, | |
| 38268, | |
| 38316, | |
| 38315, | |
| 38318, | |
| 38320, | |
| 38564, | |
| 38562, | |
| 38611, | |
| 38661, | |
| 38664, | |
| 38658, | |
| 38746, | |
| 38794, | |
| 38798, | |
| 38792, | |
| 38864, | |
| 38863, | |
| 38942, | |
| 38941, | |
| 38950, | |
| 38953, | |
| 38952, | |
| 38944, | |
| 38939, | |
| 38951, | |
| 39090, | |
| 39176, | |
| 39162, | |
| 39185, | |
| 39188, | |
| 39190, | |
| 39191, | |
| 39189, | |
| 39388, | |
| 39373, | |
| 39375, | |
| 39379, | |
| 39380, | |
| 39374, | |
| 39369, | |
| 39382, | |
| 39384, | |
| 39371, | |
| 39383, | |
| 39372, | |
| 39603, | |
| 39660, | |
| 39659, | |
| 39667, | |
| 39666, | |
| 39665, | |
| 39750, | |
| 39747, | |
| 39783, | |
| 39796, | |
| 39793, | |
| 39782, | |
| 39798, | |
| 39797, | |
| 39792, | |
| 39784, | |
| 39780, | |
| 39788, | |
| 40188, | |
| 40186, | |
| 40189, | |
| 40191, | |
| 40183, | |
| 40199, | |
| 40192, | |
| 40185, | |
| 40187, | |
| 40200, | |
| 40197, | |
| 40196, | |
| 40579, | |
| 40659, | |
| 40719, | |
| 40720, | |
| 20764, | |
| 20755, | |
| 20759, | |
| 20762, | |
| 20753, | |
| 20958, | |
| 21300, | |
| 21473, | |
| 22128, | |
| 22112, | |
| 22126, | |
| 22131, | |
| 22118, | |
| 22115, | |
| 22125, | |
| 22130, | |
| 22110, | |
| 22135, | |
| 22300, | |
| 22299, | |
| 22728, | |
| 22717, | |
| 22729, | |
| 22719, | |
| 22714, | |
| 22722, | |
| 22716, | |
| 22726, | |
| 23319, | |
| 23321, | |
| 23323, | |
| 23329, | |
| 23316, | |
| 23315, | |
| 23312, | |
| 23318, | |
| 23336, | |
| 23322, | |
| 23328, | |
| 23326, | |
| 23535, | |
| 23980, | |
| 23985, | |
| 23977, | |
| 23975, | |
| 23989, | |
| 23984, | |
| 23982, | |
| 23978, | |
| 23976, | |
| 23986, | |
| 23981, | |
| 23983, | |
| 23988, | |
| 24167, | |
| 24168, | |
| 24166, | |
| 24175, | |
| 24297, | |
| 24295, | |
| 24294, | |
| 24296, | |
| 24293, | |
| 24395, | |
| 24508, | |
| 24989, | |
| 25000, | |
| 24982, | |
| 25029, | |
| 25012, | |
| 25030, | |
| 25025, | |
| 25036, | |
| 25018, | |
| 25023, | |
| 25016, | |
| 24972, | |
| 25815, | |
| 25814, | |
| 25808, | |
| 25807, | |
| 25801, | |
| 25789, | |
| 25737, | |
| 25795, | |
| 25819, | |
| 25843, | |
| 25817, | |
| 25907, | |
| 25983, | |
| 25980, | |
| 26018, | |
| 26312, | |
| 26302, | |
| 26304, | |
| 26314, | |
| 26315, | |
| 26319, | |
| 26301, | |
| 26299, | |
| 26298, | |
| 26316, | |
| 26403, | |
| 27188, | |
| 27238, | |
| 27209, | |
| 27239, | |
| 27186, | |
| 27240, | |
| 27198, | |
| 27229, | |
| 27245, | |
| 27254, | |
| 27227, | |
| 27217, | |
| 27176, | |
| 27226, | |
| 27195, | |
| 27199, | |
| 27201, | |
| 27242, | |
| 27236, | |
| 27216, | |
| 27215, | |
| 27220, | |
| 27247, | |
| 27241, | |
| 27232, | |
| 27196, | |
| 27230, | |
| 27222, | |
| 27221, | |
| 27213, | |
| 27214, | |
| 27206, | |
| 27477, | |
| 27476, | |
| 27478, | |
| 27559, | |
| 27562, | |
| 27563, | |
| 27592, | |
| 27591, | |
| 27652, | |
| 27651, | |
| 27654, | |
| 28589, | |
| 28619, | |
| 28579, | |
| 28615, | |
| 28604, | |
| 28622, | |
| 28616, | |
| 28510, | |
| 28612, | |
| 28605, | |
| 28574, | |
| 28618, | |
| 28584, | |
| 28676, | |
| 28581, | |
| 28590, | |
| 28602, | |
| 28588, | |
| 28586, | |
| 28623, | |
| 28607, | |
| 28600, | |
| 28578, | |
| 28617, | |
| 28587, | |
| 28621, | |
| 28591, | |
| 28594, | |
| 28592, | |
| 29125, | |
| 29122, | |
| 29119, | |
| 29112, | |
| 29142, | |
| 29120, | |
| 29121, | |
| 29131, | |
| 29140, | |
| 29130, | |
| 29127, | |
| 29135, | |
| 29117, | |
| 29144, | |
| 29116, | |
| 29126, | |
| 29146, | |
| 29147, | |
| 29341, | |
| 29342, | |
| 29545, | |
| 29542, | |
| 29543, | |
| 29548, | |
| 29541, | |
| 29547, | |
| 29546, | |
| 29823, | |
| 29850, | |
| 29856, | |
| 29844, | |
| 29842, | |
| 29845, | |
| 29857, | |
| 29963, | |
| 30080, | |
| 30255, | |
| 30253, | |
| 30257, | |
| 30269, | |
| 30259, | |
| 30268, | |
| 30261, | |
| 30258, | |
| 30256, | |
| 30395, | |
| 30438, | |
| 30618, | |
| 30621, | |
| 30625, | |
| 30620, | |
| 30619, | |
| 30626, | |
| 30627, | |
| 30613, | |
| 30617, | |
| 30615, | |
| 30941, | |
| 30953, | |
| 30949, | |
| 30954, | |
| 30942, | |
| 30947, | |
| 30939, | |
| 30945, | |
| 30946, | |
| 30957, | |
| 30943, | |
| 30944, | |
| 31140, | |
| 31300, | |
| 31304, | |
| 31303, | |
| 31414, | |
| 31416, | |
| 31413, | |
| 31409, | |
| 31415, | |
| 31710, | |
| 31715, | |
| 31719, | |
| 31709, | |
| 31701, | |
| 31717, | |
| 31706, | |
| 31720, | |
| 31737, | |
| 31700, | |
| 31722, | |
| 31714, | |
| 31708, | |
| 31723, | |
| 31704, | |
| 31711, | |
| 31954, | |
| 31956, | |
| 31959, | |
| 31952, | |
| 31953, | |
| 32274, | |
| 32289, | |
| 32279, | |
| 32268, | |
| 32287, | |
| 32288, | |
| 32275, | |
| 32270, | |
| 32284, | |
| 32277, | |
| 32282, | |
| 32290, | |
| 32267, | |
| 32271, | |
| 32278, | |
| 32269, | |
| 32276, | |
| 32293, | |
| 32292, | |
| 32579, | |
| 32635, | |
| 32636, | |
| 32634, | |
| 32689, | |
| 32751, | |
| 32810, | |
| 32809, | |
| 32876, | |
| 33201, | |
| 33190, | |
| 33198, | |
| 33209, | |
| 33205, | |
| 33195, | |
| 33200, | |
| 33196, | |
| 33204, | |
| 33202, | |
| 33207, | |
| 33191, | |
| 33266, | |
| 33365, | |
| 33366, | |
| 33367, | |
| 34134, | |
| 34117, | |
| 34155, | |
| 34125, | |
| 34131, | |
| 34145, | |
| 34136, | |
| 34112, | |
| 34118, | |
| 34148, | |
| 34113, | |
| 34146, | |
| 34116, | |
| 34129, | |
| 34119, | |
| 34147, | |
| 34110, | |
| 34139, | |
| 34161, | |
| 34126, | |
| 34158, | |
| 34165, | |
| 34133, | |
| 34151, | |
| 34144, | |
| 34188, | |
| 34150, | |
| 34141, | |
| 34132, | |
| 34149, | |
| 34156, | |
| 34403, | |
| 34405, | |
| 34404, | |
| 34715, | |
| 34703, | |
| 34711, | |
| 34707, | |
| 34706, | |
| 34696, | |
| 34689, | |
| 34710, | |
| 34712, | |
| 34681, | |
| 34695, | |
| 34723, | |
| 34693, | |
| 34704, | |
| 34705, | |
| 34717, | |
| 34692, | |
| 34708, | |
| 34716, | |
| 34714, | |
| 34697, | |
| 35102, | |
| 35110, | |
| 35120, | |
| 35117, | |
| 35118, | |
| 35111, | |
| 35121, | |
| 35106, | |
| 35113, | |
| 35107, | |
| 35119, | |
| 35116, | |
| 35103, | |
| 35313, | |
| 35552, | |
| 35554, | |
| 35570, | |
| 35572, | |
| 35573, | |
| 35549, | |
| 35604, | |
| 35556, | |
| 35551, | |
| 35568, | |
| 35528, | |
| 35550, | |
| 35553, | |
| 35560, | |
| 35583, | |
| 35567, | |
| 35579, | |
| 35985, | |
| 35986, | |
| 35984, | |
| 36085, | |
| 36078, | |
| 36081, | |
| 36080, | |
| 36083, | |
| 36204, | |
| 36206, | |
| 36261, | |
| 36263, | |
| 36403, | |
| 36414, | |
| 36408, | |
| 36416, | |
| 36421, | |
| 36406, | |
| 36412, | |
| 36413, | |
| 36417, | |
| 36400, | |
| 36415, | |
| 36541, | |
| 36662, | |
| 36654, | |
| 36661, | |
| 36658, | |
| 36665, | |
| 36663, | |
| 36660, | |
| 36982, | |
| 36985, | |
| 36987, | |
| 36998, | |
| 37114, | |
| 37171, | |
| 37173, | |
| 37174, | |
| 37267, | |
| 37264, | |
| 37265, | |
| 37261, | |
| 37263, | |
| 37671, | |
| 37662, | |
| 37640, | |
| 37663, | |
| 37638, | |
| 37647, | |
| 37754, | |
| 37688, | |
| 37692, | |
| 37659, | |
| 37667, | |
| 37650, | |
| 37633, | |
| 37702, | |
| 37677, | |
| 37646, | |
| 37645, | |
| 37579, | |
| 37661, | |
| 37626, | |
| 37669, | |
| 37651, | |
| 37625, | |
| 37623, | |
| 37684, | |
| 37634, | |
| 37668, | |
| 37631, | |
| 37673, | |
| 37689, | |
| 37685, | |
| 37674, | |
| 37652, | |
| 37644, | |
| 37643, | |
| 37630, | |
| 37641, | |
| 37632, | |
| 37627, | |
| 37654, | |
| 38332, | |
| 38349, | |
| 38334, | |
| 38329, | |
| 38330, | |
| 38326, | |
| 38335, | |
| 38325, | |
| 38333, | |
| 38569, | |
| 38612, | |
| 38667, | |
| 38674, | |
| 38672, | |
| 38809, | |
| 38807, | |
| 38804, | |
| 38896, | |
| 38904, | |
| 38965, | |
| 38959, | |
| 38962, | |
| 39204, | |
| 39199, | |
| 39207, | |
| 39209, | |
| 39326, | |
| 39406, | |
| 39404, | |
| 39397, | |
| 39396, | |
| 39408, | |
| 39395, | |
| 39402, | |
| 39401, | |
| 39399, | |
| 39609, | |
| 39615, | |
| 39604, | |
| 39611, | |
| 39670, | |
| 39674, | |
| 39673, | |
| 39671, | |
| 39731, | |
| 39808, | |
| 39813, | |
| 39815, | |
| 39804, | |
| 39806, | |
| 39803, | |
| 39810, | |
| 39827, | |
| 39826, | |
| 39824, | |
| 39802, | |
| 39829, | |
| 39805, | |
| 39816, | |
| 40229, | |
| 40215, | |
| 40224, | |
| 40222, | |
| 40212, | |
| 40233, | |
| 40221, | |
| 40216, | |
| 40226, | |
| 40208, | |
| 40217, | |
| 40223, | |
| 40584, | |
| 40582, | |
| 40583, | |
| 40622, | |
| 40621, | |
| 40661, | |
| 40662, | |
| 40698, | |
| 40722, | |
| 40765, | |
| 20774, | |
| 20773, | |
| 20770, | |
| 20772, | |
| 20768, | |
| 20777, | |
| 21236, | |
| 22163, | |
| 22156, | |
| 22157, | |
| 22150, | |
| 22148, | |
| 22147, | |
| 22142, | |
| 22146, | |
| 22143, | |
| 22145, | |
| 22742, | |
| 22740, | |
| 22735, | |
| 22738, | |
| 23341, | |
| 23333, | |
| 23346, | |
| 23331, | |
| 23340, | |
| 23335, | |
| 23334, | |
| 23343, | |
| 23342, | |
| 23419, | |
| 23537, | |
| 23538, | |
| 23991, | |
| 24172, | |
| 24170, | |
| 24510, | |
| 24507, | |
| 25027, | |
| 25013, | |
| 25020, | |
| 25063, | |
| 25056, | |
| 25061, | |
| 25060, | |
| 25064, | |
| 25054, | |
| 25839, | |
| 25833, | |
| 25827, | |
| 25835, | |
| 25828, | |
| 25832, | |
| 25985, | |
| 25984, | |
| 26038, | |
| 26074, | |
| 26322, | |
| 27277, | |
| 27286, | |
| 27265, | |
| 27301, | |
| 27273, | |
| 27295, | |
| 27291, | |
| 27297, | |
| 27294, | |
| 27271, | |
| 27283, | |
| 27278, | |
| 27285, | |
| 27267, | |
| 27304, | |
| 27300, | |
| 27281, | |
| 27263, | |
| 27302, | |
| 27290, | |
| 27269, | |
| 27276, | |
| 27282, | |
| 27483, | |
| 27565, | |
| 27657, | |
| 28620, | |
| 28585, | |
| 28660, | |
| 28628, | |
| 28643, | |
| 28636, | |
| 28653, | |
| 28647, | |
| 28646, | |
| 28638, | |
| 28658, | |
| 28637, | |
| 28642, | |
| 28648, | |
| 29153, | |
| 29169, | |
| 29160, | |
| 29170, | |
| 29156, | |
| 29168, | |
| 29154, | |
| 29555, | |
| 29550, | |
| 29551, | |
| 29847, | |
| 29874, | |
| 29867, | |
| 29840, | |
| 29866, | |
| 29869, | |
| 29873, | |
| 29861, | |
| 29871, | |
| 29968, | |
| 29969, | |
| 29970, | |
| 29967, | |
| 30084, | |
| 30275, | |
| 30280, | |
| 30281, | |
| 30279, | |
| 30372, | |
| 30441, | |
| 30645, | |
| 30635, | |
| 30642, | |
| 30647, | |
| 30646, | |
| 30644, | |
| 30641, | |
| 30632, | |
| 30704, | |
| 30963, | |
| 30973, | |
| 30978, | |
| 30971, | |
| 30972, | |
| 30962, | |
| 30981, | |
| 30969, | |
| 30974, | |
| 30980, | |
| 31147, | |
| 31144, | |
| 31324, | |
| 31323, | |
| 31318, | |
| 31320, | |
| 31316, | |
| 31322, | |
| 31422, | |
| 31424, | |
| 31425, | |
| 31749, | |
| 31759, | |
| 31730, | |
| 31744, | |
| 31743, | |
| 31739, | |
| 31758, | |
| 31732, | |
| 31755, | |
| 31731, | |
| 31746, | |
| 31753, | |
| 31747, | |
| 31745, | |
| 31736, | |
| 31741, | |
| 31750, | |
| 31728, | |
| 31729, | |
| 31760, | |
| 31754, | |
| 31976, | |
| 32301, | |
| 32316, | |
| 32322, | |
| 32307, | |
| 38984, | |
| 32312, | |
| 32298, | |
| 32329, | |
| 32320, | |
| 32327, | |
| 32297, | |
| 32332, | |
| 32304, | |
| 32315, | |
| 32310, | |
| 32324, | |
| 32314, | |
| 32581, | |
| 32639, | |
| 32638, | |
| 32637, | |
| 32756, | |
| 32754, | |
| 32812, | |
| 33211, | |
| 33220, | |
| 33228, | |
| 33226, | |
| 33221, | |
| 33223, | |
| 33212, | |
| 33257, | |
| 33371, | |
| 33370, | |
| 33372, | |
| 34179, | |
| 34176, | |
| 34191, | |
| 34215, | |
| 34197, | |
| 34208, | |
| 34187, | |
| 34211, | |
| 34171, | |
| 34212, | |
| 34202, | |
| 34206, | |
| 34167, | |
| 34172, | |
| 34185, | |
| 34209, | |
| 34170, | |
| 34168, | |
| 34135, | |
| 34190, | |
| 34198, | |
| 34182, | |
| 34189, | |
| 34201, | |
| 34205, | |
| 34177, | |
| 34210, | |
| 34178, | |
| 34184, | |
| 34181, | |
| 34169, | |
| 34166, | |
| 34200, | |
| 34192, | |
| 34207, | |
| 34408, | |
| 34750, | |
| 34730, | |
| 34733, | |
| 34757, | |
| 34736, | |
| 34732, | |
| 34745, | |
| 34741, | |
| 34748, | |
| 34734, | |
| 34761, | |
| 34755, | |
| 34754, | |
| 34764, | |
| 34743, | |
| 34735, | |
| 34756, | |
| 34762, | |
| 34740, | |
| 34742, | |
| 34751, | |
| 34744, | |
| 34749, | |
| 34782, | |
| 34738, | |
| 35125, | |
| 35123, | |
| 35132, | |
| 35134, | |
| 35137, | |
| 35154, | |
| 35127, | |
| 35138, | |
| 35245, | |
| 35247, | |
| 35246, | |
| 35314, | |
| 35315, | |
| 35614, | |
| 35608, | |
| 35606, | |
| 35601, | |
| 35589, | |
| 35595, | |
| 35618, | |
| 35599, | |
| 35602, | |
| 35605, | |
| 35591, | |
| 35597, | |
| 35592, | |
| 35590, | |
| 35612, | |
| 35603, | |
| 35610, | |
| 35919, | |
| 35952, | |
| 35954, | |
| 35953, | |
| 35951, | |
| 35989, | |
| 35988, | |
| 36089, | |
| 36207, | |
| 36430, | |
| 36429, | |
| 36435, | |
| 36432, | |
| 36428, | |
| 36423, | |
| 36675, | |
| 36672, | |
| 36997, | |
| 36990, | |
| 37176, | |
| 37274, | |
| 37282, | |
| 37275, | |
| 37273, | |
| 37279, | |
| 37281, | |
| 37277, | |
| 37280, | |
| 37793, | |
| 37763, | |
| 37807, | |
| 37732, | |
| 37718, | |
| 37703, | |
| 37756, | |
| 37720, | |
| 37724, | |
| 37750, | |
| 37705, | |
| 37712, | |
| 37713, | |
| 37728, | |
| 37741, | |
| 37775, | |
| 37708, | |
| 37738, | |
| 37753, | |
| 37719, | |
| 37717, | |
| 37714, | |
| 37711, | |
| 37745, | |
| 37751, | |
| 37755, | |
| 37729, | |
| 37726, | |
| 37731, | |
| 37735, | |
| 37760, | |
| 37710, | |
| 37721, | |
| 38343, | |
| 38336, | |
| 38345, | |
| 38339, | |
| 38341, | |
| 38327, | |
| 38574, | |
| 38576, | |
| 38572, | |
| 38688, | |
| 38687, | |
| 38680, | |
| 38685, | |
| 38681, | |
| 38810, | |
| 38817, | |
| 38812, | |
| 38814, | |
| 38813, | |
| 38869, | |
| 38868, | |
| 38897, | |
| 38977, | |
| 38980, | |
| 38986, | |
| 38985, | |
| 38981, | |
| 38979, | |
| 39205, | |
| 39211, | |
| 39212, | |
| 39210, | |
| 39219, | |
| 39218, | |
| 39215, | |
| 39213, | |
| 39217, | |
| 39216, | |
| 39320, | |
| 39331, | |
| 39329, | |
| 39426, | |
| 39418, | |
| 39412, | |
| 39415, | |
| 39417, | |
| 39416, | |
| 39414, | |
| 39419, | |
| 39421, | |
| 39422, | |
| 39420, | |
| 39427, | |
| 39614, | |
| 39678, | |
| 39677, | |
| 39681, | |
| 39676, | |
| 39752, | |
| 39834, | |
| 39848, | |
| 39838, | |
| 39835, | |
| 39846, | |
| 39841, | |
| 39845, | |
| 39844, | |
| 39814, | |
| 39842, | |
| 39840, | |
| 39855, | |
| 40243, | |
| 40257, | |
| 40295, | |
| 40246, | |
| 40238, | |
| 40239, | |
| 40241, | |
| 40248, | |
| 40240, | |
| 40261, | |
| 40258, | |
| 40259, | |
| 40254, | |
| 40247, | |
| 40256, | |
| 40253, | |
| 32757, | |
| 40237, | |
| 40586, | |
| 40585, | |
| 40589, | |
| 40624, | |
| 40648, | |
| 40666, | |
| 40699, | |
| 40703, | |
| 40740, | |
| 40739, | |
| 40738, | |
| 40788, | |
| 40864, | |
| 20785, | |
| 20781, | |
| 20782, | |
| 22168, | |
| 22172, | |
| 22167, | |
| 22170, | |
| 22173, | |
| 22169, | |
| 22896, | |
| 23356, | |
| 23657, | |
| 23658, | |
| 24000, | |
| 24173, | |
| 24174, | |
| 25048, | |
| 25055, | |
| 25069, | |
| 25070, | |
| 25073, | |
| 25066, | |
| 25072, | |
| 25067, | |
| 25046, | |
| 25065, | |
| 25855, | |
| 25860, | |
| 25853, | |
| 25848, | |
| 25857, | |
| 25859, | |
| 25852, | |
| 26004, | |
| 26075, | |
| 26330, | |
| 26331, | |
| 26328, | |
| 27333, | |
| 27321, | |
| 27325, | |
| 27361, | |
| 27334, | |
| 27322, | |
| 27318, | |
| 27319, | |
| 27335, | |
| 27316, | |
| 27309, | |
| 27486, | |
| 27593, | |
| 27659, | |
| 28679, | |
| 28684, | |
| 28685, | |
| 28673, | |
| 28677, | |
| 28692, | |
| 28686, | |
| 28671, | |
| 28672, | |
| 28667, | |
| 28710, | |
| 28668, | |
| 28663, | |
| 28682, | |
| 29185, | |
| 29183, | |
| 29177, | |
| 29187, | |
| 29181, | |
| 29558, | |
| 29880, | |
| 29888, | |
| 29877, | |
| 29889, | |
| 29886, | |
| 29878, | |
| 29883, | |
| 29890, | |
| 29972, | |
| 29971, | |
| 30300, | |
| 30308, | |
| 30297, | |
| 30288, | |
| 30291, | |
| 30295, | |
| 30298, | |
| 30374, | |
| 30397, | |
| 30444, | |
| 30658, | |
| 30650, | |
| 30975, | |
| 30988, | |
| 30995, | |
| 30996, | |
| 30985, | |
| 30992, | |
| 30994, | |
| 30993, | |
| 31149, | |
| 31148, | |
| 31327, | |
| 31772, | |
| 31785, | |
| 31769, | |
| 31776, | |
| 31775, | |
| 31789, | |
| 31773, | |
| 31782, | |
| 31784, | |
| 31778, | |
| 31781, | |
| 31792, | |
| 32348, | |
| 32336, | |
| 32342, | |
| 32355, | |
| 32344, | |
| 32354, | |
| 32351, | |
| 32337, | |
| 32352, | |
| 32343, | |
| 32339, | |
| 32693, | |
| 32691, | |
| 32759, | |
| 32760, | |
| 32885, | |
| 33233, | |
| 33234, | |
| 33232, | |
| 33375, | |
| 33374, | |
| 34228, | |
| 34246, | |
| 34240, | |
| 34243, | |
| 34242, | |
| 34227, | |
| 34229, | |
| 34237, | |
| 34247, | |
| 34244, | |
| 34239, | |
| 34251, | |
| 34254, | |
| 34248, | |
| 34245, | |
| 34225, | |
| 34230, | |
| 34258, | |
| 34340, | |
| 34232, | |
| 34231, | |
| 34238, | |
| 34409, | |
| 34791, | |
| 34790, | |
| 34786, | |
| 34779, | |
| 34795, | |
| 34794, | |
| 34789, | |
| 34783, | |
| 34803, | |
| 34788, | |
| 34772, | |
| 34780, | |
| 34771, | |
| 34797, | |
| 34776, | |
| 34787, | |
| 34724, | |
| 34775, | |
| 34777, | |
| 34817, | |
| 34804, | |
| 34792, | |
| 34781, | |
| 35155, | |
| 35147, | |
| 35151, | |
| 35148, | |
| 35142, | |
| 35152, | |
| 35153, | |
| 35145, | |
| 35626, | |
| 35623, | |
| 35619, | |
| 35635, | |
| 35632, | |
| 35637, | |
| 35655, | |
| 35631, | |
| 35644, | |
| 35646, | |
| 35633, | |
| 35621, | |
| 35639, | |
| 35622, | |
| 35638, | |
| 35630, | |
| 35620, | |
| 35643, | |
| 35645, | |
| 35642, | |
| 35906, | |
| 35957, | |
| 35993, | |
| 35992, | |
| 35991, | |
| 36094, | |
| 36100, | |
| 36098, | |
| 36096, | |
| 36444, | |
| 36450, | |
| 36448, | |
| 36439, | |
| 36438, | |
| 36446, | |
| 36453, | |
| 36455, | |
| 36443, | |
| 36442, | |
| 36449, | |
| 36445, | |
| 36457, | |
| 36436, | |
| 36678, | |
| 36679, | |
| 36680, | |
| 36683, | |
| 37160, | |
| 37178, | |
| 37179, | |
| 37182, | |
| 37288, | |
| 37285, | |
| 37287, | |
| 37295, | |
| 37290, | |
| 37813, | |
| 37772, | |
| 37778, | |
| 37815, | |
| 37787, | |
| 37789, | |
| 37769, | |
| 37799, | |
| 37774, | |
| 37802, | |
| 37790, | |
| 37798, | |
| 37781, | |
| 37768, | |
| 37785, | |
| 37791, | |
| 37773, | |
| 37809, | |
| 37777, | |
| 37810, | |
| 37796, | |
| 37800, | |
| 37812, | |
| 37795, | |
| 37797, | |
| 38354, | |
| 38355, | |
| 38353, | |
| 38579, | |
| 38615, | |
| 38618, | |
| 24002, | |
| 38623, | |
| 38616, | |
| 38621, | |
| 38691, | |
| 38690, | |
| 38693, | |
| 38828, | |
| 38830, | |
| 38824, | |
| 38827, | |
| 38820, | |
| 38826, | |
| 38818, | |
| 38821, | |
| 38871, | |
| 38873, | |
| 38870, | |
| 38872, | |
| 38906, | |
| 38992, | |
| 38993, | |
| 38994, | |
| 39096, | |
| 39233, | |
| 39228, | |
| 39226, | |
| 39439, | |
| 39435, | |
| 39433, | |
| 39437, | |
| 39428, | |
| 39441, | |
| 39434, | |
| 39429, | |
| 39431, | |
| 39430, | |
| 39616, | |
| 39644, | |
| 39688, | |
| 39684, | |
| 39685, | |
| 39721, | |
| 39733, | |
| 39754, | |
| 39756, | |
| 39755, | |
| 39879, | |
| 39878, | |
| 39875, | |
| 39871, | |
| 39873, | |
| 39861, | |
| 39864, | |
| 39891, | |
| 39862, | |
| 39876, | |
| 39865, | |
| 39869, | |
| 40284, | |
| 40275, | |
| 40271, | |
| 40266, | |
| 40283, | |
| 40267, | |
| 40281, | |
| 40278, | |
| 40268, | |
| 40279, | |
| 40274, | |
| 40276, | |
| 40287, | |
| 40280, | |
| 40282, | |
| 40590, | |
| 40588, | |
| 40671, | |
| 40705, | |
| 40704, | |
| 40726, | |
| 40741, | |
| 40747, | |
| 40746, | |
| 40745, | |
| 40744, | |
| 40780, | |
| 40789, | |
| 20788, | |
| 20789, | |
| 21142, | |
| 21239, | |
| 21428, | |
| 22187, | |
| 22189, | |
| 22182, | |
| 22183, | |
| 22186, | |
| 22188, | |
| 22746, | |
| 22749, | |
| 22747, | |
| 22802, | |
| 23357, | |
| 23358, | |
| 23359, | |
| 24003, | |
| 24176, | |
| 24511, | |
| 25083, | |
| 25863, | |
| 25872, | |
| 25869, | |
| 25865, | |
| 25868, | |
| 25870, | |
| 25988, | |
| 26078, | |
| 26077, | |
| 26334, | |
| 27367, | |
| 27360, | |
| 27340, | |
| 27345, | |
| 27353, | |
| 27339, | |
| 27359, | |
| 27356, | |
| 27344, | |
| 27371, | |
| 27343, | |
| 27341, | |
| 27358, | |
| 27488, | |
| 27568, | |
| 27660, | |
| 28697, | |
| 28711, | |
| 28704, | |
| 28694, | |
| 28715, | |
| 28705, | |
| 28706, | |
| 28707, | |
| 28713, | |
| 28695, | |
| 28708, | |
| 28700, | |
| 28714, | |
| 29196, | |
| 29194, | |
| 29191, | |
| 29186, | |
| 29189, | |
| 29349, | |
| 29350, | |
| 29348, | |
| 29347, | |
| 29345, | |
| 29899, | |
| 29893, | |
| 29879, | |
| 29891, | |
| 29974, | |
| 30304, | |
| 30665, | |
| 30666, | |
| 30660, | |
| 30705, | |
| 31005, | |
| 31003, | |
| 31009, | |
| 31004, | |
| 30999, | |
| 31006, | |
| 31152, | |
| 31335, | |
| 31336, | |
| 31795, | |
| 31804, | |
| 31801, | |
| 31788, | |
| 31803, | |
| 31980, | |
| 31978, | |
| 32374, | |
| 32373, | |
| 32376, | |
| 32368, | |
| 32375, | |
| 32367, | |
| 32378, | |
| 32370, | |
| 32372, | |
| 32360, | |
| 32587, | |
| 32586, | |
| 32643, | |
| 32646, | |
| 32695, | |
| 32765, | |
| 32766, | |
| 32888, | |
| 33239, | |
| 33237, | |
| 33380, | |
| 33377, | |
| 33379, | |
| 34283, | |
| 34289, | |
| 34285, | |
| 34265, | |
| 34273, | |
| 34280, | |
| 34266, | |
| 34263, | |
| 34284, | |
| 34290, | |
| 34296, | |
| 34264, | |
| 34271, | |
| 34275, | |
| 34268, | |
| 34257, | |
| 34288, | |
| 34278, | |
| 34287, | |
| 34270, | |
| 34274, | |
| 34816, | |
| 34810, | |
| 34819, | |
| 34806, | |
| 34807, | |
| 34825, | |
| 34828, | |
| 34827, | |
| 34822, | |
| 34812, | |
| 34824, | |
| 34815, | |
| 34826, | |
| 34818, | |
| 35170, | |
| 35162, | |
| 35163, | |
| 35159, | |
| 35169, | |
| 35164, | |
| 35160, | |
| 35165, | |
| 35161, | |
| 35208, | |
| 35255, | |
| 35254, | |
| 35318, | |
| 35664, | |
| 35656, | |
| 35658, | |
| 35648, | |
| 35667, | |
| 35670, | |
| 35668, | |
| 35659, | |
| 35669, | |
| 35665, | |
| 35650, | |
| 35666, | |
| 35671, | |
| 35907, | |
| 35959, | |
| 35958, | |
| 35994, | |
| 36102, | |
| 36103, | |
| 36105, | |
| 36268, | |
| 36266, | |
| 36269, | |
| 36267, | |
| 36461, | |
| 36472, | |
| 36467, | |
| 36458, | |
| 36463, | |
| 36475, | |
| 36546, | |
| 36690, | |
| 36689, | |
| 36687, | |
| 36688, | |
| 36691, | |
| 36788, | |
| 37184, | |
| 37183, | |
| 37296, | |
| 37293, | |
| 37854, | |
| 37831, | |
| 37839, | |
| 37826, | |
| 37850, | |
| 37840, | |
| 37881, | |
| 37868, | |
| 37836, | |
| 37849, | |
| 37801, | |
| 37862, | |
| 37834, | |
| 37844, | |
| 37870, | |
| 37859, | |
| 37845, | |
| 37828, | |
| 37838, | |
| 37824, | |
| 37842, | |
| 37863, | |
| 38269, | |
| 38362, | |
| 38363, | |
| 38625, | |
| 38697, | |
| 38699, | |
| 38700, | |
| 38696, | |
| 38694, | |
| 38835, | |
| 38839, | |
| 38838, | |
| 38877, | |
| 38878, | |
| 38879, | |
| 39004, | |
| 39001, | |
| 39005, | |
| 38999, | |
| 39103, | |
| 39101, | |
| 39099, | |
| 39102, | |
| 39240, | |
| 39239, | |
| 39235, | |
| 39334, | |
| 39335, | |
| 39450, | |
| 39445, | |
| 39461, | |
| 39453, | |
| 39460, | |
| 39451, | |
| 39458, | |
| 39456, | |
| 39463, | |
| 39459, | |
| 39454, | |
| 39452, | |
| 39444, | |
| 39618, | |
| 39691, | |
| 39690, | |
| 39694, | |
| 39692, | |
| 39735, | |
| 39914, | |
| 39915, | |
| 39904, | |
| 39902, | |
| 39908, | |
| 39910, | |
| 39906, | |
| 39920, | |
| 39892, | |
| 39895, | |
| 39916, | |
| 39900, | |
| 39897, | |
| 39909, | |
| 39893, | |
| 39905, | |
| 39898, | |
| 40311, | |
| 40321, | |
| 40330, | |
| 40324, | |
| 40328, | |
| 40305, | |
| 40320, | |
| 40312, | |
| 40326, | |
| 40331, | |
| 40332, | |
| 40317, | |
| 40299, | |
| 40308, | |
| 40309, | |
| 40304, | |
| 40297, | |
| 40325, | |
| 40307, | |
| 40315, | |
| 40322, | |
| 40303, | |
| 40313, | |
| 40319, | |
| 40327, | |
| 40296, | |
| 40596, | |
| 40593, | |
| 40640, | |
| 40700, | |
| 40749, | |
| 40768, | |
| 40769, | |
| 40781, | |
| 40790, | |
| 40791, | |
| 40792, | |
| 21303, | |
| 22194, | |
| 22197, | |
| 22195, | |
| 22755, | |
| 23365, | |
| 24006, | |
| 24007, | |
| 24302, | |
| 24303, | |
| 24512, | |
| 24513, | |
| 25081, | |
| 25879, | |
| 25878, | |
| 25877, | |
| 25875, | |
| 26079, | |
| 26344, | |
| 26339, | |
| 26340, | |
| 27379, | |
| 27376, | |
| 27370, | |
| 27368, | |
| 27385, | |
| 27377, | |
| 27374, | |
| 27375, | |
| 28732, | |
| 28725, | |
| 28719, | |
| 28727, | |
| 28724, | |
| 28721, | |
| 28738, | |
| 28728, | |
| 28735, | |
| 28730, | |
| 28729, | |
| 28736, | |
| 28731, | |
| 28723, | |
| 28737, | |
| 29203, | |
| 29204, | |
| 29352, | |
| 29565, | |
| 29564, | |
| 29882, | |
| 30379, | |
| 30378, | |
| 30398, | |
| 30445, | |
| 30668, | |
| 30670, | |
| 30671, | |
| 30669, | |
| 30706, | |
| 31013, | |
| 31011, | |
| 31015, | |
| 31016, | |
| 31012, | |
| 31017, | |
| 31154, | |
| 31342, | |
| 31340, | |
| 31341, | |
| 31479, | |
| 31817, | |
| 31816, | |
| 31818, | |
| 31815, | |
| 31813, | |
| 31982, | |
| 32379, | |
| 32382, | |
| 32385, | |
| 32384, | |
| 32698, | |
| 32767, | |
| 32889, | |
| 33243, | |
| 33241, | |
| 33291, | |
| 33384, | |
| 33385, | |
| 34338, | |
| 34303, | |
| 34305, | |
| 34302, | |
| 34331, | |
| 34304, | |
| 34294, | |
| 34308, | |
| 34313, | |
| 34309, | |
| 34316, | |
| 34301, | |
| 34841, | |
| 34832, | |
| 34833, | |
| 34839, | |
| 34835, | |
| 34838, | |
| 35171, | |
| 35174, | |
| 35257, | |
| 35319, | |
| 35680, | |
| 35690, | |
| 35677, | |
| 35688, | |
| 35683, | |
| 35685, | |
| 35687, | |
| 35693, | |
| 36270, | |
| 36486, | |
| 36488, | |
| 36484, | |
| 36697, | |
| 36694, | |
| 36695, | |
| 36693, | |
| 36696, | |
| 36698, | |
| 37005, | |
| 37187, | |
| 37185, | |
| 37303, | |
| 37301, | |
| 37298, | |
| 37299, | |
| 37899, | |
| 37907, | |
| 37883, | |
| 37920, | |
| 37903, | |
| 37908, | |
| 37886, | |
| 37909, | |
| 37904, | |
| 37928, | |
| 37913, | |
| 37901, | |
| 37877, | |
| 37888, | |
| 37879, | |
| 37895, | |
| 37902, | |
| 37910, | |
| 37906, | |
| 37882, | |
| 37897, | |
| 37880, | |
| 37898, | |
| 37887, | |
| 37884, | |
| 37900, | |
| 37878, | |
| 37905, | |
| 37894, | |
| 38366, | |
| 38368, | |
| 38367, | |
| 38702, | |
| 38703, | |
| 38841, | |
| 38843, | |
| 38909, | |
| 38910, | |
| 39008, | |
| 39010, | |
| 39011, | |
| 39007, | |
| 39105, | |
| 39106, | |
| 39248, | |
| 39246, | |
| 39257, | |
| 39244, | |
| 39243, | |
| 39251, | |
| 39474, | |
| 39476, | |
| 39473, | |
| 39468, | |
| 39466, | |
| 39478, | |
| 39465, | |
| 39470, | |
| 39480, | |
| 39469, | |
| 39623, | |
| 39626, | |
| 39622, | |
| 39696, | |
| 39698, | |
| 39697, | |
| 39947, | |
| 39944, | |
| 39927, | |
| 39941, | |
| 39954, | |
| 39928, | |
| 40000, | |
| 39943, | |
| 39950, | |
| 39942, | |
| 39959, | |
| 39956, | |
| 39945, | |
| 40351, | |
| 40345, | |
| 40356, | |
| 40349, | |
| 40338, | |
| 40344, | |
| 40336, | |
| 40347, | |
| 40352, | |
| 40340, | |
| 40348, | |
| 40362, | |
| 40343, | |
| 40353, | |
| 40346, | |
| 40354, | |
| 40360, | |
| 40350, | |
| 40355, | |
| 40383, | |
| 40361, | |
| 40342, | |
| 40358, | |
| 40359, | |
| 40601, | |
| 40603, | |
| 40602, | |
| 40677, | |
| 40676, | |
| 40679, | |
| 40678, | |
| 40752, | |
| 40750, | |
| 40795, | |
| 40800, | |
| 40798, | |
| 40797, | |
| 40793, | |
| 40849, | |
| 20794, | |
| 20793, | |
| 21144, | |
| 21143, | |
| 22211, | |
| 22205, | |
| 22206, | |
| 23368, | |
| 23367, | |
| 24011, | |
| 24015, | |
| 24305, | |
| 25085, | |
| 25883, | |
| 27394, | |
| 27388, | |
| 27395, | |
| 27384, | |
| 27392, | |
| 28739, | |
| 28740, | |
| 28746, | |
| 28744, | |
| 28745, | |
| 28741, | |
| 28742, | |
| 29213, | |
| 29210, | |
| 29209, | |
| 29566, | |
| 29975, | |
| 30314, | |
| 30672, | |
| 31021, | |
| 31025, | |
| 31023, | |
| 31828, | |
| 31827, | |
| 31986, | |
| 32394, | |
| 32391, | |
| 32392, | |
| 32395, | |
| 32390, | |
| 32397, | |
| 32589, | |
| 32699, | |
| 32816, | |
| 33245, | |
| 34328, | |
| 34346, | |
| 34342, | |
| 34335, | |
| 34339, | |
| 34332, | |
| 34329, | |
| 34343, | |
| 34350, | |
| 34337, | |
| 34336, | |
| 34345, | |
| 34334, | |
| 34341, | |
| 34857, | |
| 34845, | |
| 34843, | |
| 34848, | |
| 34852, | |
| 34844, | |
| 34859, | |
| 34890, | |
| 35181, | |
| 35177, | |
| 35182, | |
| 35179, | |
| 35322, | |
| 35705, | |
| 35704, | |
| 35653, | |
| 35706, | |
| 35707, | |
| 36112, | |
| 36116, | |
| 36271, | |
| 36494, | |
| 36492, | |
| 36702, | |
| 36699, | |
| 36701, | |
| 37190, | |
| 37188, | |
| 37189, | |
| 37305, | |
| 37951, | |
| 37947, | |
| 37942, | |
| 37929, | |
| 37949, | |
| 37948, | |
| 37936, | |
| 37945, | |
| 37930, | |
| 37943, | |
| 37932, | |
| 37952, | |
| 37937, | |
| 38373, | |
| 38372, | |
| 38371, | |
| 38709, | |
| 38714, | |
| 38847, | |
| 38881, | |
| 39012, | |
| 39113, | |
| 39110, | |
| 39104, | |
| 39256, | |
| 39254, | |
| 39481, | |
| 39485, | |
| 39494, | |
| 39492, | |
| 39490, | |
| 39489, | |
| 39482, | |
| 39487, | |
| 39629, | |
| 39701, | |
| 39703, | |
| 39704, | |
| 39702, | |
| 39738, | |
| 39762, | |
| 39979, | |
| 39965, | |
| 39964, | |
| 39980, | |
| 39971, | |
| 39976, | |
| 39977, | |
| 39972, | |
| 39969, | |
| 40375, | |
| 40374, | |
| 40380, | |
| 40385, | |
| 40391, | |
| 40394, | |
| 40399, | |
| 40382, | |
| 40389, | |
| 40387, | |
| 40379, | |
| 40373, | |
| 40398, | |
| 40377, | |
| 40378, | |
| 40364, | |
| 40392, | |
| 40369, | |
| 40365, | |
| 40396, | |
| 40371, | |
| 40397, | |
| 40370, | |
| 40570, | |
| 40604, | |
| 40683, | |
| 40686, | |
| 40685, | |
| 40731, | |
| 40728, | |
| 40730, | |
| 40753, | |
| 40782, | |
| 40805, | |
| 40804, | |
| 40850, | |
| 20153, | |
| 22214, | |
| 22213, | |
| 22219, | |
| 22897, | |
| 23371, | |
| 23372, | |
| 24021, | |
| 24017, | |
| 24306, | |
| 25889, | |
| 25888, | |
| 25894, | |
| 25890, | |
| 27403, | |
| 27400, | |
| 27401, | |
| 27661, | |
| 28757, | |
| 28758, | |
| 28759, | |
| 28754, | |
| 29214, | |
| 29215, | |
| 29353, | |
| 29567, | |
| 29912, | |
| 29909, | |
| 29913, | |
| 29911, | |
| 30317, | |
| 30381, | |
| 31029, | |
| 31156, | |
| 31344, | |
| 31345, | |
| 31831, | |
| 31836, | |
| 31833, | |
| 31835, | |
| 31834, | |
| 31988, | |
| 31985, | |
| 32401, | |
| 32591, | |
| 32647, | |
| 33246, | |
| 33387, | |
| 34356, | |
| 34357, | |
| 34355, | |
| 34348, | |
| 34354, | |
| 34358, | |
| 34860, | |
| 34856, | |
| 34854, | |
| 34858, | |
| 34853, | |
| 35185, | |
| 35263, | |
| 35262, | |
| 35323, | |
| 35710, | |
| 35716, | |
| 35714, | |
| 35718, | |
| 35717, | |
| 35711, | |
| 36117, | |
| 36501, | |
| 36500, | |
| 36506, | |
| 36498, | |
| 36496, | |
| 36502, | |
| 36503, | |
| 36704, | |
| 36706, | |
| 37191, | |
| 37964, | |
| 37968, | |
| 37962, | |
| 37963, | |
| 37967, | |
| 37959, | |
| 37957, | |
| 37960, | |
| 37961, | |
| 37958, | |
| 38719, | |
| 38883, | |
| 39018, | |
| 39017, | |
| 39115, | |
| 39252, | |
| 39259, | |
| 39502, | |
| 39507, | |
| 39508, | |
| 39500, | |
| 39503, | |
| 39496, | |
| 39498, | |
| 39497, | |
| 39506, | |
| 39504, | |
| 39632, | |
| 39705, | |
| 39723, | |
| 39739, | |
| 39766, | |
| 39765, | |
| 40006, | |
| 40008, | |
| 39999, | |
| 40004, | |
| 39993, | |
| 39987, | |
| 40001, | |
| 39996, | |
| 39991, | |
| 39988, | |
| 39986, | |
| 39997, | |
| 39990, | |
| 40411, | |
| 40402, | |
| 40414, | |
| 40410, | |
| 40395, | |
| 40400, | |
| 40412, | |
| 40401, | |
| 40415, | |
| 40425, | |
| 40409, | |
| 40408, | |
| 40406, | |
| 40437, | |
| 40405, | |
| 40413, | |
| 40630, | |
| 40688, | |
| 40757, | |
| 40755, | |
| 40754, | |
| 40770, | |
| 40811, | |
| 40853, | |
| 40866, | |
| 20797, | |
| 21145, | |
| 22760, | |
| 22759, | |
| 22898, | |
| 23373, | |
| 24024, | |
| 34863, | |
| 24399, | |
| 25089, | |
| 25091, | |
| 25092, | |
| 25897, | |
| 25893, | |
| 26006, | |
| 26347, | |
| 27409, | |
| 27410, | |
| 27407, | |
| 27594, | |
| 28763, | |
| 28762, | |
| 29218, | |
| 29570, | |
| 29569, | |
| 29571, | |
| 30320, | |
| 30676, | |
| 31847, | |
| 31846, | |
| 32405, | |
| 33388, | |
| 34362, | |
| 34368, | |
| 34361, | |
| 34364, | |
| 34353, | |
| 34363, | |
| 34366, | |
| 34864, | |
| 34866, | |
| 34862, | |
| 34867, | |
| 35190, | |
| 35188, | |
| 35187, | |
| 35326, | |
| 35724, | |
| 35726, | |
| 35723, | |
| 35720, | |
| 35909, | |
| 36121, | |
| 36504, | |
| 36708, | |
| 36707, | |
| 37308, | |
| 37986, | |
| 37973, | |
| 37981, | |
| 37975, | |
| 37982, | |
| 38852, | |
| 38853, | |
| 38912, | |
| 39510, | |
| 39513, | |
| 39710, | |
| 39711, | |
| 39712, | |
| 40018, | |
| 40024, | |
| 40016, | |
| 40010, | |
| 40013, | |
| 40011, | |
| 40021, | |
| 40025, | |
| 40012, | |
| 40014, | |
| 40443, | |
| 40439, | |
| 40431, | |
| 40419, | |
| 40427, | |
| 40440, | |
| 40420, | |
| 40438, | |
| 40417, | |
| 40430, | |
| 40422, | |
| 40434, | |
| 40432, | |
| 40418, | |
| 40428, | |
| 40436, | |
| 40435, | |
| 40424, | |
| 40429, | |
| 40642, | |
| 40656, | |
| 40690, | |
| 40691, | |
| 40710, | |
| 40732, | |
| 40760, | |
| 40759, | |
| 40758, | |
| 40771, | |
| 40783, | |
| 40817, | |
| 40816, | |
| 40814, | |
| 40815, | |
| 22227, | |
| 22221, | |
| 23374, | |
| 23661, | |
| 25901, | |
| 26349, | |
| 26350, | |
| 27411, | |
| 28767, | |
| 28769, | |
| 28765, | |
| 28768, | |
| 29219, | |
| 29915, | |
| 29925, | |
| 30677, | |
| 31032, | |
| 31159, | |
| 31158, | |
| 31850, | |
| 32407, | |
| 32649, | |
| 33389, | |
| 34371, | |
| 34872, | |
| 34871, | |
| 34869, | |
| 34891, | |
| 35732, | |
| 35733, | |
| 36510, | |
| 36511, | |
| 36512, | |
| 36509, | |
| 37310, | |
| 37309, | |
| 37314, | |
| 37995, | |
| 37992, | |
| 37993, | |
| 38629, | |
| 38726, | |
| 38723, | |
| 38727, | |
| 38855, | |
| 38885, | |
| 39518, | |
| 39637, | |
| 39769, | |
| 40035, | |
| 40039, | |
| 40038, | |
| 40034, | |
| 40030, | |
| 40032, | |
| 40450, | |
| 40446, | |
| 40455, | |
| 40451, | |
| 40454, | |
| 40453, | |
| 40448, | |
| 40449, | |
| 40457, | |
| 40447, | |
| 40445, | |
| 40452, | |
| 40608, | |
| 40734, | |
| 40774, | |
| 40820, | |
| 40821, | |
| 40822, | |
| 22228, | |
| 25902, | |
| 26040, | |
| 27416, | |
| 27417, | |
| 27415, | |
| 27418, | |
| 28770, | |
| 29222, | |
| 29354, | |
| 30680, | |
| 30681, | |
| 31033, | |
| 31849, | |
| 31851, | |
| 31990, | |
| 32410, | |
| 32408, | |
| 32411, | |
| 32409, | |
| 33248, | |
| 33249, | |
| 34374, | |
| 34375, | |
| 34376, | |
| 35193, | |
| 35194, | |
| 35196, | |
| 35195, | |
| 35327, | |
| 35736, | |
| 35737, | |
| 36517, | |
| 36516, | |
| 36515, | |
| 37998, | |
| 37997, | |
| 37999, | |
| 38001, | |
| 38003, | |
| 38729, | |
| 39026, | |
| 39263, | |
| 40040, | |
| 40046, | |
| 40045, | |
| 40459, | |
| 40461, | |
| 40464, | |
| 40463, | |
| 40466, | |
| 40465, | |
| 40609, | |
| 40693, | |
| 40713, | |
| 40775, | |
| 40824, | |
| 40827, | |
| 40826, | |
| 40825, | |
| 22302, | |
| 28774, | |
| 31855, | |
| 34876, | |
| 36274, | |
| 36518, | |
| 37315, | |
| 38004, | |
| 38008, | |
| 38006, | |
| 38005, | |
| 39520, | |
| 40052, | |
| 40051, | |
| 40049, | |
| 40053, | |
| 40468, | |
| 40467, | |
| 40694, | |
| 40714, | |
| 40868, | |
| 28776, | |
| 28773, | |
| 31991, | |
| 34410, | |
| 34878, | |
| 34877, | |
| 34879, | |
| 35742, | |
| 35996, | |
| 36521, | |
| 36553, | |
| 38731, | |
| 39027, | |
| 39028, | |
| 39116, | |
| 39265, | |
| 39339, | |
| 39524, | |
| 39526, | |
| 39527, | |
| 39716, | |
| 40469, | |
| 40471, | |
| 40776, | |
| 25095, | |
| 27422, | |
| 29223, | |
| 34380, | |
| 36520, | |
| 38018, | |
| 38016, | |
| 38017, | |
| 39529, | |
| 39528, | |
| 39726, | |
| 40473, | |
| 29225, | |
| 34379, | |
| 35743, | |
| 38019, | |
| 40057, | |
| 40631, | |
| 30325, | |
| 39531, | |
| 40058, | |
| 40477, | |
| 28777, | |
| 28778, | |
| 40612, | |
| 40830, | |
| 40777, | |
| 40856, | |
| 30849, | |
| 37561, | |
| 35023, | |
| 22715, | |
| 24658, | |
| 31911, | |
| 23290, | |
| 9556, | |
| 9574, | |
| 9559, | |
| 9568, | |
| 9580, | |
| 9571, | |
| 9562, | |
| 9577, | |
| 9565, | |
| 9554, | |
| 9572, | |
| 9557, | |
| 9566, | |
| 9578, | |
| 9569, | |
| 9560, | |
| 9575, | |
| 9563, | |
| 9555, | |
| 9573, | |
| 9558, | |
| 9567, | |
| 9579, | |
| 9570, | |
| 9561, | |
| 9576, | |
| 9564, | |
| 9553, | |
| 9552, | |
| 9581, | |
| 9582, | |
| 9584, | |
| 9583, | |
| 65517, | |
| 132423, | |
| 37595, | |
| 132575, | |
| 147397, | |
| 34124, | |
| 17077, | |
| 29679, | |
| 20917, | |
| 13897, | |
| 149826, | |
| 166372, | |
| 37700, | |
| 137691, | |
| 33518, | |
| 146632, | |
| 30780, | |
| 26436, | |
| 25311, | |
| 149811, | |
| 166314, | |
| 131744, | |
| 158643, | |
| 135941, | |
| 20395, | |
| 140525, | |
| 20488, | |
| 159017, | |
| 162436, | |
| 144896, | |
| 150193, | |
| 140563, | |
| 20521, | |
| 131966, | |
| 24484, | |
| 131968, | |
| 131911, | |
| 28379, | |
| 132127, | |
| 20605, | |
| 20737, | |
| 13434, | |
| 20750, | |
| 39020, | |
| 14147, | |
| 33814, | |
| 149924, | |
| 132231, | |
| 20832, | |
| 144308, | |
| 20842, | |
| 134143, | |
| 139516, | |
| 131813, | |
| 140592, | |
| 132494, | |
| 143923, | |
| 137603, | |
| 23426, | |
| 34685, | |
| 132531, | |
| 146585, | |
| 20914, | |
| 20920, | |
| 40244, | |
| 20937, | |
| 20943, | |
| 20945, | |
| 15580, | |
| 20947, | |
| 150182, | |
| 20915, | |
| 20962, | |
| 21314, | |
| 20973, | |
| 33741, | |
| 26942, | |
| 145197, | |
| 24443, | |
| 21003, | |
| 21030, | |
| 21052, | |
| 21173, | |
| 21079, | |
| 21140, | |
| 21177, | |
| 21189, | |
| 31765, | |
| 34114, | |
| 21216, | |
| 34317, | |
| 158483, | |
| 21253, | |
| 166622, | |
| 21833, | |
| 28377, | |
| 147328, | |
| 133460, | |
| 147436, | |
| 21299, | |
| 21316, | |
| 134114, | |
| 27851, | |
| 136998, | |
| 26651, | |
| 29653, | |
| 24650, | |
| 16042, | |
| 14540, | |
| 136936, | |
| 29149, | |
| 17570, | |
| 21357, | |
| 21364, | |
| 165547, | |
| 21374, | |
| 21375, | |
| 136598, | |
| 136723, | |
| 30694, | |
| 21395, | |
| 166555, | |
| 21408, | |
| 21419, | |
| 21422, | |
| 29607, | |
| 153458, | |
| 16217, | |
| 29596, | |
| 21441, | |
| 21445, | |
| 27721, | |
| 20041, | |
| 22526, | |
| 21465, | |
| 15019, | |
| 134031, | |
| 21472, | |
| 147435, | |
| 142755, | |
| 21494, | |
| 134263, | |
| 21523, | |
| 28793, | |
| 21803, | |
| 26199, | |
| 27995, | |
| 21613, | |
| 158547, | |
| 134516, | |
| 21853, | |
| 21647, | |
| 21668, | |
| 18342, | |
| 136973, | |
| 134877, | |
| 15796, | |
| 134477, | |
| 166332, | |
| 140952, | |
| 21831, | |
| 19693, | |
| 21551, | |
| 29719, | |
| 21894, | |
| 21929, | |
| 22021, | |
| 137431, | |
| 147514, | |
| 17746, | |
| 148533, | |
| 26291, | |
| 135348, | |
| 22071, | |
| 26317, | |
| 144010, | |
| 26276, | |
| 26285, | |
| 22093, | |
| 22095, | |
| 30961, | |
| 22257, | |
| 38791, | |
| 21502, | |
| 22272, | |
| 22255, | |
| 22253, | |
| 166758, | |
| 13859, | |
| 135759, | |
| 22342, | |
| 147877, | |
| 27758, | |
| 28811, | |
| 22338, | |
| 14001, | |
| 158846, | |
| 22502, | |
| 136214, | |
| 22531, | |
| 136276, | |
| 148323, | |
| 22566, | |
| 150517, | |
| 22620, | |
| 22698, | |
| 13665, | |
| 22752, | |
| 22748, | |
| 135740, | |
| 22779, | |
| 23551, | |
| 22339, | |
| 172368, | |
| 148088, | |
| 37843, | |
| 13729, | |
| 22815, | |
| 26790, | |
| 14019, | |
| 28249, | |
| 136766, | |
| 23076, | |
| 21843, | |
| 136850, | |
| 34053, | |
| 22985, | |
| 134478, | |
| 158849, | |
| 159018, | |
| 137180, | |
| 23001, | |
| 137211, | |
| 137138, | |
| 159142, | |
| 28017, | |
| 137256, | |
| 136917, | |
| 23033, | |
| 159301, | |
| 23211, | |
| 23139, | |
| 14054, | |
| 149929, | |
| 23159, | |
| 14088, | |
| 23190, | |
| 29797, | |
| 23251, | |
| 159649, | |
| 140628, | |
| 15749, | |
| 137489, | |
| 14130, | |
| 136888, | |
| 24195, | |
| 21200, | |
| 23414, | |
| 25992, | |
| 23420, | |
| 162318, | |
| 16388, | |
| 18525, | |
| 131588, | |
| 23509, | |
| 24928, | |
| 137780, | |
| 154060, | |
| 132517, | |
| 23539, | |
| 23453, | |
| 19728, | |
| 23557, | |
| 138052, | |
| 23571, | |
| 29646, | |
| 23572, | |
| 138405, | |
| 158504, | |
| 23625, | |
| 18653, | |
| 23685, | |
| 23785, | |
| 23791, | |
| 23947, | |
| 138745, | |
| 138807, | |
| 23824, | |
| 23832, | |
| 23878, | |
| 138916, | |
| 23738, | |
| 24023, | |
| 33532, | |
| 14381, | |
| 149761, | |
| 139337, | |
| 139635, | |
| 33415, | |
| 14390, | |
| 15298, | |
| 24110, | |
| 27274, | |
| 24181, | |
| 24186, | |
| 148668, | |
| 134355, | |
| 21414, | |
| 20151, | |
| 24272, | |
| 21416, | |
| 137073, | |
| 24073, | |
| 24308, | |
| 164994, | |
| 24313, | |
| 24315, | |
| 14496, | |
| 24316, | |
| 26686, | |
| 37915, | |
| 24333, | |
| 131521, | |
| 194708, | |
| 15070, | |
| 18606, | |
| 135994, | |
| 24378, | |
| 157832, | |
| 140240, | |
| 24408, | |
| 140401, | |
| 24419, | |
| 38845, | |
| 159342, | |
| 24434, | |
| 37696, | |
| 166454, | |
| 24487, | |
| 23990, | |
| 15711, | |
| 152144, | |
| 139114, | |
| 159992, | |
| 140904, | |
| 37334, | |
| 131742, | |
| 166441, | |
| 24625, | |
| 26245, | |
| 137335, | |
| 14691, | |
| 15815, | |
| 13881, | |
| 22416, | |
| 141236, | |
| 31089, | |
| 15936, | |
| 24734, | |
| 24740, | |
| 24755, | |
| 149890, | |
| 149903, | |
| 162387, | |
| 29860, | |
| 20705, | |
| 23200, | |
| 24932, | |
| 33828, | |
| 24898, | |
| 194726, | |
| 159442, | |
| 24961, | |
| 20980, | |
| 132694, | |
| 24967, | |
| 23466, | |
| 147383, | |
| 141407, | |
| 25043, | |
| 166813, | |
| 170333, | |
| 25040, | |
| 14642, | |
| 141696, | |
| 141505, | |
| 24611, | |
| 24924, | |
| 25886, | |
| 25483, | |
| 131352, | |
| 25285, | |
| 137072, | |
| 25301, | |
| 142861, | |
| 25452, | |
| 149983, | |
| 14871, | |
| 25656, | |
| 25592, | |
| 136078, | |
| 137212, | |
| 25744, | |
| 28554, | |
| 142902, | |
| 38932, | |
| 147596, | |
| 153373, | |
| 25825, | |
| 25829, | |
| 38011, | |
| 14950, | |
| 25658, | |
| 14935, | |
| 25933, | |
| 28438, | |
| 150056, | |
| 150051, | |
| 25989, | |
| 25965, | |
| 25951, | |
| 143486, | |
| 26037, | |
| 149824, | |
| 19255, | |
| 26065, | |
| 16600, | |
| 137257, | |
| 26080, | |
| 26083, | |
| 24543, | |
| 144384, | |
| 26136, | |
| 143863, | |
| 143864, | |
| 26180, | |
| 143780, | |
| 143781, | |
| 26187, | |
| 134773, | |
| 26215, | |
| 152038, | |
| 26227, | |
| 26228, | |
| 138813, | |
| 143921, | |
| 165364, | |
| 143816, | |
| 152339, | |
| 30661, | |
| 141559, | |
| 39332, | |
| 26370, | |
| 148380, | |
| 150049, | |
| 15147, | |
| 27130, | |
| 145346, | |
| 26462, | |
| 26471, | |
| 26466, | |
| 147917, | |
| 168173, | |
| 26583, | |
| 17641, | |
| 26658, | |
| 28240, | |
| 37436, | |
| 26625, | |
| 144358, | |
| 159136, | |
| 26717, | |
| 144495, | |
| 27105, | |
| 27147, | |
| 166623, | |
| 26995, | |
| 26819, | |
| 144845, | |
| 26881, | |
| 26880, | |
| 15666, | |
| 14849, | |
| 144956, | |
| 15232, | |
| 26540, | |
| 26977, | |
| 166474, | |
| 17148, | |
| 26934, | |
| 27032, | |
| 15265, | |
| 132041, | |
| 33635, | |
| 20624, | |
| 27129, | |
| 144985, | |
| 139562, | |
| 27205, | |
| 145155, | |
| 27293, | |
| 15347, | |
| 26545, | |
| 27336, | |
| 168348, | |
| 15373, | |
| 27421, | |
| 133411, | |
| 24798, | |
| 27445, | |
| 27508, | |
| 141261, | |
| 28341, | |
| 146139, | |
| 132021, | |
| 137560, | |
| 14144, | |
| 21537, | |
| 146266, | |
| 27617, | |
| 147196, | |
| 27612, | |
| 27703, | |
| 140427, | |
| 149745, | |
| 158545, | |
| 27738, | |
| 33318, | |
| 27769, | |
| 146876, | |
| 17605, | |
| 146877, | |
| 147876, | |
| 149772, | |
| 149760, | |
| 146633, | |
| 14053, | |
| 15595, | |
| 134450, | |
| 39811, | |
| 143865, | |
| 140433, | |
| 32655, | |
| 26679, | |
| 159013, | |
| 159137, | |
| 159211, | |
| 28054, | |
| 27996, | |
| 28284, | |
| 28420, | |
| 149887, | |
| 147589, | |
| 159346, | |
| 34099, | |
| 159604, | |
| 20935, | |
| 27804, | |
| 28189, | |
| 33838, | |
| 166689, | |
| 28207, | |
| 146991, | |
| 29779, | |
| 147330, | |
| 31180, | |
| 28239, | |
| 23185, | |
| 143435, | |
| 28664, | |
| 14093, | |
| 28573, | |
| 146992, | |
| 28410, | |
| 136343, | |
| 147517, | |
| 17749, | |
| 37872, | |
| 28484, | |
| 28508, | |
| 15694, | |
| 28532, | |
| 168304, | |
| 15675, | |
| 28575, | |
| 147780, | |
| 28627, | |
| 147601, | |
| 147797, | |
| 147513, | |
| 147440, | |
| 147380, | |
| 147775, | |
| 20959, | |
| 147798, | |
| 147799, | |
| 147776, | |
| 156125, | |
| 28747, | |
| 28798, | |
| 28839, | |
| 28801, | |
| 28876, | |
| 28885, | |
| 28886, | |
| 28895, | |
| 16644, | |
| 15848, | |
| 29108, | |
| 29078, | |
| 148087, | |
| 28971, | |
| 28997, | |
| 23176, | |
| 29002, | |
| 29038, | |
| 23708, | |
| 148325, | |
| 29007, | |
| 37730, | |
| 148161, | |
| 28972, | |
| 148570, | |
| 150055, | |
| 150050, | |
| 29114, | |
| 166888, | |
| 28861, | |
| 29198, | |
| 37954, | |
| 29205, | |
| 22801, | |
| 37955, | |
| 29220, | |
| 37697, | |
| 153093, | |
| 29230, | |
| 29248, | |
| 149876, | |
| 26813, | |
| 29269, | |
| 29271, | |
| 15957, | |
| 143428, | |
| 26637, | |
| 28477, | |
| 29314, | |
| 29482, | |
| 29483, | |
| 149539, | |
| 165931, | |
| 18669, | |
| 165892, | |
| 29480, | |
| 29486, | |
| 29647, | |
| 29610, | |
| 134202, | |
| 158254, | |
| 29641, | |
| 29769, | |
| 147938, | |
| 136935, | |
| 150052, | |
| 26147, | |
| 14021, | |
| 149943, | |
| 149901, | |
| 150011, | |
| 29687, | |
| 29717, | |
| 26883, | |
| 150054, | |
| 29753, | |
| 132547, | |
| 16087, | |
| 29788, | |
| 141485, | |
| 29792, | |
| 167602, | |
| 29767, | |
| 29668, | |
| 29814, | |
| 33721, | |
| 29804, | |
| 14128, | |
| 29812, | |
| 37873, | |
| 27180, | |
| 29826, | |
| 18771, | |
| 150156, | |
| 147807, | |
| 150137, | |
| 166799, | |
| 23366, | |
| 166915, | |
| 137374, | |
| 29896, | |
| 137608, | |
| 29966, | |
| 29929, | |
| 29982, | |
| 167641, | |
| 137803, | |
| 23511, | |
| 167596, | |
| 37765, | |
| 30029, | |
| 30026, | |
| 30055, | |
| 30062, | |
| 151426, | |
| 16132, | |
| 150803, | |
| 30094, | |
| 29789, | |
| 30110, | |
| 30132, | |
| 30210, | |
| 30252, | |
| 30289, | |
| 30287, | |
| 30319, | |
| 30326, | |
| 156661, | |
| 30352, | |
| 33263, | |
| 14328, | |
| 157969, | |
| 157966, | |
| 30369, | |
| 30373, | |
| 30391, | |
| 30412, | |
| 159647, | |
| 33890, | |
| 151709, | |
| 151933, | |
| 138780, | |
| 30494, | |
| 30502, | |
| 30528, | |
| 25775, | |
| 152096, | |
| 30552, | |
| 144044, | |
| 30639, | |
| 166244, | |
| 166248, | |
| 136897, | |
| 30708, | |
| 30729, | |
| 136054, | |
| 150034, | |
| 26826, | |
| 30895, | |
| 30919, | |
| 30931, | |
| 38565, | |
| 31022, | |
| 153056, | |
| 30935, | |
| 31028, | |
| 30897, | |
| 161292, | |
| 36792, | |
| 34948, | |
| 166699, | |
| 155779, | |
| 140828, | |
| 31110, | |
| 35072, | |
| 26882, | |
| 31104, | |
| 153687, | |
| 31133, | |
| 162617, | |
| 31036, | |
| 31145, | |
| 28202, | |
| 160038, | |
| 16040, | |
| 31174, | |
| 168205, | |
| 31188, | |
| ], | |
| "euc-kr": [ | |
| 44034, | |
| 44035, | |
| 44037, | |
| 44038, | |
| 44043, | |
| 44044, | |
| 44045, | |
| 44046, | |
| 44047, | |
| 44056, | |
| 44062, | |
| 44063, | |
| 44065, | |
| 44066, | |
| 44067, | |
| 44069, | |
| 44070, | |
| 44071, | |
| 44072, | |
| 44073, | |
| 44074, | |
| 44075, | |
| 44078, | |
| 44082, | |
| 44083, | |
| 44084, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 44085, | |
| 44086, | |
| 44087, | |
| 44090, | |
| 44091, | |
| 44093, | |
| 44094, | |
| 44095, | |
| 44097, | |
| 44098, | |
| 44099, | |
| 44100, | |
| 44101, | |
| 44102, | |
| 44103, | |
| 44104, | |
| 44105, | |
| 44106, | |
| 44108, | |
| 44110, | |
| 44111, | |
| 44112, | |
| 44113, | |
| 44114, | |
| 44115, | |
| 44117, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 44118, | |
| 44119, | |
| 44121, | |
| 44122, | |
| 44123, | |
| 44125, | |
| 44126, | |
| 44127, | |
| 44128, | |
| 44129, | |
| 44130, | |
| 44131, | |
| 44132, | |
| 44133, | |
| 44134, | |
| 44135, | |
| 44136, | |
| 44137, | |
| 44138, | |
| 44139, | |
| 44140, | |
| 44141, | |
| 44142, | |
| 44143, | |
| 44146, | |
| 44147, | |
| 44149, | |
| 44150, | |
| 44153, | |
| 44155, | |
| 44156, | |
| 44157, | |
| 44158, | |
| 44159, | |
| 44162, | |
| 44167, | |
| 44168, | |
| 44173, | |
| 44174, | |
| 44175, | |
| 44177, | |
| 44178, | |
| 44179, | |
| 44181, | |
| 44182, | |
| 44183, | |
| 44184, | |
| 44185, | |
| 44186, | |
| 44187, | |
| 44190, | |
| 44194, | |
| 44195, | |
| 44196, | |
| 44197, | |
| 44198, | |
| 44199, | |
| 44203, | |
| 44205, | |
| 44206, | |
| 44209, | |
| 44210, | |
| 44211, | |
| 44212, | |
| 44213, | |
| 44214, | |
| 44215, | |
| 44218, | |
| 44222, | |
| 44223, | |
| 44224, | |
| 44226, | |
| 44227, | |
| 44229, | |
| 44230, | |
| 44231, | |
| 44233, | |
| 44234, | |
| 44235, | |
| 44237, | |
| 44238, | |
| 44239, | |
| 44240, | |
| 44241, | |
| 44242, | |
| 44243, | |
| 44244, | |
| 44246, | |
| 44248, | |
| 44249, | |
| 44250, | |
| 44251, | |
| 44252, | |
| 44253, | |
| 44254, | |
| 44255, | |
| 44258, | |
| 44259, | |
| 44261, | |
| 44262, | |
| 44265, | |
| 44267, | |
| 44269, | |
| 44270, | |
| 44274, | |
| 44276, | |
| 44279, | |
| 44280, | |
| 44281, | |
| 44282, | |
| 44283, | |
| 44286, | |
| 44287, | |
| 44289, | |
| 44290, | |
| 44291, | |
| 44293, | |
| 44295, | |
| 44296, | |
| 44297, | |
| 44298, | |
| 44299, | |
| 44302, | |
| 44304, | |
| 44306, | |
| 44307, | |
| 44308, | |
| 44309, | |
| 44310, | |
| 44311, | |
| 44313, | |
| 44314, | |
| 44315, | |
| 44317, | |
| 44318, | |
| 44319, | |
| 44321, | |
| 44322, | |
| 44323, | |
| 44324, | |
| 44325, | |
| 44326, | |
| 44327, | |
| 44328, | |
| 44330, | |
| 44331, | |
| 44334, | |
| 44335, | |
| 44336, | |
| 44337, | |
| 44338, | |
| 44339, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 44342, | |
| 44343, | |
| 44345, | |
| 44346, | |
| 44347, | |
| 44349, | |
| 44350, | |
| 44351, | |
| 44352, | |
| 44353, | |
| 44354, | |
| 44355, | |
| 44358, | |
| 44360, | |
| 44362, | |
| 44363, | |
| 44364, | |
| 44365, | |
| 44366, | |
| 44367, | |
| 44369, | |
| 44370, | |
| 44371, | |
| 44373, | |
| 44374, | |
| 44375, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| null, | |
| 44377, | |
| 44378, | |
| 44379, | |
| 44380, | |
| 44381, | |
| 44382, | |
| 44383, | |
| 44384, | |
| 44386, | |
| 44388, | |
| 44389, | |
| 44390, | |
| 44391, | |
| 44392, | |
| 44393, | |
| 44394, | |
| 44395, | |
| 44398, | |
| 44399, | |
| 44401, | |
| 44402, | |
| 44407, | |
| 44408, | |
| 44409, | |
| 44410, | |
| 44414, | |
| 44416, | |
| 44419, | |
| 44420, | |
| 44421, | |
| 44422, | |
| 44423, | |
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)