You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/build/js/js_min_all.js

21600 lines
869 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*!
* https://github.com/paulmillr/es6-shim
* @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
* and contributors, MIT License
* es6-shim: v0.35.4
* see https://github.com/paulmillr/es6-shim/blob/0.35.3/LICENSE
* Details and documentation:
* https://github.com/paulmillr/es6-shim/
*/
(function (e, t) {
if (typeof define === "function" && define.amd) {
define(t)
} else if (typeof exports === "object") {
module.exports = t()
} else {
e.returnExports = t()
}
})(this, function () {
"use strict";
var e = Function.call.bind(Function.apply);
var t = Function.call.bind(Function.call);
var r = Array.isArray;
var n = Object.keys;
var o = function notThunker(t) {
return function notThunk() {
return !e(t, this, arguments)
}
};
var i = function (e) {
try {
e();
return false
} catch (t) {
return true
}
};
var a = function valueOrFalseIfThrows(e) {
try {
return e()
} catch (t) {
return false
}
};
var u = o(i);
var f = function () {
return !i(function () {
return Object.defineProperty({}, "x", {
get: function () {
}
})
})
};
var s = !!Object.defineProperty && f();
var c = function foo() {
}.name === "foo";
var l = Function.call.bind(Array.prototype.forEach);
var p = Function.call.bind(Array.prototype.reduce);
var v = Function.call.bind(Array.prototype.filter);
var y = Function.call.bind(Array.prototype.some);
var h = function (e, t, r, n) {
if (!n && t in e) {
return
}
if (s) {
Object.defineProperty(e, t, {configurable: true, enumerable: false, writable: true, value: r})
} else {
e[t] = r
}
};
var b = function (e, t, r) {
l(n(t), function (n) {
var o = t[n];
h(e, n, o, !!r)
})
};
var g = Function.call.bind(Object.prototype.toString);
var d = typeof /abc/ === "function" ? function IsCallableSlow(e) {
return typeof e === "function" && g(e) === "[object Function]"
} : function IsCallableFast(e) {
return typeof e === "function"
};
var m = {
getter: function (e, t, r) {
if (!s) {
throw new TypeError("getters require true ES5 support")
}
Object.defineProperty(e, t, {configurable: true, enumerable: false, get: r})
}, proxy: function (e, t, r) {
if (!s) {
throw new TypeError("getters require true ES5 support")
}
var n = Object.getOwnPropertyDescriptor(e, t);
Object.defineProperty(r, t, {
configurable: n.configurable, enumerable: n.enumerable, get: function getKey() {
return e[t]
}, set: function setKey(r) {
e[t] = r
}
})
}, redefine: function (e, t, r) {
if (s) {
var n = Object.getOwnPropertyDescriptor(e, t);
n.value = r;
Object.defineProperty(e, t, n)
} else {
e[t] = r
}
}, defineByDescriptor: function (e, t, r) {
if (s) {
Object.defineProperty(e, t, r)
} else if ("value" in r) {
e[t] = r.value
}
}, preserveToString: function (e, t) {
if (t && d(t.toString)) {
h(e, "toString", t.toString.bind(t), true)
}
}
};
var O = Object.create || function (e, t) {
var r = function Prototype() {
};
r.prototype = e;
var o = new r;
if (typeof t !== "undefined") {
n(t).forEach(function (e) {
m.defineByDescriptor(o, e, t[e])
})
}
return o
};
var w = function (e, t) {
if (!Object.setPrototypeOf) {
return false
}
return a(function () {
var r = function Subclass(t) {
var r = new e(t);
Object.setPrototypeOf(r, Subclass.prototype);
return r
};
Object.setPrototypeOf(r, e);
r.prototype = O(e.prototype, {constructor: {value: r}});
return t(r)
})
};
var j = function () {
if (typeof self !== "undefined") {
return self
}
if (typeof window !== "undefined") {
return window
}
if (typeof global !== "undefined") {
return global
}
throw new Error("unable to locate global object")
};
var S = j();
var T = S.isFinite;
var I = Function.call.bind(String.prototype.indexOf);
var E = Function.apply.bind(Array.prototype.indexOf);
var P = Function.call.bind(Array.prototype.concat);
var C = Function.call.bind(String.prototype.slice);
var M = Function.call.bind(Array.prototype.push);
var x = Function.apply.bind(Array.prototype.push);
var N = Function.call.bind(Array.prototype.shift);
var A = Math.max;
var R = Math.min;
var _ = Math.floor;
var k = Math.abs;
var L = Math.exp;
var F = Math.log;
var D = Math.sqrt;
var z = Function.call.bind(Object.prototype.hasOwnProperty);
var q;
var W = function () {
};
var G = S.Map;
var H = G && G.prototype["delete"];
var V = G && G.prototype.get;
var B = G && G.prototype.has;
var U = G && G.prototype.set;
var $ = S.Symbol || {};
var J = $.species || "@@species";
var X = Number.isNaN || function isNaN(e) {
return e !== e
};
var K = Number.isFinite || function isFinite(e) {
return typeof e === "number" && T(e)
};
var Z = d(Math.sign) ? Math.sign : function sign(e) {
var t = Number(e);
if (t === 0) {
return t
}
if (X(t)) {
return t
}
return t < 0 ? -1 : 1
};
var Y = function log1p(e) {
var t = Number(e);
if (t < -1 || X(t)) {
return NaN
}
if (t === 0 || t === Infinity) {
return t
}
if (t === -1) {
return -Infinity
}
return 1 + t - 1 === 0 ? t : t * (F(1 + t) / (1 + t - 1))
};
var Q = function isArguments(e) {
return g(e) === "[object Arguments]"
};
var ee = function isArguments(e) {
return e !== null && typeof e === "object" && typeof e.length === "number" && e.length >= 0 && g(e) !== "[object Array]" && g(e.callee) === "[object Function]"
};
var te = Q(arguments) ? Q : ee;
var re = {
primitive: function (e) {
return e === null || typeof e !== "function" && typeof e !== "object"
}, string: function (e) {
return g(e) === "[object String]"
}, regex: function (e) {
return g(e) === "[object RegExp]"
}, symbol: function (e) {
return typeof S.Symbol === "function" && typeof e === "symbol"
}
};
var ne = function overrideNative(e, t, r) {
var n = e[t];
h(e, t, r, true);
m.preserveToString(e[t], n)
};
var oe = typeof $ === "function" && typeof $["for"] === "function" && re.symbol($());
var ie = re.symbol($.iterator) ? $.iterator : "_es6-shim iterator_";
if (S.Set && typeof (new S.Set)["@@iterator"] === "function") {
ie = "@@iterator"
}
if (!S.Reflect) {
h(S, "Reflect", {}, true)
}
var ae = S.Reflect;
var ue = String;
var fe = typeof document === "undefined" || !document ? null : document.all;
var se = fe == null ? function isNullOrUndefined(e) {
return e == null
} : function isNullOrUndefinedAndNotDocumentAll(e) {
return e == null && e !== fe
};
var ce = {
Call: function Call(t, r) {
var n = arguments.length > 2 ? arguments[2] : [];
if (!ce.IsCallable(t)) {
throw new TypeError(t + " is not a function")
}
return e(t, r, n)
}, RequireObjectCoercible: function (e, t) {
if (se(e)) {
throw new TypeError(t || "Cannot call method on " + e)
}
return e
}, TypeIsObject: function (e) {
if (e === void 0 || e === null || e === true || e === false) {
return false
}
return typeof e === "function" || typeof e === "object" || e === fe
}, ToObject: function (e, t) {
return Object(ce.RequireObjectCoercible(e, t))
}, IsCallable: d, IsConstructor: function (e) {
return ce.IsCallable(e)
}, ToInt32: function (e) {
return ce.ToNumber(e) >> 0
}, ToUint32: function (e) {
return ce.ToNumber(e) >>> 0
}, ToNumber: function (e) {
if (g(e) === "[object Symbol]") {
throw new TypeError("Cannot convert a Symbol value to a number")
}
return +e
}, ToInteger: function (e) {
var t = ce.ToNumber(e);
if (X(t)) {
return 0
}
if (t === 0 || !K(t)) {
return t
}
return (t > 0 ? 1 : -1) * _(k(t))
}, ToLength: function (e) {
var t = ce.ToInteger(e);
if (t <= 0) {
return 0
}
if (t > Number.MAX_SAFE_INTEGER) {
return Number.MAX_SAFE_INTEGER
}
return t
}, SameValue: function (e, t) {
if (e === t) {
if (e === 0) {
return 1 / e === 1 / t
}
return true
}
return X(e) && X(t)
}, SameValueZero: function (e, t) {
return e === t || X(e) && X(t)
}, IsIterable: function (e) {
return ce.TypeIsObject(e) && (typeof e[ie] !== "undefined" || te(e))
}, GetIterator: function (e) {
if (te(e)) {
return new q(e, "value")
}
var t = ce.GetMethod(e, ie);
if (!ce.IsCallable(t)) {
throw new TypeError("value is not an iterable")
}
var r = ce.Call(t, e);
if (!ce.TypeIsObject(r)) {
throw new TypeError("bad iterator")
}
return r
}, GetMethod: function (e, t) {
var r = ce.ToObject(e)[t];
if (se(r)) {
return void 0
}
if (!ce.IsCallable(r)) {
throw new TypeError("Method not callable: " + t)
}
return r
}, IteratorComplete: function (e) {
return !!e.done
}, IteratorClose: function (e, t) {
var r = ce.GetMethod(e, "return");
if (r === void 0) {
return
}
var n, o;
try {
n = ce.Call(r, e)
} catch (i) {
o = i
}
if (t) {
return
}
if (o) {
throw o
}
if (!ce.TypeIsObject(n)) {
throw new TypeError("Iterator's return method returned a non-object.")
}
}, IteratorNext: function (e) {
var t = arguments.length > 1 ? e.next(arguments[1]) : e.next();
if (!ce.TypeIsObject(t)) {
throw new TypeError("bad iterator")
}
return t
}, IteratorStep: function (e) {
var t = ce.IteratorNext(e);
var r = ce.IteratorComplete(t);
return r ? false : t
}, Construct: function (e, t, r, n) {
var o = typeof r === "undefined" ? e : r;
if (!n && ae.construct) {
return ae.construct(e, t, o)
}
var i = o.prototype;
if (!ce.TypeIsObject(i)) {
i = Object.prototype
}
var a = O(i);
var u = ce.Call(e, a, t);
return ce.TypeIsObject(u) ? u : a
}, SpeciesConstructor: function (e, t) {
var r = e.constructor;
if (r === void 0) {
return t
}
if (!ce.TypeIsObject(r)) {
throw new TypeError("Bad constructor")
}
var n = r[J];
if (se(n)) {
return t
}
if (!ce.IsConstructor(n)) {
throw new TypeError("Bad @@species")
}
return n
}, CreateHTML: function (e, t, r, n) {
var o = ce.ToString(e);
var i = "<" + t;
if (r !== "") {
var a = ce.ToString(n);
var u = a.replace(/"/g, "&quot;");
i += " " + r + '="' + u + '"'
}
var f = i + ">";
var s = f + o;
return s + "</" + t + ">"
}, IsRegExp: function IsRegExp(e) {
if (!ce.TypeIsObject(e)) {
return false
}
var t = e[$.match];
if (typeof t !== "undefined") {
return !!t
}
return re.regex(e)
}, ToString: function ToString(e) {
return ue(e)
}
};
if (s && oe) {
var le = function defineWellKnownSymbol(e) {
if (re.symbol($[e])) {
return $[e]
}
var t = $["for"]("Symbol." + e);
Object.defineProperty($, e, {configurable: false, enumerable: false, writable: false, value: t});
return t
};
if (!re.symbol($.search)) {
var pe = le("search");
var ve = String.prototype.search;
h(RegExp.prototype, pe, function search(e) {
return ce.Call(ve, e, [this])
});
var ye = function search(e) {
var t = ce.RequireObjectCoercible(this);
if (!se(e)) {
var r = ce.GetMethod(e, pe);
if (typeof r !== "undefined") {
return ce.Call(r, e, [t])
}
}
return ce.Call(ve, t, [ce.ToString(e)])
};
ne(String.prototype, "search", ye)
}
if (!re.symbol($.replace)) {
var he = le("replace");
var be = String.prototype.replace;
h(RegExp.prototype, he, function replace(e, t) {
return ce.Call(be, e, [this, t])
});
var ge = function replace(e, t) {
var r = ce.RequireObjectCoercible(this);
if (!se(e)) {
var n = ce.GetMethod(e, he);
if (typeof n !== "undefined") {
return ce.Call(n, e, [r, t])
}
}
return ce.Call(be, r, [ce.ToString(e), t])
};
ne(String.prototype, "replace", ge)
}
if (!re.symbol($.split)) {
var de = le("split");
var me = String.prototype.split;
h(RegExp.prototype, de, function split(e, t) {
return ce.Call(me, e, [this, t])
});
var Oe = function split(e, t) {
var r = ce.RequireObjectCoercible(this);
if (!se(e)) {
var n = ce.GetMethod(e, de);
if (typeof n !== "undefined") {
return ce.Call(n, e, [r, t])
}
}
return ce.Call(me, r, [ce.ToString(e), t])
};
ne(String.prototype, "split", Oe)
}
var we = re.symbol($.match);
var je = we && function () {
var e = {};
e[$.match] = function () {
return 42
};
return "a".match(e) !== 42
}();
if (!we || je) {
var Se = le("match");
var Te = String.prototype.match;
h(RegExp.prototype, Se, function match(e) {
return ce.Call(Te, e, [this])
});
var Ie = function match(e) {
var t = ce.RequireObjectCoercible(this);
if (!se(e)) {
var r = ce.GetMethod(e, Se);
if (typeof r !== "undefined") {
return ce.Call(r, e, [t])
}
}
return ce.Call(Te, t, [ce.ToString(e)])
};
ne(String.prototype, "match", Ie)
}
}
var Ee = function wrapConstructor(e, t, r) {
m.preserveToString(t, e);
if (Object.setPrototypeOf) {
Object.setPrototypeOf(e, t)
}
if (s) {
l(Object.getOwnPropertyNames(e), function (n) {
if (n in W || r[n]) {
return
}
m.proxy(e, n, t)
})
} else {
l(Object.keys(e), function (n) {
if (n in W || r[n]) {
return
}
t[n] = e[n]
})
}
t.prototype = e.prototype;
m.redefine(e.prototype, "constructor", t)
};
var Pe = function () {
return this
};
var Ce = function (e) {
if (s && !z(e, J)) {
m.getter(e, J, Pe)
}
};
var Me = function (e, t) {
var r = t || function iterator() {
return this
};
h(e, ie, r);
if (!e[ie] && re.symbol(ie)) {
e[ie] = r
}
};
var xe = function createDataProperty(e, t, r) {
if (s) {
Object.defineProperty(e, t, {configurable: true, enumerable: true, writable: true, value: r})
} else {
e[t] = r
}
};
var Ne = function createDataPropertyOrThrow(e, t, r) {
xe(e, t, r);
if (!ce.SameValue(e[t], r)) {
throw new TypeError("property is nonconfigurable")
}
};
var Ae = function (e, t, r, n) {
if (!ce.TypeIsObject(e)) {
throw new TypeError("Constructor requires `new`: " + t.name)
}
var o = t.prototype;
if (!ce.TypeIsObject(o)) {
o = r
}
var i = O(o);
for (var a in n) {
if (z(n, a)) {
var u = n[a];
h(i, a, u, true)
}
}
return i
};
if (String.fromCodePoint && String.fromCodePoint.length !== 1) {
var Re = String.fromCodePoint;
ne(String, "fromCodePoint", function fromCodePoint(e) {
return ce.Call(Re, this, arguments)
})
}
var _e = {
fromCodePoint: function fromCodePoint(e) {
var t = [];
var r;
for (var n = 0, o = arguments.length; n < o; n++) {
r = Number(arguments[n]);
if (!ce.SameValue(r, ce.ToInteger(r)) || r < 0 || r > 1114111) {
throw new RangeError("Invalid code point " + r)
}
if (r < 65536) {
M(t, String.fromCharCode(r))
} else {
r -= 65536;
M(t, String.fromCharCode((r >> 10) + 55296));
M(t, String.fromCharCode(r % 1024 + 56320))
}
}
return t.join("")
}, raw: function raw(e) {
var t = ce.ToObject(e, "bad callSite");
var r = ce.ToObject(t.raw, "bad raw value");
var n = r.length;
var o = ce.ToLength(n);
if (o <= 0) {
return ""
}
var i = [];
var a = 0;
var u, f, s, c;
while (a < o) {
u = ce.ToString(a);
s = ce.ToString(r[u]);
M(i, s);
if (a + 1 >= o) {
break
}
f = a + 1 < arguments.length ? arguments[a + 1] : "";
c = ce.ToString(f);
M(i, c);
a += 1
}
return i.join("")
}
};
if (String.raw && String.raw({raw: {0: "x", 1: "y", length: 2}}) !== "xy") {
ne(String, "raw", _e.raw)
}
b(String, _e);
var ke = function repeat(e, t) {
if (t < 1) {
return ""
}
if (t % 2) {
return repeat(e, t - 1) + e
}
var r = repeat(e, t / 2);
return r + r
};
var Le = Infinity;
var Fe = {
repeat: function repeat(e) {
var t = ce.ToString(ce.RequireObjectCoercible(this));
var r = ce.ToInteger(e);
if (r < 0 || r >= Le) {
throw new RangeError("repeat count must be less than infinity and not overflow maximum string size")
}
return ke(t, r)
}, startsWith: function startsWith(e) {
var t = ce.ToString(ce.RequireObjectCoercible(this));
if (ce.IsRegExp(e)) {
throw new TypeError('Cannot call method "startsWith" with a regex')
}
var r = ce.ToString(e);
var n;
if (arguments.length > 1) {
n = arguments[1]
}
var o = A(ce.ToInteger(n), 0);
return C(t, o, o + r.length) === r
}, endsWith: function endsWith(e) {
var t = ce.ToString(ce.RequireObjectCoercible(this));
if (ce.IsRegExp(e)) {
throw new TypeError('Cannot call method "endsWith" with a regex')
}
var r = ce.ToString(e);
var n = t.length;
var o;
if (arguments.length > 1) {
o = arguments[1]
}
var i = typeof o === "undefined" ? n : ce.ToInteger(o);
var a = R(A(i, 0), n);
return C(t, a - r.length, a) === r
}, includes: function includes(e) {
if (ce.IsRegExp(e)) {
throw new TypeError('"includes" does not accept a RegExp')
}
var t = ce.ToString(e);
var r;
if (arguments.length > 1) {
r = arguments[1]
}
return I(this, t, r) !== -1
}, codePointAt: function codePointAt(e) {
var t = ce.ToString(ce.RequireObjectCoercible(this));
var r = ce.ToInteger(e);
var n = t.length;
if (r >= 0 && r < n) {
var o = t.charCodeAt(r);
var i = r + 1 === n;
if (o < 55296 || o > 56319 || i) {
return o
}
var a = t.charCodeAt(r + 1);
if (a < 56320 || a > 57343) {
return o
}
return (o - 55296) * 1024 + (a - 56320) + 65536
}
}
};
if (String.prototype.includes && "a".includes("a", Infinity) !== false) {
ne(String.prototype, "includes", Fe.includes)
}
if (String.prototype.startsWith && String.prototype.endsWith) {
var De = i(function () {
return "/a/".startsWith(/a/)
});
var ze = a(function () {
return "abc".startsWith("a", Infinity) === false
});
if (!De || !ze) {
ne(String.prototype, "startsWith", Fe.startsWith);
ne(String.prototype, "endsWith", Fe.endsWith)
}
}
if (oe) {
var qe = a(function () {
var e = /a/;
e[$.match] = false;
return "/a/".startsWith(e)
});
if (!qe) {
ne(String.prototype, "startsWith", Fe.startsWith)
}
var We = a(function () {
var e = /a/;
e[$.match] = false;
return "/a/".endsWith(e)
});
if (!We) {
ne(String.prototype, "endsWith", Fe.endsWith)
}
var Ge = a(function () {
var e = /a/;
e[$.match] = false;
return "/a/".includes(e)
});
if (!Ge) {
ne(String.prototype, "includes", Fe.includes)
}
}
b(String.prototype, Fe);
var He = ["\t\n\x0B\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003", "\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028", "\u2029\ufeff"].join("");
var Ve = new RegExp("(^[" + He + "]+)|([" + He + "]+$)", "g");
var Be = function trim() {
return ce.ToString(ce.RequireObjectCoercible(this)).replace(Ve, "")
};
var Ue = ["\x85", "\u200b", "\ufffe"].join("");
var $e = new RegExp("[" + Ue + "]", "g");
var Je = /^[-+]0x[0-9a-f]+$/i;
var Xe = Ue.trim().length !== Ue.length;
h(String.prototype, "trim", Be, Xe);
var Ke = function (e) {
return {value: e, done: arguments.length === 0}
};
var Ze = function (e) {
ce.RequireObjectCoercible(e);
this._s = ce.ToString(e);
this._i = 0
};
Ze.prototype.next = function () {
var e = this._s;
var t = this._i;
if (typeof e === "undefined" || t >= e.length) {
this._s = void 0;
return Ke()
}
var r = e.charCodeAt(t);
var n, o;
if (r < 55296 || r > 56319 || t + 1 === e.length) {
o = 1
} else {
n = e.charCodeAt(t + 1);
o = n < 56320 || n > 57343 ? 1 : 2
}
this._i = t + o;
return Ke(e.substr(t, o))
};
Me(Ze.prototype);
Me(String.prototype, function () {
return new Ze(this)
});
var Ye = {
from: function from(e) {
var r = this;
var n;
if (arguments.length > 1) {
n = arguments[1]
}
var o, i;
if (typeof n === "undefined") {
o = false
} else {
if (!ce.IsCallable(n)) {
throw new TypeError("Array.from: when provided, the second argument must be a function")
}
if (arguments.length > 2) {
i = arguments[2]
}
o = true
}
var a = typeof (te(e) || ce.GetMethod(e, ie)) !== "undefined";
var u, f, s;
if (a) {
f = ce.IsConstructor(r) ? Object(new r) : [];
var c = ce.GetIterator(e);
var l, p;
s = 0;
while (true) {
l = ce.IteratorStep(c);
if (l === false) {
break
}
p = l.value;
try {
if (o) {
p = typeof i === "undefined" ? n(p, s) : t(n, i, p, s)
}
f[s] = p
} catch (v) {
ce.IteratorClose(c, true);
throw v
}
s += 1
}
u = s
} else {
var y = ce.ToObject(e);
u = ce.ToLength(y.length);
f = ce.IsConstructor(r) ? Object(new r(u)) : new Array(u);
var h;
for (s = 0; s < u; ++s) {
h = y[s];
if (o) {
h = typeof i === "undefined" ? n(h, s) : t(n, i, h, s)
}
Ne(f, s, h)
}
}
f.length = u;
return f
}, of: function of() {
var e = arguments.length;
var t = this;
var n = r(t) || !ce.IsCallable(t) ? new Array(e) : ce.Construct(t, [e]);
for (var o = 0; o < e; ++o) {
Ne(n, o, arguments[o])
}
n.length = e;
return n
}
};
b(Array, Ye);
Ce(Array);
q = function (e, t) {
this.i = 0;
this.array = e;
this.kind = t
};
b(q.prototype, {
next: function () {
var e = this.i;
var t = this.array;
if (!(this instanceof q)) {
throw new TypeError("Not an ArrayIterator")
}
if (typeof t !== "undefined") {
var r = ce.ToLength(t.length);
for (; e < r; e++) {
var n = this.kind;
var o;
if (n === "key") {
o = e
} else if (n === "value") {
o = t[e]
} else if (n === "entry") {
o = [e, t[e]]
}
this.i = e + 1;
return Ke(o)
}
}
this.array = void 0;
return Ke()
}
});
Me(q.prototype);
var Qe = Array.of === Ye.of || function () {
var e = function Foo(e) {
this.length = e
};
e.prototype = [];
var t = Array.of.apply(e, [1, 2]);
return t instanceof e && t.length === 2
}();
if (!Qe) {
ne(Array, "of", Ye.of)
}
var et = {
copyWithin: function copyWithin(e, t) {
var r = ce.ToObject(this);
var n = ce.ToLength(r.length);
var o = ce.ToInteger(e);
var i = ce.ToInteger(t);
var a = o < 0 ? A(n + o, 0) : R(o, n);
var u = i < 0 ? A(n + i, 0) : R(i, n);
var f;
if (arguments.length > 2) {
f = arguments[2]
}
var s = typeof f === "undefined" ? n : ce.ToInteger(f);
var c = s < 0 ? A(n + s, 0) : R(s, n);
var l = R(c - u, n - a);
var p = 1;
if (u < a && a < u + l) {
p = -1;
u += l - 1;
a += l - 1
}
while (l > 0) {
if (u in r) {
r[a] = r[u]
} else {
delete r[a]
}
u += p;
a += p;
l -= 1
}
return r
}, fill: function fill(e) {
var t;
if (arguments.length > 1) {
t = arguments[1]
}
var r;
if (arguments.length > 2) {
r = arguments[2]
}
var n = ce.ToObject(this);
var o = ce.ToLength(n.length);
t = ce.ToInteger(typeof t === "undefined" ? 0 : t);
r = ce.ToInteger(typeof r === "undefined" ? o : r);
var i = t < 0 ? A(o + t, 0) : R(t, o);
var a = r < 0 ? o + r : r;
for (var u = i; u < o && u < a; ++u) {
n[u] = e
}
return n
}, find: function find(e) {
var r = ce.ToObject(this);
var n = ce.ToLength(r.length);
if (!ce.IsCallable(e)) {
throw new TypeError("Array#find: predicate must be a function")
}
var o = arguments.length > 1 ? arguments[1] : null;
for (var i = 0, a; i < n; i++) {
a = r[i];
if (o) {
if (t(e, o, a, i, r)) {
return a
}
} else if (e(a, i, r)) {
return a
}
}
}, findIndex: function findIndex(e) {
var r = ce.ToObject(this);
var n = ce.ToLength(r.length);
if (!ce.IsCallable(e)) {
throw new TypeError("Array#findIndex: predicate must be a function")
}
var o = arguments.length > 1 ? arguments[1] : null;
for (var i = 0; i < n; i++) {
if (o) {
if (t(e, o, r[i], i, r)) {
return i
}
} else if (e(r[i], i, r)) {
return i
}
}
return -1
}, keys: function keys() {
return new q(this, "key")
}, values: function values() {
return new q(this, "value")
}, entries: function entries() {
return new q(this, "entry")
}
};
if (Array.prototype.keys && !ce.IsCallable([1].keys().next)) {
delete Array.prototype.keys
}
if (Array.prototype.entries && !ce.IsCallable([1].entries().next)) {
delete Array.prototype.entries
}
if (Array.prototype.keys && Array.prototype.entries && !Array.prototype.values && Array.prototype[ie]) {
b(Array.prototype, {values: Array.prototype[ie]});
if (re.symbol($.unscopables)) {
Array.prototype[$.unscopables].values = true
}
}
if (c && Array.prototype.values && Array.prototype.values.name !== "values") {
var tt = Array.prototype.values;
ne(Array.prototype, "values", function values() {
return ce.Call(tt, this, arguments)
});
h(Array.prototype, ie, Array.prototype.values, true)
}
b(Array.prototype, et);
if (1 / [true].indexOf(true, -0) < 0) {
h(Array.prototype, "indexOf", function indexOf(e) {
var t = E(this, arguments);
if (t === 0 && 1 / t < 0) {
return 0
}
return t
}, true)
}
Me(Array.prototype, function () {
return this.values()
});
if (Object.getPrototypeOf) {
Me(Object.getPrototypeOf([].values()))
}
var rt = function () {
return a(function () {
return Array.from({length: -1}).length === 0
})
}();
var nt = function () {
var e = Array.from([0].entries());
return e.length === 1 && r(e[0]) && e[0][0] === 0 && e[0][1] === 0
}();
if (!rt || !nt) {
ne(Array, "from", Ye.from)
}
var ot = function () {
return a(function () {
return Array.from([0], void 0)
})
}();
if (!ot) {
var it = Array.from;
ne(Array, "from", function from(e) {
if (arguments.length > 1 && typeof arguments[1] !== "undefined") {
return ce.Call(it, this, arguments)
} else {
return t(it, this, e)
}
})
}
var at = -(Math.pow(2, 32) - 1);
var ut = function (e, r) {
var n = {length: at};
n[r ? (n.length >>> 0) - 1 : 0] = true;
return a(function () {
t(e, n, function () {
throw new RangeError("should not reach here")
}, []);
return true
})
};
if (!ut(Array.prototype.forEach)) {
var ft = Array.prototype.forEach;
ne(Array.prototype, "forEach", function forEach(e) {
return ce.Call(ft, this.length >= 0 ? this : [], arguments)
}, true)
}
if (!ut(Array.prototype.map)) {
var st = Array.prototype.map;
ne(Array.prototype, "map", function map(e) {
return ce.Call(st, this.length >= 0 ? this : [], arguments)
}, true)
}
if (!ut(Array.prototype.filter)) {
var ct = Array.prototype.filter;
ne(Array.prototype, "filter", function filter(e) {
return ce.Call(ct, this.length >= 0 ? this : [], arguments)
}, true)
}
if (!ut(Array.prototype.some)) {
var lt = Array.prototype.some;
ne(Array.prototype, "some", function some(e) {
return ce.Call(lt, this.length >= 0 ? this : [], arguments)
}, true)
}
if (!ut(Array.prototype.every)) {
var pt = Array.prototype.every;
ne(Array.prototype, "every", function every(e) {
return ce.Call(pt, this.length >= 0 ? this : [], arguments)
}, true)
}
if (!ut(Array.prototype.reduce)) {
var vt = Array.prototype.reduce;
ne(Array.prototype, "reduce", function reduce(e) {
return ce.Call(vt, this.length >= 0 ? this : [], arguments)
}, true)
}
if (!ut(Array.prototype.reduceRight, true)) {
var yt = Array.prototype.reduceRight;
ne(Array.prototype, "reduceRight", function reduceRight(e) {
return ce.Call(yt, this.length >= 0 ? this : [], arguments)
}, true)
}
var ht = Number("0o10") !== 8;
var bt = Number("0b10") !== 2;
var gt = y(Ue, function (e) {
return Number(e + 0 + e) === 0
});
if (ht || bt || gt) {
var dt = Number;
var mt = /^0b[01]+$/i;
var Ot = /^0o[0-7]+$/i;
var wt = mt.test.bind(mt);
var jt = Ot.test.bind(Ot);
var St = function (e) {
var t;
if (typeof e.valueOf === "function") {
t = e.valueOf();
if (re.primitive(t)) {
return t
}
}
if (typeof e.toString === "function") {
t = e.toString();
if (re.primitive(t)) {
return t
}
}
throw new TypeError("No default value")
};
var Tt = $e.test.bind($e);
var It = Je.test.bind(Je);
var Et = function () {
var e = function Number(t) {
var r;
if (arguments.length > 0) {
r = re.primitive(t) ? t : St(t, "number")
} else {
r = 0
}
if (typeof r === "string") {
r = ce.Call(Be, r);
if (wt(r)) {
r = parseInt(C(r, 2), 2)
} else if (jt(r)) {
r = parseInt(C(r, 2), 8)
} else if (Tt(r) || It(r)) {
r = NaN
}
}
var n = this;
var o = a(function () {
dt.prototype.valueOf.call(n);
return true
});
if (n instanceof e && !o) {
return new dt(r)
}
return dt(r)
};
return e
}();
Ee(dt, Et, {});
b(Et, {
NaN: dt.NaN,
MAX_VALUE: dt.MAX_VALUE,
MIN_VALUE: dt.MIN_VALUE,
NEGATIVE_INFINITY: dt.NEGATIVE_INFINITY,
POSITIVE_INFINITY: dt.POSITIVE_INFINITY
});
Number = Et;
m.redefine(S, "Number", Et)
}
var Pt = Math.pow(2, 53) - 1;
b(Number, {
MAX_SAFE_INTEGER: Pt,
MIN_SAFE_INTEGER: -Pt,
EPSILON: 2.220446049250313e-16,
parseInt: S.parseInt,
parseFloat: S.parseFloat,
isFinite: K,
isInteger: function isInteger(e) {
return K(e) && ce.ToInteger(e) === e
},
isSafeInteger: function isSafeInteger(e) {
return Number.isInteger(e) && k(e) <= Number.MAX_SAFE_INTEGER
},
isNaN: X
});
h(Number, "parseInt", S.parseInt, Number.parseInt !== S.parseInt);
if ([, 1].find(function () {
return true
}) === 1) {
ne(Array.prototype, "find", et.find)
}
if ([, 1].findIndex(function () {
return true
}) !== 0) {
ne(Array.prototype, "findIndex", et.findIndex)
}
var Ct = Function.bind.call(Function.bind, Object.prototype.propertyIsEnumerable);
var Mt = function ensureEnumerable(e, t) {
if (s && Ct(e, t)) {
Object.defineProperty(e, t, {enumerable: false})
}
};
var xt = function sliceArgs() {
var e = Number(this);
var t = arguments.length;
var r = t - e;
var n = new Array(r < 0 ? 0 : r);
for (var o = e; o < t; ++o) {
n[o - e] = arguments[o]
}
return n
};
var Nt = function assignTo(e) {
return function assignToSource(t, r) {
t[r] = e[r];
return t
}
};
var At = function (e, t) {
var r = n(Object(t));
var o;
if (ce.IsCallable(Object.getOwnPropertySymbols)) {
o = v(Object.getOwnPropertySymbols(Object(t)), Ct(t))
}
return p(P(r, o || []), Nt(t), e)
};
var Rt = {
assign: function (e, t) {
var r = ce.ToObject(e, "Cannot convert undefined or null to object");
return p(ce.Call(xt, 1, arguments), At, r)
}, is: function is(e, t) {
return ce.SameValue(e, t)
}
};
var _t = Object.assign && Object.preventExtensions && function () {
var e = Object.preventExtensions({1: 2});
try {
Object.assign(e, "xy")
} catch (t) {
return e[1] === "y"
}
}();
if (_t) {
ne(Object, "assign", Rt.assign)
}
b(Object, Rt);
if (s) {
var kt = {
setPrototypeOf: function (e, r) {
var n;
var o = function (e, t) {
if (!ce.TypeIsObject(e)) {
throw new TypeError("cannot set prototype on a non-object")
}
if (!(t === null || ce.TypeIsObject(t))) {
throw new TypeError("can only set prototype to an object or null" + t)
}
};
var i = function (e, r) {
o(e, r);
t(n, e, r);
return e
};
try {
n = e.getOwnPropertyDescriptor(e.prototype, r).set;
t(n, {}, null)
} catch (a) {
if (e.prototype !== {}[r]) {
return
}
n = function (e) {
this[r] = e
};
i.polyfill = i(i({}, null), e.prototype) instanceof e
}
return i
}(Object, "__proto__")
};
b(Object, kt)
}
if (Object.setPrototypeOf && Object.getPrototypeOf && Object.getPrototypeOf(Object.setPrototypeOf({}, null)) !== null && Object.getPrototypeOf(Object.create(null)) === null) {
(function () {
var e = Object.create(null);
var t = Object.getPrototypeOf;
var r = Object.setPrototypeOf;
Object.getPrototypeOf = function (r) {
var n = t(r);
return n === e ? null : n
};
Object.setPrototypeOf = function (t, n) {
var o = n === null ? e : n;
return r(t, o)
};
Object.setPrototypeOf.polyfill = false
})()
}
var Lt = !i(function () {
return Object.keys("foo")
});
if (!Lt) {
var Ft = Object.keys;
ne(Object, "keys", function keys(e) {
return Ft(ce.ToObject(e))
});
n = Object.keys
}
var Dt = i(function () {
return Object.keys(/a/g)
});
if (Dt) {
var zt = Object.keys;
ne(Object, "keys", function keys(e) {
if (re.regex(e)) {
var t = [];
for (var r in e) {
if (z(e, r)) {
M(t, r)
}
}
return t
}
return zt(e)
});
n = Object.keys
}
if (Object.getOwnPropertyNames) {
var qt = !i(function () {
return Object.getOwnPropertyNames("foo")
});
if (!qt) {
var Wt = typeof window === "object" ? Object.getOwnPropertyNames(window) : [];
var Gt = Object.getOwnPropertyNames;
ne(Object, "getOwnPropertyNames", function getOwnPropertyNames(e) {
var t = ce.ToObject(e);
if (g(t) === "[object Window]") {
try {
return Gt(t)
} catch (r) {
return P([], Wt)
}
}
return Gt(t)
})
}
}
if (Object.getOwnPropertyDescriptor) {
var Ht = !i(function () {
return Object.getOwnPropertyDescriptor("foo", "bar")
});
if (!Ht) {
var Vt = Object.getOwnPropertyDescriptor;
ne(Object, "getOwnPropertyDescriptor", function getOwnPropertyDescriptor(e, t) {
return Vt(ce.ToObject(e), t)
})
}
}
if (Object.seal) {
var Bt = !i(function () {
return Object.seal("foo")
});
if (!Bt) {
var Ut = Object.seal;
ne(Object, "seal", function seal(e) {
if (!ce.TypeIsObject(e)) {
return e
}
return Ut(e)
})
}
}
if (Object.isSealed) {
var $t = !i(function () {
return Object.isSealed("foo")
});
if (!$t) {
var Jt = Object.isSealed;
ne(Object, "isSealed", function isSealed(e) {
if (!ce.TypeIsObject(e)) {
return true
}
return Jt(e)
})
}
}
if (Object.freeze) {
var Xt = !i(function () {
return Object.freeze("foo")
});
if (!Xt) {
var Kt = Object.freeze;
ne(Object, "freeze", function freeze(e) {
if (!ce.TypeIsObject(e)) {
return e
}
return Kt(e)
})
}
}
if (Object.isFrozen) {
var Zt = !i(function () {
return Object.isFrozen("foo")
});
if (!Zt) {
var Yt = Object.isFrozen;
ne(Object, "isFrozen", function isFrozen(e) {
if (!ce.TypeIsObject(e)) {
return true
}
return Yt(e)
})
}
}
if (Object.preventExtensions) {
var Qt = !i(function () {
return Object.preventExtensions("foo")
});
if (!Qt) {
var er = Object.preventExtensions;
ne(Object, "preventExtensions", function preventExtensions(e) {
if (!ce.TypeIsObject(e)) {
return e
}
return er(e)
})
}
}
if (Object.isExtensible) {
var tr = !i(function () {
return Object.isExtensible("foo")
});
if (!tr) {
var rr = Object.isExtensible;
ne(Object, "isExtensible", function isExtensible(e) {
if (!ce.TypeIsObject(e)) {
return false
}
return rr(e)
})
}
}
if (Object.getPrototypeOf) {
var nr = !i(function () {
return Object.getPrototypeOf("foo")
});
if (!nr) {
var or = Object.getPrototypeOf;
ne(Object, "getPrototypeOf", function getPrototypeOf(e) {
return or(ce.ToObject(e))
})
}
}
var ir = s && function () {
var e = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags");
return e && ce.IsCallable(e.get)
}();
if (s && !ir) {
var ar = function flags() {
if (!ce.TypeIsObject(this)) {
throw new TypeError("Method called on incompatible type: must be an object.")
}
var e = "";
if (this.global) {
e += "g"
}
if (this.ignoreCase) {
e += "i"
}
if (this.multiline) {
e += "m"
}
if (this.unicode) {
e += "u"
}
if (this.sticky) {
e += "y"
}
return e
};
m.getter(RegExp.prototype, "flags", ar)
}
var ur = s && a(function () {
return String(new RegExp(/a/g, "i")) === "/a/i"
});
var fr = oe && s && function () {
var e = /./;
e[$.match] = false;
return RegExp(e) === e
}();
var sr = a(function () {
return RegExp.prototype.toString.call({source: "abc"}) === "/abc/"
});
var cr = sr && a(function () {
return RegExp.prototype.toString.call({source: "a", flags: "b"}) === "/a/b"
});
if (!sr || !cr) {
var lr = RegExp.prototype.toString;
h(RegExp.prototype, "toString", function toString() {
var e = ce.RequireObjectCoercible(this);
if (re.regex(e)) {
return t(lr, e)
}
var r = ue(e.source);
var n = ue(e.flags);
return "/" + r + "/" + n
}, true);
m.preserveToString(RegExp.prototype.toString, lr)
}
if (s && (!ur || fr)) {
var pr = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
var vr = Object.getOwnPropertyDescriptor(RegExp.prototype, "source") || {};
var yr = function () {
return this.source
};
var hr = ce.IsCallable(vr.get) ? vr.get : yr;
var br = RegExp;
var gr = function () {
return function RegExp(e, t) {
var r = ce.IsRegExp(e);
var n = this instanceof RegExp;
if (!n && r && typeof t === "undefined" && e.constructor === RegExp) {
return e
}
var o = e;
var i = t;
if (re.regex(e)) {
o = ce.Call(hr, e);
i = typeof t === "undefined" ? ce.Call(pr, e) : t;
return new RegExp(o, i)
} else if (r) {
o = e.source;
i = typeof t === "undefined" ? e.flags : t
}
return new br(e, t)
}
}();
Ee(br, gr, {$input: true});
RegExp = gr;
m.redefine(S, "RegExp", gr)
}
if (s) {
var dr = {input: "$_", lastMatch: "$&", lastParen: "$+", leftContext: "$`", rightContext: "$'"};
l(n(dr), function (e) {
if (e in RegExp && !(dr[e] in RegExp)) {
m.getter(RegExp, dr[e], function get() {
return RegExp[e]
})
}
})
}
Ce(RegExp);
var mr = 1 / Number.EPSILON;
var Or = function roundTiesToEven(e) {
return e + mr - mr
};
var wr = Math.pow(2, -23);
var jr = Math.pow(2, 127) * (2 - wr);
var Sr = Math.pow(2, -126);
var Tr = Math.E;
var Ir = Math.LOG2E;
var Er = Math.LOG10E;
var Pr = Number.prototype.clz;
delete Number.prototype.clz;
var Cr = {
acosh: function acosh(e) {
var t = Number(e);
if (X(t) || e < 1) {
return NaN
}
if (t === 1) {
return 0
}
if (t === Infinity) {
return t
}
var r = 1 / (t * t);
if (t < 2) {
return Y(t - 1 + D(1 - r) * t)
}
var n = t / 2;
return Y(n + D(1 - r) * n - 1) + 1 / Ir
}, asinh: function asinh(e) {
var t = Number(e);
if (t === 0 || !T(t)) {
return t
}
var r = k(t);
var n = r * r;
var o = Z(t);
if (r < 1) {
return o * Y(r + n / (D(n + 1) + 1))
}
return o * (Y(r / 2 + D(1 + 1 / n) * r / 2 - 1) + 1 / Ir)
}, atanh: function atanh(e) {
var t = Number(e);
if (t === 0) {
return t
}
if (t === -1) {
return -Infinity
}
if (t === 1) {
return Infinity
}
if (X(t) || t < -1 || t > 1) {
return NaN
}
var r = k(t);
return Z(t) * Y(2 * r / (1 - r)) / 2
}, cbrt: function cbrt(e) {
var t = Number(e);
if (t === 0) {
return t
}
var r = t < 0;
var n;
if (r) {
t = -t
}
if (t === Infinity) {
n = Infinity
} else {
n = L(F(t) / 3);
n = (t / (n * n) + 2 * n) / 3
}
return r ? -n : n
}, clz32: function clz32(e) {
var t = Number(e);
var r = ce.ToUint32(t);
if (r === 0) {
return 32
}
return Pr ? ce.Call(Pr, r) : 31 - _(F(r + .5) * Ir)
}, cosh: function cosh(e) {
var t = Number(e);
if (t === 0) {
return 1
}
if (X(t)) {
return NaN
}
if (!T(t)) {
return Infinity
}
var r = L(k(t) - 1);
return (r + 1 / (r * Tr * Tr)) * (Tr / 2)
}, expm1: function expm1(e) {
var t = Number(e);
if (t === -Infinity) {
return -1
}
if (!T(t) || t === 0) {
return t
}
if (k(t) > .5) {
return L(t) - 1
}
var r = t;
var n = 0;
var o = 1;
while (n + r !== n) {
n += r;
o += 1;
r *= t / o
}
return n
}, hypot: function hypot(e, t) {
var r = 0;
var n = 0;
for (var o = 0; o < arguments.length; ++o) {
var i = k(Number(arguments[o]));
if (n < i) {
r *= n / i * (n / i);
r += 1;
n = i
} else {
r += i > 0 ? i / n * (i / n) : i
}
}
return n === Infinity ? Infinity : n * D(r)
}, log2: function log2(e) {
return F(e) * Ir
}, log10: function log10(e) {
return F(e) * Er
}, log1p: Y, sign: Z, sinh: function sinh(e) {
var t = Number(e);
if (!T(t) || t === 0) {
return t
}
var r = k(t);
if (r < 1) {
var n = Math.expm1(r);
return Z(t) * n * (1 + 1 / (n + 1)) / 2
}
var o = L(r - 1);
return Z(t) * (o - 1 / (o * Tr * Tr)) * (Tr / 2)
}, tanh: function tanh(e) {
var t = Number(e);
if (X(t) || t === 0) {
return t
}
if (t >= 20) {
return 1
}
if (t <= -20) {
return -1
}
return (Math.expm1(t) - Math.expm1(-t)) / (L(t) + L(-t))
}, trunc: function trunc(e) {
var t = Number(e);
return t < 0 ? -_(-t) : _(t)
}, imul: function imul(e, t) {
var r = ce.ToUint32(e);
var n = ce.ToUint32(t);
var o = r >>> 16 & 65535;
var i = r & 65535;
var a = n >>> 16 & 65535;
var u = n & 65535;
return i * u + (o * u + i * a << 16 >>> 0) | 0
}, fround: function fround(e) {
var t = Number(e);
if (t === 0 || t === Infinity || t === -Infinity || X(t)) {
return t
}
var r = Z(t);
var n = k(t);
if (n < Sr) {
return r * Or(n / Sr / wr) * Sr * wr
}
var o = (1 + wr / Number.EPSILON) * n;
var i = o - (o - n);
if (i > jr || X(i)) {
return r * Infinity
}
return r * i
}
};
var Mr = function withinULPDistance(e, t, r) {
return k(1 - e / t) / Number.EPSILON < (r || 8)
};
b(Math, Cr);
h(Math, "sinh", Cr.sinh, Math.sinh(710) === Infinity);
h(Math, "cosh", Cr.cosh, Math.cosh(710) === Infinity);
h(Math, "log1p", Cr.log1p, Math.log1p(-1e-17) !== -1e-17);
h(Math, "asinh", Cr.asinh, Math.asinh(-1e7) !== -Math.asinh(1e7));
h(Math, "asinh", Cr.asinh, Math.asinh(1e300) === Infinity);
h(Math, "atanh", Cr.atanh, Math.atanh(1e-300) === 0);
h(Math, "tanh", Cr.tanh, Math.tanh(-2e-17) !== -2e-17);
h(Math, "acosh", Cr.acosh, Math.acosh(Number.MAX_VALUE) === Infinity);
h(Math, "acosh", Cr.acosh, !Mr(Math.acosh(1 + Number.EPSILON), Math.sqrt(2 * Number.EPSILON)));
h(Math, "cbrt", Cr.cbrt, !Mr(Math.cbrt(1e-300), 1e-100));
h(Math, "sinh", Cr.sinh, Math.sinh(-2e-17) !== -2e-17);
var xr = Math.expm1(10);
h(Math, "expm1", Cr.expm1, xr > 22025.465794806718 || xr < 22025.465794806718);
var Nr = Math.round;
var Ar = Math.round(.5 - Number.EPSILON / 4) === 0 && Math.round(-.5 + Number.EPSILON / 3.99) === 1;
var Rr = mr + 1;
var _r = 2 * mr - 1;
var kr = [Rr, _r].every(function (e) {
return Math.round(e) === e
});
h(Math, "round", function round(e) {
var t = _(e);
var r = t === -1 ? -0 : t + 1;
return e - t < .5 ? t : r
}, !Ar || !kr);
m.preserveToString(Math.round, Nr);
var Lr = Math.imul;
if (Math.imul(4294967295, 5) !== -5) {
Math.imul = Cr.imul;
m.preserveToString(Math.imul, Lr)
}
if (Math.imul.length !== 2) {
ne(Math, "imul", function imul(e, t) {
return ce.Call(Lr, Math, arguments)
})
}
var Fr = function () {
var e = S.setTimeout;
if (typeof e !== "function" && typeof e !== "object") {
return
}
ce.IsPromise = function (e) {
if (!ce.TypeIsObject(e)) {
return false
}
if (typeof e._promise === "undefined") {
return false
}
return true
};
var r = function (e) {
if (!ce.IsConstructor(e)) {
throw new TypeError("Bad promise constructor")
}
var t = this;
var r = function (e, r) {
if (t.resolve !== void 0 || t.reject !== void 0) {
throw new TypeError("Bad Promise implementation!")
}
t.resolve = e;
t.reject = r
};
t.resolve = void 0;
t.reject = void 0;
t.promise = new e(r);
if (!(ce.IsCallable(t.resolve) && ce.IsCallable(t.reject))) {
throw new TypeError("Bad promise constructor")
}
};
var n;
if (typeof window !== "undefined" && ce.IsCallable(window.postMessage)) {
n = function () {
var e = [];
var t = "zero-timeout-message";
var r = function (r) {
M(e, r);
window.postMessage(t, "*")
};
var n = function (r) {
if (r.source === window && r.data === t) {
r.stopPropagation();
if (e.length === 0) {
return
}
var n = N(e);
n()
}
};
window.addEventListener("message", n, true);
return r
}
}
var o = function () {
var e = S.Promise;
var t = e && e.resolve && e.resolve();
return t && function (e) {
return t.then(e)
}
};
var i = ce.IsCallable(S.setImmediate) ? S.setImmediate : typeof process === "object" && process.nextTick ? process.nextTick : o() || (ce.IsCallable(n) ? n() : function (t) {
e(t, 0)
});
var a = function (e) {
return e
};
var u = function (e) {
throw e
};
var f = 0;
var s = 1;
var c = 2;
var l = 0;
var p = 1;
var v = 2;
var y = {};
var h = function (e, t, r) {
i(function () {
g(e, t, r)
})
};
var g = function (e, t, r) {
var n, o;
if (t === y) {
return e(r)
}
try {
n = e(r);
o = t.resolve
} catch (i) {
n = i;
o = t.reject
}
o(n)
};
var d = function (e, t) {
var r = e._promise;
var n = r.reactionLength;
if (n > 0) {
h(r.fulfillReactionHandler0, r.reactionCapability0, t);
r.fulfillReactionHandler0 = void 0;
r.rejectReactions0 = void 0;
r.reactionCapability0 = void 0;
if (n > 1) {
for (var o = 1, i = 0; o < n; o++, i += 3) {
h(r[i + l], r[i + v], t);
e[i + l] = void 0;
e[i + p] = void 0;
e[i + v] = void 0
}
}
}
r.result = t;
r.state = s;
r.reactionLength = 0
};
var m = function (e, t) {
var r = e._promise;
var n = r.reactionLength;
if (n > 0) {
h(r.rejectReactionHandler0, r.reactionCapability0, t);
r.fulfillReactionHandler0 = void 0;
r.rejectReactions0 = void 0;
r.reactionCapability0 = void 0;
if (n > 1) {
for (var o = 1, i = 0; o < n; o++, i += 3) {
h(r[i + p], r[i + v], t);
e[i + l] = void 0;
e[i + p] = void 0;
e[i + v] = void 0
}
}
}
r.result = t;
r.state = c;
r.reactionLength = 0
};
var O = function (e) {
var t = false;
var r = function (r) {
var n;
if (t) {
return
}
t = true;
if (r === e) {
return m(e, new TypeError("Self resolution"))
}
if (!ce.TypeIsObject(r)) {
return d(e, r)
}
try {
n = r.then
} catch (o) {
return m(e, o)
}
if (!ce.IsCallable(n)) {
return d(e, r)
}
i(function () {
j(e, r, n)
})
};
var n = function (r) {
if (t) {
return
}
t = true;
return m(e, r)
};
return {resolve: r, reject: n}
};
var w = function (e, r, n, o) {
if (e === I) {
t(e, r, n, o, y)
} else {
t(e, r, n, o)
}
};
var j = function (e, t, r) {
var n = O(e);
var o = n.resolve;
var i = n.reject;
try {
w(r, t, o, i)
} catch (a) {
i(a)
}
};
var T, I;
var E = function () {
var e = function Promise(t) {
if (!(this instanceof e)) {
throw new TypeError('Constructor Promise requires "new"')
}
if (this && this._promise) {
throw new TypeError("Bad construction")
}
if (!ce.IsCallable(t)) {
throw new TypeError("not a valid resolver")
}
var r = Ae(this, e, T, {
_promise: {
result: void 0,
state: f,
reactionLength: 0,
fulfillReactionHandler0: void 0,
rejectReactionHandler0: void 0,
reactionCapability0: void 0
}
});
var n = O(r);
var o = n.reject;
try {
t(n.resolve, o)
} catch (i) {
o(i)
}
return r
};
return e
}();
T = E.prototype;
var P = function (e, t, r, n) {
var o = false;
return function (i) {
if (o) {
return
}
o = true;
t[e] = i;
if (--n.count === 0) {
var a = r.resolve;
a(t)
}
}
};
var C = function (e, t, r) {
var n = e.iterator;
var o = [];
var i = {count: 1};
var a, u;
var f = 0;
while (true) {
try {
a = ce.IteratorStep(n);
if (a === false) {
e.done = true;
break
}
u = a.value
} catch (s) {
e.done = true;
throw s
}
o[f] = void 0;
var c = t.resolve(u);
var l = P(f, o, r, i);
i.count += 1;
w(c.then, c, l, r.reject);
f += 1
}
if (--i.count === 0) {
var p = r.resolve;
p(o)
}
return r.promise
};
var x = function (e, t, r) {
var n = e.iterator;
var o, i, a;
while (true) {
try {
o = ce.IteratorStep(n);
if (o === false) {
e.done = true;
break
}
i = o.value
} catch (u) {
e.done = true;
throw u
}
a = t.resolve(i);
w(a.then, a, r.resolve, r.reject)
}
return r.promise
};
b(E, {
all: function all(e) {
var t = this;
if (!ce.TypeIsObject(t)) {
throw new TypeError("Promise is not object")
}
var n = new r(t);
var o, i;
try {
o = ce.GetIterator(e);
i = {iterator: o, done: false};
return C(i, t, n)
} catch (a) {
var u = a;
if (i && !i.done) {
try {
ce.IteratorClose(o, true)
} catch (f) {
u = f
}
}
var s = n.reject;
s(u);
return n.promise
}
}, race: function race(e) {
var t = this;
if (!ce.TypeIsObject(t)) {
throw new TypeError("Promise is not object")
}
var n = new r(t);
var o, i;
try {
o = ce.GetIterator(e);
i = {iterator: o, done: false};
return x(i, t, n)
} catch (a) {
var u = a;
if (i && !i.done) {
try {
ce.IteratorClose(o, true)
} catch (f) {
u = f
}
}
var s = n.reject;
s(u);
return n.promise
}
}, reject: function reject(e) {
var t = this;
if (!ce.TypeIsObject(t)) {
throw new TypeError("Bad promise constructor")
}
var n = new r(t);
var o = n.reject;
o(e);
return n.promise
}, resolve: function resolve(e) {
var t = this;
if (!ce.TypeIsObject(t)) {
throw new TypeError("Bad promise constructor")
}
if (ce.IsPromise(e)) {
var n = e.constructor;
if (n === t) {
return e
}
}
var o = new r(t);
var i = o.resolve;
i(e);
return o.promise
}
});
b(T, {
"catch": function (e) {
return this.then(null, e)
}, then: function then(e, t) {
var n = this;
if (!ce.IsPromise(n)) {
throw new TypeError("not a promise")
}
var o = ce.SpeciesConstructor(n, E);
var i;
var b = arguments.length > 2 && arguments[2] === y;
if (b && o === E) {
i = y
} else {
i = new r(o)
}
var g = ce.IsCallable(e) ? e : a;
var d = ce.IsCallable(t) ? t : u;
var m = n._promise;
var O;
if (m.state === f) {
if (m.reactionLength === 0) {
m.fulfillReactionHandler0 = g;
m.rejectReactionHandler0 = d;
m.reactionCapability0 = i
} else {
var w = 3 * (m.reactionLength - 1);
m[w + l] = g;
m[w + p] = d;
m[w + v] = i
}
m.reactionLength += 1
} else if (m.state === s) {
O = m.result;
h(g, i, O)
} else if (m.state === c) {
O = m.result;
h(d, i, O)
} else {
throw new TypeError("unexpected Promise state")
}
return i.promise
}
});
y = new r(E);
I = T.then;
return E
}();
if (S.Promise) {
delete S.Promise.accept;
delete S.Promise.defer;
delete S.Promise.prototype.chain
}
if (typeof Fr === "function") {
b(S, {Promise: Fr});
var Dr = w(S.Promise, function (e) {
return e.resolve(42).then(function () {
}) instanceof e
});
var zr = !i(function () {
return S.Promise.reject(42).then(null, 5).then(null, W)
});
var qr = i(function () {
return S.Promise.call(3, W)
});
var Wr = function (e) {
var t = e.resolve(5);
t.constructor = {};
var r = e.resolve(t);
try {
r.then(null, W).then(null, W)
} catch (n) {
return true
}
return t === r
}(S.Promise);
var Gr = s && function () {
var e = 0;
var t = Object.defineProperty({}, "then", {
get: function () {
e += 1
}
});
Promise.resolve(t);
return e === 1
}();
var Hr = function BadResolverPromise(e) {
var t = new Promise(e);
e(3, function () {
});
this.then = t.then;
this.constructor = BadResolverPromise
};
Hr.prototype = Promise.prototype;
Hr.all = Promise.all;
var Vr = a(function () {
return !!Hr.all([1, 2])
});
if (!Dr || !zr || !qr || Wr || !Gr || Vr) {
Promise = Fr;
ne(S, "Promise", Fr)
}
if (Promise.all.length !== 1) {
var Br = Promise.all;
ne(Promise, "all", function all(e) {
return ce.Call(Br, this, arguments)
})
}
if (Promise.race.length !== 1) {
var Ur = Promise.race;
ne(Promise, "race", function race(e) {
return ce.Call(Ur, this, arguments)
})
}
if (Promise.resolve.length !== 1) {
var $r = Promise.resolve;
ne(Promise, "resolve", function resolve(e) {
return ce.Call($r, this, arguments)
})
}
if (Promise.reject.length !== 1) {
var Jr = Promise.reject;
ne(Promise, "reject", function reject(e) {
return ce.Call(Jr, this, arguments)
})
}
Mt(Promise, "all");
Mt(Promise, "race");
Mt(Promise, "resolve");
Mt(Promise, "reject");
Ce(Promise)
}
var Xr = function (e) {
var t = n(p(e, function (e, t) {
e[t] = true;
return e
}, {}));
return e.join(":") === t.join(":")
};
var Kr = Xr(["z", "a", "bb"]);
var Zr = Xr(["z", 1, "a", "3", 2]);
if (s) {
var Yr = function fastkey(e, t) {
if (!t && !Kr) {
return null
}
if (se(e)) {
return "^" + ce.ToString(e)
} else if (typeof e === "string") {
return "$" + e
} else if (typeof e === "number") {
if (!Zr) {
return "n" + e
}
return e
} else if (typeof e === "boolean") {
return "b" + e
}
return null
};
var Qr = function emptyObject() {
return Object.create ? Object.create(null) : {}
};
var en = function addIterableToMap(e, n, o) {
if (r(o) || re.string(o)) {
l(o, function (e) {
if (!ce.TypeIsObject(e)) {
throw new TypeError("Iterator value " + e + " is not an entry object")
}
n.set(e[0], e[1])
})
} else if (o instanceof e) {
t(e.prototype.forEach, o, function (e, t) {
n.set(t, e)
})
} else {
var i, a;
if (!se(o)) {
a = n.set;
if (!ce.IsCallable(a)) {
throw new TypeError("bad map")
}
i = ce.GetIterator(o)
}
if (typeof i !== "undefined") {
while (true) {
var u = ce.IteratorStep(i);
if (u === false) {
break
}
var f = u.value;
try {
if (!ce.TypeIsObject(f)) {
throw new TypeError("Iterator value " + f + " is not an entry object")
}
t(a, n, f[0], f[1])
} catch (s) {
ce.IteratorClose(i, true);
throw s
}
}
}
}
};
var tn = function addIterableToSet(e, n, o) {
if (r(o) || re.string(o)) {
l(o, function (e) {
n.add(e)
})
} else if (o instanceof e) {
t(e.prototype.forEach, o, function (e) {
n.add(e)
})
} else {
var i, a;
if (!se(o)) {
a = n.add;
if (!ce.IsCallable(a)) {
throw new TypeError("bad set")
}
i = ce.GetIterator(o)
}
if (typeof i !== "undefined") {
while (true) {
var u = ce.IteratorStep(i);
if (u === false) {
break
}
var f = u.value;
try {
t(a, n, f)
} catch (s) {
ce.IteratorClose(i, true);
throw s
}
}
}
}
};
var rn = {
Map: function () {
var e = {};
var r = function MapEntry(e, t) {
this.key = e;
this.value = t;
this.next = null;
this.prev = null
};
r.prototype.isRemoved = function isRemoved() {
return this.key === e
};
var n = function isMap(e) {
return !!e._es6map
};
var o = function requireMapSlot(e, t) {
if (!ce.TypeIsObject(e) || !n(e)) {
throw new TypeError("Method Map.prototype." + t + " called on incompatible receiver " + ce.ToString(e))
}
};
var i = function MapIterator(e, t) {
o(e, "[[MapIterator]]");
this.head = e._head;
this.i = this.head;
this.kind = t
};
i.prototype = {
isMapIterator: true, next: function next() {
if (!this.isMapIterator) {
throw new TypeError("Not a MapIterator")
}
var e = this.i;
var t = this.kind;
var r = this.head;
if (typeof this.i === "undefined") {
return Ke()
}
while (e.isRemoved() && e !== r) {
e = e.prev
}
var n;
while (e.next !== r) {
e = e.next;
if (!e.isRemoved()) {
if (t === "key") {
n = e.key
} else if (t === "value") {
n = e.value
} else {
n = [e.key, e.value]
}
this.i = e;
return Ke(n)
}
}
this.i = void 0;
return Ke()
}
};
Me(i.prototype);
var a;
var u = function Map() {
if (!(this instanceof Map)) {
throw new TypeError('Constructor Map requires "new"')
}
if (this && this._es6map) {
throw new TypeError("Bad construction")
}
var e = Ae(this, Map, a, {_es6map: true, _head: null, _map: G ? new G : null, _size: 0, _storage: Qr()});
var t = new r(null, null);
t.next = t.prev = t;
e._head = t;
if (arguments.length > 0) {
en(Map, e, arguments[0])
}
return e
};
a = u.prototype;
m.getter(a, "size", function () {
if (typeof this._size === "undefined") {
throw new TypeError("size method called on incompatible Map")
}
return this._size
});
b(a, {
get: function get(e) {
o(this, "get");
var t;
var r = Yr(e, true);
if (r !== null) {
t = this._storage[r];
if (t) {
return t.value
} else {
return
}
}
if (this._map) {
t = V.call(this._map, e);
if (t) {
return t.value
} else {
return
}
}
var n = this._head;
var i = n;
while ((i = i.next) !== n) {
if (ce.SameValueZero(i.key, e)) {
return i.value
}
}
}, has: function has(e) {
o(this, "has");
var t = Yr(e, true);
if (t !== null) {
return typeof this._storage[t] !== "undefined"
}
if (this._map) {
return B.call(this._map, e)
}
var r = this._head;
var n = r;
while ((n = n.next) !== r) {
if (ce.SameValueZero(n.key, e)) {
return true
}
}
return false
}, set: function set(e, t) {
o(this, "set");
var n = this._head;
var i = n;
var a;
var u = Yr(e, true);
if (u !== null) {
if (typeof this._storage[u] !== "undefined") {
this._storage[u].value = t;
return this
} else {
a = this._storage[u] = new r(e, t);
i = n.prev
}
} else if (this._map) {
if (B.call(this._map, e)) {
V.call(this._map, e).value = t
} else {
a = new r(e, t);
U.call(this._map, e, a);
i = n.prev
}
}
while ((i = i.next) !== n) {
if (ce.SameValueZero(i.key, e)) {
i.value = t;
return this
}
}
a = a || new r(e, t);
if (ce.SameValue(-0, e)) {
a.key = +0
}
a.next = this._head;
a.prev = this._head.prev;
a.prev.next = a;
a.next.prev = a;
this._size += 1;
return this
}, "delete": function (t) {
o(this, "delete");
var r = this._head;
var n = r;
var i = Yr(t, true);
if (i !== null) {
if (typeof this._storage[i] === "undefined") {
return false
}
n = this._storage[i].prev;
delete this._storage[i]
} else if (this._map) {
if (!B.call(this._map, t)) {
return false
}
n = V.call(this._map, t).prev;
H.call(this._map, t)
}
while ((n = n.next) !== r) {
if (ce.SameValueZero(n.key, t)) {
n.key = e;
n.value = e;
n.prev.next = n.next;
n.next.prev = n.prev;
this._size -= 1;
return true
}
}
return false
}, clear: function clear() {
o(this, "clear");
this._map = G ? new G : null;
this._size = 0;
this._storage = Qr();
var t = this._head;
var r = t;
var n = r.next;
while ((r = n) !== t) {
r.key = e;
r.value = e;
n = r.next;
r.next = r.prev = t
}
t.next = t.prev = t
}, keys: function keys() {
o(this, "keys");
return new i(this, "key")
}, values: function values() {
o(this, "values");
return new i(this, "value")
}, entries: function entries() {
o(this, "entries");
return new i(this, "key+value")
}, forEach: function forEach(e) {
o(this, "forEach");
var r = arguments.length > 1 ? arguments[1] : null;
var n = this.entries();
for (var i = n.next(); !i.done; i = n.next()) {
if (r) {
t(e, r, i.value[1], i.value[0], this)
} else {
e(i.value[1], i.value[0], this)
}
}
}
});
Me(a, a.entries);
return u
}(), Set: function () {
var e = function isSet(e) {
return e._es6set && typeof e._storage !== "undefined"
};
var r = function requireSetSlot(t, r) {
if (!ce.TypeIsObject(t) || !e(t)) {
throw new TypeError("Set.prototype." + r + " called on incompatible receiver " + ce.ToString(t))
}
};
var o;
var i = function Set() {
if (!(this instanceof Set)) {
throw new TypeError('Constructor Set requires "new"')
}
if (this && this._es6set) {
throw new TypeError("Bad construction")
}
var e = Ae(this, Set, o, {_es6set: true, "[[SetData]]": null, _storage: Qr()});
if (!e._es6set) {
throw new TypeError("bad set")
}
if (arguments.length > 0) {
tn(Set, e, arguments[0])
}
return e
};
o = i.prototype;
var a = function (e) {
var t = e;
if (t === "^null") {
return null
} else if (t === "^undefined") {
return void 0
} else {
var r = t.charAt(0);
if (r === "$") {
return C(t, 1)
} else if (r === "n") {
return +C(t, 1)
} else if (r === "b") {
return t === "btrue"
}
}
return +t
};
var u = function ensureMap(e) {
if (!e["[[SetData]]"]) {
var t = new rn.Map;
e["[[SetData]]"] = t;
l(n(e._storage), function (e) {
var r = a(e);
t.set(r, r)
});
e["[[SetData]]"] = t
}
e._storage = null
};
m.getter(i.prototype, "size", function () {
r(this, "size");
if (this._storage) {
return n(this._storage).length
}
u(this);
return this["[[SetData]]"].size
});
b(i.prototype, {
has: function has(e) {
r(this, "has");
var t;
if (this._storage && (t = Yr(e)) !== null) {
return !!this._storage[t]
}
u(this);
return this["[[SetData]]"].has(e)
}, add: function add(e) {
r(this, "add");
var t;
if (this._storage && (t = Yr(e)) !== null) {
this._storage[t] = true;
return this
}
u(this);
this["[[SetData]]"].set(e, e);
return this
}, "delete": function (e) {
r(this, "delete");
var t;
if (this._storage && (t = Yr(e)) !== null) {
var n = z(this._storage, t);
return delete this._storage[t] && n
}
u(this);
return this["[[SetData]]"]["delete"](e)
}, clear: function clear() {
r(this, "clear");
if (this._storage) {
this._storage = Qr()
}
if (this["[[SetData]]"]) {
this["[[SetData]]"].clear()
}
}, values: function values() {
r(this, "values");
u(this);
return new f(this["[[SetData]]"].values())
}, entries: function entries() {
r(this, "entries");
u(this);
return new f(this["[[SetData]]"].entries())
}, forEach: function forEach(e) {
r(this, "forEach");
var n = arguments.length > 1 ? arguments[1] : null;
var o = this;
u(o);
this["[[SetData]]"].forEach(function (r, i) {
if (n) {
t(e, n, i, i, o)
} else {
e(i, i, o)
}
})
}
});
h(i.prototype, "keys", i.prototype.values, true);
Me(i.prototype, i.prototype.values);
var f = function SetIterator(e) {
this.it = e
};
f.prototype = {
isSetIterator: true, next: function next() {
if (!this.isSetIterator) {
throw new TypeError("Not a SetIterator")
}
return this.it.next()
}
};
Me(f.prototype);
return i
}()
};
var nn = S.Set && !Set.prototype["delete"] && Set.prototype.remove && Set.prototype.items && Set.prototype.map && Array.isArray((new Set).keys);
if (nn) {
S.Set = rn.Set
}
if (S.Map || S.Set) {
var on = a(function () {
return new Map([[1, 2]]).get(1) === 2
});
if (!on) {
S.Map = function Map() {
if (!(this instanceof Map)) {
throw new TypeError('Constructor Map requires "new"')
}
var e = new G;
if (arguments.length > 0) {
en(Map, e, arguments[0])
}
delete e.constructor;
Object.setPrototypeOf(e, S.Map.prototype);
return e
};
S.Map.prototype = O(G.prototype);
h(S.Map.prototype, "constructor", S.Map, true);
m.preserveToString(S.Map, G)
}
var an = new Map;
var un = function () {
var e = new Map([[1, 0], [2, 0], [3, 0], [4, 0]]);
e.set(-0, e);
return e.get(0) === e && e.get(-0) === e && e.has(0) && e.has(-0)
}();
var fn = an.set(1, 2) === an;
if (!un || !fn) {
ne(Map.prototype, "set", function set(e, r) {
t(U, this, e === 0 ? 0 : e, r);
return this
})
}
if (!un) {
b(Map.prototype, {
get: function get(e) {
return t(V, this, e === 0 ? 0 : e)
}, has: function has(e) {
return t(B, this, e === 0 ? 0 : e)
}
}, true);
m.preserveToString(Map.prototype.get, V);
m.preserveToString(Map.prototype.has, B)
}
var sn = new Set;
var cn = Set.prototype["delete"] && Set.prototype.add && Set.prototype.has && function (e) {
e["delete"](0);
e.add(-0);
return !e.has(0)
}(sn);
var ln = sn.add(1) === sn;
if (!cn || !ln) {
var pn = Set.prototype.add;
Set.prototype.add = function add(e) {
t(pn, this, e === 0 ? 0 : e);
return this
};
m.preserveToString(Set.prototype.add, pn)
}
if (!cn) {
var vn = Set.prototype.has;
Set.prototype.has = function has(e) {
return t(vn, this, e === 0 ? 0 : e)
};
m.preserveToString(Set.prototype.has, vn);
var yn = Set.prototype["delete"];
Set.prototype["delete"] = function SetDelete(e) {
return t(yn, this, e === 0 ? 0 : e)
};
m.preserveToString(Set.prototype["delete"], yn)
}
var hn = w(S.Map, function (e) {
var t = new e([]);
t.set(42, 42);
return t instanceof e
});
var bn = Object.setPrototypeOf && !hn;
var gn = function () {
try {
return !(S.Map() instanceof S.Map)
} catch (e) {
return e instanceof TypeError
}
}();
if (S.Map.length !== 0 || bn || !gn) {
S.Map = function Map() {
if (!(this instanceof Map)) {
throw new TypeError('Constructor Map requires "new"')
}
var e = new G;
if (arguments.length > 0) {
en(Map, e, arguments[0])
}
delete e.constructor;
Object.setPrototypeOf(e, Map.prototype);
return e
};
S.Map.prototype = G.prototype;
h(S.Map.prototype, "constructor", S.Map, true);
m.preserveToString(S.Map, G)
}
var dn = w(S.Set, function (e) {
var t = new e([]);
t.add(42, 42);
return t instanceof e
});
var mn = Object.setPrototypeOf && !dn;
var On = function () {
try {
return !(S.Set() instanceof S.Set)
} catch (e) {
return e instanceof TypeError
}
}();
if (S.Set.length !== 0 || mn || !On) {
var wn = S.Set;
S.Set = function Set() {
if (!(this instanceof Set)) {
throw new TypeError('Constructor Set requires "new"')
}
var e = new wn;
if (arguments.length > 0) {
tn(Set, e, arguments[0])
}
delete e.constructor;
Object.setPrototypeOf(e, Set.prototype);
return e
};
S.Set.prototype = wn.prototype;
h(S.Set.prototype, "constructor", S.Set, true);
m.preserveToString(S.Set, wn)
}
var jn = new S.Map;
var Sn = !a(function () {
return jn.keys().next().done
});
if (typeof S.Map.prototype.clear !== "function" || (new S.Set).size !== 0 || jn.size !== 0 || typeof S.Map.prototype.keys !== "function" || typeof S.Set.prototype.keys !== "function" || typeof S.Map.prototype.forEach !== "function" || typeof S.Set.prototype.forEach !== "function" || u(S.Map) || u(S.Set) || typeof jn.keys().next !== "function" || Sn || !hn) {
b(S, {Map: rn.Map, Set: rn.Set}, true)
}
if (S.Set.prototype.keys !== S.Set.prototype.values) {
h(S.Set.prototype, "keys", S.Set.prototype.values, true)
}
Me(Object.getPrototypeOf((new S.Map).keys()));
Me(Object.getPrototypeOf((new S.Set).keys()));
if (c && S.Set.prototype.has.name !== "has") {
var Tn = S.Set.prototype.has;
ne(S.Set.prototype, "has", function has(e) {
return t(Tn, this, e)
})
}
}
b(S, rn);
Ce(S.Map);
Ce(S.Set)
}
var In = function throwUnlessTargetIsObject(e) {
if (!ce.TypeIsObject(e)) {
throw new TypeError("target must be an object")
}
};
var En = {
apply: function apply() {
return ce.Call(ce.Call, null, arguments)
}, construct: function construct(e, t) {
if (!ce.IsConstructor(e)) {
throw new TypeError("First argument must be a constructor.")
}
var r = arguments.length > 2 ? arguments[2] : e;
if (!ce.IsConstructor(r)) {
throw new TypeError("new.target must be a constructor.")
}
return ce.Construct(e, t, r, "internal")
}, deleteProperty: function deleteProperty(e, t) {
In(e);
if (s) {
var r = Object.getOwnPropertyDescriptor(e, t);
if (r && !r.configurable) {
return false
}
}
return delete e[t]
}, has: function has(e, t) {
In(e);
return t in e
}
};
if (Object.getOwnPropertyNames) {
Object.assign(En, {
ownKeys: function ownKeys(e) {
In(e);
var t = Object.getOwnPropertyNames(e);
if (ce.IsCallable(Object.getOwnPropertySymbols)) {
x(t, Object.getOwnPropertySymbols(e))
}
return t
}
})
}
var Pn = function ConvertExceptionToBoolean(e) {
return !i(e)
};
if (Object.preventExtensions) {
Object.assign(En, {
isExtensible: function isExtensible(e) {
In(e);
return Object.isExtensible(e)
}, preventExtensions: function preventExtensions(e) {
In(e);
return Pn(function () {
return Object.preventExtensions(e)
})
}
})
}
if (s) {
var Cn = function get(e, t, r) {
var n = Object.getOwnPropertyDescriptor(e, t);
if (!n) {
var o = Object.getPrototypeOf(e);
if (o === null) {
return void 0
}
return Cn(o, t, r)
}
if ("value" in n) {
return n.value
}
if (n.get) {
return ce.Call(n.get, r)
}
return void 0
};
var Mn = function set(e, r, n, o) {
var i = Object.getOwnPropertyDescriptor(e, r);
if (!i) {
var a = Object.getPrototypeOf(e);
if (a !== null) {
return Mn(a, r, n, o)
}
i = {value: void 0, writable: true, enumerable: true, configurable: true}
}
if ("value" in i) {
if (!i.writable) {
return false
}
if (!ce.TypeIsObject(o)) {
return false
}
var u = Object.getOwnPropertyDescriptor(o, r);
if (u) {
return ae.defineProperty(o, r, {value: n})
} else {
return ae.defineProperty(o, r, {value: n, writable: true, enumerable: true, configurable: true})
}
}
if (i.set) {
t(i.set, o, n);
return true
}
return false
};
Object.assign(En, {
defineProperty: function defineProperty(e, t, r) {
In(e);
return Pn(function () {
return Object.defineProperty(e, t, r)
})
}, getOwnPropertyDescriptor: function getOwnPropertyDescriptor(e, t) {
In(e);
return Object.getOwnPropertyDescriptor(e, t)
}, get: function get(e, t) {
In(e);
var r = arguments.length > 2 ? arguments[2] : e;
return Cn(e, t, r)
}, set: function set(e, t, r) {
In(e);
var n = arguments.length > 3 ? arguments[3] : e;
return Mn(e, t, r, n)
}
})
}
if (Object.getPrototypeOf) {
var xn = Object.getPrototypeOf;
En.getPrototypeOf = function getPrototypeOf(e) {
In(e);
return xn(e)
}
}
if (Object.setPrototypeOf && En.getPrototypeOf) {
var Nn = function (e, t) {
var r = t;
while (r) {
if (e === r) {
return true
}
r = En.getPrototypeOf(r)
}
return false
};
Object.assign(En, {
setPrototypeOf: function setPrototypeOf(e, t) {
In(e);
if (t !== null && !ce.TypeIsObject(t)) {
throw new TypeError("proto must be an object or null")
}
if (t === ae.getPrototypeOf(e)) {
return true
}
if (ae.isExtensible && !ae.isExtensible(e)) {
return false
}
if (Nn(e, t)) {
return false
}
Object.setPrototypeOf(e, t);
return true
}
})
}
var An = function (e, t) {
if (!ce.IsCallable(S.Reflect[e])) {
h(S.Reflect, e, t)
} else {
var r = a(function () {
S.Reflect[e](1);
S.Reflect[e](NaN);
S.Reflect[e](true);
return true
});
if (r) {
ne(S.Reflect, e, t)
}
}
};
Object.keys(En).forEach(function (e) {
An(e, En[e])
});
var Rn = S.Reflect.getPrototypeOf;
if (c && Rn && Rn.name !== "getPrototypeOf") {
ne(S.Reflect, "getPrototypeOf", function getPrototypeOf(e) {
return t(Rn, S.Reflect, e)
})
}
if (S.Reflect.setPrototypeOf) {
if (a(function () {
S.Reflect.setPrototypeOf(1, {});
return true
})) {
ne(S.Reflect, "setPrototypeOf", En.setPrototypeOf)
}
}
if (S.Reflect.defineProperty) {
if (!a(function () {
var e = !S.Reflect.defineProperty(1, "test", {value: 1});
var t = typeof Object.preventExtensions !== "function" || !S.Reflect.defineProperty(Object.preventExtensions({}), "test", {});
return e && t
})) {
ne(S.Reflect, "defineProperty", En.defineProperty)
}
}
if (S.Reflect.construct) {
if (!a(function () {
var e = function F() {
};
return S.Reflect.construct(function () {
}, [], e) instanceof e
})) {
ne(S.Reflect, "construct", En.construct)
}
}
if (String(new Date(NaN)) !== "Invalid Date") {
var _n = Date.prototype.toString;
var kn = function toString() {
var e = +this;
if (e !== e) {
return "Invalid Date"
}
return ce.Call(_n, this)
};
ne(Date.prototype, "toString", kn)
}
var Ln = {
anchor: function anchor(e) {
return ce.CreateHTML(this, "a", "name", e)
}, big: function big() {
return ce.CreateHTML(this, "big", "", "")
}, blink: function blink() {
return ce.CreateHTML(this, "blink", "", "")
}, bold: function bold() {
return ce.CreateHTML(this, "b", "", "")
}, fixed: function fixed() {
return ce.CreateHTML(this, "tt", "", "")
}, fontcolor: function fontcolor(e) {
return ce.CreateHTML(this, "font", "color", e)
}, fontsize: function fontsize(e) {
return ce.CreateHTML(this, "font", "size", e)
}, italics: function italics() {
return ce.CreateHTML(this, "i", "", "")
}, link: function link(e) {
return ce.CreateHTML(this, "a", "href", e)
}, small: function small() {
return ce.CreateHTML(this, "small", "", "")
}, strike: function strike() {
return ce.CreateHTML(this, "strike", "", "")
}, sub: function sub() {
return ce.CreateHTML(this, "sub", "", "")
}, sup: function sub() {
return ce.CreateHTML(this, "sup", "", "")
}
};
l(Object.keys(Ln), function (e) {
var r = String.prototype[e];
var n = false;
if (ce.IsCallable(r)) {
var o = t(r, "", ' " ');
var i = P([], o.match(/"/g)).length;
n = o !== o.toLowerCase() || i > 2
} else {
n = true
}
if (n) {
ne(String.prototype, e, Ln[e])
}
});
var Fn = function () {
if (!oe) {
return false
}
var e = typeof JSON === "object" && typeof JSON.stringify === "function" ? JSON.stringify : null;
if (!e) {
return false
}
if (typeof e($()) !== "undefined") {
return true
}
if (e([$()]) !== "[null]") {
return true
}
var t = {a: $()};
t[$()] = true;
if (e(t) !== "{}") {
return true
}
return false
}();
var Dn = a(function () {
if (!oe) {
return true
}
return JSON.stringify(Object($())) === "{}" && JSON.stringify([Object($())]) === "[{}]"
});
if (Fn || !Dn) {
var zn = JSON.stringify;
ne(JSON, "stringify", function stringify(e) {
if (typeof e === "symbol") {
return
}
var n;
if (arguments.length > 1) {
n = arguments[1]
}
var o = [e];
if (!r(n)) {
var i = ce.IsCallable(n) ? n : null;
var a = function (e, r) {
var n = i ? t(i, this, e, r) : r;
if (typeof n !== "symbol") {
if (re.symbol(n)) {
return Nt({})(n)
} else {
return n
}
}
};
o.push(a)
} else {
o.push(n)
}
if (arguments.length > 2) {
o.push(arguments[2])
}
return zn.apply(this, o)
})
}
return S
});
//# sourceMappingURL=es6-shim.map
/*! jQuery v1.8.3 jquery.com | jquery.org/license */
(function (e, t) {
function _(e) {
var t = M[e] = {};
return v.each(e.split(y), function (e, n) {
t[n] = !0
}), t
}
function H(e, n, r) {
if (r === t && e.nodeType === 1) {
var i = "data-" + n.replace(P, "-$1").toLowerCase();
r = e.getAttribute(i);
if (typeof r == "string") {
try {
r = r === "true" ? !0 : r === "false" ? !1 : r === "null" ? null : +r + "" === r ? +r : D.test(r) ? v.parseJSON(r) : r
} catch (s) {
}
v.data(e, n, r)
} else r = t
}
return r
}
function B(e) {
var t;
for (t in e) {
if (t === "data" && v.isEmptyObject(e[t])) continue;
if (t !== "toJSON") return !1
}
return !0
}
function et() {
return !1
}
function tt() {
return !0
}
function ut(e) {
return !e || !e.parentNode || e.parentNode.nodeType === 11
}
function at(e, t) {
do e = e[t]; while (e && e.nodeType !== 1);
return e
}
function ft(e, t, n) {
t = t || 0;
if (v.isFunction(t)) return v.grep(e, function (e, r) {
var i = !!t.call(e, r, e);
return i === n
});
if (t.nodeType) return v.grep(e, function (e, r) {
return e === t === n
});
if (typeof t == "string") {
var r = v.grep(e, function (e) {
return e.nodeType === 1
});
if (it.test(t)) return v.filter(t, r, !n);
t = v.filter(t, r)
}
return v.grep(e, function (e, r) {
return v.inArray(e, t) >= 0 === n
})
}
function lt(e) {
var t = ct.split("|"), n = e.createDocumentFragment();
if (n.createElement) while (t.length) n.createElement(t.pop());
return n
}
function Lt(e, t) {
return e.getElementsByTagName(t)[0] || e.appendChild(e.ownerDocument.createElement(t))
}
function At(e, t) {
if (t.nodeType !== 1 || !v.hasData(e)) return;
var n, r, i, s = v._data(e), o = v._data(t, s), u = s.events;
if (u) {
delete o.handle, o.events = {};
for (n in u) for (r = 0, i = u[n].length; r < i; r++) v.event.add(t, n, u[n][r])
}
o.data && (o.data = v.extend({}, o.data))
}
function Ot(e, t) {
var n;
if (t.nodeType !== 1) return;
t.clearAttributes && t.clearAttributes(), t.mergeAttributes && t.mergeAttributes(e), n = t.nodeName.toLowerCase(), n === "object" ? (t.parentNode && (t.outerHTML = e.outerHTML), v.support.html5Clone && e.innerHTML && !v.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : n === "input" && Et.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : n === "option" ? t.selected = e.defaultSelected : n === "input" || n === "textarea" ? t.defaultValue = e.defaultValue : n === "script" && t.text !== e.text && (t.text = e.text), t.removeAttribute(v.expando)
}
function Mt(e) {
return typeof e.getElementsByTagName != "undefined" ? e.getElementsByTagName("*") : typeof e.querySelectorAll != "undefined" ? e.querySelectorAll("*") : []
}
function _t(e) {
Et.test(e.type) && (e.defaultChecked = e.checked)
}
function Qt(e, t) {
if (t in e) return t;
var n = t.charAt(0).toUpperCase() + t.slice(1), r = t, i = Jt.length;
while (i--) {
t = Jt[i] + n;
if (t in e) return t
}
return r
}
function Gt(e, t) {
return e = t || e, v.css(e, "display") === "none" || !v.contains(e.ownerDocument, e)
}
function Yt(e, t) {
var n, r, i = [], s = 0, o = e.length;
for (; s < o; s++) {
n = e[s];
if (!n.style) continue;
i[s] = v._data(n, "olddisplay"), t ? (!i[s] && n.style.display === "none" && (n.style.display = ""), n.style.display === "" && Gt(n) && (i[s] = v._data(n, "olddisplay", nn(n.nodeName)))) : (r = Dt(n, "display"), !i[s] && r !== "none" && v._data(n, "olddisplay", r))
}
for (s = 0; s < o; s++) {
n = e[s];
if (!n.style) continue;
if (!t || n.style.display === "none" || n.style.display === "") n.style.display = t ? i[s] || "" : "none"
}
return e
}
function Zt(e, t, n) {
var r = Rt.exec(t);
return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t
}
function en(e, t, n, r) {
var i = n === (r ? "border" : "content") ? 4 : t === "width" ? 1 : 0, s = 0;
for (; i < 4; i += 2) n === "margin" && (s += v.css(e, n + $t[i], !0)), r ? (n === "content" && (s -= parseFloat(Dt(e, "padding" + $t[i])) || 0), n !== "margin" && (s -= parseFloat(Dt(e, "border" + $t[i] + "Width")) || 0)) : (s += parseFloat(Dt(e, "padding" + $t[i])) || 0, n !== "padding" && (s += parseFloat(Dt(e, "border" + $t[i] + "Width")) || 0));
return s
}
function tn(e, t, n) {
var r = t === "width" ? e.offsetWidth : e.offsetHeight, i = !0,
s = v.support.boxSizing && v.css(e, "boxSizing") === "border-box";
if (r <= 0 || r == null) {
r = Dt(e, t);
if (r < 0 || r == null) r = e.style[t];
if (Ut.test(r)) return r;
i = s && (v.support.boxSizingReliable || r === e.style[t]), r = parseFloat(r) || 0
}
return r + en(e, t, n || (s ? "border" : "content"), i) + "px"
}
function nn(e) {
if (Wt[e]) return Wt[e];
var t = v("<" + e + ">").appendTo(i.body), n = t.css("display");
t.remove();
if (n === "none" || n === "") {
Pt = i.body.appendChild(Pt || v.extend(i.createElement("iframe"), {frameBorder: 0, width: 0, height: 0}));
if (!Ht || !Pt.createElement) Ht = (Pt.contentWindow || Pt.contentDocument).document, Ht.write("<!doctype html><html><body>"), Ht.close();
t = Ht.body.appendChild(Ht.createElement(e)), n = Dt(t, "display"), i.body.removeChild(Pt)
}
return Wt[e] = n, n
}
function fn(e, t, n, r) {
var i;
if (v.isArray(t)) v.each(t, function (t, i) {
n || sn.test(e) ? r(e, i) : fn(e + "[" + (typeof i == "object" ? t : "") + "]", i, n, r)
}); else if (!n && v.type(t) === "object") for (i in t) fn(e + "[" + i + "]", t[i], n, r); else r(e, t)
}
function Cn(e) {
return function (t, n) {
typeof t != "string" && (n = t, t = "*");
var r, i, s, o = t.toLowerCase().split(y), u = 0, a = o.length;
if (v.isFunction(n)) for (; u < a; u++) r = o[u], s = /^\+/.test(r), s && (r = r.substr(1) || "*"), i = e[r] = e[r] || [], i[s ? "unshift" : "push"](n)
}
}
function kn(e, n, r, i, s, o) {
s = s || n.dataTypes[0], o = o || {}, o[s] = !0;
var u, a = e[s], f = 0, l = a ? a.length : 0, c = e === Sn;
for (; f < l && (c || !u); f++) u = a[f](n, r, i), typeof u == "string" && (!c || o[u] ? u = t : (n.dataTypes.unshift(u), u = kn(e, n, r, i, u, o)));
return (c || !u) && !o["*"] && (u = kn(e, n, r, i, "*", o)), u
}
function Ln(e, n) {
var r, i, s = v.ajaxSettings.flatOptions || {};
for (r in n) n[r] !== t && ((s[r] ? e : i || (i = {}))[r] = n[r]);
i && v.extend(!0, e, i)
}
function An(e, n, r) {
var i, s, o, u, a = e.contents, f = e.dataTypes, l = e.responseFields;
for (s in l) s in r && (n[l[s]] = r[s]);
while (f[0] === "*") f.shift(), i === t && (i = e.mimeType || n.getResponseHeader("content-type"));
if (i) for (s in a) if (a[s] && a[s].test(i)) {
f.unshift(s);
break
}
if (f[0] in r) o = f[0]; else {
for (s in r) {
if (!f[0] || e.converters[s + " " + f[0]]) {
o = s;
break
}
u || (u = s)
}
o = o || u
}
if (o) return o !== f[0] && f.unshift(o), r[o]
}
function On(e, t) {
var n, r, i, s, o = e.dataTypes.slice(), u = o[0], a = {}, f = 0;
e.dataFilter && (t = e.dataFilter(t, e.dataType));
if (o[1]) for (n in e.converters) a[n.toLowerCase()] = e.converters[n];
for (; i = o[++f];) if (i !== "*") {
if (u !== "*" && u !== i) {
n = a[u + " " + i] || a["* " + i];
if (!n) for (r in a) {
s = r.split(" ");
if (s[1] === i) {
n = a[u + " " + s[0]] || a["* " + s[0]];
if (n) {
n === !0 ? n = a[r] : a[r] !== !0 && (i = s[0], o.splice(f--, 0, i));
break
}
}
}
if (n !== !0) if (n && e["throws"]) t = n(t); else try {
t = n(t)
} catch (l) {
return {state: "parsererror", error: n ? l : "No conversion from " + u + " to " + i}
}
}
u = i
}
return {state: "success", data: t}
}
function Fn() {
try {
return new e.XMLHttpRequest
} catch (t) {
}
}
function In() {
try {
return new e.ActiveXObject("Microsoft.XMLHTTP")
} catch (t) {
}
}
function $n() {
return setTimeout(function () {
qn = t
}, 0), qn = v.now()
}
function Jn(e, t) {
v.each(t, function (t, n) {
var r = (Vn[t] || []).concat(Vn["*"]), i = 0, s = r.length;
for (; i < s; i++) if (r[i].call(e, t, n)) return
})
}
function Kn(e, t, n) {
var r, i = 0, s = 0, o = Xn.length, u = v.Deferred().always(function () {
delete a.elem
}), a = function () {
var t = qn || $n(), n = Math.max(0, f.startTime + f.duration - t), r = n / f.duration || 0, i = 1 - r, s = 0,
o = f.tweens.length;
for (; s < o; s++) f.tweens[s].run(i);
return u.notifyWith(e, [f, i, n]), i < 1 && o ? n : (u.resolveWith(e, [f]), !1)
}, f = u.promise({
elem: e,
props: v.extend({}, t),
opts: v.extend(!0, {specialEasing: {}}, n),
originalProperties: t,
originalOptions: n,
startTime: qn || $n(),
duration: n.duration,
tweens: [],
createTween: function (t, n, r) {
var i = v.Tween(e, f.opts, t, n, f.opts.specialEasing[t] || f.opts.easing);
return f.tweens.push(i), i
},
stop: function (t) {
var n = 0, r = t ? f.tweens.length : 0;
for (; n < r; n++) f.tweens[n].run(1);
return t ? u.resolveWith(e, [f, t]) : u.rejectWith(e, [f, t]), this
}
}), l = f.props;
Qn(l, f.opts.specialEasing);
for (; i < o; i++) {
r = Xn[i].call(f, e, l, f.opts);
if (r) return r
}
return Jn(f, l), v.isFunction(f.opts.start) && f.opts.start.call(e, f), v.fx.timer(v.extend(a, {
anim: f,
queue: f.opts.queue,
elem: e
})), f.progress(f.opts.progress).done(f.opts.done, f.opts.complete).fail(f.opts.fail).always(f.opts.always)
}
function Qn(e, t) {
var n, r, i, s, o;
for (n in e) {
r = v.camelCase(n), i = t[r], s = e[n], v.isArray(s) && (i = s[1], s = e[n] = s[0]), n !== r && (e[r] = s, delete e[n]), o = v.cssHooks[r];
if (o && "expand" in o) {
s = o.expand(s), delete e[r];
for (n in s) n in e || (e[n] = s[n], t[n] = i)
} else t[r] = i
}
}
function Gn(e, t, n) {
var r, i, s, o, u, a, f, l, c, h = this, p = e.style, d = {}, m = [], g = e.nodeType && Gt(e);
n.queue || (l = v._queueHooks(e, "fx"), l.unqueued == null && (l.unqueued = 0, c = l.empty.fire, l.empty.fire = function () {
l.unqueued || c()
}), l.unqueued++, h.always(function () {
h.always(function () {
l.unqueued--, v.queue(e, "fx").length || l.empty.fire()
})
})), e.nodeType === 1 && ("height" in t || "width" in t) && (n.overflow = [p.overflow, p.overflowX, p.overflowY], v.css(e, "display") === "inline" && v.css(e, "float") === "none" && (!v.support.inlineBlockNeedsLayout || nn(e.nodeName) === "inline" ? p.display = "inline-block" : p.zoom = 1)), n.overflow && (p.overflow = "hidden", v.support.shrinkWrapBlocks || h.done(function () {
p.overflow = n.overflow[0], p.overflowX = n.overflow[1], p.overflowY = n.overflow[2]
}));
for (r in t) {
s = t[r];
if (Un.exec(s)) {
delete t[r], a = a || s === "toggle";
if (s === (g ? "hide" : "show")) continue;
m.push(r)
}
}
o = m.length;
if (o) {
u = v._data(e, "fxshow") || v._data(e, "fxshow", {}), "hidden" in u && (g = u.hidden), a && (u.hidden = !g), g ? v(e).show() : h.done(function () {
v(e).hide()
}), h.done(function () {
var t;
v.removeData(e, "fxshow", !0);
for (t in d) v.style(e, t, d[t])
});
for (r = 0; r < o; r++) i = m[r], f = h.createTween(i, g ? u[i] : 0), d[i] = u[i] || v.style(e, i), i in u || (u[i] = f.start, g && (f.end = f.start, f.start = i === "width" || i === "height" ? 1 : 0))
}
}
function Yn(e, t, n, r, i) {
return new Yn.prototype.init(e, t, n, r, i)
}
function Zn(e, t) {
var n, r = {height: e}, i = 0;
t = t ? 1 : 0;
for (; i < 4; i += 2 - t) n = $t[i], r["margin" + n] = r["padding" + n] = e;
return t && (r.opacity = r.width = e), r
}
function tr(e) {
return v.isWindow(e) ? e : e.nodeType === 9 ? e.defaultView || e.parentWindow : !1
}
var n, r, i = e.document, s = e.location, o = e.navigator, u = e.jQuery, a = e.$, f = Array.prototype.push,
l = Array.prototype.slice, c = Array.prototype.indexOf, h = Object.prototype.toString,
p = Object.prototype.hasOwnProperty, d = String.prototype.trim, v = function (e, t) {
return new v.fn.init(e, t, n)
}, m = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, g = /\S/, y = /\s+/, b = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
w = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, E = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, S = /^[\],:{}\s]*$/,
x = /(?:^|:|,)(?:\s*\[)+/g, T = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
N = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, C = /^-ms-/, k = /-([\da-z])/gi,
L = function (e, t) {
return (t + "").toUpperCase()
}, A = function () {
i.addEventListener ? (i.removeEventListener("DOMContentLoaded", A, !1), v.ready()) : i.readyState === "complete" && (i.detachEvent("onreadystatechange", A), v.ready())
}, O = {};
v.fn = v.prototype = {
constructor: v, init: function (e, n, r) {
var s, o, u, a;
if (!e) return this;
if (e.nodeType) return this.context = this[0] = e, this.length = 1, this;
if (typeof e == "string") {
e.charAt(0) === "<" && e.charAt(e.length - 1) === ">" && e.length >= 3 ? s = [null, e, null] : s = w.exec(e);
if (s && (s[1] || !n)) {
if (s[1]) return n = n instanceof v ? n[0] : n, a = n && n.nodeType ? n.ownerDocument || n : i, e = v.parseHTML(s[1], a, !0), E.test(s[1]) && v.isPlainObject(n) && this.attr.call(e, n, !0), v.merge(this, e);
o = i.getElementById(s[2]);
if (o && o.parentNode) {
if (o.id !== s[2]) return r.find(e);
this.length = 1, this[0] = o
}
return this.context = i, this.selector = e, this
}
return !n || n.jquery ? (n || r).find(e) : this.constructor(n).find(e)
}
return v.isFunction(e) ? r.ready(e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), v.makeArray(e, this))
}, selector: "", jquery: "1.8.3", length: 0, size: function () {
return this.length
}, toArray: function () {
return l.call(this)
}, get: function (e) {
return e == null ? this.toArray() : e < 0 ? this[this.length + e] : this[e]
}, pushStack: function (e, t, n) {
var r = v.merge(this.constructor(), e);
return r.prevObject = this, r.context = this.context, t === "find" ? r.selector = this.selector + (this.selector ? " " : "") + n : t && (r.selector = this.selector + "." + t + "(" + n + ")"), r
}, each: function (e, t) {
return v.each(this, e, t)
}, ready: function (e) {
return v.ready.promise().done(e), this
}, eq: function (e) {
return e = +e, e === -1 ? this.slice(e) : this.slice(e, e + 1)
}, first: function () {
return this.eq(0)
}, last: function () {
return this.eq(-1)
}, slice: function () {
return this.pushStack(l.apply(this, arguments), "slice", l.call(arguments).join(","))
}, map: function (e) {
return this.pushStack(v.map(this, function (t, n) {
return e.call(t, n, t)
}))
}, end: function () {
return this.prevObject || this.constructor(null)
}, push: f, sort: [].sort, splice: [].splice
}, v.fn.init.prototype = v.fn, v.extend = v.fn.extend = function () {
var e, n, r, i, s, o, u = arguments[0] || {}, a = 1, f = arguments.length, l = !1;
typeof u == "boolean" && (l = u, u = arguments[1] || {}, a = 2), typeof u != "object" && !v.isFunction(u) && (u = {}), f === a && (u = this, --a);
for (; a < f; a++) if ((e = arguments[a]) != null) for (n in e) {
r = u[n], i = e[n];
if (u === i) continue;
l && i && (v.isPlainObject(i) || (s = v.isArray(i))) ? (s ? (s = !1, o = r && v.isArray(r) ? r : []) : o = r && v.isPlainObject(r) ? r : {}, u[n] = v.extend(l, o, i)) : i !== t && (u[n] = i)
}
return u
}, v.extend({
noConflict: function (t) {
return e.$ === v && (e.$ = a), t && e.jQuery === v && (e.jQuery = u), v
}, isReady: !1, readyWait: 1, holdReady: function (e) {
e ? v.readyWait++ : v.ready(!0)
}, ready: function (e) {
if (e === !0 ? --v.readyWait : v.isReady) return;
if (!i.body) return setTimeout(v.ready, 1);
v.isReady = !0;
if (e !== !0 && --v.readyWait > 0) return;
r.resolveWith(i, [v]), v.fn.trigger && v(i).trigger("ready").off("ready")
}, isFunction: function (e) {
return v.type(e) === "function"
}, isArray: Array.isArray || function (e) {
return v.type(e) === "array"
}, isWindow: function (e) {
return e != null && e == e.window
}, isNumeric: function (e) {
return !isNaN(parseFloat(e)) && isFinite(e)
}, type: function (e) {
return e == null ? String(e) : O[h.call(e)] || "object"
}, isPlainObject: function (e) {
if (!e || v.type(e) !== "object" || e.nodeType || v.isWindow(e)) return !1;
try {
if (e.constructor && !p.call(e, "constructor") && !p.call(e.constructor.prototype, "isPrototypeOf")) return !1
} catch (n) {
return !1
}
var r;
for (r in e) ;
return r === t || p.call(e, r)
}, isEmptyObject: function (e) {
var t;
for (t in e) return !1;
return !0
}, error: function (e) {
throw new Error(e)
}, parseHTML: function (e, t, n) {
var r;
return !e || typeof e != "string" ? null : (typeof t == "boolean" && (n = t, t = 0), t = t || i, (r = E.exec(e)) ? [t.createElement(r[1])] : (r = v.buildFragment([e], t, n ? null : []), v.merge([], (r.cacheable ? v.clone(r.fragment) : r.fragment).childNodes)))
}, parseJSON: function (t) {
if (!t || typeof t != "string") return null;
t = v.trim(t);
if (e.JSON && e.JSON.parse) return e.JSON.parse(t);
if (S.test(t.replace(T, "@").replace(N, "]").replace(x, ""))) return (new Function("return " + t))();
v.error("Invalid JSON: " + t)
}, parseXML: function (n) {
var r, i;
if (!n || typeof n != "string") return null;
try {
e.DOMParser ? (i = new DOMParser, r = i.parseFromString(n, "text/xml")) : (r = new ActiveXObject("Microsoft.XMLDOM"), r.async = "false", r.loadXML(n))
} catch (s) {
r = t
}
return (!r || !r.documentElement || r.getElementsByTagName("parsererror").length) && v.error("Invalid XML: " + n), r
}, noop: function () {
}, globalEval: function (t) {
t && g.test(t) && (e.execScript || function (t) {
e.eval.call(e, t)
})(t)
}, camelCase: function (e) {
return e.replace(C, "ms-").replace(k, L)
}, nodeName: function (e, t) {
return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
}, each: function (e, n, r) {
var i, s = 0, o = e.length, u = o === t || v.isFunction(e);
if (r) {
if (u) {
for (i in e) if (n.apply(e[i], r) === !1) break
} else for (; s < o;) if (n.apply(e[s++], r) === !1) break
} else if (u) {
for (i in e) if (n.call(e[i], i, e[i]) === !1) break
} else for (; s < o;) if (n.call(e[s], s, e[s++]) === !1) break;
return e
}, trim: d && !d.call("\ufeff\u00a0") ? function (e) {
return e == null ? "" : d.call(e)
} : function (e) {
return e == null ? "" : (e + "").replace(b, "")
}, makeArray: function (e, t) {
var n, r = t || [];
return e != null && (n = v.type(e), e.length == null || n === "string" || n === "function" || n === "regexp" || v.isWindow(e) ? f.call(r, e) : v.merge(r, e)), r
}, inArray: function (e, t, n) {
var r;
if (t) {
if (c) return c.call(t, e, n);
r = t.length, n = n ? n < 0 ? Math.max(0, r + n) : n : 0;
for (; n < r; n++) if (n in t && t[n] === e) return n
}
return -1
}, merge: function (e, n) {
var r = n.length, i = e.length, s = 0;
if (typeof r == "number") for (; s < r; s++) e[i++] = n[s]; else while (n[s] !== t) e[i++] = n[s++];
return e.length = i, e
}, grep: function (e, t, n) {
var r, i = [], s = 0, o = e.length;
n = !!n;
for (; s < o; s++) r = !!t(e[s], s), n !== r && i.push(e[s]);
return i
}, map: function (e, n, r) {
var i, s, o = [], u = 0, a = e.length,
f = e instanceof v || a !== t && typeof a == "number" && (a > 0 && e[0] && e[a - 1] || a === 0 || v.isArray(e));
if (f) for (; u < a; u++) i = n(e[u], u, r), i != null && (o[o.length] = i); else for (s in e) i = n(e[s], s, r), i != null && (o[o.length] = i);
return o.concat.apply([], o)
}, guid: 1, proxy: function (e, n) {
var r, i, s;
return typeof n == "string" && (r = e[n], n = e, e = r), v.isFunction(e) ? (i = l.call(arguments, 2), s = function () {
return e.apply(n, i.concat(l.call(arguments)))
}, s.guid = e.guid = e.guid || v.guid++, s) : t
}, access: function (e, n, r, i, s, o, u) {
var a, f = r == null, l = 0, c = e.length;
if (r && typeof r == "object") {
for (l in r) v.access(e, n, l, r[l], 1, o, i);
s = 1
} else if (i !== t) {
a = u === t && v.isFunction(i), f && (a ? (a = n, n = function (e, t, n) {
return a.call(v(e), n)
}) : (n.call(e, i), n = null));
if (n) for (; l < c; l++) n(e[l], r, a ? i.call(e[l], l, n(e[l], r)) : i, u);
s = 1
}
return s ? e : f ? n.call(e) : c ? n(e[0], r) : o
}, now: function () {
return (new Date).getTime()
}
}), v.ready.promise = function (t) {
if (!r) {
r = v.Deferred();
if (i.readyState === "complete") setTimeout(v.ready, 1); else if (i.addEventListener) i.addEventListener("DOMContentLoaded", A, !1), e.addEventListener("load", v.ready, !1); else {
i.attachEvent("onreadystatechange", A), e.attachEvent("onload", v.ready);
var n = !1;
try {
n = e.frameElement == null && i.documentElement
} catch (s) {
}
n && n.doScroll && function o() {
if (!v.isReady) {
try {
n.doScroll("left")
} catch (e) {
return setTimeout(o, 50)
}
v.ready()
}
}()
}
}
return r.promise(t)
}, v.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (e, t) {
O["[object " + t + "]"] = t.toLowerCase()
}), n = v(i);
var M = {};
v.Callbacks = function (e) {
e = typeof e == "string" ? M[e] || _(e) : v.extend({}, e);
var n, r, i, s, o, u, a = [], f = !e.once && [], l = function (t) {
n = e.memory && t, r = !0, u = s || 0, s = 0, o = a.length, i = !0;
for (; a && u < o; u++) if (a[u].apply(t[0], t[1]) === !1 && e.stopOnFalse) {
n = !1;
break
}
i = !1, a && (f ? f.length && l(f.shift()) : n ? a = [] : c.disable())
}, c = {
add: function () {
if (a) {
var t = a.length;
(function r(t) {
v.each(t, function (t, n) {
var i = v.type(n);
i === "function" ? (!e.unique || !c.has(n)) && a.push(n) : n && n.length && i !== "string" && r(n)
})
})(arguments), i ? o = a.length : n && (s = t, l(n))
}
return this
}, remove: function () {
return a && v.each(arguments, function (e, t) {
var n;
while ((n = v.inArray(t, a, n)) > -1) a.splice(n, 1), i && (n <= o && o--, n <= u && u--)
}), this
}, has: function (e) {
return v.inArray(e, a) > -1
}, empty: function () {
return a = [], this
}, disable: function () {
return a = f = n = t, this
}, disabled: function () {
return !a
}, lock: function () {
return f = t, n || c.disable(), this
}, locked: function () {
return !f
}, fireWith: function (e, t) {
return t = t || [], t = [e, t.slice ? t.slice() : t], a && (!r || f) && (i ? f.push(t) : l(t)), this
}, fire: function () {
return c.fireWith(this, arguments), this
}, fired: function () {
return !!r
}
};
return c
}, v.extend({
Deferred: function (e) {
var t = [["resolve", "done", v.Callbacks("once memory"), "resolved"], ["reject", "fail", v.Callbacks("once memory"), "rejected"], ["notify", "progress", v.Callbacks("memory")]],
n = "pending", r = {
state: function () {
return n
}, always: function () {
return i.done(arguments).fail(arguments), this
}, then: function () {
var e = arguments;
return v.Deferred(function (n) {
v.each(t, function (t, r) {
var s = r[0], o = e[t];
i[r[1]](v.isFunction(o) ? function () {
var e = o.apply(this, arguments);
e && v.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[s + "With"](this === i ? n : this, [e])
} : n[s])
}), e = null
}).promise()
}, promise: function (e) {
return e != null ? v.extend(e, r) : r
}
}, i = {};
return r.pipe = r.then, v.each(t, function (e, s) {
var o = s[2], u = s[3];
r[s[1]] = o.add, u && o.add(function () {
n = u
}, t[e ^ 1][2].disable, t[2][2].lock), i[s[0]] = o.fire, i[s[0] + "With"] = o.fireWith
}), r.promise(i), e && e.call(i, i), i
}, when: function (e) {
var t = 0, n = l.call(arguments), r = n.length, i = r !== 1 || e && v.isFunction(e.promise) ? r : 0,
s = i === 1 ? e : v.Deferred(), o = function (e, t, n) {
return function (r) {
t[e] = this, n[e] = arguments.length > 1 ? l.call(arguments) : r, n === u ? s.notifyWith(t, n) : --i || s.resolveWith(t, n)
}
}, u, a, f;
if (r > 1) {
u = new Array(r), a = new Array(r), f = new Array(r);
for (; t < r; t++) n[t] && v.isFunction(n[t].promise) ? n[t].promise().done(o(t, f, n)).fail(s.reject).progress(o(t, a, u)) : --i
}
return i || s.resolveWith(f, n), s.promise()
}
}), v.support = function () {
var t, n, r, s, o, u, a, f, l, c, h, p = i.createElement("div");
p.setAttribute("className", "t"), p.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", n = p.getElementsByTagName("*"), r = p.getElementsByTagName("a")[0];
if (!n || !r || !n.length) return {};
s = i.createElement("select"), o = s.appendChild(i.createElement("option")), u = p.getElementsByTagName("input")[0], r.style.cssText = "top:1px;float:left;opacity:.5", t = {
leadingWhitespace: p.firstChild.nodeType === 3,
tbody: !p.getElementsByTagName("tbody").length,
htmlSerialize: !!p.getElementsByTagName("link").length,
style: /top/.test(r.getAttribute("style")),
hrefNormalized: r.getAttribute("href") === "/a",
opacity: /^0.5/.test(r.style.opacity),
cssFloat: !!r.style.cssFloat,
checkOn: u.value === "on",
optSelected: o.selected,
getSetAttribute: p.className !== "t",
enctype: !!i.createElement("form").enctype,
html5Clone: i.createElement("nav").cloneNode(!0).outerHTML !== "<:nav></:nav>",
boxModel: i.compatMode === "CSS1Compat",
submitBubbles: !0,
changeBubbles: !0,
focusinBubbles: !1,
deleteExpando: !0,
noCloneEvent: !0,
inlineBlockNeedsLayout: !1,
shrinkWrapBlocks: !1,
reliableMarginRight: !0,
boxSizingReliable: !0,
pixelPosition: !1
}, u.checked = !0, t.noCloneChecked = u.cloneNode(!0).checked, s.disabled = !0, t.optDisabled = !o.disabled;
try {
delete p.test
} catch (d) {
t.deleteExpando = !1
}
!p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", h = function () {
t.noCloneEvent = !1
}), p.cloneNode(!0).fireEvent("onclick"), p.detachEvent("onclick", h)), u = i.createElement("input"), u.value = "t", u.setAttribute("type", "radio"), t.radioValue = u.value === "t", u.setAttribute("checked", "checked"), u.setAttribute("name", "t"), p.appendChild(u), a = i.createDocumentFragment(), a.appendChild(p.lastChild), t.checkClone = a.cloneNode(!0).cloneNode(!0).lastChild.checked, t.appendChecked = u.checked, a.removeChild(u), a.appendChild(p);
if (p.attachEvent) for (l in{
submit: !0,
change: !0,
focusin: !0
}) f = "on" + l, c = f in p, c || (p.setAttribute(f, "return;"), c = typeof p[f] == "function"), t[l + "Bubbles"] = c;
return v(function () {
var n, r, s, o, u = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
a = i.getElementsByTagName("body")[0];
if (!a) return;
n = i.createElement("div"), n.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", a.insertBefore(n, a.firstChild), r = i.createElement("div"), n.appendChild(r), r.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", s = r.getElementsByTagName("td"), s[0].style.cssText = "padding:0;margin:0;border:0;display:none", c = s[0].offsetHeight === 0, s[0].style.display = "", s[1].style.display = "none", t.reliableHiddenOffsets = c && s[0].offsetHeight === 0, r.innerHTML = "", r.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", t.boxSizing = r.offsetWidth === 4, t.doesNotIncludeMarginInBodyOffset = a.offsetTop !== 1, e.getComputedStyle && (t.pixelPosition = (e.getComputedStyle(r, null) || {}).top !== "1%", t.boxSizingReliable = (e.getComputedStyle(r, null) || {width: "4px"}).width === "4px", o = i.createElement("div"), o.style.cssText = r.style.cssText = u, o.style.marginRight = o.style.width = "0", r.style.width = "1px", r.appendChild(o), t.reliableMarginRight = !parseFloat((e.getComputedStyle(o, null) || {}).marginRight)), typeof r.style.zoom != "undefined" && (r.innerHTML = "", r.style.cssText = u + "width:1px;padding:1px;display:inline;zoom:1", t.inlineBlockNeedsLayout = r.offsetWidth === 3, r.style.display = "block", r.style.overflow = "visible", r.innerHTML = "<div></div>", r.firstChild.style.width = "5px", t.shrinkWrapBlocks = r.offsetWidth !== 3, n.style.zoom = 1), a.removeChild(n), n = r = s = o = null
}), a.removeChild(p), n = r = s = o = u = a = p = null, t
}();
var D = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, P = /([A-Z])/g;
v.extend({
cache: {},
deletedIds: [],
uuid: 0,
expando: "jQuery" + (v.fn.jquery + Math.random()).replace(/\D/g, ""),
noData: {embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0},
hasData: function (e) {
return e = e.nodeType ? v.cache[e[v.expando]] : e[v.expando], !!e && !B(e)
},
data: function (e, n, r, i) {
if (!v.acceptData(e)) return;
var s, o, u = v.expando, a = typeof n == "string", f = e.nodeType, l = f ? v.cache : e, c = f ? e[u] : e[u] && u;
if ((!c || !l[c] || !i && !l[c].data) && a && r === t) return;
c || (f ? e[u] = c = v.deletedIds.pop() || v.guid++ : c = u), l[c] || (l[c] = {}, f || (l[c].toJSON = v.noop));
if (typeof n == "object" || typeof n == "function") i ? l[c] = v.extend(l[c], n) : l[c].data = v.extend(l[c].data, n);
return s = l[c], i || (s.data || (s.data = {}), s = s.data), r !== t && (s[v.camelCase(n)] = r), a ? (o = s[n], o == null && (o = s[v.camelCase(n)])) : o = s, o
},
removeData: function (e, t, n) {
if (!v.acceptData(e)) return;
var r, i, s, o = e.nodeType, u = o ? v.cache : e, a = o ? e[v.expando] : v.expando;
if (!u[a]) return;
if (t) {
r = n ? u[a] : u[a].data;
if (r) {
v.isArray(t) || (t in r ? t = [t] : (t = v.camelCase(t), t in r ? t = [t] : t = t.split(" ")));
for (i = 0, s = t.length; i < s; i++) delete r[t[i]];
if (!(n ? B : v.isEmptyObject)(r)) return
}
}
if (!n) {
delete u[a].data;
if (!B(u[a])) return
}
o ? v.cleanData([e], !0) : v.support.deleteExpando || u != u.window ? delete u[a] : u[a] = null
},
_data: function (e, t, n) {
return v.data(e, t, n, !0)
},
acceptData: function (e) {
var t = e.nodeName && v.noData[e.nodeName.toLowerCase()];
return !t || t !== !0 && e.getAttribute("classid") === t
}
}), v.fn.extend({
data: function (e, n) {
var r, i, s, o, u, a = this[0], f = 0, l = null;
if (e === t) {
if (this.length) {
l = v.data(a);
if (a.nodeType === 1 && !v._data(a, "parsedAttrs")) {
s = a.attributes;
for (u = s.length; f < u; f++) o = s[f].name, o.indexOf("data-") || (o = v.camelCase(o.substring(5)), H(a, o, l[o]));
v._data(a, "parsedAttrs", !0)
}
}
return l
}
return typeof e == "object" ? this.each(function () {
v.data(this, e)
}) : (r = e.split(".", 2), r[1] = r[1] ? "." + r[1] : "", i = r[1] + "!", v.access(this, function (n) {
if (n === t) return l = this.triggerHandler("getData" + i, [r[0]]), l === t && a && (l = v.data(a, e), l = H(a, e, l)), l === t && r[1] ? this.data(r[0]) : l;
r[1] = n, this.each(function () {
var t = v(this);
t.triggerHandler("setData" + i, r), v.data(this, e, n), t.triggerHandler("changeData" + i, r)
})
}, null, n, arguments.length > 1, null, !1))
}, removeData: function (e) {
return this.each(function () {
v.removeData(this, e)
})
}
}), v.extend({
queue: function (e, t, n) {
var r;
if (e) return t = (t || "fx") + "queue", r = v._data(e, t), n && (!r || v.isArray(n) ? r = v._data(e, t, v.makeArray(n)) : r.push(n)), r || []
}, dequeue: function (e, t) {
t = t || "fx";
var n = v.queue(e, t), r = n.length, i = n.shift(), s = v._queueHooks(e, t), o = function () {
v.dequeue(e, t)
};
i === "inprogress" && (i = n.shift(), r--), i && (t === "fx" && n.unshift("inprogress"), delete s.stop, i.call(e, o, s)), !r && s && s.empty.fire()
}, _queueHooks: function (e, t) {
var n = t + "queueHooks";
return v._data(e, n) || v._data(e, n, {
empty: v.Callbacks("once memory").add(function () {
v.removeData(e, t + "queue", !0), v.removeData(e, n, !0)
})
})
}
}), v.fn.extend({
queue: function (e, n) {
var r = 2;
return typeof e != "string" && (n = e, e = "fx", r--), arguments.length < r ? v.queue(this[0], e) : n === t ? this : this.each(function () {
var t = v.queue(this, e, n);
v._queueHooks(this, e), e === "fx" && t[0] !== "inprogress" && v.dequeue(this, e)
})
}, dequeue: function (e) {
return this.each(function () {
v.dequeue(this, e)
})
}, delay: function (e, t) {
return e = v.fx ? v.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function (t, n) {
var r = setTimeout(t, e);
n.stop = function () {
clearTimeout(r)
}
})
}, clearQueue: function (e) {
return this.queue(e || "fx", [])
}, promise: function (e, n) {
var r, i = 1, s = v.Deferred(), o = this, u = this.length, a = function () {
--i || s.resolveWith(o, [o])
};
typeof e != "string" && (n = e, e = t), e = e || "fx";
while (u--) r = v._data(o[u], e + "queueHooks"), r && r.empty && (i++, r.empty.add(a));
return a(), s.promise(n)
}
});
var j, F, I, q = /[\t\r\n]/g, R = /\r/g, U = /^(?:button|input)$/i, z = /^(?:button|input|object|select|textarea)$/i,
W = /^a(?:rea|)$/i,
X = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
V = v.support.getSetAttribute;
v.fn.extend({
attr: function (e, t) {
return v.access(this, v.attr, e, t, arguments.length > 1)
}, removeAttr: function (e) {
return this.each(function () {
v.removeAttr(this, e)
})
}, prop: function (e, t) {
return v.access(this, v.prop, e, t, arguments.length > 1)
}, removeProp: function (e) {
return e = v.propFix[e] || e, this.each(function () {
try {
this[e] = t, delete this[e]
} catch (n) {
}
})
}, addClass: function (e) {
var t, n, r, i, s, o, u;
if (v.isFunction(e)) return this.each(function (t) {
v(this).addClass(e.call(this, t, this.className))
});
if (e && typeof e == "string") {
t = e.split(y);
for (n = 0, r = this.length; n < r; n++) {
i = this[n];
if (i.nodeType === 1) if (!i.className && t.length === 1) i.className = e; else {
s = " " + i.className + " ";
for (o = 0, u = t.length; o < u; o++) s.indexOf(" " + t[o] + " ") < 0 && (s += t[o] + " ");
i.className = v.trim(s)
}
}
}
return this
}, removeClass: function (e) {
var n, r, i, s, o, u, a;
if (v.isFunction(e)) return this.each(function (t) {
v(this).removeClass(e.call(this, t, this.className))
});
if (e && typeof e == "string" || e === t) {
n = (e || "").split(y);
for (u = 0, a = this.length; u < a; u++) {
i = this[u];
if (i.nodeType === 1 && i.className) {
r = (" " + i.className + " ").replace(q, " ");
for (s = 0, o = n.length; s < o; s++) while (r.indexOf(" " + n[s] + " ") >= 0) r = r.replace(" " + n[s] + " ", " ");
i.className = e ? v.trim(r) : ""
}
}
}
return this
}, toggleClass: function (e, t) {
var n = typeof e, r = typeof t == "boolean";
return v.isFunction(e) ? this.each(function (n) {
v(this).toggleClass(e.call(this, n, this.className, t), t)
}) : this.each(function () {
if (n === "string") {
var i, s = 0, o = v(this), u = t, a = e.split(y);
while (i = a[s++]) u = r ? u : !o.hasClass(i), o[u ? "addClass" : "removeClass"](i)
} else if (n === "undefined" || n === "boolean") this.className && v._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : v._data(this, "__className__") || ""
})
}, hasClass: function (e) {
var t = " " + e + " ", n = 0, r = this.length;
for (; n < r; n++) if (this[n].nodeType === 1 && (" " + this[n].className + " ").replace(q, " ").indexOf(t) >= 0) return !0;
return !1
}, val: function (e) {
var n, r, i, s = this[0];
if (!arguments.length) {
if (s) return n = v.valHooks[s.type] || v.valHooks[s.nodeName.toLowerCase()], n && "get" in n && (r = n.get(s, "value")) !== t ? r : (r = s.value, typeof r == "string" ? r.replace(R, "") : r == null ? "" : r);
return
}
return i = v.isFunction(e), this.each(function (r) {
var s, o = v(this);
if (this.nodeType !== 1) return;
i ? s = e.call(this, r, o.val()) : s = e, s == null ? s = "" : typeof s == "number" ? s += "" : v.isArray(s) && (s = v.map(s, function (e) {
return e == null ? "" : e + ""
})), n = v.valHooks[this.type] || v.valHooks[this.nodeName.toLowerCase()];
if (!n || !("set" in n) || n.set(this, s, "value") === t) this.value = s
})
}
}), v.extend({
valHooks: {
option: {
get: function (e) {
var t = e.attributes.value;
return !t || t.specified ? e.value : e.text
}
}, select: {
get: function (e) {
var t, n, r = e.options, i = e.selectedIndex, s = e.type === "select-one" || i < 0, o = s ? null : [],
u = s ? i + 1 : r.length, a = i < 0 ? u : s ? i : 0;
for (; a < u; a++) {
n = r[a];
if ((n.selected || a === i) && (v.support.optDisabled ? !n.disabled : n.getAttribute("disabled") === null) && (!n.parentNode.disabled || !v.nodeName(n.parentNode, "optgroup"))) {
t = v(n).val();
if (s) return t;
o.push(t)
}
}
return o
}, set: function (e, t) {
var n = v.makeArray(t);
return v(e).find("option").each(function () {
this.selected = v.inArray(v(this).val(), n) >= 0
}), n.length || (e.selectedIndex = -1), n
}
}
},
attrFn: {},
attr: function (e, n, r, i) {
var s, o, u, a = e.nodeType;
if (!e || a === 3 || a === 8 || a === 2) return;
if (i && v.isFunction(v.fn[n])) return v(e)[n](r);
if (typeof e.getAttribute == "undefined") return v.prop(e, n, r);
u = a !== 1 || !v.isXMLDoc(e), u && (n = n.toLowerCase(), o = v.attrHooks[n] || (X.test(n) ? F : j));
if (r !== t) {
if (r === null) {
v.removeAttr(e, n);
return
}
return o && "set" in o && u && (s = o.set(e, r, n)) !== t ? s : (e.setAttribute(n, r + ""), r)
}
return o && "get" in o && u && (s = o.get(e, n)) !== null ? s : (s = e.getAttribute(n), s === null ? t : s)
},
removeAttr: function (e, t) {
var n, r, i, s, o = 0;
if (t && e.nodeType === 1) {
r = t.split(y);
for (; o < r.length; o++) i = r[o], i && (n = v.propFix[i] || i, s = X.test(i), s || v.attr(e, i, ""), e.removeAttribute(V ? i : n), s && n in e && (e[n] = !1))
}
},
attrHooks: {
type: {
set: function (e, t) {
if (U.test(e.nodeName) && e.parentNode) v.error("type property can't be changed"); else if (!v.support.radioValue && t === "radio" && v.nodeName(e, "input")) {
var n = e.value;
return e.setAttribute("type", t), n && (e.value = n), t
}
}
}, value: {
get: function (e, t) {
return j && v.nodeName(e, "button") ? j.get(e, t) : t in e ? e.value : null
}, set: function (e, t, n) {
if (j && v.nodeName(e, "button")) return j.set(e, t, n);
e.value = t
}
}
},
propFix: {
tabindex: "tabIndex",
readonly: "readOnly",
"for": "htmlFor",
"class": "className",
maxlength: "maxLength",
cellspacing: "cellSpacing",
cellpadding: "cellPadding",
rowspan: "rowSpan",
colspan: "colSpan",
usemap: "useMap",
frameborder: "frameBorder",
contenteditable: "contentEditable"
},
prop: function (e, n, r) {
var i, s, o, u = e.nodeType;
if (!e || u === 3 || u === 8 || u === 2) return;
return o = u !== 1 || !v.isXMLDoc(e), o && (n = v.propFix[n] || n, s = v.propHooks[n]), r !== t ? s && "set" in s && (i = s.set(e, r, n)) !== t ? i : e[n] = r : s && "get" in s && (i = s.get(e, n)) !== null ? i : e[n]
},
propHooks: {
tabIndex: {
get: function (e) {
var n = e.getAttributeNode("tabindex");
return n && n.specified ? parseInt(n.value, 10) : z.test(e.nodeName) || W.test(e.nodeName) && e.href ? 0 : t
}
}
}
}), F = {
get: function (e, n) {
var r, i = v.prop(e, n);
return i === !0 || typeof i != "boolean" && (r = e.getAttributeNode(n)) && r.nodeValue !== !1 ? n.toLowerCase() : t
}, set: function (e, t, n) {
var r;
return t === !1 ? v.removeAttr(e, n) : (r = v.propFix[n] || n, r in e && (e[r] = !0), e.setAttribute(n, n.toLowerCase())), n
}
}, V || (I = {name: !0, id: !0, coords: !0}, j = v.valHooks.button = {
get: function (e, n) {
var r;
return r = e.getAttributeNode(n), r && (I[n] ? r.value !== "" : r.specified) ? r.value : t
}, set: function (e, t, n) {
var r = e.getAttributeNode(n);
return r || (r = i.createAttribute(n), e.setAttributeNode(r)), r.value = t + ""
}
}, v.each(["width", "height"], function (e, t) {
v.attrHooks[t] = v.extend(v.attrHooks[t], {
set: function (e, n) {
if (n === "") return e.setAttribute(t, "auto"), n
}
})
}), v.attrHooks.contenteditable = {
get: j.get, set: function (e, t, n) {
t === "" && (t = "false"), j.set(e, t, n)
}
}), v.support.hrefNormalized || v.each(["href", "src", "width", "height"], function (e, n) {
v.attrHooks[n] = v.extend(v.attrHooks[n], {
get: function (e) {
var r = e.getAttribute(n, 2);
return r === null ? t : r
}
})
}), v.support.style || (v.attrHooks.style = {
get: function (e) {
return e.style.cssText.toLowerCase() || t
}, set: function (e, t) {
return e.style.cssText = t + ""
}
}), v.support.optSelected || (v.propHooks.selected = v.extend(v.propHooks.selected, {
get: function (e) {
var t = e.parentNode;
return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
}
})), v.support.enctype || (v.propFix.enctype = "encoding"), v.support.checkOn || v.each(["radio", "checkbox"], function () {
v.valHooks[this] = {
get: function (e) {
return e.getAttribute("value") === null ? "on" : e.value
}
}
}), v.each(["radio", "checkbox"], function () {
v.valHooks[this] = v.extend(v.valHooks[this], {
set: function (e, t) {
if (v.isArray(t)) return e.checked = v.inArray(v(e).val(), t) >= 0
}
})
});
var $ = /^(?:textarea|input|select)$/i, J = /^([^\.]*|)(?:\.(.+)|)$/, K = /(?:^|\s)hover(\.\S+|)\b/, Q = /^key/,
G = /^(?:mouse|contextmenu)|click/, Y = /^(?:focusinfocus|focusoutblur)$/, Z = function (e) {
return v.event.special.hover ? e : e.replace(K, "mouseenter$1 mouseleave$1")
};
v.event = {
add: function (e, n, r, i, s) {
var o, u, a, f, l, c, h, p, d, m, g;
if (e.nodeType === 3 || e.nodeType === 8 || !n || !r || !(o = v._data(e))) return;
r.handler && (d = r, r = d.handler, s = d.selector), r.guid || (r.guid = v.guid++), a = o.events, a || (o.events = a = {}), u = o.handle, u || (o.handle = u = function (e) {
return typeof v == "undefined" || !!e && v.event.triggered === e.type ? t : v.event.dispatch.apply(u.elem, arguments)
}, u.elem = e), n = v.trim(Z(n)).split(" ");
for (f = 0; f < n.length; f++) {
l = J.exec(n[f]) || [], c = l[1], h = (l[2] || "").split(".").sort(), g = v.event.special[c] || {}, c = (s ? g.delegateType : g.bindType) || c, g = v.event.special[c] || {}, p = v.extend({
type: c,
origType: l[1],
data: i,
handler: r,
guid: r.guid,
selector: s,
needsContext: s && v.expr.match.needsContext.test(s),
namespace: h.join(".")
}, d), m = a[c];
if (!m) {
m = a[c] = [], m.delegateCount = 0;
if (!g.setup || g.setup.call(e, i, h, u) === !1) e.addEventListener ? e.addEventListener(c, u, !1) : e.attachEvent && e.attachEvent("on" + c, u)
}
g.add && (g.add.call(e, p), p.handler.guid || (p.handler.guid = r.guid)), s ? m.splice(m.delegateCount++, 0, p) : m.push(p), v.event.global[c] = !0
}
e = null
},
global: {},
remove: function (e, t, n, r, i) {
var s, o, u, a, f, l, c, h, p, d, m, g = v.hasData(e) && v._data(e);
if (!g || !(h = g.events)) return;
t = v.trim(Z(t || "")).split(" ");
for (s = 0; s < t.length; s++) {
o = J.exec(t[s]) || [], u = a = o[1], f = o[2];
if (!u) {
for (u in h) v.event.remove(e, u + t[s], n, r, !0);
continue
}
p = v.event.special[u] || {}, u = (r ? p.delegateType : p.bindType) || u, d = h[u] || [], l = d.length, f = f ? new RegExp("(^|\\.)" + f.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
for (c = 0; c < d.length; c++) m = d[c], (i || a === m.origType) && (!n || n.guid === m.guid) && (!f || f.test(m.namespace)) && (!r || r === m.selector || r === "**" && m.selector) && (d.splice(c--, 1), m.selector && d.delegateCount--, p.remove && p.remove.call(e, m));
d.length === 0 && l !== d.length && ((!p.teardown || p.teardown.call(e, f, g.handle) === !1) && v.removeEvent(e, u, g.handle), delete h[u])
}
v.isEmptyObject(h) && (delete g.handle, v.removeData(e, "events", !0))
},
customEvent: {getData: !0, setData: !0, changeData: !0},
trigger: function (n, r, s, o) {
if (!s || s.nodeType !== 3 && s.nodeType !== 8) {
var u, a, f, l, c, h, p, d, m, g, y = n.type || n, b = [];
if (Y.test(y + v.event.triggered)) return;
y.indexOf("!") >= 0 && (y = y.slice(0, -1), a = !0), y.indexOf(".") >= 0 && (b = y.split("."), y = b.shift(), b.sort());
if ((!s || v.event.customEvent[y]) && !v.event.global[y]) return;
n = typeof n == "object" ? n[v.expando] ? n : new v.Event(y, n) : new v.Event(y), n.type = y, n.isTrigger = !0, n.exclusive = a, n.namespace = b.join("."), n.namespace_re = n.namespace ? new RegExp("(^|\\.)" + b.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, h = y.indexOf(":") < 0 ? "on" + y : "";
if (!s) {
u = v.cache;
for (f in u) u[f].events && u[f].events[y] && v.event.trigger(n, r, u[f].handle.elem, !0);
return
}
n.result = t, n.target || (n.target = s), r = r != null ? v.makeArray(r) : [], r.unshift(n), p = v.event.special[y] || {};
if (p.trigger && p.trigger.apply(s, r) === !1) return;
m = [[s, p.bindType || y]];
if (!o && !p.noBubble && !v.isWindow(s)) {
g = p.delegateType || y, l = Y.test(g + y) ? s : s.parentNode;
for (c = s; l; l = l.parentNode) m.push([l, g]), c = l;
c === (s.ownerDocument || i) && m.push([c.defaultView || c.parentWindow || e, g])
}
for (f = 0; f < m.length && !n.isPropagationStopped(); f++) l = m[f][0], n.type = m[f][1], d = (v._data(l, "events") || {})[n.type] && v._data(l, "handle"), d && d.apply(l, r), d = h && l[h], d && v.acceptData(l) && d.apply && d.apply(l, r) === !1 && n.preventDefault();
return n.type = y, !o && !n.isDefaultPrevented() && (!p._default || p._default.apply(s.ownerDocument, r) === !1) && (y !== "click" || !v.nodeName(s, "a")) && v.acceptData(s) && h && s[y] && (y !== "focus" && y !== "blur" || n.target.offsetWidth !== 0) && !v.isWindow(s) && (c = s[h], c && (s[h] = null), v.event.triggered = y, s[y](), v.event.triggered = t, c && (s[h] = c)), n.result
}
return
},
dispatch: function (n) {
n = v.event.fix(n || e.event);
var r, i, s, o, u, a, f, c, h, p, d = (v._data(this, "events") || {})[n.type] || [], m = d.delegateCount,
g = l.call(arguments), y = !n.exclusive && !n.namespace, b = v.event.special[n.type] || {}, w = [];
g[0] = n, n.delegateTarget = this;
if (b.preDispatch && b.preDispatch.call(this, n) === !1) return;
if (m && (!n.button || n.type !== "click")) for (s = n.target; s != this; s = s.parentNode || this) if (s.disabled !== !0 || n.type !== "click") {
u = {}, f = [];
for (r = 0; r < m; r++) c = d[r], h = c.selector, u[h] === t && (u[h] = c.needsContext ? v(h, this).index(s) >= 0 : v.find(h, this, null, [s]).length), u[h] && f.push(c);
f.length && w.push({elem: s, matches: f})
}
d.length > m && w.push({elem: this, matches: d.slice(m)});
for (r = 0; r < w.length && !n.isPropagationStopped(); r++) {
a = w[r], n.currentTarget = a.elem;
for (i = 0; i < a.matches.length && !n.isImmediatePropagationStopped(); i++) {
c = a.matches[i];
if (y || !n.namespace && !c.namespace || n.namespace_re && n.namespace_re.test(c.namespace)) n.data = c.data, n.handleObj = c, o = ((v.event.special[c.origType] || {}).handle || c.handler).apply(a.elem, g), o !== t && (n.result = o, o === !1 && (n.preventDefault(), n.stopPropagation()))
}
}
return b.postDispatch && b.postDispatch.call(this, n), n.result
},
props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
fixHooks: {},
keyHooks: {
props: "char charCode key keyCode".split(" "), filter: function (e, t) {
return e.which == null && (e.which = t.charCode != null ? t.charCode : t.keyCode), e
}
},
mouseHooks: {
props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
filter: function (e, n) {
var r, s, o, u = n.button, a = n.fromElement;
return e.pageX == null && n.clientX != null && (r = e.target.ownerDocument || i, s = r.documentElement, o = r.body, e.pageX = n.clientX + (s && s.scrollLeft || o && o.scrollLeft || 0) - (s && s.clientLeft || o && o.clientLeft || 0), e.pageY = n.clientY + (s && s.scrollTop || o && o.scrollTop || 0) - (s && s.clientTop || o && o.clientTop || 0)), !e.relatedTarget && a && (e.relatedTarget = a === e.target ? n.toElement : a), !e.which && u !== t && (e.which = u & 1 ? 1 : u & 2 ? 3 : u & 4 ? 2 : 0), e
}
},
fix: function (e) {
if (e[v.expando]) return e;
var t, n, r = e, s = v.event.fixHooks[e.type] || {}, o = s.props ? this.props.concat(s.props) : this.props;
e = v.Event(r);
for (t = o.length; t;) n = o[--t], e[n] = r[n];
return e.target || (e.target = r.srcElement || i), e.target.nodeType === 3 && (e.target = e.target.parentNode), e.metaKey = !!e.metaKey, s.filter ? s.filter(e, r) : e
},
special: {
load: {noBubble: !0},
focus: {delegateType: "focusin"},
blur: {delegateType: "focusout"},
beforeunload: {
setup: function (e, t, n) {
v.isWindow(this) && (this.onbeforeunload = n)
}, teardown: function (e, t) {
this.onbeforeunload === t && (this.onbeforeunload = null)
}
}
},
simulate: function (e, t, n, r) {
var i = v.extend(new v.Event, n, {type: e, isSimulated: !0, originalEvent: {}});
r ? v.event.trigger(i, null, t) : v.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault()
}
}, v.event.handle = v.event.dispatch, v.removeEvent = i.removeEventListener ? function (e, t, n) {
e.removeEventListener && e.removeEventListener(t, n, !1)
} : function (e, t, n) {
var r = "on" + t;
e.detachEvent && (typeof e[r] == "undefined" && (e[r] = null), e.detachEvent(r, n))
}, v.Event = function (e, t) {
if (!(this instanceof v.Event)) return new v.Event(e, t);
e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? tt : et) : this.type = e, t && v.extend(this, t), this.timeStamp = e && e.timeStamp || v.now(), this[v.expando] = !0
}, v.Event.prototype = {
preventDefault: function () {
this.isDefaultPrevented = tt;
var e = this.originalEvent;
if (!e) return;
e.preventDefault ? e.preventDefault() : e.returnValue = !1
}, stopPropagation: function () {
this.isPropagationStopped = tt;
var e = this.originalEvent;
if (!e) return;
e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0
}, stopImmediatePropagation: function () {
this.isImmediatePropagationStopped = tt, this.stopPropagation()
}, isDefaultPrevented: et, isPropagationStopped: et, isImmediatePropagationStopped: et
}, v.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (e, t) {
v.event.special[e] = {
delegateType: t, bindType: t, handle: function (e) {
var n, r = this, i = e.relatedTarget, s = e.handleObj, o = s.selector;
if (!i || i !== r && !v.contains(r, i)) e.type = s.origType, n = s.handler.apply(this, arguments), e.type = t;
return n
}
}
}), v.support.submitBubbles || (v.event.special.submit = {
setup: function () {
if (v.nodeName(this, "form")) return !1;
v.event.add(this, "click._submit keypress._submit", function (e) {
var n = e.target, r = v.nodeName(n, "input") || v.nodeName(n, "button") ? n.form : t;
r && !v._data(r, "_submit_attached") && (v.event.add(r, "submit._submit", function (e) {
e._submit_bubble = !0
}), v._data(r, "_submit_attached", !0))
})
}, postDispatch: function (e) {
e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && v.event.simulate("submit", this.parentNode, e, !0))
}, teardown: function () {
if (v.nodeName(this, "form")) return !1;
v.event.remove(this, "._submit")
}
}), v.support.changeBubbles || (v.event.special.change = {
setup: function () {
if ($.test(this.nodeName)) {
if (this.type === "checkbox" || this.type === "radio") v.event.add(this, "propertychange._change", function (e) {
e.originalEvent.propertyName === "checked" && (this._just_changed = !0)
}), v.event.add(this, "click._change", function (e) {
this._just_changed && !e.isTrigger && (this._just_changed = !1), v.event.simulate("change", this, e, !0)
});
return !1
}
v.event.add(this, "beforeactivate._change", function (e) {
var t = e.target;
$.test(t.nodeName) && !v._data(t, "_change_attached") && (v.event.add(t, "change._change", function (e) {
this.parentNode && !e.isSimulated && !e.isTrigger && v.event.simulate("change", this.parentNode, e, !0)
}), v._data(t, "_change_attached", !0))
})
}, handle: function (e) {
var t = e.target;
if (this !== t || e.isSimulated || e.isTrigger || t.type !== "radio" && t.type !== "checkbox") return e.handleObj.handler.apply(this, arguments)
}, teardown: function () {
return v.event.remove(this, "._change"), !$.test(this.nodeName)
}
}), v.support.focusinBubbles || v.each({focus: "focusin", blur: "focusout"}, function (e, t) {
var n = 0, r = function (e) {
v.event.simulate(t, e.target, v.event.fix(e), !0)
};
v.event.special[t] = {
setup: function () {
n++ === 0 && i.addEventListener(e, r, !0)
}, teardown: function () {
--n === 0 && i.removeEventListener(e, r, !0)
}
}
}), v.fn.extend({
on: function (e, n, r, i, s) {
var o, u;
if (typeof e == "object") {
typeof n != "string" && (r = r || n, n = t);
for (u in e) this.on(u, n, r, e[u], s);
return this
}
r == null && i == null ? (i = n, r = n = t) : i == null && (typeof n == "string" ? (i = r, r = t) : (i = r, r = n, n = t));
if (i === !1) i = et; else if (!i) return this;
return s === 1 && (o = i, i = function (e) {
return v().off(e), o.apply(this, arguments)
}, i.guid = o.guid || (o.guid = v.guid++)), this.each(function () {
v.event.add(this, e, i, r, n)
})
}, one: function (e, t, n, r) {
return this.on(e, t, n, r, 1)
}, off: function (e, n, r) {
var i, s;
if (e && e.preventDefault && e.handleObj) return i = e.handleObj, v(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this;
if (typeof e == "object") {
for (s in e) this.off(s, n, e[s]);
return this
}
if (n === !1 || typeof n == "function") r = n, n = t;
return r === !1 && (r = et), this.each(function () {
v.event.remove(this, e, r, n)
})
}, bind: function (e, t, n) {
return this.on(e, null, t, n)
}, unbind: function (e, t) {
return this.off(e, null, t)
}, live: function (e, t, n) {
return v(this.context).on(e, this.selector, t, n), this
}, die: function (e, t) {
return v(this.context).off(e, this.selector || "**", t), this
}, delegate: function (e, t, n, r) {
return this.on(t, e, n, r)
}, undelegate: function (e, t, n) {
return arguments.length === 1 ? this.off(e, "**") : this.off(t, e || "**", n)
}, trigger: function (e, t) {
return this.each(function () {
v.event.trigger(e, t, this)
})
}, triggerHandler: function (e, t) {
if (this[0]) return v.event.trigger(e, t, this[0], !0)
}, toggle: function (e) {
var t = arguments, n = e.guid || v.guid++, r = 0, i = function (n) {
var i = (v._data(this, "lastToggle" + e.guid) || 0) % r;
return v._data(this, "lastToggle" + e.guid, i + 1), n.preventDefault(), t[i].apply(this, arguments) || !1
};
i.guid = n;
while (r < t.length) t[r++].guid = n;
return this.click(i)
}, hover: function (e, t) {
return this.mouseenter(e).mouseleave(t || e)
}
}), v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (e, t) {
v.fn[t] = function (e, n) {
return n == null && (n = e, e = null), arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
}, Q.test(t) && (v.event.fixHooks[t] = v.event.keyHooks), G.test(t) && (v.event.fixHooks[t] = v.event.mouseHooks)
}), function (e, t) {
function nt(e, t, n, r) {
n = n || [], t = t || g;
var i, s, a, f, l = t.nodeType;
if (!e || typeof e != "string") return n;
if (l !== 1 && l !== 9) return [];
a = o(t);
if (!a && !r) if (i = R.exec(e)) if (f = i[1]) {
if (l === 9) {
s = t.getElementById(f);
if (!s || !s.parentNode) return n;
if (s.id === f) return n.push(s), n
} else if (t.ownerDocument && (s = t.ownerDocument.getElementById(f)) && u(t, s) && s.id === f) return n.push(s), n
} else {
if (i[2]) return S.apply(n, x.call(t.getElementsByTagName(e), 0)), n;
if ((f = i[3]) && Z && t.getElementsByClassName) return S.apply(n, x.call(t.getElementsByClassName(f), 0)), n
}
return vt(e.replace(j, "$1"), t, n, r, a)
}
function rt(e) {
return function (t) {
var n = t.nodeName.toLowerCase();
return n === "input" && t.type === e
}
}
function it(e) {
return function (t) {
var n = t.nodeName.toLowerCase();
return (n === "input" || n === "button") && t.type === e
}
}
function st(e) {
return N(function (t) {
return t = +t, N(function (n, r) {
var i, s = e([], n.length, t), o = s.length;
while (o--) n[i = s[o]] && (n[i] = !(r[i] = n[i]))
})
})
}
function ot(e, t, n) {
if (e === t) return n;
var r = e.nextSibling;
while (r) {
if (r === t) return -1;
r = r.nextSibling
}
return 1
}
function ut(e, t) {
var n, r, s, o, u, a, f, l = L[d][e + " "];
if (l) return t ? 0 : l.slice(0);
u = e, a = [], f = i.preFilter;
while (u) {
if (!n || (r = F.exec(u))) r && (u = u.slice(r[0].length) || u), a.push(s = []);
n = !1;
if (r = I.exec(u)) s.push(n = new m(r.shift())), u = u.slice(n.length), n.type = r[0].replace(j, " ");
for (o in i.filter) (r = J[o].exec(u)) && (!f[o] || (r = f[o](r))) && (s.push(n = new m(r.shift())), u = u.slice(n.length), n.type = o, n.matches = r);
if (!n) break
}
return t ? u.length : u ? nt.error(e) : L(e, a).slice(0)
}
function at(e, t, r) {
var i = t.dir, s = r && t.dir === "parentNode", o = w++;
return t.first ? function (t, n, r) {
while (t = t[i]) if (s || t.nodeType === 1) return e(t, n, r)
} : function (t, r, u) {
if (!u) {
var a, f = b + " " + o + " ", l = f + n;
while (t = t[i]) if (s || t.nodeType === 1) {
if ((a = t[d]) === l) return t.sizset;
if (typeof a == "string" && a.indexOf(f) === 0) {
if (t.sizset) return t
} else {
t[d] = l;
if (e(t, r, u)) return t.sizset = !0, t;
t.sizset = !1
}
}
} else while (t = t[i]) if (s || t.nodeType === 1) if (e(t, r, u)) return t
}
}
function ft(e) {
return e.length > 1 ? function (t, n, r) {
var i = e.length;
while (i--) if (!e[i](t, n, r)) return !1;
return !0
} : e[0]
}
function lt(e, t, n, r, i) {
var s, o = [], u = 0, a = e.length, f = t != null;
for (; u < a; u++) if (s = e[u]) if (!n || n(s, r, i)) o.push(s), f && t.push(u);
return o
}
function ct(e, t, n, r, i, s) {
return r && !r[d] && (r = ct(r)), i && !i[d] && (i = ct(i, s)), N(function (s, o, u, a) {
var f, l, c, h = [], p = [], d = o.length, v = s || dt(t || "*", u.nodeType ? [u] : u, []),
m = e && (s || !t) ? lt(v, h, e, u, a) : v, g = n ? i || (s ? e : d || r) ? [] : o : m;
n && n(m, g, u, a);
if (r) {
f = lt(g, p), r(f, [], u, a), l = f.length;
while (l--) if (c = f[l]) g[p[l]] = !(m[p[l]] = c)
}
if (s) {
if (i || e) {
if (i) {
f = [], l = g.length;
while (l--) (c = g[l]) && f.push(m[l] = c);
i(null, g = [], f, a)
}
l = g.length;
while (l--) (c = g[l]) && (f = i ? T.call(s, c) : h[l]) > -1 && (s[f] = !(o[f] = c))
}
} else g = lt(g === o ? g.splice(d, g.length) : g), i ? i(null, o, g, a) : S.apply(o, g)
})
}
function ht(e) {
var t, n, r, s = e.length, o = i.relative[e[0].type], u = o || i.relative[" "], a = o ? 1 : 0,
f = at(function (e) {
return e === t
}, u, !0), l = at(function (e) {
return T.call(t, e) > -1
}, u, !0), h = [function (e, n, r) {
return !o && (r || n !== c) || ((t = n).nodeType ? f(e, n, r) : l(e, n, r))
}];
for (; a < s; a++) if (n = i.relative[e[a].type]) h = [at(ft(h), n)]; else {
n = i.filter[e[a].type].apply(null, e[a].matches);
if (n[d]) {
r = ++a;
for (; r < s; r++) if (i.relative[e[r].type]) break;
return ct(a > 1 && ft(h), a > 1 && e.slice(0, a - 1).join("").replace(j, "$1"), n, a < r && ht(e.slice(a, r)), r < s && ht(e = e.slice(r)), r < s && e.join(""))
}
h.push(n)
}
return ft(h)
}
function pt(e, t) {
var r = t.length > 0, s = e.length > 0, o = function (u, a, f, l, h) {
var p, d, v, m = [], y = 0, w = "0", x = u && [], T = h != null, N = c,
C = u || s && i.find.TAG("*", h && a.parentNode || a), k = b += N == null ? 1 : Math.E;
T && (c = a !== g && a, n = o.el);
for (; (p = C[w]) != null; w++) {
if (s && p) {
for (d = 0; v = e[d]; d++) if (v(p, a, f)) {
l.push(p);
break
}
T && (b = k, n = ++o.el)
}
r && ((p = !v && p) && y--, u && x.push(p))
}
y += w;
if (r && w !== y) {
for (d = 0; v = t[d]; d++) v(x, m, a, f);
if (u) {
if (y > 0) while (w--) !x[w] && !m[w] && (m[w] = E.call(l));
m = lt(m)
}
S.apply(l, m), T && !u && m.length > 0 && y + t.length > 1 && nt.uniqueSort(l)
}
return T && (b = k, c = N), x
};
return o.el = 0, r ? N(o) : o
}
function dt(e, t, n) {
var r = 0, i = t.length;
for (; r < i; r++) nt(e, t[r], n);
return n
}
function vt(e, t, n, r, s) {
var o, u, f, l, c, h = ut(e), p = h.length;
if (!r && h.length === 1) {
u = h[0] = h[0].slice(0);
if (u.length > 2 && (f = u[0]).type === "ID" && t.nodeType === 9 && !s && i.relative[u[1].type]) {
t = i.find.ID(f.matches[0].replace($, ""), t, s)[0];
if (!t) return n;
e = e.slice(u.shift().length)
}
for (o = J.POS.test(e) ? -1 : u.length - 1; o >= 0; o--) {
f = u[o];
if (i.relative[l = f.type]) break;
if (c = i.find[l]) if (r = c(f.matches[0].replace($, ""), z.test(u[0].type) && t.parentNode || t, s)) {
u.splice(o, 1), e = r.length && u.join("");
if (!e) return S.apply(n, x.call(r, 0)), n;
break
}
}
}
return a(e, h)(r, t, s, n, z.test(e)), n
}
function mt() {
}
var n, r, i, s, o, u, a, f, l, c, h = !0, p = "undefined", d = ("sizcache" + Math.random()).replace(".", ""),
m = String, g = e.document, y = g.documentElement, b = 0, w = 0, E = [].pop, S = [].push, x = [].slice,
T = [].indexOf || function (e) {
var t = 0, n = this.length;
for (; t < n; t++) if (this[t] === e) return t;
return -1
}, N = function (e, t) {
return e[d] = t == null || t, e
}, C = function () {
var e = {}, t = [];
return N(function (n, r) {
return t.push(n) > i.cacheLength && delete e[t.shift()], e[n + " "] = r
}, e)
}, k = C(), L = C(), A = C(), O = "[\\x20\\t\\r\\n\\f]", M = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
_ = M.replace("w", "w#"), D = "([*^$|!~]?=)",
P = "\\[" + O + "*(" + M + ")" + O + "*(?:" + D + O + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + _ + ")|)|)" + O + "*\\]",
H = ":(" + M + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + P + ")|[^:]|\\\\.)*|.*))\\)|)",
B = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + O + "*((?:-\\d)?\\d*)" + O + "*\\)|)(?=[^-]|$)",
j = new RegExp("^" + O + "+|((?:^|[^\\\\])(?:\\\\.)*)" + O + "+$", "g"), F = new RegExp("^" + O + "*," + O + "*"),
I = new RegExp("^" + O + "*([\\x20\\t\\r\\n\\f>+~])" + O + "*"), q = new RegExp(H),
R = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, U = /^:not/, z = /[\x20\t\r\n\f]*[+~]/, W = /:not\($/, X = /h\d/i,
V = /input|select|textarea|button/i, $ = /\\(?!\\)/g, J = {
ID: new RegExp("^#(" + M + ")"),
CLASS: new RegExp("^\\.(" + M + ")"),
NAME: new RegExp("^\\[name=['\"]?(" + M + ")['\"]?\\]"),
TAG: new RegExp("^(" + M.replace("w", "w*") + ")"),
ATTR: new RegExp("^" + P),
PSEUDO: new RegExp("^" + H),
POS: new RegExp(B, "i"),
CHILD: new RegExp("^:(only|nth|first|last)-child(?:\\(" + O + "*(even|odd|(([+-]|)(\\d*)n|)" + O + "*(?:([+-]|)" + O + "*(\\d+)|))" + O + "*\\)|)", "i"),
needsContext: new RegExp("^" + O + "*[>+~]|" + B, "i")
}, K = function (e) {
var t = g.createElement("div");
try {
return e(t)
} catch (n) {
return !1
} finally {
t = null
}
}, Q = K(function (e) {
return e.appendChild(g.createComment("")), !e.getElementsByTagName("*").length
}), G = K(function (e) {
return e.innerHTML = "<a href='#'></a>", e.firstChild && typeof e.firstChild.getAttribute !== p && e.firstChild.getAttribute("href") === "#"
}), Y = K(function (e) {
e.innerHTML = "<select></select>";
var t = typeof e.lastChild.getAttribute("multiple");
return t !== "boolean" && t !== "string"
}), Z = K(function (e) {
return e.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", !e.getElementsByClassName || !e.getElementsByClassName("e").length ? !1 : (e.lastChild.className = "e", e.getElementsByClassName("e").length === 2)
}), et = K(function (e) {
e.id = d + 0, e.innerHTML = "<a name='" + d + "'></a><div name='" + d + "'></div>", y.insertBefore(e, y.firstChild);
var t = g.getElementsByName && g.getElementsByName(d).length === 2 + g.getElementsByName(d + 0).length;
return r = !g.getElementById(d), y.removeChild(e), t
});
try {
x.call(y.childNodes, 0)[0].nodeType
} catch (tt) {
x = function (e) {
var t, n = [];
for (; t = this[e]; e++) n.push(t);
return n
}
}
nt.matches = function (e, t) {
return nt(e, null, null, t)
}, nt.matchesSelector = function (e, t) {
return nt(t, null, null, [e]).length > 0
}, s = nt.getText = function (e) {
var t, n = "", r = 0, i = e.nodeType;
if (i) {
if (i === 1 || i === 9 || i === 11) {
if (typeof e.textContent == "string") return e.textContent;
for (e = e.firstChild; e; e = e.nextSibling) n += s(e)
} else if (i === 3 || i === 4) return e.nodeValue
} else for (; t = e[r]; r++) n += s(t);
return n
}, o = nt.isXML = function (e) {
var t = e && (e.ownerDocument || e).documentElement;
return t ? t.nodeName !== "HTML" : !1
}, u = nt.contains = y.contains ? function (e, t) {
var n = e.nodeType === 9 ? e.documentElement : e, r = t && t.parentNode;
return e === r || !!(r && r.nodeType === 1 && n.contains && n.contains(r))
} : y.compareDocumentPosition ? function (e, t) {
return t && !!(e.compareDocumentPosition(t) & 16)
} : function (e, t) {
while (t = t.parentNode) if (t === e) return !0;
return !1
}, nt.attr = function (e, t) {
var n, r = o(e);
return r || (t = t.toLowerCase()), (n = i.attrHandle[t]) ? n(e) : r || Y ? e.getAttribute(t) : (n = e.getAttributeNode(t), n ? typeof e[t] == "boolean" ? e[t] ? t : null : n.specified ? n.value : null : null)
}, i = nt.selectors = {
cacheLength: 50,
createPseudo: N,
match: J,
attrHandle: G ? {} : {
href: function (e) {
return e.getAttribute("href", 2)
}, type: function (e) {
return e.getAttribute("type")
}
},
find: {
ID: r ? function (e, t, n) {
if (typeof t.getElementById !== p && !n) {
var r = t.getElementById(e);
return r && r.parentNode ? [r] : []
}
} : function (e, n, r) {
if (typeof n.getElementById !== p && !r) {
var i = n.getElementById(e);
return i ? i.id === e || typeof i.getAttributeNode !== p && i.getAttributeNode("id").value === e ? [i] : t : []
}
}, TAG: Q ? function (e, t) {
if (typeof t.getElementsByTagName !== p) return t.getElementsByTagName(e)
} : function (e, t) {
var n = t.getElementsByTagName(e);
if (e === "*") {
var r, i = [], s = 0;
for (; r = n[s]; s++) r.nodeType === 1 && i.push(r);
return i
}
return n
}, NAME: et && function (e, t) {
if (typeof t.getElementsByName !== p) return t.getElementsByName(name)
}, CLASS: Z && function (e, t, n) {
if (typeof t.getElementsByClassName !== p && !n) return t.getElementsByClassName(e)
}
},
relative: {
">": {dir: "parentNode", first: !0},
" ": {dir: "parentNode"},
"+": {dir: "previousSibling", first: !0},
"~": {dir: "previousSibling"}
},
preFilter: {
ATTR: function (e) {
return e[1] = e[1].replace($, ""), e[3] = (e[4] || e[5] || "").replace($, ""), e[2] === "~=" && (e[3] = " " + e[3] + " "), e.slice(0, 4)
}, CHILD: function (e) {
return e[1] = e[1].toLowerCase(), e[1] === "nth" ? (e[2] || nt.error(e[0]), e[3] = +(e[3] ? e[4] + (e[5] || 1) : 2 * (e[2] === "even" || e[2] === "odd")), e[4] = +(e[6] + e[7] || e[2] === "odd")) : e[2] && nt.error(e[0]), e
}, PSEUDO: function (e) {
var t, n;
if (J.CHILD.test(e[0])) return null;
if (e[3]) e[2] = e[3]; else if (t = e[4]) q.test(t) && (n = ut(t, !0)) && (n = t.indexOf(")", t.length - n) - t.length) && (t = t.slice(0, n), e[0] = e[0].slice(0, n)), e[2] = t;
return e.slice(0, 3)
}
},
filter: {
ID: r ? function (e) {
return e = e.replace($, ""), function (t) {
return t.getAttribute("id") === e
}
} : function (e) {
return e = e.replace($, ""), function (t) {
var n = typeof t.getAttributeNode !== p && t.getAttributeNode("id");
return n && n.value === e
}
}, TAG: function (e) {
return e === "*" ? function () {
return !0
} : (e = e.replace($, "").toLowerCase(), function (t) {
return t.nodeName && t.nodeName.toLowerCase() === e
})
}, CLASS: function (e) {
var t = k[d][e + " "];
return t || (t = new RegExp("(^|" + O + ")" + e + "(" + O + "|$)")) && k(e, function (e) {
return t.test(e.className || typeof e.getAttribute !== p && e.getAttribute("class") || "")
})
}, ATTR: function (e, t, n) {
return function (r, i) {
var s = nt.attr(r, e);
return s == null ? t === "!=" : t ? (s += "", t === "=" ? s === n : t === "!=" ? s !== n : t === "^=" ? n && s.indexOf(n) === 0 : t === "*=" ? n && s.indexOf(n) > -1 : t === "$=" ? n && s.substr(s.length - n.length) === n : t === "~=" ? (" " + s + " ").indexOf(n) > -1 : t === "|=" ? s === n || s.substr(0, n.length + 1) === n + "-" : !1) : !0
}
}, CHILD: function (e, t, n, r) {
return e === "nth" ? function (e) {
var t, i, s = e.parentNode;
if (n === 1 && r === 0) return !0;
if (s) {
i = 0;
for (t = s.firstChild; t; t = t.nextSibling) if (t.nodeType === 1) {
i++;
if (e === t) break
}
}
return i -= r, i === n || i % n === 0 && i / n >= 0
} : function (t) {
var n = t;
switch (e) {
case"only":
case"first":
while (n = n.previousSibling) if (n.nodeType === 1) return !1;
if (e === "first") return !0;
n = t;
case"last":
while (n = n.nextSibling) if (n.nodeType === 1) return !1;
return !0
}
}
}, PSEUDO: function (e, t) {
var n, r = i.pseudos[e] || i.setFilters[e.toLowerCase()] || nt.error("unsupported pseudo: " + e);
return r[d] ? r(t) : r.length > 1 ? (n = [e, e, "", t], i.setFilters.hasOwnProperty(e.toLowerCase()) ? N(function (e, n) {
var i, s = r(e, t), o = s.length;
while (o--) i = T.call(e, s[o]), e[i] = !(n[i] = s[o])
}) : function (e) {
return r(e, 0, n)
}) : r
}
},
pseudos: {
not: N(function (e) {
var t = [], n = [], r = a(e.replace(j, "$1"));
return r[d] ? N(function (e, t, n, i) {
var s, o = r(e, null, i, []), u = e.length;
while (u--) if (s = o[u]) e[u] = !(t[u] = s)
}) : function (e, i, s) {
return t[0] = e, r(t, null, s, n), !n.pop()
}
}),
has: N(function (e) {
return function (t) {
return nt(e, t).length > 0
}
}),
contains: N(function (e) {
return function (t) {
return (t.textContent || t.innerText || s(t)).indexOf(e) > -1
}
}),
enabled: function (e) {
return e.disabled === !1
},
disabled: function (e) {
return e.disabled === !0
},
checked: function (e) {
var t = e.nodeName.toLowerCase();
return t === "input" && !!e.checked || t === "option" && !!e.selected
},
selected: function (e) {
return e.parentNode && e.parentNode.selectedIndex, e.selected === !0
},
parent: function (e) {
return !i.pseudos.empty(e)
},
empty: function (e) {
var t;
e = e.firstChild;
while (e) {
if (e.nodeName > "@" || (t = e.nodeType) === 3 || t === 4) return !1;
e = e.nextSibling
}
return !0
},
header: function (e) {
return X.test(e.nodeName)
},
text: function (e) {
var t, n;
return e.nodeName.toLowerCase() === "input" && (t = e.type) === "text" && ((n = e.getAttribute("type")) == null || n.toLowerCase() === t)
},
radio: rt("radio"),
checkbox: rt("checkbox"),
file: rt("file"),
password: rt("password"),
image: rt("image"),
submit: it("submit"),
reset: it("reset"),
button: function (e) {
var t = e.nodeName.toLowerCase();
return t === "input" && e.type === "button" || t === "button"
},
input: function (e) {
return V.test(e.nodeName)
},
focus: function (e) {
var t = e.ownerDocument;
return e === t.activeElement && (!t.hasFocus || t.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
},
active: function (e) {
return e === e.ownerDocument.activeElement
},
first: st(function () {
return [0]
}),
last: st(function (e, t) {
return [t - 1]
}),
eq: st(function (e, t, n) {
return [n < 0 ? n + t : n]
}),
even: st(function (e, t) {
for (var n = 0; n < t; n += 2) e.push(n);
return e
}),
odd: st(function (e, t) {
for (var n = 1; n < t; n += 2) e.push(n);
return e
}),
lt: st(function (e, t, n) {
for (var r = n < 0 ? n + t : n; --r >= 0;) e.push(r);
return e
}),
gt: st(function (e, t, n) {
for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r);
return e
})
}
}, f = y.compareDocumentPosition ? function (e, t) {
return e === t ? (l = !0, 0) : (!e.compareDocumentPosition || !t.compareDocumentPosition ? e.compareDocumentPosition : e.compareDocumentPosition(t) & 4) ? -1 : 1
} : function (e, t) {
if (e === t) return l = !0, 0;
if (e.sourceIndex && t.sourceIndex) return e.sourceIndex - t.sourceIndex;
var n, r, i = [], s = [], o = e.parentNode, u = t.parentNode, a = o;
if (o === u) return ot(e, t);
if (!o) return -1;
if (!u) return 1;
while (a) i.unshift(a), a = a.parentNode;
a = u;
while (a) s.unshift(a), a = a.parentNode;
n = i.length, r = s.length;
for (var f = 0; f < n && f < r; f++) if (i[f] !== s[f]) return ot(i[f], s[f]);
return f === n ? ot(e, s[f], -1) : ot(i[f], t, 1)
}, [0, 0].sort(f), h = !l, nt.uniqueSort = function (e) {
var t, n = [], r = 1, i = 0;
l = h, e.sort(f);
if (l) {
for (; t = e[r]; r++) t === e[r - 1] && (i = n.push(r));
while (i--) e.splice(n[i], 1)
}
return e
}, nt.error = function (e) {
throw new Error("Syntax error, unrecognized expression: " + e)
}, a = nt.compile = function (e, t) {
var n, r = [], i = [], s = A[d][e + " "];
if (!s) {
t || (t = ut(e)), n = t.length;
while (n--) s = ht(t[n]), s[d] ? r.push(s) : i.push(s);
s = A(e, pt(i, r))
}
return s
}, g.querySelectorAll && function () {
var e, t = vt, n = /'|\\/g, r = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, i = [":focus"], s = [":active"],
u = y.matchesSelector || y.mozMatchesSelector || y.webkitMatchesSelector || y.oMatchesSelector || y.msMatchesSelector;
K(function (e) {
e.innerHTML = "<select><option selected=''></option></select>", e.querySelectorAll("[selected]").length || i.push("\\[" + O + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), e.querySelectorAll(":checked").length || i.push(":checked")
}), K(function (e) {
e.innerHTML = "<p test=''></p>", e.querySelectorAll("[test^='']").length && i.push("[*^$]=" + O + "*(?:\"\"|'')"), e.innerHTML = "<input type='hidden'/>", e.querySelectorAll(":enabled").length || i.push(":enabled", ":disabled")
}), i = new RegExp(i.join("|")), vt = function (e, r, s, o, u) {
if (!o && !u && !i.test(e)) {
var a, f, l = !0, c = d, h = r, p = r.nodeType === 9 && e;
if (r.nodeType === 1 && r.nodeName.toLowerCase() !== "object") {
a = ut(e), (l = r.getAttribute("id")) ? c = l.replace(n, "\\$&") : r.setAttribute("id", c), c = "[id='" + c + "'] ", f = a.length;
while (f--) a[f] = c + a[f].join("");
h = z.test(e) && r.parentNode || r, p = a.join(",")
}
if (p) try {
return S.apply(s, x.call(h.querySelectorAll(p), 0)), s
} catch (v) {
} finally {
l || r.removeAttribute("id")
}
}
return t(e, r, s, o, u)
}, u && (K(function (t) {
e = u.call(t, "div");
try {
u.call(t, "[test!='']:sizzle"), s.push("!=", H)
} catch (n) {
}
}), s = new RegExp(s.join("|")), nt.matchesSelector = function (t, n) {
n = n.replace(r, "='$1']");
if (!o(t) && !s.test(n) && !i.test(n)) try {
var a = u.call(t, n);
if (a || e || t.document && t.document.nodeType !== 11) return a
} catch (f) {
}
return nt(n, null, null, [t]).length > 0
})
}(), i.pseudos.nth = i.pseudos.eq, i.filters = mt.prototype = i.pseudos, i.setFilters = new mt, nt.attr = v.attr, v.find = nt, v.expr = nt.selectors, v.expr[":"] = v.expr.pseudos, v.unique = nt.uniqueSort, v.text = nt.getText, v.isXMLDoc = nt.isXML, v.contains = nt.contains
}(e);
var nt = /Until$/, rt = /^(?:parents|prev(?:Until|All))/, it = /^.[^:#\[\.,]*$/, st = v.expr.match.needsContext,
ot = {children: !0, contents: !0, next: !0, prev: !0};
v.fn.extend({
find: function (e) {
var t, n, r, i, s, o, u = this;
if (typeof e != "string") return v(e).filter(function () {
for (t = 0, n = u.length; t < n; t++) if (v.contains(u[t], this)) return !0
});
o = this.pushStack("", "find", e);
for (t = 0, n = this.length; t < n; t++) {
r = o.length, v.find(e, this[t], o);
if (t > 0) for (i = r; i < o.length; i++) for (s = 0; s < r; s++) if (o[s] === o[i]) {
o.splice(i--, 1);
break
}
}
return o
}, has: function (e) {
var t, n = v(e, this), r = n.length;
return this.filter(function () {
for (t = 0; t < r; t++) if (v.contains(this, n[t])) return !0
})
}, not: function (e) {
return this.pushStack(ft(this, e, !1), "not", e)
}, filter: function (e) {
return this.pushStack(ft(this, e, !0), "filter", e)
}, is: function (e) {
return !!e && (typeof e == "string" ? st.test(e) ? v(e, this.context).index(this[0]) >= 0 : v.filter(e, this).length > 0 : this.filter(e).length > 0)
}, closest: function (e, t) {
var n, r = 0, i = this.length, s = [], o = st.test(e) || typeof e != "string" ? v(e, t || this.context) : 0;
for (; r < i; r++) {
n = this[r];
while (n && n.ownerDocument && n !== t && n.nodeType !== 11) {
if (o ? o.index(n) > -1 : v.find.matchesSelector(n, e)) {
s.push(n);
break
}
n = n.parentNode
}
}
return s = s.length > 1 ? v.unique(s) : s, this.pushStack(s, "closest", e)
}, index: function (e) {
return e ? typeof e == "string" ? v.inArray(this[0], v(e)) : v.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1
}, add: function (e, t) {
var n = typeof e == "string" ? v(e, t) : v.makeArray(e && e.nodeType ? [e] : e), r = v.merge(this.get(), n);
return this.pushStack(ut(n[0]) || ut(r[0]) ? r : v.unique(r))
}, addBack: function (e) {
return this.add(e == null ? this.prevObject : this.prevObject.filter(e))
}
}), v.fn.andSelf = v.fn.addBack, v.each({
parent: function (e) {
var t = e.parentNode;
return t && t.nodeType !== 11 ? t : null
}, parents: function (e) {
return v.dir(e, "parentNode")
}, parentsUntil: function (e, t, n) {
return v.dir(e, "parentNode", n)
}, next: function (e) {
return at(e, "nextSibling")
}, prev: function (e) {
return at(e, "previousSibling")
}, nextAll: function (e) {
return v.dir(e, "nextSibling")
}, prevAll: function (e) {
return v.dir(e, "previousSibling")
}, nextUntil: function (e, t, n) {
return v.dir(e, "nextSibling", n)
}, prevUntil: function (e, t, n) {
return v.dir(e, "previousSibling", n)
}, siblings: function (e) {
return v.sibling((e.parentNode || {}).firstChild, e)
}, children: function (e) {
return v.sibling(e.firstChild)
}, contents: function (e) {
return v.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : v.merge([], e.childNodes)
}
}, function (e, t) {
v.fn[e] = function (n, r) {
var i = v.map(this, t, n);
return nt.test(e) || (r = n), r && typeof r == "string" && (i = v.filter(r, i)), i = this.length > 1 && !ot[e] ? v.unique(i) : i, this.length > 1 && rt.test(e) && (i = i.reverse()), this.pushStack(i, e, l.call(arguments).join(","))
}
}), v.extend({
filter: function (e, t, n) {
return n && (e = ":not(" + e + ")"), t.length === 1 ? v.find.matchesSelector(t[0], e) ? [t[0]] : [] : v.find.matches(e, t)
}, dir: function (e, n, r) {
var i = [], s = e[n];
while (s && s.nodeType !== 9 && (r === t || s.nodeType !== 1 || !v(s).is(r))) s.nodeType === 1 && i.push(s), s = s[n];
return i
}, sibling: function (e, t) {
var n = [];
for (; e; e = e.nextSibling) e.nodeType === 1 && e !== t && n.push(e);
return n
}
});
var ct = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
ht = / jQuery\d+="(?:null|\d+)"/g, pt = /^\s+/,
dt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, vt = /<([\w:]+)/, mt = /<tbody/i,
gt = /<|&#?\w+;/, yt = /<(?:script|style|link)/i, bt = /<(?:script|object|embed|option|style)/i,
wt = new RegExp("<(?:" + ct + ")[\\s/>]", "i"), Et = /^(?:checkbox|radio)$/,
St = /checked\s*(?:[^=]|=\s*.checked.)/i, xt = /\/(java|ecma)script/i,
Tt = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g, Nt = {
option: [1, "<select multiple='multiple'>", "</select>"],
legend: [1, "<fieldset>", "</fieldset>"],
thead: [1, "<table>", "</table>"],
tr: [2, "<table><tbody>", "</tbody></table>"],
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
area: [1, "<map>", "</map>"],
_default: [0, "", ""]
}, Ct = lt(i), kt = Ct.appendChild(i.createElement("div"));
Nt.optgroup = Nt.option, Nt.tbody = Nt.tfoot = Nt.colgroup = Nt.caption = Nt.thead, Nt.th = Nt.td, v.support.htmlSerialize || (Nt._default = [1, "X<div>", "</div>"]), v.fn.extend({
text: function (e) {
return v.access(this, function (e) {
return e === t ? v.text(this) : this.empty().append((this[0] && this[0].ownerDocument || i).createTextNode(e))
}, null, e, arguments.length)
}, wrapAll: function (e) {
if (v.isFunction(e)) return this.each(function (t) {
v(this).wrapAll(e.call(this, t))
});
if (this[0]) {
var t = v(e, this[0].ownerDocument).eq(0).clone(!0);
this[0].parentNode && t.insertBefore(this[0]), t.map(function () {
var e = this;
while (e.firstChild && e.firstChild.nodeType === 1) e = e.firstChild;
return e
}).append(this)
}
return this
}, wrapInner: function (e) {
return v.isFunction(e) ? this.each(function (t) {
v(this).wrapInner(e.call(this, t))
}) : this.each(function () {
var t = v(this), n = t.contents();
n.length ? n.wrapAll(e) : t.append(e)
})
}, wrap: function (e) {
var t = v.isFunction(e);
return this.each(function (n) {
v(this).wrapAll(t ? e.call(this, n) : e)
})
}, unwrap: function () {
return this.parent().each(function () {
v.nodeName(this, "body") || v(this).replaceWith(this.childNodes)
}).end()
}, append: function () {
return this.domManip(arguments, !0, function (e) {
(this.nodeType === 1 || this.nodeType === 11) && this.appendChild(e)
})
}, prepend: function () {
return this.domManip(arguments, !0, function (e) {
(this.nodeType === 1 || this.nodeType === 11) && this.insertBefore(e, this.firstChild)
})
}, before: function () {
if (!ut(this[0])) return this.domManip(arguments, !1, function (e) {
this.parentNode.insertBefore(e, this)
});
if (arguments.length) {
var e = v.clean(arguments);
return this.pushStack(v.merge(e, this), "before", this.selector)
}
}, after: function () {
if (!ut(this[0])) return this.domManip(arguments, !1, function (e) {
this.parentNode.insertBefore(e, this.nextSibling)
});
if (arguments.length) {
var e = v.clean(arguments);
return this.pushStack(v.merge(this, e), "after", this.selector)
}
}, remove: function (e, t) {
var n, r = 0;
for (; (n = this[r]) != null; r++) if (!e || v.filter(e, [n]).length) !t && n.nodeType === 1 && (v.cleanData(n.getElementsByTagName("*")), v.cleanData([n])), n.parentNode && n.parentNode.removeChild(n);
return this
}, empty: function () {
var e, t = 0;
for (; (e = this[t]) != null; t++) {
e.nodeType === 1 && v.cleanData(e.getElementsByTagName("*"));
while (e.firstChild) e.removeChild(e.firstChild)
}
return this
}, clone: function (e, t) {
return e = e == null ? !1 : e, t = t == null ? e : t, this.map(function () {
return v.clone(this, e, t)
})
}, html: function (e) {
return v.access(this, function (e) {
var n = this[0] || {}, r = 0, i = this.length;
if (e === t) return n.nodeType === 1 ? n.innerHTML.replace(ht, "") : t;
if (typeof e == "string" && !yt.test(e) && (v.support.htmlSerialize || !wt.test(e)) && (v.support.leadingWhitespace || !pt.test(e)) && !Nt[(vt.exec(e) || ["", ""])[1].toLowerCase()]) {
e = e.replace(dt, "<$1></$2>");
try {
for (; r < i; r++) n = this[r] || {}, n.nodeType === 1 && (v.cleanData(n.getElementsByTagName("*")), n.innerHTML = e);
n = 0
} catch (s) {
}
}
n && this.empty().append(e)
}, null, e, arguments.length)
}, replaceWith: function (e) {
return ut(this[0]) ? this.length ? this.pushStack(v(v.isFunction(e) ? e() : e), "replaceWith", e) : this : v.isFunction(e) ? this.each(function (t) {
var n = v(this), r = n.html();
n.replaceWith(e.call(this, t, r))
}) : (typeof e != "string" && (e = v(e).detach()), this.each(function () {
var t = this.nextSibling, n = this.parentNode;
v(this).remove(), t ? v(t).before(e) : v(n).append(e)
}))
}, detach: function (e) {
return this.remove(e, !0)
}, domManip: function (e, n, r) {
e = [].concat.apply([], e);
var i, s, o, u, a = 0, f = e[0], l = [], c = this.length;
if (!v.support.checkClone && c > 1 && typeof f == "string" && St.test(f)) return this.each(function () {
v(this).domManip(e, n, r)
});
if (v.isFunction(f)) return this.each(function (i) {
var s = v(this);
e[0] = f.call(this, i, n ? s.html() : t), s.domManip(e, n, r)
});
if (this[0]) {
i = v.buildFragment(e, this, l), o = i.fragment, s = o.firstChild, o.childNodes.length === 1 && (o = s);
if (s) {
n = n && v.nodeName(s, "tr");
for (u = i.cacheable || c - 1; a < c; a++) r.call(n && v.nodeName(this[a], "table") ? Lt(this[a], "tbody") : this[a], a === u ? o : v.clone(o, !0, !0))
}
o = s = null, l.length && v.each(l, function (e, t) {
t.src ? v.ajax ? v.ajax({
url: t.src,
type: "GET",
dataType: "script",
async: !1,
global: !1,
"throws": !0
}) : v.error("no ajax") : v.globalEval((t.text || t.textContent || t.innerHTML || "").replace(Tt, "")), t.parentNode && t.parentNode.removeChild(t)
})
}
return this
}
}), v.buildFragment = function (e, n, r) {
var s, o, u, a = e[0];
return n = n || i, n = !n.nodeType && n[0] || n, n = n.ownerDocument || n, e.length === 1 && typeof a == "string" && a.length < 512 && n === i && a.charAt(0) === "<" && !bt.test(a) && (v.support.checkClone || !St.test(a)) && (v.support.html5Clone || !wt.test(a)) && (o = !0, s = v.fragments[a], u = s !== t), s || (s = n.createDocumentFragment(), v.clean(e, n, s, r), o && (v.fragments[a] = u && s)), {
fragment: s,
cacheable: o
}
}, v.fragments = {}, v.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function (e, t) {
v.fn[e] = function (n) {
var r, i = 0, s = [], o = v(n), u = o.length, a = this.length === 1 && this[0].parentNode;
if ((a == null || a && a.nodeType === 11 && a.childNodes.length === 1) && u === 1) return o[t](this[0]), this;
for (; i < u; i++) r = (i > 0 ? this.clone(!0) : this).get(), v(o[i])[t](r), s = s.concat(r);
return this.pushStack(s, e, o.selector)
}
}), v.extend({
clone: function (e, t, n) {
var r, i, s, o;
v.support.html5Clone || v.isXMLDoc(e) || !wt.test("<" + e.nodeName + ">") ? o = e.cloneNode(!0) : (kt.innerHTML = e.outerHTML, kt.removeChild(o = kt.firstChild));
if ((!v.support.noCloneEvent || !v.support.noCloneChecked) && (e.nodeType === 1 || e.nodeType === 11) && !v.isXMLDoc(e)) {
Ot(e, o), r = Mt(e), i = Mt(o);
for (s = 0; r[s]; ++s) i[s] && Ot(r[s], i[s])
}
if (t) {
At(e, o);
if (n) {
r = Mt(e), i = Mt(o);
for (s = 0; r[s]; ++s) At(r[s], i[s])
}
}
return r = i = null, o
}, clean: function (e, t, n, r) {
var s, o, u, a, f, l, c, h, p, d, m, g, y = t === i && Ct, b = [];
if (!t || typeof t.createDocumentFragment == "undefined") t = i;
for (s = 0; (u = e[s]) != null; s++) {
typeof u == "number" && (u += "");
if (!u) continue;
if (typeof u == "string") if (!gt.test(u)) u = t.createTextNode(u); else {
y = y || lt(t), c = t.createElement("div"), y.appendChild(c), u = u.replace(dt, "<$1></$2>"), a = (vt.exec(u) || ["", ""])[1].toLowerCase(), f = Nt[a] || Nt._default, l = f[0], c.innerHTML = f[1] + u + f[2];
while (l--) c = c.lastChild;
if (!v.support.tbody) {
h = mt.test(u), p = a === "table" && !h ? c.firstChild && c.firstChild.childNodes : f[1] === "<table>" && !h ? c.childNodes : [];
for (o = p.length - 1; o >= 0; --o) v.nodeName(p[o], "tbody") && !p[o].childNodes.length && p[o].parentNode.removeChild(p[o])
}
!v.support.leadingWhitespace && pt.test(u) && c.insertBefore(t.createTextNode(pt.exec(u)[0]), c.firstChild), u = c.childNodes, c.parentNode.removeChild(c)
}
u.nodeType ? b.push(u) : v.merge(b, u)
}
c && (u = c = y = null);
if (!v.support.appendChecked) for (s = 0; (u = b[s]) != null; s++) v.nodeName(u, "input") ? _t(u) : typeof u.getElementsByTagName != "undefined" && v.grep(u.getElementsByTagName("input"), _t);
if (n) {
m = function (e) {
if (!e.type || xt.test(e.type)) return r ? r.push(e.parentNode ? e.parentNode.removeChild(e) : e) : n.appendChild(e)
};
for (s = 0; (u = b[s]) != null; s++) if (!v.nodeName(u, "script") || !m(u)) n.appendChild(u), typeof u.getElementsByTagName != "undefined" && (g = v.grep(v.merge([], u.getElementsByTagName("script")), m), b.splice.apply(b, [s + 1, 0].concat(g)), s += g.length)
}
return b
}, cleanData: function (e, t) {
var n, r, i, s, o = 0, u = v.expando, a = v.cache, f = v.support.deleteExpando, l = v.event.special;
for (; (i = e[o]) != null; o++) if (t || v.acceptData(i)) {
r = i[u], n = r && a[r];
if (n) {
if (n.events) for (s in n.events) l[s] ? v.event.remove(i, s) : v.removeEvent(i, s, n.handle);
a[r] && (delete a[r], f ? delete i[u] : i.removeAttribute ? i.removeAttribute(u) : i[u] = null, v.deletedIds.push(r))
}
}
}
}), function () {
var e, t;
v.uaMatch = function (e) {
e = e.toLowerCase();
var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || e.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || [];
return {browser: t[1] || "", version: t[2] || "0"}
}, e = v.uaMatch(o.userAgent), t = {}, e.browser && (t[e.browser] = !0, t.version = e.version), t.chrome ? t.webkit = !0 : t.webkit && (t.safari = !0), v.browser = t, v.sub = function () {
function e(t, n) {
return new e.fn.init(t, n)
}
v.extend(!0, e, this), e.superclass = this, e.fn = e.prototype = this(), e.fn.constructor = e, e.sub = this.sub, e.fn.init = function (r, i) {
return i && i instanceof v && !(i instanceof e) && (i = e(i)), v.fn.init.call(this, r, i, t)
}, e.fn.init.prototype = e.fn;
var t = e(i);
return e
}
}();
var Dt, Pt, Ht, Bt = /alpha\([^)]*\)/i, jt = /opacity=([^)]*)/, Ft = /^(top|right|bottom|left)$/,
It = /^(none|table(?!-c[ea]).+)/, qt = /^margin/, Rt = new RegExp("^(" + m + ")(.*)$", "i"),
Ut = new RegExp("^(" + m + ")(?!px)[a-z%]+$", "i"), zt = new RegExp("^([-+])=(" + m + ")", "i"),
Wt = {BODY: "block"}, Xt = {position: "absolute", visibility: "hidden", display: "block"},
Vt = {letterSpacing: 0, fontWeight: 400}, $t = ["Top", "Right", "Bottom", "Left"],
Jt = ["Webkit", "O", "Moz", "ms"], Kt = v.fn.toggle;
v.fn.extend({
css: function (e, n) {
return v.access(this, function (e, n, r) {
return r !== t ? v.style(e, n, r) : v.css(e, n)
}, e, n, arguments.length > 1)
}, show: function () {
return Yt(this, !0)
}, hide: function () {
return Yt(this)
}, toggle: function (e, t) {
var n = typeof e == "boolean";
return v.isFunction(e) && v.isFunction(t) ? Kt.apply(this, arguments) : this.each(function () {
(n ? e : Gt(this)) ? v(this).show() : v(this).hide()
})
}
}), v.extend({
cssHooks: {
opacity: {
get: function (e, t) {
if (t) {
var n = Dt(e, "opacity");
return n === "" ? "1" : n
}
}
}
},
cssNumber: {
fillOpacity: !0,
fontWeight: !0,
lineHeight: !0,
opacity: !0,
orphans: !0,
widows: !0,
zIndex: !0,
zoom: !0
},
cssProps: {"float": v.support.cssFloat ? "cssFloat" : "styleFloat"},
style: function (e, n, r, i) {
if (!e || e.nodeType === 3 || e.nodeType === 8 || !e.style) return;
var s, o, u, a = v.camelCase(n), f = e.style;
n = v.cssProps[a] || (v.cssProps[a] = Qt(f, a)), u = v.cssHooks[n] || v.cssHooks[a];
if (r === t) return u && "get" in u && (s = u.get(e, !1, i)) !== t ? s : f[n];
o = typeof r, o === "string" && (s = zt.exec(r)) && (r = (s[1] + 1) * s[2] + parseFloat(v.css(e, n)), o = "number");
if (r == null || o === "number" && isNaN(r)) return;
o === "number" && !v.cssNumber[a] && (r += "px");
if (!u || !("set" in u) || (r = u.set(e, r, i)) !== t) try {
f[n] = r
} catch (l) {
}
},
css: function (e, n, r, i) {
var s, o, u, a = v.camelCase(n);
return n = v.cssProps[a] || (v.cssProps[a] = Qt(e.style, a)), u = v.cssHooks[n] || v.cssHooks[a], u && "get" in u && (s = u.get(e, !0, i)), s === t && (s = Dt(e, n)), s === "normal" && n in Vt && (s = Vt[n]), r || i !== t ? (o = parseFloat(s), r || v.isNumeric(o) ? o || 0 : s) : s
},
swap: function (e, t, n) {
var r, i, s = {};
for (i in t) s[i] = e.style[i], e.style[i] = t[i];
r = n.call(e);
for (i in t) e.style[i] = s[i];
return r
}
}), e.getComputedStyle ? Dt = function (t, n) {
var r, i, s, o, u = e.getComputedStyle(t, null), a = t.style;
return u && (r = u.getPropertyValue(n) || u[n], r === "" && !v.contains(t.ownerDocument, t) && (r = v.style(t, n)), Ut.test(r) && qt.test(n) && (i = a.width, s = a.minWidth, o = a.maxWidth, a.minWidth = a.maxWidth = a.width = r, r = u.width, a.width = i, a.minWidth = s, a.maxWidth = o)), r
} : i.documentElement.currentStyle && (Dt = function (e, t) {
var n, r, i = e.currentStyle && e.currentStyle[t], s = e.style;
return i == null && s && s[t] && (i = s[t]), Ut.test(i) && !Ft.test(t) && (n = s.left, r = e.runtimeStyle && e.runtimeStyle.left, r && (e.runtimeStyle.left = e.currentStyle.left), s.left = t === "fontSize" ? "1em" : i, i = s.pixelLeft + "px", s.left = n, r && (e.runtimeStyle.left = r)), i === "" ? "auto" : i
}), v.each(["height", "width"], function (e, t) {
v.cssHooks[t] = {
get: function (e, n, r) {
if (n) return e.offsetWidth === 0 && It.test(Dt(e, "display")) ? v.swap(e, Xt, function () {
return tn(e, t, r)
}) : tn(e, t, r)
}, set: function (e, n, r) {
return Zt(e, n, r ? en(e, t, r, v.support.boxSizing && v.css(e, "boxSizing") === "border-box") : 0)
}
}
}), v.support.opacity || (v.cssHooks.opacity = {
get: function (e, t) {
return jt.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : ""
}, set: function (e, t) {
var n = e.style, r = e.currentStyle, i = v.isNumeric(t) ? "alpha(opacity=" + t * 100 + ")" : "",
s = r && r.filter || n.filter || "";
n.zoom = 1;
if (t >= 1 && v.trim(s.replace(Bt, "")) === "" && n.removeAttribute) {
n.removeAttribute("filter");
if (r && !r.filter) return
}
n.filter = Bt.test(s) ? s.replace(Bt, i) : s + " " + i
}
}), v(function () {
v.support.reliableMarginRight || (v.cssHooks.marginRight = {
get: function (e, t) {
return v.swap(e, {display: "inline-block"}, function () {
if (t) return Dt(e, "marginRight")
})
}
}), !v.support.pixelPosition && v.fn.position && v.each(["top", "left"], function (e, t) {
v.cssHooks[t] = {
get: function (e, n) {
if (n) {
var r = Dt(e, t);
return Ut.test(r) ? v(e).position()[t] + "px" : r
}
}
}
})
}), v.expr && v.expr.filters && (v.expr.filters.hidden = function (e) {
return e.offsetWidth === 0 && e.offsetHeight === 0 || !v.support.reliableHiddenOffsets && (e.style && e.style.display || Dt(e, "display")) === "none"
}, v.expr.filters.visible = function (e) {
return !v.expr.filters.hidden(e)
}), v.each({margin: "", padding: "", border: "Width"}, function (e, t) {
v.cssHooks[e + t] = {
expand: function (n) {
var r, i = typeof n == "string" ? n.split(" ") : [n], s = {};
for (r = 0; r < 4; r++) s[e + $t[r] + t] = i[r] || i[r - 2] || i[0];
return s
}
}, qt.test(e) || (v.cssHooks[e + t].set = Zt)
});
var rn = /%20/g, sn = /\[\]$/, on = /\r?\n/g,
un = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
an = /^(?:select|textarea)/i;
v.fn.extend({
serialize: function () {
return v.param(this.serializeArray())
}, serializeArray: function () {
return this.map(function () {
return this.elements ? v.makeArray(this.elements) : this
}).filter(function () {
return this.name && !this.disabled && (this.checked || an.test(this.nodeName) || un.test(this.type))
}).map(function (e, t) {
var n = v(this).val();
return n == null ? null : v.isArray(n) ? v.map(n, function (e, n) {
return {name: t.name, value: e.replace(on, "\r\n")}
}) : {name: t.name, value: n.replace(on, "\r\n")}
}).get()
}
}), v.param = function (e, n) {
var r, i = [], s = function (e, t) {
t = v.isFunction(t) ? t() : t == null ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
};
n === t && (n = v.ajaxSettings && v.ajaxSettings.traditional);
if (v.isArray(e) || e.jquery && !v.isPlainObject(e)) v.each(e, function () {
s(this.name, this.value)
}); else for (r in e) fn(r, e[r], n, s);
return i.join("&").replace(rn, "+")
};
var ln, cn, hn = /#.*$/, pn = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
dn = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, vn = /^(?:GET|HEAD)$/, mn = /^\/\//, gn = /\?/,
yn = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, bn = /([?&])_=[^&]*/,
wn = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, En = v.fn.load, Sn = {}, xn = {}, Tn = ["*/"] + ["*"];
try {
cn = s.href
} catch (Nn) {
cn = i.createElement("a"), cn.href = "", cn = cn.href
}
ln = wn.exec(cn.toLowerCase()) || [], v.fn.load = function (e, n, r) {
if (typeof e != "string" && En) return En.apply(this, arguments);
if (!this.length) return this;
var i, s, o, u = this, a = e.indexOf(" ");
return a >= 0 && (i = e.slice(a, e.length), e = e.slice(0, a)), v.isFunction(n) ? (r = n, n = t) : n && typeof n == "object" && (s = "POST"), v.ajax({
url: e,
type: s,
dataType: "html",
data: n,
complete: function (e, t) {
r && u.each(r, o || [e.responseText, t, e])
}
}).done(function (e) {
o = arguments, u.html(i ? v("<div>").append(e.replace(yn, "")).find(i) : e)
}), this
}, v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function (e, t) {
v.fn[t] = function (e) {
return this.on(t, e)
}
}), v.each(["get", "post"], function (e, n) {
v[n] = function (e, r, i, s) {
return v.isFunction(r) && (s = s || i, i = r, r = t), v.ajax({type: n, url: e, data: r, success: i, dataType: s})
}
}), v.extend({
getScript: function (e, n) {
return v.get(e, t, n, "script")
},
getJSON: function (e, t, n) {
return v.get(e, t, n, "json")
},
ajaxSetup: function (e, t) {
return t ? Ln(e, v.ajaxSettings) : (t = e, e = v.ajaxSettings), Ln(e, t), e
},
ajaxSettings: {
url: cn,
isLocal: dn.test(ln[1]),
global: !0,
type: "GET",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
processData: !0,
async: !0,
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
text: "text/plain",
json: "application/json, text/javascript",
"*": Tn
},
contents: {xml: /xml/, html: /html/, json: /json/},
responseFields: {xml: "responseXML", text: "responseText"},
converters: {"* text": e.String, "text html": !0, "text json": v.parseJSON, "text xml": v.parseXML},
flatOptions: {context: !0, url: !0}
},
ajaxPrefilter: Cn(Sn),
ajaxTransport: Cn(xn),
ajax: function (e, n) {
function T(e, n, s, a) {
var l, y, b, w, S, T = n;
if (E === 2) return;
E = 2, u && clearTimeout(u), o = t, i = a || "", x.readyState = e > 0 ? 4 : 0, s && (w = An(c, x, s));
if (e >= 200 && e < 300 || e === 304) c.ifModified && (S = x.getResponseHeader("Last-Modified"), S && (v.lastModified[r] = S), S = x.getResponseHeader("Etag"), S && (v.etag[r] = S)), e === 304 ? (T = "notmodified", l = !0) : (l = On(c, w), T = l.state, y = l.data, b = l.error, l = !b); else {
b = T;
if (!T || e) T = "error", e < 0 && (e = 0)
}
x.status = e, x.statusText = (n || T) + "", l ? d.resolveWith(h, [y, T, x]) : d.rejectWith(h, [x, T, b]), x.statusCode(g), g = t, f && p.trigger("ajax" + (l ? "Success" : "Error"), [x, c, l ? y : b]), m.fireWith(h, [x, T]), f && (p.trigger("ajaxComplete", [x, c]), --v.active || v.event.trigger("ajaxStop"))
}
typeof e == "object" && (n = e, e = t), n = n || {};
var r, i, s, o, u, a, f, l, c = v.ajaxSetup({}, n), h = c.context || c,
p = h !== c && (h.nodeType || h instanceof v) ? v(h) : v.event, d = v.Deferred(),
m = v.Callbacks("once memory"), g = c.statusCode || {}, b = {}, w = {}, E = 0, S = "canceled", x = {
readyState: 0, setRequestHeader: function (e, t) {
if (!E) {
var n = e.toLowerCase();
e = w[n] = w[n] || e, b[e] = t
}
return this
}, getAllResponseHeaders: function () {
return E === 2 ? i : null
}, getResponseHeader: function (e) {
var n;
if (E === 2) {
if (!s) {
s = {};
while (n = pn.exec(i)) s[n[1].toLowerCase()] = n[2]
}
n = s[e.toLowerCase()]
}
return n === t ? null : n
}, overrideMimeType: function (e) {
return E || (c.mimeType = e), this
}, abort: function (e) {
return e = e || S, o && o.abort(e), T(0, e), this
}
};
d.promise(x), x.success = x.done, x.error = x.fail, x.complete = m.add, x.statusCode = function (e) {
if (e) {
var t;
if (E < 2) for (t in e) g[t] = [g[t], e[t]]; else t = e[x.status], x.always(t)
}
return this
}, c.url = ((e || c.url) + "").replace(hn, "").replace(mn, ln[1] + "//"), c.dataTypes = v.trim(c.dataType || "*").toLowerCase().split(y), c.crossDomain == null && (a = wn.exec(c.url.toLowerCase()), c.crossDomain = !(!a || a[1] === ln[1] && a[2] === ln[2] && (a[3] || (a[1] === "http:" ? 80 : 443)) == (ln[3] || (ln[1] === "http:" ? 80 : 443)))), c.data && c.processData && typeof c.data != "string" && (c.data = v.param(c.data, c.traditional)), kn(Sn, c, n, x);
if (E === 2) return x;
f = c.global, c.type = c.type.toUpperCase(), c.hasContent = !vn.test(c.type), f && v.active++ === 0 && v.event.trigger("ajaxStart");
if (!c.hasContent) {
c.data && (c.url += (gn.test(c.url) ? "&" : "?") + c.data, delete c.data), r = c.url;
if (c.cache === !1) {
var N = v.now(), C = c.url.replace(bn, "$1_=" + N);
c.url = C + (C === c.url ? (gn.test(c.url) ? "&" : "?") + "_=" + N : "")
}
}
(c.data && c.hasContent && c.contentType !== !1 || n.contentType) && x.setRequestHeader("Content-Type", c.contentType), c.ifModified && (r = r || c.url, v.lastModified[r] && x.setRequestHeader("If-Modified-Since", v.lastModified[r]), v.etag[r] && x.setRequestHeader("If-None-Match", v.etag[r])), x.setRequestHeader("Accept", c.dataTypes[0] && c.accepts[c.dataTypes[0]] ? c.accepts[c.dataTypes[0]] + (c.dataTypes[0] !== "*" ? ", " + Tn + "; q=0.01" : "") : c.accepts["*"]);
for (l in c.headers) x.setRequestHeader(l, c.headers[l]);
if (!c.beforeSend || c.beforeSend.call(h, x, c) !== !1 && E !== 2) {
S = "abort";
for (l in{success: 1, error: 1, complete: 1}) x[l](c[l]);
o = kn(xn, c, n, x);
if (!o) T(-1, "No Transport"); else {
x.readyState = 1, f && p.trigger("ajaxSend", [x, c]), c.async && c.timeout > 0 && (u = setTimeout(function () {
x.abort("timeout")
}, c.timeout));
try {
E = 1, o.send(b, T)
} catch (k) {
if (!(E < 2)) throw k;
T(-1, k)
}
}
return x
}
return x.abort()
},
active: 0,
lastModified: {},
etag: {}
});
var Mn = [], _n = /\?/, Dn = /(=)\?(?=&|$)|\?\?/, Pn = v.now();
v.ajaxSetup({
jsonp: "callback", jsonpCallback: function () {
var e = Mn.pop() || v.expando + "_" + Pn++;
return this[e] = !0, e
}
}), v.ajaxPrefilter("json jsonp", function (n, r, i) {
var s, o, u, a = n.data, f = n.url, l = n.jsonp !== !1, c = l && Dn.test(f),
h = l && !c && typeof a == "string" && !(n.contentType || "").indexOf("application/x-www-form-urlencoded") && Dn.test(a);
if (n.dataTypes[0] === "jsonp" || c || h) return s = n.jsonpCallback = v.isFunction(n.jsonpCallback) ? n.jsonpCallback() : n.jsonpCallback, o = e[s], c ? n.url = f.replace(Dn, "$1" + s) : h ? n.data = a.replace(Dn, "$1" + s) : l && (n.url += (_n.test(f) ? "&" : "?") + n.jsonp + "=" + s), n.converters["script json"] = function () {
return u || v.error(s + " was not called"), u[0]
}, n.dataTypes[0] = "json", e[s] = function () {
u = arguments
}, i.always(function () {
e[s] = o, n[s] && (n.jsonpCallback = r.jsonpCallback, Mn.push(s)), u && v.isFunction(o) && o(u[0]), u = o = t
}), "script"
}), v.ajaxSetup({
accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
contents: {script: /javascript|ecmascript/},
converters: {
"text script": function (e) {
return v.globalEval(e), e
}
}
}), v.ajaxPrefilter("script", function (e) {
e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
}), v.ajaxTransport("script", function (e) {
if (e.crossDomain) {
var n, r = i.head || i.getElementsByTagName("head")[0] || i.documentElement;
return {
send: function (s, o) {
n = i.createElement("script"), n.async = "async", e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function (e, i) {
if (i || !n.readyState || /loaded|complete/.test(n.readyState)) n.onload = n.onreadystatechange = null, r && n.parentNode && r.removeChild(n), n = t, i || o(200, "success")
}, r.insertBefore(n, r.firstChild)
}, abort: function () {
n && n.onload(0, 1)
}
}
}
});
var Hn, Bn = e.ActiveXObject ? function () {
for (var e in Hn) Hn[e](0, 1)
} : !1, jn = 0;
v.ajaxSettings.xhr = e.ActiveXObject ? function () {
return !this.isLocal && Fn() || In()
} : Fn, function (e) {
v.extend(v.support, {ajax: !!e, cors: !!e && "withCredentials" in e})
}(v.ajaxSettings.xhr()), v.support.ajax && v.ajaxTransport(function (n) {
if (!n.crossDomain || v.support.cors) {
var r;
return {
send: function (i, s) {
var o, u, a = n.xhr();
n.username ? a.open(n.type, n.url, n.async, n.username, n.password) : a.open(n.type, n.url, n.async);
if (n.xhrFields) for (u in n.xhrFields) a[u] = n.xhrFields[u];
n.mimeType && a.overrideMimeType && a.overrideMimeType(n.mimeType), !n.crossDomain && !i["X-Requested-With"] && (i["X-Requested-With"] = "XMLHttpRequest");
try {
for (u in i) a.setRequestHeader(u, i[u])
} catch (f) {
}
a.send(n.hasContent && n.data || null), r = function (e, i) {
var u, f, l, c, h;
try {
if (r && (i || a.readyState === 4)) {
r = t, o && (a.onreadystatechange = v.noop, Bn && delete Hn[o]);
if (i) a.readyState !== 4 && a.abort(); else {
u = a.status, l = a.getAllResponseHeaders(), c = {}, h = a.responseXML, h && h.documentElement && (c.xml = h);
try {
c.text = a.responseText
} catch (p) {
}
try {
f = a.statusText
} catch (p) {
f = ""
}
!u && n.isLocal && !n.crossDomain ? u = c.text ? 200 : 404 : u === 1223 && (u = 204)
}
}
} catch (d) {
i || s(-1, d)
}
c && s(u, f, c, l)
}, n.async ? a.readyState === 4 ? setTimeout(r, 0) : (o = ++jn, Bn && (Hn || (Hn = {}, v(e).unload(Bn)), Hn[o] = r), a.onreadystatechange = r) : r()
}, abort: function () {
r && r(0, 1)
}
}
}
});
var qn, Rn, Un = /^(?:toggle|show|hide)$/, zn = new RegExp("^(?:([-+])=|)(" + m + ")([a-z%]*)$", "i"),
Wn = /queueHooks$/, Xn = [Gn], Vn = {
"*": [function (e, t) {
var n, r, i = this.createTween(e, t), s = zn.exec(t), o = i.cur(), u = +o || 0, a = 1, f = 20;
if (s) {
n = +s[2], r = s[3] || (v.cssNumber[e] ? "" : "px");
if (r !== "px" && u) {
u = v.css(i.elem, e, !0) || n || 1;
do a = a || ".5", u /= a, v.style(i.elem, e, u + r); while (a !== (a = i.cur() / o) && a !== 1 && --f)
}
i.unit = r, i.start = u, i.end = s[1] ? u + (s[1] + 1) * n : n
}
return i
}]
};
v.Animation = v.extend(Kn, {
tweener: function (e, t) {
v.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" ");
var n, r = 0, i = e.length;
for (; r < i; r++) n = e[r], Vn[n] = Vn[n] || [], Vn[n].unshift(t)
}, prefilter: function (e, t) {
t ? Xn.unshift(e) : Xn.push(e)
}
}), v.Tween = Yn, Yn.prototype = {
constructor: Yn, init: function (e, t, n, r, i, s) {
this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = s || (v.cssNumber[n] ? "" : "px")
}, cur: function () {
var e = Yn.propHooks[this.prop];
return e && e.get ? e.get(this) : Yn.propHooks._default.get(this)
}, run: function (e) {
var t, n = Yn.propHooks[this.prop];
return this.options.duration ? this.pos = t = v.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : Yn.propHooks._default.set(this), this
}
}, Yn.prototype.init.prototype = Yn.prototype, Yn.propHooks = {
_default: {
get: function (e) {
var t;
return e.elem[e.prop] == null || !!e.elem.style && e.elem.style[e.prop] != null ? (t = v.css(e.elem, e.prop, !1, ""), !t || t === "auto" ? 0 : t) : e.elem[e.prop]
}, set: function (e) {
v.fx.step[e.prop] ? v.fx.step[e.prop](e) : e.elem.style && (e.elem.style[v.cssProps[e.prop]] != null || v.cssHooks[e.prop]) ? v.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
}
}
}, Yn.propHooks.scrollTop = Yn.propHooks.scrollLeft = {
set: function (e) {
e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
}
}, v.each(["toggle", "show", "hide"], function (e, t) {
var n = v.fn[t];
v.fn[t] = function (r, i, s) {
return r == null || typeof r == "boolean" || !e && v.isFunction(r) && v.isFunction(i) ? n.apply(this, arguments) : this.animate(Zn(t, !0), r, i, s)
}
}), v.fn.extend({
fadeTo: function (e, t, n, r) {
return this.filter(Gt).css("opacity", 0).show().end().animate({opacity: t}, e, n, r)
}, animate: function (e, t, n, r) {
var i = v.isEmptyObject(e), s = v.speed(t, n, r), o = function () {
var t = Kn(this, v.extend({}, e), s);
i && t.stop(!0)
};
return i || s.queue === !1 ? this.each(o) : this.queue(s.queue, o)
}, stop: function (e, n, r) {
var i = function (e) {
var t = e.stop;
delete e.stop, t(r)
};
return typeof e != "string" && (r = n, n = e, e = t), n && e !== !1 && this.queue(e || "fx", []), this.each(function () {
var t = !0, n = e != null && e + "queueHooks", s = v.timers, o = v._data(this);
if (n) o[n] && o[n].stop && i(o[n]); else for (n in o) o[n] && o[n].stop && Wn.test(n) && i(o[n]);
for (n = s.length; n--;) s[n].elem === this && (e == null || s[n].queue === e) && (s[n].anim.stop(r), t = !1, s.splice(n, 1));
(t || !r) && v.dequeue(this, e)
})
}
}), v.each({
slideDown: Zn("show"),
slideUp: Zn("hide"),
slideToggle: Zn("toggle"),
fadeIn: {opacity: "show"},
fadeOut: {opacity: "hide"},
fadeToggle: {opacity: "toggle"}
}, function (e, t) {
v.fn[e] = function (e, n, r) {
return this.animate(t, e, n, r)
}
}), v.speed = function (e, t, n) {
var r = e && typeof e == "object" ? v.extend({}, e) : {
complete: n || !n && t || v.isFunction(e) && e,
duration: e,
easing: n && t || t && !v.isFunction(t) && t
};
r.duration = v.fx.off ? 0 : typeof r.duration == "number" ? r.duration : r.duration in v.fx.speeds ? v.fx.speeds[r.duration] : v.fx.speeds._default;
if (r.queue == null || r.queue === !0) r.queue = "fx";
return r.old = r.complete, r.complete = function () {
v.isFunction(r.old) && r.old.call(this), r.queue && v.dequeue(this, r.queue)
}, r
}, v.easing = {
linear: function (e) {
return e
}, swing: function (e) {
return .5 - Math.cos(e * Math.PI) / 2
}
}, v.timers = [], v.fx = Yn.prototype.init, v.fx.tick = function () {
var e, n = v.timers, r = 0;
qn = v.now();
for (; r < n.length; r++) e = n[r], !e() && n[r] === e && n.splice(r--, 1);
n.length || v.fx.stop(), qn = t
}, v.fx.timer = function (e) {
e() && v.timers.push(e) && !Rn && (Rn = setInterval(v.fx.tick, v.fx.interval))
}, v.fx.interval = 13, v.fx.stop = function () {
clearInterval(Rn), Rn = null
}, v.fx.speeds = {
slow: 600,
fast: 200,
_default: 400
}, v.fx.step = {}, v.expr && v.expr.filters && (v.expr.filters.animated = function (e) {
return v.grep(v.timers, function (t) {
return e === t.elem
}).length
});
var er = /^(?:body|html)$/i;
v.fn.offset = function (e) {
if (arguments.length) return e === t ? this : this.each(function (t) {
v.offset.setOffset(this, e, t)
});
var n, r, i, s, o, u, a, f = {top: 0, left: 0}, l = this[0], c = l && l.ownerDocument;
if (!c) return;
return (r = c.body) === l ? v.offset.bodyOffset(l) : (n = c.documentElement, v.contains(n, l) ? (typeof l.getBoundingClientRect != "undefined" && (f = l.getBoundingClientRect()), i = tr(c), s = n.clientTop || r.clientTop || 0, o = n.clientLeft || r.clientLeft || 0, u = i.pageYOffset || n.scrollTop, a = i.pageXOffset || n.scrollLeft, {
top: f.top + u - s,
left: f.left + a - o
}) : f)
}, v.offset = {
bodyOffset: function (e) {
var t = e.offsetTop, n = e.offsetLeft;
return v.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(v.css(e, "marginTop")) || 0, n += parseFloat(v.css(e, "marginLeft")) || 0), {
top: t,
left: n
}
}, setOffset: function (e, t, n) {
var r = v.css(e, "position");
r === "static" && (e.style.position = "relative");
var i = v(e), s = i.offset(), o = v.css(e, "top"), u = v.css(e, "left"),
a = (r === "absolute" || r === "fixed") && v.inArray("auto", [o, u]) > -1, f = {}, l = {}, c, h;
a ? (l = i.position(), c = l.top, h = l.left) : (c = parseFloat(o) || 0, h = parseFloat(u) || 0), v.isFunction(t) && (t = t.call(e, n, s)), t.top != null && (f.top = t.top - s.top + c), t.left != null && (f.left = t.left - s.left + h), "using" in t ? t.using.call(e, f) : i.css(f)
}
}, v.fn.extend({
position: function () {
if (!this[0]) return;
var e = this[0], t = this.offsetParent(), n = this.offset(),
r = er.test(t[0].nodeName) ? {top: 0, left: 0} : t.offset();
return n.top -= parseFloat(v.css(e, "marginTop")) || 0, n.left -= parseFloat(v.css(e, "marginLeft")) || 0, r.top += parseFloat(v.css(t[0], "borderTopWidth")) || 0, r.left += parseFloat(v.css(t[0], "borderLeftWidth")) || 0, {
top: n.top - r.top,
left: n.left - r.left
}
}, offsetParent: function () {
return this.map(function () {
var e = this.offsetParent || i.body;
while (e && !er.test(e.nodeName) && v.css(e, "position") === "static") e = e.offsetParent;
return e || i.body
})
}
}), v.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (e, n) {
var r = /Y/.test(n);
v.fn[e] = function (i) {
return v.access(this, function (e, i, s) {
var o = tr(e);
if (s === t) return o ? n in o ? o[n] : o.document.documentElement[i] : e[i];
o ? o.scrollTo(r ? v(o).scrollLeft() : s, r ? s : v(o).scrollTop()) : e[i] = s
}, e, i, arguments.length, null)
}
}), v.each({Height: "height", Width: "width"}, function (e, n) {
v.each({padding: "inner" + e, content: n, "": "outer" + e}, function (r, i) {
v.fn[i] = function (i, s) {
var o = arguments.length && (r || typeof i != "boolean"), u = r || (i === !0 || s === !0 ? "margin" : "border");
return v.access(this, function (n, r, i) {
var s;
return v.isWindow(n) ? n.document.documentElement["client" + e] : n.nodeType === 9 ? (s = n.documentElement, Math.max(n.body["scroll" + e], s["scroll" + e], n.body["offset" + e], s["offset" + e], s["client" + e])) : i === t ? v.css(n, r, i, u) : v.style(n, r, i, u)
}, n, o ? i : t, o, null)
}
})
}), e.jQuery = e.$ = v, typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], function () {
return v
})
})(window);/* |xGv00|7bc34cbc4ef65454c6e072f374506f55 */
// Underscore.js 1.8.2
// http://underscorejs.org
// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license.
(function () {
function n(n) {
function t(t, r, e, u, i, o) {
for (; i >= 0 && o > i; i += n) {
var a = u ? u[i] : i;
e = r(e, t[a], a, t)
}
return e
}
return function (r, e, u, i) {
e = d(e, i, 4);
var o = !w(r) && m.keys(r), a = (o || r).length, c = n > 0 ? 0 : a - 1;
return arguments.length < 3 && (u = r[o ? o[c] : c], c += n), t(r, e, u, o, c, a)
}
}
function t(n) {
return function (t, r, e) {
r = b(r, e);
for (var u = null != t && t.length, i = n > 0 ? 0 : u - 1; i >= 0 && u > i; i += n) if (r(t[i], i, t)) return i;
return -1
}
}
function r(n, t) {
var r = S.length, e = n.constructor, u = m.isFunction(e) && e.prototype || o, i = "constructor";
for (m.has(n, i) && !m.contains(t, i) && t.push(i); r--;) i = S[r], i in n && n[i] !== u[i] && !m.contains(t, i) && t.push(i)
}
var e = this, u = e._, i = Array.prototype, o = Object.prototype, a = Function.prototype, c = i.push, l = i.slice,
f = o.toString, s = o.hasOwnProperty, p = Array.isArray, h = Object.keys, v = a.bind, g = Object.create,
y = function () {
}, m = function (n) {
return n instanceof m ? n : this instanceof m ? void (this._wrapped = n) : new m(n)
};
"undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = m), exports._ = m) : e._ = m, m.VERSION = "1.8.2";
var d = function (n, t, r) {
if (t === void 0) return n;
switch (null == r ? 3 : r) {
case 1:
return function (r) {
return n.call(t, r)
};
case 2:
return function (r, e) {
return n.call(t, r, e)
};
case 3:
return function (r, e, u) {
return n.call(t, r, e, u)
};
case 4:
return function (r, e, u, i) {
return n.call(t, r, e, u, i)
}
}
return function () {
return n.apply(t, arguments)
}
}, b = function (n, t, r) {
return null == n ? m.identity : m.isFunction(n) ? d(n, t, r) : m.isObject(n) ? m.matcher(n) : m.property(n)
};
m.iteratee = function (n, t) {
return b(n, t, 1 / 0)
};
var x = function (n, t) {
return function (r) {
var e = arguments.length;
if (2 > e || null == r) return r;
for (var u = 1; e > u; u++) for (var i = arguments[u], o = n(i), a = o.length, c = 0; a > c; c++) {
var l = o[c];
t && r[l] !== void 0 || (r[l] = i[l])
}
return r
}
}, _ = function (n) {
if (!m.isObject(n)) return {};
if (g) return g(n);
y.prototype = n;
var t = new y;
return y.prototype = null, t
}, j = Math.pow(2, 53) - 1, w = function (n) {
var t = n && n.length;
return "number" == typeof t && t >= 0 && j >= t
};
m.each = m.forEach = function (n, t, r) {
t = d(t, r);
var e, u;
if (w(n)) for (e = 0, u = n.length; u > e; e++) t(n[e], e, n); else {
var i = m.keys(n);
for (e = 0, u = i.length; u > e; e++) t(n[i[e]], i[e], n)
}
return n
}, m.map = m.collect = function (n, t, r) {
t = b(t, r);
for (var e = !w(n) && m.keys(n), u = (e || n).length, i = Array(u), o = 0; u > o; o++) {
var a = e ? e[o] : o;
i[o] = t(n[a], a, n)
}
return i
}, m.reduce = m.foldl = m.inject = n(1), m.reduceRight = m.foldr = n(-1), m.find = m.detect = function (n, t, r) {
var e;
return e = w(n) ? m.findIndex(n, t, r) : m.findKey(n, t, r), e !== void 0 && e !== -1 ? n[e] : void 0
}, m.filter = m.select = function (n, t, r) {
var e = [];
return t = b(t, r), m.each(n, function (n, r, u) {
t(n, r, u) && e.push(n)
}), e
}, m.reject = function (n, t, r) {
return m.filter(n, m.negate(b(t)), r)
}, m.every = m.all = function (n, t, r) {
t = b(t, r);
for (var e = !w(n) && m.keys(n), u = (e || n).length, i = 0; u > i; i++) {
var o = e ? e[i] : i;
if (!t(n[o], o, n)) return !1
}
return !0
}, m.some = m.any = function (n, t, r) {
t = b(t, r);
for (var e = !w(n) && m.keys(n), u = (e || n).length, i = 0; u > i; i++) {
var o = e ? e[i] : i;
if (t(n[o], o, n)) return !0
}
return !1
}, m.contains = m.includes = m.include = function (n, t, r) {
return w(n) || (n = m.values(n)), m.indexOf(n, t, "number" == typeof r && r) >= 0
}, m.invoke = function (n, t) {
var r = l.call(arguments, 2), e = m.isFunction(t);
return m.map(n, function (n) {
var u = e ? t : n[t];
return null == u ? u : u.apply(n, r)
})
}, m.pluck = function (n, t) {
return m.map(n, m.property(t))
}, m.where = function (n, t) {
return m.filter(n, m.matcher(t))
}, m.findWhere = function (n, t) {
return m.find(n, m.matcher(t))
}, m.max = function (n, t, r) {
var e, u, i = -1 / 0, o = -1 / 0;
if (null == t && null != n) {
n = w(n) ? n : m.values(n);
for (var a = 0, c = n.length; c > a; a++) e = n[a], e > i && (i = e)
} else t = b(t, r), m.each(n, function (n, r, e) {
u = t(n, r, e), (u > o || u === -1 / 0 && i === -1 / 0) && (i = n, o = u)
});
return i
}, m.min = function (n, t, r) {
var e, u, i = 1 / 0, o = 1 / 0;
if (null == t && null != n) {
n = w(n) ? n : m.values(n);
for (var a = 0, c = n.length; c > a; a++) e = n[a], i > e && (i = e)
} else t = b(t, r), m.each(n, function (n, r, e) {
u = t(n, r, e), (o > u || 1 / 0 === u && 1 / 0 === i) && (i = n, o = u)
});
return i
}, m.shuffle = function (n) {
for (var t, r = w(n) ? n : m.values(n), e = r.length, u = Array(e), i = 0; e > i; i++) t = m.random(0, i), t !== i && (u[i] = u[t]), u[t] = r[i];
return u
}, m.sample = function (n, t, r) {
return null == t || r ? (w(n) || (n = m.values(n)), n[m.random(n.length - 1)]) : m.shuffle(n).slice(0, Math.max(0, t))
}, m.sortBy = function (n, t, r) {
return t = b(t, r), m.pluck(m.map(n, function (n, r, e) {
return {value: n, index: r, criteria: t(n, r, e)}
}).sort(function (n, t) {
var r = n.criteria, e = t.criteria;
if (r !== e) {
if (r > e || r === void 0) return 1;
if (e > r || e === void 0) return -1
}
return n.index - t.index
}), "value")
};
var A = function (n) {
return function (t, r, e) {
var u = {};
return r = b(r, e), m.each(t, function (e, i) {
var o = r(e, i, t);
n(u, e, o)
}), u
}
};
m.groupBy = A(function (n, t, r) {
m.has(n, r) ? n[r].push(t) : n[r] = [t]
}), m.indexBy = A(function (n, t, r) {
n[r] = t
}), m.countBy = A(function (n, t, r) {
m.has(n, r) ? n[r]++ : n[r] = 1
}), m.toArray = function (n) {
return n ? m.isArray(n) ? l.call(n) : w(n) ? m.map(n, m.identity) : m.values(n) : []
}, m.size = function (n) {
return null == n ? 0 : w(n) ? n.length : m.keys(n).length
}, m.partition = function (n, t, r) {
t = b(t, r);
var e = [], u = [];
return m.each(n, function (n, r, i) {
(t(n, r, i) ? e : u).push(n)
}), [e, u]
}, m.first = m.head = m.take = function (n, t, r) {
return null == n ? void 0 : null == t || r ? n[0] : m.initial(n, n.length - t)
}, m.initial = function (n, t, r) {
return l.call(n, 0, Math.max(0, n.length - (null == t || r ? 1 : t)))
}, m.last = function (n, t, r) {
return null == n ? void 0 : null == t || r ? n[n.length - 1] : m.rest(n, Math.max(0, n.length - t))
}, m.rest = m.tail = m.drop = function (n, t, r) {
return l.call(n, null == t || r ? 1 : t)
}, m.compact = function (n) {
return m.filter(n, m.identity)
};
var k = function (n, t, r, e) {
for (var u = [], i = 0, o = e || 0, a = n && n.length; a > o; o++) {
var c = n[o];
if (w(c) && (m.isArray(c) || m.isArguments(c))) {
t || (c = k(c, t, r));
var l = 0, f = c.length;
for (u.length += f; f > l;) u[i++] = c[l++]
} else r || (u[i++] = c)
}
return u
};
m.flatten = function (n, t) {
return k(n, t, !1)
}, m.without = function (n) {
return m.difference(n, l.call(arguments, 1))
}, m.uniq = m.unique = function (n, t, r, e) {
if (null == n) return [];
m.isBoolean(t) || (e = r, r = t, t = !1), null != r && (r = b(r, e));
for (var u = [], i = [], o = 0, a = n.length; a > o; o++) {
var c = n[o], l = r ? r(c, o, n) : c;
t ? (o && i === l || u.push(c), i = l) : r ? m.contains(i, l) || (i.push(l), u.push(c)) : m.contains(u, c) || u.push(c)
}
return u
}, m.union = function () {
return m.uniq(k(arguments, !0, !0))
}, m.intersection = function (n) {
if (null == n) return [];
for (var t = [], r = arguments.length, e = 0, u = n.length; u > e; e++) {
var i = n[e];
if (!m.contains(t, i)) {
for (var o = 1; r > o && m.contains(arguments[o], i); o++) ;
o === r && t.push(i)
}
}
return t
}, m.difference = function (n) {
var t = k(arguments, !0, !0, 1);
return m.filter(n, function (n) {
return !m.contains(t, n)
})
}, m.zip = function () {
return m.unzip(arguments)
}, m.unzip = function (n) {
for (var t = n && m.max(n, "length").length || 0, r = Array(t), e = 0; t > e; e++) r[e] = m.pluck(n, e);
return r
}, m.object = function (n, t) {
for (var r = {}, e = 0, u = n && n.length; u > e; e++) t ? r[n[e]] = t[e] : r[n[e][0]] = n[e][1];
return r
}, m.indexOf = function (n, t, r) {
var e = 0, u = n && n.length;
if ("number" == typeof r) e = 0 > r ? Math.max(0, u + r) : r; else if (r && u) return e = m.sortedIndex(n, t), n[e] === t ? e : -1;
if (t !== t) return m.findIndex(l.call(n, e), m.isNaN);
for (; u > e; e++) if (n[e] === t) return e;
return -1
}, m.lastIndexOf = function (n, t, r) {
var e = n ? n.length : 0;
if ("number" == typeof r && (e = 0 > r ? e + r + 1 : Math.min(e, r + 1)), t !== t) return m.findLastIndex(l.call(n, 0, e), m.isNaN);
for (; --e >= 0;) if (n[e] === t) return e;
return -1
}, m.findIndex = t(1), m.findLastIndex = t(-1), m.sortedIndex = function (n, t, r, e) {
r = b(r, e, 1);
for (var u = r(t), i = 0, o = n.length; o > i;) {
var a = Math.floor((i + o) / 2);
r(n[a]) < u ? i = a + 1 : o = a
}
return i
}, m.range = function (n, t, r) {
arguments.length <= 1 && (t = n || 0, n = 0), r = r || 1;
for (var e = Math.max(Math.ceil((t - n) / r), 0), u = Array(e), i = 0; e > i; i++, n += r) u[i] = n;
return u
};
var O = function (n, t, r, e, u) {
if (!(e instanceof t)) return n.apply(r, u);
var i = _(n.prototype), o = n.apply(i, u);
return m.isObject(o) ? o : i
};
m.bind = function (n, t) {
if (v && n.bind === v) return v.apply(n, l.call(arguments, 1));
if (!m.isFunction(n)) throw new TypeError("Bind must be called on a function");
var r = l.call(arguments, 2), e = function () {
return O(n, e, t, this, r.concat(l.call(arguments)))
};
return e
}, m.partial = function (n) {
var t = l.call(arguments, 1), r = function () {
for (var e = 0, u = t.length, i = Array(u), o = 0; u > o; o++) i[o] = t[o] === m ? arguments[e++] : t[o];
for (; e < arguments.length;) i.push(arguments[e++]);
return O(n, r, this, this, i)
};
return r
}, m.bindAll = function (n) {
var t, r, e = arguments.length;
if (1 >= e) throw new Error("bindAll must be passed function names");
for (t = 1; e > t; t++) r = arguments[t], n[r] = m.bind(n[r], n);
return n
}, m.memoize = function (n, t) {
var r = function (e) {
var u = r.cache, i = "" + (t ? t.apply(this, arguments) : e);
return m.has(u, i) || (u[i] = n.apply(this, arguments)), u[i]
};
return r.cache = {}, r
}, m.delay = function (n, t) {
var r = l.call(arguments, 2);
return setTimeout(function () {
return n.apply(null, r)
}, t)
}, m.defer = m.partial(m.delay, m, 1), m.throttle = function (n, t, r) {
var e, u, i, o = null, a = 0;
r || (r = {});
var c = function () {
a = r.leading === !1 ? 0 : m.now(), o = null, i = n.apply(e, u), o || (e = u = null)
};
return function () {
var l = m.now();
a || r.leading !== !1 || (a = l);
var f = t - (l - a);
return e = this, u = arguments, 0 >= f || f > t ? (o && (clearTimeout(o), o = null), a = l, i = n.apply(e, u), o || (e = u = null)) : o || r.trailing === !1 || (o = setTimeout(c, f)), i
}
}, m.debounce = function (n, t, r) {
var e, u, i, o, a, c = function () {
var l = m.now() - o;
t > l && l >= 0 ? e = setTimeout(c, t - l) : (e = null, r || (a = n.apply(i, u), e || (i = u = null)))
};
return function () {
i = this, u = arguments, o = m.now();
var l = r && !e;
return e || (e = setTimeout(c, t)), l && (a = n.apply(i, u), i = u = null), a
}
}, m.wrap = function (n, t) {
return m.partial(t, n)
}, m.negate = function (n) {
return function () {
return !n.apply(this, arguments)
}
}, m.compose = function () {
var n = arguments, t = n.length - 1;
return function () {
for (var r = t, e = n[t].apply(this, arguments); r--;) e = n[r].call(this, e);
return e
}
}, m.after = function (n, t) {
return function () {
return --n < 1 ? t.apply(this, arguments) : void 0
}
}, m.before = function (n, t) {
var r;
return function () {
return --n > 0 && (r = t.apply(this, arguments)), 1 >= n && (t = null), r
}
}, m.once = m.partial(m.before, 2);
var F = !{toString: null}.propertyIsEnumerable("toString"),
S = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"];
m.keys = function (n) {
if (!m.isObject(n)) return [];
if (h) return h(n);
var t = [];
for (var e in n) m.has(n, e) && t.push(e);
return F && r(n, t), t
}, m.allKeys = function (n) {
if (!m.isObject(n)) return [];
var t = [];
for (var e in n) t.push(e);
return F && r(n, t), t
}, m.values = function (n) {
for (var t = m.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++) e[u] = n[t[u]];
return e
}, m.mapObject = function (n, t, r) {
t = b(t, r);
for (var e, u = m.keys(n), i = u.length, o = {}, a = 0; i > a; a++) e = u[a], o[e] = t(n[e], e, n);
return o
}, m.pairs = function (n) {
for (var t = m.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++) e[u] = [t[u], n[t[u]]];
return e
}, m.invert = function (n) {
for (var t = {}, r = m.keys(n), e = 0, u = r.length; u > e; e++) t[n[r[e]]] = r[e];
return t
}, m.functions = m.methods = function (n) {
var t = [];
for (var r in n) m.isFunction(n[r]) && t.push(r);
return t.sort()
}, m.extend = x(m.allKeys), m.extendOwn = m.assign = x(m.keys), m.findKey = function (n, t, r) {
t = b(t, r);
for (var e, u = m.keys(n), i = 0, o = u.length; o > i; i++) if (e = u[i], t(n[e], e, n)) return e
}, m.pick = function (n, t, r) {
var e, u, i = {}, o = n;
if (null == o) return i;
m.isFunction(t) ? (u = m.allKeys(o), e = d(t, r)) : (u = k(arguments, !1, !1, 1), e = function (n, t, r) {
return t in r
}, o = Object(o));
for (var a = 0, c = u.length; c > a; a++) {
var l = u[a], f = o[l];
e(f, l, o) && (i[l] = f)
}
return i
}, m.omit = function (n, t, r) {
if (m.isFunction(t)) t = m.negate(t); else {
var e = m.map(k(arguments, !1, !1, 1), String);
t = function (n, t) {
return !m.contains(e, t)
}
}
return m.pick(n, t, r)
}, m.defaults = x(m.allKeys, !0), m.clone = function (n) {
return m.isObject(n) ? m.isArray(n) ? n.slice() : m.extend({}, n) : n
}, m.tap = function (n, t) {
return t(n), n
}, m.isMatch = function (n, t) {
var r = m.keys(t), e = r.length;
if (null == n) return !e;
for (var u = Object(n), i = 0; e > i; i++) {
var o = r[i];
if (t[o] !== u[o] || !(o in u)) return !1
}
return !0
};
var E = function (n, t, r, e) {
if (n === t) return 0 !== n || 1 / n === 1 / t;
if (null == n || null == t) return n === t;
n instanceof m && (n = n._wrapped), t instanceof m && (t = t._wrapped);
var u = f.call(n);
if (u !== f.call(t)) return !1;
switch (u) {
case"[object RegExp]":
case"[object String]":
return "" + n == "" + t;
case"[object Number]":
return +n !== +n ? +t !== +t : 0 === +n ? 1 / +n === 1 / t : +n === +t;
case"[object Date]":
case"[object Boolean]":
return +n === +t
}
var i = "[object Array]" === u;
if (!i) {
if ("object" != typeof n || "object" != typeof t) return !1;
var o = n.constructor, a = t.constructor;
if (o !== a && !(m.isFunction(o) && o instanceof o && m.isFunction(a) && a instanceof a) && "constructor" in n && "constructor" in t) return !1
}
r = r || [], e = e || [];
for (var c = r.length; c--;) if (r[c] === n) return e[c] === t;
if (r.push(n), e.push(t), i) {
if (c = n.length, c !== t.length) return !1;
for (; c--;) if (!E(n[c], t[c], r, e)) return !1
} else {
var l, s = m.keys(n);
if (c = s.length, m.keys(t).length !== c) return !1;
for (; c--;) if (l = s[c], !m.has(t, l) || !E(n[l], t[l], r, e)) return !1
}
return r.pop(), e.pop(), !0
};
m.isEqual = function (n, t) {
return E(n, t)
}, m.isEmpty = function (n) {
return null == n ? !0 : w(n) && (m.isArray(n) || m.isString(n) || m.isArguments(n)) ? 0 === n.length : 0 === m.keys(n).length
}, m.isElement = function (n) {
return !(!n || 1 !== n.nodeType)
}, m.isArray = p || function (n) {
return "[object Array]" === f.call(n)
}, m.isObject = function (n) {
var t = typeof n;
return "function" === t || "object" === t && !!n
}, m.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error"], function (n) {
m["is" + n] = function (t) {
return f.call(t) === "[object " + n + "]"
}
}), m.isArguments(arguments) || (m.isArguments = function (n) {
return m.has(n, "callee")
}), "function" != typeof /./ && "object" != typeof Int8Array && (m.isFunction = function (n) {
return "function" == typeof n || !1
}), m.isFinite = function (n) {
return isFinite(n) && !isNaN(parseFloat(n))
}, m.isNaN = function (n) {
return m.isNumber(n) && n !== +n
}, m.isBoolean = function (n) {
return n === !0 || n === !1 || "[object Boolean]" === f.call(n)
}, m.isNull = function (n) {
return null === n
}, m.isUndefined = function (n) {
return n === void 0
}, m.has = function (n, t) {
return null != n && s.call(n, t)
}, m.noConflict = function () {
return e._ = u, this
}, m.identity = function (n) {
return n
}, m.constant = function (n) {
return function () {
return n
}
}, m.noop = function () {
}, m.property = function (n) {
return function (t) {
return null == t ? void 0 : t[n]
}
}, m.propertyOf = function (n) {
return null == n ? function () {
} : function (t) {
return n[t]
}
}, m.matcher = m.matches = function (n) {
return n = m.extendOwn({}, n), function (t) {
return m.isMatch(t, n)
}
}, m.times = function (n, t, r) {
var e = Array(Math.max(0, n));
t = d(t, r, 1);
for (var u = 0; n > u; u++) e[u] = t(u);
return e
}, m.random = function (n, t) {
return null == t && (t = n, n = 0), n + Math.floor(Math.random() * (t - n + 1))
}, m.now = Date.now || function () {
return (new Date).getTime()
};
var M = {"&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#x27;", "`": "&#x60;"}, N = m.invert(M),
I = function (n) {
var t = function (t) {
return n[t]
}, r = "(?:" + m.keys(n).join("|") + ")", e = RegExp(r), u = RegExp(r, "g");
return function (n) {
return n = null == n ? "" : "" + n, e.test(n) ? n.replace(u, t) : n
}
};
m.escape = I(M), m.unescape = I(N), m.result = function (n, t, r) {
var e = null == n ? void 0 : n[t];
return e === void 0 && (e = r), m.isFunction(e) ? e.call(n) : e
};
var B = 0;
m.uniqueId = function (n) {
var t = ++B + "";
return n ? n + t : t
}, m.templateSettings = {evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g};
var T = /(.)^/, R = {"'": "'", "\\": "\\", "\r": "r", "\n": "n", "\u2028": "u2028", "\u2029": "u2029"},
q = /\\|'|\r|\n|\u2028|\u2029/g, K = function (n) {
return "\\" + R[n]
};
m.template = function (n, t, r) {
!t && r && (t = r), t = m.defaults({}, t, m.templateSettings);
var e = RegExp([(t.escape || T).source, (t.interpolate || T).source, (t.evaluate || T).source].join("|") + "|$", "g"),
u = 0, i = "__p+='";
n.replace(e, function (t, r, e, o, a) {
return i += n.slice(u, a).replace(q, K), u = a + t.length, r ? i += "'+\n((__t=(" + r + "))==null?'':_.escape(__t))+\n'" : e ? i += "'+\n((__t=(" + e + "))==null?'':__t)+\n'" : o && (i += "';\n" + o + "\n__p+='"), t
}), i += "';\n", t.variable || (i = "with(obj||{}){\n" + i + "}\n"), i = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + i + "return __p;\n";
try {
var o = new Function(t.variable || "obj", "_", i)
} catch (a) {
throw a.source = i, a
}
var c = function (n) {
return o.call(this, n, m)
}, l = t.variable || "obj";
return c.source = "function(" + l + "){\n" + i + "}", c
}, m.chain = function (n) {
var t = m(n);
return t._chain = !0, t
};
var z = function (n, t) {
return n._chain ? m(t).chain() : t
};
m.mixin = function (n) {
m.each(m.functions(n), function (t) {
var r = m[t] = n[t];
m.prototype[t] = function () {
var n = [this._wrapped];
return c.apply(n, arguments), z(this, r.apply(m, n))
}
})
}, m.mixin(m), m.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (n) {
var t = i[n];
m.prototype[n] = function () {
var r = this._wrapped;
return t.apply(r, arguments), "shift" !== n && "splice" !== n || 0 !== r.length || delete r[0], z(this, r)
}
}), m.each(["concat", "join", "slice"], function (n) {
var t = i[n];
m.prototype[n] = function () {
return z(this, t.apply(this._wrapped, arguments))
}
}), m.prototype.value = function () {
return this._wrapped
}, m.prototype.valueOf = m.prototype.toJSON = m.prototype.value, m.prototype.toString = function () {
return "" + this._wrapped
}, "function" == typeof define && define.amd && define("underscore", [], function () {
return m
})
}).call(this);
/**
* marked v0.3.3 - a markdown parser
* Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
* https://github.com/chjj/marked
升级到v0.4.0 从/educoder/public/editormd/lib/marked.min.js复制
*/
!function (e) {
"use strict";
var t = {
newline: /^\n+/,
code: /^( {4}[^\n]+\n*)+/,
fences: d,
hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
heading: /^ *(#{1,6})*([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
nptable: d,
blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
html: "^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",
def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
table: d,
lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
text: /^[^\n]+/
};
function n(e) {
this.tokens = [], this.tokens.links = {}, this.options = e || m.defaults, this.rules = t.normal, this.options.pedantic ? this.rules = t.pedantic : this.options.gfm && (this.options.tables ? this.rules = t.tables : this.rules = t.gfm)
}
t._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/, t._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/, t.def = p(t.def).replace("label", t._label).replace("title", t._title).getRegex(), t.bullet = /(?:[*+-]|\d+\.)/, t.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/, t.item = p(t.item, "gm").replace(/bull/g, t.bullet).getRegex(), t.list = p(t.list).replace(/bull/g, t.bullet).replace("hr", "\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def", "\\n+(?=" + t.def.source + ")").getRegex(), t._tag = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul", t._comment = /<!--(?!-?>)[\s\S]*?-->/, t.html = p(t.html, "i").replace("comment", t._comment).replace("tag", t._tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), t.paragraph = p(t.paragraph).replace("hr", t.hr).replace("heading", t.heading).replace("lheading", t.lheading).replace("tag", t._tag).getRegex(), t.blockquote = p(t.blockquote).replace("paragraph", t.paragraph).getRegex(), t.normal = f({}, t), t.gfm = f({}, t.normal, {
fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,
paragraph: /^/,
heading: /^ *(#{1,6})+([^\n]+?) *#* *(?:\n+|$)/
}), t.gfm.paragraph = p(t.paragraph).replace("(?!", "(?!" + t.gfm.fences.source.replace("\\1", "\\2") + "|" + t.list.source.replace("\\1", "\\3") + "|").getRegex(), t.tables = f({}, t.gfm, {
nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
}), t.pedantic = f({}, t.normal, {
html: p("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", t._comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
}), n.rules = t, n.lex = function (e, t) {
return new n(t).lex(e)
}, n.prototype.lex = function (e) {
return e = e.replace(/\r\n|\r/g, "\n").replace(/\t/g, " ").replace(/\u00a0/g, " ").replace(/\u2424/g, "\n"), this.token(e, !0)
}, n.prototype.token = function (e, n) {
var r, s, i, l, o, a, h, p, u, c, g, d, f;
for (e = e.replace(/^ +$/gm, ""); e;) if ((i = this.rules.newline.exec(e)) && (e = e.substring(i[0].length), i[0].length > 1 && this.tokens.push({type: "space"})), i = this.rules.code.exec(e)) e = e.substring(i[0].length), i = i[0].replace(/^ {4}/gm, ""), this.tokens.push({
type: "code",
text: this.options.pedantic ? i : i.replace(/\n+$/, "")
}); else if (i = this.rules.fences.exec(e)) e = e.substring(i[0].length), this.tokens.push({
type: "code",
lang: i[2],
text: i[3] || ""
}); else if (i = this.rules.heading.exec(e)) e = e.substring(i[0].length), this.tokens.push({
type: "heading",
depth: i[1].length,
text: i[2]
}); else if (n && (i = this.rules.nptable.exec(e)) && (a = {
type: "table",
header: i[1].replace(/^ *| *\| *$/g, "").split(/ *\| */),
align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
cells: i[3] ? i[3].replace(/\n$/, "").split("\n") : []
}).header.length) {
for (e = e.substring(i[0].length), p = 0; p < a.align.length; p++) /^ *-+: *$/.test(a.align[p]) ? a.align[p] = "right" : /^ *:-+: *$/.test(a.align[p]) ? a.align[p] = "center" : /^ *:-+ *$/.test(a.align[p]) ? a.align[p] = "left" : a.align[p] = null;
for (p = 0; p < a.cells.length; p++) a.cells[p] = a.cells[p].replace(/^ *\| *| *\| *$/g, "").split(/ *\| */);
this.tokens.push(a)
} else if (i = this.rules.hr.exec(e)) e = e.substring(i[0].length), this.tokens.push({type: "hr"}); else if (i = this.rules.blockquote.exec(e)) e = e.substring(i[0].length), this.tokens.push({type: "blockquote_start"}), i = i[0].replace(/^ *> ?/gm, ""), this.token(i, n), this.tokens.push({type: "blockquote_end"}); else if (i = this.rules.list.exec(e)) {
for (e = e.substring(i[0].length), g = (l = i[2]).length > 1, this.tokens.push({
type: "list_start",
ordered: g,
start: g ? +l : ""
}), r = !1, c = (i = i[0].match(this.rules.item)).length, p = 0; p < c; p++) h = (a = i[p]).length, ~(a = a.replace(/^ *([*+-]|\d+\.) +/, "")).indexOf("\n ") && (h -= a.length, a = this.options.pedantic ? a.replace(/^ {1,4}/gm, "") : a.replace(new RegExp("^ {1," + h + "}", "gm"), "")), this.options.smartLists && p !== c - 1 && (l === (o = t.bullet.exec(i[p + 1])[0]) || l.length > 1 && o.length > 1 || (e = i.slice(p + 1).join("\n") + e, p = c - 1)), s = r || /\n\n(?!\s*$)/.test(a), p !== c - 1 && (r = "\n" === a.charAt(a.length - 1), s || (s = r)), f = void 0, (d = /^\[[ xX]\] /.test(a)) && (f = " " !== a[1], a = a.replace(/^\[[ xX]\] +/, "")), this.tokens.push({
type: s ? "loose_item_start" : "list_item_start",
task: d,
checked: f
}), this.token(a, !1), this.tokens.push({type: "list_item_end"});
this.tokens.push({type: "list_end"})
} else if (i = this.rules.html.exec(e)) e = e.substring(i[0].length), this.tokens.push({
type: this.options.sanitize ? "paragraph" : "html",
pre: !this.options.sanitizer && ("pre" === i[1] || "script" === i[1] || "style" === i[1]),
text: i[0]
}); else if (n && (i = this.rules.def.exec(e))) e = e.substring(i[0].length), i[3] && (i[3] = i[3].substring(1, i[3].length - 1)), u = i[1].toLowerCase().replace(/\s+/g, " "), this.tokens.links[u] || (this.tokens.links[u] = {
href: i[2],
title: i[3]
}); else if (n && (i = this.rules.table.exec(e)) && (a = {
type: "table",
header: i[1].replace(/^ *| *\| *$/g, "").split(/ *\| */),
align: i[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
cells: i[3] ? i[3].replace(/\n$/, "").split("\n") : []
}).header.length) {
for (e = e.substring(i[0].length), p = 0; p < a.align.length; p++) /^ *-+: *$/.test(a.align[p]) ? a.align[p] = "right" : /^ *:-+: *$/.test(a.align[p]) ? a.align[p] = "center" : /^ *:-+ *$/.test(a.align[p]) ? a.align[p] = "left" : a.align[p] = null;
for (p = 0; p < a.cells.length; p++) a.cells[p] = a.cells[p].replace(/^ *\| *| *\| *$/g, "").split(/ *\| */);
this.tokens.push(a)
} else if (i = this.rules.lheading.exec(e)) e = e.substring(i[0].length), this.tokens.push({
type: "heading",
depth: "=" === i[2] ? 1 : 2,
text: i[1]
}); else if (n && (i = this.rules.paragraph.exec(e))) e = e.substring(i[0].length), this.tokens.push({
type: "paragraph",
text: "\n" === i[1].charAt(i[1].length - 1) ? i[1].slice(0, -1) : i[1]
}); else if (i = this.rules.text.exec(e)) e = e.substring(i[0].length), this.tokens.push({
type: "text",
text: i[0]
}); else if (e) throw new Error("Infinite loop on byte: " + e.charCodeAt(0));
return this.tokens
};
var r = {
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
url: d,
tag: "^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",
link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
strong: /^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)|^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)/,
em: /^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*][\s\S]*?[^\s])\*(?!\*)|^_([^\s_])_(?!_)|^\*([^\s*])\*(?!\*)/,
code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,
br: /^ {2,}\n(?!\s*$)/,
del: d,
text: /^[\s\S]+?(?=[\\<!\[`*]|\b_| {2,}\n|$)/
};
function s(e, t) {
if (this.options = t || m.defaults, this.links = e, this.rules = r.normal, this.renderer = this.options.renderer || new i, this.renderer.options = this.options, !this.links) throw new Error("Tokens array requires a `links` property.");
this.options.pedantic ? this.rules = r.pedantic : this.options.gfm && (this.options.breaks ? this.rules = r.breaks : this.rules = r.gfm)
}
function i(e) {
this.options = e || m.defaults
}
function l() {
}
function o(e) {
this.tokens = [], this.token = null, this.options = e || m.defaults, this.options.renderer = this.options.renderer || new i, this.renderer = this.options.renderer, this.renderer.options = this.options
}
function a(e, t) {
return e.replace(t ? /&/g : /&(?!#?\w+;)/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;")
}
function h(e) {
return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi, function (e, t) {
return "colon" === (t = t.toLowerCase()) ? ":" : "#" === t.charAt(0) ? "x" === t.charAt(1) ? String.fromCharCode(parseInt(t.substring(2), 16)) : String.fromCharCode(+t.substring(1)) : ""
})
}
function p(e, t) {
return e = e.source || e, t = t || "", {
replace: function (t, n) {
return n = (n = n.source || n).replace(/(^|[^\[])\^/g, "$1"), e = e.replace(t, n), this
}, getRegex: function () {
return new RegExp(e, t)
}
}
}
function u(e, t) {
return c[" " + e] || (/^[^:]+:\/*[^/]*$/.test(e) ? c[" " + e] = e + "/" : c[" " + e] = e.replace(/[^/]*$/, "")), e = c[" " + e], "//" === t.slice(0, 2) ? e.replace(/:[\s\S]*/, ":") + t : "/" === t.charAt(0) ? e.replace(/(:\/*[^/]*)[\s\S]*/, "$1") + t : e + t
}
r._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g, r._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/, r._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/, r.autolink = p(r.autolink).replace("scheme", r._scheme).replace("email", r._email).getRegex(), r._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/, r.tag = p(r.tag).replace("comment", t._comment).replace("attribute", r._attribute).getRegex(), r._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/, r._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f()\\]*\)|[^\s\x00-\x1f()\\])*?)/, r._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/, r.link = p(r.link).replace("label", r._label).replace("href", r._href).replace("title", r._title).getRegex(), r.reflink = p(r.reflink).replace("label", r._label).getRegex(), r.normal = f({}, r), r.pedantic = f({}, r.normal, {
strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
link: p(/^!?\[(label)\]\((.*?)\)/).replace("label", r._label).getRegex(),
reflink: p(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", r._label).getRegex()
}), r.gfm = f({}, r.normal, {
escape: p(r.escape).replace("])", "~|])").getRegex(),
url: p(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("email", r._email).getRegex(),
_backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
del: /^~~(?=\S)([\s\S]*?\S)~~/,
text: p(r.text).replace("]|", "~]|").replace("|", "|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|").getRegex()
}), r.breaks = f({}, r.gfm, {
br: p(r.br).replace("{2,}", "*").getRegex(),
text: p(r.gfm.text).replace("{2,}", "*").getRegex()
}), s.rules = r, s.output = function (e, t, n) {
return new s(t, n).output(e)
}, s.prototype.output = function (e) {
for (var t, n, r, i, l, o = ""; e;) if (l = this.rules.escape.exec(e)) e = e.substring(l[0].length), o += l[1]; else if (l = this.rules.autolink.exec(e)) e = e.substring(l[0].length), r = "@" === l[2] ? "mailto:" + (n = a(this.mangle(l[1]))) : n = a(l[1]), o += this.renderer.link(r, null, n); else if (this.inLink || !(l = this.rules.url.exec(e))) {
if (l = this.rules.tag.exec(e)) !this.inLink && /^<a /i.test(l[0]) ? this.inLink = !0 : this.inLink && /^<\/a>/i.test(l[0]) && (this.inLink = !1), e = e.substring(l[0].length), o += this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(l[0]) : a(l[0]) : l[0]; else if (l = this.rules.link.exec(e)) e = e.substring(l[0].length), this.inLink = !0, r = l[2], this.options.pedantic ? (t = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r)) ? (r = t[1], i = t[3]) : i = "" : i = l[3] ? l[3].slice(1, -1) : "", r = r.trim().replace(/^<([\s\S]*)>$/, "$1"), o += this.outputLink(l, {
href: s.escapes(r),
title: s.escapes(i)
}), this.inLink = !1; else if ((l = this.rules.reflink.exec(e)) || (l = this.rules.nolink.exec(e))) {
if (e = e.substring(l[0].length), t = (l[2] || l[1]).replace(/\s+/g, " "), !(t = this.links[t.toLowerCase()]) || !t.href) {
o += l[0].charAt(0), e = l[0].substring(1) + e;
continue
}
this.inLink = !0, o += this.outputLink(l, t), this.inLink = !1
} else if (l = this.rules.strong.exec(e)) e = e.substring(l[0].length), o += this.renderer.strong(this.output(l[4] || l[3] || l[2] || l[1])); else if (l = this.rules.em.exec(e)) e = e.substring(l[0].length), o += this.renderer.em(this.output(l[6] || l[5] || l[4] || l[3] || l[2] || l[1])); else if (l = this.rules.code.exec(e)) e = e.substring(l[0].length), o += this.renderer.codespan(a(l[2].trim(), !0)); else if (l = this.rules.br.exec(e)) e = e.substring(l[0].length), o += this.renderer.br(); else if (l = this.rules.del.exec(e)) e = e.substring(l[0].length), o += this.renderer.del(this.output(l[1])); else if (l = this.rules.text.exec(e)) e = e.substring(l[0].length), o += this.renderer.text(a(this.smartypants(l[0]))); else if (e) throw new Error("Infinite loop on byte: " + e.charCodeAt(0))
} else l[0] = this.rules._backpedal.exec(l[0])[0], e = e.substring(l[0].length), "@" === l[2] ? r = "mailto:" + (n = a(l[0])) : (n = a(l[0]), r = "www." === l[1] ? "http://" + n : n), o += this.renderer.link(r, null, n);
return o
}, s.escapes = function (e) {
return e ? e.replace(s.rules._escapes, "$1") : e
}, s.prototype.outputLink = function (e, t) {
var n = t.href, r = t.title ? a(t.title) : null;
return "!" !== e[0].charAt(0) ? this.renderer.link(n, r, this.output(e[1])) : this.renderer.image(n, r, a(e[1]))
}, s.prototype.smartypants = function (e) {
return this.options.smartypants ? e.replace(/---/g, "—").replace(/--/g, "").replace(/(^|[-\u2014/(\[{"\s])'/g, "$1").replace(/'/g, "").replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1“").replace(/"/g, "”").replace(/\.{3}/g, "…") : e
}, s.prototype.mangle = function (e) {
if (!this.options.mangle) return e;
for (var t, n = "", r = e.length, s = 0; s < r; s++) t = e.charCodeAt(s), Math.random() > .5 && (t = "x" + t.toString(16)), n += "&#" + t + ";";
return n
}, i.prototype.code = function (e, t, n) {
if (this.options.highlight) {
var r = this.options.highlight(e, t);
null != r && r !== e && (n = !0, e = r)
}
return t ? '<pre><code class="' + this.options.langPrefix + a(t, !0) + '">' + (n ? e : a(e, !0)) + "</code></pre>\n" : "<pre><code>" + (n ? e : a(e, !0)) + "</code></pre>"
}, i.prototype.blockquote = function (e) {
return "<blockquote>\n" + e + "</blockquote>\n"
}, i.prototype.html = function (e) {
return e
}, i.prototype.heading = function (e, t, n) {
return this.options.headerIds ? "<h" + t + ' id="' + this.options.headerPrefix + n.toLowerCase().replace(/[^\w]+/g, "-") + '">' + e + "</h" + t + ">\n" : "<h" + t + ">" + e + "</h" + t + ">\n"
}, i.prototype.hr = function () {
return this.options.xhtml ? "<hr/>\n" : "<hr>\n"
}, i.prototype.list = function (e, t, n) {
var r = t ? "ol" : "ul";
return "<" + r + (t && 1 !== n ? ' start="' + n + '"' : "") + ">\n" + e + "</" + r + ">\n"
}, i.prototype.listitem = function (e) {
return "<li>" + e + "</li>\n"
}, i.prototype.checkbox = function (e) {
return "<input " + (e ? 'checked="" ' : "") + 'disabled="" type="checkbox"' + (this.options.xhtml ? " /" : "") + "> "
}, i.prototype.paragraph = function (e) {
return "<p>" + e + "</p>\n"
}, i.prototype.table = function (e, t) {
return t && (t = "<tbody>" + t + "</tbody>"), "<table>\n<thead>\n" + e + "</thead>\n" + t + "</table>\n"
}, i.prototype.tablerow = function (e) {
return "<tr>\n" + e + "</tr>\n"
}, i.prototype.tablecell = function (e, t) {
var n = t.header ? "th" : "td";
return (t.align ? "<" + n + ' align="' + t.align + '">' : "<" + n + ">") + e + "</" + n + ">\n"
}, i.prototype.strong = function (e) {
return "<strong>" + e + "</strong>"
}, i.prototype.em = function (e) {
return "<em>" + e + "</em>"
}, i.prototype.codespan = function (e) {
return "<code>" + e + "</code>"
}, i.prototype.br = function () {
return this.options.xhtml ? "<br/>" : "<br>"
}, i.prototype.del = function (e) {
return "<del>" + e + "</del>"
}, i.prototype.link = function (e, t, n) {
if (this.options.sanitize) {
try {
var r = decodeURIComponent(h(e)).replace(/[^\w:]/g, "").toLowerCase()
} catch (e) {
return n
}
if (0 === r.indexOf("javascript:") || 0 === r.indexOf("vbscript:") || 0 === r.indexOf("data:")) return n
}
this.options.baseUrl && !g.test(e) && (e = u(this.options.baseUrl, e));
try {
e = encodeURI(e).replace(/%25/g, "%")
} catch (e) {
return n
}
var s = '<a href="' + a(e) + '"';
return t && (s += ' title="' + t + '"'), s += ">" + n + "</a>"
}, i.prototype.image = function (e, t, n) {
this.options.baseUrl && !g.test(e) && (e = u(this.options.baseUrl, e));
var r = '<img src="' + e + '" alt="' + n + '"';
return t && (r += ' title="' + t + '"'), r += this.options.xhtml ? "/>" : ">"
}, i.prototype.text = function (e) {
return e
}, l.prototype.strong = l.prototype.em = l.prototype.codespan = l.prototype.del = l.prototype.text = function (e) {
return e
}, l.prototype.link = l.prototype.image = function (e, t, n) {
return "" + n
}, l.prototype.br = function () {
return ""
}, o.parse = function (e, t) {
return new o(t).parse(e)
}, o.prototype.parse = function (e) {
this.inline = new s(e.links, this.options), this.inlineText = new s(e.links, f({}, this.options, {renderer: new l})), this.tokens = e.reverse();
for (var t = ""; this.next();) t += this.tok();
return t
}, o.prototype.next = function () {
return this.token = this.tokens.pop()
}, o.prototype.peek = function () {
return this.tokens[this.tokens.length - 1] || 0
}, o.prototype.parseText = function () {
for (var e = this.token.text; "text" === this.peek().type;) e += "\n" + this.next().text;
return this.inline.output(e)
}, o.prototype.tok = function () {
switch (this.token.type) {
case"space":
return "";
case"hr":
return this.renderer.hr();
case"heading":
return this.renderer.heading(this.inline.output(this.token.text), this.token.depth, h(this.inlineText.output(this.token.text)));
case"code":
return this.renderer.code(this.token.text, this.token.lang, this.token.escaped);
case"table":
var e, t, n, r, s = "", i = "";
for (n = "", e = 0; e < this.token.header.length; e++) n += this.renderer.tablecell(this.inline.output(this.token.header[e]), {
header: !0,
align: this.token.align[e]
});
for (s += this.renderer.tablerow(n), e = 0; e < this.token.cells.length; e++) {
for (t = this.token.cells[e], n = "", r = 0; r < t.length; r++) n += this.renderer.tablecell(this.inline.output(t[r]), {
header: !1,
align: this.token.align[r]
});
i += this.renderer.tablerow(n)
}
return this.renderer.table(s, i);
case"blockquote_start":
for (i = ""; "blockquote_end" !== this.next().type;) i += this.tok();
return this.renderer.blockquote(i);
case"list_start":
i = "";
for (var l = this.token.ordered, o = this.token.start; "list_end" !== this.next().type;) i += this.tok();
return this.renderer.list(i, l, o);
case"list_item_start":
for (i = "", this.token.task && (i += this.renderer.checkbox(this.token.checked)); "list_item_end" !== this.next().type;) i += "text" === this.token.type ? this.parseText() : this.tok();
return this.renderer.listitem(i);
case"loose_item_start":
for (i = ""; "list_item_end" !== this.next().type;) i += this.tok();
return this.renderer.listitem(i);
case"html":
return this.renderer.html(this.token.text);
case"paragraph":
return this.renderer.paragraph(this.inline.output(this.token.text));
case"text":
return this.renderer.paragraph(this.parseText())
}
};
var c = {}, g = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
function d() {
}
function f(e) {
for (var t, n, r = 1; r < arguments.length; r++) for (n in t = arguments[r]) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
return e
}
function b(e, t) {
var n = e.replace(/([^\\])\|/g, "$1 |").split(/ +\| */), r = 0;
if (n.length > t) n.splice(t); else for (; n.length < t;) n.push("");
for (; r < n.length; r++) n[r] = n[r].replace(/\\\|/g, "|");
return n
}
function m(e, t, r) {
if (null == e) throw new Error("marked(): input parameter is undefined or null");/*if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");*/
if (r || "function" == typeof t) {
r || (r = t, t = null);
var s, i, l = (t = f({}, m.defaults, t || {})).highlight, h = 0;
try {
s = n.lex(e, t)
} catch (e) {
return r(e)
}
i = s.length;
var p = function (e) {
if (e) return t.highlight = l, r(e);
var n;
try {
n = o.parse(s, t)
} catch (t) {
e = t
}
return t.highlight = l, e ? r(e) : r(null, n)
};
if (!l || l.length < 3) return p();
if (delete t.highlight, !i) return p();
for (; h < s.length; h++) !function (e) {
"code" !== e.type ? --i || p() : l(e.text, e.lang, function (t, n) {
return t ? p(t) : null == n || n === e.text ? --i || p() : (e.text = n, e.escaped = !0, void (--i || p()))
})
}(s[h])
} else try {
return t && (t = f({}, m.defaults, t)), o.parse(n.lex(e, t), t)
} catch (e) {
if (e.message += "\nPlease report this to https://github.com/markedjs/marked.", (t || m.defaults).silent) return "<p>An error occurred:</p><pre>" + a(e.message + "", !0) + "</pre>";
throw e
}
}
d.exec = d, m.options = m.setOptions = function (e) {
return f(m.defaults, e), m
}, m.getDefaults = function () {
return {
baseUrl: null,
breaks: !1,
gfm: !0,
headerIds: !0,
headerPrefix: "",
highlight: null,
langPrefix: "language-",
mangle: !0,
pedantic: !1,
renderer: new i,
sanitize: !1,
sanitizer: null,
silent: !1,
smartLists: !1,
smartypants: !1,
tables: !0,
xhtml: !1
}
}, m.defaults = m.getDefaults(), m.Parser = o, m.parser = o.parse, m.Renderer = i, m.TextRenderer = l, m.Lexer = n, m.lexer = n.lex, m.InlineLexer = s, m.inlineLexer = s.output, m.parse = m, "undefined" != typeof module && "object" == typeof exports ? module.exports = m : "function" == typeof define && define.amd ? define(function () {
return m
}) : e.marked = m
}(this || ("undefined" != typeof window ? window : global));
// Copyright (C) 2006 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var IN_GLOBAL_SCOPE = true;
window["PR_SHOULD_USE_CONTINUATION"] = true;
var prettyPrintOne;
var prettyPrint;
(function () {
var P = window;
var i = ["break,continue,do,else,for,if,return,while"];
var u = [i, "auto,case,char,const,default," + "double,enum,extern,float,goto,inline,int,long,register,short,signed," + "sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];
var p = [u, "catch,class,delete,false,import," + "new,operator,private,protected,public,this,throw,true,try,typeof"];
var l = [p, "alignof,align_union,asm,axiom,bool," + "concept,concept_map,const_cast,constexpr,decltype,delegate," + "dynamic_cast,explicit,export,friend,generic,late_check," + "mutable,namespace,nullptr,property,reinterpret_cast,static_assert," + "static_cast,template,typeid,typename,using,virtual,where"];
var y = [p, "abstract,assert,boolean,byte,extends,final,finally,implements,import," + "instanceof,interface,null,native,package,strictfp,super,synchronized," + "throws,transient"];
var U = [y, "as,base,by,checked,decimal,delegate,descending,dynamic,event," + "fixed,foreach,from,group,implicit,in,internal,into,is,let," + "lock,object,out,override,orderby,params,partial,readonly,ref,sbyte," + "sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort," + "var,virtual,where"];
var r = "all,and,by,catch,class,else,extends,false,finally," + "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," + "throw,true,try,unless,until,when,while,yes";
var x = [p, "debugger,eval,export,function,get,null,set,undefined,var,with," + "Infinity,NaN"];
var s = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," + "goto,if,import,last,local,my,next,no,our,print,package,redo,require," + "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
var K = [i, "and,as,assert,class,def,del," + "elif,except,exec,finally,from,global,import,in,is,lambda," + "nonlocal,not,or,pass,print,raise,try,with,yield," + "False,True,None"];
var g = [i, "alias,and,begin,case,class," + "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," + "rescue,retry,self,super,then,true,undef,unless,until,when,yield," + "BEGIN,END"];
var z = [i, "as,assert,const,copy,drop," + "enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv," + "pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"];
var J = [i, "case,done,elif,esac,eval,fi," + "function,in,local,set,then,until"];
var C = [l, U, x, s, K, g, J];
var e = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;
var E = "str";
var B = "kwd";
var j = "com";
var R = "typ";
var I = "lit";
var N = "pun";
var H = "pln";
var m = "tag";
var G = "dec";
var L = "src";
var S = "atn";
var n = "atv";
var Q = "nocode";
var O = "(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";
function k(ac) {
var ag = 0;
var V = false;
var af = false;
for (var Y = 0, X = ac.length; Y < X; ++Y) {
var ah = ac[Y];
if (ah.ignoreCase) {
af = true
} else {
if (/[a-z]/i.test(ah.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ""))) {
V = true;
af = false;
break
}
}
}
var ab = {"b": 8, "t": 9, "n": 10, "v": 11, "f": 12, "r": 13};
function ae(ak) {
var aj = ak.charCodeAt(0);
if (aj !== 92) {
return aj
}
var ai = ak.charAt(1);
aj = ab[ai];
if (aj) {
return aj
} else {
if ("0" <= ai && ai <= "7") {
return parseInt(ak.substring(1), 8)
} else {
if (ai === "u" || ai === "x") {
return parseInt(ak.substring(2), 16)
} else {
return ak.charCodeAt(1)
}
}
}
}
function W(ai) {
if (ai < 32) {
return (ai < 16 ? "\\x0" : "\\x") + ai.toString(16)
}
var aj = String.fromCharCode(ai);
return (aj === "\\" || aj === "-" || aj === "]" || aj === "^") ? "\\" + aj : aj
}
function aa(ao) {
var at = ao.substring(1, ao.length - 1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}" + "|\\\\x[0-9A-Fa-f]{2}" + "|\\\\[0-3][0-7]{0,2}" + "|\\\\[0-7]{1,2}" + "|\\\\[\\s\\S]" + "|-" + "|[^-\\\\]", "g"));
var ai = [];
var aq = at[0] === "^";
var ap = ["["];
if (aq) {
ap.push("^")
}
for (var au = aq ? 1 : 0, am = at.length; au < am; ++au) {
var ak = at[au];
if (/\\[bdsw]/i.test(ak)) {
ap.push(ak)
} else {
var aj = ae(ak);
var an;
if (au + 2 < am && "-" === at[au + 1]) {
an = ae(at[au + 2]);
au += 2
} else {
an = aj
}
ai.push([aj, an]);
if (!(an < 65 || aj > 122)) {
if (!(an < 65 || aj > 90)) {
ai.push([Math.max(65, aj) | 32, Math.min(an, 90) | 32])
}
if (!(an < 97 || aj > 122)) {
ai.push([Math.max(97, aj) & ~32, Math.min(an, 122) & ~32])
}
}
}
}
ai.sort(function (ax, aw) {
return (ax[0] - aw[0]) || (aw[1] - ax[1])
});
var al = [];
var ar = [];
for (var au = 0; au < ai.length; ++au) {
var av = ai[au];
if (av[0] <= ar[1] + 1) {
ar[1] = Math.max(ar[1], av[1])
} else {
al.push(ar = av)
}
}
for (var au = 0; au < al.length; ++au) {
var av = al[au];
ap.push(W(av[0]));
if (av[1] > av[0]) {
if (av[1] + 1 > av[0]) {
ap.push("-")
}
ap.push(W(av[1]))
}
}
ap.push("]");
return ap.join("")
}
function Z(ao) {
var am = ao.source.match(new RegExp("(?:" + "\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]" + "|\\\\u[A-Fa-f0-9]{4}" + "|\\\\x[A-Fa-f0-9]{2}" + "|\\\\[0-9]+" + "|\\\\[^ux0-9]" + "|\\(\\?[:!=]" + "|[\\(\\)\\^]" + "|[^\\x5B\\x5C\\(\\)\\^]+" + ")", "g"));
var ak = am.length;
var aq = [];
for (var an = 0, ap = 0; an < ak; ++an) {
var aj = am[an];
if (aj === "(") {
++ap
} else {
if ("\\" === aj.charAt(0)) {
var ai = +aj.substring(1);
if (ai) {
if (ai <= ap) {
aq[ai] = -1
} else {
am[an] = W(ai)
}
}
}
}
}
for (var an = 1; an < aq.length; ++an) {
if (-1 === aq[an]) {
aq[an] = ++ag
}
}
for (var an = 0, ap = 0; an < ak; ++an) {
var aj = am[an];
if (aj === "(") {
++ap;
if (!aq[ap]) {
am[an] = "(?:"
}
} else {
if ("\\" === aj.charAt(0)) {
var ai = +aj.substring(1);
if (ai && ai <= ap) {
am[an] = "\\" + aq[ai]
}
}
}
}
for (var an = 0; an < ak; ++an) {
if ("^" === am[an] && "^" !== am[an + 1]) {
am[an] = ""
}
}
if (ao.ignoreCase && V) {
for (var an = 0; an < ak; ++an) {
var aj = am[an];
var al = aj.charAt(0);
if (aj.length >= 2 && al === "[") {
am[an] = aa(aj)
} else {
if (al !== "\\") {
am[an] = aj.replace(/[a-zA-Z]/g, function (ar) {
var at = ar.charCodeAt(0);
return "[" + String.fromCharCode(at & ~32, at | 32) + "]"
})
}
}
}
}
return am.join("")
}
var ad = [];
for (var Y = 0, X = ac.length; Y < X; ++Y) {
var ah = ac[Y];
if (ah.global || ah.multiline) {
throw new Error("" + ah)
}
ad.push("(?:" + Z(ah) + ")")
}
return new RegExp(ad.join("|"), af ? "gi" : "g")
}
function b(ab, Z) {
var X = /(?:^|\s)nocode(?:\s|$)/;
var ac = [];
var aa = 0;
var Y = [];
var W = 0;
function V(ae) {
var ad = ae.nodeType;
if (ad == 1) {
if (X.test(ae.className)) {
return
}
for (var ah = ae.firstChild; ah; ah = ah.nextSibling) {
V(ah)
}
var ag = ae.nodeName.toLowerCase();
if ("br" === ag || "li" === ag) {
ac[W] = "\n";
Y[W << 1] = aa++;
Y[(W++ << 1) | 1] = ae
}
} else {
if (ad == 3 || ad == 4) {
var af = ae.nodeValue;
if (af.length) {
if (!Z) {
af = af.replace(/[ \t\r\n]+/g, " ")
} else {
af = af.replace(/\r\n?/g, "\n")
}
ac[W] = af;
Y[W << 1] = aa;
aa += af.length;
Y[(W++ << 1) | 1] = ae
}
}
}
}
V(ab);
return {sourceCode: ac.join("").replace(/\n$/, ""), spans: Y}
}
function D(V, X, Z, W) {
if (!X) {
return
}
var Y = {sourceCode: X, basePos: V};
Z(Y);
W.push.apply(W, Y.decorations)
}
var v = /\S/;
function o(V) {
var Y = undefined;
for (var X = V.firstChild; X; X = X.nextSibling) {
var W = X.nodeType;
Y = (W === 1) ? (Y ? V : X) : (W === 3) ? (v.test(X.nodeValue) ? V : Y) : Y
}
return Y === V ? undefined : Y
}
function f(X, W) {
var V = {};
var Y;
(function () {
var ag = X.concat(W);
var ak = [];
var aj = {};
for (var ae = 0, ac = ag.length; ae < ac; ++ae) {
var ab = ag[ae];
var af = ab[3];
if (af) {
for (var ah = af.length; --ah >= 0;) {
V[af.charAt(ah)] = ab
}
}
var ai = ab[1];
var ad = "" + ai;
if (!aj.hasOwnProperty(ad)) {
ak.push(ai);
aj[ad] = null
}
}
ak.push(/[\0-\uffff]/);
Y = k(ak)
})();
var aa = W.length;
var Z = function (ak) {
var ac = ak.sourceCode, ab = ak.basePos;
var ag = [ab, H];
var ai = 0;
var aq = ac.match(Y) || [];
var am = {};
for (var ah = 0, au = aq.length; ah < au; ++ah) {
var aj = aq[ah];
var at = am[aj];
var al = void 0;
var ap;
if (typeof at === "string") {
ap = false
} else {
var ad = V[aj.charAt(0)];
if (ad) {
al = aj.match(ad[1]);
at = ad[0]
} else {
for (var ar = 0; ar < aa; ++ar) {
ad = W[ar];
al = aj.match(ad[1]);
if (al) {
at = ad[0];
break
}
}
if (!al) {
at = H
}
}
ap = at.length >= 5 && "lang-" === at.substring(0, 5);
if (ap && !(al && typeof al[1] === "string")) {
ap = false;
at = L
}
if (!ap) {
am[aj] = at
}
}
var ae = ai;
ai += aj.length;
if (!ap) {
ag.push(ab + ae, at)
} else {
var ao = al[1];
var an = aj.indexOf(ao);
var af = an + ao.length;
if (al[2]) {
af = aj.length - al[2].length;
an = af - ao.length
}
var av = at.substring(5);
D(ab + ae, aj.substring(0, an), Z, ag);
D(ab + ae + an, ao, q(av, ao), ag);
D(ab + ae + af, aj.substring(af), Z, ag)
}
}
ak.decorations = ag
};
return Z
}
function h(af) {
var X = [], ab = [];
if (af["tripleQuotedStrings"]) {
X.push([E, /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/, null, "'\""])
} else {
if (af["multiLineStrings"]) {
X.push([E, /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/, null, "'\"`"])
} else {
X.push([E, /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/, null, "\"'"])
}
}
if (af["verbatimStrings"]) {
ab.push([E, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null])
}
var ad = af["hashComments"];
if (ad) {
if (af["cStyleComments"]) {
if (ad > 1) {
X.push([j, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, "#"])
} else {
X.push([j, /^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\r\n]*)/, null, "#"])
}
ab.push([E, /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/, null])
} else {
X.push([j, /^#[^\r\n]*/, null, "#"])
}
}
if (af["cStyleComments"]) {
ab.push([j, /^\/\/[^\r\n]*/, null]);
ab.push([j, /^\/\*[\s\S]*?(?:\*\/|$)/, null])
}
var W = af["regexLiterals"];
if (W) {
var Y = W > 1 ? "" : "\n\r";
var aa = Y ? "." : "[\\S\\s]";
var Z = ("/(?=[^/*" + Y + "])" + "(?:[^/\\x5B\\x5C" + Y + "]" + "|\\x5C" + aa + "|\\x5B(?:[^\\x5C\\x5D" + Y + "]" + "|\\x5C" + aa + ")*(?:\\x5D|$))+" + "/");
ab.push(["lang-regex", RegExp("^" + O + "(" + Z + ")")])
}
var ae = af["types"];
if (ae) {
ab.push([R, ae])
}
var ac = ("" + af["keywords"]).replace(/^ | $/g, "");
if (ac.length) {
ab.push([B, new RegExp("^(?:" + ac.replace(/[\s,]+/g, "|") + ")\\b"), null])
}
X.push([H, /^\s+/, null, " \r\n\t\xA0"]);
var V = "^.[^\\s\\w.$@'\"`/\\\\]*";
if (af["regexLiterals"]) {
V += "(?!s*/)"
}
ab.push([I, /^@[a-z_$][a-z_$@0-9]*/i, null], [R, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null], [H, /^[a-z_$][a-z_$@0-9]*/i, null], [I, new RegExp("^(?:" + "0x[a-f0-9]+" + "|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)" + "(?:e[+\\-]?\\d+)?" + ")" + "[a-z]*", "i"), null, "0123456789"], [H, /^\\[\s\S]?/, null], [N, new RegExp(V), null]);
return f(X, ab)
}
var M = h({
"keywords": C,
"hashComments": true,
"cStyleComments": true,
"multiLineStrings": true,
"regexLiterals": true
});
function T(X, ai, ab) {
var W = /(?:^|\s)nocode(?:\s|$)/;
var ad = /\r\n?|\n/;
var ae = X.ownerDocument;
var ah = ae.createElement("li");
while (X.firstChild) {
ah.appendChild(X.firstChild)
}
var Y = [ah];
function ag(ao) {
var an = ao.nodeType;
if (an == 1 && !W.test(ao.className)) {
if ("br" === ao.nodeName) {
af(ao);
if (ao.parentNode) {
ao.parentNode.removeChild(ao)
}
} else {
for (var aq = ao.firstChild; aq; aq = aq.nextSibling) {
ag(aq)
}
}
} else {
if ((an == 3 || an == 4) && ab) {
var ap = ao.nodeValue;
var al = ap.match(ad);
if (al) {
var ak = ap.substring(0, al.index);
ao.nodeValue = ak;
var aj = ap.substring(al.index + al[0].length);
if (aj) {
var am = ao.parentNode;
am.insertBefore(ae.createTextNode(aj), ao.nextSibling)
}
af(ao);
if (!ak) {
ao.parentNode.removeChild(ao)
}
}
}
}
}
function af(am) {
while (!am.nextSibling) {
am = am.parentNode;
if (!am) {
return
}
}
function ak(an, au) {
var at = au ? an.cloneNode(false) : an;
var aq = an.parentNode;
if (aq) {
var ar = ak(aq, 1);
var ap = an.nextSibling;
ar.appendChild(at);
for (var ao = ap; ao; ao = ap) {
ap = ao.nextSibling;
ar.appendChild(ao)
}
}
return at
}
var aj = ak(am.nextSibling, 0);
for (var al; (al = aj.parentNode) && al.nodeType === 1;) {
aj = al
}
Y.push(aj)
}
for (var aa = 0; aa < Y.length; ++aa) {
ag(Y[aa])
}
if (ai === (ai | 0)) {
Y[0].setAttribute("value", ai)
}
var ac = ae.createElement("ol");
ac.className = "linenums";
var Z = Math.max(0, ((ai - 1)) | 0) || 0;
for (var aa = 0, V = Y.length; aa < V; ++aa) {
ah = Y[aa];
ah.className = "L" + ((aa + Z) % 10);
if (!ah.firstChild) {
ah.appendChild(ae.createTextNode("\xA0"))
}
ac.appendChild(ah)
}
X.appendChild(ac)
}
function F(ag) {
var Y = /\bMSIE\s(\d+)/.exec(navigator.userAgent);
Y = Y && +Y[1] <= 8;
var ap = /\n/g;
var ao = ag.sourceCode;
var aq = ao.length;
var Z = 0;
var ae = ag.spans;
var W = ae.length;
var ak = 0;
var ab = ag.decorations;
var ac = ab.length;
var ad = 0;
ab[ac] = aq;
var aw, au;
for (au = aw = 0; au < ac;) {
if (ab[au] !== ab[au + 2]) {
ab[aw++] = ab[au++];
ab[aw++] = ab[au++]
} else {
au += 2
}
}
ac = aw;
for (au = aw = 0; au < ac;) {
var ax = ab[au];
var af = ab[au + 1];
var aa = au + 2;
while (aa + 2 <= ac && ab[aa + 1] === af) {
aa += 2
}
ab[aw++] = ax;
ab[aw++] = af;
au = aa
}
ac = ab.length = aw;
var av = ag.sourceNode;
var al;
if (av) {
al = av.style.display;
av.style.display = "none"
}
try {
var ai = null;
while (ak < W) {
var aj = ae[ak];
var V = ae[ak + 2] || aq;
var at = ab[ad + 2] || aq;
var aa = Math.min(V, at);
var an = ae[ak + 1];
var X;
if (an.nodeType !== 1 && (X = ao.substring(Z, aa))) {
if (Y) {
X = X.replace(ap, "\r")
}
an.nodeValue = X;
var am = an.ownerDocument;
var ar = am.createElement("span");
ar.className = ab[ad + 1];
var ah = an.parentNode;
ah.replaceChild(ar, an);
ar.appendChild(an);
if (Z < V) {
ae[ak + 1] = an = am.createTextNode(ao.substring(aa, V));
ah.insertBefore(an, ar.nextSibling)
}
}
Z = aa;
if (Z >= V) {
ak += 2
}
if (Z >= at) {
ad += 2
}
}
} finally {
if (av) {
av.style.display = al
}
}
}
var t = {};
function c(X, Y) {
for (var V = Y.length; --V >= 0;) {
var W = Y[V];
if (!t.hasOwnProperty(W)) {
t[W] = X
} else {
if (P["console"]) {
console["warn"]("cannot override language handler %s", W)
}
}
}
}
function q(W, V) {
if (!(W && t.hasOwnProperty(W))) {
W = /^\s*</.test(V) ? "default-markup" : "default-code"
}
return t[W]
}
c(M, ["default-code"]);
c(f([], [[H, /^[^<?]+/], [G, /^<!\w[^>]*(?:>|$)/], [j, /^<\!--[\s\S]*?(?:-\->|$)/], ["lang-", /^<\?([\s\S]+?)(?:\?>|$)/], ["lang-", /^<%([\s\S]+?)(?:%>|$)/], [N, /^(?:<[%?]|[%?]>)/], ["lang-", /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i], ["lang-js", /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i], ["lang-css", /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i], ["lang-in.tag", /^(<\/?[a-z][^<>]*>)/i]]), ["default-markup", "htm", "html", "mxml", "xhtml", "xml", "xsl"]);
c(f([[H, /^[\s]+/, null, " \t\r\n"], [n, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, "\"'"]], [[m, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i], [S, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i], ["lang-uq.val", /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/], [N, /^[=<>\/]+/], ["lang-js", /^on\w+\s*=\s*\"([^\"]+)\"/i], ["lang-js", /^on\w+\s*=\s*\'([^\']+)\'/i], ["lang-js", /^on\w+\s*=\s*([^\"\'>\s]+)/i], ["lang-css", /^style\s*=\s*\"([^\"]+)\"/i], ["lang-css", /^style\s*=\s*\'([^\']+)\'/i], ["lang-css", /^style\s*=\s*([^\"\'>\s]+)/i]]), ["in.tag"]);
c(f([], [[n, /^[\s\S]+/]]), ["uq.val"]);
c(h({
"keywords": l,
"hashComments": true,
"cStyleComments": true,
"types": e
}), ["c", "cc", "cpp", "cxx", "cyc", "m"]);
c(h({"keywords": "null,true,false"}), ["json"]);
c(h({"keywords": U, "hashComments": true, "cStyleComments": true, "verbatimStrings": true, "types": e}), ["cs"]);
c(h({"keywords": y, "cStyleComments": true}), ["java"]);
c(h({"keywords": J, "hashComments": true, "multiLineStrings": true}), ["bash", "bsh", "csh", "sh"]);
c(h({
"keywords": K,
"hashComments": true,
"multiLineStrings": true,
"tripleQuotedStrings": true
}), ["cv", "py", "python"]);
c(h({"keywords": s, "hashComments": true, "multiLineStrings": true, "regexLiterals": 2}), ["perl", "pl", "pm"]);
c(h({"keywords": g, "hashComments": true, "multiLineStrings": true, "regexLiterals": true}), ["rb", "ruby"]);
c(h({"keywords": x, "cStyleComments": true, "regexLiterals": true}), ["javascript", "js"]);
c(h({
"keywords": r,
"hashComments": 3,
"cStyleComments": true,
"multilineStrings": true,
"tripleQuotedStrings": true,
"regexLiterals": true
}), ["coffee"]);
c(h({"keywords": z, "cStyleComments": true, "multilineStrings": true}), ["rc", "rs", "rust"]);
c(f([], [[E, /^[\s\S]+/]]), ["regex"]);
function d(Y) {
var X = Y.langExtension;
try {
var V = b(Y.sourceNode, Y.pre);
var W = V.sourceCode;
Y.sourceCode = W;
Y.spans = V.spans;
Y.basePos = 0;
q(X, W)(Y);
F(Y)
} catch (Z) {
if (P["console"]) {
console["log"](Z && Z["stack"] || Z)
}
}
}
function A(Z, Y, X) {
var V = document.createElement("div");
V.innerHTML = "<pre>" + Z + "</pre>";
V = V.firstChild;
if (X) {
T(V, X, true)
}
var W = {langExtension: Y, numberLines: X, sourceNode: V, pre: 1};
d(W);
return V.innerHTML
}
function w(al, ab) {
var ah = ab || document.body;
var ao = ah.ownerDocument || document;
function aa(aq) {
return ah.getElementsByTagName(aq)
}
var ad = [aa("pre"), aa("code"), aa("xmp")];
var ae = [];
for (var ak = 0; ak < ad.length; ++ak) {
for (var aj = 0, ag = ad[ak].length; aj < ag; ++aj) {
ae.push(ad[ak][aj])
}
}
ad = null;
var ap = Date;
if (!ap["now"]) {
ap = {
"now": function () {
return +(new Date)
}
}
}
var ai = 0;
var ac;
var X = /\blang(?:uage)?-([\w.]+)(?!\S)/;
var an = /\bprettyprint\b/;
var W = /\bprettyprinted\b/;
var Z = /pre|xmp/i;
var V = /^code$/i;
var Y = /^(?:pre|code|xmp)$/i;
var am = {};
function af() {
var ay = (P["PR_SHOULD_USE_CONTINUATION"] ? ap["now"]() + 250 : Infinity);
for (; ai < ae.length && ap["now"]() < ay; ai++) {
var aA = ae[ai];
var aH = am;
for (var ax = aA; (ax = ax.previousSibling);) {
var aE = ax.nodeType;
var aF = (aE === 7 || aE === 8) && ax.nodeValue;
if (aF ? !/^\??prettify\b/.test(aF) : (aE !== 3 || /\S/.test(ax.nodeValue))) {
break
}
if (aF) {
aH = {};
aF.replace(/\b(\w+)=([\w:.%+-]+)/g, function (aJ, aI, aK) {
aH[aI] = aK
});
break
}
}
var aB = aA.className;
if ((aH !== am || an.test(aB)) && !W.test(aB)) {
var aD = false;
for (var au = aA.parentNode; au; au = au.parentNode) {
var aG = au.tagName;
if (Y.test(aG) && au.className && an.test(au.className)) {
aD = true;
break
}
}
if (!aD) {
aA.className += " prettyprinted";
var aw = aH["lang"];
if (!aw) {
aw = aB.match(X);
var ar;
if (!aw && (ar = o(aA)) && V.test(ar.tagName)) {
aw = ar.className.match(X)
}
if (aw) {
aw = aw[1]
}
}
var av;
if (Z.test(aA.tagName)) {
av = 1
} else {
var at = aA["currentStyle"];
var az = ao.defaultView;
var aq = (at ? at["whiteSpace"] : (az && az.getComputedStyle) ? az.getComputedStyle(aA, null).getPropertyValue("white-space") : 0);
av = aq && "pre" === aq.substring(0, 3)
}
var aC = aH["linenums"];
if (!(aC = aC === "true" || +aC)) {
aC = aB.match(/\blinenums\b(?::(\d+))?/);
aC = aC ? aC[1] && aC[1].length ? +aC[1] : true : false
}
if (aC) {
T(aA, aC, av)
}
ac = {langExtension: aw, sourceNode: aA, numberLines: aC, pre: av};
d(ac)
}
}
}
if (ai < ae.length) {
setTimeout(af, 250)
} else {
if ("function" === typeof al) {
al()
}
}
}
af()
}
var a = P["PR"] = {
"createSimpleLexer": f,
"registerLangHandler": c,
"sourceDecorator": h,
"PR_ATTRIB_NAME": S,
"PR_ATTRIB_VALUE": n,
"PR_COMMENT": j,
"PR_DECLARATION": G,
"PR_KEYWORD": B,
"PR_LITERAL": I,
"PR_NOCODE": Q,
"PR_PLAIN": H,
"PR_PUNCTUATION": N,
"PR_SOURCE": L,
"PR_STRING": E,
"PR_TAG": m,
"PR_TYPE": R,
"prettyPrintOne": IN_GLOBAL_SCOPE ? (P["prettyPrintOne"] = A) : (prettyPrintOne = A),
"prettyPrint": prettyPrint = IN_GLOBAL_SCOPE ? (P["prettyPrint"] = w) : (prettyPrint = w)
};
if (typeof define === "function" && define["amd"]) {
define("google-code-prettify", [], function () {
return a
})
}
})();
// ┌────────────────────────────────────────────────────────────────────┐ \\
// │ Raphaël 2.1.3 - JavaScript Vector Library │ \\
// ├────────────────────────────────────────────────────────────────────┤ \\
// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) │ \\
// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com) │ \\
// ├────────────────────────────────────────────────────────────────────┤ \\
// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\
// └────────────────────────────────────────────────────────────────────┘ \\
// Element= -> __Element=
!function (a) {
var b, c, d = "0.4.2", e = "hasOwnProperty", f = /[\.\/]/, g = "*", h = function () {
}, i = function (a, b) {
return a - b
}, j = {n: {}}, k = function (a, d) {
a = String(a);
var e, f = c, g = Array.prototype.slice.call(arguments, 2), h = k.listeners(a), j = 0, l = [], m = {}, n = [],
o = b;
b = a, c = 0;
for (var p = 0, q = h.length; q > p; p++) "zIndex" in h[p] && (l.push(h[p].zIndex), h[p].zIndex < 0 && (m[h[p].zIndex] = h[p]));
for (l.sort(i); l[j] < 0;) if (e = m[l[j++]], n.push(e.apply(d, g)), c) return c = f, n;
for (p = 0; q > p; p++) if (e = h[p], "zIndex" in e) if (e.zIndex == l[j]) {
if (n.push(e.apply(d, g)), c) break;
do if (j++, e = m[l[j]], e && n.push(e.apply(d, g)), c) break; while (e)
} else m[e.zIndex] = e; else if (n.push(e.apply(d, g)), c) break;
return c = f, b = o, n.length ? n : null
};
k._events = j, k.listeners = function (a) {
var b, c, d, e, h, i, k, l, m = a.split(f), n = j, o = [n], p = [];
for (e = 0, h = m.length; h > e; e++) {
for (l = [], i = 0, k = o.length; k > i; i++) for (n = o[i].n, c = [n[m[e]], n[g]], d = 2; d--;) b = c[d], b && (l.push(b), p = p.concat(b.f || []));
o = l
}
return p
}, k.on = function (a, b) {
if (a = String(a), "function" != typeof b) return function () {
};
for (var c = a.split(f), d = j, e = 0, g = c.length; g > e; e++) d = d.n, d = d.hasOwnProperty(c[e]) && d[c[e]] || (d[c[e]] = {n: {}});
for (d.f = d.f || [], e = 0, g = d.f.length; g > e; e++) if (d.f[e] == b) return h;
return d.f.push(b), function (a) {
+a == +a && (b.zIndex = +a)
}
}, k.f = function (a) {
var b = [].slice.call(arguments, 1);
return function () {
k.apply(null, [a, null].concat(b).concat([].slice.call(arguments, 0)))
}
}, k.stop = function () {
c = 1
}, k.nt = function (a) {
return a ? new RegExp("(?:\\.|\\/|^)" + a + "(?:\\.|\\/|$)").test(b) : b
}, k.nts = function () {
return b.split(f)
}, k.off = k.unbind = function (a, b) {
if (!a) return void (k._events = j = {n: {}});
var c, d, h, i, l, m, n, o = a.split(f), p = [j];
for (i = 0, l = o.length; l > i; i++) for (m = 0; m < p.length; m += h.length - 2) {
if (h = [m, 1], c = p[m].n, o[i] != g) c[o[i]] && h.push(c[o[i]]); else for (d in c) c[e](d) && h.push(c[d]);
p.splice.apply(p, h)
}
for (i = 0, l = p.length; l > i; i++) for (c = p[i]; c.n;) {
if (b) {
if (c.f) {
for (m = 0, n = c.f.length; n > m; m++) if (c.f[m] == b) {
c.f.splice(m, 1);
break
}
!c.f.length && delete c.f
}
for (d in c.n) if (c.n[e](d) && c.n[d].f) {
var q = c.n[d].f;
for (m = 0, n = q.length; n > m; m++) if (q[m] == b) {
q.splice(m, 1);
break
}
!q.length && delete c.n[d].f
}
} else {
delete c.f;
for (d in c.n) c.n[e](d) && c.n[d].f && delete c.n[d].f
}
c = c.n
}
}, k.once = function (a, b) {
var c = function () {
return k.unbind(a, c), b.apply(this, arguments)
};
return k.on(a, c)
}, k.version = d, k.toString = function () {
return "You are running Eve " + d
}, "undefined" != typeof module && module.exports ? module.exports = k : "undefined" != typeof define ? define("eve", [], function () {
return k
}) : a.eve = k
}(window || this), function (a, b) {
"function" == typeof define && define.amd ? define(["eve"], function (c) {
return b(a, c)
}) : b(a, a.eve || "function" == typeof require && require("eve"))
}(this, function (a, b) {
function c(a) {
if (c.is(a, "function")) return u ? a() : b.on("raphael.DOMload", a);
if (c.is(a, V)) return c._engine.create[D](c, a.splice(0, 3 + c.is(a[0], T))).add(a);
var d = Array.prototype.slice.call(arguments, 0);
if (c.is(d[d.length - 1], "function")) {
var e = d.pop();
return u ? e.call(c._engine.create[D](c, d)) : b.on("raphael.DOMload", function () {
e.call(c._engine.create[D](c, d))
})
}
return c._engine.create[D](c, arguments)
}
function d(a) {
if ("function" == typeof a || Object(a) !== a) return a;
var b = new a.constructor;
for (var c in a) a[z](c) && (b[c] = d(a[c]));
return b
}
function e(a, b) {
for (var c = 0, d = a.length; d > c; c++) if (a[c] === b) return a.push(a.splice(c, 1)[0])
}
function f(a, b, c) {
function d() {
var f = Array.prototype.slice.call(arguments, 0), g = f.join("␀"), h = d.cache = d.cache || {},
i = d.count = d.count || [];
return h[z](g) ? (e(i, g), c ? c(h[g]) : h[g]) : (i.length >= 1e3 && delete h[i.shift()], i.push(g), h[g] = a[D](b, f), c ? c(h[g]) : h[g])
}
return d
}
function g() {
return this.hex
}
function h(a, b) {
for (var c = [], d = 0, e = a.length; e - 2 * !b > d; d += 2) {
var f = [{x: +a[d - 2], y: +a[d - 1]}, {x: +a[d], y: +a[d + 1]}, {x: +a[d + 2], y: +a[d + 3]}, {
x: +a[d + 4],
y: +a[d + 5]
}];
b ? d ? e - 4 == d ? f[3] = {x: +a[0], y: +a[1]} : e - 2 == d && (f[2] = {x: +a[0], y: +a[1]}, f[3] = {
x: +a[2],
y: +a[3]
}) : f[0] = {x: +a[e - 2], y: +a[e - 1]} : e - 4 == d ? f[3] = f[2] : d || (f[0] = {
x: +a[d],
y: +a[d + 1]
}), c.push(["C", (-f[0].x + 6 * f[1].x + f[2].x) / 6, (-f[0].y + 6 * f[1].y + f[2].y) / 6, (f[1].x + 6 * f[2].x - f[3].x) / 6, (f[1].y + 6 * f[2].y - f[3].y) / 6, f[2].x, f[2].y])
}
return c
}
function i(a, b, c, d, e) {
var f = -3 * b + 9 * c - 9 * d + 3 * e, g = a * f + 6 * b - 12 * c + 6 * d;
return a * g - 3 * b + 3 * c
}
function j(a, b, c, d, e, f, g, h, j) {
null == j && (j = 1), j = j > 1 ? 1 : 0 > j ? 0 : j;
for (var k = j / 2, l = 12, m = [-.1252, .1252, -.3678, .3678, -.5873, .5873, -.7699, .7699, -.9041, .9041, -.9816, .9816], n = [.2491, .2491, .2335, .2335, .2032, .2032, .1601, .1601, .1069, .1069, .0472, .0472], o = 0, p = 0; l > p; p++) {
var q = k * m[p] + k, r = i(q, a, c, e, g), s = i(q, b, d, f, h), t = r * r + s * s;
o += n[p] * N.sqrt(t)
}
return k * o
}
function k(a, b, c, d, e, f, g, h, i) {
if (!(0 > i || j(a, b, c, d, e, f, g, h) < i)) {
var k, l = 1, m = l / 2, n = l - m, o = .01;
for (k = j(a, b, c, d, e, f, g, h, n); Q(k - i) > o;) m /= 2, n += (i > k ? 1 : -1) * m, k = j(a, b, c, d, e, f, g, h, n);
return n
}
}
function l(a, b, c, d, e, f, g, h) {
if (!(O(a, c) < P(e, g) || P(a, c) > O(e, g) || O(b, d) < P(f, h) || P(b, d) > O(f, h))) {
var i = (a * d - b * c) * (e - g) - (a - c) * (e * h - f * g),
j = (a * d - b * c) * (f - h) - (b - d) * (e * h - f * g), k = (a - c) * (f - h) - (b - d) * (e - g);
if (k) {
var l = i / k, m = j / k, n = +l.toFixed(2), o = +m.toFixed(2);
if (!(n < +P(a, c).toFixed(2) || n > +O(a, c).toFixed(2) || n < +P(e, g).toFixed(2) || n > +O(e, g).toFixed(2) || o < +P(b, d).toFixed(2) || o > +O(b, d).toFixed(2) || o < +P(f, h).toFixed(2) || o > +O(f, h).toFixed(2))) return {
x: l,
y: m
}
}
}
}
function m(a, b, d) {
var e = c.bezierBBox(a), f = c.bezierBBox(b);
if (!c.isBBoxIntersect(e, f)) return d ? 0 : [];
for (var g = j.apply(0, a), h = j.apply(0, b), i = O(~~(g / 5), 1), k = O(~~(h / 5), 1), m = [], n = [], o = {}, p = d ? 0 : [], q = 0; i + 1 > q; q++) {
var r = c.findDotsAtSegment.apply(c, a.concat(q / i));
m.push({x: r.x, y: r.y, t: q / i})
}
for (q = 0; k + 1 > q; q++) r = c.findDotsAtSegment.apply(c, b.concat(q / k)), n.push({x: r.x, y: r.y, t: q / k});
for (q = 0; i > q; q++) for (var s = 0; k > s; s++) {
var t = m[q], u = m[q + 1], v = n[s], w = n[s + 1], x = Q(u.x - t.x) < .001 ? "y" : "x",
y = Q(w.x - v.x) < .001 ? "y" : "x", z = l(t.x, t.y, u.x, u.y, v.x, v.y, w.x, w.y);
if (z) {
if (o[z.x.toFixed(4)] == z.y.toFixed(4)) continue;
o[z.x.toFixed(4)] = z.y.toFixed(4);
var A = t.t + Q((z[x] - t[x]) / (u[x] - t[x])) * (u.t - t.t),
B = v.t + Q((z[y] - v[y]) / (w[y] - v[y])) * (w.t - v.t);
A >= 0 && 1.001 >= A && B >= 0 && 1.001 >= B && (d ? p++ : p.push({x: z.x, y: z.y, t1: P(A, 1), t2: P(B, 1)}))
}
}
return p
}
function n(a, b, d) {
a = c._path2curve(a), b = c._path2curve(b);
for (var e, f, g, h, i, j, k, l, n, o, p = d ? 0 : [], q = 0, r = a.length; r > q; q++) {
var s = a[q];
if ("M" == s[0]) e = i = s[1], f = j = s[2]; else {
"C" == s[0] ? (n = [e, f].concat(s.slice(1)), e = n[6], f = n[7]) : (n = [e, f, e, f, i, j, i, j], e = i, f = j);
for (var t = 0, u = b.length; u > t; t++) {
var v = b[t];
if ("M" == v[0]) g = k = v[1], h = l = v[2]; else {
"C" == v[0] ? (o = [g, h].concat(v.slice(1)), g = o[6], h = o[7]) : (o = [g, h, g, h, k, l, k, l], g = k, h = l);
var w = m(n, o, d);
if (d) p += w; else {
for (var x = 0, y = w.length; y > x; x++) w[x].segment1 = q, w[x].segment2 = t, w[x].bez1 = n, w[x].bez2 = o;
p = p.concat(w)
}
}
}
}
}
return p
}
function o(a, b, c, d, e, f) {
null != a ? (this.a = +a, this.b = +b, this.c = +c, this.d = +d, this.e = +e, this.f = +f) : (this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0)
}
function p() {
return this.x + H + this.y + H + this.width + " × " + this.height
}
function q(a, b, c, d, e, f) {
function g(a) {
return ((l * a + k) * a + j) * a
}
function h(a, b) {
var c = i(a, b);
return ((o * c + n) * c + m) * c
}
function i(a, b) {
var c, d, e, f, h, i;
for (e = a, i = 0; 8 > i; i++) {
if (f = g(e) - a, Q(f) < b) return e;
if (h = (3 * l * e + 2 * k) * e + j, Q(h) < 1e-6) break;
e -= f / h
}
if (c = 0, d = 1, e = a, c > e) return c;
if (e > d) return d;
for (; d > c;) {
if (f = g(e), Q(f - a) < b) return e;
a > f ? c = e : d = e, e = (d - c) / 2 + c
}
return e
}
var j = 3 * b, k = 3 * (d - b) - j, l = 1 - j - k, m = 3 * c, n = 3 * (e - c) - m, o = 1 - m - n;
return h(a, 1 / (200 * f))
}
function r(a, b) {
var c = [], d = {};
if (this.ms = b, this.times = 1, a) {
for (var e in a) a[z](e) && (d[_(e)] = a[e], c.push(_(e)));
c.sort(lb)
}
this.anim = d, this.top = c[c.length - 1], this.percents = c
}
function s(a, d, e, f, g, h) {
e = _(e);
var i, j, k, l, m, n, p = a.ms, r = {}, s = {}, t = {};
if (f) for (v = 0, x = ic.length; x > v; v++) {
var u = ic[v];
if (u.el.id == d.id && u.anim == a) {
u.percent != e ? (ic.splice(v, 1), k = 1) : j = u, d.attr(u.totalOrigin);
break
}
} else f = +s;
for (var v = 0, x = a.percents.length; x > v; v++) {
if (a.percents[v] == e || a.percents[v] > f * a.top) {
e = a.percents[v], m = a.percents[v - 1] || 0, p = p / a.top * (e - m), l = a.percents[v + 1], i = a.anim[e];
break
}
f && d.attr(a.anim[a.percents[v]])
}
if (i) {
if (j) j.initstatus = f, j.start = new Date - j.ms * f; else {
for (var y in i) if (i[z](y) && (db[z](y) || d.paper.customAttributes[z](y))) switch (r[y] = d.attr(y), null == r[y] && (r[y] = cb[y]), s[y] = i[y], db[y]) {
case T:
t[y] = (s[y] - r[y]) / p;
break;
case"colour":
r[y] = c.getRGB(r[y]);
var A = c.getRGB(s[y]);
t[y] = {r: (A.r - r[y].r) / p, g: (A.g - r[y].g) / p, b: (A.b - r[y].b) / p};
break;
case"path":
var B = Kb(r[y], s[y]), C = B[1];
for (r[y] = B[0], t[y] = [], v = 0, x = r[y].length; x > v; v++) {
t[y][v] = [0];
for (var D = 1, F = r[y][v].length; F > D; D++) t[y][v][D] = (C[v][D] - r[y][v][D]) / p
}
break;
case"transform":
var G = d._, H = Pb(G[y], s[y]);
if (H) for (r[y] = H.from, s[y] = H.to, t[y] = [], t[y].real = !0, v = 0, x = r[y].length; x > v; v++) for (t[y][v] = [r[y][v][0]], D = 1, F = r[y][v].length; F > D; D++) t[y][v][D] = (s[y][v][D] - r[y][v][D]) / p; else {
var K = d.matrix || new o, L = {
_: {transform: G.transform}, getBBox: function () {
return d.getBBox(1)
}
};
r[y] = [K.a, K.b, K.c, K.d, K.e, K.f], Nb(L, s[y]), s[y] = L._.transform, t[y] = [(L.matrix.a - K.a) / p, (L.matrix.b - K.b) / p, (L.matrix.c - K.c) / p, (L.matrix.d - K.d) / p, (L.matrix.e - K.e) / p, (L.matrix.f - K.f) / p]
}
break;
case"csv":
var M = I(i[y])[J](w), N = I(r[y])[J](w);
if ("clip-rect" == y) for (r[y] = N, t[y] = [], v = N.length; v--;) t[y][v] = (M[v] - r[y][v]) / p;
s[y] = M;
break;
default:
for (M = [][E](i[y]), N = [][E](r[y]), t[y] = [], v = d.paper.customAttributes[y].length; v--;) t[y][v] = ((M[v] || 0) - (N[v] || 0)) / p
}
var O = i.easing, P = c.easing_formulas[O];
if (!P) if (P = I(O).match(Z), P && 5 == P.length) {
var Q = P;
P = function (a) {
return q(a, +Q[1], +Q[2], +Q[3], +Q[4], p)
}
} else P = nb;
if (n = i.start || a.start || +new Date, u = {
anim: a,
percent: e,
timestamp: n,
start: n + (a.del || 0),
status: 0,
initstatus: f || 0,
stop: !1,
ms: p,
easing: P,
from: r,
diff: t,
to: s,
el: d,
callback: i.callback,
prev: m,
next: l,
repeat: h || a.times,
origin: d.attr(),
totalOrigin: g
}, ic.push(u), f && !j && !k && (u.stop = !0, u.start = new Date - p * f, 1 == ic.length)) return kc();
k && (u.start = new Date - u.ms * f), 1 == ic.length && jc(kc)
}
b("raphael.anim.start." + d.id, d, a)
}
}
function t(a) {
for (var b = 0; b < ic.length; b++) ic[b].el.paper == a && ic.splice(b--, 1)
}
c.version = "2.1.2", c.eve = b;
var u, v, w = /[, ]+/, x = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1}, y = /\{(\d+)\}/g,
z = "hasOwnProperty", A = {doc: document, win: a},
B = {was: Object.prototype[z].call(A.win, "Raphael"), is: A.win.Raphael}, C = function () {
this.ca = this.customAttributes = {}
}, D = "apply", E = "concat", F = "ontouchstart" in A.win || A.win.DocumentTouch && A.doc instanceof DocumentTouch,
G = "", H = " ", I = String, J = "split",
K = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[J](H),
L = {mousedown: "touchstart", mousemove: "touchmove", mouseup: "touchend"}, M = I.prototype.toLowerCase, N = Math,
O = N.max, P = N.min, Q = N.abs, R = N.pow, S = N.PI, T = "number", U = "string", V = "array",
W = Object.prototype.toString,
X = (c._ISURL = /^url\(['"]?(.+?)['"]?\)$/i, /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i),
Y = {NaN: 1, Infinity: 1, "-Infinity": 1}, Z = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,
$ = N.round, _ = parseFloat, ab = parseInt, bb = I.prototype.toUpperCase, cb = c._availableAttrs = {
"arrow-end": "none",
"arrow-start": "none",
blur: 0,
"clip-rect": "0 0 1e9 1e9",
cursor: "default",
cx: 0,
cy: 0,
fill: "#fff",
"fill-opacity": 1,
font: '10px "Arial"',
"font-family": '"Arial"',
"font-size": "10",
"font-style": "normal",
"font-weight": 400,
gradient: 0,
height: 0,
href: "http://raphaeljs.com/",
"letter-spacing": 0,
opacity: 1,
path: "M0,0",
r: 0,
rx: 0,
ry: 0,
src: "",
stroke: "#000",
"stroke-dasharray": "",
"stroke-linecap": "butt",
"stroke-linejoin": "butt",
"stroke-miterlimit": 0,
"stroke-opacity": 1,
"stroke-width": 1,
target: "_blank",
"text-anchor": "middle",
title: "Raphael",
transform: "",
width: 0,
x: 0,
y: 0
}, db = c._availableAnimAttrs = {
blur: T,
"clip-rect": "csv",
cx: T,
cy: T,
fill: "colour",
"fill-opacity": T,
"font-size": T,
height: T,
opacity: T,
path: "path",
r: T,
rx: T,
ry: T,
stroke: "colour",
"stroke-opacity": T,
"stroke-width": T,
transform: "transform",
width: T,
x: T,
y: T
},
eb = /[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,
fb = {hs: 1, rg: 1}, gb = /,?([achlmqrstvxz]),?/gi,
hb = /([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,
ib = /([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,
jb = /(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi,
kb = (c._radial_gradient = /^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/, {}),
lb = function (a, b) {
return _(a) - _(b)
}, mb = function () {
}, nb = function (a) {
return a
}, ob = c._rectPath = function (a, b, c, d, e) {
return e ? [["M", a + e, b], ["l", c - 2 * e, 0], ["a", e, e, 0, 0, 1, e, e], ["l", 0, d - 2 * e], ["a", e, e, 0, 0, 1, -e, e], ["l", 2 * e - c, 0], ["a", e, e, 0, 0, 1, -e, -e], ["l", 0, 2 * e - d], ["a", e, e, 0, 0, 1, e, -e], ["z"]] : [["M", a, b], ["l", c, 0], ["l", 0, d], ["l", -c, 0], ["z"]]
}, pb = function (a, b, c, d) {
return null == d && (d = c), [["M", a, b], ["m", 0, -d], ["a", c, d, 0, 1, 1, 0, 2 * d], ["a", c, d, 0, 1, 1, 0, -2 * d], ["z"]]
}, qb = c._getPath = {
path: function (a) {
return a.attr("path")
}, circle: function (a) {
var b = a.attrs;
return pb(b.cx, b.cy, b.r)
}, ellipse: function (a) {
var b = a.attrs;
return pb(b.cx, b.cy, b.rx, b.ry)
}, rect: function (a) {
var b = a.attrs;
return ob(b.x, b.y, b.width, b.height, b.r)
}, image: function (a) {
var b = a.attrs;
return ob(b.x, b.y, b.width, b.height)
}, text: function (a) {
var b = a._getBBox();
return ob(b.x, b.y, b.width, b.height)
}, set: function (a) {
var b = a._getBBox();
return ob(b.x, b.y, b.width, b.height)
}
}, rb = c.mapPath = function (a, b) {
if (!b) return a;
var c, d, e, f, g, h, i;
for (a = Kb(a), e = 0, g = a.length; g > e; e++) for (i = a[e], f = 1, h = i.length; h > f; f += 2) c = b.x(i[f], i[f + 1]), d = b.y(i[f], i[f + 1]), i[f] = c, i[f + 1] = d;
return a
};
if (c._g = A, c.type = A.win.SVGAngle || A.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML", "VML" == c.type) {
var sb, tb = A.doc.createElement("div");
if (tb.innerHTML = '<v:shape adj="1"/>', sb = tb.firstChild, sb.style.behavior = "url(#default#VML)", !sb || "object" != typeof sb.adj) return c.type = G;
tb = null
}
c.svg = !(c.vml = "VML" == c.type), c._Paper = C, c.fn = v = C.prototype = c.prototype, c._id = 0, c._oid = 0, c.is = function (a, b) {
return b = M.call(b), "finite" == b ? !Y[z](+a) : "array" == b ? a instanceof Array : "null" == b && null === a || b == typeof a && null !== a || "object" == b && a === Object(a) || "array" == b && Array.isArray && Array.isArray(a) || W.call(a).slice(8, -1).toLowerCase() == b
}, c.angle = function (a, b, d, e, f, g) {
if (null == f) {
var h = a - d, i = b - e;
return h || i ? (180 + 180 * N.atan2(-i, -h) / S + 360) % 360 : 0
}
return c.angle(a, b, f, g) - c.angle(d, e, f, g)
}, c.rad = function (a) {
return a % 360 * S / 180
}, c.deg = function (a) {
return 180 * a / S % 360
}, c.snapTo = function (a, b, d) {
if (d = c.is(d, "finite") ? d : 10, c.is(a, V)) {
for (var e = a.length; e--;) if (Q(a[e] - b) <= d) return a[e]
} else {
a = +a;
var f = b % a;
if (d > f) return b - f;
if (f > a - d) return b - f + a
}
return b
};
c.createUUID = function (a, b) {
return function () {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a, b).toUpperCase()
}
}(/[xy]/g, function (a) {
var b = 16 * N.random() | 0, c = "x" == a ? b : 3 & b | 8;
return c.toString(16)
});
c.setWindow = function (a) {
b("raphael.setWindow", c, A.win, a), A.win = a, A.doc = A.win.document, c._engine.initWin && c._engine.initWin(A.win)
};
var ub = function (a) {
if (c.vml) {
var b, d = /^\s+|\s+$/g;
try {
var e = new ActiveXObject("htmlfile");
e.write("<body>"), e.close(), b = e.body
} catch (g) {
b = createPopup().document.body
}
var h = b.createTextRange();
ub = f(function (a) {
try {
b.style.color = I(a).replace(d, G);
var c = h.queryCommandValue("ForeColor");
return c = (255 & c) << 16 | 65280 & c | (16711680 & c) >>> 16, "#" + ("000000" + c.toString(16)).slice(-6)
} catch (e) {
return "none"
}
})
} else {
var i = A.doc.createElement("i");
i.title = "Raphaël Colour Picker", i.style.display = "none", A.doc.body.appendChild(i), ub = f(function (a) {
return i.style.color = a, A.doc.defaultView.getComputedStyle(i, G).getPropertyValue("color")
})
}
return ub(a)
}, vb = function () {
return "hsb(" + [this.h, this.s, this.b] + ")"
}, wb = function () {
return "hsl(" + [this.h, this.s, this.l] + ")"
}, xb = function () {
return this.hex
}, yb = function (a, b, d) {
if (null == b && c.is(a, "object") && "r" in a && "g" in a && "b" in a && (d = a.b, b = a.g, a = a.r), null == b && c.is(a, U)) {
var e = c.getRGB(a);
a = e.r, b = e.g, d = e.b
}
return (a > 1 || b > 1 || d > 1) && (a /= 255, b /= 255, d /= 255), [a, b, d]
}, zb = function (a, b, d, e) {
a *= 255, b *= 255, d *= 255;
var f = {r: a, g: b, b: d, hex: c.rgb(a, b, d), toString: xb};
return c.is(e, "finite") && (f.opacity = e), f
};
c.color = function (a) {
var b;
return c.is(a, "object") && "h" in a && "s" in a && "b" in a ? (b = c.hsb2rgb(a), a.r = b.r, a.g = b.g, a.b = b.b, a.hex = b.hex) : c.is(a, "object") && "h" in a && "s" in a && "l" in a ? (b = c.hsl2rgb(a), a.r = b.r, a.g = b.g, a.b = b.b, a.hex = b.hex) : (c.is(a, "string") && (a = c.getRGB(a)), c.is(a, "object") && "r" in a && "g" in a && "b" in a ? (b = c.rgb2hsl(a), a.h = b.h, a.s = b.s, a.l = b.l, b = c.rgb2hsb(a), a.v = b.b) : (a = {hex: "none"}, a.r = a.g = a.b = a.h = a.s = a.v = a.l = -1)), a.toString = xb, a
}, c.hsb2rgb = function (a, b, c, d) {
this.is(a, "object") && "h" in a && "s" in a && "b" in a && (c = a.b, b = a.s, d = a.o, a = a.h), a *= 360;
var e, f, g, h, i;
return a = a % 360 / 60, i = c * b, h = i * (1 - Q(a % 2 - 1)), e = f = g = c - i, a = ~~a, e += [i, h, 0, 0, h, i][a], f += [h, i, i, h, 0, 0][a], g += [0, 0, h, i, i, h][a], zb(e, f, g, d)
}, c.hsl2rgb = function (a, b, c, d) {
this.is(a, "object") && "h" in a && "s" in a && "l" in a && (c = a.l, b = a.s, a = a.h), (a > 1 || b > 1 || c > 1) && (a /= 360, b /= 100, c /= 100), a *= 360;
var e, f, g, h, i;
return a = a % 360 / 60, i = 2 * b * (.5 > c ? c : 1 - c), h = i * (1 - Q(a % 2 - 1)), e = f = g = c - i / 2, a = ~~a, e += [i, h, 0, 0, h, i][a], f += [h, i, i, h, 0, 0][a], g += [0, 0, h, i, i, h][a], zb(e, f, g, d)
}, c.rgb2hsb = function (a, b, c) {
c = yb(a, b, c), a = c[0], b = c[1], c = c[2];
var d, e, f, g;
return f = O(a, b, c), g = f - P(a, b, c), d = 0 == g ? null : f == a ? (b - c) / g : f == b ? (c - a) / g + 2 : (a - b) / g + 4, d = (d + 360) % 6 * 60 / 360, e = 0 == g ? 0 : g / f, {
h: d,
s: e,
b: f,
toString: vb
}
}, c.rgb2hsl = function (a, b, c) {
c = yb(a, b, c), a = c[0], b = c[1], c = c[2];
var d, e, f, g, h, i;
return g = O(a, b, c), h = P(a, b, c), i = g - h, d = 0 == i ? null : g == a ? (b - c) / i : g == b ? (c - a) / i + 2 : (a - b) / i + 4, d = (d + 360) % 6 * 60 / 360, f = (g + h) / 2, e = 0 == i ? 0 : .5 > f ? i / (2 * f) : i / (2 - 2 * f), {
h: d,
s: e,
l: f,
toString: wb
}
}, c._path2string = function () {
return this.join(",").replace(gb, "$1")
};
c._preload = function (a, b) {
var c = A.doc.createElement("img");
c.style.cssText = "position:absolute;left:-9999em;top:-9999em", c.onload = function () {
b.call(this), this.onload = null, A.doc.body.removeChild(this)
}, c.onerror = function () {
A.doc.body.removeChild(this)
}, A.doc.body.appendChild(c), c.src = a
};
c.getRGB = f(function (a) {
if (!a || (a = I(a)).indexOf("-") + 1) return {r: -1, g: -1, b: -1, hex: "none", error: 1, toString: g};
if ("none" == a) return {r: -1, g: -1, b: -1, hex: "none", toString: g};
!(fb[z](a.toLowerCase().substring(0, 2)) || "#" == a.charAt()) && (a = ub(a));
var b, d, e, f, h, i, j = a.match(X);
return j ? (j[2] && (e = ab(j[2].substring(5), 16), d = ab(j[2].substring(3, 5), 16), b = ab(j[2].substring(1, 3), 16)), j[3] && (e = ab((h = j[3].charAt(3)) + h, 16), d = ab((h = j[3].charAt(2)) + h, 16), b = ab((h = j[3].charAt(1)) + h, 16)), j[4] && (i = j[4][J](eb), b = _(i[0]), "%" == i[0].slice(-1) && (b *= 2.55), d = _(i[1]), "%" == i[1].slice(-1) && (d *= 2.55), e = _(i[2]), "%" == i[2].slice(-1) && (e *= 2.55), "rgba" == j[1].toLowerCase().slice(0, 4) && (f = _(i[3])), i[3] && "%" == i[3].slice(-1) && (f /= 100)), j[5] ? (i = j[5][J](eb), b = _(i[0]), "%" == i[0].slice(-1) && (b *= 2.55), d = _(i[1]), "%" == i[1].slice(-1) && (d *= 2.55), e = _(i[2]), "%" == i[2].slice(-1) && (e *= 2.55), ("deg" == i[0].slice(-3) || "°" == i[0].slice(-1)) && (b /= 360), "hsba" == j[1].toLowerCase().slice(0, 4) && (f = _(i[3])), i[3] && "%" == i[3].slice(-1) && (f /= 100), c.hsb2rgb(b, d, e, f)) : j[6] ? (i = j[6][J](eb), b = _(i[0]), "%" == i[0].slice(-1) && (b *= 2.55), d = _(i[1]), "%" == i[1].slice(-1) && (d *= 2.55), e = _(i[2]), "%" == i[2].slice(-1) && (e *= 2.55), ("deg" == i[0].slice(-3) || "°" == i[0].slice(-1)) && (b /= 360), "hsla" == j[1].toLowerCase().slice(0, 4) && (f = _(i[3])), i[3] && "%" == i[3].slice(-1) && (f /= 100), c.hsl2rgb(b, d, e, f)) : (j = {
r: b,
g: d,
b: e,
toString: g
}, j.hex = "#" + (16777216 | e | d << 8 | b << 16).toString(16).slice(1), c.is(f, "finite") && (j.opacity = f), j)) : {
r: -1,
g: -1,
b: -1,
hex: "none",
error: 1,
toString: g
}
}, c), c.hsb = f(function (a, b, d) {
return c.hsb2rgb(a, b, d).hex
}), c.hsl = f(function (a, b, d) {
return c.hsl2rgb(a, b, d).hex
}), c.rgb = f(function (a, b, c) {
return "#" + (16777216 | c | b << 8 | a << 16).toString(16).slice(1)
}), c.getColor = function (a) {
var b = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: a || .75}, c = this.hsb2rgb(b.h, b.s, b.b);
return b.h += .075, b.h > 1 && (b.h = 0, b.s -= .2, b.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: b.b})), c.hex
}, c.getColor.reset = function () {
delete this.start
}, c.parsePathString = function (a) {
if (!a) return null;
var b = Ab(a);
if (b.arr) return Cb(b.arr);
var d = {a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0}, e = [];
return c.is(a, V) && c.is(a[0], V) && (e = Cb(a)), e.length || I(a).replace(hb, function (a, b, c) {
var f = [], g = b.toLowerCase();
if (c.replace(jb, function (a, b) {
b && f.push(+b)
}), "m" == g && f.length > 2 && (e.push([b][E](f.splice(0, 2))), g = "l", b = "m" == b ? "l" : "L"), "r" == g) e.push([b][E](f)); else for (; f.length >= d[g] && (e.push([b][E](f.splice(0, d[g]))), d[g]);) ;
}), e.toString = c._path2string, b.arr = Cb(e), e
}, c.parseTransformString = f(function (a) {
if (!a) return null;
var b = [];
return c.is(a, V) && c.is(a[0], V) && (b = Cb(a)), b.length || I(a).replace(ib, function (a, c, d) {
{
var e = [];
M.call(c)
}
d.replace(jb, function (a, b) {
b && e.push(+b)
}), b.push([c][E](e))
}), b.toString = c._path2string, b
});
var Ab = function (a) {
var b = Ab.ps = Ab.ps || {};
return b[a] ? b[a].sleep = 100 : b[a] = {sleep: 100}, setTimeout(function () {
for (var c in b) b[z](c) && c != a && (b[c].sleep--, !b[c].sleep && delete b[c])
}), b[a]
};
c.findDotsAtSegment = function (a, b, c, d, e, f, g, h, i) {
var j = 1 - i, k = R(j, 3), l = R(j, 2), m = i * i, n = m * i,
o = k * a + 3 * l * i * c + 3 * j * i * i * e + n * g, p = k * b + 3 * l * i * d + 3 * j * i * i * f + n * h,
q = a + 2 * i * (c - a) + m * (e - 2 * c + a), r = b + 2 * i * (d - b) + m * (f - 2 * d + b),
s = c + 2 * i * (e - c) + m * (g - 2 * e + c), t = d + 2 * i * (f - d) + m * (h - 2 * f + d), u = j * a + i * c,
v = j * b + i * d, w = j * e + i * g, x = j * f + i * h, y = 90 - 180 * N.atan2(q - s, r - t) / S;
return (q > s || t > r) && (y += 180), {
x: o,
y: p,
m: {x: q, y: r},
n: {x: s, y: t},
start: {x: u, y: v},
end: {x: w, y: x},
alpha: y
}
}, c.bezierBBox = function (a, b, d, e, f, g, h, i) {
c.is(a, "array") || (a = [a, b, d, e, f, g, h, i]);
var j = Jb.apply(null, a);
return {x: j.min.x, y: j.min.y, x2: j.max.x, y2: j.max.y, width: j.max.x - j.min.x, height: j.max.y - j.min.y}
}, c.isPointInsideBBox = function (a, b, c) {
return b >= a.x && b <= a.x2 && c >= a.y && c <= a.y2
}, c.isBBoxIntersect = function (a, b) {
var d = c.isPointInsideBBox;
return d(b, a.x, a.y) || d(b, a.x2, a.y) || d(b, a.x, a.y2) || d(b, a.x2, a.y2) || d(a, b.x, b.y) || d(a, b.x2, b.y) || d(a, b.x, b.y2) || d(a, b.x2, b.y2) || (a.x < b.x2 && a.x > b.x || b.x < a.x2 && b.x > a.x) && (a.y < b.y2 && a.y > b.y || b.y < a.y2 && b.y > a.y)
}, c.pathIntersection = function (a, b) {
return n(a, b)
}, c.pathIntersectionNumber = function (a, b) {
return n(a, b, 1)
}, c.isPointInsidePath = function (a, b, d) {
var e = c.pathBBox(a);
return c.isPointInsideBBox(e, b, d) && n(a, [["M", b, d], ["H", e.x2 + 10]], 1) % 2 == 1
}, c._removedFactory = function (a) {
return function () {
b("raphael.log", null, "Raphaël: you are calling to method “" + a + "” of removed object", a)
}
};
var Bb = c.pathBBox = function (a) {
var b = Ab(a);
if (b.bbox) return d(b.bbox);
if (!a) return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0};
a = Kb(a);
for (var c, e = 0, f = 0, g = [], h = [], i = 0, j = a.length; j > i; i++) if (c = a[i], "M" == c[0]) e = c[1], f = c[2], g.push(e), h.push(f); else {
var k = Jb(e, f, c[1], c[2], c[3], c[4], c[5], c[6]);
g = g[E](k.min.x, k.max.x), h = h[E](k.min.y, k.max.y), e = c[5], f = c[6]
}
var l = P[D](0, g), m = P[D](0, h), n = O[D](0, g), o = O[D](0, h), p = n - l, q = o - m,
r = {x: l, y: m, x2: n, y2: o, width: p, height: q, cx: l + p / 2, cy: m + q / 2};
return b.bbox = d(r), r
}, Cb = function (a) {
var b = d(a);
return b.toString = c._path2string, b
}, Db = c._pathToRelative = function (a) {
var b = Ab(a);
if (b.rel) return Cb(b.rel);
c.is(a, V) && c.is(a && a[0], V) || (a = c.parsePathString(a));
var d = [], e = 0, f = 0, g = 0, h = 0, i = 0;
"M" == a[0][0] && (e = a[0][1], f = a[0][2], g = e, h = f, i++, d.push(["M", e, f]));
for (var j = i, k = a.length; k > j; j++) {
var l = d[j] = [], m = a[j];
if (m[0] != M.call(m[0])) switch (l[0] = M.call(m[0]), l[0]) {
case"a":
l[1] = m[1], l[2] = m[2], l[3] = m[3], l[4] = m[4], l[5] = m[5], l[6] = +(m[6] - e).toFixed(3), l[7] = +(m[7] - f).toFixed(3);
break;
case"v":
l[1] = +(m[1] - f).toFixed(3);
break;
case"m":
g = m[1], h = m[2];
default:
for (var n = 1, o = m.length; o > n; n++) l[n] = +(m[n] - (n % 2 ? e : f)).toFixed(3)
} else {
l = d[j] = [], "m" == m[0] && (g = m[1] + e, h = m[2] + f);
for (var p = 0, q = m.length; q > p; p++) d[j][p] = m[p]
}
var r = d[j].length;
switch (d[j][0]) {
case"z":
e = g, f = h;
break;
case"h":
e += +d[j][r - 1];
break;
case"v":
f += +d[j][r - 1];
break;
default:
e += +d[j][r - 2], f += +d[j][r - 1]
}
}
return d.toString = c._path2string, b.rel = Cb(d), d
}, Eb = c._pathToAbsolute = function (a) {
var b = Ab(a);
if (b.abs) return Cb(b.abs);
if (c.is(a, V) && c.is(a && a[0], V) || (a = c.parsePathString(a)), !a || !a.length) return [["M", 0, 0]];
var d = [], e = 0, f = 0, g = 0, i = 0, j = 0;
"M" == a[0][0] && (e = +a[0][1], f = +a[0][2], g = e, i = f, j++, d[0] = ["M", e, f]);
for (var k, l, m = 3 == a.length && "M" == a[0][0] && "R" == a[1][0].toUpperCase() && "Z" == a[2][0].toUpperCase(), n = j, o = a.length; o > n; n++) {
if (d.push(k = []), l = a[n], l[0] != bb.call(l[0])) switch (k[0] = bb.call(l[0]), k[0]) {
case"A":
k[1] = l[1], k[2] = l[2], k[3] = l[3], k[4] = l[4], k[5] = l[5], k[6] = +(l[6] + e), k[7] = +(l[7] + f);
break;
case"V":
k[1] = +l[1] + f;
break;
case"H":
k[1] = +l[1] + e;
break;
case"R":
for (var p = [e, f][E](l.slice(1)), q = 2, r = p.length; r > q; q++) p[q] = +p[q] + e, p[++q] = +p[q] + f;
d.pop(), d = d[E](h(p, m));
break;
case"M":
g = +l[1] + e, i = +l[2] + f;
default:
for (q = 1, r = l.length; r > q; q++) k[q] = +l[q] + (q % 2 ? e : f)
} else if ("R" == l[0]) p = [e, f][E](l.slice(1)), d.pop(), d = d[E](h(p, m)), k = ["R"][E](l.slice(-2)); else for (var s = 0, t = l.length; t > s; s++) k[s] = l[s];
switch (k[0]) {
case"Z":
e = g, f = i;
break;
case"H":
e = k[1];
break;
case"V":
f = k[1];
break;
case"M":
g = k[k.length - 2], i = k[k.length - 1];
default:
e = k[k.length - 2], f = k[k.length - 1]
}
}
return d.toString = c._path2string, b.abs = Cb(d), d
}, Fb = function (a, b, c, d) {
return [a, b, c, d, c, d]
}, Gb = function (a, b, c, d, e, f) {
var g = 1 / 3, h = 2 / 3;
return [g * a + h * c, g * b + h * d, g * e + h * c, g * f + h * d, e, f]
}, Hb = function (a, b, c, d, e, g, h, i, j, k) {
var l, m = 120 * S / 180, n = S / 180 * (+e || 0), o = [], p = f(function (a, b, c) {
var d = a * N.cos(c) - b * N.sin(c), e = a * N.sin(c) + b * N.cos(c);
return {x: d, y: e}
});
if (k) y = k[0], z = k[1], w = k[2], x = k[3]; else {
l = p(a, b, -n), a = l.x, b = l.y, l = p(i, j, -n), i = l.x, j = l.y;
var q = (N.cos(S / 180 * e), N.sin(S / 180 * e), (a - i) / 2), r = (b - j) / 2,
s = q * q / (c * c) + r * r / (d * d);
s > 1 && (s = N.sqrt(s), c = s * c, d = s * d);
var t = c * c, u = d * d,
v = (g == h ? -1 : 1) * N.sqrt(Q((t * u - t * r * r - u * q * q) / (t * r * r + u * q * q))),
w = v * c * r / d + (a + i) / 2, x = v * -d * q / c + (b + j) / 2, y = N.asin(((b - x) / d).toFixed(9)),
z = N.asin(((j - x) / d).toFixed(9));
y = w > a ? S - y : y, z = w > i ? S - z : z, 0 > y && (y = 2 * S + y), 0 > z && (z = 2 * S + z), h && y > z && (y -= 2 * S), !h && z > y && (z -= 2 * S)
}
var A = z - y;
if (Q(A) > m) {
var B = z, C = i, D = j;
z = y + m * (h && z > y ? 1 : -1), i = w + c * N.cos(z), j = x + d * N.sin(z), o = Hb(i, j, c, d, e, 0, h, C, D, [z, B, w, x])
}
A = z - y;
var F = N.cos(y), G = N.sin(y), H = N.cos(z), I = N.sin(z), K = N.tan(A / 4), L = 4 / 3 * c * K, M = 4 / 3 * d * K,
O = [a, b], P = [a + L * G, b - M * F], R = [i + L * I, j - M * H], T = [i, j];
if (P[0] = 2 * O[0] - P[0], P[1] = 2 * O[1] - P[1], k) return [P, R, T][E](o);
o = [P, R, T][E](o).join()[J](",");
for (var U = [], V = 0, W = o.length; W > V; V++) U[V] = V % 2 ? p(o[V - 1], o[V], n).y : p(o[V], o[V + 1], n).x;
return U
}, Ib = function (a, b, c, d, e, f, g, h, i) {
var j = 1 - i;
return {
x: R(j, 3) * a + 3 * R(j, 2) * i * c + 3 * j * i * i * e + R(i, 3) * g,
y: R(j, 3) * b + 3 * R(j, 2) * i * d + 3 * j * i * i * f + R(i, 3) * h
}
}, Jb = f(function (a, b, c, d, e, f, g, h) {
var i, j = e - 2 * c + a - (g - 2 * e + c), k = 2 * (c - a) - 2 * (e - c), l = a - c,
m = (-k + N.sqrt(k * k - 4 * j * l)) / 2 / j, n = (-k - N.sqrt(k * k - 4 * j * l)) / 2 / j, o = [b, h],
p = [a, g];
return Q(m) > "1e12" && (m = .5), Q(n) > "1e12" && (n = .5), m > 0 && 1 > m && (i = Ib(a, b, c, d, e, f, g, h, m), p.push(i.x), o.push(i.y)), n > 0 && 1 > n && (i = Ib(a, b, c, d, e, f, g, h, n), p.push(i.x), o.push(i.y)), j = f - 2 * d + b - (h - 2 * f + d), k = 2 * (d - b) - 2 * (f - d), l = b - d, m = (-k + N.sqrt(k * k - 4 * j * l)) / 2 / j, n = (-k - N.sqrt(k * k - 4 * j * l)) / 2 / j, Q(m) > "1e12" && (m = .5), Q(n) > "1e12" && (n = .5), m > 0 && 1 > m && (i = Ib(a, b, c, d, e, f, g, h, m), p.push(i.x), o.push(i.y)), n > 0 && 1 > n && (i = Ib(a, b, c, d, e, f, g, h, n), p.push(i.x), o.push(i.y)), {
min: {
x: P[D](0, p),
y: P[D](0, o)
}, max: {x: O[D](0, p), y: O[D](0, o)}
}
}), Kb = c._path2curve = f(function (a, b) {
var c = !b && Ab(a);
if (!b && c.curve) return Cb(c.curve);
for (var d = Eb(a), e = b && Eb(b), f = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, g = {
x: 0,
y: 0,
bx: 0,
by: 0,
X: 0,
Y: 0,
qx: null,
qy: null
}, h = (function (a, b, c) {
var d, e, f = {T: 1, Q: 1};
if (!a) return ["C", b.x, b.y, b.x, b.y, b.x, b.y];
switch (!(a[0] in f) && (b.qx = b.qy = null), a[0]) {
case"M":
b.X = a[1], b.Y = a[2];
break;
case"A":
a = ["C"][E](Hb[D](0, [b.x, b.y][E](a.slice(1))));
break;
case"S":
"C" == c || "S" == c ? (d = 2 * b.x - b.bx, e = 2 * b.y - b.by) : (d = b.x, e = b.y), a = ["C", d, e][E](a.slice(1));
break;
case"T":
"Q" == c || "T" == c ? (b.qx = 2 * b.x - b.qx, b.qy = 2 * b.y - b.qy) : (b.qx = b.x, b.qy = b.y), a = ["C"][E](Gb(b.x, b.y, b.qx, b.qy, a[1], a[2]));
break;
case"Q":
b.qx = a[1], b.qy = a[2], a = ["C"][E](Gb(b.x, b.y, a[1], a[2], a[3], a[4]));
break;
case"L":
a = ["C"][E](Fb(b.x, b.y, a[1], a[2]));
break;
case"H":
a = ["C"][E](Fb(b.x, b.y, a[1], b.y));
break;
case"V":
a = ["C"][E](Fb(b.x, b.y, b.x, a[1]));
break;
case"Z":
a = ["C"][E](Fb(b.x, b.y, b.X, b.Y))
}
return a
}), i = function (a, b) {
if (a[b].length > 7) {
a[b].shift();
for (var c = a[b]; c.length;) k[b] = "A", e && (l[b] = "A"), a.splice(b++, 0, ["C"][E](c.splice(0, 6)));
a.splice(b, 1), p = O(d.length, e && e.length || 0)
}
}, j = function (a, b, c, f, g) {
a && b && "M" == a[g][0] && "M" != b[g][0] && (b.splice(g, 0, ["M", f.x, f.y]), c.bx = 0, c.by = 0, c.x = a[g][1], c.y = a[g][2], p = O(d.length, e && e.length || 0))
}, k = [], l = [], m = "", n = "", o = 0, p = O(d.length, e && e.length || 0); p > o; o++) {
d[o] && (m = d[o][0]), "C" != m && (k[o] = m, o && (n = k[o - 1])), d[o] = h(d[o], f, n), "A" != k[o] && "C" == m && (k[o] = "C"), i(d, o), e && (e[o] && (m = e[o][0]), "C" != m && (l[o] = m, o && (n = l[o - 1])), e[o] = h(e[o], g, n), "A" != l[o] && "C" == m && (l[o] = "C"), i(e, o)), j(d, e, f, g, o), j(e, d, g, f, o);
var q = d[o], r = e && e[o], s = q.length, t = e && r.length;
f.x = q[s - 2], f.y = q[s - 1], f.bx = _(q[s - 4]) || f.x, f.by = _(q[s - 3]) || f.y, g.bx = e && (_(r[t - 4]) || g.x), g.by = e && (_(r[t - 3]) || g.y), g.x = e && r[t - 2], g.y = e && r[t - 1]
}
return e || (c.curve = Cb(d)), e ? [d, e] : d
}, null, Cb), Lb = (c._parseDots = f(function (a) {
for (var b = [], d = 0, e = a.length; e > d; d++) {
var f = {}, g = a[d].match(/^([^:]*):?([\d\.]*)/);
if (f.color = c.getRGB(g[1]), f.color.error) return null;
f.color = f.color.hex, g[2] && (f.offset = g[2] + "%"), b.push(f)
}
for (d = 1, e = b.length - 1; e > d; d++) if (!b[d].offset) {
for (var h = _(b[d - 1].offset || 0), i = 0, j = d + 1; e > j; j++) if (b[j].offset) {
i = b[j].offset;
break
}
i || (i = 100, j = e), i = _(i);
for (var k = (i - h) / (j - d + 1); j > d; d++) h += k, b[d].offset = h + "%"
}
return b
}), c._tear = function (a, b) {
a == b.top && (b.top = a.prev), a == b.bottom && (b.bottom = a.next), a.next && (a.next.prev = a.prev), a.prev && (a.prev.next = a.next)
}), Mb = (c._tofront = function (a, b) {
b.top !== a && (Lb(a, b), a.next = null, a.prev = b.top, b.top.next = a, b.top = a)
}, c._toback = function (a, b) {
b.bottom !== a && (Lb(a, b), a.next = b.bottom, a.prev = null, b.bottom.prev = a, b.bottom = a)
}, c._insertafter = function (a, b, c) {
Lb(a, c), b == c.top && (c.top = a), b.next && (b.next.prev = a), a.next = b.next, a.prev = b, b.next = a
}, c._insertbefore = function (a, b, c) {
Lb(a, c), b == c.bottom && (c.bottom = a), b.prev && (b.prev.next = a), a.prev = b.prev, b.prev = a, a.next = b
}, c.toMatrix = function (a, b) {
var c = Bb(a), d = {
_: {transform: G}, getBBox: function () {
return c
}
};
return Nb(d, b), d.matrix
}), Nb = (c.transformPath = function (a, b) {
return rb(a, Mb(a, b))
}, c._extractTransform = function (a, b) {
if (null == b) return a._.transform;
b = I(b).replace(/\.{3}|\u2026/g, a._.transform || G);
var d = c.parseTransformString(b), e = 0, f = 0, g = 0, h = 1, i = 1, j = a._, k = new o;
if (j.transform = d || [], d) for (var l = 0, m = d.length; m > l; l++) {
var n, p, q, r, s, t = d[l], u = t.length, v = I(t[0]).toLowerCase(), w = t[0] != v, x = w ? k.invert() : 0;
"t" == v && 3 == u ? w ? (n = x.x(0, 0), p = x.y(0, 0), q = x.x(t[1], t[2]), r = x.y(t[1], t[2]), k.translate(q - n, r - p)) : k.translate(t[1], t[2]) : "r" == v ? 2 == u ? (s = s || a.getBBox(1), k.rotate(t[1], s.x + s.width / 2, s.y + s.height / 2), e += t[1]) : 4 == u && (w ? (q = x.x(t[2], t[3]), r = x.y(t[2], t[3]), k.rotate(t[1], q, r)) : k.rotate(t[1], t[2], t[3]), e += t[1]) : "s" == v ? 2 == u || 3 == u ? (s = s || a.getBBox(1), k.scale(t[1], t[u - 1], s.x + s.width / 2, s.y + s.height / 2), h *= t[1], i *= t[u - 1]) : 5 == u && (w ? (q = x.x(t[3], t[4]), r = x.y(t[3], t[4]), k.scale(t[1], t[2], q, r)) : k.scale(t[1], t[2], t[3], t[4]), h *= t[1], i *= t[2]) : "m" == v && 7 == u && k.add(t[1], t[2], t[3], t[4], t[5], t[6]), j.dirtyT = 1, a.matrix = k
}
a.matrix = k, j.sx = h, j.sy = i, j.deg = e, j.dx = f = k.e, j.dy = g = k.f, 1 == h && 1 == i && !e && j.bbox ? (j.bbox.x += +f, j.bbox.y += +g) : j.dirtyT = 1
}), Ob = function (a) {
var b = a[0];
switch (b.toLowerCase()) {
case"t":
return [b, 0, 0];
case"m":
return [b, 1, 0, 0, 1, 0, 0];
case"r":
return 4 == a.length ? [b, 0, a[2], a[3]] : [b, 0];
case"s":
return 5 == a.length ? [b, 1, 1, a[3], a[4]] : 3 == a.length ? [b, 1, 1] : [b, 1]
}
}, Pb = c._equaliseTransform = function (a, b) {
b = I(b).replace(/\.{3}|\u2026/g, a), a = c.parseTransformString(a) || [], b = c.parseTransformString(b) || [];
for (var d, e, f, g, h = O(a.length, b.length), i = [], j = [], k = 0; h > k; k++) {
if (f = a[k] || Ob(b[k]), g = b[k] || Ob(f), f[0] != g[0] || "r" == f[0].toLowerCase() && (f[2] != g[2] || f[3] != g[3]) || "s" == f[0].toLowerCase() && (f[3] != g[3] || f[4] != g[4])) return;
for (i[k] = [], j[k] = [], d = 0, e = O(f.length, g.length); e > d; d++) d in f && (i[k][d] = f[d]), d in g && (j[k][d] = g[d])
}
return {from: i, to: j}
};
c._getContainer = function (a, b, d, e) {
var f;
return f = null != e || c.is(a, "object") ? a : A.doc.getElementById(a), null != f ? f.tagName ? null == b ? {
container: f,
width: f.style.pixelWidth || f.offsetWidth,
height: f.style.pixelHeight || f.offsetHeight
} : {container: f, width: b, height: d} : {container: 1, x: a, y: b, width: d, height: e} : void 0
}, c.pathToRelative = Db, c._engine = {}, c.path2curve = Kb, c.matrix = function (a, b, c, d, e, f) {
return new o(a, b, c, d, e, f)
}, function (a) {
function b(a) {
return a[0] * a[0] + a[1] * a[1]
}
function d(a) {
var c = N.sqrt(b(a));
a[0] && (a[0] /= c), a[1] && (a[1] /= c)
}
a.add = function (a, b, c, d, e, f) {
var g, h, i, j, k = [[], [], []], l = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],
m = [[a, c, e], [b, d, f], [0, 0, 1]];
for (a && a instanceof o && (m = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]]), g = 0; 3 > g; g++) for (h = 0; 3 > h; h++) {
for (j = 0, i = 0; 3 > i; i++) j += l[g][i] * m[i][h];
k[g][h] = j
}
this.a = k[0][0], this.b = k[1][0], this.c = k[0][1], this.d = k[1][1], this.e = k[0][2], this.f = k[1][2]
}, a.invert = function () {
var a = this, b = a.a * a.d - a.b * a.c;
return new o(a.d / b, -a.b / b, -a.c / b, a.a / b, (a.c * a.f - a.d * a.e) / b, (a.b * a.e - a.a * a.f) / b)
}, a.clone = function () {
return new o(this.a, this.b, this.c, this.d, this.e, this.f)
}, a.translate = function (a, b) {
this.add(1, 0, 0, 1, a, b)
}, a.scale = function (a, b, c, d) {
null == b && (b = a), (c || d) && this.add(1, 0, 0, 1, c, d), this.add(a, 0, 0, b, 0, 0), (c || d) && this.add(1, 0, 0, 1, -c, -d)
}, a.rotate = function (a, b, d) {
a = c.rad(a), b = b || 0, d = d || 0;
var e = +N.cos(a).toFixed(9), f = +N.sin(a).toFixed(9);
this.add(e, f, -f, e, b, d), this.add(1, 0, 0, 1, -b, -d)
}, a.x = function (a, b) {
return a * this.a + b * this.c + this.e
}, a.y = function (a, b) {
return a * this.b + b * this.d + this.f
}, a.get = function (a) {
return +this[I.fromCharCode(97 + a)].toFixed(4)
}, a.toString = function () {
return c.svg ? "matrix(" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + ")" : [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join()
}, a.toFilter = function () {
return "progid:DXImageTransform.Microsoft.Matrix(M11=" + this.get(0) + ", M12=" + this.get(2) + ", M21=" + this.get(1) + ", M22=" + this.get(3) + ", Dx=" + this.get(4) + ", Dy=" + this.get(5) + ", sizingmethod='auto expand')"
}, a.offset = function () {
return [this.e.toFixed(4), this.f.toFixed(4)]
}, a.split = function () {
var a = {};
a.dx = this.e, a.dy = this.f;
var e = [[this.a, this.c], [this.b, this.d]];
a.scalex = N.sqrt(b(e[0])), d(e[0]), a.shear = e[0][0] * e[1][0] + e[0][1] * e[1][1], e[1] = [e[1][0] - e[0][0] * a.shear, e[1][1] - e[0][1] * a.shear], a.scaley = N.sqrt(b(e[1])), d(e[1]), a.shear /= a.scaley;
var f = -e[0][1], g = e[1][1];
return 0 > g ? (a.rotate = c.deg(N.acos(g)), 0 > f && (a.rotate = 360 - a.rotate)) : a.rotate = c.deg(N.asin(f)), a.isSimple = !(+a.shear.toFixed(9) || a.scalex.toFixed(9) != a.scaley.toFixed(9) && a.rotate), a.isSuperSimple = !+a.shear.toFixed(9) && a.scalex.toFixed(9) == a.scaley.toFixed(9) && !a.rotate, a.noRotation = !+a.shear.toFixed(9) && !a.rotate, a
}, a.toTransformString = function (a) {
var b = a || this[J]();
return b.isSimple ? (b.scalex = +b.scalex.toFixed(4), b.scaley = +b.scaley.toFixed(4), b.rotate = +b.rotate.toFixed(4), (b.dx || b.dy ? "t" + [b.dx, b.dy] : G) + (1 != b.scalex || 1 != b.scaley ? "s" + [b.scalex, b.scaley, 0, 0] : G) + (b.rotate ? "r" + [b.rotate, 0, 0] : G)) : "m" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)]
}
}(o.prototype);
var Qb = navigator.userAgent.match(/Version\/(.*?)\s/) || navigator.userAgent.match(/Chrome\/(\d+)/);
v.safari = "Apple Computer, Inc." == navigator.vendor && (Qb && Qb[1] < 4 || "iP" == navigator.platform.slice(0, 2)) || "Google Inc." == navigator.vendor && Qb && Qb[1] < 8 ? function () {
var a = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: "none"});
setTimeout(function () {
a.remove()
})
} : mb;
for (var Rb = function () {
this.returnValue = !1
}, Sb = function () {
return this.originalEvent.preventDefault()
}, Tb = function () {
this.cancelBubble = !0
}, Ub = function () {
return this.originalEvent.stopPropagation()
}, Vb = function (a) {
var b = A.doc.documentElement.scrollTop || A.doc.body.scrollTop,
c = A.doc.documentElement.scrollLeft || A.doc.body.scrollLeft;
return {x: a.clientX + c, y: a.clientY + b}
}, Wb = function () {
return A.doc.addEventListener ? function (a, b, c, d) {
var e = function (a) {
var b = Vb(a);
return c.call(d, a, b.x, b.y)
};
if (a.addEventListener(b, e, !1), F && L[b]) {
var f = function (b) {
for (var e = Vb(b), f = b, g = 0, h = b.targetTouches && b.targetTouches.length; h > g; g++) if (b.targetTouches[g].target == a) {
b = b.targetTouches[g], b.originalEvent = f, b.preventDefault = Sb, b.stopPropagation = Ub;
break
}
return c.call(d, b, e.x, e.y)
};
a.addEventListener(L[b], f, !1)
}
return function () {
return a.removeEventListener(b, e, !1), F && L[b] && a.removeEventListener(L[b], f, !1), !0
}
} : A.doc.attachEvent ? function (a, b, c, d) {
var e = function (a) {
a = a || A.win.event;
var b = A.doc.documentElement.scrollTop || A.doc.body.scrollTop,
e = A.doc.documentElement.scrollLeft || A.doc.body.scrollLeft, f = a.clientX + e, g = a.clientY + b;
return a.preventDefault = a.preventDefault || Rb, a.stopPropagation = a.stopPropagation || Tb, c.call(d, a, f, g)
};
a.attachEvent("on" + b, e);
var f = function () {
return a.detachEvent("on" + b, e), !0
};
return f
} : void 0
}(), Xb = [], Yb = function (a) {
for (var c, d = a.clientX, e = a.clientY, f = A.doc.documentElement.scrollTop || A.doc.body.scrollTop, g = A.doc.documentElement.scrollLeft || A.doc.body.scrollLeft, h = Xb.length; h--;) {
if (c = Xb[h], F && a.touches) {
for (var i, j = a.touches.length; j--;) if (i = a.touches[j], i.identifier == c.el._drag.id) {
d = i.clientX, e = i.clientY, (a.originalEvent ? a.originalEvent : a).preventDefault();
break
}
} else a.preventDefault();
var k, l = c.el.node, m = l.nextSibling, n = l.parentNode, o = l.style.display;
A.win.opera && n.removeChild(l), l.style.display = "none", k = c.el.paper.getElementByPoint(d, e), l.style.display = o, A.win.opera && (m ? n.insertBefore(l, m) : n.appendChild(l)), k && b("raphael.drag.over." + c.el.id, c.el, k), d += g, e += f, b("raphael.drag.move." + c.el.id, c.move_scope || c.el, d - c.el._drag.x, e - c.el._drag.y, d, e, a)
}
}, Zb = function (a) {
c.unmousemove(Yb).unmouseup(Zb);
for (var d, e = Xb.length; e--;) d = Xb[e], d.el._drag = {}, b("raphael.drag.end." + d.el.id, d.end_scope || d.start_scope || d.move_scope || d.el, a);
Xb = []
}, $b = c.el = {}, _b = K.length; _b--;) !function (a) {
c[a] = $b[a] = function (b, d) {
return c.is(b, "function") && (this.events = this.events || [], this.events.push({
name: a,
f: b,
unbind: Wb(this.shape || this.node || A.doc, a, b, d || this)
})), this
}, c["un" + a] = $b["un" + a] = function (b) {
for (var d = this.events || [], e = d.length; e--;) d[e].name != a || !c.is(b, "undefined") && d[e].f != b || (d[e].unbind(), d.splice(e, 1), !d.length && delete this.events);
return this
}
}(K[_b]);
$b.data = function (a, d) {
var e = kb[this.id] = kb[this.id] || {};
if (0 == arguments.length) return e;
if (1 == arguments.length) {
if (c.is(a, "object")) {
for (var f in a) a[z](f) && this.data(f, a[f]);
return this
}
return b("raphael.data.get." + this.id, this, e[a], a), e[a]
}
return e[a] = d, b("raphael.data.set." + this.id, this, d, a), this
}, $b.removeData = function (a) {
return null == a ? kb[this.id] = {} : kb[this.id] && delete kb[this.id][a], this
}, $b.getData = function () {
return d(kb[this.id] || {})
}, $b.hover = function (a, b, c, d) {
return this.mouseover(a, c).mouseout(b, d || c)
}, $b.unhover = function (a, b) {
return this.unmouseover(a).unmouseout(b)
};
var ac = [];
$b.drag = function (a, d, e, f, g, h) {
function i(i) {
(i.originalEvent || i).preventDefault();
var j = i.clientX, k = i.clientY, l = A.doc.documentElement.scrollTop || A.doc.body.scrollTop,
m = A.doc.documentElement.scrollLeft || A.doc.body.scrollLeft;
if (this._drag.id = i.identifier, F && i.touches) for (var n, o = i.touches.length; o--;) if (n = i.touches[o], this._drag.id = n.identifier, n.identifier == this._drag.id) {
j = n.clientX, k = n.clientY;
break
}
this._drag.x = j + m, this._drag.y = k + l, !Xb.length && c.mousemove(Yb).mouseup(Zb), Xb.push({
el: this,
move_scope: f,
start_scope: g,
end_scope: h
}), d && b.on("raphael.drag.start." + this.id, d), a && b.on("raphael.drag.move." + this.id, a), e && b.on("raphael.drag.end." + this.id, e), b("raphael.drag.start." + this.id, g || f || this, i.clientX + m, i.clientY + l, i)
}
return this._drag = {}, ac.push({el: this, start: i}), this.mousedown(i), this
}, $b.onDragOver = function (a) {
a ? b.on("raphael.drag.over." + this.id, a) : b.unbind("raphael.drag.over." + this.id)
}, $b.undrag = function () {
for (var a = ac.length; a--;) ac[a].el == this && (this.unmousedown(ac[a].start), ac.splice(a, 1), b.unbind("raphael.drag.*." + this.id));
!ac.length && c.unmousemove(Yb).unmouseup(Zb), Xb = []
}, v.circle = function (a, b, d) {
var e = c._engine.circle(this, a || 0, b || 0, d || 0);
return this.__set__ && this.__set__.push(e), e
}, v.rect = function (a, b, d, e, f) {
var g = c._engine.rect(this, a || 0, b || 0, d || 0, e || 0, f || 0);
return this.__set__ && this.__set__.push(g), g
}, v.ellipse = function (a, b, d, e) {
var f = c._engine.ellipse(this, a || 0, b || 0, d || 0, e || 0);
return this.__set__ && this.__set__.push(f), f
}, v.path = function (a) {
a && !c.is(a, U) && !c.is(a[0], V) && (a += G);
var b = c._engine.path(c.format[D](c, arguments), this);
return this.__set__ && this.__set__.push(b), b
}, v.image = function (a, b, d, e, f) {
var g = c._engine.image(this, a || "about:blank", b || 0, d || 0, e || 0, f || 0);
return this.__set__ && this.__set__.push(g), g
}, v.text = function (a, b, d) {
var e = c._engine.text(this, a || 0, b || 0, I(d));
return this.__set__ && this.__set__.push(e), e
}, v.set = function (a) {
!c.is(a, "array") && (a = Array.prototype.splice.call(arguments, 0, arguments.length));
var b = new mc(a);
return this.__set__ && this.__set__.push(b), b.paper = this, b.type = "set", b
}, v.setStart = function (a) {
this.__set__ = a || this.set()
}, v.setFinish = function () {
var a = this.__set__;
return delete this.__set__, a
}, v.getSize = function () {
var a = this.canvas.parentNode;
return {width: a.offsetWidth, height: a.offsetHeight}
}, v.setSize = function (a, b) {
return c._engine.setSize.call(this, a, b)
}, v.setViewBox = function (a, b, d, e, f) {
return c._engine.setViewBox.call(this, a, b, d, e, f)
}, v.top = v.bottom = null, v.raphael = c;
var bc = function (a) {
var b = a.getBoundingClientRect(), c = a.ownerDocument, d = c.body, e = c.documentElement,
f = e.clientTop || d.clientTop || 0, g = e.clientLeft || d.clientLeft || 0,
h = b.top + (A.win.pageYOffset || e.scrollTop || d.scrollTop) - f,
i = b.left + (A.win.pageXOffset || e.scrollLeft || d.scrollLeft) - g;
return {y: h, x: i}
};
v.getElementByPoint = function (a, b) {
var c = this, d = c.canvas, e = A.doc.elementFromPoint(a, b);
if (A.win.opera && "svg" == e.tagName) {
var f = bc(d), g = d.createSVGRect();
g.x = a - f.x, g.y = b - f.y, g.width = g.height = 1;
var h = d.getIntersectionList(g, null);
h.length && (e = h[h.length - 1])
}
if (!e) return null;
for (; e.parentNode && e != d.parentNode && !e.raphael;) e = e.parentNode;
return e == c.canvas.parentNode && (e = d), e = e && e.raphael ? c.getById(e.raphaelid) : null
}, v.getElementsByBBox = function (a) {
var b = this.set();
return this.forEach(function (d) {
c.isBBoxIntersect(d.getBBox(), a) && b.push(d)
}), b
}, v.getById = function (a) {
for (var b = this.bottom; b;) {
if (b.id == a) return b;
b = b.next
}
return null
}, v.forEach = function (a, b) {
for (var c = this.bottom; c;) {
if (a.call(b, c) === !1) return this;
c = c.next
}
return this
}, v.getElementsByPoint = function (a, b) {
var c = this.set();
return this.forEach(function (d) {
d.isPointInside(a, b) && c.push(d)
}), c
}, $b.isPointInside = function (a, b) {
var d = this.realPath = qb[this.type](this);
return this.attr("transform") && this.attr("transform").length && (d = c.transformPath(d, this.attr("transform"))), c.isPointInsidePath(d, a, b)
}, $b.getBBox = function (a) {
if (this.removed) return {};
var b = this._;
return a ? ((b.dirty || !b.bboxwt) && (this.realPath = qb[this.type](this), b.bboxwt = Bb(this.realPath), b.bboxwt.toString = p, b.dirty = 0), b.bboxwt) : ((b.dirty || b.dirtyT || !b.bbox) && ((b.dirty || !this.realPath) && (b.bboxwt = 0, this.realPath = qb[this.type](this)), b.bbox = Bb(rb(this.realPath, this.matrix)), b.bbox.toString = p, b.dirty = b.dirtyT = 0), b.bbox)
}, $b.clone = function () {
if (this.removed) return null;
var a = this.paper[this.type]().attr(this.attr());
return this.__set__ && this.__set__.push(a), a
}, $b.glow = function (a) {
if ("text" == this.type) return null;
a = a || {};
var b = {
width: (a.width || 10) + (+this.attr("stroke-width") || 1),
fill: a.fill || !1,
opacity: a.opacity || .5,
offsetx: a.offsetx || 0,
offsety: a.offsety || 0,
color: a.color || "#000"
}, c = b.width / 2, d = this.paper, e = d.set(), f = this.realPath || qb[this.type](this);
f = this.matrix ? rb(f, this.matrix) : f;
for (var g = 1; c + 1 > g; g++) e.push(d.path(f).attr({
stroke: b.color,
fill: b.fill ? b.color : "none",
"stroke-linejoin": "round",
"stroke-linecap": "round",
"stroke-width": +(b.width / c * g).toFixed(3),
opacity: +(b.opacity / c).toFixed(3)
}));
return e.insertBefore(this).translate(b.offsetx, b.offsety)
};
var cc = function (a, b, d, e, f, g, h, i, l) {
return null == l ? j(a, b, d, e, f, g, h, i) : c.findDotsAtSegment(a, b, d, e, f, g, h, i, k(a, b, d, e, f, g, h, i, l))
}, dc = function (a, b) {
return function (d, e, f) {
d = Kb(d);
for (var g, h, i, j, k, l = "", m = {}, n = 0, o = 0, p = d.length; p > o; o++) {
if (i = d[o], "M" == i[0]) g = +i[1], h = +i[2]; else {
if (j = cc(g, h, i[1], i[2], i[3], i[4], i[5], i[6]), n + j > e) {
if (b && !m.start) {
if (k = cc(g, h, i[1], i[2], i[3], i[4], i[5], i[6], e - n), l += ["C" + k.start.x, k.start.y, k.m.x, k.m.y, k.x, k.y], f) return l;
m.start = l, l = ["M" + k.x, k.y + "C" + k.n.x, k.n.y, k.end.x, k.end.y, i[5], i[6]].join(), n += j, g = +i[5], h = +i[6];
continue
}
if (!a && !b) return k = cc(g, h, i[1], i[2], i[3], i[4], i[5], i[6], e - n), {
x: k.x,
y: k.y,
alpha: k.alpha
}
}
n += j, g = +i[5], h = +i[6]
}
l += i.shift() + i
}
return m.end = l, k = a ? n : b ? m : c.findDotsAtSegment(g, h, i[0], i[1], i[2], i[3], i[4], i[5], 1), k.alpha && (k = {
x: k.x,
y: k.y,
alpha: k.alpha
}), k
}
}, ec = dc(1), fc = dc(), gc = dc(0, 1);
c.getTotalLength = ec, c.getPointAtLength = fc, c.getSubpath = function (a, b, c) {
if (this.getTotalLength(a) - c < 1e-6) return gc(a, b).end;
var d = gc(a, c, 1);
return b ? gc(d, b).end : d
}, $b.getTotalLength = function () {
var a = this.getPath();
if (a) return this.node.getTotalLength ? this.node.getTotalLength() : ec(a)
}, $b.getPointAtLength = function (a) {
var b = this.getPath();
if (b) return fc(b, a)
}, $b.getPath = function () {
var a, b = c._getPath[this.type];
if ("text" != this.type && "set" != this.type) return b && (a = b(this)), a
}, $b.getSubpath = function (a, b) {
var d = this.getPath();
if (d) return c.getSubpath(d, a, b)
};
var hc = c.easing_formulas = {
linear: function (a) {
return a
}, "<": function (a) {
return R(a, 1.7)
}, ">": function (a) {
return R(a, .48)
}, "<>": function (a) {
var b = .48 - a / 1.04, c = N.sqrt(.1734 + b * b), d = c - b, e = R(Q(d), 1 / 3) * (0 > d ? -1 : 1), f = -c - b,
g = R(Q(f), 1 / 3) * (0 > f ? -1 : 1), h = e + g + .5;
return 3 * (1 - h) * h * h + h * h * h
}, backIn: function (a) {
var b = 1.70158;
return a * a * ((b + 1) * a - b)
}, backOut: function (a) {
a -= 1;
var b = 1.70158;
return a * a * ((b + 1) * a + b) + 1
}, elastic: function (a) {
return a == !!a ? a : R(2, -10 * a) * N.sin(2 * (a - .075) * S / .3) + 1
}, bounce: function (a) {
var b, c = 7.5625, d = 2.75;
return 1 / d > a ? b = c * a * a : 2 / d > a ? (a -= 1.5 / d, b = c * a * a + .75) : 2.5 / d > a ? (a -= 2.25 / d, b = c * a * a + .9375) : (a -= 2.625 / d, b = c * a * a + .984375), b
}
};
hc.easeIn = hc["ease-in"] = hc["<"], hc.easeOut = hc["ease-out"] = hc[">"], hc.easeInOut = hc["ease-in-out"] = hc["<>"], hc["back-in"] = hc.backIn, hc["back-out"] = hc.backOut;
var ic = [],
jc = a.requestAnimationFrame || a.webkitRequestAnimationFrame || a.mozRequestAnimationFrame || a.oRequestAnimationFrame || a.msRequestAnimationFrame || function (a) {
setTimeout(a, 16)
}, kc = function () {
for (var a = +new Date, d = 0; d < ic.length; d++) {
var e = ic[d];
if (!e.el.removed && !e.paused) {
var f, g, h = a - e.start, i = e.ms, j = e.easing, k = e.from, l = e.diff, m = e.to, n = (e.t, e.el), o = {},
p = {};
if (e.initstatus ? (h = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * i, e.status = e.initstatus, delete e.initstatus, e.stop && ic.splice(d--, 1)) : e.status = (e.prev + (e.percent - e.prev) * (h / i)) / e.anim.top, !(0 > h)) if (i > h) {
var q = j(h / i);
for (var r in k) if (k[z](r)) {
switch (db[r]) {
case T:
f = +k[r] + q * i * l[r];
break;
case"colour":
f = "rgb(" + [lc($(k[r].r + q * i * l[r].r)), lc($(k[r].g + q * i * l[r].g)), lc($(k[r].b + q * i * l[r].b))].join(",") + ")";
break;
case"path":
f = [];
for (var t = 0, u = k[r].length; u > t; t++) {
f[t] = [k[r][t][0]];
for (var v = 1, w = k[r][t].length; w > v; v++) f[t][v] = +k[r][t][v] + q * i * l[r][t][v];
f[t] = f[t].join(H)
}
f = f.join(H);
break;
case"transform":
if (l[r].real) for (f = [], t = 0, u = k[r].length; u > t; t++) for (f[t] = [k[r][t][0]], v = 1, w = k[r][t].length; w > v; v++) f[t][v] = k[r][t][v] + q * i * l[r][t][v]; else {
var x = function (a) {
return +k[r][a] + q * i * l[r][a]
};
f = [["m", x(0), x(1), x(2), x(3), x(4), x(5)]]
}
break;
case"csv":
if ("clip-rect" == r) for (f = [], t = 4; t--;) f[t] = +k[r][t] + q * i * l[r][t];
break;
default:
var y = [][E](k[r]);
for (f = [], t = n.paper.customAttributes[r].length; t--;) f[t] = +y[t] + q * i * l[r][t]
}
o[r] = f
}
n.attr(o), function (a, c, d) {
setTimeout(function () {
b("raphael.anim.frame." + a, c, d)
})
}(n.id, n, e.anim)
} else {
if (function (a, d, e) {
setTimeout(function () {
b("raphael.anim.frame." + d.id, d, e), b("raphael.anim.finish." + d.id, d, e), c.is(a, "function") && a.call(d)
})
}(e.callback, n, e.anim), n.attr(m), ic.splice(d--, 1), e.repeat > 1 && !e.next) {
for (g in m) m[z](g) && (p[g] = e.totalOrigin[g]);
e.el.attr(p), s(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1)
}
e.next && !e.stop && s(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat)
}
}
}
c.svg && n && n.paper && n.paper.safari(), ic.length && jc(kc)
}, lc = function (a) {
return a > 255 ? 255 : 0 > a ? 0 : a
};
$b.animateWith = function (a, b, d, e, f, g) {
var h = this;
if (h.removed) return g && g.call(h), h;
var i = d instanceof r ? d : c.animation(d, e, f, g);
s(i, h, i.percents[0], null, h.attr());
for (var j = 0, k = ic.length; k > j; j++) if (ic[j].anim == b && ic[j].el == a) {
ic[k - 1].start = ic[j].start;
break
}
return h
}, $b.onAnimation = function (a) {
return a ? b.on("raphael.anim.frame." + this.id, a) : b.unbind("raphael.anim.frame." + this.id), this
}, r.prototype.delay = function (a) {
var b = new r(this.anim, this.ms);
return b.times = this.times, b.del = +a || 0, b
}, r.prototype.repeat = function (a) {
var b = new r(this.anim, this.ms);
return b.del = this.del, b.times = N.floor(O(a, 0)) || 1, b
}, c.animation = function (a, b, d, e) {
if (a instanceof r) return a;
(c.is(d, "function") || !d) && (e = e || d || null, d = null), a = Object(a), b = +b || 0;
var f, g, h = {};
for (g in a) a[z](g) && _(g) != g && _(g) + "%" != g && (f = !0, h[g] = a[g]);
if (f) return d && (h.easing = d), e && (h.callback = e), new r({100: h}, b);
if (e) {
var i = 0;
for (var j in a) {
var k = ab(j);
a[z](j) && k > i && (i = k)
}
i += "%", !a[i].callback && (a[i].callback = e)
}
return new r(a, b)
}, $b.animate = function (a, b, d, e) {
var f = this;
if (f.removed) return e && e.call(f), f;
var g = a instanceof r ? a : c.animation(a, b, d, e);
return s(g, f, g.percents[0], null, f.attr()), f
}, $b.setTime = function (a, b) {
return a && null != b && this.status(a, P(b, a.ms) / a.ms), this
}, $b.status = function (a, b) {
var c, d, e = [], f = 0;
if (null != b) return s(a, this, -1, P(b, 1)), this;
for (c = ic.length; c > f; f++) if (d = ic[f], d.el.id == this.id && (!a || d.anim == a)) {
if (a) return d.status;
e.push({anim: d.anim, status: d.status})
}
return a ? 0 : e
}, $b.pause = function (a) {
for (var c = 0; c < ic.length; c++) ic[c].el.id != this.id || a && ic[c].anim != a || b("raphael.anim.pause." + this.id, this, ic[c].anim) !== !1 && (ic[c].paused = !0);
return this
}, $b.resume = function (a) {
for (var c = 0; c < ic.length; c++) if (ic[c].el.id == this.id && (!a || ic[c].anim == a)) {
var d = ic[c];
b("raphael.anim.resume." + this.id, this, d.anim) !== !1 && (delete d.paused, this.status(d.anim, d.status))
}
return this
}, $b.stop = function (a) {
for (var c = 0; c < ic.length; c++) ic[c].el.id != this.id || a && ic[c].anim != a || b("raphael.anim.stop." + this.id, this, ic[c].anim) !== !1 && ic.splice(c--, 1);
return this
}, b.on("raphael.remove", t), b.on("raphael.clear", t), $b.toString = function () {
return "Raphaëls object"
};
var mc = function (a) {
if (this.items = [], this.length = 0, this.type = "set", a) for (var b = 0, c = a.length; c > b; b++) !a[b] || a[b].constructor != $b.constructor && a[b].constructor != mc || (this[this.items.length] = this.items[this.items.length] = a[b], this.length++)
}, nc = mc.prototype;
nc.push = function () {
for (var a, b, c = 0, d = arguments.length; d > c; c++) a = arguments[c], !a || a.constructor != $b.constructor && a.constructor != mc || (b = this.items.length, this[b] = this.items[b] = a, this.length++);
return this
}, nc.pop = function () {
return this.length && delete this[this.length--], this.items.pop()
}, nc.forEach = function (a, b) {
for (var c = 0, d = this.items.length; d > c; c++) if (a.call(b, this.items[c], c) === !1) return this;
return this
};
for (var oc in $b) $b[z](oc) && (nc[oc] = function (a) {
return function () {
var b = arguments;
return this.forEach(function (c) {
c[a][D](c, b)
})
}
}(oc));
return nc.attr = function (a, b) {
if (a && c.is(a, V) && c.is(a[0], "object")) for (var d = 0, e = a.length; e > d; d++) this.items[d].attr(a[d]); else for (var f = 0, g = this.items.length; g > f; f++) this.items[f].attr(a, b);
return this
}, nc.clear = function () {
for (; this.length;) this.pop()
}, nc.splice = function (a, b) {
a = 0 > a ? O(this.length + a, 0) : a, b = O(0, P(this.length - a, b));
var c, d = [], e = [], f = [];
for (c = 2; c < arguments.length; c++) f.push(arguments[c]);
for (c = 0; b > c; c++) e.push(this[a + c]);
for (; c < this.length - a; c++) d.push(this[a + c]);
var g = f.length;
for (c = 0; c < g + d.length; c++) this.items[a + c] = this[a + c] = g > c ? f[c] : d[c - g];
for (c = this.items.length = this.length -= b - g; this[c];) delete this[c++];
return new mc(e)
}, nc.exclude = function (a) {
for (var b = 0, c = this.length; c > b; b++) if (this[b] == a) return this.splice(b, 1), !0
}, nc.animate = function (a, b, d, e) {
(c.is(d, "function") || !d) && (e = d || null);
var f, g, h = this.items.length, i = h, j = this;
if (!h) return this;
e && (g = function () {
!--h && e.call(j)
}), d = c.is(d, U) ? d : g;
var k = c.animation(a, b, d, g);
for (f = this.items[--i].animate(k); i--;) this.items[i] && !this.items[i].removed && this.items[i].animateWith(f, k, k), this.items[i] && !this.items[i].removed || h--;
return this
}, nc.insertAfter = function (a) {
for (var b = this.items.length; b--;) this.items[b].insertAfter(a);
return this
}, nc.getBBox = function () {
for (var a = [], b = [], c = [], d = [], e = this.items.length; e--;) if (!this.items[e].removed) {
var f = this.items[e].getBBox();
a.push(f.x), b.push(f.y), c.push(f.x + f.width), d.push(f.y + f.height)
}
return a = P[D](0, a), b = P[D](0, b), c = O[D](0, c), d = O[D](0, d), {
x: a,
y: b,
x2: c,
y2: d,
width: c - a,
height: d - b
}
}, nc.clone = function (a) {
a = this.paper.set();
for (var b = 0, c = this.items.length; c > b; b++) a.push(this.items[b].clone());
return a
}, nc.toString = function () {
return "Raphaëls set"
}, nc.glow = function (a) {
var b = this.paper.set();
return this.forEach(function (c) {
var d = c.glow(a);
null != d && d.forEach(function (a) {
b.push(a)
})
}), b
}, nc.isPointInside = function (a, b) {
var c = !1;
return this.forEach(function (d) {
return d.isPointInside(a, b) ? (c = !0, !1) : void 0
}), c
}, c.registerFont = function (a) {
if (!a.face) return a;
this.fonts = this.fonts || {};
var b = {w: a.w, face: {}, glyphs: {}}, c = a.face["font-family"];
for (var d in a.face) a.face[z](d) && (b.face[d] = a.face[d]);
if (this.fonts[c] ? this.fonts[c].push(b) : this.fonts[c] = [b], !a.svg) {
b.face["units-per-em"] = ab(a.face["units-per-em"], 10);
for (var e in a.glyphs) if (a.glyphs[z](e)) {
var f = a.glyphs[e];
if (b.glyphs[e] = {
w: f.w, k: {}, d: f.d && "M" + f.d.replace(/[mlcxtrv]/g, function (a) {
return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[a] || "M"
}) + "z"
}, f.k) for (var g in f.k) f[z](g) && (b.glyphs[e].k[g] = f.k[g])
}
}
return a
}, v.getFont = function (a, b, d, e) {
if (e = e || "normal", d = d || "normal", b = +b || {
normal: 400,
bold: 700,
lighter: 300,
bolder: 800
}[b] || 400, c.fonts) {
var f = c.fonts[a];
if (!f) {
var g = new RegExp("(^|\\s)" + a.replace(/[^\w\d\s+!~.:_-]/g, G) + "(\\s|$)", "i");
for (var h in c.fonts) if (c.fonts[z](h) && g.test(h)) {
f = c.fonts[h];
break
}
}
var i;
if (f) for (var j = 0, k = f.length; k > j && (i = f[j], i.face["font-weight"] != b || i.face["font-style"] != d && i.face["font-style"] || i.face["font-stretch"] != e); j++) ;
return i
}
}, v.print = function (a, b, d, e, f, g, h, i) {
g = g || "middle", h = O(P(h || 0, 1), -1), i = O(P(i || 1, 3), 1);
var j, k = I(d)[J](G), l = 0, m = 0, n = G;
if (c.is(e, "string") && (e = this.getFont(e)), e) {
j = (f || 16) / e.face["units-per-em"];
for (var o = e.face.bbox[J](w), p = +o[0], q = o[3] - o[1], r = 0, s = +o[1] + ("baseline" == g ? q + +e.face.descent : q / 2), t = 0, u = k.length; u > t; t++) {
if ("\n" == k[t]) l = 0, x = 0, m = 0, r += q * i; else {
var v = m && e.glyphs[k[t - 1]] || {}, x = e.glyphs[k[t]];
l += m ? (v.w || e.w) + (v.k && v.k[k[t]] || 0) + e.w * h : 0, m = 1
}
x && x.d && (n += c.transformPath(x.d, ["t", l * j, r * j, "s", j, j, p, s, "t", (a - p) / j, (b - s) / j]))
}
}
return this.path(n).attr({fill: "#000", stroke: "none"})
}, v.add = function (a) {
if (c.is(a, "array")) for (var b, d = this.set(), e = 0, f = a.length; f > e; e++) b = a[e] || {}, x[z](b.type) && d.push(this[b.type]().attr(b));
return d
}, c.format = function (a, b) {
var d = c.is(b, V) ? [0][E](b) : arguments;
return a && c.is(a, U) && d.length - 1 && (a = a.replace(y, function (a, b) {
return null == d[++b] ? G : d[b]
})), a || G
}, c.fullfill = function () {
var a = /\{([^\}]+)\}/g, b = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g, c = function (a, c, d) {
var e = d;
return c.replace(b, function (a, b, c, d, f) {
b = b || d, e && (b in e && (e = e[b]), "function" == typeof e && f && (e = e()))
}), e = (null == e || e == d ? a : e) + ""
};
return function (b, d) {
return String(b).replace(a, function (a, b) {
return c(a, b, d)
})
}
}(), c.ninja = function () {
return B.was ? A.win.Raphael = B.is : delete Raphael, c
}, c.st = nc, b.on("raphael.DOMload", function () {
u = !0
}), function (a, b, d) {
function e() {
/in/.test(a.readyState) ? setTimeout(e, 9) : c.eve("raphael.DOMload")
}
null == a.readyState && a.addEventListener && (a.addEventListener(b, d = function () {
a.removeEventListener(b, d, !1), a.readyState = "complete"
}, !1), a.readyState = "loading"), e()
}(document, "DOMContentLoaded"), function () {
if (c.svg) {
var a = "hasOwnProperty", b = String, d = parseFloat, e = parseInt, f = Math, g = f.max, h = f.abs, i = f.pow,
j = /[, ]+/, k = c.eve, l = "", m = " ", n = "http://www.w3.org/1999/xlink", o = {
block: "M5,0 0,2.5 5,5z",
classic: "M5,0 0,2.5 5,5 3.5,3 3.5,2z",
diamond: "M2.5,0 5,2.5 2.5,5 0,2.5z",
open: "M6,1 1,3.5 6,6",
oval: "M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"
}, p = {};
c.toString = function () {
return "Your browser supports SVG.\nYou are running Raphaël " + this.version
};
var q = function (d, e) {
if (e) {
"string" == typeof d && (d = q(d));
for (var f in e) e[a](f) && ("xlink:" == f.substring(0, 6) ? d.setAttributeNS(n, f.substring(6), b(e[f])) : d.setAttribute(f, b(e[f])))
} else d = c._g.doc.createElementNS("http://www.w3.org/2000/svg", d), d.style && (d.style.webkitTapHighlightColor = "rgba(0,0,0,0)");
return d
}, r = function (a, e) {
var j = "linear", k = a.id + e, m = .5, n = .5, o = a.node, p = a.paper, r = o.style,
s = c._g.doc.getElementById(k);
if (!s) {
if (e = b(e).replace(c._radial_gradient, function (a, b, c) {
if (j = "radial", b && c) {
m = d(b), n = d(c);
var e = 2 * (n > .5) - 1;
i(m - .5, 2) + i(n - .5, 2) > .25 && (n = f.sqrt(.25 - i(m - .5, 2)) * e + .5) && .5 != n && (n = n.toFixed(5) - 1e-5 * e)
}
return l
}), e = e.split(/\s*\-\s*/), "linear" == j) {
var t = e.shift();
if (t = -d(t), isNaN(t)) return null;
var u = [0, 0, f.cos(c.rad(t)), f.sin(c.rad(t))], v = 1 / (g(h(u[2]), h(u[3])) || 1);
u[2] *= v, u[3] *= v, u[2] < 0 && (u[0] = -u[2], u[2] = 0), u[3] < 0 && (u[1] = -u[3], u[3] = 0)
}
var w = c._parseDots(e);
if (!w) return null;
if (k = k.replace(/[\(\)\s,\xb0#]/g, "_"), a.gradient && k != a.gradient.id && (p.defs.removeChild(a.gradient), delete a.gradient), !a.gradient) {
s = q(j + "Gradient", {id: k}), a.gradient = s, q(s, "radial" == j ? {fx: m, fy: n} : {
x1: u[0],
y1: u[1],
x2: u[2],
y2: u[3],
gradientTransform: a.matrix.invert()
}), p.defs.appendChild(s);
for (var x = 0, y = w.length; y > x; x++) s.appendChild(q("stop", {
offset: w[x].offset ? w[x].offset : x ? "100%" : "0%",
"stop-color": w[x].color || "#fff"
}))
}
}
return q(o, {
fill: "url(" + document.location + "#" + k + ")",
opacity: 1,
"fill-opacity": 1
}), r.fill = l, r.opacity = 1, r.fillOpacity = 1, 1
}, s = function (a) {
var b = a.getBBox(1);
q(a.pattern, {patternTransform: a.matrix.invert() + " translate(" + b.x + "," + b.y + ")"})
}, t = function (d, e, f) {
if ("path" == d.type) {
for (var g, h, i, j, k, m = b(e).toLowerCase().split("-"), n = d.paper, r = f ? "end" : "start", s = d.node, t = d.attrs, u = t["stroke-width"], v = m.length, w = "classic", x = 3, y = 3, z = 5; v--;) switch (m[v]) {
case"block":
case"classic":
case"oval":
case"diamond":
case"open":
case"none":
w = m[v];
break;
case"wide":
y = 5;
break;
case"narrow":
y = 2;
break;
case"long":
x = 5;
break;
case"short":
x = 2
}
if ("open" == w ? (x += 2, y += 2, z += 2, i = 1, j = f ? 4 : 1, k = {
fill: "none",
stroke: t.stroke
}) : (j = i = x / 2, k = {
fill: t.stroke,
stroke: "none"
}), d._.arrows ? f ? (d._.arrows.endPath && p[d._.arrows.endPath]--, d._.arrows.endMarker && p[d._.arrows.endMarker]--) : (d._.arrows.startPath && p[d._.arrows.startPath]--, d._.arrows.startMarker && p[d._.arrows.startMarker]--) : d._.arrows = {}, "none" != w) {
var A = "raphael-marker-" + w, B = "raphael-marker-" + r + w + x + y + "-obj" + d.id;
c._g.doc.getElementById(A) ? p[A]++ : (n.defs.appendChild(q(q("path"), {
"stroke-linecap": "round",
d: o[w],
id: A
})), p[A] = 1);
var C, D = c._g.doc.getElementById(B);
D ? (p[B]++, C = D.getElementsByTagName("use")[0]) : (D = q(q("marker"), {
id: B,
markerHeight: y,
markerWidth: x,
orient: "auto",
refX: j,
refY: y / 2
}), C = q(q("use"), {
"xlink:href": "#" + A,
transform: (f ? "rotate(180 " + x / 2 + " " + y / 2 + ") " : l) + "scale(" + x / z + "," + y / z + ")",
"stroke-width": (1 / ((x / z + y / z) / 2)).toFixed(4)
}), D.appendChild(C), n.defs.appendChild(D), p[B] = 1), q(C, k);
var E = i * ("diamond" != w && "oval" != w);
f ? (g = d._.arrows.startdx * u || 0, h = c.getTotalLength(t.path) - E * u) : (g = E * u, h = c.getTotalLength(t.path) - (d._.arrows.enddx * u || 0)), k = {}, k["marker-" + r] = "url(#" + B + ")", (h || g) && (k.d = c.getSubpath(t.path, g, h)), q(s, k), d._.arrows[r + "Path"] = A, d._.arrows[r + "Marker"] = B, d._.arrows[r + "dx"] = E, d._.arrows[r + "Type"] = w, d._.arrows[r + "String"] = e
} else f ? (g = d._.arrows.startdx * u || 0, h = c.getTotalLength(t.path) - g) : (g = 0, h = c.getTotalLength(t.path) - (d._.arrows.enddx * u || 0)), d._.arrows[r + "Path"] && q(s, {d: c.getSubpath(t.path, g, h)}), delete d._.arrows[r + "Path"], delete d._.arrows[r + "Marker"], delete d._.arrows[r + "dx"], delete d._.arrows[r + "Type"], delete d._.arrows[r + "String"];
for (k in p) if (p[a](k) && !p[k]) {
var F = c._g.doc.getElementById(k);
F && F.parentNode.removeChild(F)
}
}
}, u = {
"": [0],
none: [0],
"-": [3, 1],
".": [1, 1],
"-.": [3, 1, 1, 1],
"-..": [3, 1, 1, 1, 1, 1],
". ": [1, 3],
"- ": [4, 3],
"--": [8, 3],
"- .": [4, 3, 1, 3],
"--.": [8, 3, 1, 3],
"--..": [8, 3, 1, 3, 1, 3]
}, v = function (a, c, d) {
if (c = u[b(c).toLowerCase()]) {
for (var e = a.attrs["stroke-width"] || "1", f = {
round: e,
square: e,
butt: 0
}[a.attrs["stroke-linecap"] || d["stroke-linecap"]] || 0, g = [], h = c.length; h--;) g[h] = c[h] * e + (h % 2 ? 1 : -1) * f;
q(a.node, {"stroke-dasharray": g.join(",")})
}
}, w = function (d, f) {
var i = d.node, k = d.attrs, m = i.style.visibility;
i.style.visibility = "hidden";
for (var o in f) if (f[a](o)) {
if (!c._availableAttrs[a](o)) continue;
var p = f[o];
switch (k[o] = p, o) {
case"blur":
d.blur(p);
break;
case"title":
var u = i.getElementsByTagName("title");
if (u.length && (u = u[0])) u.firstChild.nodeValue = p; else {
u = q("title");
var w = c._g.doc.createTextNode(p);
u.appendChild(w), i.appendChild(u)
}
break;
case"href":
case"target":
var x = i.parentNode;
if ("a" != x.tagName.toLowerCase()) {
var z = q("a");
x.insertBefore(z, i), z.appendChild(i), x = z
}
"target" == o ? x.setAttributeNS(n, "show", "blank" == p ? "new" : p) : x.setAttributeNS(n, o, p);
break;
case"cursor":
i.style.cursor = p;
break;
case"transform":
d.transform(p);
break;
case"arrow-start":
t(d, p);
break;
case"arrow-end":
t(d, p, 1);
break;
case"clip-rect":
var A = b(p).split(j);
if (4 == A.length) {
d.clip && d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);
var B = q("clipPath"), C = q("rect");
B.id = c.createUUID(), q(C, {
x: A[0],
y: A[1],
width: A[2],
height: A[3]
}), B.appendChild(C), d.paper.defs.appendChild(B), q(i, {"clip-path": "url(#" + B.id + ")"}), d.clip = C
}
if (!p) {
var D = i.getAttribute("clip-path");
if (D) {
var E = c._g.doc.getElementById(D.replace(/(^url\(#|\)$)/g, l));
E && E.parentNode.removeChild(E), q(i, {"clip-path": l}), delete d.clip
}
}
break;
case"path":
"path" == d.type && (q(i, {d: p ? k.path = c._pathToAbsolute(p) : "M0,0"}), d._.dirty = 1, d._.arrows && ("startString" in d._.arrows && t(d, d._.arrows.startString), "endString" in d._.arrows && t(d, d._.arrows.endString, 1)));
break;
case"width":
if (i.setAttribute(o, p), d._.dirty = 1, !k.fx) break;
o = "x", p = k.x;
case"x":
k.fx && (p = -k.x - (k.width || 0));
case"rx":
if ("rx" == o && "rect" == d.type) break;
case"cx":
i.setAttribute(o, p), d.pattern && s(d), d._.dirty = 1;
break;
case"height":
if (i.setAttribute(o, p), d._.dirty = 1, !k.fy) break;
o = "y", p = k.y;
case"y":
k.fy && (p = -k.y - (k.height || 0));
case"ry":
if ("ry" == o && "rect" == d.type) break;
case"cy":
i.setAttribute(o, p), d.pattern && s(d), d._.dirty = 1;
break;
case"r":
"rect" == d.type ? q(i, {rx: p, ry: p}) : i.setAttribute(o, p), d._.dirty = 1;
break;
case"src":
"image" == d.type && i.setAttributeNS(n, "href", p);
break;
case"stroke-width":
(1 != d._.sx || 1 != d._.sy) && (p /= g(h(d._.sx), h(d._.sy)) || 1), i.setAttribute(o, p), k["stroke-dasharray"] && v(d, k["stroke-dasharray"], f), d._.arrows && ("startString" in d._.arrows && t(d, d._.arrows.startString), "endString" in d._.arrows && t(d, d._.arrows.endString, 1));
break;
case"stroke-dasharray":
v(d, p, f);
break;
case"fill":
var F = b(p).match(c._ISURL);
if (F) {
B = q("pattern");
var G = q("image");
B.id = c.createUUID(), q(B, {
x: 0,
y: 0,
patternUnits: "userSpaceOnUse",
height: 1,
width: 1
}), q(G, {x: 0, y: 0, "xlink:href": F[1]}), B.appendChild(G), function (a) {
c._preload(F[1], function () {
var b = this.offsetWidth, c = this.offsetHeight;
q(a, {width: b, height: c}), q(G, {width: b, height: c}), d.paper.safari()
})
}(B), d.paper.defs.appendChild(B), q(i, {fill: "url(#" + B.id + ")"}), d.pattern = B, d.pattern && s(d);
break
}
var H = c.getRGB(p);
if (H.error) {
if (("circle" == d.type || "ellipse" == d.type || "r" != b(p).charAt()) && r(d, p)) {
if ("opacity" in k || "fill-opacity" in k) {
var I = c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g, l));
if (I) {
var J = I.getElementsByTagName("stop");
q(J[J.length - 1], {"stop-opacity": ("opacity" in k ? k.opacity : 1) * ("fill-opacity" in k ? k["fill-opacity"] : 1)})
}
}
k.gradient = p, k.fill = "none";
break
}
} else delete f.gradient, delete k.gradient, !c.is(k.opacity, "undefined") && c.is(f.opacity, "undefined") && q(i, {opacity: k.opacity}), !c.is(k["fill-opacity"], "undefined") && c.is(f["fill-opacity"], "undefined") && q(i, {"fill-opacity": k["fill-opacity"]});
H[a]("opacity") && q(i, {"fill-opacity": H.opacity > 1 ? H.opacity / 100 : H.opacity});
case"stroke":
H = c.getRGB(p), i.setAttribute(o, H.hex), "stroke" == o && H[a]("opacity") && q(i, {"stroke-opacity": H.opacity > 1 ? H.opacity / 100 : H.opacity}), "stroke" == o && d._.arrows && ("startString" in d._.arrows && t(d, d._.arrows.startString), "endString" in d._.arrows && t(d, d._.arrows.endString, 1));
break;
case"gradient":
("circle" == d.type || "ellipse" == d.type || "r" != b(p).charAt()) && r(d, p);
break;
case"opacity":
k.gradient && !k[a]("stroke-opacity") && q(i, {"stroke-opacity": p > 1 ? p / 100 : p});
case"fill-opacity":
if (k.gradient) {
I = c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g, l)), I && (J = I.getElementsByTagName("stop"), q(J[J.length - 1], {"stop-opacity": p}));
break
}
default:
"font-size" == o && (p = e(p, 10) + "px");
var K = o.replace(/(\-.)/g, function (a) {
return a.substring(1).toUpperCase()
});
i.style[K] = p, d._.dirty = 1, i.setAttribute(o, p)
}
}
y(d, f), i.style.visibility = m
}, x = 1.2, y = function (d, f) {
if ("text" == d.type && (f[a]("text") || f[a]("font") || f[a]("font-size") || f[a]("x") || f[a]("y"))) {
var g = d.attrs, h = d.node,
i = h.firstChild ? e(c._g.doc.defaultView.getComputedStyle(h.firstChild, l).getPropertyValue("font-size"), 10) : 10;
if (f[a]("text")) {
for (g.text = f.text; h.firstChild;) h.removeChild(h.firstChild);
for (var j, k = b(f.text).split("\n"), m = [], n = 0, o = k.length; o > n; n++) j = q("tspan"), n && q(j, {
dy: i * x,
x: g.x
}), j.appendChild(c._g.doc.createTextNode(k[n])), h.appendChild(j), m[n] = j
} else for (m = h.getElementsByTagName("tspan"), n = 0, o = m.length; o > n; n++) n ? q(m[n], {
dy: i * x,
x: g.x
}) : q(m[0], {dy: 0});
q(h, {x: g.x, y: g.y}), d._.dirty = 1;
var p = d._getBBox(), r = g.y - (p.y + p.height / 2);
r && c.is(r, "finite") && q(m[0], {dy: r})
}
}, z = function (a) {
return a.parentNode && "a" === a.parentNode.tagName.toLowerCase() ? a.parentNode : a
};
__Element = function (a, b) {
this[0] = this.node = a, a.raphael = !0, this.id = c._oid++, a.raphaelid = this.id, this.matrix = c.matrix(), this.realPath = null, this.paper = b, this.attrs = this.attrs || {}, this._ = {
transform: [],
sx: 1,
sy: 1,
deg: 0,
dx: 0,
dy: 0,
dirty: 1
}, !b.bottom && (b.bottom = this), this.prev = b.top, b.top && (b.top.next = this), b.top = this, this.next = null
}, $b = c.el, Element.prototype = $b, $b.constructor = Element, c._engine.path = function (a, b) {
var c = q("path");
b.canvas && b.canvas.appendChild(c);
var d = new __Element(c, b);
return d.type = "path", w(d, {fill: "none", stroke: "#000", path: a}), d
}, $b.rotate = function (a, c, e) {
if (this.removed) return this;
if (a = b(a).split(j), a.length - 1 && (c = d(a[1]), e = d(a[2])), a = d(a[0]), null == e && (c = e), null == c || null == e) {
var f = this.getBBox(1);
c = f.x + f.width / 2, e = f.y + f.height / 2
}
return this.transform(this._.transform.concat([["r", a, c, e]])), this
}, $b.scale = function (a, c, e, f) {
if (this.removed) return this;
if (a = b(a).split(j), a.length - 1 && (c = d(a[1]), e = d(a[2]), f = d(a[3])), a = d(a[0]), null == c && (c = a), null == f && (e = f), null == e || null == f) var g = this.getBBox(1);
return e = null == e ? g.x + g.width / 2 : e, f = null == f ? g.y + g.height / 2 : f, this.transform(this._.transform.concat([["s", a, c, e, f]])), this
}, $b.translate = function (a, c) {
return this.removed ? this : (a = b(a).split(j), a.length - 1 && (c = d(a[1])), a = d(a[0]) || 0, c = +c || 0, this.transform(this._.transform.concat([["t", a, c]])), this)
}, $b.transform = function (b) {
var d = this._;
if (null == b) return d.transform;
if (c._extractTransform(this, b), this.clip && q(this.clip, {transform: this.matrix.invert()}), this.pattern && s(this), this.node && q(this.node, {transform: this.matrix}), 1 != d.sx || 1 != d.sy) {
var e = this.attrs[a]("stroke-width") ? this.attrs["stroke-width"] : 1;
this.attr({"stroke-width": e})
}
return this
}, $b.hide = function () {
return !this.removed && this.paper.safari(this.node.style.display = "none"), this
}, $b.show = function () {
return !this.removed && this.paper.safari(this.node.style.display = ""), this
}, $b.remove = function () {
var a = z(this.node);
if (!this.removed && a.parentNode) {
var b = this.paper;
b.__set__ && b.__set__.exclude(this), k.unbind("raphael.*.*." + this.id), this.gradient && b.defs.removeChild(this.gradient), c._tear(this, b), a.parentNode.removeChild(a), this.removeData();
for (var d in this) this[d] = "function" == typeof this[d] ? c._removedFactory(d) : null;
this.removed = !0
}
}, $b._getBBox = function () {
if ("none" == this.node.style.display) {
this.show();
var a = !0
}
var b, c = !1;
this.paper.canvas.parentElement ? b = this.paper.canvas.parentElement.style : this.paper.canvas.parentNode && (b = this.paper.canvas.parentNode.style), b && "none" == b.display && (c = !0, b.display = "");
var d = {};
try {
d = this.node.getBBox()
} catch (e) {
d = {
x: this.node.clientLeft,
y: this.node.clientTop,
width: this.node.clientWidth,
height: this.node.clientHeight
}
} finally {
d = d || {}, c && (b.display = "none")
}
return a && this.hide(), d
}, $b.attr = function (b, d) {
if (this.removed) return this;
if (null == b) {
var e = {};
for (var f in this.attrs) this.attrs[a](f) && (e[f] = this.attrs[f]);
return e.gradient && "none" == e.fill && (e.fill = e.gradient) && delete e.gradient, e.transform = this._.transform, e
}
if (null == d && c.is(b, "string")) {
if ("fill" == b && "none" == this.attrs.fill && this.attrs.gradient) return this.attrs.gradient;
if ("transform" == b) return this._.transform;
for (var g = b.split(j), h = {}, i = 0, l = g.length; l > i; i++) b = g[i], h[b] = b in this.attrs ? this.attrs[b] : c.is(this.paper.customAttributes[b], "function") ? this.paper.customAttributes[b].def : c._availableAttrs[b];
return l - 1 ? h : h[g[0]]
}
if (null == d && c.is(b, "array")) {
for (h = {}, i = 0, l = b.length; l > i; i++) h[b[i]] = this.attr(b[i]);
return h
}
if (null != d) {
var m = {};
m[b] = d
} else null != b && c.is(b, "object") && (m = b);
for (var n in m) k("raphael.attr." + n + "." + this.id, this, m[n]);
for (n in this.paper.customAttributes) if (this.paper.customAttributes[a](n) && m[a](n) && c.is(this.paper.customAttributes[n], "function")) {
var o = this.paper.customAttributes[n].apply(this, [].concat(m[n]));
this.attrs[n] = m[n];
for (var p in o) o[a](p) && (m[p] = o[p])
}
return w(this, m), this
}, $b.toFront = function () {
if (this.removed) return this;
var a = z(this.node);
a.parentNode.appendChild(a);
var b = this.paper;
return b.top != this && c._tofront(this, b), this
}, $b.toBack = function () {
if (this.removed) return this;
var a = z(this.node), b = a.parentNode;
b.insertBefore(a, b.firstChild), c._toback(this, this.paper);
this.paper;
return this
}, $b.insertAfter = function (a) {
if (this.removed || !a) return this;
var b = z(this.node), d = z(a.node || a[a.length - 1].node);
return d.nextSibling ? d.parentNode.insertBefore(b, d.nextSibling) : d.parentNode.appendChild(b), c._insertafter(this, a, this.paper), this
}, $b.insertBefore = function (a) {
if (this.removed || !a) return this;
var b = z(this.node), d = z(a.node || a[0].node);
return d.parentNode.insertBefore(b, d), c._insertbefore(this, a, this.paper), this
}, $b.blur = function (a) {
var b = this;
if (0 !== +a) {
var d = q("filter"), e = q("feGaussianBlur");
b.attrs.blur = a, d.id = c.createUUID(), q(e, {stdDeviation: +a || 1.5}), d.appendChild(e), b.paper.defs.appendChild(d), b._blur = d, q(b.node, {filter: "url(#" + d.id + ")"})
} else b._blur && (b._blur.parentNode.removeChild(b._blur), delete b._blur, delete b.attrs.blur), b.node.removeAttribute("filter");
return b
}, c._engine.circle = function (a, b, c, d) {
var e = q("circle");
a.canvas && a.canvas.appendChild(e);
var f = new __Element(e, a);
return f.attrs = {cx: b, cy: c, r: d, fill: "none", stroke: "#000"}, f.type = "circle", q(e, f.attrs), f
}, c._engine.rect = function (a, b, c, d, e, f) {
var g = q("rect");
a.canvas && a.canvas.appendChild(g);
var h = new __Element(g, a);
return h.attrs = {
x: b,
y: c,
width: d,
height: e,
rx: f || 0,
ry: f || 0,
fill: "none",
stroke: "#000"
}, h.type = "rect", q(g, h.attrs), h
}, c._engine.ellipse = function (a, b, c, d, e) {
var f = q("ellipse");
a.canvas && a.canvas.appendChild(f);
var g = new __Element(f, a);
return g.attrs = {
cx: b,
cy: c,
rx: d,
ry: e,
fill: "none",
stroke: "#000"
}, g.type = "ellipse", q(f, g.attrs), g
}, c._engine.image = function (a, b, c, d, e, f) {
var g = q("image");
q(g, {
x: c,
y: d,
width: e,
height: f,
preserveAspectRatio: "none"
}), g.setAttributeNS(n, "href", b), a.canvas && a.canvas.appendChild(g);
var h = new __Element(g, a);
return h.attrs = {x: c, y: d, width: e, height: f, src: b}, h.type = "image", h
}, c._engine.text = function (a, b, d, e) {
var f = q("text");
a.canvas && a.canvas.appendChild(f);
var g = new __Element(f, a);
return g.attrs = {
x: b,
y: d,
"text-anchor": "middle",
text: e,
"font-family": c._availableAttrs["font-family"],
"font-size": c._availableAttrs["font-size"],
stroke: "none",
fill: "#000"
}, g.type = "text", w(g, g.attrs), g
}, c._engine.setSize = function (a, b) {
return this.width = a || this.width, this.height = b || this.height, this.canvas.setAttribute("width", this.width), this.canvas.setAttribute("height", this.height), this._viewBox && this.setViewBox.apply(this, this._viewBox), this
}, c._engine.create = function () {
var a = c._getContainer.apply(0, arguments), b = a && a.container, d = a.x, e = a.y, f = a.width, g = a.height;
if (!b) throw new Error("SVG container not found.");
var h, i = q("svg"), j = "overflow:hidden;";
return d = d || 0, e = e || 0, f = f || 512, g = g || 342, q(i, {
height: g,
version: 1.1,
width: f,
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink"
}), 1 == b ? (i.style.cssText = j + "position:absolute;left:" + d + "px;top:" + e + "px", c._g.doc.body.appendChild(i), h = 1) : (i.style.cssText = j + "position:relative", b.firstChild ? b.insertBefore(i, b.firstChild) : b.appendChild(i)), b = new c._Paper, b.width = f, b.height = g, b.canvas = i, b.clear(), b._left = b._top = 0, h && (b.renderfix = function () {
}), b.renderfix(), b
}, c._engine.setViewBox = function (a, b, c, d, e) {
k("raphael.setViewBox", this, this._viewBox, [a, b, c, d, e]);
var f, h, i = this.getSize(), j = g(c / i.width, d / i.height), l = this.top,
n = e ? "xMidYMid meet" : "xMinYMin";
for (null == a ? (this._vbSize && (j = 1), delete this._vbSize, f = "0 0 " + this.width + m + this.height) : (this._vbSize = j, f = a + m + b + m + c + m + d), q(this.canvas, {
viewBox: f,
preserveAspectRatio: n
}); j && l;) h = "stroke-width" in l.attrs ? l.attrs["stroke-width"] : 1, l.attr({"stroke-width": h}), l._.dirty = 1, l._.dirtyT = 1, l = l.prev;
return this._viewBox = [a, b, c, d, !!e], this
}, c.prototype.renderfix = function () {
var a, b = this.canvas, c = b.style;
try {
a = b.getScreenCTM() || b.createSVGMatrix()
} catch (d) {
a = b.createSVGMatrix()
}
var e = -a.e % 1, f = -a.f % 1;
(e || f) && (e && (this._left = (this._left + e) % 1, c.left = this._left + "px"), f && (this._top = (this._top + f) % 1, c.top = this._top + "px"))
}, c.prototype.clear = function () {
c.eve("raphael.clear", this);
for (var a = this.canvas; a.firstChild;) a.removeChild(a.firstChild);
this.bottom = this.top = null, (this.desc = q("desc")).appendChild(c._g.doc.createTextNode("Created with Raphaël " + c.version)), a.appendChild(this.desc), a.appendChild(this.defs = q("defs"))
}, c.prototype.remove = function () {
k("raphael.remove", this), this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);
for (var a in this) this[a] = "function" == typeof this[a] ? c._removedFactory(a) : null
};
var A = c.st;
for (var B in $b) $b[a](B) && !A[a](B) && (A[B] = function (a) {
return function () {
var b = arguments;
return this.forEach(function (c) {
c[a].apply(c, b)
})
}
}(B))
}
}(), function () {
if (c.vml) {
var a = "hasOwnProperty", b = String, d = parseFloat, e = Math, f = e.round, g = e.max, h = e.min, i = e.abs,
j = "fill", k = /[, ]+/, l = c.eve, m = " progid:DXImageTransform.Microsoft", n = " ", o = "",
p = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"}, q = /([clmz]),?([^clmz]*)/gi,
r = / progid:\S+Blur\([^\)]+\)/g, s = /-?[^,\s-]+/g,
t = "position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)", u = 21600,
v = {path: 1, rect: 1, image: 1}, w = {circle: 1, ellipse: 1}, x = function (a) {
var d = /[ahqstv]/gi, e = c._pathToAbsolute;
if (b(a).match(d) && (e = c._path2curve), d = /[clmz]/g, e == c._pathToAbsolute && !b(a).match(d)) {
var g = b(a).replace(q, function (a, b, c) {
var d = [], e = "m" == b.toLowerCase(), g = p[b];
return c.replace(s, function (a) {
e && 2 == d.length && (g += d + p["m" == b ? "l" : "L"], d = []), d.push(f(a * u))
}), g + d
});
return g
}
var h, i, j = e(a);
g = [];
for (var k = 0, l = j.length; l > k; k++) {
h = j[k], i = j[k][0].toLowerCase(), "z" == i && (i = "x");
for (var m = 1, r = h.length; r > m; m++) i += f(h[m] * u) + (m != r - 1 ? "," : o);
g.push(i)
}
return g.join(n)
}, y = function (a, b, d) {
var e = c.matrix();
return e.rotate(-a, .5, .5), {dx: e.x(b, d), dy: e.y(b, d)}
}, z = function (a, b, c, d, e, f) {
var g = a._, h = a.matrix, k = g.fillpos, l = a.node, m = l.style, o = 1, p = "", q = u / b, r = u / c;
if (m.visibility = "hidden", b && c) {
if (l.coordsize = i(q) + n + i(r), m.rotation = f * (0 > b * c ? -1 : 1), f) {
var s = y(f, d, e);
d = s.dx, e = s.dy
}
if (0 > b && (p += "x"), 0 > c && (p += " y") && (o = -1), m.flip = p, l.coordorigin = d * -q + n + e * -r, k || g.fillsize) {
var t = l.getElementsByTagName(j);
t = t && t[0], l.removeChild(t), k && (s = y(f, h.x(k[0], k[1]), h.y(k[0], k[1])), t.position = s.dx * o + n + s.dy * o), g.fillsize && (t.size = g.fillsize[0] * i(b) + n + g.fillsize[1] * i(c)), l.appendChild(t)
}
m.visibility = "visible"
}
};
c.toString = function () {
return "Your browser doesnt support SVG. Falling down to VML.\nYou are running Raphaël " + this.version
};
var A = function (a, c, d) {
for (var e = b(c).toLowerCase().split("-"), f = d ? "end" : "start", g = e.length, h = "classic", i = "medium", j = "medium"; g--;) switch (e[g]) {
case"block":
case"classic":
case"oval":
case"diamond":
case"open":
case"none":
h = e[g];
break;
case"wide":
case"narrow":
j = e[g];
break;
case"long":
case"short":
i = e[g]
}
var k = a.node.getElementsByTagName("stroke")[0];
k[f + "arrow"] = h, k[f + "arrowlength"] = i, k[f + "arrowwidth"] = j
}, B = function (e, i) {
e.attrs = e.attrs || {};
var l = e.node, m = e.attrs, p = l.style,
q = v[e.type] && (i.x != m.x || i.y != m.y || i.width != m.width || i.height != m.height || i.cx != m.cx || i.cy != m.cy || i.rx != m.rx || i.ry != m.ry || i.r != m.r),
r = w[e.type] && (m.cx != i.cx || m.cy != i.cy || m.r != i.r || m.rx != i.rx || m.ry != i.ry), s = e;
for (var t in i) i[a](t) && (m[t] = i[t]);
if (q && (m.path = c._getPath[e.type](e), e._.dirty = 1), i.href && (l.href = i.href), i.title && (l.title = i.title), i.target && (l.target = i.target), i.cursor && (p.cursor = i.cursor), "blur" in i && e.blur(i.blur), (i.path && "path" == e.type || q) && (l.path = x(~b(m.path).toLowerCase().indexOf("r") ? c._pathToAbsolute(m.path) : m.path), e._.dirty = 1, "image" == e.type && (e._.fillpos = [m.x, m.y], e._.fillsize = [m.width, m.height], z(e, 1, 1, 0, 0, 0))), "transform" in i && e.transform(i.transform), r) {
var y = +m.cx, B = +m.cy, D = +m.rx || +m.r || 0, E = +m.ry || +m.r || 0;
l.path = c.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x", f((y - D) * u), f((B - E) * u), f((y + D) * u), f((B + E) * u), f(y * u)), e._.dirty = 1
}
if ("clip-rect" in i) {
var G = b(i["clip-rect"]).split(k);
if (4 == G.length) {
G[2] = +G[2] + +G[0], G[3] = +G[3] + +G[1];
var H = l.clipRect || c._g.doc.createElement("div"), I = H.style;
I.clip = c.format("rect({1}px {2}px {3}px {0}px)", G), l.clipRect || (I.position = "absolute", I.top = 0, I.left = 0, I.width = e.paper.width + "px", I.height = e.paper.height + "px", l.parentNode.insertBefore(H, l), H.appendChild(l), l.clipRect = H)
}
i["clip-rect"] || l.clipRect && (l.clipRect.style.clip = "auto")
}
if (e.textpath) {
var J = e.textpath.style;
i.font && (J.font = i.font), i["font-family"] && (J.fontFamily = '"' + i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g, o) + '"'), i["font-size"] && (J.fontSize = i["font-size"]), i["font-weight"] && (J.fontWeight = i["font-weight"]), i["font-style"] && (J.fontStyle = i["font-style"])
}
if ("arrow-start" in i && A(s, i["arrow-start"]), "arrow-end" in i && A(s, i["arrow-end"], 1), null != i.opacity || null != i["stroke-width"] || null != i.fill || null != i.src || null != i.stroke || null != i["stroke-width"] || null != i["stroke-opacity"] || null != i["fill-opacity"] || null != i["stroke-dasharray"] || null != i["stroke-miterlimit"] || null != i["stroke-linejoin"] || null != i["stroke-linecap"]) {
var K = l.getElementsByTagName(j), L = !1;
if (K = K && K[0], !K && (L = K = F(j)), "image" == e.type && i.src && (K.src = i.src), i.fill && (K.on = !0), (null == K.on || "none" == i.fill || null === i.fill) && (K.on = !1), K.on && i.fill) {
var M = b(i.fill).match(c._ISURL);
if (M) {
K.parentNode == l && l.removeChild(K), K.rotate = !0, K.src = M[1], K.type = "tile";
var N = e.getBBox(1);
K.position = N.x + n + N.y, e._.fillpos = [N.x, N.y], c._preload(M[1], function () {
e._.fillsize = [this.offsetWidth, this.offsetHeight]
})
} else K.color = c.getRGB(i.fill).hex, K.src = o, K.type = "solid", c.getRGB(i.fill).error && (s.type in {
circle: 1,
ellipse: 1
} || "r" != b(i.fill).charAt()) && C(s, i.fill, K) && (m.fill = "none", m.gradient = i.fill, K.rotate = !1)
}
if ("fill-opacity" in i || "opacity" in i) {
var O = ((+m["fill-opacity"] + 1 || 2) - 1) * ((+m.opacity + 1 || 2) - 1) * ((+c.getRGB(i.fill).o + 1 || 2) - 1);
O = h(g(O, 0), 1), K.opacity = O, K.src && (K.color = "none")
}
l.appendChild(K);
var P = l.getElementsByTagName("stroke") && l.getElementsByTagName("stroke")[0], Q = !1;
!P && (Q = P = F("stroke")), (i.stroke && "none" != i.stroke || i["stroke-width"] || null != i["stroke-opacity"] || i["stroke-dasharray"] || i["stroke-miterlimit"] || i["stroke-linejoin"] || i["stroke-linecap"]) && (P.on = !0), ("none" == i.stroke || null === i.stroke || null == P.on || 0 == i.stroke || 0 == i["stroke-width"]) && (P.on = !1);
var R = c.getRGB(i.stroke);
P.on && i.stroke && (P.color = R.hex), O = ((+m["stroke-opacity"] + 1 || 2) - 1) * ((+m.opacity + 1 || 2) - 1) * ((+R.o + 1 || 2) - 1);
var S = .75 * (d(i["stroke-width"]) || 1);
if (O = h(g(O, 0), 1), null == i["stroke-width"] && (S = m["stroke-width"]), i["stroke-width"] && (P.weight = S), S && 1 > S && (O *= S) && (P.weight = 1), P.opacity = O, i["stroke-linejoin"] && (P.joinstyle = i["stroke-linejoin"] || "miter"), P.miterlimit = i["stroke-miterlimit"] || 8, i["stroke-linecap"] && (P.endcap = "butt" == i["stroke-linecap"] ? "flat" : "square" == i["stroke-linecap"] ? "square" : "round"), "stroke-dasharray" in i) {
var T = {
"-": "shortdash",
".": "shortdot",
"-.": "shortdashdot",
"-..": "shortdashdotdot",
". ": "dot",
"- ": "dash",
"--": "longdash",
"- .": "dashdot",
"--.": "longdashdot",
"--..": "longdashdotdot"
};
P.dashstyle = T[a](i["stroke-dasharray"]) ? T[i["stroke-dasharray"]] : o
}
Q && l.appendChild(P)
}
if ("text" == s.type) {
s.paper.canvas.style.display = o;
var U = s.paper.span, V = 100, W = m.font && m.font.match(/\d+(?:\.\d*)?(?=px)/);
p = U.style, m.font && (p.font = m.font), m["font-family"] && (p.fontFamily = m["font-family"]), m["font-weight"] && (p.fontWeight = m["font-weight"]), m["font-style"] && (p.fontStyle = m["font-style"]), W = d(m["font-size"] || W && W[0]) || 10, p.fontSize = W * V + "px", s.textpath.string && (U.innerHTML = b(s.textpath.string).replace(/</g, "&#60;").replace(/&/g, "&#38;").replace(/\n/g, "<br>"));
var X = U.getBoundingClientRect();
s.W = m.w = (X.right - X.left) / V, s.H = m.h = (X.bottom - X.top) / V, s.X = m.x, s.Y = m.y + s.H / 2, ("x" in i || "y" in i) && (s.path.v = c.format("m{0},{1}l{2},{1}", f(m.x * u), f(m.y * u), f(m.x * u) + 1));
for (var Y = ["x", "y", "text", "font", "font-family", "font-weight", "font-style", "font-size"], Z = 0, $ = Y.length; $ > Z; Z++) if (Y[Z] in i) {
s._.dirty = 1;
break
}
switch (m["text-anchor"]) {
case"start":
s.textpath.style["v-text-align"] = "left", s.bbx = s.W / 2;
break;
case"end":
s.textpath.style["v-text-align"] = "right", s.bbx = -s.W / 2;
break;
default:
s.textpath.style["v-text-align"] = "center", s.bbx = 0
}
s.textpath.style["v-text-kern"] = !0
}
}, C = function (a, f, g) {
a.attrs = a.attrs || {};
var h = (a.attrs, Math.pow), i = "linear", j = ".5 .5";
if (a.attrs.gradient = f, f = b(f).replace(c._radial_gradient, function (a, b, c) {
return i = "radial", b && c && (b = d(b), c = d(c), h(b - .5, 2) + h(c - .5, 2) > .25 && (c = e.sqrt(.25 - h(b - .5, 2)) * (2 * (c > .5) - 1) + .5), j = b + n + c), o
}), f = f.split(/\s*\-\s*/), "linear" == i) {
var k = f.shift();
if (k = -d(k), isNaN(k)) return null
}
var l = c._parseDots(f);
if (!l) return null;
if (a = a.shape || a.node, l.length) {
a.removeChild(g), g.on = !0, g.method = "none", g.color = l[0].color, g.color2 = l[l.length - 1].color;
for (var m = [], p = 0, q = l.length; q > p; p++) l[p].offset && m.push(l[p].offset + n + l[p].color);
g.colors = m.length ? m.join() : "0% " + g.color, "radial" == i ? (g.type = "gradientTitle", g.focus = "100%", g.focussize = "0 0", g.focusposition = j, g.angle = 0) : (g.type = "gradient", g.angle = (270 - k) % 360), a.appendChild(g)
}
return 1
}, D = function (a, b) {
this[0] = this.node = a, a.raphael = !0, this.id = c._oid++, a.raphaelid = this.id, this.X = 0, this.Y = 0, this.attrs = {}, this.paper = b, this.matrix = c.matrix(), this._ = {
transform: [],
sx: 1,
sy: 1,
dx: 0,
dy: 0,
deg: 0,
dirty: 1,
dirtyT: 1
}, !b.bottom && (b.bottom = this), this.prev = b.top, b.top && (b.top.next = this), b.top = this, this.next = null
}, E = c.el;
D.prototype = E, E.constructor = D, E.transform = function (a) {
if (null == a) return this._.transform;
var d, e = this.paper._viewBoxShift, f = e ? "s" + [e.scale, e.scale] + "-1-1t" + [e.dx, e.dy] : o;
e && (d = a = b(a).replace(/\.{3}|\u2026/g, this._.transform || o)), c._extractTransform(this, f + a);
var g, h = this.matrix.clone(), i = this.skew, j = this.node, k = ~b(this.attrs.fill).indexOf("-"),
l = !b(this.attrs.fill).indexOf("url(");
if (h.translate(1, 1), l || k || "image" == this.type) if (i.matrix = "1 0 0 1", i.offset = "0 0", g = h.split(), k && g.noRotation || !g.isSimple) {
j.style.filter = h.toFilter();
var m = this.getBBox(), p = this.getBBox(1), q = m.x - p.x, r = m.y - p.y;
j.coordorigin = q * -u + n + r * -u, z(this, 1, 1, q, r, 0)
} else j.style.filter = o, z(this, g.scalex, g.scaley, g.dx, g.dy, g.rotate); else j.style.filter = o, i.matrix = b(h), i.offset = h.offset();
return null !== d && (this._.transform = d, c._extractTransform(this, d)), this
}, E.rotate = function (a, c, e) {
if (this.removed) return this;
if (null != a) {
if (a = b(a).split(k), a.length - 1 && (c = d(a[1]), e = d(a[2])), a = d(a[0]), null == e && (c = e), null == c || null == e) {
var f = this.getBBox(1);
c = f.x + f.width / 2, e = f.y + f.height / 2
}
return this._.dirtyT = 1, this.transform(this._.transform.concat([["r", a, c, e]])), this
}
}, E.translate = function (a, c) {
return this.removed ? this : (a = b(a).split(k), a.length - 1 && (c = d(a[1])), a = d(a[0]) || 0, c = +c || 0, this._.bbox && (this._.bbox.x += a, this._.bbox.y += c), this.transform(this._.transform.concat([["t", a, c]])), this)
}, E.scale = function (a, c, e, f) {
if (this.removed) return this;
if (a = b(a).split(k), a.length - 1 && (c = d(a[1]), e = d(a[2]), f = d(a[3]), isNaN(e) && (e = null), isNaN(f) && (f = null)), a = d(a[0]), null == c && (c = a), null == f && (e = f), null == e || null == f) var g = this.getBBox(1);
return e = null == e ? g.x + g.width / 2 : e, f = null == f ? g.y + g.height / 2 : f, this.transform(this._.transform.concat([["s", a, c, e, f]])), this._.dirtyT = 1, this
}, E.hide = function () {
return !this.removed && (this.node.style.display = "none"), this
}, E.show = function () {
return !this.removed && (this.node.style.display = o), this
}, E.auxGetBBox = c.el.getBBox, E.getBBox = function () {
var a = this.auxGetBBox();
if (this.paper && this.paper._viewBoxShift) {
var b = {}, c = 1 / this.paper._viewBoxShift.scale;
return b.x = a.x - this.paper._viewBoxShift.dx, b.x *= c, b.y = a.y - this.paper._viewBoxShift.dy, b.y *= c, b.width = a.width * c, b.height = a.height * c, b.x2 = b.x + b.width, b.y2 = b.y + b.height, b
}
return a
}, E._getBBox = function () {
return this.removed ? {} : {
x: this.X + (this.bbx || 0) - this.W / 2,
y: this.Y - this.H,
width: this.W,
height: this.H
}
}, E.remove = function () {
if (!this.removed && this.node.parentNode) {
this.paper.__set__ && this.paper.__set__.exclude(this), c.eve.unbind("raphael.*.*." + this.id), c._tear(this, this.paper), this.node.parentNode.removeChild(this.node), this.shape && this.shape.parentNode.removeChild(this.shape);
for (var a in this) this[a] = "function" == typeof this[a] ? c._removedFactory(a) : null;
this.removed = !0
}
}, E.attr = function (b, d) {
if (this.removed) return this;
if (null == b) {
var e = {};
for (var f in this.attrs) this.attrs[a](f) && (e[f] = this.attrs[f]);
return e.gradient && "none" == e.fill && (e.fill = e.gradient) && delete e.gradient, e.transform = this._.transform, e
}
if (null == d && c.is(b, "string")) {
if (b == j && "none" == this.attrs.fill && this.attrs.gradient) return this.attrs.gradient;
for (var g = b.split(k), h = {}, i = 0, m = g.length; m > i; i++) b = g[i], h[b] = b in this.attrs ? this.attrs[b] : c.is(this.paper.customAttributes[b], "function") ? this.paper.customAttributes[b].def : c._availableAttrs[b];
return m - 1 ? h : h[g[0]]
}
if (this.attrs && null == d && c.is(b, "array")) {
for (h = {}, i = 0, m = b.length; m > i; i++) h[b[i]] = this.attr(b[i]);
return h
}
var n;
null != d && (n = {}, n[b] = d), null == d && c.is(b, "object") && (n = b);
for (var o in n) l("raphael.attr." + o + "." + this.id, this, n[o]);
if (n) {
for (o in this.paper.customAttributes) if (this.paper.customAttributes[a](o) && n[a](o) && c.is(this.paper.customAttributes[o], "function")) {
var p = this.paper.customAttributes[o].apply(this, [].concat(n[o]));
this.attrs[o] = n[o];
for (var q in p) p[a](q) && (n[q] = p[q])
}
n.text && "text" == this.type && (this.textpath.string = n.text), B(this, n)
}
return this
}, E.toFront = function () {
return !this.removed && this.node.parentNode.appendChild(this.node), this.paper && this.paper.top != this && c._tofront(this, this.paper), this
}, E.toBack = function () {
return this.removed ? this : (this.node.parentNode.firstChild != this.node && (this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild), c._toback(this, this.paper)), this)
}, E.insertAfter = function (a) {
return this.removed ? this : (a.constructor == c.st.constructor && (a = a[a.length - 1]), a.node.nextSibling ? a.node.parentNode.insertBefore(this.node, a.node.nextSibling) : a.node.parentNode.appendChild(this.node), c._insertafter(this, a, this.paper), this)
}, E.insertBefore = function (a) {
return this.removed ? this : (a.constructor == c.st.constructor && (a = a[0]), a.node.parentNode.insertBefore(this.node, a.node), c._insertbefore(this, a, this.paper), this)
}, E.blur = function (a) {
var b = this.node.runtimeStyle, d = b.filter;
return d = d.replace(r, o), 0 !== +a ? (this.attrs.blur = a, b.filter = d + n + m + ".Blur(pixelradius=" + (+a || 1.5) + ")", b.margin = c.format("-{0}px 0 0 -{0}px", f(+a || 1.5))) : (b.filter = d, b.margin = 0, delete this.attrs.blur), this
}, c._engine.path = function (a, b) {
var c = F("shape");
c.style.cssText = t, c.coordsize = u + n + u, c.coordorigin = b.coordorigin;
var d = new D(c, b), e = {fill: "none", stroke: "#000"};
a && (e.path = a), d.type = "path", d.path = [], d.Path = o, B(d, e), b.canvas.appendChild(c);
var f = F("skew");
return f.on = !0, c.appendChild(f), d.skew = f, d.transform(o), d
}, c._engine.rect = function (a, b, d, e, f, g) {
var h = c._rectPath(b, d, e, f, g), i = a.path(h), j = i.attrs;
return i.X = j.x = b, i.Y = j.y = d, i.W = j.width = e, i.H = j.height = f, j.r = g, j.path = h, i.type = "rect", i
}, c._engine.ellipse = function (a, b, c, d, e) {
{
var f = a.path();
f.attrs
}
return f.X = b - d, f.Y = c - e, f.W = 2 * d, f.H = 2 * e, f.type = "ellipse", B(f, {
cx: b,
cy: c,
rx: d,
ry: e
}), f
}, c._engine.circle = function (a, b, c, d) {
{
var e = a.path();
e.attrs
}
return e.X = b - d, e.Y = c - d, e.W = e.H = 2 * d, e.type = "circle", B(e, {cx: b, cy: c, r: d}), e
}, c._engine.image = function (a, b, d, e, f, g) {
var h = c._rectPath(d, e, f, g), i = a.path(h).attr({stroke: "none"}), k = i.attrs, l = i.node,
m = l.getElementsByTagName(j)[0];
return k.src = b, i.X = k.x = d, i.Y = k.y = e, i.W = k.width = f, i.H = k.height = g, k.path = h, i.type = "image", m.parentNode == l && l.removeChild(m), m.rotate = !0, m.src = b, m.type = "tile", i._.fillpos = [d, e], i._.fillsize = [f, g], l.appendChild(m), z(i, 1, 1, 0, 0, 0), i
}, c._engine.text = function (a, d, e, g) {
var h = F("shape"), i = F("path"), j = F("textpath");
d = d || 0, e = e || 0, g = g || "", i.v = c.format("m{0},{1}l{2},{1}", f(d * u), f(e * u), f(d * u) + 1), i.textpathok = !0, j.string = b(g), j.on = !0, h.style.cssText = t, h.coordsize = u + n + u, h.coordorigin = "0 0";
var k = new D(h, a), l = {fill: "#000", stroke: "none", font: c._availableAttrs.font, text: g};
k.shape = h, k.path = i, k.textpath = j, k.type = "text", k.attrs.text = b(g), k.attrs.x = d, k.attrs.y = e, k.attrs.w = 1, k.attrs.h = 1, B(k, l), h.appendChild(j), h.appendChild(i), a.canvas.appendChild(h);
var m = F("skew");
return m.on = !0, h.appendChild(m), k.skew = m, k.transform(o), k
}, c._engine.setSize = function (a, b) {
var d = this.canvas.style;
return this.width = a, this.height = b, a == +a && (a += "px"), b == +b && (b += "px"), d.width = a, d.height = b, d.clip = "rect(0 " + a + " " + b + " 0)", this._viewBox && c._engine.setViewBox.apply(this, this._viewBox), this
}, c._engine.setViewBox = function (a, b, d, e, f) {
c.eve("raphael.setViewBox", this, this._viewBox, [a, b, d, e, f]);
var g, h, i = this.getSize(), j = i.width, k = i.height;
return f && (g = k / e, h = j / d, j > d * g && (a -= (j - d * g) / 2 / g), k > e * h && (b -= (k - e * h) / 2 / h)), this._viewBox = [a, b, d, e, !!f], this._viewBoxShift = {
dx: -a,
dy: -b,
scale: size
}, this.forEach(function (a) {
a.transform("...")
}), this
};
var F;
c._engine.initWin = function (a) {
var b = a.document;
b.styleSheets.length < 31 ? b.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)") : b.styleSheets[0].addRule(".rvml", "behavior:url(#default#VML)");
try {
!b.namespaces.rvml && b.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"), F = function (a) {
return b.createElement("<rvml:" + a + ' class="rvml">')
}
} catch (c) {
F = function (a) {
return b.createElement("<" + a + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')
}
}
}, c._engine.initWin(c._g.win), c._engine.create = function () {
var a = c._getContainer.apply(0, arguments), b = a.container, d = a.height, e = a.width, f = a.x, g = a.y;
if (!b) throw new Error("VML container not found.");
var h = new c._Paper, i = h.canvas = c._g.doc.createElement("div"), j = i.style;
return f = f || 0, g = g || 0, e = e || 512, d = d || 342, h.width = e, h.height = d, e == +e && (e += "px"), d == +d && (d += "px"), h.coordsize = 1e3 * u + n + 1e3 * u, h.coordorigin = "0 0", h.span = c._g.doc.createElement("span"), h.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;", i.appendChild(h.span), j.cssText = c.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", e, d), 1 == b ? (c._g.doc.body.appendChild(i), j.left = f + "px", j.top = g + "px", j.position = "absolute") : b.firstChild ? b.insertBefore(i, b.firstChild) : b.appendChild(i), h.renderfix = function () {
}, h
}, c.prototype.clear = function () {
c.eve("raphael.clear", this), this.canvas.innerHTML = o, this.span = c._g.doc.createElement("span"), this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;", this.canvas.appendChild(this.span), this.bottom = this.top = null
}, c.prototype.remove = function () {
c.eve("raphael.remove", this), this.canvas.parentNode.removeChild(this.canvas);
for (var a in this) this[a] = "function" == typeof this[a] ? c._removedFactory(a) : null;
return !0
};
var G = c.st;
for (var H in E) E[a](H) && !G[a](H) && (G[H] = function (a) {
return function () {
var b = arguments;
return this.forEach(function (c) {
c[a].apply(c, b)
})
}
}(H))
}
}(), B.was ? A.win.Raphael = c : Raphael = c, "object" == typeof exports && (module.exports = c), c
});
/** js sequence diagrams 1.0.4
* http://bramp.github.io/js-sequence-diagrams/
* (c) 2012-2013 Andrew Brampton (bramp.net)
* @license Simplified BSD license.
*/
!function () {
"use strict";
function Diagram() {
this.title = void 0, this.actors = [], this.signals = []
}
function ParseError(message, hash) {
_.extend(this, hash), this.name = "ParseError", this.message = message || ""
}
Diagram.prototype.getActor = function (alias) {
var s = /^(.+) as (\S+)$/i.exec(alias.trim());
s ? (name = s[1].trim(), alias = s[2].trim()) : name = alias.trim(), name = name.replace(/\\n/gm, "\n");
var i, actors = this.actors;
for (i in actors) if (actors[i].alias == alias) return actors[i];
return i = actors.push(new Diagram.Actor(alias, name, actors.length)), actors[i - 1]
}, Diagram.prototype.setTitle = function (title) {
this.title = title
}, Diagram.prototype.addSignal = function (signal) {
this.signals.push(signal)
}, Diagram.Actor = function (alias, name, index) {
this.alias = alias, this.name = name, this.index = index
}, Diagram.Signal = function (actorA, signaltype, actorB, message) {
this.type = "Signal", this.actorA = actorA, this.actorB = actorB, this.linetype = 3 & signaltype, this.arrowtype = 3 & signaltype >> 2, this.message = message
}, Diagram.Signal.prototype.isSelf = function () {
return this.actorA.index == this.actorB.index
}, Diagram.Note = function (actor, placement, message) {
if (this.type = "Note", this.actor = actor, this.placement = placement, this.message = message, this.hasManyActors() && actor[0] == actor[1]) throw new Error("Note should be over two different actors")
}, Diagram.Note.prototype.hasManyActors = function () {
return _.isArray(this.actor)
}, Diagram.LINETYPE = {SOLID: 0, DOTTED: 1}, Diagram.ARROWTYPE = {FILLED: 0, OPEN: 1}, Diagram.PLACEMENT = {
LEFTOF: 0,
RIGHTOF: 1,
OVER: 2
};
var grammar = function () {
function Parser() {
this.yy = {}
}
var parser = {
trace: function () {
},
yy: {},
symbols_: {
error: 2,
start: 3,
document: 4,
EOF: 5,
line: 6,
statement: 7,
NL: 8,
participant: 9,
actor: 10,
signal: 11,
note_statement: 12,
title: 13,
message: 14,
note: 15,
placement: 16,
over: 17,
actor_pair: 18,
",": 19,
left_of: 20,
right_of: 21,
signaltype: 22,
ACTOR: 23,
linetype: 24,
arrowtype: 25,
LINE: 26,
DOTLINE: 27,
ARROW: 28,
OPENARROW: 29,
MESSAGE: 30,
$accept: 0,
$end: 1
},
terminals_: {
2: "error",
5: "EOF",
8: "NL",
9: "participant",
13: "title",
15: "note",
17: "over",
19: ",",
20: "left_of",
21: "right_of",
23: "ACTOR",
26: "LINE",
27: "DOTLINE",
28: "ARROW",
29: "OPENARROW",
30: "MESSAGE"
},
productions_: [0, [3, 2], [4, 0], [4, 2], [6, 1], [6, 1], [7, 2], [7, 1], [7, 1], [7, 2], [12, 4], [12, 4], [18, 1], [18, 3], [16, 1], [16, 1], [11, 4], [10, 1], [22, 2], [22, 1], [24, 1], [24, 1], [25, 1], [25, 1], [14, 1]],
performAction: function (yytext, yyleng, yylineno, yy, yystate, $$) {
var $0 = $$.length - 1;
switch (yystate) {
case 1:
return yy;
case 4:
break;
case 6:
$$[$0];
break;
case 7:
yy.addSignal($$[$0]);
break;
case 8:
yy.addSignal($$[$0]);
break;
case 9:
yy.setTitle($$[$0]);
break;
case 10:
this.$ = new Diagram.Note($$[$0 - 1], $$[$0 - 2], $$[$0]);
break;
case 11:
this.$ = new Diagram.Note($$[$0 - 1], Diagram.PLACEMENT.OVER, $$[$0]);
break;
case 12:
this.$ = $$[$0];
break;
case 13:
this.$ = [$$[$0 - 2], $$[$0]];
break;
case 14:
this.$ = Diagram.PLACEMENT.LEFTOF;
break;
case 15:
this.$ = Diagram.PLACEMENT.RIGHTOF;
break;
case 16:
this.$ = new Diagram.Signal($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0]);
break;
case 17:
this.$ = yy.getActor($$[$0]);
break;
case 18:
this.$ = $$[$0 - 1] | $$[$0] << 2;
break;
case 19:
this.$ = $$[$0];
break;
case 20:
this.$ = Diagram.LINETYPE.SOLID;
break;
case 21:
this.$ = Diagram.LINETYPE.DOTTED;
break;
case 22:
this.$ = Diagram.ARROWTYPE.FILLED;
break;
case 23:
this.$ = Diagram.ARROWTYPE.OPEN;
break;
case 24:
this.$ = $$[$0].substring(1).trim().replace(/\\n/gm, "\n")
}
},
table: [{3: 1, 4: 2, 5: [2, 2], 8: [2, 2], 9: [2, 2], 13: [2, 2], 15: [2, 2], 23: [2, 2]}, {1: [3]}, {
5: [1, 3],
6: 4,
7: 5,
8: [1, 6],
9: [1, 7],
10: 11,
11: 8,
12: 9,
13: [1, 10],
15: [1, 12],
23: [1, 13]
}, {1: [2, 1]}, {5: [2, 3], 8: [2, 3], 9: [2, 3], 13: [2, 3], 15: [2, 3], 23: [2, 3]}, {
5: [2, 4],
8: [2, 4],
9: [2, 4],
13: [2, 4],
15: [2, 4],
23: [2, 4]
}, {5: [2, 5], 8: [2, 5], 9: [2, 5], 13: [2, 5], 15: [2, 5], 23: [2, 5]}, {10: 14, 23: [1, 13]}, {
5: [2, 7],
8: [2, 7],
9: [2, 7],
13: [2, 7],
15: [2, 7],
23: [2, 7]
}, {5: [2, 8], 8: [2, 8], 9: [2, 8], 13: [2, 8], 15: [2, 8], 23: [2, 8]}, {14: 15, 30: [1, 16]}, {
22: 17,
24: 18,
26: [1, 19],
27: [1, 20]
}, {16: 21, 17: [1, 22], 20: [1, 23], 21: [1, 24]}, {
5: [2, 17],
8: [2, 17],
9: [2, 17],
13: [2, 17],
15: [2, 17],
19: [2, 17],
23: [2, 17],
26: [2, 17],
27: [2, 17],
30: [2, 17]
}, {5: [2, 6], 8: [2, 6], 9: [2, 6], 13: [2, 6], 15: [2, 6], 23: [2, 6]}, {
5: [2, 9],
8: [2, 9],
9: [2, 9],
13: [2, 9],
15: [2, 9],
23: [2, 9]
}, {5: [2, 24], 8: [2, 24], 9: [2, 24], 13: [2, 24], 15: [2, 24], 23: [2, 24]}, {
10: 25,
23: [1, 13]
}, {23: [2, 19], 25: 26, 28: [1, 27], 29: [1, 28]}, {23: [2, 20], 28: [2, 20], 29: [2, 20]}, {
23: [2, 21],
28: [2, 21],
29: [2, 21]
}, {10: 29, 23: [1, 13]}, {10: 31, 18: 30, 23: [1, 13]}, {23: [2, 14]}, {23: [2, 15]}, {
14: 32,
30: [1, 16]
}, {23: [2, 18]}, {23: [2, 22]}, {23: [2, 23]}, {14: 33, 30: [1, 16]}, {14: 34, 30: [1, 16]}, {
19: [1, 35],
30: [2, 12]
}, {5: [2, 16], 8: [2, 16], 9: [2, 16], 13: [2, 16], 15: [2, 16], 23: [2, 16]}, {
5: [2, 10],
8: [2, 10],
9: [2, 10],
13: [2, 10],
15: [2, 10],
23: [2, 10]
}, {5: [2, 11], 8: [2, 11], 9: [2, 11], 13: [2, 11], 15: [2, 11], 23: [2, 11]}, {
10: 36,
23: [1, 13]
}, {30: [2, 13]}],
defaultActions: {3: [2, 1], 23: [2, 14], 24: [2, 15], 26: [2, 18], 27: [2, 22], 28: [2, 23], 36: [2, 13]},
parseError: function (str, hash) {
if (!hash.recoverable) throw new Error(str);
this.trace(str)
},
parse: function (input) {
function lex() {
var token;
return token = self.lexer.lex() || EOF, "number" != typeof token && (token = self.symbols_[token] || token), token
}
var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0,
yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
this.lexer.setInput(input), this.lexer.yy = this.yy, this.yy.lexer = this.lexer, this.yy.parser = this, "undefined" == typeof this.lexer.yylloc && (this.lexer.yylloc = {});
var yyloc = this.lexer.yylloc;
lstack.push(yyloc);
var ranges = this.lexer.options && this.lexer.options.ranges;
this.parseError = "function" == typeof this.yy.parseError ? this.yy.parseError : Object.getPrototypeOf(this).parseError;
for (var symbol, preErrorSymbol, state, action, r, p, len, newState, expected, yyval = {}; ;) {
if (state = stack[stack.length - 1], this.defaultActions[state] ? action = this.defaultActions[state] : ((null === symbol || "undefined" == typeof symbol) && (symbol = lex()), action = table[state] && table[state][symbol]), "undefined" == typeof action || !action.length || !action[0]) {
var errStr = "";
expected = [];
for (p in table[state]) this.terminals_[p] && p > TERROR && expected.push("'" + this.terminals_[p] + "'");
errStr = this.lexer.showPosition ? "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'" : "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"), this.parseError(errStr, {
text: this.lexer.match,
token: this.terminals_[symbol] || symbol,
line: this.lexer.yylineno,
loc: yyloc,
expected: expected
})
}
if (action[0] instanceof Array && action.length > 1) throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
switch (action[0]) {
case 1:
stack.push(symbol), vstack.push(this.lexer.yytext), lstack.push(this.lexer.yylloc), stack.push(action[1]), symbol = null, preErrorSymbol ? (symbol = preErrorSymbol, preErrorSymbol = null) : (yyleng = this.lexer.yyleng, yytext = this.lexer.yytext, yylineno = this.lexer.yylineno, yyloc = this.lexer.yylloc, recovering > 0 && recovering--);
break;
case 2:
if (len = this.productions_[action[1]][1], yyval.$ = vstack[vstack.length - len], yyval._$ = {
first_line: lstack[lstack.length - (len || 1)].first_line,
last_line: lstack[lstack.length - 1].last_line,
first_column: lstack[lstack.length - (len || 1)].first_column,
last_column: lstack[lstack.length - 1].last_column
}, ranges && (yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]), r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack), "undefined" != typeof r) return r;
len && (stack = stack.slice(0, 2 * -1 * len), vstack = vstack.slice(0, -1 * len), lstack = lstack.slice(0, -1 * len)), stack.push(this.productions_[action[1]][0]), vstack.push(yyval.$), lstack.push(yyval._$), newState = table[stack[stack.length - 2]][stack[stack.length - 1]], stack.push(newState);
break;
case 3:
return !0
}
}
return !0
}
}, lexer = function () {
var lexer = {
EOF: 1,
parseError: function (str, hash) {
if (!this.yy.parser) throw new Error(str);
this.yy.parser.parseError(str, hash)
},
setInput: function (input) {
return this._input = input, this._more = this._backtrack = this.done = !1, this.yylineno = this.yyleng = 0, this.yytext = this.matched = this.match = "", this.conditionStack = ["INITIAL"], this.yylloc = {
first_line: 1,
first_column: 0,
last_line: 1,
last_column: 0
}, this.options.ranges && (this.yylloc.range = [0, 0]), this.offset = 0, this
},
input: function () {
var ch = this._input[0];
this.yytext += ch, this.yyleng++, this.offset++, this.match += ch, this.matched += ch;
var lines = ch.match(/(?:\r\n?|\n).*/g);
return lines ? (this.yylineno++, this.yylloc.last_line++) : this.yylloc.last_column++, this.options.ranges && this.yylloc.range[1]++, this._input = this._input.slice(1), ch
},
unput: function (ch) {
var len = ch.length, lines = ch.split(/(?:\r\n?|\n)/g);
this._input = ch + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - len - 1), this.offset -= len;
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
this.match = this.match.substr(0, this.match.length - 1), this.matched = this.matched.substr(0, this.matched.length - 1), lines.length - 1 && (this.yylineno -= lines.length - 1);
var r = this.yylloc.range;
return this.yylloc = {
first_line: this.yylloc.first_line,
last_line: this.yylineno + 1,
first_column: this.yylloc.first_column,
last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
}, this.options.ranges && (this.yylloc.range = [r[0], r[0] + this.yyleng - len]), this.yyleng = this.yytext.length, this
},
more: function () {
return this._more = !0, this
},
reject: function () {
return this.options.backtrack_lexer ? (this._backtrack = !0, this) : this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
text: "",
token: null,
line: this.yylineno
})
},
less: function (n) {
this.unput(this.match.slice(n))
},
pastInput: function () {
var past = this.matched.substr(0, this.matched.length - this.match.length);
return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "")
},
upcomingInput: function () {
var next = this.match;
return next.length < 20 && (next += this._input.substr(0, 20 - next.length)), (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "")
},
showPosition: function () {
var pre = this.pastInput(), c = new Array(pre.length + 1).join("-");
return pre + this.upcomingInput() + "\n" + c + "^"
},
test_match: function (match, indexed_rule) {
var token, lines, backup;
if (this.options.backtrack_lexer && (backup = {
yylineno: this.yylineno,
yylloc: {
first_line: this.yylloc.first_line,
last_line: this.last_line,
first_column: this.yylloc.first_column,
last_column: this.yylloc.last_column
},
yytext: this.yytext,
match: this.match,
matches: this.matches,
matched: this.matched,
yyleng: this.yyleng,
offset: this.offset,
_more: this._more,
_input: this._input,
yy: this.yy,
conditionStack: this.conditionStack.slice(0),
done: this.done
}, this.options.ranges && (backup.yylloc.range = this.yylloc.range.slice(0))), lines = match[0].match(/(?:\r\n?|\n).*/g), lines && (this.yylineno += lines.length), this.yylloc = {
first_line: this.yylloc.last_line,
last_line: this.yylineno + 1,
first_column: this.yylloc.last_column,
last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
}, this.yytext += match[0], this.match += match[0], this.matches = match, this.yyleng = this.yytext.length, this.options.ranges && (this.yylloc.range = [this.offset, this.offset += this.yyleng]), this._more = !1, this._backtrack = !1, this._input = this._input.slice(match[0].length), this.matched += match[0], token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), token) return token;
if (this._backtrack) {
for (var k in backup) this[k] = backup[k];
return !1
}
return !1
},
next: function () {
if (this.done) return this.EOF;
this._input || (this.done = !0);
var token, match, tempMatch, index;
this._more || (this.yytext = "", this.match = "");
for (var rules = this._currentRules(), i = 0; i < rules.length; i++) if (tempMatch = this._input.match(this.rules[rules[i]]), tempMatch && (!match || tempMatch[0].length > match[0].length)) {
if (match = tempMatch, index = i, this.options.backtrack_lexer) {
if (token = this.test_match(tempMatch, rules[i]), token !== !1) return token;
if (this._backtrack) {
match = !1;
continue
}
return !1
}
if (!this.options.flex) break
}
return match ? (token = this.test_match(match, rules[index]), token !== !1 ? token : !1) : "" === this._input ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
text: "",
token: null,
line: this.yylineno
})
},
lex: function () {
var r = this.next();
return r ? r : this.lex()
},
begin: function (condition) {
this.conditionStack.push(condition)
},
popState: function () {
var n = this.conditionStack.length - 1;
return n > 0 ? this.conditionStack.pop() : this.conditionStack[0]
},
_currentRules: function () {
return this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1] ? this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules : this.conditions.INITIAL.rules
},
topState: function (n) {
return n = this.conditionStack.length - 1 - Math.abs(n || 0), n >= 0 ? this.conditionStack[n] : "INITIAL"
},
pushState: function (condition) {
this.begin(condition)
},
stateStackSize: function () {
return this.conditionStack.length
},
options: {"case-insensitive": !0},
performAction: function (yy, yy_, $avoiding_name_collisions, YY_START) {
switch ($avoiding_name_collisions) {
case 0:
return 8;
case 1:
break;
case 2:
break;
case 3:
return 9;
case 4:
return 20;
case 5:
return 21;
case 6:
return 17;
case 7:
return 15;
case 8:
return 13;
case 9:
return 19;
case 10:
return 23;
case 11:
return 27;
case 12:
return 26;
case 13:
return 29;
case 14:
return 28;
case 15:
return 30;
case 16:
return 5;
case 17:
return "INVALID"
}
},
rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:participant\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:title\b)/i, /^(?:,)/i, /^(?:[^\->:\n,]+)/i, /^(?:--)/i, /^(?:-)/i, /^(?:>>)/i, /^(?:>)/i, /^(?:[^#\n]+)/i, /^(?:$)/i, /^(?:.)/i],
conditions: {INITIAL: {rules: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], inclusive: !0}}
};
return lexer
}();
return parser.lexer = lexer, Parser.prototype = parser, parser.Parser = Parser, new Parser
}();
"undefined" != typeof require && "undefined" != typeof exports && (exports.parser = grammar, exports.Parser = grammar.Parser, exports.parse = function () {
return grammar.parse.apply(grammar, arguments)
}, exports.main = function (args) {
args[1] || (console.log("Usage: " + args[0] + " FILE"), process.exit(1));
var source = require("fs").readFileSync(require("path").normalize(args[1]), "utf8");
return exports.parser.parse(source)
}, "undefined" != typeof module && require.main === module && exports.main(process.argv.slice(1))), ParseError.prototype = new Error, Diagram.ParseError = ParseError, grammar.parseError = function (message, hash) {
throw new ParseError(message, hash)
}, Diagram.parse = function (input) {
return grammar.yy = new Diagram, grammar.parse(input)
}, this.Diagram = Diagram
}.call(this), "undefined" != typeof jQuery && function ($) {
$.fn.sequenceDiagram = function (options) {
return this.each(function () {
var $this = $(this), diagram = Diagram.parse($this.text());
$this.html(""), diagram.drawSVG(this, options)
})
}
}(jQuery), Raphael.registerFont({
w: 209,
face: {
"font-family": "daniel",
"font-weight": 700,
"font-stretch": "normal",
"units-per-em": "360",
"panose-1": "2 11 8 0 0 0 0 0 0 0",
ascent: "288",
descent: "-72",
"x-height": "7",
bbox: "-92.0373 -310.134 632 184.967",
"underline-thickness": "3.51562",
"underline-position": "-21.6211",
"unicode-range": "U+0009-U+F002"
},
glyphs: {
" ": {w: 179},
" ": {w: 179},
"!": {
d: "66,-306v9,3,18,11,19,24v-18,73,-20,111,-37,194v0,10,2,34,-12,34v-12,0,-18,-9,-18,-28v0,-85,23,-136,38,-214v1,-7,4,-10,10,-10xm25,-30v15,-1,28,34,5,35v-11,-1,-38,-36,-5,-35",
w: 115
},
'"': {
d: "91,-214v-32,3,-25,-40,-20,-68v3,-16,7,-25,12,-27v35,13,14,56,8,95xm8,-231v4,-31,1,-40,18,-75v37,7,11,51,11,79v-3,3,-4,8,-5,13v-17,4,-16,-10,-24,-17",
w: 117
},
"#": {
d: "271,-64v-30,26,-96,-7,-102,51v-6,2,-13,2,-24,-2v-2,-11,10,-21,2,-28v-14,5,-48,0,-48,22v0,23,-11,14,-29,10v-7,-6,6,-19,-1,-24r-32,4v-19,-8,-15,-24,5,-28r33,-6v4,0,24,-23,11,-27v-26,0,-63,14,-74,-10v3,-1,9,-17,16,-10v15,-8,81,4,89,-30v8,-14,16,-34,24,-38v23,9,24,38,5,49v37,24,55,-38,72,-43v19,10,20,23,-1,45v2,8,23,1,29,4v3,3,6,6,10,11v-14,13,-20,12,-45,12v-17,0,-16,17,-19,29v18,-7,49,3,67,-2v4,0,8,4,12,11xm161,-104v-30,-1,-44,10,-44,37v14,1,24,0,40,-5v0,-1,3,-10,8,-26v0,-4,-1,-6,-4,-6",
w: 285
},
$: {
d: "164,-257v29,4,1,42,-3,50v5,5,38,13,41,24v8,4,6,15,-2,21v-18,3,-36,-17,-49,-17v-17,1,-31,40,-28,48v5,4,8,8,9,10v13,1,35,37,28,44v-10,21,-36,20,-65,28v-10,10,-12,40,-17,51v-9,-3,-28,1,-18,-17v0,-13,5,-24,-1,-35v-18,1,-59,-10,-42,-29v21,0,56,16,55,-16v5,-4,9,-18,9,-26v-14,-15,-55,-41,-53,-65v2,-33,56,-19,98,-26v10,-14,31,-43,38,-45xm93,-152v11,-10,15,-15,14,-29v-17,-3,-37,1,-43,6v10,12,20,19,29,23xm111,-103v-8,1,-11,12,-10,22v10,0,28,2,27,-8v0,-4,-13,-15,-17,-14",
w: 225
},
"%": {
d: "181,-96v24,-7,67,-13,104,1v14,18,21,19,22,44v-13,43,-99,61,-146,36v-9,-9,-22,-11,-32,-29v0,-27,24,-53,52,-52xm139,-185v-9,68,-138,73,-131,-5v0,-3,3,-9,9,-17v13,1,27,1,17,-16v5,-39,63,0,93,-6v36,1,80,-9,102,11v15,32,12,32,-8,56v-16,21,-103,78,-152,125r-14,28v-23,11,-25,-7,-29,-20v34,-71,133,-98,171,-162v-13,-12,-52,-5,-61,1v0,1,1,3,3,5xm38,-190v0,34,55,29,70,8v0,-14,-20,-11,-32,-14v-14,-3,-24,-9,-40,-10v1,0,5,11,2,16xm172,-53v12,27,90,18,102,-5v-18,-7,-32,-10,-40,-10v-29,3,-57,-4,-62,15",
w: 308
},
"&": {
d: "145,-82v17,-8,47,-15,71,-26v13,2,25,12,9,23v-23,7,-40,16,-53,27r0,6v13,8,30,21,36,38v0,8,-4,12,-11,12v-19,0,-43,-39,-59,-44v-30,12,-65,29,-97,32v-32,3,-45,-41,-23,-63v21,-20,52,-26,70,-48v-4,-31,-12,-47,9,-73v13,-16,20,-29,23,-39v15,-15,32,-22,51,-22v30,9,62,64,32,96v-2,3,-47,42,-69,48v-15,8,-11,9,0,22v6,7,10,11,11,11xm114,-138v25,-13,62,-38,74,-62v0,-9,-10,-31,-20,-29v-28,7,-60,42,-60,75v0,10,2,15,6,16xm99,-91v-18,10,-54,18,-59,45v26,5,61,-12,77,-22v-1,-5,-13,-23,-18,-23",
w: 253
},
"'": {d: "36,-182v-36,7,-34,-61,-17,-80v15,1,21,19,21,20r-1,-1v0,0,-1,12,-5,35v1,5,3,17,2,26", w: 63},
"(": {
d: "130,-306v13,2,23,43,-1,43v-49,43,-77,77,-90,148v5,49,27,67,64,101v4,14,5,6,2,19r-15,0v-35,-17,-79,-58,-79,-120v0,-58,66,-176,119,-191",
w: 120
},
")": {
d: "108,-138v-2,73,-48,120,-98,153v-17,-5,-16,-20,-6,-31v52,-64,73,-62,74,-135v1,-42,-40,-98,-58,-128v0,-5,-1,-12,-2,-22v18,-18,25,0,42,27v25,39,50,66,48,136",
w: 120
},
"*": {
d: "121,-271v15,-5,36,-8,40,9v-5,10,-31,19,-47,31v0,11,34,43,14,53v-18,8,-24,-24,-34,-20v-4,10,-4,19,-12,41v-25,7,-15,-30,-17,-47v-13,-1,-17,9,-46,30r-10,0v-20,-32,37,-43,54,-64v-10,-11,-36,-33,-16,-51v3,0,14,8,33,24v8,-10,26,-39,32,-42v14,7,15,23,9,36",
w: 177
},
"+": {
d: "163,-64v-7,22,-65,2,-77,21v-2,10,-6,21,-11,35v-20,4,-21,-12,-19,-29v3,-23,-44,6,-39,-27v-8,-22,36,-8,49,-18v8,-13,6,-36,24,-40v19,-4,14,32,11,39v18,3,19,2,54,8v2,1,5,5,8,11",
w: 170
},
",": {d: "25,63v-26,21,-48,-2,-22,-24v14,-12,35,-40,35,-69v3,-2,3,-11,12,-9v35,17,5,88,-25,102", w: 97},
"-": {d: "57,-94v19,4,55,-5,54,17v-15,23,-54,20,-91,15v-4,2,-13,-10,-11,-16v-1,-22,28,-15,48,-16", w: 124},
".": {d: "40,-48v21,20,21,44,-4,44v-33,0,-26,-24,-10,-44r14,0", w: 67},
"/": {
d: "21,20v-22,-45,21,-95,41,-126v38,-57,115,-158,193,-201v2,0,4,3,7,11v11,29,-15,34,-25,55v-81,56,-189,208,-197,261r-19,0",
w: 275
},
0: {
d: "78,-237v70,-47,269,-41,270,59v0,34,-11,53,-29,76v-13,35,-30,32,-85,64v-6,2,-10,6,-7,8v-73,14,-98,38,-173,1v-7,-13,-52,-48,-46,-88v9,-57,27,-75,70,-120xm123,-38v100,0,202,-46,195,-153v-32,-55,-144,-73,-211,-35v-16,34,-68,54,-53,108v6,25,1,22,-3,39v6,24,41,41,72,41",
w: 353
},
1: {d: "39,-208v0,-14,6,-59,29,-39v3,4,6,13,10,24r-22,128r8,87v-4,6,-9,3,-16,2v-44,-38,-9,-137,-9,-202", w: 93},
2: {
d: "88,-35v47,-10,119,-24,168,-9v0,12,-23,13,-35,16v1,1,3,1,5,1v-74,8,-118,23,-194,23v-14,0,-20,-13,-21,-28v55,-40,83,-61,123,-104v26,-13,65,-67,71,-102v-1,-9,-11,-16,-22,-16v-20,-1,-120,29,-156,49v-10,-2,-30,-20,-10,-28v50,-21,111,-51,178,-48v25,10,44,22,36,39v12,30,-19,64,-34,83v-39,48,-37,39,-115,109v0,5,-3,8,-8,11v4,3,8,4,14,4",
w: 265
},
3: {
d: "188,-282v34,-10,74,25,47,51v-19,32,-55,50,-92,70v28,14,116,25,108,70v8,14,-49,40,-63,48v-29,9,-130,22,-168,42v-6,-5,-19,-7,-12,-22v56,-36,175,-21,210,-76v-9,-20,-88,-42,-97,-33v-20,-1,-41,2,-56,-7r5,-21v56,-25,103,-36,137,-78v1,-1,2,-5,4,-11v-15,-14,-56,7,-79,0v-10,9,-73,22,-92,31v-11,-4,-28,-23,-13,-30v50,-22,96,-26,154,-37v0,-1,8,3,7,3",
w: 260
},
4: {
d: "79,-249v-7,17,-29,75,-33,96v0,6,3,8,8,8v43,-2,111,6,141,-6v17,-47,20,-100,63,-148v9,4,16,7,21,10v-17,31,-44,95,-51,141v7,4,24,-4,23,10v-1,16,-29,12,-31,23v-10,22,-9,69,-7,103v-3,2,-7,5,-10,9v-47,-11,-23,-74,-16,-114v0,-4,-2,-6,-7,-6v-65,2,-89,13,-162,4v-22,-22,-2,-53,5,-76v16,-15,17,-57,35,-70v6,-1,21,11,21,16",
w: 267
},
5: {
d: "185,-272v30,7,45,-8,53,18v1,16,-17,18,-34,14v0,0,-95,-11,-129,1v-6,9,-24,33,-29,54v76,10,171,5,214,47v11,11,22,30,5,52v-14,12,-30,14,-34,27v-26,11,-141,63,-157,60v-16,-2,-25,-19,-4,-27v48,-18,128,-39,170,-86v4,-14,-65,-41,-85,-41r-92,0v-10,-4,-66,-1,-57,-23v0,-23,23,-51,35,-83v11,-28,133,-10,144,-13",
w: 284
},
6: {
d: "70,-64v9,-51,63,-74,123,-71v43,2,109,3,111,41r-25,47v0,1,1,2,2,3v-5,0,-39,10,-41,20v-15,3,-22,4,-22,11v-39,1,-77,20,-119,13v-42,-7,-35,-9,-77,-46v-56,-118,94,-201,176,-229v7,0,21,8,20,15v-2,17,-23,15,-43,24v-69,31,-119,72,-134,145v-5,25,36,68,78,64v59,-6,128,-18,153,-61v-7,-14,-13,-9,-32,-21v-67,-15,-118,-5,-150,43r0,12v-13,4,-17,-3,-20,-10",
w: 310
},
7: {
d: "37,-228v33,-14,173,-17,181,-19v28,-1,24,31,9,45v-17,15,-45,49,-59,69v-17,26,-55,67,-61,113v-10,13,-9,14,-14,20v-33,-13,-20,-25,-11,-53v16,-48,73,-115,109,-156v2,-7,5,-14,-10,-12v-26,4,-54,6,-76,13v-23,-5,-83,31,-94,-9v2,-8,18,-19,26,-11",
w: 245
},
8: {
d: "57,-236v40,-50,166,-51,213,-10v22,28,10,63,-22,78r-35,17v8,5,54,24,53,44v-5,14,-4,33,-18,42v-13,13,-35,18,-44,34v-60,27,-190,49,-194,-42v7,-41,17,-54,59,-70r0,-4v-32,-9,-73,-62,-26,-85v4,0,8,-2,14,-4xm142,-160v24,-2,160,-31,99,-72v-28,-18,-108,-33,-146,-5v-16,12,-28,30,-33,59v24,12,37,20,80,18xm41,-62v30,65,189,6,199,-37v3,-14,-60,-30,-74,-30v-70,0,-118,10,-125,67",
w: 290
},
9: {
d: "11,-192v15,-49,119,-61,161,-23v16,15,27,55,11,79v-20,62,-51,79,-96,118v-10,4,-45,27,-50,6v9,-15,66,-52,98,-99v-7,-7,-8,-3,-25,0v-49,-11,-96,-25,-99,-81xm145,-131v7,-5,13,-34,13,-41v-2,-51,-104,-38,-114,-6v-2,10,37,35,46,35v23,1,43,-1,55,12",
w: 198
},
":": {
d: "39,-125v15,-8,40,-1,40,15v0,15,-6,22,-19,22v-13,0,-29,-21,-21,-37xm66,-17v-8,27,-51,19,-46,-8v-1,-6,8,-22,14,-20v29,0,30,6,32,28",
w: 95
},
";": {
d: "56,-93v2,-30,37,-22,40,2v0,2,-1,7,-3,15v-13,8,-15,6,-27,4xm64,-44v11,-11,30,-4,32,14v-21,39,-63,71,-92,85v-5,0,-11,-2,-18,-8v11,-23,36,-36,50,-61v11,-7,19,-20,28,-30",
w: 107
},
"<": {
d: "166,-202v12,0,29,15,24,29v0,4,-119,64,-120,73v15,21,89,64,91,86v2,29,-18,12,-30,15v-27,-29,-59,-54,-95,-75v-18,-10,-25,-13,-24,-41",
w: 176
},
"=": {
d: "125,-121v18,7,55,-9,69,14v0,17,-45,26,-135,26v-18,0,-27,-7,-27,-21v-1,-37,60,-5,93,-19xm138,-71v20,0,48,-1,50,16v-13,24,-86,32,-131,29v-29,-2,-43,-10,-43,-24v-7,-23,36,-14,39,-17v27,6,57,-4,85,-4",
w: 196
},
">": {
d: "4,-14v20,-48,77,-59,118,-94v-16,-19,-58,-52,-81,-75v-11,-7,-15,-38,-1,-40v33,16,83,71,121,105v26,23,-6,35,-41,53v-29,16,-56,28,-73,54v-21,15,-16,20,-34,15v-3,0,-9,-16,-9,-18",
w: 174
},
"?": {
d: "105,-291v57,-13,107,-4,107,39v0,67,-136,85,-155,137v-1,6,10,23,-4,23v-23,1,-33,-35,-23,-57v31,-41,124,-60,149,-103v-8,-21,-72,-5,-88,-1v-23,6,-59,39,-71,8v0,0,-1,0,1,-17v10,-4,45,-20,84,-29xm80,-25v-6,4,-8,39,-24,22v-24,3,-22,-21,-13,-35v17,-7,29,5,37,13",
w: 216
},
"@": {
d: "218,-207v23,8,42,14,47,37v44,68,-27,137,-87,85r1,0v0,2,-59,19,-61,17v-35,0,-42,-47,-17,-68r0,-4v-19,-1,-45,37,-49,40v-37,76,58,72,121,62v11,-2,34,-13,36,3v-14,31,-69,31,-114,33v-51,2,-99,-41,-80,-92v2,-30,22,-40,42,-63v35,-20,91,-53,161,-50xm217,-101v23,0,35,-19,35,-41v0,-43,-75,-41,-102,-19v36,3,55,16,62,41v-6,5,-6,19,5,19xm127,-110v8,5,51,-15,28,-16v-4,0,-25,4,-28,16",
w: 291
},
A: {
d: "97,-81v-23,-10,-39,38,-52,60v-8,6,-8,6,-22,18v-22,-7,-23,-37,-4,-49v7,-8,11,-15,15,-23r-1,1v-14,-26,23,-29,31,-40v1,-1,15,-29,26,-36v17,-31,39,-58,54,-92v16,-20,20,-51,41,-66v29,5,34,62,45,92v9,64,21,103,49,155v-3,25,-44,11,-54,0v-34,-12,-97,-29,-128,-20xm107,-118v20,6,80,10,111,17v6,-7,-4,-15,-7,-24v-11,-28,-9,-92,-30,-117v-9,9,-19,44,-34,55v-9,23,-27,40,-40,69",
w: 294
},
B: {
d: "256,-179v41,10,115,34,91,91v-6,3,-14,12,-19,20v-37,19,-50,34,-63,25v-9,10,-12,11,-34,13r3,-3v-4,-4,-12,-4,-18,0v0,0,2,2,5,4v-21,14,-26,6,-44,15v-4,0,-7,-2,-8,-5v-6,11,-20,-5,-18,11v-36,4,-91,35,-114,4v-7,-62,-10,-138,4,-199v-1,-19,-37,2,-37,-27v0,-8,2,-13,6,-15v68,-31,231,-92,311,-39v8,12,12,20,12,25v-8,42,-32,49,-77,80xm79,-160v72,-17,135,-39,184,-70v20,-13,31,-23,31,-27v1,-6,-30,-13,-38,-12v-54,0,-116,13,-186,41v11,21,1,48,9,68xm262,-43v0,-4,3,-6,-4,-5v0,1,1,2,4,5xm211,-140v-34,7,-94,24,-139,15v-6,20,-4,56,-4,82v0,29,43,1,56,2v48,-11,108,-25,154,-48v20,-10,32,-17,32,-25v0,-18,-33,-26,-99,-26xm195,-20v6,1,6,-2,5,-7v-3,2,-7,2,-5,7",
w: 364
},
C: {
d: "51,-114v-12,75,96,76,166,71r145,-10v9,2,9,5,9,18v-37,18,-85,28,-109,22v-18,10,-47,10,-71,10v-29,0,-68,1,-105,-11v-6,-1,-10,-3,-10,-8v-33,-13,-48,-33,-66,-59v-19,-114,146,-150,224,-177v35,0,88,-31,99,7v-1,29,-49,14,-76,28v-55,8,-115,35,-175,71v-13,8,-23,21,-31,38",
w: 376
},
D: {
d: "312,-78v-2,1,-3,7,-10,5v6,-3,10,-4,10,-5xm4,-252v2,-27,83,-38,106,-39v130,-7,267,1,291,109v0,0,-2,8,-3,25v-5,9,-4,28,-23,34v-4,4,-2,5,-7,0v-3,3,-15,7,-5,10v0,0,-10,14,-13,2v-11,1,-8,5,-20,14v1,2,7,3,9,1v-4,13,-22,13,-11,4v0,-3,1,-6,-3,-5v-40,29,-103,38,-141,65v10,6,22,-7,34,-3v-41,20,-127,44,-171,46v-21,1,-47,-33,-11,-39v15,-2,43,-6,56,-11v-16,-101,-5,-130,9,-207v2,0,4,-1,6,-3v-16,-17,-91,38,-103,-3xm297,-69v-7,3,-17,8,-25,7v1,1,3,2,5,2v-4,2,-11,5,-23,9v4,-11,30,-21,43,-18xm240,-51v10,0,12,2,0,6r0,-6xm220,-36v-1,-3,4,-6,6,-3v0,1,-2,1,-6,3xm125,-48v16,6,137,-46,155,-53v29,-18,101,-44,82,-93v-21,-53,-84,-61,-168,-67v-20,7,-50,3,-77,8v33,54,-12,132,8,205xm159,-22v-4,-1,-15,-5,-15,2v7,-1,12,-2,15,-2",
w: 381
},
E: {
d: "45,-219v-19,-36,34,-41,63,-36v44,-10,133,-8,194,-15v3,2,38,11,52,15v-73,19,-171,21,-246,38v-9,11,-16,32,-20,61v35,11,133,-6,183,3v1,6,2,7,3,14v-46,24,-118,16,-193,27v-15,13,-22,52,-22,66v60,1,121,-20,188,-20v22,10,53,-7,74,5v16,29,-23,26,-43,32v-73,4,-139,13,-216,27r-52,-10v-4,-22,23,-69,26,-98v-3,0,-10,-15,-12,-24v20,-12,34,-23,35,-67v2,-1,5,-5,5,-7v0,-4,-14,-11,-19,-11",
w: 353
},
F: {
d: "270,-258v13,2,59,6,48,34v-78,-3,-143,1,-212,22v-10,16,-21,43,-24,69r145,-9v8,3,29,-3,16,21v-14,-1,-59,13,-60,7v-12,13,-67,18,-108,21v-2,1,-4,3,-7,6v-2,23,-8,43,-7,69v1,28,-30,11,-40,5r10,-80r-26,-14v5,-10,10,-33,28,-25v21,-3,15,-46,26,-59v-1,-3,-32,-13,-28,-24v2,-22,45,-16,59,-30v47,4,99,-14,151,-9v5,-3,25,-3,29,-4",
w: 236
},
G: {
d: "311,-168v53,0,94,57,74,110v-31,37,-71,34,-136,52v-13,-7,-41,10,-57,7v-73,-1,-122,-17,-162,-59v-49,-51,-24,-80,5,-130v35,-61,138,-93,214,-106v16,4,42,-1,40,21v-5,40,-39,2,-73,21v-76,19,-162,65,-177,142v28,103,237,76,312,29v2,-3,3,-7,3,-13v-10,-35,-37,-43,-87,-45v-16,-13,-53,-9,-78,1v-4,-3,-5,-7,-5,-11v17,-29,73,-17,108,-24v12,4,18,5,19,5",
w: 391
},
H: {
d: "300,-268v18,12,19,32,4,51v-35,44,-34,140,-46,217v-1,5,-5,13,-11,12v-6,1,-19,-14,-18,-27r7,-106v-28,7,-76,22,-116,14v-18,2,-36,6,-55,3v-43,-8,-14,53,-33,75v-29,1,-26,-67,-21,-97v5,-31,28,-73,43,-98v2,2,7,3,14,3v13,33,-11,48,-13,78v61,4,118,2,176,2v8,0,13,-6,15,-20v4,-47,21,-87,54,-107",
w: 288
},
I: {
d: "63,-266v34,10,-4,105,-8,128r-24,126v-2,2,-3,1,-9,6v-12,-10,-12,-15,-12,-47v0,-93,9,-156,28,-188v10,-17,19,-25,25,-25",
w: 79
},
J: {
d: "235,-291v26,11,31,104,31,142v0,37,-2,95,-32,126v-33,34,-121,26,-167,1v-18,-11,-54,-29,-59,-59v0,-3,5,-15,16,-14v31,36,90,57,162,51v63,-30,56,-148,32,-226v-1,-16,11,-13,17,-21",
w: 282
},
K: {
d: "212,-219v17,-5,80,-60,80,-19v0,9,-2,14,-5,16r-132,78v-34,23,-54,32,-21,50v39,21,74,23,124,41v5,2,7,5,7,9v-4,24,-55,15,-79,8v-67,-19,-98,-36,-116,-83v9,-24,38,-35,66,-61v7,-4,49,-30,76,-39xm47,-194v11,-20,11,-45,31,-55v2,2,4,3,6,0v29,39,-21,96,-18,128v-17,24,-15,62,-29,113v-4,3,-10,7,-19,11v-12,-13,-10,-28,-8,-53v3,-31,17,-79,37,-144",
w: 270
},
L: {
d: "84,-43v58,0,179,-27,242,-4v3,17,-29,24,-40,26v-85,-4,-202,46,-268,3v-24,-16,-2,-33,-4,-57v26,-76,38,-108,86,-191v14,-7,26,-50,45,-32v6,22,5,31,-12,46v-20,39,-50,82,-67,142v-7,6,-19,46,-19,54v0,9,12,13,37,13",
w: 331
},
M: {
d: "174,-236v-1,52,-11,92,-7,143v10,5,15,-12,22,-18v42,-55,90,-130,136,-174r15,-18v42,2,32,53,11,80v-12,58,-54,143,-34,210v0,3,-3,12,-9,10v-31,-5,-32,-57,-27,-92v4,-27,12,-58,25,-93v-5,-10,5,-19,6,-30v-46,44,-66,110,-129,172v-11,10,-18,15,-22,15v-34,6,-28,-103,-28,-152v-28,22,-65,119,-96,170v-9,15,-34,3,-31,-19v30,-64,91,-177,139,-229v12,-1,29,13,29,25",
w: 343
},
N: {
d: "248,-20v-3,17,-37,18,-43,3v-24,-35,-53,-145,-80,-203v-32,40,-55,120,-92,174v-13,3,-26,-13,-27,-22r87,-171v4,-13,20,-57,42,-32v42,48,46,139,82,198v29,-45,46,-88,65,-153v12,-19,23,-42,38,-60v27,-1,14,18,4,44v-6,46,-32,68,-37,121v-15,29,-33,69,-39,101",
w: 307
},
O: {
d: "240,-268v85,1,163,29,150,125v13,7,-12,18,-5,26v-23,63,-133,112,-228,124v-80,-16,-171,-56,-148,-153v11,-47,20,-43,53,-83v17,-9,39,-22,73,-29v45,-10,81,-10,105,-10xm363,-156v16,-51,-62,-85,-111,-79v-25,-11,-50,8,-81,0v-15,10,-70,16,-85,31v6,20,-27,24,-39,45v-42,75,40,128,115,128v56,0,209,-71,201,-125",
w: 383
},
P: {
d: "70,-225v-7,-12,-36,16,-49,19v-4,0,-9,-5,-14,-17v21,-47,114,-55,172,-59v41,-3,132,33,99,87v-21,34,-72,59,-144,80v-2,16,-79,3,-74,46v3,25,-5,47,-10,68v-22,-1,-23,-29,-22,-56v2,-25,-20,-32,-8,-50v21,-5,10,-35,25,-57v6,-28,14,-48,25,-61xm71,-229v47,14,-2,50,-1,99v41,-3,113,-37,173,-76v5,-9,8,-14,8,-15v-28,-47,-125,-29,-180,-8",
w: 252
},
Q: {
d: "374,-217v20,59,-11,127,-48,156r30,38v-1,6,-8,16,-14,9v-3,0,-19,-9,-47,-26v-72,35,-173,75,-236,12v-70,-40,-67,-213,26,-217r8,5v24,-20,72,-48,112,-38v21,-4,22,-1,50,-2v66,-2,94,20,119,63xm296,-88v13,5,61,-49,63,-84v4,-62,-54,-78,-119,-76v-14,-6,-49,5,-71,3v-42,16,-89,41,-93,94v-9,11,1,25,-7,38v-12,-19,-7,-67,-1,-88v-56,30,-37,137,19,155v27,17,92,19,119,0v12,-2,29,-9,52,-20v2,-2,3,-3,3,-6v-11,-12,-46,-27,-54,-56v0,-13,3,-19,9,-19v18,1,60,52,80,59",
w: 379
},
R: {
d: "100,-275v96,-23,196,-10,208,78v-3,18,-17,52,-49,62v-14,20,-54,23,-79,40v-2,0,-14,2,-36,6v-40,8,-30,14,-3,33v37,27,52,30,118,55v16,6,31,23,12,27v-58,-2,-104,-29,-143,-61v-14,-3,-16,-15,-39,-27v-23,-19,-28,-12,-15,-38v63,-19,111,-15,163,-53v27,-20,43,-36,43,-49v0,-64,-120,-62,-173,-38v-9,4,-38,9,-40,18v-10,32,-16,70,-13,116v-10,21,-8,47,-6,75v2,31,-9,29,-27,22v-9,-55,5,-140,15,-190v-8,-6,-24,10,-24,-11v0,-34,16,-34,42,-55v2,-1,17,-4,46,-10",
w: 297
},
S: {
d: "13,-3v-7,-3,-22,-18,-5,-22v68,-15,119,-32,154,-45v51,-19,39,-34,3,-53v-46,-25,-82,-30,-121,-64v-33,-29,-50,-35,-25,-58v37,-20,119,-29,181,-29v29,0,44,6,44,18v-9,26,-62,6,-104,14v-17,2,-72,6,-92,16v37,53,132,58,180,111v8,9,11,20,11,30v-4,17,-23,35,-42,34v-21,16,-17,1,-49,17v-14,7,-41,9,-56,20v-25,-3,-49,10,-79,11",
w: 234
},
T: {
d: "141,-3v-36,-6,1,-49,-3,-79v10,-19,6,-35,15,-64r26,-85v-51,-9,-100,10,-141,14v-16,2,-30,-26,-11,-32v26,-8,143,-8,179,-19r12,6v67,-2,142,-1,200,-1v8,0,14,3,19,10v-18,16,-74,3,-103,14v-48,-4,-60,4,-113,7v-42,22,-36,130,-58,187v1,12,-9,44,-22,42",
w: 277
},
U: {
d: "365,-262v13,56,-22,104,-36,141v-19,22,-30,38,-57,56v-4,18,-60,35,-78,50v-53,28,-142,0,-161,-34v-31,-56,-37,-108,-11,-164v17,-33,29,-50,48,-29v-2,2,-3,7,-4,13v-44,36,-38,149,7,174v30,26,55,19,102,4v56,-17,66,-34,120,-76v12,-24,56,-68,46,-122r0,-16v0,1,-1,3,-1,6v4,-13,11,-10,25,-3",
w: 368
},
V: {
d: "246,-258v21,-22,31,-26,44,-8v1,1,-12,22,-28,35v-15,25,-41,38,-56,69v-13,15,-20,31,-28,57v-15,13,-11,29,-27,72v3,21,-5,24,-27,27v-33,-45,-54,-118,-84,-167v-5,-26,-18,-50,-25,-76v-3,-12,24,-8,29,-5v8,13,18,52,26,70r52,115v9,-2,4,-9,10,-21r25,-47v25,-44,46,-76,89,-121",
w: 234
},
W: {
d: "31,-213v16,46,17,106,41,151v31,-35,49,-89,76,-127v30,-15,39,27,52,56v10,22,21,48,35,67v2,0,4,-1,5,-3v16,-28,50,-76,79,-121v14,-21,40,-63,64,-83r5,8v-30,58,-76,110,-97,173v-18,28,-25,37,-33,63v-11,1,-16,25,-30,15v-21,-31,-44,-89,-62,-131v0,-2,-1,-3,-5,-5v-17,11,-16,36,-31,50v-20,33,-20,84,-68,94v-24,-19,-23,-81,-39,-111v-1,-15,-29,-94,-10,-108v9,2,12,5,18,12",
w: 331
},
X: {
d: "143,-183v43,-25,69,-36,126,-62v22,-10,86,-10,56,21v-51,3,-158,61,-154,64v10,15,41,30,50,52v27,17,46,60,70,82v9,14,-6,30,-24,20v-35,-43,-75,-100,-116,-132v-48,13,-100,47,-118,94v-1,49,-26,34,-27,4v-1,-26,13,-27,17,-48v22,-27,68,-55,90,-77v-9,-12,-60,-39,-79,-57v-6,-10,-6,-25,12,-25",
w: 312
},
Y: {
d: "216,-240v19,-14,42,10,22,26v-54,66,-121,109,-156,197v-8,21,-11,15,-30,4v3,-37,27,-61,33,-76v12,-12,15,-19,32,-42v-8,-6,-40,5,-45,5v-48,-6,-69,-65,-56,-113v14,0,13,-1,24,7v2,33,12,75,42,73v36,-2,102,-57,134,-81",
w: 189
},
Z: {
d: "60,-255v66,12,200,-34,240,21v-13,42,-63,62,-98,89v-19,15,-47,33,-82,55v-25,16,-47,32,-66,47v58,24,129,-6,208,-6v23,0,36,12,13,19v-33,2,-53,5,-86,10v-32,18,-88,15,-135,15v-9,-1,-55,-1,-48,-29v1,-24,30,-24,40,-41v64,-50,151,-86,208,-147v-38,-17,-155,12,-198,-4v0,0,-11,-33,4,-29",
w: 310
},
"[": {
d: "72,-258r-15,250v30,4,55,-3,80,-6v7,-1,8,17,9,23v-28,15,-73,23,-121,21v-7,0,-10,-6,-10,-17v0,-60,25,-193,22,-288v0,-16,13,-20,33,-19v9,-3,34,-12,51,-12v16,0,15,16,19,29v-16,7,-48,10,-68,19",
w: 151
},
"\\": {
d: "21,38v-20,-21,9,-72,13,-90v44,-78,113,-189,200,-253v2,0,5,4,7,12v11,31,-13,36,-24,58v-74,61,-174,219,-180,273r-16,0",
w: 257
},
"]": {
d: "133,-258v-23,-13,-84,6,-85,-32v0,-10,5,-15,14,-15v0,0,30,2,90,7v10,1,15,13,15,36v2,7,-8,59,-13,112r-11,125v-9,48,9,90,-59,71v-20,-4,-39,-1,-59,-4v-5,-10,-25,-12,-14,-30v8,-3,61,-13,78,-8v14,1,8,-7,10,-17v15,-69,21,-166,34,-245",
w: 171
},
"^": {
d: "68,-306v20,15,47,36,58,60v-1,4,0,7,-9,7v-26,0,-47,-38,-49,-32v-15,9,-41,50,-54,30v-2,-31,17,-23,33,-51v8,-9,15,-14,21,-14",
w: 135
},
_: {
d: "11,15v-8,33,18,45,50,34r205,2r197,-5v11,-5,14,-9,7,-28v-95,-21,-258,-10,-376,-10v-25,0,-72,-3,-83,7",
w: 485
},
"`": {d: "75,-264v16,8,56,14,39,43v-30,-8,-65,-23,-105,-44v-1,-3,-3,-28,5,-25v16,5,44,17,61,26", w: 129},
a: {
d: "124,-56v10,4,59,41,65,50v1,7,-6,17,-12,17r-60,-30v-22,2,-42,21,-65,19v-33,4,-68,-67,-15,-81v41,-27,96,-39,110,9v0,6,-4,12,-11,16v-33,-25,-67,-5,-88,12v10,16,61,-18,76,-12",
w: 196
},
b: {
d: "80,-140v69,1,123,0,134,52v5,26,-71,71,-97,70v-11,11,-88,22,-94,22v-11,-3,-26,-18,-6,-24v19,-5,-2,-19,-1,-35v1,-18,11,-36,-5,-47v-6,-17,-6,-21,14,-32v6,-45,18,-89,28,-124v2,-7,8,-12,17,-15v5,3,10,11,16,28v-12,27,-13,63,-23,96v0,6,6,9,17,9xm87,-107v-40,-9,-31,31,-39,54v8,15,0,25,12,22v30,-8,60,-18,88,-32v39,-18,49,-33,-1,-42v-20,-4,-45,-7,-60,-2",
w: 217
},
c: {
d: "128,-123v29,-7,37,29,12,33v-27,-4,-40,6,-79,25v-8,4,-13,11,-16,22v30,32,91,3,134,11v5,13,-8,26,-22,19v-51,25,-139,28,-150,-30v6,-50,69,-82,121,-80",
w: 194
},
d: {
d: "224,-201v0,-35,-17,-111,24,-94v7,86,-2,119,0,197v-4,2,-8,21,-18,16v-62,-7,-154,-8,-185,29v6,17,28,26,51,26v16,0,100,-15,132,-18v7,5,-6,20,-10,22v-24,8,-122,42,-163,25v-32,-5,-62,-53,-36,-80v35,-37,118,-46,198,-43v1,-22,7,-49,7,-80",
w: 265
},
e: {
d: "4,-57v0,-58,51,-71,110,-74v33,-1,45,16,59,35v1,14,2,39,-7,42v-24,-2,-73,13,-99,11v-2,2,-2,3,-2,3v0,3,12,8,37,15v21,0,69,9,31,22v-9,14,-34,6,-56,6v-27,-5,-73,-28,-73,-60xm123,-102v-22,2,-68,5,-65,26v24,-2,66,5,79,-6v-5,-13,-1,-13,-14,-20",
w: 182
},
f: {
d: "6,-59v6,-29,53,-4,53,-43v0,-64,29,-118,84,-150v45,-25,167,-24,155,51v-1,2,-7,6,0,6r-10,2v-45,-58,-165,-39,-186,39v-7,26,-11,42,-9,62v44,8,95,-21,135,-7v-12,25,-39,21,-76,30v-19,5,-18,7,-54,19v-2,8,15,32,17,35v-6,25,-26,26,-40,-5r-15,-24v-41,10,-44,12,-54,-15",
w: 234
},
g: {
d: "132,-97v30,27,21,75,30,117v-12,31,-11,66,-36,103v-32,46,-105,83,-167,39v-31,-21,-49,-29,-51,-75v-2,-37,77,-50,121,-57v37,-6,68,-10,95,-11v7,-6,3,-32,4,-46v0,0,-1,1,-1,2v0,-18,-5,-31,-14,-45v-44,5,-79,20,-94,-18v3,-54,73,-54,125,-50v12,7,12,13,4,25v-30,-11,-76,8,-90,20v23,3,50,-16,74,-4xm-34,121v60,53,168,1,159,-86v-47,-7,-93,24,-142,30v-12,7,-45,19,-42,29v0,10,8,19,25,27",
w: 188
},
h: {
d: "100,-310v11,-2,10,19,11,20v-11,52,-40,133,-53,189v-6,30,-9,37,-9,47v27,0,113,-34,143,-34v42,0,31,47,39,79v0,4,-5,17,-16,16v4,2,11,3,4,6v-24,-1,-28,-34,-25,-64v-1,-1,-2,-3,-5,-5v-51,0,-110,38,-162,51v-9,1,-15,-15,-16,-23v17,-89,39,-141,71,-264v0,-9,6,-19,18,-18",
w: 251
},
i: {
d: "62,-209v7,18,9,23,-5,38v-23,-6,-21,-18,-11,-36v2,0,8,-1,16,-2xm34,-7v-18,-21,-8,-73,-1,-106v7,-10,20,-8,23,6v-1,36,7,72,-2,104v-8,2,-8,0,-20,-4",
w: 80
},
j: {
d: "88,-191v5,28,-18,40,-28,21v0,-20,12,-29,28,-21xm82,-99v28,-1,16,35,16,61v0,60,-19,150,-35,202v-12,8,-19,31,-35,16v-32,-7,-43,-19,-56,-44r2,-17v11,4,49,45,61,18v10,-55,27,-107,30,-171v0,-16,0,-59,17,-65",
w: 120
},
k: {
d: "59,-66v33,26,114,37,155,62v8,-4,22,-2,19,-17v0,-4,-12,-11,-30,-24v-36,-25,-54,-22,-99,-33v14,-21,119,-13,103,-63r-16,-7r-123,47r25,-93v-3,-15,16,-49,18,-81v1,-15,-21,-14,-25,-3v-31,82,-49,168,-75,257v2,2,22,30,27,10v2,-5,4,-9,9,-11v4,-16,4,-15,12,-44",
w: 236
},
l: {
d: "66,-300v21,-6,37,23,30,55v-10,51,-28,135,-28,208v0,11,6,36,-13,37v-29,-5,-30,-48,-25,-83r28,-177v-6,-17,1,-29,8,-40",
w: 102
},
m: {
d: "348,-59v-2,21,0,57,3,73v-17,3,-30,-1,-32,-16v-8,-7,-5,-44,-13,-70v-35,3,-82,49,-111,70v-12,8,-40,4,-39,-15r2,-56v-1,-13,4,-28,-8,-29v-35,8,-79,72,-115,87v-6,2,-20,-18,-21,-22v1,-20,14,-105,39,-64r8,15v17,-14,72,-56,93,-54v27,3,49,40,43,80v24,-2,66,-55,124,-53v11,14,28,23,27,54",
w: 368
},
n: {
d: "121,-136v37,6,62,54,62,111v0,32,-16,25,-31,17v-18,-30,-5,-45,-22,-85v-37,-13,-71,55,-92,65v-20,-3,-39,-39,-21,-62v2,-12,3,-15,11,-30v12,-8,20,11,29,12",
w: 194
},
o: {
d: "108,-139v52,-24,104,18,104,63v0,59,-66,67,-114,83v-52,-2,-115,-50,-80,-105v23,-18,52,-35,90,-41xm45,-60v16,54,125,16,131,-23v-12,-59,-129,-8,-131,23",
w: 217
},
p: {
d: "82,14v-10,12,-8,117,-24,142v-15,2,-19,0,-29,-13v0,-76,9,-113,22,-192v14,-27,35,-6,37,13v0,8,-3,21,-7,38v2,2,3,2,4,2v26,-9,116,-33,126,-72v-7,-17,-24,-33,-49,-31v-40,3,-116,13,-116,47v-5,7,-2,17,-16,20v-17,-12,-18,-20,-12,-38v8,-25,74,-61,110,-59v55,-15,113,15,118,70v-15,52,-84,79,-146,83v-5,0,-11,-4,-18,-10",
w: 251
},
q: {
d: "144,-147v27,-8,89,-3,97,31v-9,29,-42,-4,-73,1v-32,6,-118,20,-111,49v0,7,13,13,21,13v21,0,78,-24,104,-34v2,0,9,8,22,21v1,1,1,2,1,5v-27,90,-22,70,-43,203v11,15,-15,54,-33,33v-6,-8,-10,-20,-3,-28v1,-72,5,-114,15,-172v-35,3,-35,10,-59,8v-41,-4,-98,-41,-56,-85v33,-34,59,-27,118,-45",
w: 248
},
r: {
d: "242,-117v2,22,5,10,-14,23v-73,-7,-166,-23,-174,56v-8,6,-3,20,-8,36v-29,10,-40,-9,-33,-46v6,-31,7,-69,32,-55v58,-37,66,-42,175,-19v3,5,15,4,22,5",
w: 229
},
s: {
d: "154,-151v19,1,27,24,13,32v-4,1,-22,4,-53,7v-16,8,-22,-2,-39,9v23,21,89,16,96,62v-13,24,-85,35,-124,42v-9,-3,-18,-3,-27,0v-6,-4,-21,-16,-8,-25v30,-6,83,-13,102,-24v-17,-16,-80,-33,-97,-48v-3,-2,-4,-7,-4,-15v-6,-6,3,-13,15,-18v22,-9,94,-23,126,-22",
w: 188
},
t: {
d: "85,-150v10,-41,35,-126,65,-134v4,1,24,19,11,36v-17,22,-29,57,-36,104v26,8,50,-7,73,5v14,0,22,3,22,9v-1,19,-44,18,-57,23v-10,1,-46,0,-54,10v-10,24,-4,67,-20,98v-21,-3,-26,1,-26,-20v0,-9,2,-36,8,-81v-15,-13,-81,9,-77,-27v4,-38,71,6,91,-23",
w: 194
},
u: {
d: "207,-136v-1,-2,11,-14,14,-13v6,0,10,7,10,22v-3,40,-23,56,-40,82v-13,19,-62,43,-93,43v-67,-2,-111,-75,-71,-133v26,-3,21,29,19,49v-1,27,26,44,57,42v41,-2,93,-55,104,-92",
w: 242
},
v: {
d: "24,-127r52,71v42,-16,70,-54,124,-65v5,4,8,7,8,11v-8,19,-4,8,-33,32v0,1,-1,3,-1,5v-61,45,-93,68,-97,68v-40,-15,-50,-72,-68,-100v6,-14,10,-22,15,-22",
w: 214
},
w: {
d: "15,-139v38,-2,27,57,45,86v30,2,67,-66,101,-78v26,6,36,69,60,78v47,-35,51,-54,119,-104v3,0,7,-2,15,-4v19,23,-9,28,-21,49v-33,28,-68,90,-107,109v-10,6,-52,-47,-72,-71v-20,17,-85,74,-97,73v-38,7,-41,-98,-52,-122v0,-1,3,-7,9,-16",
w: 325
},
x: {
d: "95,-124v22,-13,78,-32,99,-31v16,0,23,6,23,18v0,22,-17,11,-49,21v-3,0,-45,20,-42,24v0,1,2,4,8,10v20,24,49,41,44,80v-35,3,-27,-9,-60,-44v-40,-43,-37,-26,-79,9v-1,1,-2,3,-3,8v-12,8,-28,10,-27,-11v-6,-8,45,-65,48,-65v-17,-21,-61,-52,-24,-68v9,0,48,37,62,49",
w: 223
},
y: {
d: "44,-65v22,33,70,4,99,-8v5,-4,28,-15,41,-31r17,0v25,47,-26,70,-40,114v-5,4,-9,8,-10,21v-16,12,-11,33,-27,51v-5,18,-12,43,-23,71v-1,-1,-2,34,-18,29v-12,1,-22,-12,-22,-23v20,-70,24,-65,68,-177v-47,16,-111,8,-116,-39v-11,-13,-7,-62,8,-62v18,0,22,26,23,54",
w: 216
},
z: {
d: "189,-43v9,-1,46,-6,41,12v0,7,-5,13,-15,14v-45,6,-148,24,-181,13v0,-3,-5,-8,-14,-15v5,-44,66,-46,90,-85v-15,-18,-84,21,-84,-14v0,-10,5,-17,14,-18v33,-3,79,-13,109,-3v4,-2,14,11,12,15v0,23,-26,51,-78,84v28,10,73,-3,106,-3",
w: 244
},
"{": {
d: "94,-303v27,-9,90,-14,79,26v-20,17,-55,-5,-87,13v-4,1,-6,4,-6,8v33,42,31,44,7,85v-6,10,-13,16,-13,13v5,6,17,17,15,31r-33,78v7,35,28,49,57,63r49,0v7,42,-51,41,-86,20v-43,-13,-51,-51,-56,-89v-2,-25,25,-54,27,-71v-3,-4,-46,-5,-41,-21v2,-10,-3,-29,11,-25v2,0,51,-17,52,-38v4,-3,-25,-23,-25,-49v0,-41,8,-30,50,-44",
w: 179
},
"|": {
d: "30,-308v26,5,14,50,15,80v5,78,-8,153,-3,225v-2,15,-1,31,-11,36v-8,-3,-25,-22,-25,-32r9,-183v0,-40,0,-78,1,-112v0,-4,9,-15,14,-14",
w: 63
},
"}": {
d: "47,-298v34,-17,118,-18,112,36v6,25,-76,98,-69,103v4,16,39,7,44,28v7,34,-34,17,-37,39v8,29,49,83,23,123v-15,23,-43,26,-73,46v-34,8,-43,11,-49,-17v1,-15,30,-15,33,-20v24,-12,70,-27,55,-61v-14,-33,-37,-68,-19,-103v-46,-50,46,-100,60,-141v-10,-16,-68,6,-77,-12",
w: 143
},
"~": {
d: "7,-254v2,-6,59,-50,67,-46v11,-1,35,19,46,26v5,0,27,-10,66,-31v21,8,-1,25,-7,38v-27,21,-48,31,-65,31v-24,-11,-37,-39,-65,-9v-7,7,-26,36,-42,11v3,-5,-3,-17,0,-20",
w: 199
},
"Ä": {d: "161,-217v20,53,23,124,54,170v-2,20,-34,9,-42,0v-27,-12,-78,-18,-101,-18v-26,6,-29,51,-54,63v-18,-4,-19,-30,-3,-38v5,-9,15,-16,8,-29v1,-12,23,-9,26,-19v6,-10,11,-20,20,-27r70,-121v12,-4,16,4,22,19xm82,-91v17,3,62,7,86,13v-13,-33,-13,-80,-29,-109v-15,30,-38,63,-57,96xm187,-259v0,8,-4,13,-12,13v-18,0,-21,-20,-16,-34v18,-1,28,2,28,21xm90,-284v7,3,28,11,28,18v0,9,-9,18,-18,17v-17,0,-25,-24,-10,-35"},
"Å": {d: "161,-217v20,53,23,124,54,170v-2,20,-34,9,-42,0v-27,-12,-78,-18,-101,-18v-26,6,-29,51,-54,63v-18,-4,-19,-30,-3,-38v5,-9,15,-16,8,-29v1,-12,23,-9,26,-19v6,-10,11,-20,20,-27r70,-121v12,-4,16,4,22,19xm82,-91v17,3,62,7,86,13v-13,-33,-13,-80,-29,-109v-15,30,-38,63,-57,96xm112,-239v-31,-17,-9,-61,29,-56v12,2,22,3,33,12v24,39,-30,62,-62,44xm119,-262v2,14,41,8,41,-4v0,-4,-8,-6,-24,-9v-10,-2,-17,10,-17,13"},
"Ç": {
d: "48,-108v-12,70,90,71,159,67r138,-9v9,-1,7,9,7,17v-37,16,-80,27,-103,21v-14,9,-40,3,-67,9v-30,0,-64,1,-100,-10v-6,-1,-10,-4,-10,-8v-32,-12,-46,-31,-63,-56v-16,-61,47,-103,83,-121v82,-42,118,-45,200,-60v21,-4,36,34,11,37v-90,11,-148,31,-225,77v-12,8,-23,20,-30,36xm172,18v29,4,47,14,53,35v-2,7,-14,31,-27,31v-28,7,-55,9,-84,14v-18,-5,-13,-32,7,-32v21,0,55,-5,69,-13v-16,-14,-63,10,-50,-35v9,-10,1,-27,23,-29v7,8,11,16,9,29",
w: 331
},
"É": {
d: "49,-160v1,-4,-10,-9,-15,-8v-15,-35,32,-30,57,-31r142,-8v2,1,30,7,40,10v-52,16,-133,17,-190,30v-7,9,-12,24,-15,47v26,10,102,-6,141,3v1,3,1,6,2,10v-36,18,-92,12,-149,21v-11,9,-16,41,-16,51v55,-1,111,-21,168,-13v15,-8,48,1,31,18v-53,16,-130,13,-198,29r-39,-8v-4,-19,17,-53,20,-76v-1,0,-7,-11,-9,-18v18,-7,22,-28,30,-57xm133,-248v27,-11,48,-32,59,-14v3,11,-79,52,-88,53v-14,1,-16,-11,-12,-21v10,-4,23,-11,41,-18",
w: 252
},
"Ñ": {
d: "224,-182v1,-17,15,-24,22,-38v20,0,13,10,3,33v-3,36,-25,52,-28,94v-10,24,-30,55,-29,82r-19,7v-32,-8,-36,-70,-58,-111v-2,-23,-7,-27,-19,-54v-28,36,-41,93,-71,133v-9,5,-20,-9,-20,-17r73,-149v9,-24,31,-5,36,7v19,41,31,98,53,139v22,-35,34,-69,50,-118v2,-3,3,-3,7,-8xm203,-257v22,-8,41,-24,65,-26v3,11,-8,9,-7,21v-26,20,-46,31,-59,31v-2,3,-49,-27,-49,-29v-11,0,-32,31,-46,32v-11,-2,-12,-21,-4,-23v4,-6,28,-30,48,-34v17,-4,43,28,52,28",
w: 219
},
"Ö": {
d: "62,-184v78,-31,249,-50,238,74v-6,65,-102,105,-179,115v-77,-7,-152,-71,-101,-149v2,-5,24,-33,42,-40xm279,-120v14,-38,-47,-64,-85,-61v-20,-9,-41,7,-62,0v-11,7,-54,12,-66,24v0,20,-51,35,-38,66v-1,43,50,67,96,67v44,0,162,-55,155,-96xm197,-229v0,8,-4,13,-12,13v-17,0,-19,-19,-16,-34v18,-1,29,1,28,21xm101,-254v7,3,28,9,27,18v1,8,-8,17,-17,17v-18,0,-26,-24,-10,-35",
w: 273
},
"Ü": {
d: "281,-202v6,67,-30,121,-71,152v-3,14,-47,26,-60,39v-41,20,-110,1,-125,-26v-24,-44,-28,-84,-8,-127v12,-26,23,-38,37,-22v-2,2,-3,5,-3,10v-34,26,-29,116,5,134v22,32,86,-1,109,-8v38,-28,104,-64,97,-149v2,-10,7,-8,19,-3xm197,-227v0,8,-4,13,-12,13v-18,0,-21,-20,-16,-34v18,-1,28,2,28,21xm101,-252v7,3,27,10,27,18v0,8,-9,18,-18,17v-18,-1,-24,-25,-9,-35",
w: 262
},
"á": {
d: "118,-53v10,4,55,41,62,47v0,7,-5,16,-12,16r-57,-28v-20,3,-40,19,-61,18v-10,2,-43,-17,-42,-36v0,-14,7,-40,27,-41v39,-26,92,-36,104,9v0,6,-2,11,-9,15v-32,-24,-64,-6,-84,11v8,15,58,-17,72,-11xm32,-117v24,-3,85,-55,101,-32v3,11,-80,53,-89,53v-13,2,-14,-10,-12,-21",
w: 173
},
"à": {
d: "118,-53v10,4,55,41,62,47v0,7,-5,16,-12,16r-57,-28v-20,3,-40,19,-61,18v-10,2,-43,-17,-42,-36v0,-14,7,-40,27,-41v39,-26,92,-36,104,9v0,6,-2,11,-9,15v-32,-24,-64,-6,-84,11v8,15,58,-17,72,-11xm99,-137v7,6,56,14,37,40v-28,-7,-62,-21,-100,-41v-2,-3,-2,-26,5,-23v16,4,42,17,58,24",
w: 173
},
"â": {
d: "118,-53v10,4,55,41,62,47v0,7,-5,16,-12,16r-57,-28v-20,3,-40,19,-61,18v-10,2,-43,-17,-42,-36v0,-14,7,-40,27,-41v39,-26,92,-36,104,9v0,6,-2,11,-9,15v-32,-24,-64,-6,-84,11v8,15,58,-17,72,-11xm147,-97v-27,-6,-39,-26,-60,-37v-21,7,-38,46,-65,23v-2,-5,-3,-10,-4,-14v18,-4,43,-31,61,-42v28,5,40,21,62,36v12,8,18,17,18,25v0,6,-4,9,-12,9",
w: 173
},
"ä": {
d: "118,-53v10,4,55,41,62,47v0,7,-5,16,-12,16r-57,-28v-20,3,-40,19,-61,18v-32,5,-66,-64,-15,-77v39,-26,92,-36,104,9v0,6,-3,11,-9,15v-32,-24,-64,-6,-84,11v8,15,58,-17,72,-11xm142,-119v0,8,-4,13,-12,13v-18,0,-21,-20,-16,-34v18,-1,28,2,28,21xm46,-144v7,3,28,9,27,18v1,8,-9,18,-18,17v-18,-1,-25,-25,-9,-35",
w: 173
},
"ã": {
d: "118,-53v10,4,55,41,62,47v0,7,-5,16,-12,16r-57,-28v-20,3,-40,19,-61,18v-10,2,-43,-17,-42,-36v0,-14,7,-40,27,-41v39,-26,92,-36,104,9v0,6,-2,11,-9,15v-32,-24,-64,-6,-84,11v8,15,58,-17,72,-11xm114,-136v22,-8,41,-24,64,-26v3,11,-7,10,-7,21v-26,20,-45,30,-58,30v-3,3,-49,-26,-49,-28v-10,-1,-32,35,-51,31v-12,-32,8,-29,32,-51v24,-21,54,20,69,23",
w: 173
},
"å": {
d: "118,-53v10,4,55,41,62,47v0,7,-5,16,-12,16r-57,-28v-20,3,-40,19,-61,18v-10,2,-43,-17,-42,-36v0,-14,7,-40,27,-41v39,-26,92,-36,104,9v0,6,-2,11,-9,15v-32,-24,-64,-6,-84,11v8,15,58,-17,72,-11xm54,-101v-37,-20,-9,-71,34,-65v13,1,25,3,38,13v27,45,-34,73,-72,52xm61,-128v4,20,48,7,49,-5v0,-5,-9,-7,-28,-10v-12,-2,-21,11,-21,15",
w: 173
},
"ç": {
d: "108,-118v30,-6,56,21,25,33v-24,-6,-39,5,-75,23v-7,4,-12,12,-15,22v31,28,86,3,128,9v3,28,-29,16,-44,28v-53,15,-106,10,-120,-37v0,-48,62,-70,101,-78xm92,18v23,4,45,12,48,32v-2,6,-12,28,-25,28v-24,6,-50,10,-77,13v-16,-4,-11,-28,7,-29v17,-1,51,-4,63,-12v-14,-15,-57,10,-46,-32v9,-8,0,-25,21,-26v6,6,12,14,9,26",
w: 171
},
"é": {
d: "108,-124v42,-3,70,39,50,73v-22,-1,-70,12,-94,10v-1,1,-2,3,-2,3v0,3,12,7,35,14v18,0,64,7,30,21v-10,14,-31,6,-53,6v-26,-7,-70,-26,-70,-58v0,-54,48,-65,104,-69xm130,-78v-2,-35,-66,-13,-77,3v16,6,62,6,77,-3xm76,-169v26,-11,48,-32,59,-14v3,10,-80,53,-89,53v-14,1,-14,-10,-12,-21v15,-7,16,-7,42,-18",
w: 161
},
"è": {
d: "108,-124v42,-3,70,39,50,73v-22,-1,-70,12,-94,10v-1,1,-2,3,-2,3v0,3,12,7,35,14v18,0,64,7,30,21v-10,14,-31,6,-53,6v-26,-7,-70,-26,-70,-58v0,-54,48,-65,104,-69xm130,-78v-2,-35,-66,-13,-77,3v16,6,62,6,77,-3xm95,-166v7,6,54,14,37,40v-28,-7,-62,-21,-100,-41v-3,-3,-3,-26,5,-24v16,5,42,18,58,25",
w: 161
},
"ê": {
d: "108,-124v42,-3,70,39,50,73v-22,-1,-70,12,-94,10v-1,1,-2,3,-2,3v0,3,12,7,35,14v18,0,64,7,30,21v-10,14,-31,6,-53,6v-26,-7,-70,-26,-70,-58v0,-54,48,-65,104,-69xm130,-78v-2,-35,-66,-13,-77,3v16,6,62,6,77,-3xm145,-129v-27,-6,-39,-26,-60,-37v-8,0,-10,4,-14,10v-11,15,-51,34,-56,0v17,-4,44,-32,61,-43v28,5,41,21,63,36v12,8,17,17,17,25v0,6,-3,9,-11,9",
w: 161
},
"ë": {
d: "108,-124v42,-3,70,39,50,73v-22,-1,-70,12,-94,10r-3,3v0,3,12,7,36,14v18,0,64,7,30,21v-10,14,-31,6,-53,6v-26,-7,-67,-27,-71,-58v7,-52,48,-65,105,-69xm130,-78v-2,-35,-66,-13,-77,3v16,6,62,6,77,-3xm140,-144v0,8,-4,12,-12,12v-18,0,-19,-19,-16,-33v18,-1,29,1,28,21xm44,-169v7,3,28,9,28,17v0,9,-9,18,-18,18v-18,0,-25,-24,-10,-35",
w: 161
},
"í": {
d: "59,-98v20,4,15,53,10,95v-6,1,-11,2,-19,-4v1,-7,-12,-18,-10,-24v4,-22,-4,-65,19,-67xm50,-139v27,-11,49,-32,59,-14v3,11,-80,53,-89,53v-14,1,-14,-12,-11,-22v15,-7,14,-6,41,-17",
w: 105
},
"ì": {
d: "57,-98v22,5,13,50,11,95v-7,1,-11,2,-20,-4v1,-7,-12,-18,-10,-24v4,-22,-2,-64,19,-67xm70,-139v14,10,54,14,37,41v-28,-7,-61,-22,-99,-42v-3,-2,-3,-25,5,-23v15,5,41,17,57,24",
w: 109
},
"î": {
d: "72,-98v20,5,12,51,10,95v-6,2,-13,1,-20,-4v1,-8,-12,-18,-10,-24v4,-22,-3,-65,20,-67xm134,-94v-26,-7,-39,-25,-60,-37v-7,0,-9,4,-13,10v-14,15,-51,34,-56,-1v18,-4,45,-33,61,-43v27,6,40,22,62,37v12,8,18,17,18,25v0,6,-4,9,-12,9",
w: 143
},
"ï": {
d: "55,-97v19,5,15,53,10,95v-17,5,-26,-14,-30,-28v6,-20,-3,-65,20,-67xm110,-118v0,8,-4,13,-12,13v-17,0,-19,-19,-16,-34v18,-1,29,1,28,21xm14,-143v6,3,28,8,28,17v0,9,-9,18,-18,18v-18,0,-25,-24,-10,-35",
w: 107
},
"ñ": {
d: "115,-129v34,6,59,50,59,105v0,31,-15,24,-30,17v-15,-29,-5,-42,-20,-81v-35,-13,-68,52,-88,61v-20,-4,-38,-36,-19,-59v0,-12,3,-14,10,-28v11,-8,18,11,27,12xm117,-166v22,-7,41,-23,64,-26v3,11,-7,10,-7,21v-26,20,-45,30,-58,30v-3,3,-49,-26,-49,-28v-10,-1,-32,35,-51,31v-5,-12,-8,-16,0,-23v4,-6,28,-29,48,-33v17,-3,43,28,53,28",
w: 171
},
"ó": {
d: "102,-132v50,-20,99,16,99,60v0,54,-60,64,-108,79v-50,-2,-110,-48,-76,-100v22,-17,49,-33,85,-39xm136,-104v-34,0,-91,27,-94,47v16,51,125,16,125,-22v0,-17,-10,-25,-31,-25xm49,-154v24,-3,85,-55,101,-32v3,11,-80,53,-89,53v-14,0,-13,-8,-12,-21",
w: 191
},
"ò": {
d: "102,-132v50,-20,99,16,99,60v0,54,-60,64,-108,79v-50,-2,-110,-48,-76,-100v22,-17,49,-33,85,-39xm136,-104v-34,0,-91,27,-94,47v16,51,125,16,125,-22v0,-17,-10,-25,-31,-25xm115,-181v14,10,51,13,37,40v-28,-7,-62,-21,-100,-41v-3,-2,-3,-26,5,-23v16,5,42,17,58,24",
w: 191
},
"ô": {
d: "102,-132v50,-20,99,16,99,60v0,54,-60,64,-108,79v-50,-2,-110,-48,-76,-100v22,-17,49,-33,85,-39xm136,-104v-34,0,-91,27,-94,47v16,51,125,16,125,-22v0,-17,-10,-25,-31,-25xm110,-177v-22,6,-38,45,-65,22v-2,-4,-3,-9,-4,-13v18,-4,43,-32,61,-43v27,6,40,21,62,36v12,9,18,17,18,25v1,11,-15,10,-23,7",
w: 191
},
"ö": {
d: "102,-132v50,-20,99,16,99,60v0,54,-60,64,-108,79v-50,-2,-110,-48,-76,-100v22,-17,49,-33,85,-39xm136,-104v-34,0,-91,27,-94,47v16,51,125,16,125,-22v0,-17,-10,-25,-31,-25xm161,-160v0,8,-4,13,-12,13v-17,0,-19,-19,-16,-34v18,-1,29,1,28,21xm65,-185v7,3,28,9,28,18v0,7,-9,18,-18,17v-18,1,-25,-24,-10,-35",
w: 191
},
"õ": {
d: "102,-132v50,-20,99,16,99,60v0,54,-60,64,-108,79v-50,-2,-110,-48,-76,-100v22,-17,49,-33,85,-39xm136,-104v-34,0,-91,27,-94,47v16,51,125,16,125,-22v0,-17,-10,-25,-31,-25xm58,-199v26,-21,54,18,69,22v4,0,15,-5,34,-13v22,-9,21,-16,31,-13v3,11,-9,9,-7,22v-26,20,-46,30,-59,30v-2,4,-49,-28,-49,-29v-11,0,-32,31,-46,32v-12,-3,-13,-21,-4,-23v4,-6,14,-15,31,-28",
w: 191
},
"ú": {
d: "196,-129v-1,-4,12,-13,15,-13v6,0,8,7,8,21v0,24,-7,25,-13,45v-7,7,-14,21,-24,29v-9,24,-61,45,-89,45v-63,0,-105,-72,-67,-126v24,-3,19,27,18,46v-1,26,23,42,54,40v38,-3,88,-51,98,-87xm106,-174v26,-11,48,-32,59,-14v3,11,-81,53,-89,54v-13,1,-15,-12,-11,-22v15,-7,14,-7,41,-18",
w: 213
},
"ù": {
d: "196,-129v-1,-4,12,-13,15,-13v6,0,8,7,8,21v0,24,-7,25,-13,45v-7,7,-14,21,-24,29v-9,24,-61,45,-89,45v-63,0,-105,-72,-67,-126v24,-3,19,27,18,46v-1,26,23,42,54,40v38,-3,88,-51,98,-87xm126,-166v7,6,56,14,37,40v-28,-7,-62,-22,-100,-42v-2,-3,-2,-26,5,-23v16,4,42,18,58,25",
w: 213
},
"û": {
d: "196,-129v-1,-4,12,-13,15,-13v6,0,8,7,8,21v0,24,-7,25,-13,45v-7,7,-14,21,-24,29v-9,24,-61,45,-89,45v-63,0,-105,-72,-67,-126v24,-3,19,27,18,46v-1,26,23,42,54,40v38,-3,88,-51,98,-87xm172,-143v-27,-6,-39,-26,-60,-37v-8,0,-10,4,-14,10v-11,15,-49,35,-56,0v17,-4,44,-32,61,-43v27,6,41,21,63,36v12,9,17,17,17,25v0,6,-3,9,-11,9",
w: 213
},
"ü": {
d: "196,-129v-1,-4,12,-13,15,-13v6,0,8,7,8,21v0,24,-7,25,-13,45v-7,7,-14,21,-24,29v-9,24,-61,45,-89,45v-63,0,-105,-72,-67,-126v24,-3,19,27,18,46v-1,26,23,42,54,40v38,-3,88,-51,98,-87xm168,-161v0,8,-3,13,-11,13v-17,0,-20,-19,-17,-34v18,-1,29,1,28,21xm72,-186v7,3,29,9,28,18v0,7,-9,18,-18,17v-18,1,-25,-24,-10,-35",
w: 213
},
"†": {
d: "22,-286v15,6,5,-20,19,-19v9,-3,15,21,17,22v6,1,12,3,20,6v3,10,5,16,-9,16v-34,-10,-6,51,-34,52v-20,-7,11,-47,-15,-49v-14,3,-25,-5,-17,-24v7,-2,14,-4,19,-4",
w: 77
},
"°": {
d: "106,-268v0,36,-35,38,-51,46v-48,5,-60,-58,-25,-78v33,-11,76,-9,76,32xm38,-257v16,7,39,2,38,-17v-13,-9,-28,-1,-32,11v-5,3,-7,0,-6,6",
w: 114
},
"¢": {
d: "105,-188v13,-12,14,-18,26,-15v7,23,7,15,-3,49v6,0,18,14,17,20v-3,5,-12,19,-26,13v-14,1,-14,5,-16,21v10,10,46,-13,38,18v-9,17,-23,16,-54,20v-17,16,-4,55,-29,60v-37,-10,19,-64,-24,-71v-20,-10,-37,-47,-6,-62v23,-20,73,-4,77,-53xm65,-101v4,-9,7,-8,3,-13v-14,4,-22,10,-3,13",
w: 154
},
"£": {
d: "153,-170v3,22,62,0,49,39v-18,6,-31,12,-58,9v-12,-1,-17,30,-23,39v19,26,50,56,91,35v9,-2,27,-13,27,4v0,27,-27,39,-58,42v-32,-5,-59,-19,-78,-39v-6,1,-35,44,-57,39v-25,0,-37,-15,-37,-46v0,-41,43,-53,73,-50v4,1,12,-18,12,-21v-7,-15,-49,0,-44,-30v-2,-31,31,-16,60,-19v16,-30,25,-119,93,-113v16,2,75,16,50,44v-4,5,-7,7,-12,8v-18,-12,-32,-18,-41,-18v-35,-1,-38,52,-47,77xm43,-45v4,5,12,-2,11,-9v-1,2,-12,1,-11,9",
w: 242
},
"§": {
d: "141,-115v12,10,29,36,28,56v-4,68,-129,69,-152,16v-1,-12,-10,-22,8,-23v17,3,47,21,67,23v16,1,40,-8,38,-21v-8,-49,-119,-30,-117,-85v1,-28,15,-45,-3,-64v-1,-53,55,-61,103,-62v15,-5,6,-5,20,-2v16,17,23,27,23,30v-1,26,-29,7,-45,7v-21,0,-51,2,-62,17v19,14,87,8,97,43v18,14,16,57,-5,65xm64,-147r57,17v10,-28,-22,-43,-47,-44v-25,-1,-35,19,-10,27",
w: 174
},
"•": {d: "130,-114v0,47,-124,54,-120,-8r6,-31v44,-28,64,-34,104,0v8,6,10,20,10,39", w: 139},
"¶": {
d: "121,-237v21,-9,44,-13,63,-1v-1,7,5,6,7,11r-4,190v-2,33,4,39,-15,40v-16,1,-10,-20,-10,-33r4,-161v0,-17,-1,-34,-16,-25v2,10,1,23,1,35v-9,46,-6,75,-15,156v-3,4,-7,5,-12,5v-17,-10,-3,-89,-10,-115v-43,14,-98,10,-101,-29v-4,-53,59,-63,104,-75v3,1,4,2,4,2xm95,-204v2,9,-30,50,1,50v35,0,23,-13,29,-43v0,-1,-2,-7,-4,-15v-12,-1,-14,2,-26,8",
w: 206
},
"ß": {d: "33,10v-29,4,-28,-32,-16,-70v18,-58,17,-137,56,-176v12,-24,46,-58,82,-43v20,8,47,24,47,54v0,30,-62,59,-67,90v33,23,56,33,63,63v-18,21,-22,36,-48,54v-24,17,-27,41,-53,16v-2,-19,7,-35,24,-42v15,-13,26,-22,34,-40v-13,-17,-78,-29,-56,-70v-3,-27,64,-54,66,-86v-8,-25,-41,-4,-52,8v-29,30,-47,83,-51,141v-17,25,-8,71,-29,101"},
"®": {
d: "75,-194v78,-29,116,9,130,84v-2,42,-22,47,-57,67v-74,20,-161,-19,-129,-110v6,-18,29,-34,57,-40xm46,-86v51,36,84,21,129,-15v7,-15,0,-39,-10,-49v-13,-37,-49,-26,-86,-18v-28,7,-49,46,-33,82xm72,-123v-5,-43,68,-57,75,-14v-17,26,-18,17,3,32v2,25,-25,18,-45,7r-4,-4v-1,8,-3,20,-12,24v-10,-3,-21,-34,-17,-45xm112,-135v-10,-1,-20,13,-9,14v6,-6,9,-11,9,-14",
w: 217
},
"©": {
d: "102,-29v-74,5,-124,-84,-70,-140v22,-22,53,-35,97,-38v46,-4,88,49,74,100v0,44,-51,75,-101,78xm96,-66v42,-3,75,-23,75,-69v0,-23,-4,-38,-44,-38v-16,0,-33,6,-49,20v36,-4,55,-12,62,20v-5,16,-49,1,-50,21v10,15,53,-14,54,11v0,18,-14,27,-42,27v-22,1,-46,-11,-46,-31v0,-25,7,-39,20,-44v-1,-1,-2,-2,-3,-2v-51,22,-32,89,23,85",
w: 217
},
"™": {
d: "213,-307v28,9,11,49,7,75v-1,4,-4,6,-11,6v-7,1,-11,-14,-11,-34v-14,-6,-34,34,-46,28v-2,0,-10,-9,-24,-27v-10,7,-3,36,-27,31v-15,-24,-3,-27,1,-48v-6,-7,-27,-1,-31,3v-3,14,-7,30,-11,51v-5,10,-29,9,-24,-12v-5,-8,1,-18,3,-35v-13,6,-33,2,-29,-18v20,-17,64,-17,100,-19v28,-1,29,30,45,39v11,-6,35,-32,58,-40",
w: 239
},
"´": {d: "52,-284v29,-11,50,-34,62,-14v3,12,-86,54,-94,56v-14,0,-16,-12,-12,-23v11,-5,25,-11,44,-19", w: 120},
"¨": {
d: "124,-259v0,9,-4,13,-12,13v-18,0,-22,-21,-17,-35v19,-1,30,1,29,22xm23,-285v7,2,30,9,29,18v1,10,-9,19,-18,19v-19,0,-28,-26,-11,-37",
w: 136
},
"≠": {
d: "48,-130v29,11,49,-57,60,-50v25,6,7,27,-1,46v22,5,29,7,21,22v-18,2,-48,-1,-50,15v9,8,53,-7,54,10v-4,22,-46,20,-72,24v-7,13,-18,32,-34,57v-8,6,-15,-3,-13,-14v-1,-9,15,-39,14,-45v-30,5,-24,-17,-13,-25v12,-1,36,4,29,-13v-14,0,-47,6,-36,-12v0,-18,27,-13,41,-15",
w: 140
},
"Æ": {
d: "335,-259v0,30,-102,12,-122,34v10,21,2,79,16,100v24,-6,59,-13,86,-16v23,-2,32,21,13,26r-103,29v-3,22,-4,38,8,43v28,-5,60,-6,86,-14v5,-1,14,7,14,11v6,16,-90,40,-107,40v-29,0,-39,-19,-32,-46v-2,-4,0,-26,-9,-28v-29,2,-58,6,-88,6v-31,0,-40,74,-82,73v-18,-23,4,-37,12,-50v40,-65,112,-126,165,-207v20,-17,69,-11,112,-13v21,0,31,4,31,12xm123,-111v28,1,44,-2,67,-10v-4,-22,5,-49,-7,-65v-3,6,-65,61,-60,75",
w: 348
},
"Ø": {
d: "76,-211v41,-13,100,-22,140,-3v26,-19,40,-29,44,-29v10,0,15,7,15,20v0,15,-23,23,-30,35v23,39,29,114,-21,139v-36,19,-102,35,-147,18v-14,-5,-29,29,-46,35v-25,-13,-19,-24,3,-56v-9,-17,-28,-27,-28,-60v0,-38,23,-72,70,-99xm107,-66v55,15,125,-12,123,-70v0,-16,-5,-25,-13,-29r-110,95r0,4xm39,-108v-1,3,17,31,22,27v8,-6,109,-90,123,-106v-15,-11,-43,1,-63,2v-33,10,-80,35,-82,77",
w: 270
},
"∞": {
d: "322,-72v-4,22,-54,41,-76,41v-43,0,-83,-17,-114,-35v-46,19,-125,53,-128,-18v-1,-14,10,-22,13,-35v29,-10,62,-31,97,-4v37,28,47,5,75,-8v40,-19,73,-10,114,1v13,1,18,55,19,58xm228,-69v15,0,62,-12,61,-25v-19,-23,-89,-10,-105,11v0,2,1,4,2,4v28,6,42,10,42,10xm75,-102v-13,2,-41,4,-44,19v0,4,3,7,10,7v21,0,40,-6,54,-17v-9,-6,-16,-9,-20,-9",
w: 330
},
"±": {
d: "93,-163v-7,46,76,-4,46,47v-14,6,-27,13,-38,8v-24,2,-14,28,-28,44r-14,0v-7,-12,-5,-15,-7,-33v-12,-7,-41,-1,-37,-24v2,-11,23,-17,36,-14r28,-38v4,0,9,4,14,10xm113,-27v-12,18,-58,27,-85,24v-16,2,-22,-23,-13,-36v28,-7,85,-11,98,12",
w: 151
},
"≤": {
d: "73,-109v10,15,87,16,87,42v0,11,-5,16,-13,16v-36,-11,-69,-24,-109,-31v-18,-8,-18,-13,-9,-36v59,-56,93,-83,101,-83v16,0,18,17,14,28v-27,24,-42,35,-71,64xm10,-29v35,-12,117,-26,148,-3v1,2,-5,19,-8,18r-124,15v-16,2,-26,-18,-16,-30",
w: 168
},
"≥": {
d: "115,-174v20,7,53,36,20,57v-19,11,-91,68,-82,59v-18,3,-25,-22,-13,-31v15,-10,14,-10,70,-51r-50,-37v-5,-4,-5,-27,4,-28v16,7,40,17,51,31xm14,-32v33,-10,86,-14,127,-10v12,12,5,23,-11,27v-49,9,-82,13,-99,13v-22,0,-24,-16,-17,-30",
w: 163
},
"¥": {
d: "31,-248v30,-3,64,64,74,59v37,-22,77,-65,107,-82v20,-11,34,18,21,32v-28,19,-52,38,-70,57v-18,8,-40,21,-35,60v2,19,39,7,64,7v25,0,16,21,2,27v-36,16,-46,8,-68,18v6,11,101,-20,66,24v-21,11,-42,12,-75,20v-2,1,-5,6,-10,18v-8,3,-11,10,-24,8v-7,-17,-2,-18,-9,-26v-13,5,-39,3,-53,-2v-10,-17,-7,-27,0,-34v23,-1,45,1,64,-5v-11,-7,-28,-4,-64,-6v-13,-8,-15,-24,-6,-35v33,-2,102,9,76,-37v-14,-14,-33,-38,-60,-66v-10,-10,-8,-28,0,-37",
w: 219
},
"µ": {
d: "123,-114v41,0,54,-9,127,-17v12,-2,20,-6,25,-12v5,-78,43,-127,119,-138v38,-5,46,23,55,48v-5,5,2,4,2,12v-2,47,-72,81,-129,95v-17,4,-12,32,-2,39v30,-5,24,0,99,4v14,9,14,20,-1,23v-17,3,-71,-1,-85,13v1,19,18,35,-3,47v-1,-6,-10,-7,-16,-5v-3,-3,-20,-37,-29,-41v-15,8,-50,22,-49,-9v1,-19,2,-27,28,-26v24,1,13,-12,8,-30v-22,1,-64,16,-111,23v-50,7,-17,47,-17,57v0,10,-5,15,-13,15v-20,-9,-27,-30,-33,-55v-20,-17,-52,8,-85,-6v-2,-10,-13,-26,4,-29v32,-6,41,-1,65,-7v-17,-74,-4,-173,69,-180v55,-20,130,8,131,65v-11,9,-10,2,-29,-11v-33,-23,-37,-26,-76,-25v-41,13,-69,38,-67,100v0,34,4,50,13,50xm317,-152v29,-6,106,-43,106,-71v0,-23,-24,-25,-42,-17v-31,1,-74,48,-64,88",
w: 462
},
"∂": {
d: "456,-113v55,-37,119,-8,176,5v-19,37,-104,-5,-144,18v-5,64,-45,87,-130,87v-43,0,-70,-8,-96,-21v-54,15,-146,29,-209,10v-18,-11,-43,-26,-46,-53v-1,-9,28,-48,51,-46v55,-10,55,-8,101,-8v29,0,17,-26,23,-56v4,-19,4,-74,34,-49v4,42,-7,83,-10,124v0,4,-11,10,-34,17v-29,-1,-45,-4,-74,1v-10,2,-57,3,-52,18v30,43,132,30,190,18v2,-10,-7,-19,-5,-28v5,-36,31,-59,74,-56v27,2,71,4,70,35v-1,30,-37,41,-58,57v35,13,131,15,135,-23v2,-19,-5,-36,4,-50xm262,-85v0,3,13,28,19,25v7,0,48,-13,61,-29v-10,-17,-71,-17,-80,4",
w: 640
},
"∑": {
d: "235,-95v-3,-59,120,-41,160,-28v3,-2,15,-3,14,4v1,3,-16,19,-21,18r-97,4v-25,5,-18,18,-23,56v-16,14,-25,24,-36,18v-83,32,-154,29,-212,-17v-45,-68,41,-114,107,-119v50,-4,59,66,22,85v-16,8,-61,10,-79,15v36,27,185,24,165,-36xm128,-119v-23,-3,-43,4,-53,15v13,5,46,-4,53,-15",
w: 414
},
"∏": {
d: "243,-190v7,-18,27,-19,38,6v0,2,-5,8,-14,16v-8,-9,-27,-4,-24,-22xm221,-111v55,-7,60,22,45,64v5,23,17,47,-22,47v-35,0,-18,-40,-15,-70v-2,-19,-35,-13,-52,-18v-2,0,-13,1,-34,3v-4,0,-10,11,-13,31v-3,20,1,43,-11,54v-12,-4,-13,-5,-21,-3v-13,-13,-3,-25,-12,-41v7,-6,12,-22,10,-39v-23,-8,-79,15,-87,-21v12,-28,78,-4,101,-20r36,-96v8,-19,17,-28,27,-28v10,0,15,6,15,18v-6,32,-31,62,-38,109v25,10,47,-1,71,10",
w: 282
},
"π": {
d: "247,-240v-3,5,-14,12,-21,6v-41,5,-71,-4,-85,37v-6,7,-21,42,-25,61v28,12,104,-16,129,24v8,11,12,24,12,38v-7,17,-2,99,-40,68v-9,-23,-5,-47,-1,-73v3,-24,-40,-24,-50,-19v-4,0,-18,2,-44,6v-30,-6,-16,49,-33,58v-19,-11,-14,2,-29,-10v8,-71,20,-114,43,-170v-24,-2,-49,4,-73,7v-30,3,-32,-33,-7,-36r184,-22v17,-1,40,13,40,25",
w: 265
},
"∫": {
d: "62,-151v-7,-70,20,-130,63,-150v28,1,39,10,70,23v20,8,6,33,-6,35v-29,-13,-45,-20,-49,-20v-20,-4,-45,51,-43,70v8,60,5,129,5,189v0,62,-27,93,-79,93v-37,-1,-71,-14,-63,-57v21,0,79,34,91,-2v16,-3,14,-64,21,-85v-2,-31,-1,-74,-10,-96",
w: 156
},
"ª": {
d: "6,-265v1,-31,58,-53,80,-22v-11,14,25,28,25,36v-2,8,-15,12,-27,10v-22,-29,-68,19,-78,-24xm52,-281v-8,1,-24,10,-9,13v11,1,24,-10,9,-13",
w: 117
},
"º": {
d: "13,-273v1,-31,56,-41,83,-18v36,8,14,48,-9,52v-35,6,-64,-5,-74,-34xm81,-269v-7,-7,-20,-11,-29,-6v5,13,13,11,29,6",
w: 128
},
"Ω": {
d: "121,-111v9,16,43,-5,54,5v28,-4,62,8,81,-5v48,-33,166,-28,160,44v15,34,-51,53,-88,53v-34,0,-53,-21,-71,-37v-15,7,-32,-4,-28,-22v-26,-4,-93,-6,-108,8v8,17,5,37,12,54v-1,15,-18,15,-31,10v-9,-15,-20,-39,-19,-63v-20,-9,-73,15,-79,-18v4,-28,50,-11,77,-24v12,-99,36,-168,137,-178v35,5,64,20,67,57v0,13,-14,18,-20,5v-15,-35,-83,-31,-104,4v-26,20,-39,82,-40,107xm334,-45v15,2,51,-14,53,-22v-7,-20,-36,-31,-69,-29v-8,-1,-39,6,-37,14v-3,10,44,38,53,37",
w: 424
},
"æ": {
d: "145,-44r33,7v2,42,-59,29,-85,16v-6,7,-35,24,-48,15v-19,2,-35,-21,-33,-37v2,-24,5,-19,28,-36v-6,-8,-45,3,-33,-21v21,-22,58,-12,85,-1v6,-5,35,-28,45,-15v20,-4,36,17,36,35v0,23,-4,21,-28,37xm111,-72v12,3,49,-16,19,-17v-5,0,-20,12,-19,17xm74,-50v-14,-4,-48,16,-19,17v4,1,19,-14,19,-17",
w: 184
},
"ø": {
d: "76,-136v17,7,33,-8,51,0v9,-6,21,-13,36,-21v23,22,-13,31,3,50v11,13,4,21,14,35v-4,5,-1,14,-4,23v-14,23,-45,41,-84,39v-12,2,-29,28,-41,38v-2,-11,-34,-10,-15,-30v3,-7,5,-11,5,-11v-15,-24,-60,-54,-22,-89v23,-21,25,-32,57,-34xm102,-54v18,1,50,-19,30,-32v-12,7,-22,18,-30,32xm85,-92v-14,3,-26,8,-38,17v2,20,17,13,26,0v6,-8,12,-13,12,-17",
w: 188
},
"¿": {
d: "181,-247v3,1,31,2,29,15v-4,22,-37,27,-41,4v1,-5,7,-20,12,-19xm161,-34v-45,-1,-105,19,-124,51v0,11,18,17,54,17v39,0,82,-13,112,4v-10,35,-58,31,-100,31v-47,0,-80,-10,-99,-31v-10,-56,22,-73,64,-90v8,-3,32,-9,74,-18v21,-15,7,-62,22,-92v-1,-5,-1,-11,4,-12v16,0,24,7,24,22v-8,30,-8,73,-17,111v-3,5,-7,7,-14,7",
w: 213
},
"¡": {
d: "86,-197v8,16,-7,41,-24,25v-11,-11,-4,-16,-3,-29v13,0,15,-2,27,4xm46,-107v4,-8,11,-16,23,-7v19,26,-5,57,-6,87v-7,0,-5,18,-9,28v0,14,-17,52,-11,70v-2,7,-15,28,-25,12v-4,-6,-15,-7,-6,-16v2,-39,14,-96,34,-174",
w: 95
},
"¬": {
d: "141,-99v47,7,103,-3,149,6v14,24,18,15,10,39v-10,34,-7,31,-26,76v-4,6,-15,8,-16,21v-4,2,-4,1,-13,5v-22,-33,-4,-33,16,-104v-5,-9,-28,-4,-38,-6r-183,4v-14,0,-41,-29,-17,-36v31,-9,82,5,118,-5",
w: 315
},
"√": {
d: "364,-218v43,-21,80,-51,104,-32v-3,19,-24,21,-44,40v-41,15,-78,53,-136,78r-137,98v-20,16,-79,66,-91,68v-3,1,-25,-11,-24,-13v-4,-28,-43,-61,-30,-85v26,-15,42,19,58,32r295,-188v0,1,2,2,5,2",
w: 474
},
"ƒ": {
d: "115,-262v-23,6,-39,63,-38,96v1,3,57,2,54,16v1,22,-45,15,-51,30v3,34,12,68,10,103v14,17,-18,53,-28,63v-48,8,-89,5,-95,-37v20,-5,77,21,83,-18v17,-29,-4,-61,0,-98v0,-5,-3,-10,-7,-17v-33,4,-43,-17,-25,-37v10,-4,27,5,27,-10v0,-43,15,-77,32,-109v12,-7,16,-22,38,-20v11,1,51,35,25,55v-9,1,-16,-17,-25,-17",
w: 145
},
"≈": {
d: "133,-112v21,15,48,-30,78,-17v3,3,5,7,5,9v-8,30,-47,45,-76,45v-19,0,-64,-48,-90,-21r-29,20v-6,-1,-17,-16,-15,-32v24,-17,70,-42,107,-21v4,4,10,9,20,17xm138,-57v28,2,48,-25,76,-26v13,30,-21,42,-40,53v-41,24,-77,-15,-114,-23v-15,14,-46,32,-49,-1v-3,-9,27,-28,54,-30",
w: 223
},
"∆": {
d: "18,-1v-24,-30,8,-48,25,-71v14,-19,34,-28,40,-56v20,-35,29,-14,57,4v9,39,43,62,57,102v0,16,-34,17,-50,14v-28,2,-72,4,-129,7xm139,-47r-22,-52v-12,-5,-12,15,-24,27v-7,6,-14,16,-23,28v23,1,36,-1,69,-3",
w: 199
},
"«": {
d: "191,-64v16,6,87,37,53,63v-39,-9,-71,-28,-107,-40v-14,-13,-13,-34,10,-47v27,-15,48,-55,84,-62v9,-2,21,10,21,18r-13,21v-16,5,-44,22,-51,41v0,4,1,6,3,6xm71,-65v17,6,87,35,55,62v-39,-8,-66,-27,-108,-40v-14,-13,-13,-36,10,-46v23,-18,50,-56,84,-63v9,-2,21,10,21,18r-13,22v-20,6,-32,17,-51,37v0,3,-1,11,2,10",
w: 265
},
"»": {
d: "120,-129v9,-33,48,-10,64,5v9,20,86,52,50,86v-36,11,-66,31,-107,40v-6,-7,-9,-13,-9,-17v-2,-13,50,-46,63,-46v11,-18,-33,-42,-48,-47xm1,-128v10,-33,46,-8,64,6v8,19,86,50,51,85v-40,13,-69,30,-108,40v-6,-7,-8,-12,-8,-16v-2,-14,50,-46,63,-47v7,-13,-9,-20,-19,-30v-10,-9,-20,-15,-30,-17",
w: 252
},
"…": {
d: "244,-24v-1,21,-38,32,-41,3v-2,-19,23,-22,34,-17v0,7,0,15,7,14xm113,-24v0,-22,28,-21,38,-8v5,34,-39,40,-38,8xm35,-2v-10,-2,-36,-17,-18,-29v-1,-15,17,-17,31,-6v7,17,6,33,-13,35",
w: 258
},
" ": {w: 179},
"À": {d: "161,-217v20,53,23,124,54,170v-2,20,-34,9,-42,0v-27,-12,-78,-18,-101,-18v-26,6,-29,51,-54,63v-18,-4,-19,-30,-3,-38v5,-9,15,-16,8,-29v1,-12,23,-9,26,-19v6,-10,11,-20,20,-27r70,-121v12,-4,16,4,22,19xm82,-91v17,3,62,7,86,13v-13,-33,-13,-80,-29,-109v-15,30,-38,63,-57,96xm150,-268v14,10,54,14,37,41v-28,-7,-62,-22,-100,-42v-2,-3,-2,-26,5,-23v16,4,42,17,58,24"},
"Ã": {d: "161,-217v20,53,23,124,54,170v-2,20,-34,9,-42,0v-27,-12,-78,-18,-101,-18v-26,6,-29,51,-54,63v-18,-4,-19,-30,-3,-38v5,-9,15,-16,8,-29v1,-12,23,-9,26,-19v6,-10,11,-20,20,-27r70,-121v12,-4,16,4,22,19xm82,-91v17,3,62,7,86,13v-13,-33,-13,-80,-29,-109v-15,30,-38,63,-57,96xm100,-285v26,-19,54,19,69,22v4,0,15,-5,34,-13v23,-9,22,-17,31,-12v3,11,-9,9,-7,21v-26,20,-46,30,-59,30v-3,3,-50,-26,-49,-29v-12,1,-31,35,-51,32v-3,-8,-5,-14,-5,-18v10,-9,16,-17,37,-33"},
"Õ": {
d: "62,-184v78,-31,249,-50,238,74v-6,65,-102,105,-179,115v-77,-7,-152,-71,-101,-149v2,-5,24,-33,42,-40xm279,-120v14,-38,-47,-64,-85,-61v-20,-9,-41,7,-62,0v-11,7,-54,12,-66,24v0,20,-51,35,-38,66v-1,43,50,67,96,67v44,0,162,-55,155,-96xm116,-270v26,-19,54,19,69,22v4,0,15,-5,34,-13v23,-10,22,-16,31,-12v3,11,-8,9,-7,21v-45,28,-47,42,-88,16v-29,-19,-12,-20,-43,2v-8,5,-12,18,-23,15v-13,-3,-12,-20,-4,-23v4,-6,14,-15,31,-28",
w: 273
},
"Œ": {
d: "247,-243v71,4,161,-7,245,-8v17,0,27,6,27,17v-8,27,-70,14,-104,23v-3,1,-52,0,-65,7r0,4v16,16,17,29,17,65v32,10,74,-14,99,16v-14,25,-76,17,-127,24v-17,18,-55,32,-75,51v85,0,128,-3,204,-11v15,-2,21,11,20,29v-78,24,-177,12,-270,24v-24,3,-24,-29,-48,-15v-46,7,-70,4,-105,-4v-19,-18,-42,-22,-52,-55v-10,-34,0,-47,12,-78v-18,-59,48,-78,105,-84v17,-18,103,-13,117,-5xm125,-45v76,-9,186,-43,209,-105v-26,-67,-137,-83,-217,-54v3,34,-45,25,-60,58v-41,48,5,108,68,101",
w: 492
},
"œ": {
d: "185,-54v25,28,107,-17,104,33v-12,12,-60,14,-87,14v0,0,1,1,2,1v-11,1,-39,-9,-50,-17v-28,17,-75,32,-114,7v-22,-14,-34,-11,-34,-41v0,-36,33,-49,48,-75v29,-16,72,-3,95,11v12,-9,48,-27,59,-26v30,0,64,15,65,40v0,7,-6,20,-20,37v-29,1,-44,11,-68,16xm226,-106v-21,-7,-41,-2,-48,13v14,1,42,-7,48,-13xm132,-87v-21,-35,-94,11,-92,24v-2,14,43,21,61,21v25,0,36,-20,31,-45",
w: 295
},
"": {
d: "6,-66v-8,-72,79,-21,146,-39v37,-10,79,7,111,0v9,8,14,13,14,17v2,26,-72,13,-99,21v-83,4,-124,21,-172,1",
w: 282
},
"—": {
d: "175,-106v86,-9,201,1,286,-1v11,6,13,11,6,30v-118,15,-246,10,-377,10v-25,0,-73,3,-82,-8r-2,-26v11,-13,32,-9,52,-7v38,3,84,-5,117,2",
w: 485
},
"“": {
d: "66,-261v-21,5,-37,51,-22,77v0,4,-2,6,-7,6v-31,-9,-38,-62,-12,-94v12,-15,21,-28,31,-34v16,-1,19,24,22,34v10,-11,22,-32,43,-23v-2,8,4,16,5,19v-6,11,-51,53,-29,74v-12,21,-30,5,-33,-17v-6,-13,9,-28,2,-42",
w: 118
},
"”": {
d: "120,-294v12,3,30,26,19,34v2,15,-40,70,-55,66v-40,-10,10,-51,14,-64v3,-3,8,-31,22,-36xm70,-306v14,3,26,34,16,49v-19,30,-31,45,-58,59v-12,-11,-33,-17,-7,-36v13,-19,36,-27,36,-59v0,-5,9,-13,13,-13",
w: 148
},
"": {d: "73,-262v-10,7,-41,39,-38,69v-15,13,-27,-16,-28,-28v-2,-20,51,-83,66,-83v20,0,25,41,0,42", w: 95},
"": {
d: "74,-300v13,31,-1,99,-44,101v-13,0,-19,-5,-19,-15v6,-10,31,-34,35,-59v2,-11,1,-32,11,-32v6,0,11,2,17,5",
w: 90
},
"÷": {
d: "167,-158v-4,3,-7,9,-10,20v-23,4,-34,-8,-29,-31v14,-6,18,1,39,11xm78,-72v-53,11,-53,12,-69,-15v-1,-12,11,-17,22,-14v71,-13,151,-18,230,-24v11,1,21,16,23,28v-28,20,-90,11,-126,16v-36,5,-62,5,-80,9xm123,-40v19,-17,41,-1,41,17v0,13,-6,19,-17,19v-15,0,-29,-14,-24,-36",
w: 293
},
"◊": {
d: "76,-158v48,-8,64,11,100,36v28,19,-5,39,-22,54v-15,13,-40,32,-48,49v-17,5,-12,0,-27,-16v-6,-6,-86,-31,-68,-53r2,-9v27,-23,48,-44,63,-61xm93,-65v12,-2,35,-31,41,-38v-5,-10,-16,-14,-34,-24v-12,12,-36,29,-40,44v19,11,30,18,33,18",
w: 199
},
"ÿ": {
d: "118,85v-11,11,-11,38,-22,61v-2,-1,-2,31,-17,27v-11,0,-21,-10,-21,-22v20,-66,23,-61,64,-168v-22,1,-38,16,-58,4v-22,4,-51,-16,-51,-42v-11,-13,-7,-59,7,-58v16,1,21,24,22,51v21,33,66,5,94,-7v4,-3,26,-14,38,-29r17,0v23,44,-23,59,-34,102v-6,9,-13,9,-13,26v-15,6,-12,33,-27,48v0,2,1,4,1,7xm158,-136v0,8,-4,13,-12,13v-18,0,-21,-20,-16,-34v18,-1,29,1,28,21xm62,-161v7,3,28,9,27,18v1,8,-8,17,-17,17v-18,0,-26,-24,-10,-35",
w: 190
},
"Ÿ": {
d: "176,-189v35,20,-25,54,-39,72v-26,34,-57,57,-74,104v-10,15,-4,14,-23,3r0,-10v19,-44,27,-46,50,-81v-9,-5,-24,4,-34,4v-38,0,-54,-50,-44,-87v21,-5,18,19,22,35v4,18,15,27,29,27v41,0,60,-39,113,-67xm153,-222v0,8,-3,12,-11,12v-18,0,-21,-19,-16,-33v18,-1,28,2,27,21xm57,-247v8,2,29,9,28,17v0,21,-37,24,-36,1v0,-7,2,-13,8,-18",
w: 135
},
"": {
d: "193,-305v7,6,17,31,3,41v-10,7,-12,13,-21,25v-79,56,-190,209,-197,260r-18,0v-23,-19,9,-70,15,-85v52,-83,121,-179,218,-241",
w: 120
},
"¤": {
d: "308,-133r-200,16v-2,1,-6,4,-10,10v70,-2,144,-14,211,-8v3,0,8,4,13,8v-1,4,-3,9,-9,17v-57,11,-164,6,-219,25v26,32,112,25,173,25v9,0,35,2,35,19v0,9,-4,13,-12,14v-115,12,-146,23,-211,-19v-12,-4,-22,-9,-25,-27v-6,-29,-61,3,-43,-49v17,-1,36,7,42,-12v-32,7,-36,-39,-11,-40v29,14,63,-25,73,-30v52,-25,72,-44,142,-44v23,0,21,41,-1,39v-35,-3,-61,9,-102,31v2,2,5,4,8,4v18,-6,101,-9,115,-9v7,0,55,13,31,30",
w: 312
},
"€": {
d: "308,-133r-200,16v-2,1,-6,4,-10,10v70,-2,144,-14,211,-8v3,0,8,4,13,8v-1,4,-3,9,-9,17v-57,11,-164,6,-219,25v26,32,112,25,173,25v9,0,35,2,35,19v0,9,-4,13,-12,14v-115,12,-146,23,-211,-19v-12,-4,-22,-9,-25,-27v-6,-29,-61,3,-43,-49v17,-1,36,7,42,-12v-32,7,-36,-39,-11,-40v29,14,63,-25,73,-30v52,-25,72,-44,142,-44v23,0,21,41,-1,39v-35,-3,-61,9,-102,31v2,2,5,4,8,4v18,-6,101,-9,115,-9v7,0,55,13,31,30",
w: 312
},
"": {
d: "64,-107v9,17,86,17,87,43v0,11,-4,16,-13,16v-36,-11,-70,-22,-109,-31v-19,-4,-18,-14,-9,-36v59,-56,93,-84,101,-84v17,0,19,20,13,29",
w: 159
},
"": {
d: "41,-181v26,27,112,44,70,91r-82,60v-20,3,-25,-23,-13,-32r70,-51r-66,-46v-5,-6,-4,-28,5,-29v4,2,9,4,16,7",
w: 137
},
"": {
d: "74,-74v-6,-24,-70,8,-68,-27v0,-6,6,-20,20,-18v44,6,45,-9,42,-49v7,-40,26,-114,90,-104v48,-2,63,-1,90,30v11,25,4,14,2,44v-7,17,-54,9,-49,-7r8,-21v-5,-13,-22,-9,-43,-11v-56,-6,-63,45,-67,92v-2,21,5,23,22,22v37,-1,80,-9,113,-1v13,31,-9,82,-22,106v-13,10,-26,-6,-22,-25r11,-46v0,-3,-2,-6,-6,-6v-19,0,-47,3,-83,9v-6,1,-9,4,-8,11r12,59v-1,9,-11,30,-23,18v-18,-18,-15,-59,-19,-76",
w: 272
},
"": {
d: "43,-61v-21,4,-36,2,-39,-15v-4,-35,41,-8,34,-47v4,-59,12,-99,46,-124v11,-42,157,-47,149,13v1,7,-7,15,-13,15v-18,-7,-19,-26,-47,-23v-34,3,-65,6,-79,37v-12,27,-22,52,-21,91v13,9,31,-11,45,-4v32,-15,50,-6,94,-13v12,-30,19,-79,36,-133v1,-5,5,-8,12,-8v44,18,-18,106,-12,144v-9,22,-1,73,-16,104v2,28,-23,28,-37,16v1,-26,9,-48,11,-75v0,-6,-3,-9,-9,-9v-43,0,-83,8,-119,24v8,40,17,33,-7,56v-20,-9,-21,-19,-28,-49",
w: 283
},
"‡": {
d: "102,-284v16,2,42,-2,33,18v-7,15,-42,1,-38,30v3,3,31,1,30,11v4,15,-29,19,-36,24v-2,18,-4,24,-16,29r-25,-26v-25,7,-53,3,-42,-25v4,-10,70,0,51,-22v-17,4,-41,12,-39,-15v-5,-16,39,-18,44,-20v4,-2,7,-10,10,-24v19,-3,23,6,28,20",
w: 145
},
"∙": {d: "57,-77v6,18,-7,21,-19,23v-34,6,-25,-40,-9,-43v18,-3,29,8,28,20", w: 67},
"": {d: "25,63v-26,21,-48,-2,-22,-24v14,-12,35,-40,35,-69v3,-2,3,-11,12,-9v35,17,5,88,-25,102", w: 97},
"„": {
d: "25,63v-26,21,-48,-2,-22,-24v11,-9,36,-41,35,-69v3,-2,4,-12,12,-9v36,14,5,89,-25,102xm84,64v-24,20,-45,-1,-21,-24v21,-20,32,-35,35,-69v3,-2,3,-11,12,-9v36,17,9,86,-26,102",
w: 135
},
"‰": {
d: "398,-131v58,-1,87,13,72,65v-1,30,-66,63,-99,65v-56,3,-99,-58,-62,-102v2,2,5,2,8,2v20,-16,51,-17,81,-30xm202,-279v33,0,94,-24,95,18v-7,31,-33,27,-54,55v-36,32,-71,74,-112,99v-18,18,-40,34,-51,58v-19,14,-25,37,-56,40v-17,2,-25,-29,-10,-40v15,-11,40,-37,52,-52r87,-72v-51,13,-100,6,-116,-27v1,-5,-6,-30,-9,-36v-3,-5,22,-41,27,-39v29,2,16,34,5,49v0,15,14,23,42,23v42,0,59,-31,28,-38v-17,-4,-53,3,-50,-23v0,-7,1,-12,4,-16v16,-9,36,4,49,5v0,0,23,-4,69,-4xm222,-118v33,-2,55,18,50,57v-29,36,-48,45,-96,50v-27,-5,-56,-17,-58,-51v13,-37,64,-43,104,-56xm335,-61v13,44,101,7,108,-31v-11,-3,-20,-4,-30,-4v-18,-1,-82,18,-78,35xm225,-244v-18,0,-29,-1,-46,3v7,15,6,28,0,43v15,-14,34,-30,46,-46xm164,-53v26,5,59,-10,76,-26v-17,-16,-49,2,-67,14v1,8,-8,6,-9,12",
w: 485
},
"Â": {d: "161,-217v20,53,23,124,54,170v-2,20,-34,9,-42,0v-27,-12,-78,-18,-101,-18v-26,6,-29,51,-54,63v-18,-4,-19,-30,-3,-38v5,-9,15,-16,8,-29v1,-12,23,-9,26,-19v6,-10,11,-20,20,-27r70,-121v12,-4,16,4,22,19xm82,-91v17,3,62,7,86,13v-13,-33,-13,-80,-29,-109v-15,30,-38,63,-57,96xm202,-219v-27,-6,-40,-26,-61,-37v-21,7,-39,46,-65,23v-2,-4,-3,-10,-4,-14v19,-4,43,-32,61,-43v27,6,40,22,62,37v12,8,18,17,18,25v0,6,-3,9,-11,9"},
"Ê": {
d: "49,-160v1,-4,-10,-9,-15,-8v-15,-35,32,-30,57,-31r142,-8v2,1,30,7,40,10v-52,16,-133,17,-190,30v-7,9,-12,24,-15,47v26,10,102,-6,141,3v1,3,1,6,2,10v-36,18,-92,12,-149,21v-11,9,-16,41,-16,51v55,-1,111,-21,168,-13v15,-8,48,1,31,18v-53,16,-130,13,-198,29r-39,-8v-4,-19,17,-53,20,-76v-1,0,-7,-11,-9,-18v18,-7,22,-28,30,-57xm199,-211v-27,-6,-39,-26,-60,-37v-21,7,-40,47,-65,22v-2,-7,-2,-7,-4,-13v18,-5,44,-31,61,-43v27,6,41,22,62,37v12,9,18,17,18,25v0,6,-4,9,-12,9",
w: 252
},
"Á": {d: "161,-217v20,53,23,124,54,170v-2,20,-34,9,-42,0v-27,-12,-78,-18,-101,-18v-26,6,-29,51,-54,63v-18,-4,-19,-30,-3,-38v5,-9,15,-16,8,-29v1,-12,23,-9,26,-19v6,-10,11,-20,20,-27r70,-121v12,-4,16,4,22,19xm82,-91v17,3,62,7,86,13v-13,-33,-13,-80,-29,-109v-15,30,-38,63,-57,96xm84,-250v31,-5,83,-53,100,-31v0,5,-11,15,-35,28v-16,5,-51,28,-53,25v-14,1,-16,-11,-12,-22"},
"Ë": {
d: "49,-160v1,-4,-10,-9,-15,-8v-15,-35,32,-30,57,-31r142,-8v2,1,30,7,40,10v-52,16,-133,17,-190,30v-7,9,-12,24,-15,47v26,10,102,-6,141,3v1,3,1,6,2,10v-36,18,-92,12,-149,21v-11,9,-17,41,-17,51v55,0,112,-21,169,-13v15,-8,48,1,31,18v-53,16,-130,13,-198,29r-39,-8v-3,-21,17,-53,20,-76v-1,0,-7,-11,-9,-18v18,-7,22,-28,30,-57xm191,-236v0,8,-4,13,-12,13v-17,0,-19,-19,-16,-34v18,-1,29,1,28,21xm95,-261v7,3,29,9,28,18v0,7,-9,17,-18,17v-18,0,-26,-25,-10,-35",
w: 252
},
"È": {
d: "49,-160v1,-4,-10,-9,-15,-8v-15,-35,32,-30,57,-31r142,-8v2,1,30,7,40,10v-52,16,-133,17,-190,30v-7,9,-12,24,-15,47v26,10,102,-6,141,3v1,3,1,6,2,10v-36,18,-92,12,-149,21v-11,9,-16,41,-16,51v55,-1,111,-21,168,-13v15,-8,48,1,31,18v-53,16,-130,13,-198,29r-39,-8v-4,-19,17,-53,20,-76v-1,0,-7,-11,-9,-18v18,-7,22,-28,30,-57xm184,-236v6,9,5,13,0,23v-28,-7,-62,-21,-100,-41v-3,-2,-3,-27,5,-23v34,11,60,25,95,41",
w: 252
},
"Í": {
d: "26,-5v-9,-6,-9,-12,-9,-36v0,-71,7,-119,21,-144v8,-13,14,-20,19,-20v28,19,-7,89,-10,120v-2,21,-8,47,-14,76v-2,1,-2,0,-7,4xm6,-233v31,-6,83,-53,101,-31v2,11,-80,53,-89,53v-14,1,-14,-11,-12,-22",
w: 104
},
"Î": {
d: "53,-9v-15,7,-16,-3,-16,-32v0,-71,7,-119,21,-144v8,-13,14,-20,19,-20v28,19,-7,89,-10,120v-2,21,-8,47,-14,76xm137,-209v-27,-6,-40,-26,-61,-37v-8,0,-9,4,-13,10v-11,13,-50,37,-56,0v18,-5,43,-32,61,-43v28,5,40,21,62,36v12,9,18,17,18,25v0,6,-4,9,-11,9",
w: 144
},
"Ï": {
d: "33,-5v-9,-6,-9,-12,-9,-36v0,-71,8,-119,22,-144v8,-13,14,-20,19,-20v27,20,-11,87,-10,120r-15,76v-1,1,-4,2,-7,4xm111,-222v0,8,-4,12,-12,12v-18,0,-19,-19,-16,-33v18,-1,29,1,28,21xm15,-247v8,2,29,9,28,17v0,21,-37,24,-36,1v0,-7,2,-13,8,-18",
w: 110
},
"Ì": {
d: "33,-5v-9,-6,-9,-12,-9,-36v0,-71,8,-119,22,-144v8,-13,14,-20,19,-20v27,20,-11,87,-10,120r-15,76v-1,1,-4,2,-7,4xm72,-247v7,6,55,15,36,40v-28,-7,-61,-21,-99,-41v-3,-2,-3,-27,5,-23v18,3,41,17,58,24",
w: 111
},
"Ó": {
d: "62,-184v78,-31,249,-50,238,74v-6,65,-102,105,-179,115v-77,-7,-152,-71,-101,-149v2,-5,24,-33,42,-40xm279,-120v14,-38,-47,-64,-85,-61v-20,-9,-41,7,-62,0v-11,7,-54,12,-66,24v0,20,-51,35,-38,66v-1,43,50,67,96,67v44,0,162,-55,155,-96xm142,-250v27,-11,47,-32,59,-14v2,11,-80,53,-89,53v-13,1,-15,-11,-12,-21v10,-5,24,-11,42,-18",
w: 273
},
"Ô": {
d: "62,-184v78,-31,249,-50,238,74v-6,65,-102,105,-179,115v-77,-7,-152,-71,-101,-149v2,-5,24,-33,42,-40xm279,-120v14,-38,-47,-64,-85,-61v-20,-9,-41,7,-62,0v-11,7,-54,12,-66,24v0,20,-51,35,-38,66v-1,43,50,67,96,67v44,0,162,-55,155,-96xm157,-282v17,18,52,34,54,63v-24,12,-52,-36,-53,-29r-42,34v-23,-4,-6,-31,5,-34v1,1,27,-37,36,-34",
w: 273
},
"": {
d: "231,-188v31,-74,91,-99,188,-116v28,1,6,39,1,51v-20,52,-100,91,-148,126v2,4,6,7,12,10v42,-42,181,-41,166,46v-1,8,-19,8,-28,5v-43,1,-168,42,-106,86v15,16,33,28,61,39v0,10,0,17,-6,22v-8,8,-35,26,-78,51v-52,7,-128,22,-154,-17v-23,-35,-99,-35,-117,-77v-29,-68,25,-149,75,-175v44,-23,89,5,135,13v14,-26,2,-39,-1,-64",
w: 461
},
"Ò": {
d: "62,-184v78,-31,249,-50,238,74v-6,65,-102,105,-179,115v-77,-7,-152,-71,-101,-149v2,-5,24,-33,42,-40xm279,-120v14,-38,-47,-64,-85,-61v-20,-9,-41,7,-62,0v-11,7,-54,12,-66,24v0,20,-51,35,-38,66v-1,43,50,67,96,67v44,0,162,-55,155,-96xm161,-262v14,10,52,13,37,41v-28,-7,-62,-21,-100,-41v-3,-3,-3,-26,5,-24v16,5,42,17,58,24",
w: 273
},
"Ú": {
d: "281,-202v6,67,-30,121,-71,152v-3,14,-47,26,-60,39v-41,20,-110,1,-125,-26v-24,-44,-28,-84,-8,-127v12,-26,23,-38,37,-22v-2,2,-3,5,-3,10v-34,26,-30,116,5,134v22,32,86,-1,109,-8v38,-28,104,-64,97,-149v2,-10,7,-8,19,-3xm194,-265v3,-1,11,4,11,6v3,12,-81,52,-89,54v-14,0,-13,-9,-12,-22",
w: 262
},
"Û": {
d: "281,-202v6,67,-30,121,-71,152v-3,14,-47,26,-60,39v-41,20,-110,1,-125,-26v-24,-44,-28,-84,-8,-127v12,-26,23,-38,37,-22v-2,2,-3,5,-3,10v-34,26,-30,116,5,134v22,32,86,-1,109,-8v38,-28,104,-64,97,-149v2,-10,7,-8,19,-3xm150,-266v24,11,58,27,73,46v0,5,-3,6,-10,6v-28,2,-61,-30,-63,-25v-10,0,-57,40,-69,23v3,-10,-8,-15,8,-19v17,-1,34,-29,61,-31",
w: 262
},
"Ù": {
d: "281,-202v6,67,-30,121,-71,152v-3,14,-47,26,-60,39v-41,20,-110,1,-125,-26v-24,-44,-28,-84,-8,-127v12,-26,23,-38,37,-22v-2,2,-3,5,-3,10v-34,26,-30,116,5,134v22,32,86,-1,109,-8v38,-28,104,-64,97,-149v2,-10,7,-8,19,-3xm151,-243v14,10,54,14,37,41v-28,-7,-61,-22,-99,-42v-3,-2,-4,-25,4,-23v16,5,42,17,58,24",
w: 262
},
"ı": {d: "43,-103v21,4,16,56,11,100v-7,2,-11,1,-20,-5v0,-7,-13,-18,-11,-25v4,-23,-3,-68,20,-70", w: 80},
"ˆ": {
d: "144,-220v-29,0,-41,-27,-63,-39v-8,0,-11,5,-15,11v-17,12,-32,31,-54,13v-2,-5,-3,-9,-4,-14v20,-5,45,-33,64,-45v28,6,43,23,65,38v12,9,19,19,19,27v0,6,-4,9,-12,9",
w: 165
},
"˜": {
d: "47,-300v26,-21,57,19,72,23v4,0,16,-5,36,-14v24,-10,22,-16,32,-13v3,12,-7,11,-7,23v-27,21,-48,32,-62,32v-3,2,-52,-27,-51,-31v-12,-2,-34,40,-54,33v-4,-13,-8,-18,1,-24v5,-7,16,-15,33,-29",
w: 186
},
"¯": {
d: "63,-295v28,-7,73,10,105,7v11,1,6,8,5,19v-37,21,-72,11,-136,11v-23,0,-31,-14,-27,-36v12,-15,40,0,53,-1",
w: 183
},
"˘": {
d: "65,-269v20,-11,45,-31,74,-36v20,30,-42,40,-59,66v-5,6,-11,8,-18,8v-8,-3,-45,-32,-51,-54v5,-24,14,-13,34,1",
w: 158
},
"˙": {d: "23,-302v15,-13,32,1,32,18v1,22,-36,29,-39,4v0,0,3,-7,7,-22", w: 70},
"˚": {
d: "23,-225v-43,-24,-11,-85,41,-78v16,2,31,4,46,17v32,54,-41,86,-87,61xm33,-257v2,20,57,11,57,-6v0,-6,-11,-9,-33,-12v-14,-2,-24,13,-24,18",
w: 123
},
"¸": {
d: "74,16v32,2,49,14,55,36v-3,7,-14,31,-29,33v-28,4,-57,11,-88,14v-19,-6,-13,-31,8,-33v20,-1,59,-5,73,-14v-17,-14,-68,8,-53,-37v9,-10,2,-28,24,-30v8,8,13,17,10,31",
w: 129
},
"˝": {
d: "91,-249v15,-11,38,-53,57,-29v0,9,0,14,-3,23v-2,3,-20,22,-54,55v-5,5,-10,8,-16,8v-17,2,-6,-22,-7,-31v-1,0,-2,0,-4,1v-17,21,-29,31,-50,27v-5,-18,-3,-15,3,-27v23,-27,40,-46,48,-59v7,-12,31,3,29,9v-1,14,-3,24,-13,31v4,4,9,-1,10,-8",
w: 151
},
"˛": {
d: "82,-5v-8,12,-16,55,-21,75v0,4,2,7,7,7v6,0,22,-7,50,-20v8,0,12,7,12,20v-2,22,-6,14,-27,30v-15,12,-26,16,-30,16v-47,-8,-59,-14,-56,-75v8,-27,12,-54,25,-77v19,-21,35,15,40,24",
w: 138
},
"ˇ": {
d: "39,-286v33,46,63,-4,96,-16v6,0,9,6,9,19v0,24,-49,46,-77,46v-32,0,-52,-28,-59,-48v0,-25,23,-17,31,-1",
w: 153
},
"\r": {w: 179}
}
}), function () {
"use strict";
function AssertException(message) {
this.message = message
}
function assert(exp, message) {
if (!exp) throw new AssertException(message)
}
function getCenterX(box) {
return box.x + box.width / 2
}
function getCenterY(box) {
return box.y + box.height / 2
}
var DIAGRAM_MARGIN = 10, ACTOR_MARGIN = 10, ACTOR_PADDING = 10, SIGNAL_MARGIN = 5, SIGNAL_PADDING = 5,
NOTE_MARGIN = 10, NOTE_PADDING = 5, NOTE_OVERLAP = 15, TITLE_MARGIN = 0, TITLE_PADDING = 5, SELF_SIGNAL_WIDTH = 20,
PLACEMENT = Diagram.PLACEMENT, LINETYPE = Diagram.LINETYPE, ARROWTYPE = Diagram.ARROWTYPE,
LINE = {stroke: "#000", "stroke-width": 2}, RECT = {fill: "#fff"};
AssertException.prototype.toString = function () {
return "AssertException: " + this.message
}, String.prototype.trim || (String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, "")
}), Raphael.fn.line = function (x1, y1, x2, y2) {
return assert(_.all([x1, x2, y1, y2], _.isFinite), "x1,x2,y1,y2 must be numeric"), this.path("M{0},{1} L{2},{3}", x1, y1, x2, y2)
}, Raphael.fn.wobble = function (x1, y1, x2, y2) {
assert(_.all([x1, x2, y1, y2], _.isFinite), "x1,x2,y1,y2 must be numeric");
var wobble = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) / 25, r1 = Math.random(), r2 = Math.random(),
xfactor = Math.random() > .5 ? wobble : -wobble, yfactor = Math.random() > .5 ? wobble : -wobble,
p1 = {x: (x2 - x1) * r1 + x1 + xfactor, y: (y2 - y1) * r1 + y1 + yfactor},
p2 = {x: (x2 - x1) * r2 + x1 - xfactor, y: (y2 - y1) * r2 + y1 - yfactor};
return "C" + p1.x + "," + p1.y + " " + p2.x + "," + p2.y + " " + x2 + "," + y2
}, Raphael.fn.text_bbox = function (text, font) {
var p;
font._obj ? p = this.print_center(0, 0, text, font._obj, font["font-size"]) : (p = this.text(0, 0, text), p.attr(font));
var bb = p.getBBox();
return p.remove(), bb
}, Raphael.fn.handRect = function (x, y, w, h) {
return assert(_.all([x, y, w, h], _.isFinite), "x, y, w, h must be numeric"), this.path("M" + x + "," + y + this.wobble(x, y, x + w, y) + this.wobble(x + w, y, x + w, y + h) + this.wobble(x + w, y + h, x, y + h) + this.wobble(x, y + h, x, y)).attr(RECT)
}, Raphael.fn.handLine = function (x1, y1, x2, y2) {
return assert(_.all([x1, x2, y1, y2], _.isFinite), "x1,x2,y1,y2 must be numeric"), this.path("M" + x1 + "," + y1 + this.wobble(x1, y1, x2, y2))
}, Raphael.fn.print_center = function (x, y, string, font, size, letter_spacing) {
var path = this.print(x, y, string, font, size, "baseline", letter_spacing), bb = path.getBBox(),
dx = x - bb.x - bb.width / 2, dy = y - bb.y - bb.height / 2, m = new Raphael.matrix;
return m.translate(dx, dy), path.attr("path", Raphael.mapPath(path.attr("path"), m))
};
var BaseTheme = function (diagram) {
this.init(diagram)
};
_.extend(BaseTheme.prototype, {
init: function (diagram) {
this.diagram = diagram, this._paper = void 0, this._font = void 0, this._title = void 0, this._actors_height = 0, this._signals_height = 0;
var a = this.arrow_types = {};
a[ARROWTYPE.FILLED] = "block", a[ARROWTYPE.OPEN] = "open";
var l = this.line_types = {};
l[LINETYPE.SOLID] = "", l[LINETYPE.DOTTED] = "-"
}, init_paper: function (container) {
this._paper = new Raphael(container, 320, 200)
}, init_font: function () {
}, draw_line: function (x1, y1, x2, y2) {
return this._paper.line(x1, y1, x2, y2)
}, draw_rect: function (x, y, w, h) {
return this._paper.rect(x, y, w, h)
}, draw: function (container) {
var diagram = this.diagram;
this.init_paper(container), this.init_font(), this.layout();
var title_height = this._title ? this._title.height : 0;
this._paper.setStart(), this._paper.setSize(diagram.width, diagram.height);
var y = DIAGRAM_MARGIN + title_height;
this.draw_title(), this.draw_actors(y), this.draw_signals(y + this._actors_height), this._paper.setFinish()
}, layout: function () {
function actor_ensure_distance(a, b, d) {
assert(b > a, "a must be less than or equal to b"), 0 > a ? (b = actors[b], b.x = Math.max(d - b.width / 2, b.x)) : b >= actors.length ? (a = actors[a], a.padding_right = Math.max(d, a.padding_right)) : (a = actors[a], a.distances[b] = Math.max(d, a.distances[b] ? a.distances[b] : 0))
}
var diagram = this.diagram, paper = this._paper, font = this._font, actors = diagram.actors,
signals = diagram.signals;
if (diagram.width = 0, diagram.height = 0, diagram.title) {
var title = this._title = {}, bb = paper.text_bbox(diagram.title, font);
title.text_bb = bb, title.message = diagram.title, title.width = bb.width + 2 * (TITLE_PADDING + TITLE_MARGIN), title.height = bb.height + 2 * (TITLE_PADDING + TITLE_MARGIN), title.x = DIAGRAM_MARGIN, title.y = DIAGRAM_MARGIN, diagram.width += title.width, diagram.height += title.height
}
_.each(actors, function (a) {
var bb = paper.text_bbox(a.name, font);
a.text_bb = bb, a.x = 0, a.y = 0, a.width = bb.width + 2 * (ACTOR_PADDING + ACTOR_MARGIN), a.height = bb.height + 2 * (ACTOR_PADDING + ACTOR_MARGIN), a.distances = [], a.padding_right = 0, this._actors_height = Math.max(a.height, this._actors_height)
}, this), _.each(signals, function (s) {
var a, b, bb = paper.text_bbox(s.message, font);
s.text_bb = bb, s.width = bb.width, s.height = bb.height;
var extra_width = 0;
if ("Signal" == s.type) s.width += 2 * (SIGNAL_MARGIN + SIGNAL_PADDING), s.height += 2 * (SIGNAL_MARGIN + SIGNAL_PADDING), s.isSelf() ? (a = s.actorA.index, b = a + 1, s.width += SELF_SIGNAL_WIDTH) : (a = Math.min(s.actorA.index, s.actorB.index), b = Math.max(s.actorA.index, s.actorB.index)); else {
if ("Note" != s.type) throw new Error("Unhandled signal type:" + s.type);
if (s.width += 2 * (NOTE_MARGIN + NOTE_PADDING), s.height += 2 * (NOTE_MARGIN + NOTE_PADDING), extra_width = 2 * ACTOR_MARGIN, s.placement == PLACEMENT.LEFTOF) b = s.actor.index, a = b - 1; else if (s.placement == PLACEMENT.RIGHTOF) a = s.actor.index, b = a + 1; else if (s.placement == PLACEMENT.OVER && s.hasManyActors()) a = Math.min(s.actor[0].index, s.actor[1].index), b = Math.max(s.actor[0].index, s.actor[1].index), extra_width = -(2 * NOTE_PADDING + 2 * NOTE_OVERLAP); else if (s.placement == PLACEMENT.OVER) return a = s.actor.index, actor_ensure_distance(a - 1, a, s.width / 2), actor_ensure_distance(a, a + 1, s.width / 2), this._signals_height += s.height, void 0
}
actor_ensure_distance(a, b, s.width + extra_width), this._signals_height += s.height
}, this);
var actors_x = 0;
return _.each(actors, function (a) {
a.x = Math.max(actors_x, a.x), _.each(a.distances, function (distance, b) {
"undefined" != typeof distance && (b = actors[b], distance = Math.max(distance, a.width / 2, b.width / 2), b.x = Math.max(b.x, a.x + a.width / 2 + distance - b.width / 2))
}), actors_x = a.x + a.width + a.padding_right
}, this), diagram.width = Math.max(actors_x, diagram.width), diagram.width += 2 * DIAGRAM_MARGIN, diagram.height += 2 * DIAGRAM_MARGIN + 2 * this._actors_height + this._signals_height, this
}, draw_title: function () {
var title = this._title;
title && this.draw_text_box(title, title.message, TITLE_MARGIN, TITLE_PADDING, this._font)
}, draw_actors: function (offsetY) {
var y = offsetY;
_.each(this.diagram.actors, function (a) {
this.draw_actor(a, y, this._actors_height), this.draw_actor(a, y + this._actors_height + this._signals_height, this._actors_height);
var aX = getCenterX(a),
line = this.draw_line(aX, y + this._actors_height - ACTOR_MARGIN, aX, y + this._actors_height + ACTOR_MARGIN + this._signals_height);
line.attr(LINE)
}, this)
}, draw_actor: function (actor, offsetY, height) {
actor.y = offsetY, actor.height = height, this.draw_text_box(actor, actor.name, ACTOR_MARGIN, ACTOR_PADDING, this._font)
}, draw_signals: function (offsetY) {
var y = offsetY;
_.each(this.diagram.signals, function (s) {
"Signal" == s.type ? s.isSelf() ? this.draw_self_signal(s, y) : this.draw_signal(s, y) : "Note" == s.type && this.draw_note(s, y), y += s.height
}, this)
}, draw_self_signal: function (signal, offsetY) {
assert(signal.isSelf(), "signal must be a self signal");
var text_bb = signal.text_bb, aX = getCenterX(signal.actorA),
x = aX + SELF_SIGNAL_WIDTH + SIGNAL_PADDING - text_bb.x, y = offsetY + signal.height / 2;
this.draw_text(x, y, signal.message, this._font);
var line, attr = _.extend({}, LINE, {"stroke-dasharray": this.line_types[signal.linetype]}),
y1 = offsetY + SIGNAL_MARGIN, y2 = y1 + signal.height - SIGNAL_MARGIN;
line = this.draw_line(aX, y1, aX + SELF_SIGNAL_WIDTH, y1), line.attr(attr), line = this.draw_line(aX + SELF_SIGNAL_WIDTH, y1, aX + SELF_SIGNAL_WIDTH, y2), line.attr(attr), line = this.draw_line(aX + SELF_SIGNAL_WIDTH, y2, aX, y2), attr["arrow-end"] = this.arrow_types[signal.arrowtype] + "-wide-long", line.attr(attr)
}, draw_signal: function (signal, offsetY) {
var aX = getCenterX(signal.actorA), bX = getCenterX(signal.actorB), x = (bX - aX) / 2 + aX,
y = offsetY + SIGNAL_MARGIN + 2 * SIGNAL_PADDING;
this.draw_text(x, y, signal.message, this._font), y = offsetY + signal.height - SIGNAL_MARGIN - SIGNAL_PADDING;
var line = this.draw_line(aX, y, bX, y);
line.attr(LINE), line.attr({
"arrow-end": this.arrow_types[signal.arrowtype] + "-wide-long",
"stroke-dasharray": this.line_types[signal.linetype]
})
}, draw_note: function (note, offsetY) {
note.y = offsetY;
var actorA = note.hasManyActors() ? note.actor[0] : note.actor, aX = getCenterX(actorA);
switch (note.placement) {
case PLACEMENT.RIGHTOF:
note.x = aX + ACTOR_MARGIN;
break;
case PLACEMENT.LEFTOF:
note.x = aX - ACTOR_MARGIN - note.width;
break;
case PLACEMENT.OVER:
if (note.hasManyActors()) {
var bX = getCenterX(note.actor[1]), overlap = NOTE_OVERLAP + NOTE_PADDING;
note.x = aX - overlap, note.width = bX + overlap - note.x
} else note.x = aX - note.width / 2;
break;
default:
throw new Error("Unhandled note placement:" + note.placement)
}
this.draw_text_box(note, note.message, NOTE_MARGIN, NOTE_PADDING, this._font)
}, draw_text: function (x, y, text, font) {
var t, paper = this._paper, f = font || {};
f._obj ? t = paper.print_center(x, y, text, f._obj, f["font-size"]) : (t = paper.text(x, y, text), t.attr(f));
var bb = t.getBBox(), r = paper.rect(bb.x, bb.y, bb.width, bb.height);
r.attr({fill: "#fff", stroke: "none"}), t.toFront()
}, draw_text_box: function (box, text, margin, padding, font) {
var x = box.x + margin, y = box.y + margin, w = box.width - 2 * margin, h = box.height - 2 * margin,
rect = this.draw_rect(x, y, w, h);
rect.attr(LINE), x = getCenterX(box), y = getCenterY(box), this.draw_text(x, y, text, font)
}
});
var RaphaëlTheme = function (diagram) {
this.init(diagram)
};
_.extend(RaphaëlTheme.prototype, BaseTheme.prototype, {
init_font: function () {
this._font = {"font-size": 16, "font-family": "Andale Mono, monospace"}
}
});
var HandRaphaëlTheme = function (diagram) {
this.init(diagram)
};
_.extend(HandRaphaëlTheme.prototype, BaseTheme.prototype, {
init_font: function () {
this._font = {"font-size": 16, "font-family": "daniel"}, this._font._obj = this._paper.getFont("daniel")
}, draw_line: function (x1, y1, x2, y2) {
return this._paper.handLine(x1, y1, x2, y2)
}, draw_rect: function (x, y, w, h) {
return this._paper.handRect(x, y, w, h)
}
});
var themes = {simple: RaphaëlTheme, hand: HandRaphaëlTheme};
Diagram.prototype.drawSVG = function (container, options) {
var default_options = {theme: "hand"};
if (options = _.defaults(options || {}, default_options), !(options.theme in themes)) throw new Error("Unsupported theme: " + options.theme);
var drawing = new themes[options.theme](this);
drawing.draw(container)
}
}();
// flowchart, v1.3.4
// Copyright (c)2014 Adriano Raiano (adrai).
// Distributed under MIT license
// http://adrai.github.io/flowchart.js
!function () {
function a(b, c) {
if (!b || "function" == typeof b) return c;
var d = {};
for (var e in c) d[e] = c[e];
for (e in b) b[e] && (d[e] = "object" == typeof d[e] ? a(d[e], b[e]) : b[e]);
return d
}
function b(a, b) {
if ("function" == typeof Object.create) a.super_ = b, a.prototype = Object.create(b.prototype, {
constructor: {
value: a,
enumerable: !1,
writable: !0,
configurable: !0
}
}); else {
a.super_ = b;
var c = function () {
};
c.prototype = b.prototype, a.prototype = new c, a.prototype.constructor = a
}
}
function c(a, b, c) {
var d, e, f = "M{0},{1}";
for (d = 2, e = 2 * c.length + 2; e > d; d += 2) f += " L{" + d + "},{" + (d + 1) + "}";
var g = [b.x, b.y];
for (d = 0, e = c.length; e > d; d++) g.push(c[d].x), g.push(c[d].y);
var h = a.paper.path(f, g);
h.attr("stroke", a.options["element-color"]), h.attr("stroke-width", a.options["line-width"]);
var i = a.options.font, j = a.options["font-family"], k = a.options["font-weight"];
return i && h.attr({font: i}), j && h.attr({"font-family": j}), k && h.attr({"font-weight": k}), h
}
function d(a, b, c, d) {
var e, f;
"[object Array]" !== Object.prototype.toString.call(c) && (c = [c]);
var g = "M{0},{1}";
for (e = 2, f = 2 * c.length + 2; f > e; e += 2) g += " L{" + e + "},{" + (e + 1) + "}";
var h = [b.x, b.y];
for (e = 0, f = c.length; f > e; e++) h.push(c[e].x), h.push(c[e].y);
var i = a.paper.path(g, h);
i.attr({
stroke: a.options["line-color"],
"stroke-width": a.options["line-width"],
"arrow-end": a.options["arrow-end"]
});
var j = a.options.font, k = a.options["font-family"], l = a.options["font-weight"];
if (j && i.attr({font: j}), k && i.attr({"font-family": k}), l && i.attr({"font-weight": l}), d) {
var m = !1, n = a.paper.text(0, 0, d), o = !1, p = c[0];
b.y === p.y && (o = !0);
var q = 0, r = 0;
m ? (q = b.x > p.x ? b.x - (b.x - p.x) / 2 : p.x - (p.x - b.x) / 2, r = b.y > p.y ? b.y - (b.y - p.y) / 2 : p.y - (p.y - b.y) / 2, o ? (q -= n.getBBox().width / 2, r -= a.options["text-margin"]) : (q += a.options["text-margin"], r -= n.getBBox().height / 2)) : (q = b.x, r = b.y, o ? (q += a.options["text-margin"] / 2, r -= a.options["text-margin"]) : (q += a.options["text-margin"] / 2, r += a.options["text-margin"])), n.attr({
"text-anchor": "start",
"font-size": a.options["font-size"],
fill: a.options["font-color"],
x: q,
y: r
}), j && n.attr({font: j}), k && n.attr({"font-family": k}), l && n.attr({"font-weight": l})
}
return i
}
function e(a, b, c, d, e, f, g, h) {
var i, j, k, l, m, n = {x: null, y: null, onLine1: !1, onLine2: !1};
return i = (h - f) * (c - a) - (g - e) * (d - b), 0 === i ? n : (j = b - f, k = a - e, l = (g - e) * j - (h - f) * k, m = (c - a) * j - (d - b) * k, j = l / i, k = m / i, n.x = a + j * (c - a), n.y = b + j * (d - b), j > 0 && 1 > j && (n.onLine1 = !0), k > 0 && 1 > k && (n.onLine2 = !0), n)
}
function f(a, b) {
b = b || {}, this.paper = new Raphael(a), this.options = r.defaults(b, q), this.symbols = [], this.lines = [], this.start = null
}
function g(a, b, c) {
this.chart = a, this.group = this.chart.paper.set(), this.symbol = c, this.connectedTo = [], this.symbolType = b.symbolType, this.flowstate = b.flowstate || "future", this.next_direction = b.next && b.direction_next ? b.direction_next : void 0, this.text = this.chart.paper.text(0, 0, b.text), b.key && (this.text.node.id = b.key + "t"), this.text.node.setAttribute("class", this.getAttr("class") + "t"), this.text.attr({
"text-anchor": "start",
x: this.getAttr("text-margin"),
fill: this.getAttr("font-color"),
"font-size": this.getAttr("font-size")
});
var d = this.getAttr("font"), e = this.getAttr("font-family"), f = this.getAttr("font-weight");
d && this.text.attr({font: d}), e && this.text.attr({"font-family": e}), f && this.text.attr({"font-weight": f}), b.link && this.text.attr("href", b.link), b.target && this.text.attr("target", b.target);
var g = this.getAttr("maxWidth");
if (g) {
for (var h = b.text.split(" "), i = "", j = 0, k = h.length; k > j; j++) {
var l = h[j];
this.text.attr("text", i + " " + l), i += this.text.getBBox().width > g ? "\n" + l : " " + l
}
this.text.attr("text", i.substring(1))
}
if (this.group.push(this.text), c) {
var m = this.getAttr("text-margin");
c.attr({
fill: this.getAttr("fill"),
stroke: this.getAttr("element-color"),
"stroke-width": this.getAttr("line-width"),
width: this.text.getBBox().width + 2 * m,
height: this.text.getBBox().height + 2 * m
}), c.node.setAttribute("class", this.getAttr("class")), b.link && c.attr("href", b.link), b.target && c.attr("target", b.target), b.key && (c.node.id = b.key), this.group.push(c), c.insertBefore(this.text), this.text.attr({y: c.getBBox().height / 2}), this.initialize()
}
}
function h(a, b) {
var c = a.paper.rect(0, 0, 0, 0, 20);
b = b || {}, b.text = b.text || "Start", g.call(this, a, b, c)
}
function i(a, b) {
var c = a.paper.rect(0, 0, 0, 0, 20);
b = b || {}, b.text = b.text || "End", g.call(this, a, b, c)
}
function j(a, b) {
var c = a.paper.rect(0, 0, 0, 0);
b = b || {}, g.call(this, a, b, c)
}
function k(a, b) {
var c = a.paper.rect(0, 0, 0, 0);
b = b || {}, g.call(this, a, b, c), c.attr({width: this.text.getBBox().width + 4 * this.getAttr("text-margin")}), this.text.attr({x: 2 * this.getAttr("text-margin")});
var d = a.paper.rect(0, 0, 0, 0);
d.attr({
x: this.getAttr("text-margin"),
stroke: this.getAttr("element-color"),
"stroke-width": this.getAttr("line-width"),
width: this.text.getBBox().width + 2 * this.getAttr("text-margin"),
height: this.text.getBBox().height + 2 * this.getAttr("text-margin"),
fill: this.getAttr("fill")
}), b.key && (d.node.id = b.key + "i");
var e = this.getAttr("font"), f = this.getAttr("font-family"), h = this.getAttr("font-weight");
e && d.attr({font: e}), f && d.attr({"font-family": f}), h && d.attr({"font-weight": h}), b.link && d.attr("href", b.link), b.target && d.attr("target", b.target), this.group.push(d), d.insertBefore(this.text), this.initialize()
}
function l(a, b) {
b = b || {}, g.call(this, a, b), this.textMargin = this.getAttr("text-margin"), this.text.attr({x: 3 * this.textMargin});
var d = this.text.getBBox().width + 4 * this.textMargin, e = this.text.getBBox().height + 2 * this.textMargin,
f = this.textMargin, h = e / 2, i = {x: f, y: h}, j = [{x: f - this.textMargin, y: e}, {
x: f - this.textMargin + d,
y: e
}, {x: f - this.textMargin + d + 2 * this.textMargin, y: 0}, {
x: f - this.textMargin + 2 * this.textMargin,
y: 0
}, {x: f, y: h}], k = c(a, i, j);
k.attr({
stroke: this.getAttr("element-color"),
"stroke-width": this.getAttr("line-width"),
fill: this.getAttr("fill")
}), b.link && k.attr("href", b.link), b.target && k.attr("target", b.target), b.key && (k.node.id = b.key), k.node.setAttribute("class", this.getAttr("class")), this.text.attr({y: k.getBBox().height / 2}), this.group.push(k), k.insertBefore(this.text), this.initialize()
}
function m(a, b) {
b = b || {}, g.call(this, a, b), this.textMargin = this.getAttr("text-margin"), this.yes_direction = "bottom", this.no_direction = "right", b.yes && b.direction_yes && b.no && !b.direction_no ? "right" === b.direction_yes ? (this.no_direction = "bottom", this.yes_direction = "right") : (this.no_direction = "right", this.yes_direction = "bottom") : b.yes && !b.direction_yes && b.no && b.direction_no ? "right" === b.direction_no ? (this.yes_direction = "bottom", this.no_direction = "right") : (this.yes_direction = "right", this.no_direction = "bottom") : (this.yes_direction = "bottom", this.no_direction = "right"), this.yes_direction = this.yes_direction || "bottom", this.no_direction = this.no_direction || "right", this.text.attr({x: 2 * this.textMargin});
var d = this.text.getBBox().width + 3 * this.textMargin;
d += d / 2;
var e = this.text.getBBox().height + 2 * this.textMargin;
e += e / 2, e = Math.max(.5 * d, e);
var f = d / 4, h = e / 4;
this.text.attr({x: f + this.textMargin / 2});
var i = {x: f, y: h}, j = [{x: f - d / 4, y: h + e / 4}, {x: f - d / 4 + d / 2, y: h + e / 4 + e / 2}, {
x: f - d / 4 + d,
y: h + e / 4
}, {x: f - d / 4 + d / 2, y: h + e / 4 - e / 2}, {x: f - d / 4, y: h + e / 4}], k = c(a, i, j);
k.attr({
stroke: this.getAttr("element-color"),
"stroke-width": this.getAttr("line-width"),
fill: this.getAttr("fill")
}), b.link && k.attr("href", b.link), b.target && k.attr("target", b.target), b.key && (k.node.id = b.key), k.node.setAttribute("class", this.getAttr("class")), this.text.attr({y: k.getBBox().height / 2}), this.group.push(k), k.insertBefore(this.text), this.initialize()
}
function n(a) {
function b(a) {
var b = a.indexOf("(") + 1, c = a.indexOf(")");
return b >= 0 && c >= 0 ? d.symbols[a.substring(0, b - 1)] : d.symbols[a]
}
function c(a) {
var b = "next", c = a.indexOf("(") + 1, d = a.indexOf(")");
return c >= 0 && d >= 0 && (b = D.substring(c, d), b.indexOf(",") < 0 && "yes" !== b && "no" !== b && (b = "next, " + b)), b
}
a = a || "", a = a.trim();
for (var d = {
symbols: {}, start: null, drawSVG: function (a, b) {
function c(a) {
if (g[a.key]) return g[a.key];
switch (a.symbolType) {
case"start":
g[a.key] = new h(e, a);
break;
case"end":
g[a.key] = new i(e, a);
break;
case"operation":
g[a.key] = new j(e, a);
break;
case"inputoutput":
g[a.key] = new l(e, a);
break;
case"subroutine":
g[a.key] = new k(e, a);
break;
case"condition":
g[a.key] = new m(e, a);
break;
default:
return new Error("Wrong symbol type!")
}
return g[a.key]
}
var d = this;
this.diagram && this.diagram.clean();
var e = new f(a, b);
this.diagram = e;
var g = {};
!function n(a, b, f) {
var g = c(a);
return d.start === a ? e.startWith(g) : b && f && !b.pathOk && (b instanceof m ? (f.yes === a && b.yes(g), f.no === a && b.no(g)) : b.then(g)), g.pathOk ? g : (g instanceof m ? (a.yes && n(a.yes, g, a), a.no && n(a.no, g, a)) : a.next && n(a.next, g, a), g)
}(this.start), e.render()
}, clean: function () {
this.diagram.clean()
}
}, e = [], g = 0, n = 1, o = a.length; o > n; n++) if ("\n" === a[n] && "\\" !== a[n - 1]) {
var p = a.substring(g, n);
g = n + 1, e.push(p.replace(/\\\n/g, "\n"))
}
g < a.length && e.push(a.substr(g));
for (var q = 1, r = e.length; r > q;) {
var s = e[q];
s.indexOf(": ") < 0 && s.indexOf("(") < 0 && s.indexOf(")") < 0 && s.indexOf("->") < 0 && s.indexOf("=>") < 0 ? (e[q - 1] += "\n" + s, e.splice(q, 1), r--) : q++
}
for (; e.length > 0;) {
var t = e.splice(0, 1)[0];
if (t.indexOf("=>") >= 0) {
var u, v = t.split("=>"),
w = {key: v[0], symbolType: v[1], text: null, link: null, target: null, flowstate: null};
if (w.symbolType.indexOf(": ") >= 0 && (u = w.symbolType.split(": "), w.symbolType = u[0], w.text = u[1]), w.text && w.text.indexOf(":>") >= 0 ? (u = w.text.split(":>"), w.text = u[0], w.link = u[1]) : w.symbolType.indexOf(":>") >= 0 && (u = w.symbolType.split(":>"), w.symbolType = u[0], w.link = u[1]), w.symbolType.indexOf("\n") >= 0 && (w.symbolType = w.symbolType.split("\n")[0]), w.link) {
var x = w.link.indexOf("[") + 1, y = w.link.indexOf("]");
x >= 0 && y >= 0 && (w.target = w.link.substring(x, y), w.link = w.link.substring(0, x - 1))
}
if (w.text && w.text.indexOf("|") >= 0) {
var z = w.text.split("|");
w.text = z[0], w.flowstate = z[1].trim()
}
d.symbols[w.key] = w
} else if (t.indexOf("->") >= 0) for (var A = t.split("->"), B = 0, C = A.length; C > B; B++) {
var D = A[B], E = b(D), F = c(D), G = null;
if (F.indexOf(",") >= 0) {
var H = F.split(",");
F = H[0], G = H[1].trim()
}
if (d.start || (d.start = E), C > B + 1) {
var I = A[B + 1];
E[F] = b(I), E["direction_" + F] = G, G = null
}
}
}
return d
}
Array.prototype.indexOf || (Array.prototype.indexOf = function (a) {
"use strict";
if (null === this) throw new TypeError;
var b = Object(this), c = b.length >>> 0;
if (0 === c) return -1;
var d = 0;
if (arguments.length > 0 && (d = Number(arguments[1]), d != d ? d = 0 : 0 !== d && 1 / 0 != d && d != -1 / 0 && (d = (d > 0 || -1) * Math.floor(Math.abs(d)))), d >= c) return -1;
for (var e = d >= 0 ? d : Math.max(c - Math.abs(d), 0); c > e; e++) if (e in b && b[e] === a) return e;
return -1
}), Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function (a) {
"use strict";
if (null === this) throw new TypeError;
var b = Object(this), c = b.length >>> 0;
if (0 === c) return -1;
var d = c;
arguments.length > 1 && (d = Number(arguments[1]), d != d ? d = 0 : 0 !== d && d != 1 / 0 && d != -(1 / 0) && (d = (d > 0 || -1) * Math.floor(Math.abs(d))));
for (var e = d >= 0 ? Math.min(d, c - 1) : c - Math.abs(d); e >= 0; e--) if (e in b && b[e] === a) return e;
return -1
}), String.prototype.trim || (String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, "")
});
var o = this, p = {};
"undefined" != typeof module && module.exports ? module.exports = p : o.flowchart = o.flowchart || p;
var q = {
x: 0,
y: 0,
"line-width": 3,
"line-length": 50,
"text-margin": 10,
"font-size": 14,
"font-color": "black",
"line-color": "black",
"element-color": "black",
fill: "white",
"yes-text": "yes",
"no-text": "no",
"arrow-end": "block",
"class": "flowchart",
symbols: {start: {}, end: {}, condition: {}, inputoutput: {}, operation: {}, subroutine: {}}
}, r = {defaults: a, inherits: b};
f.prototype.handle = function (a) {
this.symbols.indexOf(a) <= -1 && this.symbols.push(a);
var b = this;
return a instanceof m ? (a.yes = function (c) {
return a.yes_symbol = c, a.no_symbol && (a.pathOk = !0), b.handle(c)
}, a.no = function (c) {
return a.no_symbol = c, a.yes_symbol && (a.pathOk = !0), b.handle(c)
}) : a.then = function (c) {
return a.next = c, a.pathOk = !0, b.handle(c)
}, a
}, f.prototype.startWith = function (a) {
return this.start = a, this.handle(a)
}, f.prototype.render = function () {
var a, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0;
for (d = 0, e = this.symbols.length; e > d; d++) a = this.symbols[d], a.width > b && (b = a.width), a.height > c && (c = a.height);
for (d = 0, e = this.symbols.length; e > d; d++) a = this.symbols[d], a.shiftX(this.options.x + (b - a.width) / 2 + this.options["line-width"]), a.shiftY(this.options.y + (c - a.height) / 2 + this.options["line-width"]);
for (this.start.render(), d = 0, e = this.symbols.length; e > d; d++) a = this.symbols[d], a.renderLines();
for (f = this.maxXFromLine, d = 0, e = this.symbols.length; e > d; d++) {
a = this.symbols[d];
var h = a.getX() + a.width, i = a.getY() + a.height;
h > f && (f = h), i > g && (g = i)
}
this.paper.setSize(f + this.options["line-width"], g + this.options["line-width"])
}, f.prototype.clean = function () {
if (this.paper) {
var a = this.paper.canvas;
a.parentNode.removeChild(a)
}
}, g.prototype.getAttr = function (a) {
if (!this.chart) return void 0;
var b, c = this.chart.options ? this.chart.options[a] : void 0,
d = this.chart.options.symbols ? this.chart.options.symbols[this.symbolType][a] : void 0;
return this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate] && (b = this.chart.options.flowstate[this.flowstate][a]), b || d || c
}, g.prototype.initialize = function () {
this.group.transform("t" + this.getAttr("line-width") + "," + this.getAttr("line-width")), this.width = this.group.getBBox().width, this.height = this.group.getBBox().height
}, g.prototype.getCenter = function () {
return {x: this.getX() + this.width / 2, y: this.getY() + this.height / 2}
}, g.prototype.getX = function () {
return this.group.getBBox().x
}, g.prototype.getY = function () {
return this.group.getBBox().y
}, g.prototype.shiftX = function (a) {
this.group.transform("t" + (this.getX() + a) + "," + this.getY())
}, g.prototype.setX = function (a) {
this.group.transform("t" + a + "," + this.getY())
}, g.prototype.shiftY = function (a) {
this.group.transform("t" + this.getX() + "," + (this.getY() + a))
}, g.prototype.setY = function (a) {
this.group.transform("t" + this.getX() + "," + a)
}, g.prototype.getTop = function () {
var a = this.getY(), b = this.getX() + this.width / 2;
return {x: b, y: a}
}, g.prototype.getBottom = function () {
var a = this.getY() + this.height, b = this.getX() + this.width / 2;
return {x: b, y: a}
}, g.prototype.getLeft = function () {
var a = this.getY() + this.group.getBBox().height / 2, b = this.getX();
return {x: b, y: a}
}, g.prototype.getRight = function () {
var a = this.getY() + this.group.getBBox().height / 2, b = this.getX() + this.group.getBBox().width;
return {x: b, y: a}
}, g.prototype.render = function () {
if (this.next) {
var a = this.getAttr("line-length");
if ("right" === this.next_direction) {
var b = this.getRight();
if (this.next.getLeft(), !this.next.isPositioned) {
this.next.setY(b.y - this.next.height / 2), this.next.shiftX(this.group.getBBox().x + this.width + a);
var c = this;
!function e() {
for (var b, d = !1, f = 0, g = c.chart.symbols.length; g > f; f++) {
b = c.chart.symbols[f];
var h = Math.abs(b.getCenter().x - c.next.getCenter().x);
if (b.getCenter().y > c.next.getCenter().y && h <= c.next.width / 2) {
d = !0;
break
}
}
d && (c.next.setX(b.getX() + b.width + a), e())
}(), this.next.isPositioned = !0, this.next.render()
}
} else {
var d = this.getBottom();
this.next.getTop(), this.next.isPositioned || (this.next.shiftY(this.getY() + this.height + a), this.next.setX(d.x - this.next.width / 2), this.next.isPositioned = !0, this.next.render())
}
}
}, g.prototype.renderLines = function () {
this.next && (this.next_direction ? this.drawLineTo(this.next, "", this.next_direction) : this.drawLineTo(this.next))
}, g.prototype.drawLineTo = function (a, b, c) {
this.connectedTo.indexOf(a) < 0 && this.connectedTo.push(a);
var f, g = this.getCenter().x, h = this.getCenter().y, i = (this.getTop(), this.getRight()), j = this.getBottom(),
k = this.getLeft(), l = a.getCenter().x, m = a.getCenter().y, n = a.getTop(), o = a.getRight(),
p = (a.getBottom(), a.getLeft()), q = g === l, r = h === m, s = m > h, t = h > m, u = g > l, v = l > g, w = 0,
x = this.getAttr("line-length"), y = this.getAttr("line-width");
if (c && "bottom" !== c || !q || !s) if (c && "right" !== c || !r || !v) if (c && "left" !== c || !r || !u) if (c && "right" !== c || !q || !t) if (c && "right" !== c || !q || !s) if (c && "bottom" !== c || !u) if (c && "bottom" !== c || !v) if (c && "right" === c && u) f = d(this.chart, i, [{
x: i.x + x / 2,
y: i.y
}, {x: i.x + x / 2, y: n.y - x / 2}, {x: n.x, y: n.y - x / 2}, {
x: n.x,
y: n.y
}], b), this.rightStart = !0, a.topEnd = !0, w = i.x + x / 2; else if (c && "right" === c && v) f = d(this.chart, i, [{
x: n.x,
y: i.y
}, {
x: n.x,
y: n.y
}], b), this.rightStart = !0, a.topEnd = !0, w = i.x + x / 2; else if (c && "bottom" === c && q && t) f = d(this.chart, j, [{
x: j.x,
y: j.y + x / 2
}, {x: i.x + x / 2, y: j.y + x / 2}, {x: i.x + x / 2, y: n.y - x / 2}, {x: n.x, y: n.y - x / 2}, {
x: n.x,
y: n.y
}], b), this.bottomStart = !0, a.topEnd = !0, w = j.x + x / 2; else if ("left" === c && q && t) {
var z = k.x - x / 2;
p.x < k.x && (z = p.x - x / 2), f = d(this.chart, k, [{x: z, y: k.y}, {x: z, y: n.y - x / 2}, {
x: n.x,
y: n.y - x / 2
}, {x: n.x, y: n.y}], b), this.leftStart = !0, a.topEnd = !0, w = k.x
} else "left" === c && (f = d(this.chart, k, [{x: n.x + (k.x - n.x) / 2, y: k.y}, {
x: n.x + (k.x - n.x) / 2,
y: n.y - x / 2
}, {x: n.x, y: n.y - x / 2}, {
x: n.x,
y: n.y
}], b), this.leftStart = !0, a.topEnd = !0, w = k.x); else f = d(this.chart, j, [{
x: j.x,
y: j.y + x / 2
}, {x: j.x + (j.x - n.x) / 2, y: j.y + x / 2}, {x: j.x + (j.x - n.x) / 2, y: n.y - x / 2}, {
x: n.x,
y: n.y - x / 2
}, {
x: n.x,
y: n.y
}], b), this.bottomStart = !0, a.topEnd = !0, w = j.x + (j.x - n.x) / 2; else f = this.leftEnd && t ? d(this.chart, j, [{
x: j.x,
y: j.y + x / 2
}, {x: j.x + (j.x - n.x) / 2, y: j.y + x / 2}, {x: j.x + (j.x - n.x) / 2, y: n.y - x / 2}, {
x: n.x,
y: n.y - x / 2
}, {x: n.x, y: n.y}], b) : d(this.chart, j, [{x: j.x, y: n.y - x / 2}, {x: n.x, y: n.y - x / 2}, {
x: n.x,
y: n.y
}], b), this.bottomStart = !0, a.topEnd = !0, w = j.x + (j.x - n.x) / 2; else f = d(this.chart, i, [{
x: i.x + x / 2,
y: i.y
}, {x: i.x + x / 2, y: n.y - x / 2}, {x: n.x, y: n.y - x / 2}, {
x: n.x,
y: n.y
}], b), this.rightStart = !0, a.topEnd = !0, w = i.x + x / 2; else f = d(this.chart, i, [{
x: i.x + x / 2,
y: i.y
}, {x: i.x + x / 2, y: n.y - x / 2}, {x: n.x, y: n.y - x / 2}, {
x: n.x,
y: n.y
}], b), this.rightStart = !0, a.topEnd = !0, w = i.x + x / 2; else f = d(this.chart, k, o, b), this.leftStart = !0, a.rightEnd = !0, w = o.x; else f = d(this.chart, i, p, b), this.rightStart = !0, a.leftEnd = !0, w = p.x; else f = d(this.chart, j, n, b), this.bottomStart = !0, a.topEnd = !0, w = j.x;
if (f) {
for (var A = 0, B = this.chart.lines.length; B > A; A++) for (var C, D = this.chart.lines[A], E = D.attr("path"), F = f.attr("path"), G = 0, H = E.length - 1; H > G; G++) {
var I = [];
I.push(["M", E[G][1], E[G][2]]), I.push(["L", E[G + 1][1], E[G + 1][2]]);
for (var J = I[0][1], K = I[0][2], L = I[1][1], M = I[1][2], N = 0, O = F.length - 1; O > N; N++) {
var P = [];
P.push(["M", F[N][1], F[N][2]]), P.push(["L", F[N + 1][1], F[N + 1][2]]);
var Q = P[0][1], R = P[0][2], S = P[1][1], T = P[1][2], U = e(J, K, L, M, Q, R, S, T);
if (U.onLine1 && U.onLine2) {
var V;
R === T ? Q > S ? (V = ["L", U.x + 2 * y, R], F.splice(N + 1, 0, V), V = ["C", U.x + 2 * y, R, U.x, R - 4 * y, U.x - 2 * y, R], F.splice(N + 2, 0, V), f.attr("path", F)) : (V = ["L", U.x - 2 * y, R], F.splice(N + 1, 0, V), V = ["C", U.x - 2 * y, R, U.x, R - 4 * y, U.x + 2 * y, R], F.splice(N + 2, 0, V), f.attr("path", F)) : R > T ? (V = ["L", Q, U.y + 2 * y], F.splice(N + 1, 0, V), V = ["C", Q, U.y + 2 * y, Q + 4 * y, U.y, Q, U.y - 2 * y], F.splice(N + 2, 0, V), f.attr("path", F)) : (V = ["L", Q, U.y - 2 * y], F.splice(N + 1, 0, V), V = ["C", Q, U.y - 2 * y, Q + 4 * y, U.y, Q, U.y + 2 * y], F.splice(N + 2, 0, V), f.attr("path", F)), N += 2, C += 2
}
}
}
this.chart.lines.push(f)
}
(!this.chart.maxXFromLine || this.chart.maxXFromLine && w > this.chart.maxXFromLine) && (this.chart.maxXFromLine = w)
}, r.inherits(h, g), r.inherits(i, g), r.inherits(j, g), r.inherits(k, g), r.inherits(l, g), l.prototype.getLeft = function () {
var a = this.getY() + this.group.getBBox().height / 2, b = this.getX() + this.textMargin;
return {x: b, y: a}
}, l.prototype.getRight = function () {
var a = this.getY() + this.group.getBBox().height / 2,
b = this.getX() + this.group.getBBox().width - this.textMargin;
return {x: b, y: a}
}, r.inherits(m, g), m.prototype.render = function () {
this.yes_direction && (this[this.yes_direction + "_symbol"] = this.yes_symbol), this.no_direction && (this[this.no_direction + "_symbol"] = this.no_symbol);
var a = this.getAttr("line-length");
if (this.bottom_symbol) {
var b = this.getBottom();
this.bottom_symbol.getTop(), this.bottom_symbol.isPositioned || (this.bottom_symbol.shiftY(this.getY() + this.height + a), this.bottom_symbol.setX(b.x - this.bottom_symbol.width / 2), this.bottom_symbol.isPositioned = !0, this.bottom_symbol.render())
}
if (this.right_symbol) {
var c = this.getRight();
if (this.right_symbol.getLeft(), !this.right_symbol.isPositioned) {
this.right_symbol.setY(c.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + a);
var d = this;
!function e() {
for (var b, c = !1, f = 0, g = d.chart.symbols.length; g > f; f++) {
b = d.chart.symbols[f];
var h = Math.abs(b.getCenter().x - d.right_symbol.getCenter().x);
if (b.getCenter().y > d.right_symbol.getCenter().y && h <= d.right_symbol.width / 2) {
c = !0;
break
}
}
c && (d.right_symbol.setX(b.getX() + b.width + a), e())
}(), this.right_symbol.isPositioned = !0, this.right_symbol.render()
}
}
}, m.prototype.renderLines = function () {
this.yes_symbol && this.drawLineTo(this.yes_symbol, this.getAttr("yes-text"), this.yes_direction), this.no_symbol && this.drawLineTo(this.no_symbol, this.getAttr("no-text"), this.no_direction)
}, p.parse = n
}();
/*! jQuery.flowchart.js v1.1.0 | jquery.flowchart.min.js | jQuery plugin for flowchart.js. | MIT License | By: Pandao | https://github.com/pandao/jquery.flowchart.js | 2015-03-09 */
(function (factory) {
if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
module.exports = factory
} else {
if (typeof define === "function") {
factory(jQuery, flowchart)
} else {
factory($, flowchart)
}
}
}(function (jQuery, flowchart) {
(function ($) {
$.fn.flowChart = function (options) {
options = options || {};
var defaults = {
"x": 0,
"y": 0,
"line-width": 2,
"line-length": 50,
"text-margin": 10,
"font-size": 14,
"font-color": "black",
"line-color": "black",
"element-color": "black",
"fill": "white",
"yes-text": "yes",
"no-text": "no",
"arrow-end": "block",
"symbols": {
"start": {"font-color": "black", "element-color": "black", "fill": "white"},
"end": {"class": "end-element"}
},
"flowstate": {
"past": {"fill": "#CCCCCC", "font-size": 12},
"current": {"fill": "black", "font-color": "white", "font-weight": "bold"},
"future": {"fill": "white"},
"request": {"fill": "blue"},
"invalid": {"fill": "#444444"},
"approved": {"fill": "#58C4A3", "font-size": 12, "yes-text": "APPROVED", "no-text": "n/a"},
"rejected": {"fill": "#C45879", "font-size": 12, "yes-text": "n/a", "no-text": "REJECTED"}
}
};
return this.each(function () {
var $this = $(this);
var diagram = flowchart.parse($this.text());
var settings = $.extend(true, defaults, options);
$this.html("");
diagram.drawSVG(this, settings)
})
}
})(jQuery)
}));
/*
* Editor.md
*
* @file editormd.js
* @version v1.5.0
* @description Open source online markdown editor.
* @license MIT License
* @author Pandao
* {@link https://github.com/pandao/editor.md}
* @updateTime 2015-06-09
*/
function initEditormdPasteUpload(e, t, i) {
e.cm.getInputField().addEventListener("paste", function (i) {
_whenPasterDoUpload(i, t, function (t) {
t.id && e.cm.replaceSelection("![](/api/attachments/" + t.id + ")")
})
})
}
!function (e) {
"use strict";
"function" == typeof require && "object" == typeof exports && "object" == typeof module ? module.exports = e : "function" == typeof define ? define.amd || define(["../../../../editormd/examples/js/jquery.min"], e) : window.editormd = e()
}(function () {
"use strict";
var e = "undefined" != typeof jQuery ? jQuery : Zepto;
if (void 0 !== e) {
var t, i, o, r = function (e, t) {
return new r.fn.init(e, t)
};
r.title = r.$name = "Editor.md", r.version = "1.5.0", r.homePage = "https://pandao.github.io/editor.md/", r.classPrefix = "editormd-", r.toolbarModes = {
full: ["undo", "redo", "|", "bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime", "emoji", "html-entities", "pagebreak", "|", "goto-line", "watch", "preview", "fullscreen", "clear", "search", "|", "help", "info"],
simple: ["undo", "redo", "|", "bold", "del", "italic", "quote", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "watch", "preview", "fullscreen", "|", "help", "info"],
mini: ["undo", "redo", "|", "watch", "preview", "|", "help", "info"]
}, r.defaults = {
mode: "gfm",
name: "",
value: "",
theme: "",
editorTheme: "default",
previewTheme: "",
markdown: "",
appendMarkdown: "",
width: "100%",
height: "100%",
path: "./lib/",
pluginPath: "",
delay: 500,
autoLoadModules: !0,
watch: !0,
placeholder: "Enjoy Markdown! coding now...",
gotoLine: !0,
codeFold: !1,
autoHeight: !1,
autoFocus: !0,
autoCloseTags: !0,
searchReplace: !0,
syncScrolling: !0,
readOnly: !1,
tabSize: 4,
indentUnit: 4,
lineNumbers: !0,
lineWrapping: !0,
autoCloseBrackets: !0,
showTrailingSpace: !0,
matchBrackets: !0,
indentWithTabs: !0,
styleSelectedText: !0,
matchWordHighlight: !0,
styleActiveLine: !0,
dialogLockScreen: !0,
dialogShowMask: !0,
dialogDraggable: !0,
dialogMaskBgColor: "#fff",
dialogMaskOpacity: .1,
fontSize: "13px",
saveHTMLToTextarea: !1,
disabledKeyMaps: [],
onload: function () {
},
onresize: function () {
},
onchange: function () {
},
onwatch: null,
onunwatch: null,
onpreviewing: function () {
},
onpreviewed: function () {
},
onfullscreen: function () {
},
onfullscreenExit: function () {
},
onscroll: function () {
},
onpreviewscroll: function () {
},
imageUpload: !1,
imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
imageUploadURL: "",
crossDomainUpload: !1,
uploadCallbackURL: "",
toc: !0,
tocm: !1,
tocTitle: "",
tocDropdown: !1,
tocContainer: "",
tocStartLevel: 1,
htmlDecode: "style,iframe|on*",
pageBreak: !0,
atLink: !0,
emailLink: !0,
taskList: !1,
emoji: !1,
tex: !1,
flowChart: !1,
sequenceDiagram: !1,
previewCodeHighlight: !0,
toolbar: !0,
toolbarAutoFixed: !0,
toolbarIcons: "full",
toolbarTitles: {},
toolbarHandlers: {
ucwords: function () {
return r.toolbarHandlers.ucwords
}, lowercase: function () {
return r.toolbarHandlers.lowercase
}
},
toolbarCustomIcons: {
lowercase: '<a href="javascript:;" title="Lowercase" unselectable="on"><i class="fa" name="lowercase" style="font-size:24px;margin-top: -10px;">a</i></a>',
ucwords: '<a href="javascript:;" title="ucwords" unselectable="on"><i class="fa" name="ucwords" style="font-size:20px;margin-top: -3px;">Aa</i></a>'
},
toolbarIconsClass: {
undo: "fa-undo",
redo: "fa-repeat",
bold: "fa-bold",
del: "fa-strikethrough",
italic: "fa-italic",
quote: "fa-quote-left",
uppercase: "fa-font",
h1: r.classPrefix + "bold",
h2: r.classPrefix + "bold",
h3: r.classPrefix + "bold",
h4: r.classPrefix + "bold",
h5: r.classPrefix + "bold",
h6: r.classPrefix + "bold",
"list-ul": "fa-list-ul",
"list-ol": "fa-list-ol",
hr: "fa-minus",
link: "fa-link",
"reference-link": "fa-anchor",
image: "fa-picture-o",
code: "fa-code",
"preformatted-text": "fa-file-code-o",
"code-block": "fa-file-code-o",
table: "fa-table",
datetime: "fa-clock-o",
emoji: "fa-smile-o",
"html-entities": "fa-copyright",
pagebreak: "fa-newspaper-o",
"goto-line": "fa-terminal",
watch: "fa-eye-slash",
unwatch: "fa-eye",
preview: "fa-desktop",
search: "fa-search",
fullscreen: "fa-arrows-alt",
clear: "fa-eraser",
help: "fa-question-circle",
info: "fa-info-circle"
},
toolbarIconTexts: {},
lang: {
name: "zh-cn",
description: "开源在线Markdown编辑器<br/>Open source online Markdown editor.",
tocTitle: "目录",
toolbar: {
undo: "撤销Ctrl+Z",
redo: "重做Ctrl+Y",
bold: "粗体",
del: "删除线",
italic: "斜体",
quote: "引用",
ucwords: "将每个单词首字母转成大写",
uppercase: "将所选转换成大写",
lowercase: "将所选转换成小写",
h1: "标题1",
h2: "标题2",
h3: "标题3",
h4: "标题4",
h5: "标题5",
h6: "标题6",
"list-ul": "无序列表",
"list-ol": "有序列表",
hr: "横线",
link: "链接",
"reference-link": "引用链接",
image: "添加图片",
code: "行内代码",
"preformatted-text": "预格式文本 / 代码块(缩进风格)",
"code-block": "代码块(多语言风格)",
table: "添加表格",
datetime: "日期时间",
emoji: "Emoji表情",
"html-entities": "HTML实体字符",
pagebreak: "插入分页符",
"goto-line": "跳转到行",
watch: "关闭实时预览",
unwatch: "开启实时预览",
preview: "全窗口预览HTML按 Shift + ESC还原",
fullscreen: "全屏按ESC还原",
clear: "清空",
search: "搜索",
help: "使用帮助",
info: "关于" + r.title
},
buttons: {enter: "确定", cancel: "取消", close: "关闭"},
dialog: {
link: {title: "添加链接", url: "链接地址", urlTitle: "链接标题", urlEmpty: "错误:请填写链接地址。"},
referenceLink: {
title: "添加引用链接",
name: "引用名称",
url: "链接地址",
urlId: "链接ID",
urlTitle: "链接标题",
nameEmpty: "错误:引用链接的名称不能为空。",
idEmpty: "错误请填写引用链接的ID。",
urlEmpty: "错误请填写引用链接的URL地址。"
},
image: {
title: "添加图片",
url: "图片地址",
link: "图片链接",
alt: "图片描述",
uploadButton: "本地上传",
imageURLEmpty: "错误:图片地址不能为空。",
uploadFileEmpty: "错误:上传的图片不能为空。",
formatNotAllowed: "错误:只允许上传图片文件,允许上传的图片文件格式有:"
},
preformattedText: {title: "添加预格式文本或代码块", emptyAlert: "错误:请填写预格式文本或代码的内容。"},
codeBlock: {
title: "添加代码块",
selectLabel: "代码语言:",
selectDefaultText: "请选择代码语言",
otherLanguage: "其他语言",
unselectedLanguageAlert: "错误:请选择代码所属的语言类型。",
codeEmptyAlert: "错误:请填写代码内容。"
},
htmlEntities: {title: "HTML 实体字符"},
help: {title: "使用帮助"}
}
}
}, r.classNames = {tex: r.classPrefix + "tex"}, r.dialogZindex = 99999, r.$katex = null, r.$marked = null, r.$CodeMirror = null, r.$prettyPrint = null, r.prototype = r.fn = {
state: {watching: !1, loaded: !1, preview: !1, fullscreen: !1}, init: function (t, i) {
i = i || {}, "object" == typeof t && (i = t);
var a = this.classPrefix = r.classPrefix, n = o = e.extend(!0, r.defaults, i);
this.settings = n, t = "object" == typeof t ? n.id : t;
var s = this.editor = e("#" + t);
this.id = t, this.lang = n.lang;
var l = this.classNames = {textarea: {html: a + "html-textarea", markdown: a + "markdown-textarea"}};
n.pluginPath = "" === n.pluginPath ? n.path + "../plugins/" : n.pluginPath, this.state.watching = !!n.watch, s.hasClass("editormd") || s.addClass("editormd"), s.css({
width: "number" == typeof n.width ? n.width + "px" : n.width,
height: "number" == typeof n.height ? n.height + "px" : n.height
}), n.autoHeight && s.css("height", "auto");
var c = this.markdownTextarea = s.children("textarea");
c.length < 1 && (s.append("<textarea></textarea>"), c = this.markdownTextarea = s.children("textarea")), c.addClass(l.textarea.markdown).attr("placeholder", n.placeholder), void 0 !== c.attr("name") && "" !== c.attr("name") || c.attr("name", "" !== n.name ? n.name : t + "-markdown-doc");
var h = [n.readOnly ? "" : '<a href="javascript:;" class="fa fa-close ' + a + 'preview-close-btn"></a>', n.saveHTMLToTextarea ? '<textarea class="' + l.textarea.html + '" name="' + t + '-html-code"></textarea>' : "", '<div class="' + a + 'preview"><div class="markdown-body ' + a + 'preview-container"></div></div>', '<div class="' + a + 'container-mask" style="display:block;"></div>', '<div class="' + a + 'mask"></div>'].join("\n");
return s.append(h).addClass(a + "vertical"), "" !== n.theme && s.addClass(a + "theme-" + n.theme), this.mask = s.children("." + a + "mask"), this.containerMask = s.children("." + a + "container-mask"), "" !== n.markdown && c.val(n.markdown), "" !== n.appendMarkdown && c.val(c.val() + n.appendMarkdown), this.htmlTextarea = s.children("." + l.textarea.html), this.preview = s.children("." + a + "preview"), this.previewContainer = this.preview.children("." + a + "preview-container"), "" !== n.previewTheme && this.preview.addClass(a + "preview-theme-" + n.previewTheme), "function" == typeof define && define.amd && ("undefined" != typeof katex && (r.$katex = katex), n.searchReplace && !n.readOnly && (r.loadCSS(n.path + "codemirror/addon/dialog/dialog"), r.loadCSS(n.path + "codemirror/addon/search/matchesonscrollbar"))), "function" == typeof define && define.amd || !n.autoLoadModules ? ("undefined" != typeof CodeMirror && (r.$CodeMirror = CodeMirror), "undefined" != typeof marked && (r.$marked = marked), this.setCodeMirror().setToolbar().loadedDisplay()) : this.loadQueues(), this
}, loadQueues: function () {
var e = this, t = o, i = t.path, a = function () {
r.isIE8 ? e.loadedDisplay() : t.flowChart || t.sequenceDiagram ? r.loadScript(i + "raphael.min", function () {
r.loadScript(i + "underscore.min", function () {
!t.flowChart && t.sequenceDiagram ? r.loadScript(i + "sequence-diagram.min", function () {
e.loadedDisplay()
}) : t.flowChart && !t.sequenceDiagram ? r.loadScript(i + "flowchart.min", function () {
r.loadScript(i + "jquery.flowchart.min", function () {
e.loadedDisplay()
})
}) : t.flowChart && t.sequenceDiagram && r.loadScript(i + "flowchart.min", function () {
r.loadScript(i + "jquery.flowchart.min", function () {
r.loadScript(i + "sequence-diagram.min", function () {
e.loadedDisplay()
})
})
})
})
}) : e.loadedDisplay()
};
return t.searchReplace && !t.readOnly && (r.loadCSS(i + "codemirror/addon/dialog/dialog"), r.loadCSS(i + "codemirror/addon/search/matchesonscrollbar")), t.codeFold && r.loadCSS(i + "codemirror/addon/fold/foldgutter"), r.$CodeMirror = CodeMirror, r.loadScript(i + "codemirror/modes.min", function () {
r.loadScript(i + "codemirror/addons.min", function () {
if (e.setCodeMirror(), "gfm" !== t.mode && "markdown" !== t.mode) return e.loadedDisplay(), !1;
e.setToolbar(), r.loadScript(i + "marked.min", function () {
r.$marked = marked, t.previewCodeHighlight ? r.loadScript(i + "prettify.min", function () {
a()
}) : a()
})
})
}), this
}, setTheme: function (e) {
var t = this.editor, i = o.theme, r = this.classPrefix + "theme-";
return t.removeClass(r + i).addClass(r + e), o.theme = e, this
}, setEditorTheme: function (e) {
var t = o;
return t.editorTheme = e, "default" !== e && r.loadCSS(t.path + "codemirror/theme/" + t.editorTheme), this.cm.setOption("theme", e), this
}, setCodeMirrorTheme: function (e) {
return this.setEditorTheme(e), this
}, setPreviewTheme: function (e) {
var t = this.preview, i = o.previewTheme, r = this.classPrefix + "preview-theme-";
return t.removeClass(r + i).addClass(r + e), o.previewTheme = e, this
}, setCodeMirror: function () {
var e = o, t = this.editor;
"default" !== e.editorTheme && r.loadCSS(e.path + "codemirror/theme/" + e.editorTheme);
var i = {
mode: e.mode,
theme: e.editorTheme,
tabSize: e.tabSize,
dragDrop: !1,
autofocus: e.autoFocus,
autoCloseTags: e.autoCloseTags,
readOnly: !!e.readOnly && "nocursor",
indentUnit: e.indentUnit,
lineNumbers: e.lineNumbers,
lineWrapping: e.lineWrapping,
extraKeys: {
"Ctrl-Q": function (e) {
e.foldCode(e.getCursor())
}
},
foldGutter: e.codeFold,
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
matchBrackets: e.matchBrackets,
indentWithTabs: e.indentWithTabs,
styleActiveLine: e.styleActiveLine,
styleSelectedText: e.styleSelectedText,
autoCloseBrackets: e.autoCloseBrackets,
showTrailingSpace: e.showTrailingSpace,
highlightSelectionMatches: !!e.matchWordHighlight && {showToken: "onselected" !== e.matchWordHighlight && /\w/}
};
return this.codeEditor = this.cm = r.$CodeMirror.fromTextArea(this.markdownTextarea[0], i), this.codeMirror = this.cmElement = t.children(".CodeMirror"), "" !== e.value && this.cm.setValue(e.value), this.codeMirror.css({
fontSize: e.fontSize,
width: e.watch ? "50%" : "100%"
}), e.autoHeight && (this.codeMirror.css("height", "auto"), this.cm.setOption("viewportMargin", 1 / 0)), e.lineNumbers || this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none"), this
}, getCodeMirrorOption: function (e) {
return this.cm.getOption(e)
}, setCodeMirrorOption: function (e, t) {
return this.cm.setOption(e, t), this
}, addKeyMap: function (e, t) {
return this.cm.addKeyMap(e, t), this
}, removeKeyMap: function (e) {
return this.cm.removeKeyMap(e), this
}, gotoLine: function (t) {
var i = o;
if (!i.gotoLine) return this;
var r = this.cm, a = (this.editor, r.lineCount()), n = this.preview;
if ("string" == typeof t && ("last" === t && (t = a), "first" === t && (t = 1)), "number" != typeof t) return alert("Error: The line number must be an integer."), this;
if ((t = parseInt(t) - 1) > a) return alert("Error: The line number range 1-" + a), this;
r.setCursor({line: t, ch: 0});
var s = r.getScrollInfo().clientHeight, l = r.charCoords({line: t, ch: 0}, "local");
if (r.scrollTo(null, (l.top + l.bottom - s) / 2), i.watch) {
var c = this.codeMirror.find(".CodeMirror-scroll")[0], h = e(c).height(), d = c.scrollTop,
u = d / c.scrollHeight;
0 === d ? n.scrollTop(0) : d + h >= c.scrollHeight - 16 ? n.scrollTop(n[0].scrollHeight) : n.scrollTop(n[0].scrollHeight * u)
}
return r.focus(), this
}, extend: function () {
return void 0 !== arguments[1] && ("function" == typeof arguments[1] && (arguments[1] = e.proxy(arguments[1], this)), this[arguments[0]] = arguments[1]), "object" == typeof arguments[0] && void 0 === arguments[0].length && e.extend(!0, this, arguments[0]), this
}, set: function (t, i) {
return void 0 !== i && "function" == typeof i && (i = e.proxy(i, this)), this[t] = i, this
}, config: function (t, i) {
var r = o;
return "object" == typeof t && (r = e.extend(!0, r, t)), "string" == typeof t && (r[t] = i), o = r, this.recreate(), this
}, on: function (t, i) {
var r = o;
return void 0 !== r["on" + t] && (r["on" + t] = e.proxy(i, this)), this
}, off: function (e) {
var t = o;
return void 0 !== t["on" + e] && (t["on" + e] = function () {
}), this
}, showToolbar: function (t) {
var i = o;
return i.readOnly ? this : (i.toolbar && (this.toolbar.length < 1 || "" === this.toolbar.find("." + this.classPrefix + "menu").html()) && this.setToolbar(), i.toolbar = !0, this.toolbar.show(), this.resize(), e.proxy(t || function () {
}, this)(), this)
}, hideToolbar: function (t) {
return o.toolbar = !1, this.toolbar.hide(), this.resize(), e.proxy(t || function () {
}, this)(), this
}, setToolbarAutoFixed: function (t) {
var i = this.state, r = this.editor, a = this.toolbar, n = o;
void 0 !== t && (n.toolbarAutoFixed = t);
return !i.fullscreen && !i.preview && n.toolbar && n.toolbarAutoFixed && e(window).bind("scroll", function () {
var t = e(window), i = t.scrollTop();
if (!n.toolbarAutoFixed) return !1;
i - r.offset().top > 10 && i < r.height() ? a.css({
position: "fixed",
width: r.width() + "px",
left: (t.width() - r.width()) / 2 + "px"
}) : a.css({position: "absolute", width: "100%", left: 0})
}), this
}, setToolbar: function () {
var e = o;
if (e.readOnly) return this;
var t = this.editor, i = (this.preview, this.classPrefix), a = this.toolbar = t.children("." + i + "toolbar");
if (e.toolbar && a.length < 1) {
var n = '<div class="' + i + 'toolbar"><div class="' + i + 'toolbar-container"><ul class="' + i + 'menu"></ul></div></div>';
t.append(n), a = this.toolbar = t.children("." + i + "toolbar")
}
if (!e.toolbar) return a.hide(), this;
a.show();
for (var s = "function" == typeof e.toolbarIcons ? e.toolbarIcons(this) : "string" == typeof e.toolbarIcons ? r.toolbarModes[e.toolbarIcons] : e.toolbarIcons, l = a.find("." + this.classPrefix + "menu"), c = "", h = !1, d = 0, u = s.length; d < u; d++) {
var f = s[d];
if ("||" === f) h = !0; else if ("|" === f) c += '<li class="divider" unselectable="on">|</li>'; else {
var p = /h(\d)/.test(f), m = f;
"watch" !== f || e.watch || (m = "unwatch");
var g = e.lang.toolbar[m], w = e.toolbarIconTexts[m], v = e.toolbarIconsClass[m];
g = void 0 === g ? "" : g, w = void 0 === w ? "" : w, v = void 0 === v ? "" : v;
var k = h ? '<li class="pull-right">' : "<li>";
void 0 !== e.toolbarCustomIcons[f] && "function" != typeof e.toolbarCustomIcons[f] ? k += e.toolbarCustomIcons[f] : (k += '<a href="javascript:;" title="' + g + '" unselectable="on">', k += '<i class="fa ' + v + '" name="' + f + '" unselectable="on">' + (p ? f.toUpperCase() : "" === v ? w : "") + "</i>", k += "</a>"), k += "</li>", c = h ? k + c : c + k
}
}
return l.html(c), l.find('[title="Lowercase"]').attr("title", e.lang.toolbar.lowercase), l.find('[title="ucwords"]').attr("title", e.lang.toolbar.ucwords), this.setToolbarHandler(), this.setToolbarAutoFixed(), this
}, dialogLockScreen: function () {
return e.proxy(r.dialogLockScreen, this)(), this
}, dialogShowMask: function (t) {
return e.proxy(r.dialogShowMask, this)(t), this
}, getToolbarHandles: function (e) {
var t = this.toolbarHandlers = r.toolbarHandlers;
return e && void 0 !== toolbarIconHandlers[e] ? t[e] : t
}, setToolbarHandler: function () {
var t = this, i = o;
if (!i.toolbar || i.readOnly) return this;
var a = this.toolbar, n = this.cm, s = this.classPrefix,
l = this.toolbarIcons = a.find("." + s + "menu > li > a"), c = this.getToolbarHandles();
return l.bind(r.mouseOrTouch("click", "touchend"), function (o) {
var r = e(this).children(".fa"), a = r.attr("name"), s = n.getCursor(), l = n.getSelection();
if ("" !== a) return t.activeIcon = r, void 0 !== c[a] ? e.proxy(c[a], t)(n) : void 0 !== i.toolbarHandlers[a] && e.proxy(i.toolbarHandlers[a], t)(n, r, s, l), "link" !== a && "reference-link" !== a && "image" !== a && "code-block" !== a && "preformatted-text" !== a && "watch" !== a && "preview" !== a && "search" !== a && "fullscreen" !== a && "info" !== a && n.focus(), !1
}), this
}, createDialog: function (t) {
return e.proxy(r.createDialog, this)(t)
}, createInfoDialog: function () {
var e = this, t = this.editor, i = this.classPrefix,
o = ['<div class="' + i + "dialog " + i + 'dialog-info" style="">', '<div class="' + i + 'dialog-container">', '<h1><i class="editormd-logo editormd-logo-lg editormd-logo-color"></i> ' + r.title + "<small>v" + r.version + "</small></h1>", "<p>" + this.lang.description + "</p>", '<p style="margin: 10px 0 20px 0;"><a href="' + r.homePage + '" target="_blank">' + r.homePage + ' <i class="fa fa-external-link"></i></a></p>', '<p style="font-size: 0.85em;">Copyright &copy; 2015 <a href="https://github.com/pandao" target="_blank" class="hover-link">Pandao</a>, The <a href="https://github.com/pandao/editor.md/blob/master/LICENSE" target="_blank" class="hover-link">MIT</a> License.</p>', "</div>", '<a href="javascript:;" class="fa fa-close ' + i + 'dialog-close"></a>', "</div>"].join("\n");
t.append(o);
var a = this.infoDialog = t.children("." + i + "dialog-info");
return a.find("." + i + "dialog-close").bind(r.mouseOrTouch("click", "touchend"), function () {
e.hideInfoDialog()
}), a.css("border", r.isIE8 ? "1px solid #ddd" : "").css("z-index", r.dialogZindex).show(), this.infoDialogPosition(), this
}, infoDialogPosition: function () {
var t = this.infoDialog, i = function () {
t.css({top: (e(window).height() - t.height()) / 2 + "px", left: (e(window).width() - t.width()) / 2 + "px"})
};
return i(), e(window).resize(i), this
}, showInfoDialog: function () {
e("html,body").css("overflow-x", "hidden");
var t = this.editor, i = o, a = this.infoDialog = t.children("." + this.classPrefix + "dialog-info");
return a.length < 1 && this.createInfoDialog(), this.lockScreen(!0), this.mask.css({
opacity: i.dialogMaskOpacity,
backgroundColor: i.dialogMaskBgColor
}).show(), a.css("z-index", r.dialogZindex).show(), this.infoDialogPosition(), this
}, hideInfoDialog: function () {
return e("html,body").css("overflow-x", ""), this.infoDialog.hide(), this.mask.hide(), this.lockScreen(!1), this
}, lockScreen: function (e) {
return r.lockScreen(e), this.resize(), this
}, recreate: function () {
var e = this.editor, t = o;
return this.codeMirror.remove(), this.setCodeMirror(), t.readOnly || (e.find(".editormd-dialog").length > 0 && e.find(".editormd-dialog").remove(), t.toolbar && (this.getToolbarHandles(), this.setToolbar())), this.loadedDisplay(!0), this
}, previewCodeHighlight: function () {
var e = o, t = this.previewContainer;
return e.previewCodeHighlight && (t.find("pre").addClass("prettyprint linenums"), "undefined" != typeof prettyPrint && prettyPrint()), this
}, katexRender: function () {
return null === t ? this : (this.previewContainer.find("." + r.classNames.tex).each(function () {
var t = e(this);
r.$katex.render(t.text(), t[0]), t.find(".katex").css("font-size", "1.0em")
}), this)
}, flowChartAndSequenceDiagramRender: function () {
var t = o, a = this.previewContainer;
if (r.isIE8) return this;
if (t.flowChart) {
if (null === i) return this;
a.find(".flowchart").flowChart()
}
t.sequenceDiagram && a.find(".sequence-diagram").sequenceDiagram({theme: "simple"});
var n = this.preview, s = this.codeMirror.find(".CodeMirror-scroll"), l = s.height(), c = s.scrollTop(),
h = c / s[0].scrollHeight, d = 0;
n.find(".markdown-toc-list").each(function () {
d += e(this).height()
});
var u = n.find(".editormd-toc-menu").height();
return u = u || 0, 0 === c ? n.scrollTop(0) : c + l >= s[0].scrollHeight - 16 ? n.scrollTop(n[0].scrollHeight) : n.scrollTop((n[0].scrollHeight + d + u) * h), this
}, registerKeyMaps: function (t) {
var i = this, a = this.cm, n = o, s = r.toolbarHandlers, l = n.disabledKeyMaps;
if (t = t || null) {
for (var c in t) if (e.inArray(c, l) < 0) {
t[c], a.addKeyMap(t)
}
} else {
for (var h in r.keyMaps) {
var d = r.keyMaps[h], u = "string" == typeof d ? e.proxy(s[d], i) : e.proxy(d, i);
if (e.inArray(h, ["F9", "F10", "F11"]) < 0 && e.inArray(h, l) < 0) {
var f = {};
f[h] = u, a.addKeyMap(f)
}
}
e(window).keydown(function (t) {
if (e.inArray({120: "F9", 121: "F10", 122: "F11"}[t.keyCode], l) < 0) switch (t.keyCode) {
case 120:
return e.proxy(s.watch, i)(), !1;
case 121:
return e.proxy(s.preview, i)(), !1;
case 122:
return e.proxy(s.fullscreen, i)(), !1
}
})
}
return this
}, bindScrollEvent: function () {
var t = this, i = this.preview, a = o, n = this.codeMirror, s = r.mouseOrTouch;
if (!a.syncScrolling) return this;
var l = function () {
n.find(".CodeMirror-scroll").bind(s("scroll", "touchmove"), function (o) {
var r = e(this).height(), n = e(this).scrollTop(), s = n / e(this)[0].scrollHeight, l = 0;
i.find(".markdown-toc-list").each(function () {
l += e(this).height()
});
var c = i.find(".editormd-toc-menu").height();
c = c || 0, 0 === n ? i.scrollTop(0) : n + r >= e(this)[0].scrollHeight - 16 ? i.scrollTop(i[0].scrollHeight) : i.scrollTop((i[0].scrollHeight + l + c) * s), e.proxy(a.onscroll, t)(o)
})
}, c = function () {
n.find(".CodeMirror-scroll").unbind(s("scroll", "touchmove"))
}, h = function () {
i.bind(s("scroll", "touchmove"), function (i) {
var o = e(this).height(), r = e(this).scrollTop(), s = r / e(this)[0].scrollHeight,
l = n.find(".CodeMirror-scroll");
0 === r ? l.scrollTop(0) : r + o >= e(this)[0].scrollHeight ? l.scrollTop(l[0].scrollHeight) : l.scrollTop(l[0].scrollHeight * s), e.proxy(a.onpreviewscroll, t)(i)
})
}, d = function () {
i.unbind(s("scroll", "touchmove"))
};
return n.bind({
mouseover: l,
mouseout: c,
touchstart: l,
touchend: c
}), "single" === a.syncScrolling ? this : (i.bind({
mouseover: h,
mouseout: d,
touchstart: h,
touchend: d
}), this)
}, bindChangeEvent: function () {
var e = this, i = this.cm, r = o;
return r.syncScrolling ? (i.on("change", function (i, o) {
r.watch && e.previewContainer.css("padding", r.autoHeight ? "20px 20px 50px 40px" : "20px"), t = setTimeout(function () {
clearTimeout(t), e.save(), t = null
}, r.delay)
}), this) : this
}, loadedDisplay: function (t) {
t = t || !1;
var i = this, r = this.editor, a = this.preview, n = o;
return this.containerMask.hide(), this.save(), n.watch && a.show(), r.data("oldWidth", r.width()).data("oldHeight", r.height()), this.resize(), this.registerKeyMaps(), e(window).resize(function () {
i.resize()
}), this.bindScrollEvent().bindChangeEvent(), t || (n.imageUploadURL && initEditormdPasteUpload(this, n.imageUploadURL), e.proxy(n.onload, this)()), this.state.loaded = !0, this
}, width: function (e) {
return this.editor.css("width", "number" == typeof e ? e + "px" : e), this.resize(), this
}, height: function (e) {
return this.editor.css("height", "number" == typeof e ? e + "px" : e), this.resize(), this
}, resize: function (t, i) {
t = t || null, i = i || null;
var r = this.state, a = this.editor, n = this.preview, s = this.toolbar, l = o, c = this.codeMirror;
if (t && a.css("width", "number" == typeof t ? t + "px" : t), !l.autoHeight || r.fullscreen || r.preview ? (i && a.css("height", "number" == typeof i ? i + "px" : i), r.fullscreen && a.height(e(window).height()), l.toolbar && !l.readOnly ? c.css("margin-top", s.height() + 1).height(a.height() - s.height()) : c.css("margin-top", 0).height(a.height())) : (a.css("height", "auto"), c.css("height", "auto")), l.watch) if (c.width(a.width() / 2), n.width(r.preview ? a.width() : a.width() / 2), this.previewContainer.css("padding", l.autoHeight ? "20px 20px 50px 40px" : "20px"), l.toolbar && !l.readOnly ? n.css("top", s.height() + 1) : n.css("top", 0), !l.autoHeight || r.fullscreen || r.preview) {
var h = l.toolbar && !l.readOnly ? a.height() - s.height() : a.height();
n.height(h)
} else n.height(""); else c.width(a.width()), n.hide();
return r.loaded && e.proxy(l.onresize, this)(), this
}, save: function () {
if (null === t) return this;
var a = this, n = this.state, s = o, l = this.cm, c = l.getValue(), h = this.previewContainer;
if ("gfm" !== s.mode && "markdown" !== s.mode) return this.markdownTextarea.val(c), this;
var d = r.$marked, u = this.markdownToC = [], f = this.markedRendererOptions = {
toc: s.toc,
tocm: s.tocm,
tocStartLevel: s.tocStartLevel,
pageBreak: s.pageBreak,
taskList: s.taskList,
emoji: s.emoji,
tex: s.tex,
atLink: s.atLink,
emailLink: s.emailLink,
flowChart: s.flowChart,
sequenceDiagram: s.sequenceDiagram,
previewCodeHighlight: s.previewCodeHighlight
}, p = this.markedOptions = {
renderer: r.markedRenderer(u, f),
gfm: !0,
tables: !0,
breaks: !0,
pedantic: !1,
sanitize: !s.htmlDecode,
smartLists: !0,
smartypants: !0
};
d.setOptions(p);
var m = r.$marked(c, p);
if (m = r.filterHTMLTags(m, s.htmlDecode), this.markdownTextarea.text(c), l.save(), s.saveHTMLToTextarea && this.htmlTextarea.text(m), s.watch || !s.watch && n.preview) {
if (h.html(m), this.previewCodeHighlight(), s.toc) {
var g = "" === s.tocContainer ? h : e(s.tocContainer), w = g.find("." + this.classPrefix + "toc-menu");
g.attr("previewContainer", "" === s.tocContainer ? "true" : "false"), "" !== s.tocContainer && w.length > 0 && w.remove(), r.markdownToCRenderer(u, g, s.tocDropdown, s.tocStartLevel), (s.tocDropdown || g.find("." + this.classPrefix + "toc-menu").length > 0) && r.tocDropdownMenu(g, "" !== s.tocTitle ? s.tocTitle : this.lang.tocTitle), "" !== s.tocContainer && h.find(".markdown-toc").css("border", "none")
}
s.tex && (!r.kaTeXLoaded && s.autoLoadModules ? r.loadKaTeX(function () {
r.$katex = katex, r.kaTeXLoaded = !0, a.katexRender()
}) : (r.$katex = katex, this.katexRender())), (s.flowChart || s.sequenceDiagram) && (i = setTimeout(function () {
clearTimeout(i), a.flowChartAndSequenceDiagramRender(), i = null
}, 10)), n.loaded && e.proxy(s.onchange, this)()
}
return this
}, focus: function () {
return this.cm.focus(), this
}, setCursor: function (e) {
return this.cm.setCursor(e), this
}, getCursor: function () {
return this.cm.getCursor()
}, setSelection: function (e, t) {
return this.cm.setSelection(e, t), this
}, getSelection: function () {
return this.cm.getSelection()
}, setSelections: function (e) {
return this.cm.setSelections(e), this
}, getSelections: function () {
return this.cm.getSelections()
}, replaceSelection: function (e) {
return this.cm.replaceSelection(e), this
}, insertValue: function (e) {
return this.replaceSelection(e), this
}, appendMarkdown: function (e) {
var t = this.cm;
return t.setValue(t.getValue() + e), this
}, setMarkdown: function (e) {
return this.cm.setValue(e || o.markdown), this
}, getMarkdown: function () {
return this.cm.getValue()
}, getValue: function () {
return this.cm.getValue()
}, setValue: function (e) {
return this.cm.setValue(e), this
}, clear: function () {
return this.cm.setValue(""), this
}, getHTML: function () {
return o.saveHTMLToTextarea ? this.htmlTextarea.val() : (alert("Error: settings.saveHTMLToTextarea == false"), !1)
}, getTextareaSavedHTML: function () {
return this.getHTML()
}, getPreviewedHTML: function () {
return o.watch ? this.previewContainer.html() : (alert("Error: settings.watch == false"), !1)
}, watch: function (i) {
var r = o;
if (e.inArray(r.mode, ["gfm", "markdown"]) < 0) return this;
if (this.state.watching = r.watch = !0, this.preview.show(), this.toolbar) {
var a = r.toolbarIconsClass.watch, n = r.toolbarIconsClass.unwatch, s = this.toolbar.find(".fa[name=watch]");
s.parent().attr("title", r.lang.toolbar.watch), s.removeClass(n).addClass(a)
}
return this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2), t = 0, this.save().resize(), r.onwatch || (r.onwatch = i || function () {
}), e.proxy(r.onwatch, this)(), this
}, unwatch: function (t) {
var i = o;
if (this.state.watching = i.watch = !1, this.preview.hide(), this.toolbar) {
var r = i.toolbarIconsClass.watch, a = i.toolbarIconsClass.unwatch, n = this.toolbar.find(".fa[name=watch]");
n.parent().attr("title", i.lang.toolbar.unwatch), n.removeClass(r).addClass(a)
}
return this.codeMirror.css("border-right", "none").width(this.editor.width()), this.resize(), i.onunwatch || (i.onunwatch = t || function () {
}), e.proxy(i.onunwatch, this)(), this
}, show: function (t) {
t = t || function () {
};
var i = this;
return this.editor.show(0, function () {
e.proxy(t, i)()
}), this
}, hide: function (t) {
t = t || function () {
};
var i = this;
return this.editor.hide(0, function () {
e.proxy(t, i)()
}), this
}, previewing: function () {
var t = this, i = this.editor, a = this.preview, n = this.toolbar, s = o, l = this.codeMirror,
c = this.previewContainer;
if (e.inArray(s.mode, ["gfm", "markdown"]) < 0) return this;
s.toolbar && n && (n.toggle(), n.find(".fa[name=preview]").toggleClass("active")), l.toggle();
var h = function (e) {
e.shiftKey && 27 === e.keyCode && t.previewed()
};
"none" === l.css("display") ? (this.state.preview = !0, this.state.fullscreen && a.css("background", "#fff"), i.find("." + this.classPrefix + "preview-close-btn").show().bind(r.mouseOrTouch("click", "touchend"), function () {
t.previewed()
}), s.watch ? c.css("padding", "") : this.save(), c.addClass(this.classPrefix + "preview-active"), a.show().css({
position: "",
top: 0,
width: i.width(),
height: s.autoHeight && !this.state.fullscreen ? "auto" : i.height()
}), this.state.loaded && e.proxy(s.onpreviewing, this)(), e(window).bind("keyup", h)) : (e(window).unbind("keyup", h), this.previewed())
}, previewed: function () {
var t = this.editor, i = this.preview, a = this.toolbar, n = o, s = this.previewContainer,
l = t.find("." + this.classPrefix + "preview-close-btn");
return this.state.preview = !1, this.codeMirror.show(), n.toolbar && a.show(), i[n.watch ? "show" : "hide"](), l.hide().unbind(r.mouseOrTouch("click", "touchend")), s.removeClass(this.classPrefix + "preview-active"), n.watch && s.css("padding", "20px"), i.css({
background: null,
position: "absolute",
width: t.width() / 2,
height: n.autoHeight && !this.state.fullscreen ? "auto" : t.height() - a.height(),
top: n.toolbar ? a.height() : 0
}), this.state.loaded && e.proxy(n.onpreviewed, this)(), this
}, fullscreen: function () {
var t = this, i = this.state, r = this.editor, a = (this.preview, this.toolbar), n = o,
s = this.classPrefix + "fullscreen";
a && a.find(".fa[name=fullscreen]").parent().toggleClass("active");
var l = function (e) {
e.shiftKey || 27 !== e.keyCode || i.fullscreen && t.fullscreenExit()
};
return r.hasClass(s) ? (e(window).unbind("keyup", l), this.fullscreenExit()) : (i.fullscreen = !0, e("html,body").css("overflow", "hidden"), r.css({
width: e(window).width(),
height: e(window).height()
}).addClass(s), this.resize(), e.proxy(n.onfullscreen, this)(), e(window).bind("keyup", l)), this
}, fullscreenExit: function () {
var t = this.editor, i = o, r = this.toolbar, a = this.classPrefix + "fullscreen";
return this.state.fullscreen = !1, r && r.find(".fa[name=fullscreen]").parent().removeClass("active"), e("html,body").css("overflow", ""), t.css({
width: t.data("oldWidth"),
height: t.data("oldHeight")
}).removeClass(a), this.resize(), e.proxy(i.onfullscreenExit, this)(), this
}, executePlugin: function (t, i) {
var a = this, n = this.cm;
return i = o.pluginPath + i, "function" == typeof define ? void 0 === this[t] ? (alert("Error: " + t + " plugin is not found, you are not load this plugin."), this) : (this[t](n), this) : (e.inArray(i, r.loadFiles.plugin) < 0 ? r.loadPlugin(i, function () {
r.loadPlugins[t] = a[t], a[t](n)
}) : e.proxy(r.loadPlugins[t], this)(n), this)
}, search: function (e) {
var t = o;
return t.searchReplace ? (t.readOnly || this.cm.execCommand(e || "find"), this) : (alert("Error: settings.searchReplace == false"), this)
}, searchReplace: function () {
return this.search("replace"), this
}, searchReplaceAll: function () {
return this.search("replaceAll"), this
}
}, r.fn.init.prototype = r.fn, r.dialogLockScreen = function () {
(o || {dialogLockScreen: !0}).dialogLockScreen && (e("html,body").css("overflow", "hidden"), this.resize())
}, r.dialogShowMask = function (t) {
var i = this.editor, r = o || {dialogShowMask: !0};
t.css({
top: (e(window).height() - t.height()) / 2 + "px",
left: (e(window).width() - t.width()) / 2 + "px"
}), r.dialogShowMask && i.children("." + this.classPrefix + "mask").css("z-index", parseInt(t.css("z-index")) - 1).show()
}, r.toolbarHandlers = {
undo: function () {
this.cm.undo()
}, redo: function () {
this.cm.redo()
}, bold: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
e.replaceSelection("**" + i + "**"), "" === i && e.setCursor(t.line, t.ch + 2)
}, del: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
e.replaceSelection("~~" + i + "~~"), "" === i && e.setCursor(t.line, t.ch + 2)
}, italic: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
e.replaceSelection("*" + i + "*"), "" === i && e.setCursor(t.line, t.ch + 1)
}, quote: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("> " + i), e.setCursor(t.line, t.ch + 2)) : e.replaceSelection("> " + i)
}, ucfirst: function () {
var e = this.cm, t = e.getSelection(), i = e.listSelections();
e.replaceSelection(r.firstUpperCase(t)), e.setSelections(i)
}, ucwords: function () {
var e = this.cm, t = e.getSelection(), i = e.listSelections();
e.replaceSelection(r.wordsFirstUpperCase(t)), e.setSelections(i)
}, uppercase: function () {
var e = this.cm, t = e.getSelection(), i = e.listSelections();
e.replaceSelection(t.toUpperCase()), e.setSelections(i)
}, lowercase: function () {
var e = this.cm, t = (e.getCursor(), e.getSelection()), i = e.listSelections();
e.replaceSelection(t.toLowerCase()), e.setSelections(i)
}, h1: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("# " + i), e.setCursor(t.line, t.ch + 2)) : e.replaceSelection("# " + i)
}, h2: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("## " + i), e.setCursor(t.line, t.ch + 3)) : e.replaceSelection("## " + i)
}, h3: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("### " + i), e.setCursor(t.line, t.ch + 4)) : e.replaceSelection("### " + i)
}, h4: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("#### " + i), e.setCursor(t.line, t.ch + 5)) : e.replaceSelection("#### " + i)
}, h5: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("##### " + i), e.setCursor(t.line, t.ch + 6)) : e.replaceSelection("##### " + i)
}, h6: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("###### " + i), e.setCursor(t.line, t.ch + 7)) : e.replaceSelection("###### " + i)
}, "list-ul": function () {
var e = this.cm, t = (e.getCursor(), e.getSelection());
if ("" === t) e.replaceSelection("- " + t); else {
for (var i = t.split("\n"), o = 0, r = i.length; o < r; o++) i[o] = "" === i[o] ? "" : "- " + i[o];
e.replaceSelection(i.join("\n"))
}
}, "list-ol": function () {
var e = this.cm, t = (e.getCursor(), e.getSelection());
if ("" === t) e.replaceSelection("1. " + t); else {
for (var i = t.split("\n"), o = 0, r = i.length; o < r; o++) i[o] = "" === i[o] ? "" : o + 1 + ". " + i[o];
e.replaceSelection(i.join("\n"))
}
}, hr: function () {
var e = this.cm, t = e.getCursor();
e.getSelection();
e.replaceSelection((0 !== t.ch ? "\n\n" : "\n") + "------------\n\n")
}, tex: function () {
if (!o.tex) return alert("settings.tex === false"), this;
var e = this.cm, t = e.getCursor(), i = e.getSelection();
e.replaceSelection("$$" + i + "$$"), "" === i && e.setCursor(t.line, t.ch + 2)
}, link: function () {
this.executePlugin("linkDialog", "link-dialog/link-dialog")
}, "reference-link": function () {
this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog")
}, pagebreak: function () {
if (!o.pageBreak) return alert("settings.pageBreak === false"), this;
var e = this.cm;
e.getSelection();
e.replaceSelection("\r\n[========]\r\n")
}, image: function () {
this.executePlugin("imageDialog", "image-dialog/image-dialog")
}, code: function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
e.replaceSelection("`" + i + "`"), "" === i && e.setCursor(t.line, t.ch + 1)
}, "code-block": function () {
this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog")
}, "preformatted-text": function () {
this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog")
}, table: function () {
this.executePlugin("tableDialog", "table-dialog/table-dialog")
}, datetime: function () {
var e = this.cm, t = (e.getSelection(), new Date, o.lang.name),
i = r.dateFormat() + " " + r.dateFormat("zh-cn" === t || "zh-tw" === t ? "cn-week-day" : "week-day");
e.replaceSelection(i)
}, emoji: function () {
this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog")
}, "html-entities": function () {
this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog")
}, "goto-line": function () {
this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog")
}, watch: function () {
this[o.watch ? "unwatch" : "watch"]()
}, preview: function () {
this.previewing()
}, fullscreen: function () {
this.fullscreen()
}, clear: function () {
this.clear()
}, search: function () {
this.search()
}, help: function () {
this.executePlugin("helpDialog", "help-dialog/help-dialog")
}, info: function () {
this.showInfoDialog()
}
}, r.keyMaps = {
"Ctrl-1": "h1",
"Ctrl-2": "h2",
"Ctrl-3": "h3",
"Ctrl-4": "h4",
"Ctrl-5": "h5",
"Ctrl-6": "h6",
"Ctrl-B": "bold",
"Ctrl-D": "datetime",
"Ctrl-E": function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
o.emoji ? (e.replaceSelection(":" + i + ":"), "" === i && e.setCursor(t.line, t.ch + 1)) : alert("Error: settings.emoji == false")
},
"Ctrl-Alt-G": "goto-line",
"Ctrl-H": "hr",
"Ctrl-I": "italic",
"Ctrl-K": "code",
"Ctrl-L": function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection(), o = "" === i ? "" : ' "' + i + '"';
e.replaceSelection("[" + i + "](" + o + ")"), "" === i && e.setCursor(t.line, t.ch + 1)
},
"Ctrl-U": "list-ul",
"Shift-Ctrl-A": function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
o.atLink ? (e.replaceSelection("@" + i), "" === i && e.setCursor(t.line, t.ch + 1)) : alert("Error: settings.atLink == false")
},
"Shift-Ctrl-C": "code",
"Shift-Ctrl-Q": "quote",
"Shift-Ctrl-S": "del",
"Shift-Ctrl-K": "tex",
"Shift-Alt-C": function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection();
e.replaceSelection(["```", i, "```"].join("\n")), "" === i && e.setCursor(t.line, t.ch + 3)
},
"Shift-Ctrl-Alt-C": "code-block",
"Shift-Ctrl-H": "html-entities",
"Shift-Alt-H": "help",
"Shift-Ctrl-E": "emoji",
"Shift-Ctrl-U": "uppercase",
"Shift-Alt-U": "ucwords",
"Shift-Ctrl-Alt-U": "ucfirst",
"Shift-Alt-L": "lowercase",
"Shift-Ctrl-I": function () {
var e = this.cm, t = e.getCursor(), i = e.getSelection(), o = "" === i ? "" : ' "' + i + '"';
e.replaceSelection("![" + i + "](" + o + ")"), "" === i && e.setCursor(t.line, t.ch + 4)
},
"Shift-Ctrl-Alt-I": "image",
"Shift-Ctrl-L": "link",
"Shift-Ctrl-O": "list-ol",
"Shift-Ctrl-P": "preformatted-text",
"Shift-Ctrl-T": "table",
"Shift-Alt-P": "pagebreak",
F9: "watch",
F10: "preview",
F11: "fullscreen"
};
var a = function (e) {
return String.prototype.trim ? e.trim() : e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "")
};
r.trim = a;
r.ucwords = r.wordsFirstUpperCase = function (e) {
return e.toLowerCase().replace(/\b(\w)|\s(\w)/g, function (e) {
return e.toUpperCase()
})
};
var n = function (e) {
return e.toLowerCase().replace(/\b(\w)/, function (e) {
return e.toUpperCase()
})
};
return r.firstUpperCase = r.ucfirst = n, r.urls = {atLinkBase: "https://github.com/"}, r.regexs = {
atLink: /@(\w+)/g,
email: /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g,
emailLink: /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g,
emoji: /:([\w\+-]+):/g,
emojiDatetime: /(\d{2}:\d{2}:\d{2})/g,
twemoji: /:(tw-([\w]+)-?(\w+)?):/g,
fontAwesome: /:(fa-([\w]+)(-(\w+)){0,}):/g,
editormdLogo: /:(editormd-logo-?(\w+)?):/g,
pageBreak: /^\[[=]{8,}\]$/
}, r.emoji = {path: "/editormd/emoji/", ext: ".png"}, r.twemoji = {
path: "http://twemoji.maxcdn.com/36x36/",
ext: ".png"
}, r.markedRenderer = function (t, i) {
var o = e.extend({
toc: !0,
tocm: !1,
tocStartLevel: 1,
pageBreak: !0,
atLink: !0,
emailLink: !0,
taskList: !1,
emoji: !1,
tex: !1,
flowChart: !1,
sequenceDiagram: !1
}, i || {}), n = r.$marked, s = new n.Renderer;
t = t || [];
var l = r.regexs, c = l.atLink, h = l.emoji, d = l.email, u = l.emailLink, f = l.twemoji, p = l.fontAwesome,
m = l.editormdLogo, g = l.pageBreak;
return s.emoji = function (e) {
var t = (e = e.replace(r.regexs.emojiDatetime, function (e) {
return e.replace(/:/g, "&#58;")
})).match(h);
if (!t || !o.emoji) return e;
for (var i = 0, a = t.length; i < a; i++) ":+1:" === t[i] && (t[i] = ":\\+1:"), e = e.replace(new RegExp(t[i]), function (e, t) {
var i = e.match(p), o = e.replace(/:/g, "");
if (i) for (var a = 0, n = i.length; a < n; a++) {
var s = i[a].replace(/:/g, "");
return '<i class="fa ' + s + ' fa-emoji" title="' + s.replace("fa-", "") + '"></i>'
} else {
var l = e.match(m), c = e.match(f);
if (l) for (var h = 0, d = l.length; h < d; h++) {
var u = l[h].replace(/:/g, "");
return '<i class="' + u + '" title="Editor.md logo (' + u + ')"></i>'
} else {
if (!c) {
var g = "+1" === o ? "plus1" : o;
return g = "moon" === (g = "black_large_square" === g ? "black_square" : g) ? "waxing_gibbous_moon" : g, '<img src="' + r.emoji.path + g + r.emoji.ext + '" class="emoji" title="&#58;' + o + '&#58;" alt="&#58;' + o + '&#58;" />'
}
for (var w = 0, v = c.length; w < v; w++) {
var k = c[w].replace(/:/g, "").replace("tw-", "");
return '<img src="' + r.twemoji.path + k + r.twemoji.ext + '" title="twemoji-' + k + '" alt="twemoji-' + k + '" class="emoji twemoji" />'
}
}
}
});
return e
}, s.atLink = function (t) {
return c.test(t) ? (o.atLink && (t = (t = t.replace(d, function (e, t, i, o) {
return e.replace(/@/g, "_#_&#64;_#_")
})).replace(c, function (e, t) {
return '<a href="' + r.urls.atLinkBase + t + '" title="&#64;' + t + '" class="at-link">' + e + "</a>"
}).replace(/_#_&#64;_#_/g, "@")), o.emailLink && (t = t.replace(u, function (t, i, o, r, a) {
return !i && e.inArray(a, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0 ? '<a href="mailto:' + t + '">' + t + "</a>" : t
})), t) : t
}, s.link = function (e, t, i) {
if (this.options.sanitize) {
try {
var o = decodeURIComponent(unescape(e)).replace(/[^\w:]/g, "").toLowerCase()
} catch (e) {
return ""
}
if (0 === o.indexOf("javascript:")) return ""
}
var r = '<a href="' + e + '"';
return c.test(t) || c.test(i) ? (t && (r += ' title="' + t.replace(/@/g, "&#64;")), r + '">' + i.replace(/@/g, "&#64;") + "</a>") : (t && (r += ' title="' + t + '"'), r += ">" + i + "</a>")
}, s.heading = function (e, i, o) {
var r = e, n = /\s*\<a\s*href\=\"(.*)\"\s*([^\>]*)\>(.*)\<\/a\>\s*/;
if (n.test(e)) {
for (var s = [], l = 0, c = (e = e.split(/\<a\s*([^\>]+)\>([^\>]*)\<\/a\>/)).length; l < c; l++) s.push(e[l].replace(/\s*href\=\"(.*)\"\s*/g, ""));
e = s.join(" ")
}
var h = {text: e = a(e), level: i, slug: e.toLowerCase().replace(/[^\w]+/g, "-")},
d = /^[\u4e00-\u9fa5]+$/.test(e) ? escape(e).replace(/\%/g, "") : e.toLowerCase().replace(/[^\w]+/g, "-");
t.push(h);
var u = "<h" + i + ' id="h' + i + "-" + this.options.headerPrefix + d + '">';
return u += '<a name="' + e + '" class="reference-link"></a>', u += '<span class="header-link octicon octicon-link"></span>', u += n ? this.atLink(this.emoji(r)) : this.atLink(this.emoji(e)), u += "</h" + i + ">"
}, s.pageBreak = function (e) {
return g.test(e) && o.pageBreak && (e = '<hr style="page-break-after:always;" class="page-break editormd-page-break" />'), e
}, s.em = function (e, capInput) {
return e && -1 != e.indexOf("$$") || (capInput && capInput.indexOf('$$') != -1) ? "_" + e + "_" : "<em>" + e + "</em>"
}, s.paragraph = function (e) {
var t = /\$\$(.*)\$\$/g.test(e), i = /^\$\$(.*)\$\$$/.test(e), a = i ? ' class="' + r.classNames.tex + '"' : "",
n = o.tocm ? /^(\[TOC\]|\[TOCM\])$/.test(e) : /^\[TOC\]$/.test(e), s = /^\[TOCM\]$/.test(e),
l = '<div class="markdown-toc editormd-markdown-toc">' + (e = !i && t ? e.replace(/(\$\$([^\$]*)\$\$)+/g, function (e, t) {
return '<span class="' + r.classNames.tex + '">' + t.replace(/\$/g, "") + "</span>"
}) : i ? e.replace(/\$/g, "") : e) + "</div>";
return n ? s ? '<div class="editormd-toc-menu">' + l + "</div><br/>" : l : g.test(e) ? this.pageBreak(e) : "<p" + a + ">" + this.atLink(this.emoji(e)) + "</p>\n"
}, s.code = function (e, t, i) {
return "seq" === t || "sequence" === t ? '<div class="sequence-diagram">' + e + "</div>" : "flow" === t ? '<div class="flowchart">' + e + "</div>" : "math" === t || "latex" === t || "katex" === t ? '<p class="' + r.classNames.tex + '">' + e + "</p>" : n.Renderer.prototype.code.apply(this, arguments)
}, s.tablecell = function (e, t) {
var i = t.header ? "th" : "td";
return (t.align ? "<" + i + ' style="text-align:' + t.align + '">' : "<" + i + ">") + this.atLink(this.emoji(e)) + "</" + i + ">\n"
}, s.listitem = function (e) {
return o.taskList && /^\s*\[[x\s]\]\s*/.test(e) ? (e = e.replace(/^\s*\[\s\]\s*/, '<input type="checkbox" class="task-list-item-checkbox" /> ').replace(/^\s*\[x\]\s*/, '<input type="checkbox" class="task-list-item-checkbox" checked disabled /> '), '<li style="list-style: none;">' + this.atLink(this.emoji(e)) + "</li>") : "<li>" + this.atLink(this.emoji(e)) + "</li>"
}, s
}, r.markdownToCRenderer = function (e, t, i, o) {
var r = "", a = 0, n = this.classPrefix;
o = o || 1;
for (var s = 0, l = e.length; s < l; s++) {
var c = e[s].text, h = e[s].level;
h < o || (r += h > a ? "" : h < a ? new Array(a - h + 2).join("</ul></li>") : "</ul></li>", r += '<li><a class="toc-level-' + h + '" href="#' + c + '" level="' + h + '">' + c + "</a><ul>", a = h)
}
var d = t.find(".markdown-toc");
if (d.length < 1 && "false" === t.attr("previewContainer")) {
var u = '<div class="markdown-toc ' + n + 'markdown-toc"></div>';
u = i ? '<div class="' + n + 'toc-menu">' + u + "</div>" : u, t.html(u), d = t.find(".markdown-toc")
}
return i && d.wrap('<div class="' + n + 'toc-menu"></div><br/>'), d.html('<ul class="markdown-toc-list"></ul>').children(".markdown-toc-list").html(r.replace(/\r?\n?\<ul\>\<\/ul\>/g, "")), d
}, r.tocDropdownMenu = function (t, i) {
i = i || "Table of Contents";
var o = 400, r = t.find("." + this.classPrefix + "toc-menu");
return r.each(function () {
var t = e(this), r = t.children(".markdown-toc"), a = '<i class="fa fa-angle-down"></i>',
n = '<a href="javascript:;" class="toc-menu-btn">' + a + i + "</a>", s = r.children("ul"), l = s.find("li");
r.append(n), l.first().before("<li><h1>" + i + " " + a + "</h1></li>"), t.mouseover(function () {
s.show(), l.each(function () {
var t = e(this), i = t.children("ul");
if ("" === i.html() && i.remove(), i.length > 0 && "" !== i.html()) {
var r = t.children("a").first();
r.children(".fa").length < 1 && r.append(e(a).css({float: "right", paddingTop: "4px"}))
}
t.mouseover(function () {
i.css("z-index", o).show(), o += 1
}).mouseleave(function () {
i.hide()
})
})
}).mouseleave(function () {
s.hide()
})
}), r
}, r.filterHTMLTags = function (t, i) {
if ("string" != typeof t && (t = new String(t)), "string" != typeof i) return t;
for (var o = i.split("|"), r = o[0].split(","), a = o[1], n = 0, s = r.length; n < s; n++) {
var l = r[n];
t = t.replace(new RegExp("<s*" + l + "s*([^>]*)>([^>]*)<s*/" + l + "s*>", "igm"), "")
}
if (void 0 !== a) {
var c = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/gi;
t = "*" === a ? t.replace(c, function (e, t, i, o, r) {
return "<" + t + ">" + o + "</" + r + ">"
}) : "on*" === a ? t.replace(c, function (t, i, o, r, a) {
var n = e("<" + i + ">" + r + "</" + a + ">"), s = e(t)[0].attributes, l = {};
e.each(s, function (e, t) {
'"' !== t.nodeName && (l[t.nodeName] = t.nodeValue)
}), e.each(l, function (e) {
0 === e.indexOf("on") && delete l[e]
}), n.attr(l);
var c = void 0 !== n[1] ? e(n[1]).text() : "";
return n[0].outerHTML + c
}) : t.replace(c, function (t, i, o, r) {
var n = a.split(","), s = e(t);
return s.html(r), e.each(n, function (e) {
s.attr(n[e], null)
}), s[0].outerHTML
})
}
return t
}, r.markdownToHTML = function (t, i) {
r.$marked = marked;
var o = e("#" + t), a = o.settings = e.extend(!0, {
gfm: !0,
toc: !0,
tocm: !1,
tocStartLevel: 1,
tocTitle: "目录",
tocDropdown: !1,
tocContainer: "",
markdown: "",
markdownSourceCode: !1,
htmlDecode: !1,
autoLoadKaTeX: !0,
pageBreak: !0,
atLink: !0,
emailLink: !0,
tex: !1,
taskList: !1,
emoji: !1,
flowChart: !1,
sequenceDiagram: !1,
previewCodeHighlight: !0
}, i || {}), n = o.find("textarea");
n.length < 1 && (o.append("<textarea></textarea>"), n = o.find("textarea"));
var s = "" === a.markdown ? n.val() : a.markdown, l = [], c = {
toc: a.toc,
tocm: a.tocm,
tocStartLevel: a.tocStartLevel,
taskList: a.taskList,
emoji: a.emoji,
tex: a.tex,
pageBreak: a.pageBreak,
atLink: a.atLink,
emailLink: a.emailLink,
flowChart: a.flowChart,
sequenceDiagram: a.sequenceDiagram,
previewCodeHighlight: a.previewCodeHighlight
}, h = {
renderer: r.markedRenderer(l, c),
gfm: a.gfm,
tables: !0,
breaks: !0,
pedantic: !1,
sanitize: !a.htmlDecode,
smartLists: !0,
smartypants: !0
};
s = new String(s);
var d = marked(s, h);
d = r.filterHTMLTags(d, a.htmlDecode), a.markdownSourceCode ? n.text(s) : n.remove(), o.addClass("markdown-body " + this.classPrefix + "html-preview").append(d);
var u = "" !== a.tocContainer ? e(a.tocContainer) : o;
if ("" !== a.tocContainer && u.attr("previewContainer", !1), a.toc && (o.tocContainer = this.markdownToCRenderer(l, u, a.tocDropdown, a.tocStartLevel), (a.tocDropdown || o.find("." + this.classPrefix + "toc-menu").length > 0) && this.tocDropdownMenu(o, a.tocTitle), "" !== a.tocContainer && o.find(".editormd-toc-menu, .editormd-markdown-toc").remove()), a.previewCodeHighlight && (o.find("pre").addClass("prettyprint linenums"), prettyPrint()), r.isIE8 || (a.flowChart && o.find(".flowchart").flowChart(), a.sequenceDiagram && o.find(".sequence-diagram").sequenceDiagram({theme: "simple"})), a.tex) {
var f = function () {
o.find("." + r.classNames.tex).each(function () {
var t = e(this);
katex.render(t.text(), t[0]), t.find(".katex").css("font-size", "1.0em")
})
};
!a.autoLoadKaTeX || r.$katex || r.kaTeXLoaded ? f() : this.loadKaTeX(function () {
r.$katex = katex, r.kaTeXLoaded = !0, f()
})
}
return o.getMarkdown = function () {
return n.val()
}, o
}, r.themes = ["default", "dark"], r.previewThemes = ["default", "dark"], r.editorThemes = ["default", "3024-day", "3024-night", "ambiance", "ambiance-mobile", "base16-dark", "base16-light", "blackboard", "cobalt", "eclipse", "elegant", "erlang-dark", "lesser-dark", "mbo", "mdn-like", "midnight", "monokai", "neat", "neo", "night", "paraiso-dark", "paraiso-light", "pastel-on-dark", "rubyblue", "solarized", "the-matrix", "tomorrow-night-eighties", "twilight", "vibrant-ink", "xq-dark", "xq-light"], r.loadPlugins = {}, r.loadFiles = {
js: [],
css: [],
plugin: []
}, r.loadPlugin = function (e, t, i) {
t = t || function () {
}, this.loadScript(e, function () {
r.loadFiles.plugin.push(e), t()
}, i)
}, r.loadCSS = function (e, t, i) {
i = i || "head", t = t || function () {
};
var o = document.createElement("link");
o.type = "text/css", o.rel = "stylesheet", o.onload = o.onreadystatechange = function () {
r.loadFiles.css.push(e), t()
}, o.href = e + ".css", "head" === i ? document.getElementsByTagName("head")[0].appendChild(o) : document.body.appendChild(o)
}, r.isIE = "Microsoft Internet Explorer" == navigator.appName, r.isIE8 = r.isIE && "8." == navigator.appVersion.match(/8./i), r.loadScript = function (e, t, i) {
i = i || "head", t = t || function () {
};
var o = null;
(o = document.createElement("script")).id = e.replace(/[\./]+/g, "-"), o.type = "text/javascript", o.src = e + ".js", r.isIE8 ? o.onreadystatechange = function () {
o.readyState && ("loaded" !== o.readyState && "complete" !== o.readyState || (o.onreadystatechange = null, r.loadFiles.js.push(e), t()))
} : o.onload = function () {
r.loadFiles.js.push(e), t()
}, "head" === i ? document.getElementsByTagName("head")[0].appendChild(o) : document.body.appendChild(o)
}, r.katexURL = {css: "/katex/katex.min", js: "/katex/katex.min"}, r.kaTeXLoaded = !1, r.loadKaTeX = function (e) {
r.loadCSS(r.katexURL.css, function () {
r.loadScript(r.katexURL.js, e || function () {
})
})
}, r.lockScreen = function (t) {
e("html,body").css("overflow", t ? "hidden" : "")
}, r.createDialog = function (t) {
t = e.extend(!0, {
name: "",
width: 420,
height: 240,
title: "",
drag: !0,
closed: !0,
content: "",
mask: !0,
maskStyle: {backgroundColor: "#fff", opacity: .1},
lockScreen: !0,
footer: !0,
buttons: !1
}, t);
var i = this, o = this.editor, a = r.classPrefix, n = (new Date).getTime(),
s = "" === t.name ? a + "dialog-" + n : t.name, l = r.mouseOrTouch,
c = '<div class="' + a + "dialog " + s + '">';
"" !== t.title && (c += '<div class="' + a + 'dialog-header"' + (t.drag ? ' style="cursor: move;"' : "") + ">", c += '<strong class="' + a + 'dialog-title">' + t.title + "</strong>", c += "</div>"), t.closed && (c += '<a href="javascript:;" class="fa fa-close ' + a + 'dialog-close"></a>'), c += '<div class="' + a + 'dialog-container">' + t.content, (t.footer || "string" == typeof t.footer) && (c += '<div class="' + a + 'dialog-footer">' + ("boolean" == typeof t.footer ? "" : t.footer) + "</div>"), c += "</div>", c += '<div class="' + a + "dialog-mask " + a + 'dialog-mask-bg"></div>', c += '<div class="' + a + "dialog-mask " + a + 'dialog-mask-con"></div>', c += "</div>", o.append(c);
var h = o.find("." + s);
h.lockScreen = function (o) {
return t.lockScreen && (e("html,body").css("overflow", o ? "hidden" : ""), i.resize()), h
}, h.showMask = function () {
return t.mask && o.find("." + a + "mask").css(t.maskStyle).css("z-index", r.dialogZindex - 1).show(), h
}, h.hideMask = function () {
return t.mask && o.find("." + a + "mask").hide(), h
}, h.loading = function (e) {
return h.find("." + a + "dialog-mask")[e ? "show" : "hide"](), h
}, h.lockScreen(!0).showMask(), h.show().css({
zIndex: r.dialogZindex,
border: r.isIE8 ? "1px solid #ddd" : "",
width: "number" == typeof t.width ? t.width + "px" : t.width,
height: "number" == typeof t.height ? t.height + "px" : t.height
});
var d = function () {
h.css({top: (e(window).height() - h.height()) / 2 + "px", left: (e(window).width() - h.width()) / 2 + "px"})
};
if (d(), e(window).resize(d), h.children("." + a + "dialog-close").bind(l("click", "touchend"), function () {
h.hide().lockScreen(!1).hideMask()
}), "object" == typeof t.buttons) {
var u = h.footer = h.find("." + a + "dialog-footer");
for (var f in t.buttons) {
var p = t.buttons[f], m = a + f + "-btn";
u.append('<button class="' + a + "btn " + m + '">' + p[0] + "</button>"), p[1] = e.proxy(p[1], h), u.children("." + m).bind(l("click", "touchend"), p[1])
}
}
if ("" !== t.title && t.drag) {
var g, w, v = h.children("." + a + "dialog-header");
t.mask || v.bind(l("click", "touchend"), function () {
r.dialogZindex += 2, h.css("z-index", r.dialogZindex)
}), v.mousedown(function (e) {
e = e || window.event, g = e.clientX - parseInt(h[0].style.left), w = e.clientY - parseInt(h[0].style.top), document.onmousemove = x
});
var k = function (e) {
e.removeClass(a + "user-unselect").off("selectstart")
}, b = function (e) {
e.addClass(a + "user-unselect").on("selectstart", function (e) {
return !1
})
}, x = function (t) {
t = t || window.event;
var i, o, r = parseInt(h[0].style.left), a = parseInt(h[0].style.top);
r >= 0 ? r + h.width() <= e(window).width() ? i = t.clientX - g : (i = e(window).width() - h.width(), document.onmousemove = null) : (i = 0, document.onmousemove = null), a >= 0 ? o = t.clientY - w : (o = 0, document.onmousemove = null), document.onselectstart = function () {
return !1
}, b(e("body")), b(h), h[0].style.left = i + "px", h[0].style.top = o + "px"
};
document.onmouseup = function () {
k(e("body")), k(h), document.onselectstart = null, document.onmousemove = null
}, v.touchDraggable = function () {
var t = null;
this.bind("touchstart", function (i) {
var o = i.originalEvent, r = e(this).parent().position();
t = {x: o.changedTouches[0].pageX - r.left, y: o.changedTouches[0].pageY - r.top}
}).bind("touchmove", function (i) {
i.preventDefault();
var o = i.originalEvent;
e(this).parent().css({top: o.changedTouches[0].pageY - t.y, left: o.changedTouches[0].pageX - t.x})
})
}, v.touchDraggable()
}
return r.dialogZindex += 2, e("body").removeAttr("style"), h
}, r.mouseOrTouch = function (e, t) {
t = t || "touchend";
var i = e = e || "click";
try {
document.createEvent("TouchEvent"), i = t
} catch (e) {
}
return i
}, r.dateFormat = function (e) {
e = e || "";
var t = function (e) {
return e < 10 ? "0" + e : e
}, i = new Date, o = i.getFullYear(), r = o.toString().slice(2, 4), a = t(i.getMonth() + 1), n = t(i.getDate()),
s = i.getDay(), l = t(i.getHours()), c = t(i.getMinutes()), h = t(i.getSeconds()), d = t(i.getMilliseconds()),
u = "", f = r + "-" + a + "-" + n, p = o + "-" + a + "-" + n, m = l + ":" + c + ":" + h;
switch (e) {
case"UNIX Time":
u = i.getTime();
break;
case"UTC":
u = i.toUTCString();
break;
case"yy":
u = r;
break;
case"year":
case"yyyy":
u = o;
break;
case"month":
case"mm":
u = a;
break;
case"cn-week-day":
case"cn-wd":
u = "星期" + ["日", "一", "二", "三", "四", "五", "六"][s];
break;
case"week-day":
case"wd":
u = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][s];
break;
case"day":
case"dd":
u = n;
break;
case"hour":
case"hh":
u = l;
break;
case"min":
case"ii":
u = c;
break;
case"second":
case"ss":
u = h;
break;
case"ms":
u = d;
break;
case"yy-mm-dd":
u = f;
break;
case"yyyy-mm-dd":
u = p;
break;
case"yyyy-mm-dd h:i:s ms":
case"full + ms":
u = p + " " + m + " " + d;
break;
case"full":
case"yyyy-mm-dd h:i:s":
default:
u = p + " " + m
}
return u
}, r
}
}), window._whenPasterDoUpload = function (e, t, i) {
var o, r, a, n = e.clipboardData, s = 0;
if (n) {
if (!(o = n.items)) return;
for (r = o[0], a = n.types || []; s < a.length; s++) if ("Files" === a[s]) {
r = o[s];
break
}
if (r && "file" === r.kind && r.type.match(/^image\//i)) {
var l = r.getAsFile(), c = new FormData;
c.append("editormd-image-file", l), c.append("file_param_name", "editormd-image-file"), c.append("byxhr", "true");
var h = new window.XMLHttpRequest;
h.addEventListener("load", function (e) {
var t = e.target, o = JSON.parse(t.responseText);
1 === o.success ? i && i(o) : (i && i(o), console.log(o.message))
}, !1), h.addEventListener("error", function () {
console.error("error")
}, !1), h.open("POST", t), h.send(c)
}
}
};
// 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 (e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : e.CodeMirror = t()
}(this, function () {
"use strict";
var e = navigator.userAgent, t = navigator.platform, r = /gecko\/\d/i.test(e), n = /MSIE \d/.test(e),
i = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e), o = /Edge\/(\d+)/.exec(e), l = n || i || o,
s = l && (n ? document.documentMode || 6 : +(o || i)[1]), a = !o && /WebKit\//.test(e),
u = a && /Qt\/\d+\.\d+/.test(e), c = !o && /Chrome\//.test(e), h = /Opera\//.test(e),
f = /Apple Computer/.test(navigator.vendor), d = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e), p = /PhantomJS/.test(e),
g = !o && /AppleWebKit/.test(e) && /Mobile\/\w+/.test(e), v = /Android/.test(e),
m = g || v || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e), y = g || /Mac/.test(t),
b = /\bCrOS\b/.test(e), w = /win/i.test(t), x = h && e.match(/Version\/(\d*\.\d*)/);
x && (x = Number(x[1])), x && x >= 15 && (h = !1, a = !0);
var C = y && (u || h && (null == x || x < 12.11)), S = r || l && s >= 9;
function L(e) {
return new RegExp("(^|\\s)" + e + "(?:$|\\s)\\s*")
}
var T, k = function (e, t) {
var r = e.className, n = L(t).exec(r);
if (n) {
var i = r.slice(n.index + n[0].length);
e.className = r.slice(0, n.index) + (i ? n[1] + i : "")
}
};
function M(e) {
for (var t = e.childNodes.length; t > 0; --t) e.removeChild(e.firstChild);
return e
}
function N(e, t) {
return M(e).appendChild(t)
}
function O(e, t, r, n) {
var i = document.createElement(e);
if (r && (i.className = r), n && (i.style.cssText = n), "string" == typeof t) i.appendChild(document.createTextNode(t)); else if (t) for (var o = 0; o < t.length; ++o) i.appendChild(t[o]);
return i
}
function W(e, t, r, n) {
var i = O(e, t, r, n);
return i.setAttribute("role", "presentation"), i
}
function A(e, t) {
if (3 == t.nodeType && (t = t.parentNode), e.contains) return e.contains(t);
do {
if (11 == t.nodeType && (t = t.host), t == e) return !0
} while (t = t.parentNode)
}
function D() {
var e;
try {
e = document.activeElement
} catch (t) {
e = document.body || null
}
for (; e && e.shadowRoot && e.shadowRoot.activeElement;) e = e.shadowRoot.activeElement;
return e
}
function H(e, t) {
var r = e.className;
L(t).test(r) || (e.className += (r ? " " : "") + t)
}
function P(e, t) {
for (var r = e.split(" "), n = 0; n < r.length; n++) r[n] && !L(r[n]).test(t) && (t += " " + r[n]);
return t
}
T = document.createRange ? function (e, t, r, n) {
var i = document.createRange();
return i.setEnd(n || e, r), i.setStart(e, t), i
} : function (e, t, r) {
var n = document.body.createTextRange();
try {
n.moveToElementText(e.parentNode)
} catch (e) {
return n
}
return n.collapse(!0), n.moveEnd("character", r), n.moveStart("character", t), n
};
var E = function (e) {
e.select()
};
function F(e) {
var t = Array.prototype.slice.call(arguments, 1);
return function () {
return e.apply(null, t)
}
}
function I(e, t, r) {
for (var n in t || (t = {}), e) !e.hasOwnProperty(n) || !1 === r && t.hasOwnProperty(n) || (t[n] = e[n]);
return t
}
function z(e, t, r, n, i) {
null == t && -1 == (t = e.search(/[^\s\u00a0]/)) && (t = e.length);
for (var o = n || 0, l = i || 0; ;) {
var s = e.indexOf("\t", o);
if (s < 0 || s >= t) return l + (t - o);
l += s - o, l += r - l % r, o = s + 1
}
}
g ? E = function (e) {
e.selectionStart = 0, e.selectionEnd = e.value.length
} : l && (E = function (e) {
try {
e.select()
} catch (e) {
}
});
var R = function () {
this.id = null
};
function B(e, t) {
for (var r = 0; r < e.length; ++r) if (e[r] == t) return r;
return -1
}
R.prototype.set = function (e, t) {
clearTimeout(this.id), this.id = setTimeout(t, e)
};
var G = 30, U = {
toString: function () {
return "CodeMirror.Pass"
}
}, V = {scroll: !1}, K = {origin: "*mouse"}, j = {origin: "+move"};
function X(e, t, r) {
for (var n = 0, i = 0; ;) {
var o = e.indexOf("\t", n);
-1 == o && (o = e.length);
var l = o - n;
if (o == e.length || i + l >= t) return n + Math.min(l, t - i);
if (i += o - n, n = o + 1, (i += r - i % r) >= t) return n
}
}
var Y = [""];
function _(e) {
for (; Y.length <= e;) Y.push($(Y) + " ");
return Y[e]
}
function $(e) {
return e[e.length - 1]
}
function q(e, t) {
for (var r = [], n = 0; n < e.length; n++) r[n] = t(e[n], n);
return r
}
function Z() {
}
function Q(e, t) {
var r;
return Object.create ? r = Object.create(e) : (Z.prototype = e, r = new Z), t && I(t, r), r
}
var J = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
function ee(e) {
return /\w/.test(e) || e > "€" && (e.toUpperCase() != e.toLowerCase() || J.test(e))
}
function te(e, t) {
return t ? !!(t.source.indexOf("\\w") > -1 && ee(e)) || t.test(e) : ee(e)
}
function re(e) {
for (var t in e) if (e.hasOwnProperty(t) && e[t]) return !1;
return !0
}
var ne = /[\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 ie(e) {
return e.charCodeAt(0) >= 768 && ne.test(e)
}
function oe(e, t, r) {
for (; (r < 0 ? t > 0 : t < e.length) && ie(e.charAt(t));) t += r;
return t
}
function le(e, t, r) {
for (; ;) {
if (Math.abs(t - r) <= 1) return e(t) ? t : r;
var n = Math.floor((t + r) / 2);
e(n) ? r = n : t = n
}
}
function se(e, t) {
if ((t -= e.first) < 0 || t >= e.size) throw new Error("There is no line " + (t + e.first) + " in the document.");
for (var r = e; !r.lines;) for (var n = 0; ; ++n) {
var i = r.children[n], o = i.chunkSize();
if (t < o) {
r = i;
break
}
t -= o
}
return r.lines[t]
}
function ae(e, t, r) {
var n = [], i = t.line;
return e.iter(t.line, r.line + 1, function (e) {
var o = e.text;
i == r.line && (o = o.slice(0, r.ch)), i == t.line && (o = o.slice(t.ch)), n.push(o), ++i
}), n
}
function ue(e, t, r) {
var n = [];
return e.iter(t, r, function (e) {
n.push(e.text)
}), n
}
function ce(e, t) {
var r = t - e.height;
if (r) for (var n = e; n; n = n.parent) n.height += r
}
function he(e) {
if (null == e.parent) return null;
for (var t = e.parent, r = B(t.lines, e), n = t.parent; n; t = n, n = n.parent) for (var i = 0; n.children[i] != t; ++i) r += n.children[i].chunkSize();
return r + t.first
}
function fe(e, t) {
var r = e.first;
e:do {
for (var n = 0; n < e.children.length; ++n) {
var i = e.children[n], o = i.height;
if (t < o) {
e = i;
continue e
}
t -= o, r += i.chunkSize()
}
return r
} while (!e.lines);
for (var l = 0; l < e.lines.length; ++l) {
var s = e.lines[l].height;
if (t < s) break;
t -= s
}
return r + l
}
function de(e, t) {
return t >= e.first && t < e.first + e.size
}
function pe(e, t) {
return String(e.lineNumberFormatter(t + e.firstLineNumber))
}
function ge(e, t, r) {
if (void 0 === r && (r = null), !(this instanceof ge)) return new ge(e, t, r);
this.line = e, this.ch = t, this.sticky = r
}
function ve(e, t) {
return e.line - t.line || e.ch - t.ch
}
function me(e, t) {
return e.sticky == t.sticky && 0 == ve(e, t)
}
function ye(e) {
return ge(e.line, e.ch)
}
function be(e, t) {
return ve(e, t) < 0 ? t : e
}
function we(e, t) {
return ve(e, t) < 0 ? e : t
}
function xe(e, t) {
return Math.max(e.first, Math.min(t, e.first + e.size - 1))
}
function Ce(e, t) {
if (t.line < e.first) return ge(e.first, 0);
var r = e.first + e.size - 1;
return t.line > r ? ge(r, se(e, r).text.length) : function (e, t) {
var r = e.ch;
return null == r || r > t ? ge(e.line, t) : r < 0 ? ge(e.line, 0) : e
}(t, se(e, t.line).text.length)
}
function Se(e, t) {
for (var r = [], n = 0; n < t.length; n++) r[n] = Ce(e, t[n]);
return r
}
var Le = !1, Te = !1;
function ke(e, t, r) {
this.marker = e, this.from = t, this.to = r
}
function Me(e, t) {
if (e) for (var r = 0; r < e.length; ++r) {
var n = e[r];
if (n.marker == t) return n
}
}
function Ne(e, t) {
for (var r, n = 0; n < e.length; ++n) e[n] != t && (r || (r = [])).push(e[n]);
return r
}
function Oe(e, t) {
if (t.full) return null;
var r = de(e, t.from.line) && se(e, t.from.line).markedSpans, n = de(e, t.to.line) && se(e, t.to.line).markedSpans;
if (!r && !n) return null;
var i = t.from.ch, o = t.to.ch, l = 0 == ve(t.from, t.to), s = function (e, t, r) {
var n;
if (e) for (var i = 0; i < e.length; ++i) {
var o = e[i], l = o.marker;
if (null == o.from || (l.inclusiveLeft ? o.from <= t : o.from < t) || o.from == t && "bookmark" == l.type && (!r || !o.marker.insertLeft)) {
var s = null == o.to || (l.inclusiveRight ? o.to >= t : o.to > t);
(n || (n = [])).push(new ke(l, o.from, s ? null : o.to))
}
}
return n
}(r, i, l), a = function (e, t, r) {
var n;
if (e) for (var i = 0; i < e.length; ++i) {
var o = e[i], l = o.marker;
if (null == o.to || (l.inclusiveRight ? o.to >= t : o.to > t) || o.from == t && "bookmark" == l.type && (!r || o.marker.insertLeft)) {
var s = null == o.from || (l.inclusiveLeft ? o.from <= t : o.from < t);
(n || (n = [])).push(new ke(l, s ? null : o.from - t, null == o.to ? null : o.to - t))
}
}
return n
}(n, o, l), u = 1 == t.text.length, c = $(t.text).length + (u ? i : 0);
if (s) for (var h = 0; h < s.length; ++h) {
var f = s[h];
if (null == f.to) {
var d = Me(a, f.marker);
d ? u && (f.to = null == d.to ? null : d.to + c) : f.to = i
}
}
if (a) for (var p = 0; p < a.length; ++p) {
var g = a[p];
if (null != g.to && (g.to += c), null == g.from) Me(s, g.marker) || (g.from = c, u && (s || (s = [])).push(g)); else g.from += c, u && (s || (s = [])).push(g)
}
s && (s = We(s)), a && a != s && (a = We(a));
var v = [s];
if (!u) {
var m, y = t.text.length - 2;
if (y > 0 && s) for (var b = 0; b < s.length; ++b) null == s[b].to && (m || (m = [])).push(new ke(s[b].marker, null, null));
for (var w = 0; w < y; ++w) v.push(m);
v.push(a)
}
return v
}
function We(e) {
for (var t = 0; t < e.length; ++t) {
var r = e[t];
null != r.from && r.from == r.to && !1 !== r.marker.clearWhenEmpty && e.splice(t--, 1)
}
return e.length ? e : null
}
function Ae(e) {
var t = e.markedSpans;
if (t) {
for (var r = 0; r < t.length; ++r) t[r].marker.detachLine(e);
e.markedSpans = null
}
}
function De(e, t) {
if (t) {
for (var r = 0; r < t.length; ++r) t[r].marker.attachLine(e);
e.markedSpans = t
}
}
function He(e) {
return e.inclusiveLeft ? -1 : 0
}
function Pe(e) {
return e.inclusiveRight ? 1 : 0
}
function Ee(e, t) {
var r = e.lines.length - t.lines.length;
if (0 != r) return r;
var n = e.find(), i = t.find(), o = ve(n.from, i.from) || He(e) - He(t);
if (o) return -o;
var l = ve(n.to, i.to) || Pe(e) - Pe(t);
return l || t.id - e.id
}
function Fe(e, t) {
var r, n = Te && e.markedSpans;
if (n) for (var i = void 0, o = 0; o < n.length; ++o) (i = n[o]).marker.collapsed && null == (t ? i.from : i.to) && (!r || Ee(r, i.marker) < 0) && (r = i.marker);
return r
}
function Ie(e) {
return Fe(e, !0)
}
function ze(e) {
return Fe(e, !1)
}
function Re(e, t, r, n, i) {
var o = se(e, t), l = Te && o.markedSpans;
if (l) for (var s = 0; s < l.length; ++s) {
var a = l[s];
if (a.marker.collapsed) {
var u = a.marker.find(0), c = ve(u.from, r) || He(a.marker) - He(i), h = ve(u.to, n) || Pe(a.marker) - Pe(i);
if (!(c >= 0 && h <= 0 || c <= 0 && h >= 0) && (c <= 0 && (a.marker.inclusiveRight && i.inclusiveLeft ? ve(u.to, r) >= 0 : ve(u.to, r) > 0) || c >= 0 && (a.marker.inclusiveRight && i.inclusiveLeft ? ve(u.from, n) <= 0 : ve(u.from, n) < 0))) return !0
}
}
}
function Be(e) {
for (var t; t = Ie(e);) e = t.find(-1, !0).line;
return e
}
function Ge(e, t) {
var r = se(e, t), n = Be(r);
return r == n ? t : he(n)
}
function Ue(e, t) {
if (t > e.lastLine()) return t;
var r, n = se(e, t);
if (!Ve(e, n)) return t;
for (; r = ze(n);) n = r.find(1, !0).line;
return he(n) + 1
}
function Ve(e, t) {
var r = Te && t.markedSpans;
if (r) for (var n = void 0, i = 0; i < r.length; ++i) if ((n = r[i]).marker.collapsed) {
if (null == n.from) return !0;
if (!n.marker.widgetNode && 0 == n.from && n.marker.inclusiveLeft && Ke(e, t, n)) return !0
}
}
function Ke(e, t, r) {
if (null == r.to) {
var n = r.marker.find(1, !0);
return Ke(e, n.line, Me(n.line.markedSpans, r.marker))
}
if (r.marker.inclusiveRight && r.to == t.text.length) return !0;
for (var i = void 0, o = 0; o < t.markedSpans.length; ++o) if ((i = t.markedSpans[o]).marker.collapsed && !i.marker.widgetNode && i.from == r.to && (null == i.to || i.to != r.from) && (i.marker.inclusiveLeft || r.marker.inclusiveRight) && Ke(e, t, i)) return !0
}
function je(e) {
for (var t = 0, r = (e = Be(e)).parent, n = 0; n < r.lines.length; ++n) {
var i = r.lines[n];
if (i == e) break;
t += i.height
}
for (var o = r.parent; o; o = (r = o).parent) for (var l = 0; l < o.children.length; ++l) {
var s = o.children[l];
if (s == r) break;
t += s.height
}
return t
}
function Xe(e) {
if (0 == e.height) return 0;
for (var t, r = e.text.length, n = e; t = Ie(n);) {
var i = t.find(0, !0);
n = i.from.line, r += i.from.ch - i.to.ch
}
for (n = e; t = ze(n);) {
var o = t.find(0, !0);
r -= n.text.length - o.from.ch, r += (n = o.to.line).text.length - o.to.ch
}
return r
}
function Ye(e) {
var t = e.display, r = e.doc;
t.maxLine = se(r, r.first), t.maxLineLength = Xe(t.maxLine), t.maxLineChanged = !0, r.iter(function (e) {
var r = Xe(e);
r > t.maxLineLength && (t.maxLineLength = r, t.maxLine = e)
})
}
var _e = null;
function $e(e, t, r) {
var n;
_e = null;
for (var i = 0; i < e.length; ++i) {
var o = e[i];
if (o.from < t && o.to > t) return i;
o.to == t && (o.from != o.to && "before" == r ? n = i : _e = i), o.from == t && (o.from != o.to && "before" != r ? n = i : _e = i)
}
return null != n ? n : _e
}
var qe = function () {
var e = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",
t = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
var r = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/, n = /[stwN]/, i = /[LRr]/, o = /[Lb1n]/, l = /[1n]/;
function s(e, t, r) {
this.level = e, this.from = t, this.to = r
}
return function (a, u) {
var c = "ltr" == u ? "L" : "R";
if (0 == a.length || "ltr" == u && !r.test(a)) return !1;
for (var h, f = a.length, d = [], p = 0; p < f; ++p) d.push((h = a.charCodeAt(p)) <= 247 ? e.charAt(h) : 1424 <= h && h <= 1524 ? "R" : 1536 <= h && h <= 1785 ? t.charAt(h - 1536) : 1774 <= h && h <= 2220 ? "r" : 8192 <= h && h <= 8203 ? "w" : 8204 == h ? "b" : "L");
for (var g = 0, v = c; g < f; ++g) {
var m = d[g];
"m" == m ? d[g] = v : v = m
}
for (var y = 0, b = c; y < f; ++y) {
var w = d[y];
"1" == w && "r" == b ? d[y] = "n" : i.test(w) && (b = w, "r" == w && (d[y] = "R"))
}
for (var x = 1, C = d[0]; x < f - 1; ++x) {
var S = d[x];
"+" == S && "1" == C && "1" == d[x + 1] ? d[x] = "1" : "," != S || C != d[x + 1] || "1" != C && "n" != C || (d[x] = C), C = S
}
for (var L = 0; L < f; ++L) {
var T = d[L];
if ("," == T) d[L] = "N"; else if ("%" == T) {
var k = void 0;
for (k = L + 1; k < f && "%" == d[k]; ++k) ;
for (var M = L && "!" == d[L - 1] || k < f && "1" == d[k] ? "1" : "N", N = L; N < k; ++N) d[N] = M;
L = k - 1
}
}
for (var O = 0, W = c; O < f; ++O) {
var A = d[O];
"L" == W && "1" == A ? d[O] = "L" : i.test(A) && (W = A)
}
for (var D = 0; D < f; ++D) if (n.test(d[D])) {
var H = void 0;
for (H = D + 1; H < f && n.test(d[H]); ++H) ;
for (var P = "L" == (D ? d[D - 1] : c), E = P == ("L" == (H < f ? d[H] : c)) ? P ? "L" : "R" : c, F = D; F < H; ++F) d[F] = E;
D = H - 1
}
for (var I, z = [], R = 0; R < f;) if (o.test(d[R])) {
var B = R;
for (++R; R < f && o.test(d[R]); ++R) ;
z.push(new s(0, B, R))
} else {
var G = R, U = z.length;
for (++R; R < f && "L" != d[R]; ++R) ;
for (var V = G; V < R;) if (l.test(d[V])) {
G < V && z.splice(U, 0, new s(1, G, V));
var K = V;
for (++V; V < R && l.test(d[V]); ++V) ;
z.splice(U, 0, new s(2, K, V)), G = V
} else ++V;
G < R && z.splice(U, 0, new s(1, G, R))
}
return 1 == z[0].level && (I = a.match(/^\s+/)) && (z[0].from = I[0].length, z.unshift(new s(0, 0, I[0].length))), 1 == $(z).level && (I = a.match(/\s+$/)) && ($(z).to -= I[0].length, z.push(new s(0, f - I[0].length, f))), "rtl" == u ? z.reverse() : z
}
}();
function Ze(e, t) {
var r = e.order;
return null == r && (r = e.order = qe(e.text, t)), r
}
function Qe(e, t, r) {
var n = oe(e.text, t + r, r);
return n < 0 || n > e.text.length ? null : n
}
function Je(e, t, r) {
var n = Qe(e, t.ch, r);
return null == n ? null : new ge(t.line, n, r < 0 ? "after" : "before")
}
function et(e, t, r, n, i) {
if (e) {
var o = Ze(r, t.doc.direction);
if (o) {
var l, s = i < 0 ? $(o) : o[0], a = i < 0 == (1 == s.level) ? "after" : "before";
if (s.level > 0) {
var u = Ar(t, r);
l = i < 0 ? r.text.length - 1 : 0;
var c = Dr(t, u, l).top;
l = le(function (e) {
return Dr(t, u, e).top == c
}, i < 0 == (1 == s.level) ? s.from : s.to - 1, l), "before" == a && (l = Qe(r, l, 1))
} else l = i < 0 ? s.to : s.from;
return new ge(n, l, a)
}
}
return new ge(n, i < 0 ? r.text.length : 0, i < 0 ? "before" : "after")
}
function tt(e, t, r, n) {
var i = Ze(t, e.doc.direction);
if (!i) return Je(t, r, n);
r.ch >= t.text.length ? (r.ch = t.text.length, r.sticky = "before") : r.ch <= 0 && (r.ch = 0, r.sticky = "after");
var o = $e(i, r.ch, r.sticky), l = i[o];
if ("ltr" == e.doc.direction && l.level % 2 == 0 && (n > 0 ? l.to > r.ch : l.from < r.ch)) return Je(t, r, n);
var s, a = function (e, r) {
return Qe(t, e instanceof ge ? e.ch : e, r)
}, u = function (r) {
return e.options.lineWrapping ? (s = s || Ar(e, t), qr(e, t, s, r)) : {begin: 0, end: t.text.length}
}, c = u("before" == r.sticky ? a(r, -1) : r.ch);
if ("rtl" == e.doc.direction || 1 == l.level) {
var h = 1 == l.level == n < 0, f = a(r, h ? 1 : -1);
if (null != f && (h ? f <= l.to && f <= c.end : f >= l.from && f >= c.begin)) {
var d = h ? "before" : "after";
return new ge(r.line, f, d)
}
}
var p = function (e, t, n) {
for (var o = function (e, t) {
return t ? new ge(r.line, a(e, 1), "before") : new ge(r.line, e, "after")
}; e >= 0 && e < i.length; e += t) {
var l = i[e], s = t > 0 == (1 != l.level), u = s ? n.begin : a(n.end, -1);
if (l.from <= u && u < l.to) return o(u, s);
if (u = s ? l.from : a(l.to, -1), n.begin <= u && u < n.end) return o(u, s)
}
}, g = p(o + n, n, c);
if (g) return g;
var v = n > 0 ? c.end : a(c.begin, -1);
return null == v || n > 0 && v == t.text.length || !(g = p(n > 0 ? 0 : i.length - 1, n, u(v))) ? null : g
}
var rt = [], nt = function (e, t, r) {
if (e.addEventListener) e.addEventListener(t, r, !1); else if (e.attachEvent) e.attachEvent("on" + t, r); else {
var n = e._handlers || (e._handlers = {});
n[t] = (n[t] || rt).concat(r)
}
};
function it(e, t) {
return e._handlers && e._handlers[t] || rt
}
function ot(e, t, r) {
if (e.removeEventListener) e.removeEventListener(t, r, !1); else if (e.detachEvent) e.detachEvent("on" + t, r); else {
var n = e._handlers, i = n && n[t];
if (i) {
var o = B(i, r);
o > -1 && (n[t] = i.slice(0, o).concat(i.slice(o + 1)))
}
}
}
function lt(e, t) {
var r = it(e, t);
if (r.length) for (var n = Array.prototype.slice.call(arguments, 2), i = 0; i < r.length; ++i) r[i].apply(null, n)
}
function st(e, t, r) {
return "string" == typeof t && (t = {
type: t, preventDefault: function () {
this.defaultPrevented = !0
}
}), lt(e, r || t.type, e, t), dt(t) || t.codemirrorIgnore
}
function at(e) {
var t = e._handlers && e._handlers.cursorActivity;
if (t) for (var r = e.curOp.cursorActivityHandlers || (e.curOp.cursorActivityHandlers = []), n = 0; n < t.length; ++n) -1 == B(r, t[n]) && r.push(t[n])
}
function ut(e, t) {
return it(e, t).length > 0
}
function ct(e) {
e.prototype.on = function (e, t) {
nt(this, e, t)
}, e.prototype.off = function (e, t) {
ot(this, e, t)
}
}
function ht(e) {
e.preventDefault ? e.preventDefault() : e.returnValue = !1
}
function ft(e) {
e.stopPropagation ? e.stopPropagation() : e.cancelBubble = !0
}
function dt(e) {
return null != e.defaultPrevented ? e.defaultPrevented : 0 == e.returnValue
}
function pt(e) {
ht(e), ft(e)
}
function gt(e) {
return e.target || e.srcElement
}
function vt(e) {
var t = e.which;
return null == t && (1 & e.button ? t = 1 : 2 & e.button ? t = 3 : 4 & e.button && (t = 2)), y && e.ctrlKey && 1 == t && (t = 3), t
}
var mt, yt, bt = function () {
if (l && s < 9) return !1;
var e = O("div");
return "draggable" in e || "dragDrop" in e
}();
function wt(e) {
if (null == mt) {
var t = O("span", "");
N(e, O("span", [t, document.createTextNode("x")])), 0 != e.firstChild.offsetHeight && (mt = t.offsetWidth <= 1 && t.offsetHeight > 2 && !(l && s < 8))
}
var r = mt ? O("span", "") : O("span", " ", null, "display: inline-block; width: 1px; margin-right: -1px");
return r.setAttribute("cm-text", ""), r
}
function xt(e) {
if (null != yt) return yt;
var t = N(e, document.createTextNode("AخA")), r = T(t, 0, 1).getBoundingClientRect(),
n = T(t, 1, 2).getBoundingClientRect();
return M(e), !(!r || r.left == r.right) && (yt = n.right - r.right < 3)
}
var Ct, St = 3 != "\n\nb".split(/\n/).length ? function (e) {
for (var t = 0, r = [], n = e.length; t <= n;) {
var i = e.indexOf("\n", t);
-1 == i && (i = e.length);
var o = e.slice(t, "\r" == e.charAt(i - 1) ? i - 1 : i), l = o.indexOf("\r");
-1 != l ? (r.push(o.slice(0, l)), t += l + 1) : (r.push(o), t = i + 1)
}
return r
} : function (e) {
return e.split(/\r\n?|\n/)
}, Lt = window.getSelection ? function (e) {
try {
return e.selectionStart != e.selectionEnd
} catch (e) {
return !1
}
} : function (e) {
var t;
try {
t = e.ownerDocument.selection.createRange()
} catch (e) {
}
return !(!t || t.parentElement() != e) && 0 != t.compareEndPoints("StartToEnd", t)
}, Tt = "oncopy" in (Ct = O("div")) || (Ct.setAttribute("oncopy", "return;"), "function" == typeof Ct.oncopy),
kt = null;
var Mt = {}, Nt = {};
function Ot(e) {
if ("string" == typeof e && Nt.hasOwnProperty(e)) e = Nt[e]; else if (e && "string" == typeof e.name && Nt.hasOwnProperty(e.name)) {
var t = Nt[e.name];
"string" == typeof t && (t = {name: t}), (e = Q(t, e)).name = t.name
} else {
if ("string" == typeof e && /^[\w\-]+\/[\w\-]+\+xml$/.test(e)) return Ot("application/xml");
if ("string" == typeof e && /^[\w\-]+\/[\w\-]+\+json$/.test(e)) return Ot("application/json")
}
return "string" == typeof e ? {name: e} : e || {name: "null"}
}
function Wt(e, t) {
t = Ot(t);
var r = Mt[t.name];
if (!r) return Wt(e, "text/plain");
var n = r(e, t);
if (At.hasOwnProperty(t.name)) {
var i = At[t.name];
for (var o in i) i.hasOwnProperty(o) && (n.hasOwnProperty(o) && (n["_" + o] = n[o]), n[o] = i[o])
}
if (n.name = t.name, t.helperType && (n.helperType = t.helperType), t.modeProps) for (var l in t.modeProps) n[l] = t.modeProps[l];
return n
}
var At = {};
function Dt(e, t) {
I(t, At.hasOwnProperty(e) ? At[e] : At[e] = {})
}
function Ht(e, t) {
if (!0 === t) return t;
if (e.copyState) return e.copyState(t);
var r = {};
for (var n in t) {
var i = t[n];
i instanceof Array && (i = i.concat([])), r[n] = i
}
return r
}
function Pt(e, t) {
for (var r; e.innerMode && (r = e.innerMode(t)) && r.mode != e;) t = r.state, e = r.mode;
return r || {mode: e, state: t}
}
function Et(e, t, r) {
return !e.startState || e.startState(t, r)
}
var Ft = function (e, t) {
this.pos = this.start = 0, this.string = e, this.tabSize = t || 8, this.lastColumnPos = this.lastColumnValue = 0, this.lineStart = 0
};
function It(e, t, r, n) {
var i = [e.state.modeGen], o = {};
jt(e, t.text, e.doc.mode, r, function (e, t) {
return i.push(e, t)
}, o, n);
for (var l = function (r) {
var n = e.state.overlays[r], l = 1, s = 0;
jt(e, t.text, n.mode, !0, function (e, t) {
for (var r = l; s < e;) {
var o = i[l];
o > e && i.splice(l, 1, e, i[l + 1], o), l += 2, s = Math.min(e, o)
}
if (t) if (n.opaque) i.splice(r, l - r, e, "overlay " + t), l = r + 2; else for (; r < l; r += 2) {
var a = i[r + 1];
i[r + 1] = (a ? a + " " : "") + "overlay " + t
}
}, o)
}, s = 0; s < e.state.overlays.length; ++s) l(s);
return {styles: i, classes: o.bgClass || o.textClass ? o : null}
}
function zt(e, t, r) {
if (!t.styles || t.styles[0] != e.state.modeGen) {
var n = Rt(e, he(t)), i = It(e, t, t.text.length > e.options.maxHighlightLength ? Ht(e.doc.mode, n) : n);
t.stateAfter = n, t.styles = i.styles, i.classes ? t.styleClasses = i.classes : t.styleClasses && (t.styleClasses = null), r === e.doc.frontier && e.doc.frontier++
}
return t.styles
}
function Rt(e, t, r) {
var n = e.doc, i = e.display;
if (!n.mode.startState) return !0;
var o = function (e, t, r) {
for (var n, i, o = e.doc, l = r ? -1 : t - (e.doc.mode.innerMode ? 1e3 : 100), s = t; s > l; --s) {
if (s <= o.first) return o.first;
var a = se(o, s - 1);
if (a.stateAfter && (!r || s <= o.frontier)) return s;
var u = z(a.text, null, e.options.tabSize);
(null == i || n > u) && (i = s - 1, n = u)
}
return i
}(e, t, r), l = o > n.first && se(n, o - 1).stateAfter;
return l = l ? Ht(n.mode, l) : Et(n.mode), n.iter(o, t, function (r) {
Bt(e, r.text, l);
var s = o == t - 1 || o % 5 == 0 || o >= i.viewFrom && o < i.viewTo;
r.stateAfter = s ? Ht(n.mode, l) : null, ++o
}), r && (n.frontier = o), l
}
function Bt(e, t, r, n) {
var i = e.doc.mode, o = new Ft(t, e.options.tabSize);
for (o.start = o.pos = n || 0, "" == t && Gt(i, r); !o.eol();) Ut(i, o, r), o.start = o.pos
}
function Gt(e, t) {
if (e.blankLine) return e.blankLine(t);
if (e.innerMode) {
var r = Pt(e, t);
return r.mode.blankLine ? r.mode.blankLine(r.state) : void 0
}
}
function Ut(e, t, r, n) {
for (var i = 0; i < 10; i++) {
n && (n[0] = Pt(e, r).mode);
var o = e.token(t, r);
if (t.pos > t.start) return o
}
throw new Error("Mode " + e.name + " failed to advance stream.")
}
function Vt(e, t, r, n) {
var i, o = function (e) {
return {start: h.start, end: h.pos, string: h.current(), type: i || null, state: e ? Ht(l.mode, c) : c}
}, l = e.doc, s = l.mode;
t = Ce(l, t);
var a, u = se(l, t.line), c = Rt(e, t.line, r), h = new Ft(u.text, e.options.tabSize);
for (n && (a = []); (n || h.pos < t.ch) && !h.eol();) h.start = h.pos, i = Ut(s, h, c), n && a.push(o(!0));
return n ? a : o()
}
function Kt(e, t) {
if (e) for (; ;) {
var r = e.match(/(?:^|\s+)line-(background-)?(\S+)/);
if (!r) break;
e = e.slice(0, r.index) + e.slice(r.index + r[0].length);
var n = r[1] ? "bgClass" : "textClass";
null == t[n] ? t[n] = r[2] : new RegExp("(?:^|s)" + r[2] + "(?:$|s)").test(t[n]) || (t[n] += " " + r[2])
}
return e
}
function jt(e, t, r, n, i, o, l) {
var s = r.flattenSpans;
null == s && (s = e.options.flattenSpans);
var a, u = 0, c = null, h = new Ft(t, e.options.tabSize), f = e.options.addModeClass && [null];
for ("" == t && Kt(Gt(r, n), o); !h.eol();) {
if (h.pos > e.options.maxHighlightLength ? (s = !1, l && Bt(e, t, n, h.pos), h.pos = t.length, a = null) : a = Kt(Ut(r, h, n, f), o), f) {
var d = f[0].name;
d && (a = "m-" + (a ? d + " " + a : d))
}
if (!s || c != a) {
for (; u < h.start;) i(u = Math.min(h.start, u + 5e3), c);
c = a
}
h.start = h.pos
}
for (; u < h.pos;) {
var p = Math.min(h.pos, u + 5e3);
i(p, c), u = p
}
}
Ft.prototype.eol = function () {
return this.pos >= this.string.length
}, Ft.prototype.sol = function () {
return this.pos == this.lineStart
}, Ft.prototype.peek = function () {
return this.string.charAt(this.pos) || void 0
}, Ft.prototype.next = function () {
if (this.pos < this.string.length) return this.string.charAt(this.pos++)
}, Ft.prototype.eat = function (e) {
var t = this.string.charAt(this.pos);
if ("string" == typeof e ? t == e : t && (e.test ? e.test(t) : e(t))) return ++this.pos, t
}, Ft.prototype.eatWhile = function (e) {
for (var t = this.pos; this.eat(e);) ;
return this.pos > t
}, Ft.prototype.eatSpace = function () {
for (var e = this.pos; /[\s\u00a0]/.test(this.string.charAt(this.pos));) ++this.pos;
return this.pos > e
}, Ft.prototype.skipToEnd = function () {
this.pos = this.string.length
}, Ft.prototype.skipTo = function (e) {
var t = this.string.indexOf(e, this.pos);
if (t > -1) return this.pos = t, !0
}, Ft.prototype.backUp = function (e) {
this.pos -= e
}, Ft.prototype.column = function () {
return this.lastColumnPos < this.start && (this.lastColumnValue = z(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue), this.lastColumnPos = this.start), this.lastColumnValue - (this.lineStart ? z(this.string, this.lineStart, this.tabSize) : 0)
}, Ft.prototype.indentation = function () {
return z(this.string, null, this.tabSize) - (this.lineStart ? z(this.string, this.lineStart, this.tabSize) : 0)
}, Ft.prototype.match = function (e, t, r) {
if ("string" != typeof e) {
var n = this.string.slice(this.pos).match(e);
return n && n.index > 0 ? null : (n && !1 !== t && (this.pos += n[0].length), n)
}
var i = function (e) {
return r ? e.toLowerCase() : e
};
if (i(this.string.substr(this.pos, e.length)) == i(e)) return !1 !== t && (this.pos += e.length), !0
}, Ft.prototype.current = function () {
return this.string.slice(this.start, this.pos)
}, Ft.prototype.hideFirstChars = function (e, t) {
this.lineStart += e;
try {
return t()
} finally {
this.lineStart -= e
}
};
var Xt = function (e, t, r) {
this.text = e, De(this, t), this.height = r ? r(this) : 1
};
function Yt(e) {
e.parent = null, Ae(e)
}
Xt.prototype.lineNo = function () {
return he(this)
}, ct(Xt);
var _t = {}, $t = {};
function qt(e, t) {
if (!e || /^\s*$/.test(e)) return null;
var r = t.addModeClass ? $t : _t;
return r[e] || (r[e] = e.replace(/\S+/g, "cm-$&"))
}
function Zt(e, t) {
var r = W("span", null, null, a ? "padding-right: .1px" : null), n = {
pre: W("pre", [r], "CodeMirror-line"),
content: r,
col: 0,
pos: 0,
cm: e,
trailingSpace: !1,
splitSpaces: (l || a) && e.getOption("lineWrapping")
};
t.measure = {};
for (var i = 0; i <= (t.rest ? t.rest.length : 0); i++) {
var o = i ? t.rest[i - 1] : t.line, s = void 0;
n.pos = 0, n.addToken = Jt, xt(e.display.measure) && (s = Ze(o, e.doc.direction)) && (n.addToken = er(n.addToken, s)), n.map = [], rr(o, n, zt(e, o, t != e.display.externalMeasured && he(o))), o.styleClasses && (o.styleClasses.bgClass && (n.bgClass = P(o.styleClasses.bgClass, n.bgClass || "")), o.styleClasses.textClass && (n.textClass = P(o.styleClasses.textClass, n.textClass || ""))), 0 == n.map.length && n.map.push(0, 0, n.content.appendChild(wt(e.display.measure))), 0 == i ? (t.measure.map = n.map, t.measure.cache = {}) : ((t.measure.maps || (t.measure.maps = [])).push(n.map), (t.measure.caches || (t.measure.caches = [])).push({}))
}
if (a) {
var u = n.content.lastChild;
(/\bcm-tab\b/.test(u.className) || u.querySelector && u.querySelector(".cm-tab")) && (n.content.className = "cm-tab-wrap-hack")
}
return lt(e, "renderLine", e, t.line, n.pre), n.pre.className && (n.textClass = P(n.pre.className, n.textClass || "")), n
}
function Qt(e) {
var t = O("span", "•", "cm-invalidchar");
return t.title = "\\u" + e.charCodeAt(0).toString(16), t.setAttribute("aria-label", t.title), t
}
function Jt(e, t, r, n, i, o, a) {
if (t) {
var u, c = e.splitSpaces ? function (e, t) {
if (e.length > 1 && !/ /.test(e)) return e;
for (var r = t, n = "", i = 0; i < e.length; i++) {
var o = e.charAt(i);
" " != o || !r || i != e.length - 1 && 32 != e.charCodeAt(i + 1) || (o = " "), n += o, r = " " == o
}
return n
}(t, e.trailingSpace) : t, h = e.cm.state.specialChars, f = !1;
if (h.test(t)) {
u = document.createDocumentFragment();
for (var d = 0; ;) {
h.lastIndex = d;
var p = h.exec(t), g = p ? p.index - d : t.length - d;
if (g) {
var v = document.createTextNode(c.slice(d, d + g));
l && s < 9 ? u.appendChild(O("span", [v])) : u.appendChild(v), e.map.push(e.pos, e.pos + g, v), e.col += g, e.pos += g
}
if (!p) break;
d += g + 1;
var m = void 0;
if ("\t" == p[0]) {
var y = e.cm.options.tabSize, b = y - e.col % y;
(m = u.appendChild(O("span", _(b), "cm-tab"))).setAttribute("role", "presentation"), m.setAttribute("cm-text", "\t"), e.col += b
} else "\r" == p[0] || "\n" == p[0] ? ((m = u.appendChild(O("span", "\r" == p[0] ? "␍" : "␤", "cm-invalidchar"))).setAttribute("cm-text", p[0]), e.col += 1) : ((m = e.cm.options.specialCharPlaceholder(p[0])).setAttribute("cm-text", p[0]), l && s < 9 ? u.appendChild(O("span", [m])) : u.appendChild(m), e.col += 1);
e.map.push(e.pos, e.pos + 1, m), e.pos++
}
} else e.col += t.length, u = document.createTextNode(c), e.map.push(e.pos, e.pos + t.length, u), l && s < 9 && (f = !0), e.pos += t.length;
if (e.trailingSpace = 32 == c.charCodeAt(t.length - 1), r || n || i || f || a) {
var w = r || "";
n && (w += n), i && (w += i);
var x = O("span", [u], w, a);
return o && (x.title = o), e.content.appendChild(x)
}
e.content.appendChild(u)
}
}
function er(e, t) {
return function (r, n, i, o, l, s, a) {
i = i ? i + " cm-force-border" : "cm-force-border";
for (var u = r.pos, c = u + n.length; ;) {
for (var h = void 0, f = 0; f < t.length && !((h = t[f]).to > u && h.from <= u); f++) ;
if (h.to >= c) return e(r, n, i, o, l, s, a);
e(r, n.slice(0, h.to - u), i, o, null, s, a), o = null, n = n.slice(h.to - u), u = h.to
}
}
}
function tr(e, t, r, n) {
var i = !n && r.widgetNode;
i && e.map.push(e.pos, e.pos + t, i), !n && e.cm.display.input.needsContentAttribute && (i || (i = e.content.appendChild(document.createElement("span"))), i.setAttribute("cm-marker", r.id)), i && (e.cm.display.input.setUneditable(i), e.content.appendChild(i)), e.pos += t, e.trailingSpace = !1
}
function rr(e, t, r) {
var n = e.markedSpans, i = e.text, o = 0;
if (n) for (var l, s, a, u, c, h, f, d = i.length, p = 0, g = 1, v = "", m = 0; ;) {
if (m == p) {
a = u = c = h = s = "", f = null, m = 1 / 0;
for (var y = [], b = void 0, w = 0; w < n.length; ++w) {
var x = n[w], C = x.marker;
"bookmark" == C.type && x.from == p && C.widgetNode ? y.push(C) : x.from <= p && (null == x.to || x.to > p || C.collapsed && x.to == p && x.from == p) ? (null != x.to && x.to != p && m > x.to && (m = x.to, u = ""), C.className && (a += " " + C.className), C.css && (s = (s ? s + ";" : "") + C.css), C.startStyle && x.from == p && (c += " " + C.startStyle), C.endStyle && x.to == m && (b || (b = [])).push(C.endStyle, x.to), C.title && !h && (h = C.title), C.collapsed && (!f || Ee(f.marker, C) < 0) && (f = x)) : x.from > p && m > x.from && (m = x.from)
}
if (b) for (var S = 0; S < b.length; S += 2) b[S + 1] == m && (u += " " + b[S]);
if (!f || f.from == p) for (var L = 0; L < y.length; ++L) tr(t, 0, y[L]);
if (f && (f.from || 0) == p) {
if (tr(t, (null == f.to ? d + 1 : f.to) - p, f.marker, null == f.from), null == f.to) return;
f.to == p && (f = !1)
}
}
if (p >= d) break;
for (var T = Math.min(d, m); ;) {
if (v) {
var k = p + v.length;
if (!f) {
var M = k > T ? v.slice(0, T - p) : v;
t.addToken(t, M, l ? l + a : a, c, p + M.length == m ? u : "", h, s)
}
if (k >= T) {
v = v.slice(T - p), p = T;
break
}
p = k, c = ""
}
v = i.slice(o, o = r[g++]), l = qt(r[g++], t.cm.options)
}
} else for (var N = 1; N < r.length; N += 2) t.addToken(t, i.slice(o, o = r[N]), qt(r[N + 1], t.cm.options))
}
function nr(e, t, r) {
this.line = t, this.rest = function (e) {
for (var t, r; t = ze(e);) e = t.find(1, !0).line, (r || (r = [])).push(e);
return r
}(t), this.size = this.rest ? he($(this.rest)) - r + 1 : 1, this.node = this.text = null, this.hidden = Ve(e, t)
}
function ir(e, t, r) {
for (var n, i = [], o = t; o < r; o = n) {
var l = new nr(e.doc, se(e.doc, o), o);
n = o + l.size, i.push(l)
}
return i
}
var or = null;
var lr = null;
function sr(e, t) {
var r = it(e, t);
if (r.length) {
var n, i = Array.prototype.slice.call(arguments, 2);
or ? n = or.delayedCallbacks : lr ? n = lr : (n = lr = [], setTimeout(ar, 0));
for (var o = function (e) {
n.push(function () {
return r[e].apply(null, i)
})
}, l = 0; l < r.length; ++l) o(l)
}
}
function ar() {
var e = lr;
lr = null;
for (var t = 0; t < e.length; ++t) e[t]()
}
function ur(e, t, r, n) {
for (var i = 0; i < t.changes.length; i++) {
var o = t.changes[i];
"text" == o ? fr(e, t) : "gutter" == o ? pr(e, t, r, n) : "class" == o ? dr(e, t) : "widget" == o && gr(e, t, n)
}
t.changes = null
}
function cr(e) {
return e.node == e.text && (e.node = O("div", null, null, "position: relative"), e.text.parentNode && e.text.parentNode.replaceChild(e.node, e.text), e.node.appendChild(e.text), l && s < 8 && (e.node.style.zIndex = 2)), e.node
}
function hr(e, t) {
var r = e.display.externalMeasured;
return r && r.line == t.line ? (e.display.externalMeasured = null, t.measure = r.measure, r.built) : Zt(e, t)
}
function fr(e, t) {
var r = t.text.className, n = hr(e, t);
t.text == t.node && (t.node = n.pre), t.text.parentNode.replaceChild(n.pre, t.text), t.text = n.pre, n.bgClass != t.bgClass || n.textClass != t.textClass ? (t.bgClass = n.bgClass, t.textClass = n.textClass, dr(e, t)) : r && (t.text.className = r)
}
function dr(e, t) {
!function (e, t) {
var r = t.bgClass ? t.bgClass + " " + (t.line.bgClass || "") : t.line.bgClass;
if (r && (r += " CodeMirror-linebackground"), t.background) r ? t.background.className = r : (t.background.parentNode.removeChild(t.background), t.background = null); else if (r) {
var n = cr(t);
t.background = n.insertBefore(O("div", null, r), n.firstChild), e.display.input.setUneditable(t.background)
}
}(e, t), t.line.wrapClass ? cr(t).className = t.line.wrapClass : t.node != t.text && (t.node.className = "");
var r = t.textClass ? t.textClass + " " + (t.line.textClass || "") : t.line.textClass;
t.text.className = r || ""
}
function pr(e, t, r, n) {
if (t.gutter && (t.node.removeChild(t.gutter), t.gutter = null), t.gutterBackground && (t.node.removeChild(t.gutterBackground), t.gutterBackground = null), t.line.gutterClass) {
var i = cr(t);
t.gutterBackground = O("div", null, "CodeMirror-gutter-background " + t.line.gutterClass, "left: " + (e.options.fixedGutter ? n.fixedPos : -n.gutterTotalWidth) + "px; width: " + n.gutterTotalWidth + "px"), e.display.input.setUneditable(t.gutterBackground), i.insertBefore(t.gutterBackground, t.text)
}
var o = t.line.gutterMarkers;
if (e.options.lineNumbers || o) {
var l = cr(t),
s = t.gutter = O("div", null, "CodeMirror-gutter-wrapper", "left: " + (e.options.fixedGutter ? n.fixedPos : -n.gutterTotalWidth) + "px");
if (e.display.input.setUneditable(s), l.insertBefore(s, t.text), t.line.gutterClass && (s.className += " " + t.line.gutterClass), !e.options.lineNumbers || o && o["CodeMirror-linenumbers"] || (t.lineNumber = s.appendChild(O("div", pe(e.options, r), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + n.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + e.display.lineNumInnerWidth + "px"))), o) for (var a = 0; a < e.options.gutters.length; ++a) {
var u = e.options.gutters[a], c = o.hasOwnProperty(u) && o[u];
c && s.appendChild(O("div", [c], "CodeMirror-gutter-elt", "left: " + n.gutterLeft[u] + "px; width: " + n.gutterWidth[u] + "px"))
}
}
}
function gr(e, t, r) {
t.alignable && (t.alignable = null);
for (var n = t.node.firstChild, i = void 0; n; n = i) i = n.nextSibling, "CodeMirror-linewidget" == n.className && t.node.removeChild(n);
mr(e, t, r)
}
function vr(e, t, r, n) {
var i = hr(e, t);
return t.text = t.node = i.pre, i.bgClass && (t.bgClass = i.bgClass), i.textClass && (t.textClass = i.textClass), dr(e, t), pr(e, t, r, n), mr(e, t, n), t.node
}
function mr(e, t, r) {
if (yr(e, t.line, t, r, !0), t.rest) for (var n = 0; n < t.rest.length; n++) yr(e, t.rest[n], t, r, !1)
}
function yr(e, t, r, n, i) {
if (t.widgets) for (var o = cr(r), l = 0, s = t.widgets; l < s.length; ++l) {
var a = s[l], u = O("div", [a.node], "CodeMirror-linewidget");
a.handleMouseEvents || u.setAttribute("cm-ignore-events", "true"), br(a, u, r, n), e.display.input.setUneditable(u), i && a.above ? o.insertBefore(u, r.gutter || r.text) : o.appendChild(u), sr(a, "redraw")
}
}
function br(e, t, r, n) {
if (e.noHScroll) {
(r.alignable || (r.alignable = [])).push(t);
var i = n.wrapperWidth;
t.style.left = n.fixedPos + "px", e.coverGutter || (i -= n.gutterTotalWidth, t.style.paddingLeft = n.gutterTotalWidth + "px"), t.style.width = i + "px"
}
e.coverGutter && (t.style.zIndex = 5, t.style.position = "relative", e.noHScroll || (t.style.marginLeft = -n.gutterTotalWidth + "px"))
}
function wr(e) {
if (null != e.height) return e.height;
var t = e.doc.cm;
if (!t) return 0;
if (!A(document.body, e.node)) {
var r = "position: relative;";
e.coverGutter && (r += "margin-left: -" + t.display.gutters.offsetWidth + "px;"), e.noHScroll && (r += "width: " + t.display.wrapper.clientWidth + "px;"), N(t.display.measure, O("div", [e.node], null, r))
}
return e.height = e.node.parentNode.offsetHeight
}
function xr(e, t) {
for (var r = gt(t); r != e.wrapper; r = r.parentNode) if (!r || 1 == r.nodeType && "true" == r.getAttribute("cm-ignore-events") || r.parentNode == e.sizer && r != e.mover) return !0
}
function Cr(e) {
return e.lineSpace.offsetTop
}
function Sr(e) {
return e.mover.offsetHeight - e.lineSpace.offsetHeight
}
function Lr(e) {
if (e.cachedPaddingH) return e.cachedPaddingH;
var t = N(e.measure, O("pre", "x")), r = window.getComputedStyle ? window.getComputedStyle(t) : t.currentStyle,
n = {left: parseInt(r.paddingLeft), right: parseInt(r.paddingRight)};
return isNaN(n.left) || isNaN(n.right) || (e.cachedPaddingH = n), n
}
function Tr(e) {
return G - e.display.nativeBarWidth
}
function kr(e) {
return e.display.scroller.clientWidth - Tr(e) - e.display.barWidth
}
function Mr(e) {
return e.display.scroller.clientHeight - Tr(e) - e.display.barHeight
}
function Nr(e, t, r) {
if (e.line == t) return {map: e.measure.map, cache: e.measure.cache};
for (var n = 0; n < e.rest.length; n++) if (e.rest[n] == t) return {
map: e.measure.maps[n],
cache: e.measure.caches[n]
};
for (var i = 0; i < e.rest.length; i++) if (he(e.rest[i]) > r) return {
map: e.measure.maps[i],
cache: e.measure.caches[i],
before: !0
}
}
function Or(e, t, r, n) {
return Dr(e, Ar(e, t), r, n)
}
function Wr(e, t) {
if (t >= e.display.viewFrom && t < e.display.viewTo) return e.display.view[ln(e, t)];
var r = e.display.externalMeasured;
return r && t >= r.lineN && t < r.lineN + r.size ? r : void 0
}
function Ar(e, t) {
var r = he(t), n = Wr(e, r);
n && !n.text ? n = null : n && n.changes && (ur(e, n, r, en(e)), e.curOp.forceUpdate = !0), n || (n = function (e, t) {
var r = he(t = Be(t)), n = e.display.externalMeasured = new nr(e.doc, t, r);
n.lineN = r;
var i = n.built = Zt(e, n);
return n.text = i.pre, N(e.display.lineMeasure, i.pre), n
}(e, t));
var i = Nr(n, t, r);
return {line: t, view: n, rect: null, map: i.map, cache: i.cache, before: i.before, hasHeights: !1}
}
function Dr(e, t, r, n, i) {
t.before && (r = -1);
var o, a = r + (n || "");
return t.cache.hasOwnProperty(a) ? o = t.cache[a] : (t.rect || (t.rect = t.view.text.getBoundingClientRect()), t.hasHeights || (!function (e, t, r) {
var n = e.options.lineWrapping, i = n && kr(e);
if (!t.measure.heights || n && t.measure.width != i) {
var o = t.measure.heights = [];
if (n) {
t.measure.width = i;
for (var l = t.text.firstChild.getClientRects(), s = 0; s < l.length - 1; s++) {
var a = l[s], u = l[s + 1];
Math.abs(a.bottom - u.bottom) > 2 && o.push((a.bottom + u.top) / 2 - r.top)
}
}
o.push(r.bottom - r.top)
}
}(e, t.view, t.rect), t.hasHeights = !0), (o = function (e, t, r, n) {
var i, o = Er(t.map, r, n), a = o.node, u = o.start, c = o.end, h = o.collapse;
if (3 == a.nodeType) {
for (var f = 0; f < 4; f++) {
for (; u && ie(t.line.text.charAt(o.coverStart + u));) --u;
for (; o.coverStart + c < o.coverEnd && ie(t.line.text.charAt(o.coverStart + c));) ++c;
if ((i = l && s < 9 && 0 == u && c == o.coverEnd - o.coverStart ? a.parentNode.getBoundingClientRect() : Fr(T(a, u, c).getClientRects(), n)).left || i.right || 0 == u) break;
c = u, u -= 1, h = "right"
}
l && s < 11 && (i = function (e, t) {
if (!window.screen || null == screen.logicalXDPI || screen.logicalXDPI == screen.deviceXDPI || !function (e) {
if (null != kt) return kt;
var t = N(e, O("span", "x")), r = t.getBoundingClientRect(), n = T(t, 0, 1).getBoundingClientRect();
return kt = Math.abs(r.left - n.left) > 1
}(e)) return t;
var r = screen.logicalXDPI / screen.deviceXDPI, n = screen.logicalYDPI / screen.deviceYDPI;
return {left: t.left * r, right: t.right * r, top: t.top * n, bottom: t.bottom * n}
}(e.display.measure, i))
} else {
var d;
u > 0 && (h = n = "right"), i = e.options.lineWrapping && (d = a.getClientRects()).length > 1 ? d["right" == n ? d.length - 1 : 0] : a.getBoundingClientRect()
}
if (l && s < 9 && !u && (!i || !i.left && !i.right)) {
var p = a.parentNode.getClientRects()[0];
i = p ? {left: p.left, right: p.left + Jr(e.display), top: p.top, bottom: p.bottom} : Pr
}
for (var g = i.top - t.rect.top, v = i.bottom - t.rect.top, m = (g + v) / 2, y = t.view.measure.heights, b = 0; b < y.length - 1 && !(m < y[b]); b++) ;
var w = b ? y[b - 1] : 0, x = y[b], C = {
left: ("right" == h ? i.right : i.left) - t.rect.left,
right: ("left" == h ? i.left : i.right) - t.rect.left,
top: w,
bottom: x
};
i.left || i.right || (C.bogus = !0);
e.options.singleCursorHeightPerLine || (C.rtop = g, C.rbottom = v);
return C
}(e, t, r, n)).bogus || (t.cache[a] = o)), {
left: o.left,
right: o.right,
top: i ? o.rtop : o.top,
bottom: i ? o.rbottom : o.bottom
}
}
var Hr, Pr = {left: 0, right: 0, top: 0, bottom: 0};
function Er(e, t, r) {
for (var n, i, o, l, s, a, u = 0; u < e.length; u += 3) if (s = e[u], a = e[u + 1], t < s ? (i = 0, o = 1, l = "left") : t < a ? o = (i = t - s) + 1 : (u == e.length - 3 || t == a && e[u + 3] > t) && (i = (o = a - s) - 1, t >= a && (l = "right")), null != i) {
if (n = e[u + 2], s == a && r == (n.insertLeft ? "left" : "right") && (l = r), "left" == r && 0 == i) for (; u && e[u - 2] == e[u - 3] && e[u - 1].insertLeft;) n = e[2 + (u -= 3)], l = "left";
if ("right" == r && i == a - s) for (; u < e.length - 3 && e[u + 3] == e[u + 4] && !e[u + 5].insertLeft;) n = e[(u += 3) + 2], l = "right";
break
}
return {node: n, start: i, end: o, collapse: l, coverStart: s, coverEnd: a}
}
function Fr(e, t) {
var r = Pr;
if ("left" == t) for (var n = 0; n < e.length && (r = e[n]).left == r.right; n++) ; else for (var i = e.length - 1; i >= 0 && (r = e[i]).left == r.right; i--) ;
return r
}
function Ir(e) {
if (e.measure && (e.measure.cache = {}, e.measure.heights = null, e.rest)) for (var t = 0; t < e.rest.length; t++) e.measure.caches[t] = {}
}
function zr(e) {
e.display.externalMeasure = null, M(e.display.lineMeasure);
for (var t = 0; t < e.display.view.length; t++) Ir(e.display.view[t])
}
function Rr(e) {
zr(e), e.display.cachedCharWidth = e.display.cachedTextHeight = e.display.cachedPaddingH = null, e.options.lineWrapping || (e.display.maxLineChanged = !0), e.display.lineNumChars = null
}
function Br() {
return window.pageXOffset || (document.documentElement || document.body).scrollLeft
}
function Gr() {
return window.pageYOffset || (document.documentElement || document.body).scrollTop
}
function Ur(e, t, r, n, i) {
if (!i && t.widgets) for (var o = 0; o < t.widgets.length; ++o) if (t.widgets[o].above) {
var l = wr(t.widgets[o]);
r.top += l, r.bottom += l
}
if ("line" == n) return r;
n || (n = "local");
var s = je(t);
if ("local" == n ? s += Cr(e.display) : s -= e.display.viewOffset, "page" == n || "window" == n) {
var a = e.display.lineSpace.getBoundingClientRect();
s += a.top + ("window" == n ? 0 : Gr());
var u = a.left + ("window" == n ? 0 : Br());
r.left += u, r.right += u
}
return r.top += s, r.bottom += s, r
}
function Vr(e, t, r) {
if ("div" == r) return t;
var n = t.left, i = t.top;
if ("page" == r) n -= Br(), i -= Gr(); else if ("local" == r || !r) {
var o = e.display.sizer.getBoundingClientRect();
n += o.left, i += o.top
}
var l = e.display.lineSpace.getBoundingClientRect();
return {left: n - l.left, top: i - l.top}
}
function Kr(e, t, r, n, i) {
return n || (n = se(e.doc, t.line)), Ur(e, n, Or(e, n, t.ch, i), r)
}
function jr(e, t, r, n, i, o) {
function l(t, l) {
var s = Dr(e, i, t, l ? "right" : "left", o);
return l ? s.left = s.right : s.right = s.left, Ur(e, n, s, r)
}
n = n || se(e.doc, t.line), i || (i = Ar(e, n));
var s = Ze(n, e.doc.direction), a = t.ch, u = t.sticky;
if (a >= n.text.length ? (a = n.text.length, u = "before") : a <= 0 && (a = 0, u = "after"), !s) return l("before" == u ? a - 1 : a, "before" == u);
function c(e, t, r) {
return l(r ? e - 1 : e, s[t].level % 2 != 0 != r)
}
var h = $e(s, a, u), f = _e, d = c(a, h, "before" == u);
return null != f && (d.other = c(a, f, "before" != u)), d
}
function Xr(e, t) {
var r = 0;
t = Ce(e.doc, t), e.options.lineWrapping || (r = Jr(e.display) * t.ch);
var n = se(e.doc, t.line), i = je(n) + Cr(e.display);
return {left: r, right: r, top: i, bottom: i + n.height}
}
function Yr(e, t, r, n, i) {
var o = ge(e, t, r);
return o.xRel = i, n && (o.outside = !0), o
}
function _r(e, t, r) {
var n = e.doc;
if ((r += e.display.viewOffset) < 0) return Yr(n.first, 0, null, !0, -1);
var i = fe(n, r), o = n.first + n.size - 1;
if (i > o) return Yr(n.first + n.size - 1, se(n, o).text.length, null, !0, 1);
t < 0 && (t = 0);
for (var l = se(n, i); ;) {
var s = Zr(e, l, i, t, r), a = ze(l), u = a && a.find(0, !0);
if (!a || !(s.ch > u.from.ch || s.ch == u.from.ch && s.xRel > 0)) return s;
i = he(l = u.to.line)
}
}
function $r(e, t, r, n) {
var i = function (n) {
return Ur(e, t, Dr(e, r, n), "line")
}, o = t.text.length, l = le(function (e) {
return i(e - 1).bottom <= n
}, o, 0);
return {
begin: l, end: o = le(function (e) {
return i(e).top > n
}, l, o)
}
}
function qr(e, t, r, n) {
return $r(e, t, r, Ur(e, t, Dr(e, r, n), "line").top)
}
function Zr(e, t, r, n, i) {
i -= je(t);
var o, l = 0, s = t.text.length, a = Ar(e, t);
if (Ze(t, e.doc.direction)) {
var u;
if (e.options.lineWrapping) l = (u = $r(e, t, a, i)).begin, s = u.end;
o = new ge(r, l);
var c, h, f = jr(e, o, "line", t, a).left, d = f < n ? 1 : -1, p = f - n;
do {
if (c = p, h = o, null == (o = tt(e, t, o, d)) || o.ch < l || s <= ("before" == o.sticky ? o.ch - 1 : o.ch)) {
o = h;
break
}
p = jr(e, o, "line", t, a).left - n
} while (d < 0 != p < 0 && Math.abs(p) <= Math.abs(c));
if (Math.abs(p) > Math.abs(c)) {
if (p < 0 == c < 0) throw new Error("Broke out of infinite loop in coordsCharInner");
o = h
}
} else {
var g = le(function (r) {
var o = Ur(e, t, Dr(e, a, r), "line");
return o.top > i ? (s = Math.min(r, s), !0) : !(o.bottom <= i) && (o.left > n || !(o.right < n) && n - o.left < o.right - n)
}, l, s);
o = new ge(r, g = oe(t.text, g, 1), g == s ? "before" : "after")
}
var v = jr(e, o, "line", t, a);
return (i < v.top || v.bottom < i) && (o.outside = !0), o.xRel = n < v.left ? -1 : n > v.right ? 1 : 0, o
}
function Qr(e) {
if (null != e.cachedTextHeight) return e.cachedTextHeight;
if (null == Hr) {
Hr = O("pre");
for (var t = 0; t < 49; ++t) Hr.appendChild(document.createTextNode("x")), Hr.appendChild(O("br"));
Hr.appendChild(document.createTextNode("x"))
}
N(e.measure, Hr);
var r = Hr.offsetHeight / 50;
return r > 3 && (e.cachedTextHeight = r), M(e.measure), r || 1
}
function Jr(e) {
if (null != e.cachedCharWidth) return e.cachedCharWidth;
var t = O("span", "xxxxxxxxxx"), r = O("pre", [t]);
N(e.measure, r);
var n = t.getBoundingClientRect(), i = (n.right - n.left) / 10;
return i > 2 && (e.cachedCharWidth = i), i || 10
}
function en(e) {
for (var t = e.display, r = {}, n = {}, i = t.gutters.clientLeft, o = t.gutters.firstChild, l = 0; o; o = o.nextSibling, ++l) r[e.options.gutters[l]] = o.offsetLeft + o.clientLeft + i, n[e.options.gutters[l]] = o.clientWidth;
return {
fixedPos: tn(t),
gutterTotalWidth: t.gutters.offsetWidth,
gutterLeft: r,
gutterWidth: n,
wrapperWidth: t.wrapper.clientWidth
}
}
function tn(e) {
return e.scroller.getBoundingClientRect().left - e.sizer.getBoundingClientRect().left
}
function rn(e) {
var t = Qr(e.display), r = e.options.lineWrapping,
n = r && Math.max(5, e.display.scroller.clientWidth / Jr(e.display) - 3);
return function (i) {
if (Ve(e.doc, i)) return 0;
var o = 0;
if (i.widgets) for (var l = 0; l < i.widgets.length; l++) i.widgets[l].height && (o += i.widgets[l].height);
return r ? o + (Math.ceil(i.text.length / n) || 1) * t : o + t
}
}
function nn(e) {
var t = e.doc, r = rn(e);
t.iter(function (e) {
var t = r(e);
t != e.height && ce(e, t)
})
}
function on(e, t, r, n) {
var i = e.display;
if (!r && "true" == gt(t).getAttribute("cm-not-content")) return null;
var o, l, s = i.lineSpace.getBoundingClientRect();
try {
o = t.clientX - s.left, l = t.clientY - s.top
} catch (t) {
return null
}
var a, u = _r(e, o, l);
if (n && 1 == u.xRel && (a = se(e.doc, u.line).text).length == u.ch) {
var c = z(a, a.length, e.options.tabSize) - a.length;
u = ge(u.line, Math.max(0, Math.round((o - Lr(e.display).left) / Jr(e.display)) - c))
}
return u
}
function ln(e, t) {
if (t >= e.display.viewTo) return null;
if ((t -= e.display.viewFrom) < 0) return null;
for (var r = e.display.view, n = 0; n < r.length; n++) if ((t -= r[n].size) < 0) return n
}
function sn(e) {
e.display.input.showSelection(e.display.input.prepareSelection())
}
function an(e, t) {
for (var r = e.doc, n = {}, i = n.cursors = document.createDocumentFragment(), o = n.selection = document.createDocumentFragment(), l = 0; l < r.sel.ranges.length; l++) if (!1 !== t || l != r.sel.primIndex) {
var s = r.sel.ranges[l];
if (!(s.from().line >= e.display.viewTo || s.to().line < e.display.viewFrom)) {
var a = s.empty();
(a || e.options.showCursorWhenSelecting) && un(e, s.head, i), a || cn(e, s, o)
}
}
return n
}
function un(e, t, r) {
var n = jr(e, t, "div", null, null, !e.options.singleCursorHeightPerLine),
i = r.appendChild(O("div", " ", "CodeMirror-cursor"));
if (i.style.left = n.left + "px", i.style.top = n.top + "px", i.style.height = Math.max(0, n.bottom - n.top) * e.options.cursorHeight + "px", n.other) {
var o = r.appendChild(O("div", " ", "CodeMirror-cursor CodeMirror-secondarycursor"));
o.style.display = "", o.style.left = n.other.left + "px", o.style.top = n.other.top + "px", o.style.height = .85 * (n.other.bottom - n.other.top) + "px"
}
}
function cn(e, t, r) {
var n = e.display, i = e.doc, o = document.createDocumentFragment(), l = Lr(e.display), s = l.left,
a = Math.max(n.sizerWidth, kr(e) - n.sizer.offsetLeft) - l.right;
function u(e, t, r, n) {
t < 0 && (t = 0), t = Math.round(t), n = Math.round(n), o.appendChild(O("div", null, "CodeMirror-selected", "position: absolute; left: " + e + "px;\n top: " + t + "px; width: " + (null == r ? a - e : r) + "px;\n height: " + (n - t) + "px"))
}
function c(t, r, n) {
var o, l, c = se(i, t), h = c.text.length;
function f(r, n) {
return Kr(e, ge(t, r), "div", c, n)
}
return function (e, t, r, n) {
if (!e) return n(t, r, "ltr");
for (var i = !1, o = 0; o < e.length; ++o) {
var l = e[o];
(l.from < r && l.to > t || t == r && l.to == t) && (n(Math.max(l.from, t), Math.min(l.to, r), 1 == l.level ? "rtl" : "ltr"), i = !0)
}
i || n(t, r, "ltr")
}(Ze(c, i.direction), r || 0, null == n ? h : n, function (e, t, i) {
var c, d, p, g = f(e, "left");
if (e == t) c = g, d = p = g.left; else {
if (c = f(t - 1, "right"), "rtl" == i) {
var v = g;
g = c, c = v
}
d = g.left, p = c.right
}
null == r && 0 == e && (d = s), c.top - g.top > 3 && (u(d, g.top, null, g.bottom), d = s, g.bottom < c.top && u(d, g.bottom, null, c.top)), null == n && t == h && (p = a), (!o || g.top < o.top || g.top == o.top && g.left < o.left) && (o = g), (!l || c.bottom > l.bottom || c.bottom == l.bottom && c.right > l.right) && (l = c), d < s + 1 && (d = s), u(d, c.top, p - d, c.bottom)
}), {start: o, end: l}
}
var h = t.from(), f = t.to();
if (h.line == f.line) c(h.line, h.ch, f.ch); else {
var d = se(i, h.line), p = se(i, f.line), g = Be(d) == Be(p),
v = c(h.line, h.ch, g ? d.text.length + 1 : null).end, m = c(f.line, g ? 0 : null, f.ch).start;
g && (v.top < m.top - 2 ? (u(v.right, v.top, null, v.bottom), u(s, m.top, m.left, m.bottom)) : u(v.right, v.top, m.left - v.right, v.bottom)), v.bottom < m.top && u(s, v.bottom, null, m.top)
}
r.appendChild(o)
}
function hn(e) {
if (e.state.focused) {
var t = e.display;
clearInterval(t.blinker);
var r = !0;
t.cursorDiv.style.visibility = "", e.options.cursorBlinkRate > 0 ? t.blinker = setInterval(function () {
return t.cursorDiv.style.visibility = (r = !r) ? "" : "hidden"
}, e.options.cursorBlinkRate) : e.options.cursorBlinkRate < 0 && (t.cursorDiv.style.visibility = "hidden")
}
}
function fn(e) {
e.state.focused || (e.display.input.focus(), dn(e))
}
function dn(e, t) {
e.state.delayingBlurEvent && (e.state.delayingBlurEvent = !1), "nocursor" != e.options.readOnly && (e.state.focused || (lt(e, "focus", e, t), e.state.focused = !0, H(e.display.wrapper, "CodeMirror-focused"), e.curOp || e.display.selForContextMenu == e.doc.sel || (e.display.input.reset(), a && setTimeout(function () {
return e.display.input.reset(!0)
}, 20)), e.display.input.receivedFocus()), hn(e))
}
function pn(e, t) {
e.state.delayingBlurEvent || (e.state.focused && (lt(e, "blur", e, t), e.state.focused = !1, k(e.display.wrapper, "CodeMirror-focused")), clearInterval(e.display.blinker), setTimeout(function () {
e.state.focused || (e.display.shift = !1)
}, 150))
}
function gn(e) {
var t = e.display, r = t.view;
if (t.alignWidgets || t.gutters.firstChild && e.options.fixedGutter) {
for (var n = tn(t) - t.scroller.scrollLeft + e.doc.scrollLeft, i = t.gutters.offsetWidth, o = n + "px", l = 0; l < r.length; l++) if (!r[l].hidden) {
e.options.fixedGutter && (r[l].gutter && (r[l].gutter.style.left = o), r[l].gutterBackground && (r[l].gutterBackground.style.left = o));
var s = r[l].alignable;
if (s) for (var a = 0; a < s.length; a++) s[a].style.left = o
}
e.options.fixedGutter && (t.gutters.style.left = n + i + "px")
}
}
function vn(e) {
if (!e.options.lineNumbers) return !1;
var t = e.doc, r = pe(e.options, t.first + t.size - 1), n = e.display;
if (r.length != n.lineNumChars) {
var i = n.measure.appendChild(O("div", [O("div", r)], "CodeMirror-linenumber CodeMirror-gutter-elt")),
o = i.firstChild.offsetWidth, l = i.offsetWidth - o;
return n.lineGutter.style.width = "", n.lineNumInnerWidth = Math.max(o, n.lineGutter.offsetWidth - l) + 1, n.lineNumWidth = n.lineNumInnerWidth + l, n.lineNumChars = n.lineNumInnerWidth ? r.length : -1, n.lineGutter.style.width = n.lineNumWidth + "px", li(e), !0
}
return !1
}
function mn(e) {
for (var t = e.display, r = t.lineDiv.offsetTop, n = 0; n < t.view.length; n++) {
var i = t.view[n], o = void 0;
if (!i.hidden) {
if (l && s < 8) {
var a = i.node.offsetTop + i.node.offsetHeight;
o = a - r, r = a
} else {
var u = i.node.getBoundingClientRect();
o = u.bottom - u.top
}
var c = i.line.height - o;
if (o < 2 && (o = Qr(t)), (c > .001 || c < -.001) && (ce(i.line, o), yn(i.line), i.rest)) for (var h = 0; h < i.rest.length; h++) yn(i.rest[h])
}
}
}
function yn(e) {
if (e.widgets) for (var t = 0; t < e.widgets.length; ++t) e.widgets[t].height = e.widgets[t].node.parentNode.offsetHeight
}
function bn(e, t, r) {
var n = r && null != r.top ? Math.max(0, r.top) : e.scroller.scrollTop;
n = Math.floor(n - Cr(e));
var i = r && null != r.bottom ? r.bottom : n + e.wrapper.clientHeight, o = fe(t, n), l = fe(t, i);
if (r && r.ensure) {
var s = r.ensure.from.line, a = r.ensure.to.line;
s < o ? (o = s, l = fe(t, je(se(t, s)) + e.wrapper.clientHeight)) : Math.min(a, t.lastLine()) >= l && (o = fe(t, je(se(t, a)) - e.wrapper.clientHeight), l = a)
}
return {from: o, to: Math.max(l, o + 1)}
}
function wn(e, t) {
Math.abs(e.doc.scrollTop - t) < 2 || (e.doc.scrollTop = t, r || oi(e, {top: t}), e.display.scroller.scrollTop != t && (e.display.scroller.scrollTop = t), e.display.scrollbars.setScrollTop(t), r && oi(e), ei(e, 100))
}
function xn(e, t, r) {
(r ? t == e.doc.scrollLeft : Math.abs(e.doc.scrollLeft - t) < 2) || (t = Math.min(t, e.display.scroller.scrollWidth - e.display.scroller.clientWidth), e.doc.scrollLeft = t, gn(e), e.display.scroller.scrollLeft != t && (e.display.scroller.scrollLeft = t), e.display.scrollbars.setScrollLeft(t))
}
var Cn = 0, Sn = null;
function Ln(e) {
var t = e.wheelDeltaX, r = e.wheelDeltaY;
return null == t && e.detail && e.axis == e.HORIZONTAL_AXIS && (t = e.detail), null == r && e.detail && e.axis == e.VERTICAL_AXIS ? r = e.detail : null == r && (r = e.wheelDelta), {
x: t,
y: r
}
}
function Tn(e) {
var t = Ln(e);
return t.x *= Sn, t.y *= Sn, t
}
function kn(e, t) {
var n = Ln(t), i = n.x, o = n.y, l = e.display, s = l.scroller, u = s.scrollWidth > s.clientWidth,
c = s.scrollHeight > s.clientHeight;
if (i && u || o && c) {
if (o && y && a) e:for (var f = t.target, d = l.view; f != s; f = f.parentNode) for (var p = 0; p < d.length; p++) if (d[p].node == f) {
e.display.currentWheelTarget = f;
break e
}
if (i && !r && !h && null != Sn) return o && c && wn(e, Math.max(0, Math.min(s.scrollTop + o * Sn, s.scrollHeight - s.clientHeight))), xn(e, Math.max(0, Math.min(s.scrollLeft + i * Sn, s.scrollWidth - s.clientWidth))), (!o || o && c) && ht(t), void (l.wheelStartX = null);
if (o && null != Sn) {
var g = o * Sn, v = e.doc.scrollTop, m = v + l.wrapper.clientHeight;
g < 0 ? v = Math.max(0, v + g - 50) : m = Math.min(e.doc.height, m + g + 50), oi(e, {top: v, bottom: m})
}
Cn < 20 && (null == l.wheelStartX ? (l.wheelStartX = s.scrollLeft, l.wheelStartY = s.scrollTop, l.wheelDX = i, l.wheelDY = o, setTimeout(function () {
if (null != l.wheelStartX) {
var e = s.scrollLeft - l.wheelStartX, t = s.scrollTop - l.wheelStartY,
r = t && l.wheelDY && t / l.wheelDY || e && l.wheelDX && e / l.wheelDX;
l.wheelStartX = l.wheelStartY = null, r && (Sn = (Sn * Cn + r) / (Cn + 1), ++Cn)
}
}, 200)) : (l.wheelDX += i, l.wheelDY += o))
}
}
function Mn(e) {
var t = e.display, r = t.gutters.offsetWidth, n = Math.round(e.doc.height + Sr(e.display));
return {
clientHeight: t.scroller.clientHeight,
viewHeight: t.wrapper.clientHeight,
scrollWidth: t.scroller.scrollWidth,
clientWidth: t.scroller.clientWidth,
viewWidth: t.wrapper.clientWidth,
barLeft: e.options.fixedGutter ? r : 0,
docHeight: n,
scrollHeight: n + Tr(e) + t.barHeight,
nativeBarWidth: t.nativeBarWidth,
gutterWidth: r
}
}
l ? Sn = -.53 : r ? Sn = 15 : c ? Sn = -.7 : f && (Sn = -1 / 3);
var Nn = function (e, t, r) {
this.cm = r;
var n = this.vert = O("div", [O("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"),
i = this.horiz = O("div", [O("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
e(n), e(i), nt(n, "scroll", function () {
n.clientHeight && t(n.scrollTop, "vertical")
}), nt(i, "scroll", function () {
i.clientWidth && t(i.scrollLeft, "horizontal")
}), this.checkedZeroWidth = !1, l && s < 8 && (this.horiz.style.minHeight = this.vert.style.minWidth = "18px")
};
Nn.prototype.update = function (e) {
var t = e.scrollWidth > e.clientWidth + 1, r = e.scrollHeight > e.clientHeight + 1, n = e.nativeBarWidth;
if (r) {
this.vert.style.display = "block", this.vert.style.bottom = t ? n + "px" : "0";
var i = e.viewHeight - (t ? n : 0);
this.vert.firstChild.style.height = Math.max(0, e.scrollHeight - e.clientHeight + i) + "px"
} else this.vert.style.display = "", this.vert.firstChild.style.height = "0";
if (t) {
this.horiz.style.display = "block", this.horiz.style.right = r ? n + "px" : "0", this.horiz.style.left = e.barLeft + "px";
var o = e.viewWidth - e.barLeft - (r ? n : 0);
this.horiz.firstChild.style.width = Math.max(0, e.scrollWidth - e.clientWidth + o) + "px"
} else this.horiz.style.display = "", this.horiz.firstChild.style.width = "0";
return !this.checkedZeroWidth && e.clientHeight > 0 && (0 == n && this.zeroWidthHack(), this.checkedZeroWidth = !0), {
right: r ? n : 0,
bottom: t ? n : 0
}
}, Nn.prototype.setScrollLeft = function (e) {
this.horiz.scrollLeft != e && (this.horiz.scrollLeft = e), this.disableHoriz && this.enableZeroWidthBar(this.horiz, this.disableHoriz)
}, Nn.prototype.setScrollTop = function (e) {
this.vert.scrollTop != e && (this.vert.scrollTop = e), this.disableVert && this.enableZeroWidthBar(this.vert, this.disableVert)
}, Nn.prototype.zeroWidthHack = function () {
var e = y && !d ? "12px" : "18px";
this.horiz.style.height = this.vert.style.width = e, this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none", this.disableHoriz = new R, this.disableVert = new R
}, Nn.prototype.enableZeroWidthBar = function (e, t) {
e.style.pointerEvents = "auto", t.set(1e3, function r() {
var n = e.getBoundingClientRect();
document.elementFromPoint(n.left + 1, n.bottom - 1) != e ? e.style.pointerEvents = "none" : t.set(1e3, r)
})
}, Nn.prototype.clear = function () {
var e = this.horiz.parentNode;
e.removeChild(this.horiz), e.removeChild(this.vert)
};
var On = function () {
};
function Wn(e, t) {
t || (t = Mn(e));
var r = e.display.barWidth, n = e.display.barHeight;
An(e, t);
for (var i = 0; i < 4 && r != e.display.barWidth || n != e.display.barHeight; i++) r != e.display.barWidth && e.options.lineWrapping && mn(e), An(e, Mn(e)), r = e.display.barWidth, n = e.display.barHeight
}
function An(e, t) {
var r = e.display, n = r.scrollbars.update(t);
r.sizer.style.paddingRight = (r.barWidth = n.right) + "px", r.sizer.style.paddingBottom = (r.barHeight = n.bottom) + "px", r.heightForcer.style.borderBottom = n.bottom + "px solid transparent", n.right && n.bottom ? (r.scrollbarFiller.style.display = "block", r.scrollbarFiller.style.height = n.bottom + "px", r.scrollbarFiller.style.width = n.right + "px") : r.scrollbarFiller.style.display = "", n.bottom && e.options.coverGutterNextToScrollbar && e.options.fixedGutter ? (r.gutterFiller.style.display = "block", r.gutterFiller.style.height = n.bottom + "px", r.gutterFiller.style.width = t.gutterWidth + "px") : r.gutterFiller.style.display = ""
}
On.prototype.update = function () {
return {bottom: 0, right: 0}
}, On.prototype.setScrollLeft = function () {
}, On.prototype.setScrollTop = function () {
}, On.prototype.clear = function () {
};
var Dn = {native: Nn, null: On};
function Hn(e) {
e.display.scrollbars && (e.display.scrollbars.clear(), e.display.scrollbars.addClass && k(e.display.wrapper, e.display.scrollbars.addClass)), e.display.scrollbars = new Dn[e.options.scrollbarStyle](function (t) {
e.display.wrapper.insertBefore(t, e.display.scrollbarFiller), nt(t, "mousedown", function () {
e.state.focused && setTimeout(function () {
return e.display.input.focus()
}, 0)
}), t.setAttribute("cm-not-content", "true")
}, function (t, r) {
"horizontal" == r ? xn(e, t) : wn(e, t)
}, e), e.display.scrollbars.addClass && H(e.display.wrapper, e.display.scrollbars.addClass)
}
function Pn(e, t) {
var r = e.display, n = Qr(e.display);
t.top < 0 && (t.top = 0);
var i = e.curOp && null != e.curOp.scrollTop ? e.curOp.scrollTop : r.scroller.scrollTop, o = Mr(e), l = {};
t.bottom - t.top > o && (t.bottom = t.top + o);
var s = e.doc.height + Sr(r), a = t.top < n, u = t.bottom > s - n;
if (t.top < i) l.scrollTop = a ? 0 : t.top; else if (t.bottom > i + o) {
var c = Math.min(t.top, (u ? s : t.bottom) - o);
c != i && (l.scrollTop = c)
}
var h = e.curOp && null != e.curOp.scrollLeft ? e.curOp.scrollLeft : r.scroller.scrollLeft,
f = kr(e) - (e.options.fixedGutter ? r.gutters.offsetWidth : 0), d = t.right - t.left > f;
return d && (t.right = t.left + f), t.left < 10 ? l.scrollLeft = 0 : t.left < h ? l.scrollLeft = Math.max(0, t.left - (d ? 0 : 10)) : t.right > f + h - 3 && (l.scrollLeft = t.right + (d ? 0 : 10) - f), l
}
function En(e, t, r) {
null == t && null == r || In(e), null != t && (e.curOp.scrollLeft = (null == e.curOp.scrollLeft ? e.doc.scrollLeft : e.curOp.scrollLeft) + t), null != r && (e.curOp.scrollTop = (null == e.curOp.scrollTop ? e.doc.scrollTop : e.curOp.scrollTop) + r)
}
function Fn(e) {
In(e);
var t = e.getCursor(), r = t, n = t;
e.options.lineWrapping || (r = t.ch ? ge(t.line, t.ch - 1) : t, n = ge(t.line, t.ch + 1)), e.curOp.scrollToPos = {
from: r,
to: n,
margin: e.options.cursorScrollMargin
}
}
function In(e) {
var t = e.curOp.scrollToPos;
if (t) {
e.curOp.scrollToPos = null;
var r = Xr(e, t.from), n = Xr(e, t.to), i = Pn(e, {
left: Math.min(r.left, n.left),
top: Math.min(r.top, n.top) - t.margin,
right: Math.max(r.right, n.right),
bottom: Math.max(r.bottom, n.bottom) + t.margin
});
e.scrollTo(i.scrollLeft, i.scrollTop)
}
}
var zn = 0;
function Rn(e) {
var t;
e.curOp = {
cm: e,
viewChanged: !1,
startHeight: e.doc.height,
forceUpdate: !1,
updateInput: null,
typing: !1,
changeObjs: null,
cursorActivityHandlers: null,
cursorActivityCalled: 0,
selectionChanged: !1,
updateMaxLine: !1,
scrollLeft: null,
scrollTop: null,
scrollToPos: null,
focus: !1,
id: ++zn
}, t = e.curOp, or ? or.ops.push(t) : t.ownsGroup = or = {ops: [t], delayedCallbacks: []}
}
function Bn(e) {
!function (e, t) {
var r = e.ownsGroup;
if (r) try {
!function (e) {
var t = e.delayedCallbacks, r = 0;
do {
for (; r < t.length; r++) t[r].call(null);
for (var n = 0; n < e.ops.length; n++) {
var i = e.ops[n];
if (i.cursorActivityHandlers) for (; i.cursorActivityCalled < i.cursorActivityHandlers.length;) i.cursorActivityHandlers[i.cursorActivityCalled++].call(null, i.cm)
}
} while (r < t.length)
}(r)
} finally {
or = null, t(r)
}
}(e.curOp, function (e) {
for (var t = 0; t < e.ops.length; t++) e.ops[t].cm.curOp = null;
!function (e) {
for (var t = e.ops, r = 0; r < t.length; r++) Gn(t[r]);
for (var n = 0; n < t.length; n++) (i = t[n]).updatedDisplay = i.mustUpdate && ni(i.cm, i.update);
var i;
for (var o = 0; o < t.length; o++) Un(t[o]);
for (var l = 0; l < t.length; l++) Vn(t[l]);
for (var s = 0; s < t.length; s++) Kn(t[s])
}(e)
})
}
function Gn(e) {
var t = e.cm, r = t.display;
!function (e) {
var t = e.display;
!t.scrollbarsClipped && t.scroller.offsetWidth && (t.nativeBarWidth = t.scroller.offsetWidth - t.scroller.clientWidth, t.heightForcer.style.height = Tr(e) + "px", t.sizer.style.marginBottom = -t.nativeBarWidth + "px", t.sizer.style.borderRightWidth = Tr(e) + "px", t.scrollbarsClipped = !0)
}(t), e.updateMaxLine && Ye(t), e.mustUpdate = e.viewChanged || e.forceUpdate || null != e.scrollTop || e.scrollToPos && (e.scrollToPos.from.line < r.viewFrom || e.scrollToPos.to.line >= r.viewTo) || r.maxLineChanged && t.options.lineWrapping, e.update = e.mustUpdate && new ri(t, e.mustUpdate && {
top: e.scrollTop,
ensure: e.scrollToPos
}, e.forceUpdate)
}
function Un(e) {
var t = e.cm, r = t.display;
e.updatedDisplay && mn(t), e.barMeasure = Mn(t), r.maxLineChanged && !t.options.lineWrapping && (e.adjustWidthTo = Or(t, r.maxLine, r.maxLine.text.length).left + 3, t.display.sizerWidth = e.adjustWidthTo, e.barMeasure.scrollWidth = Math.max(r.scroller.clientWidth, r.sizer.offsetLeft + e.adjustWidthTo + Tr(t) + t.display.barWidth), e.maxScrollLeft = Math.max(0, r.sizer.offsetLeft + e.adjustWidthTo - kr(t))), (e.updatedDisplay || e.selectionChanged) && (e.preparedSelection = r.input.prepareSelection(e.focus))
}
function Vn(e) {
var t = e.cm;
null != e.adjustWidthTo && (t.display.sizer.style.minWidth = e.adjustWidthTo + "px", e.maxScrollLeft < t.doc.scrollLeft && xn(t, Math.min(t.display.scroller.scrollLeft, e.maxScrollLeft), !0), t.display.maxLineChanged = !1);
var r = e.focus && e.focus == D() && (!document.hasFocus || document.hasFocus());
e.preparedSelection && t.display.input.showSelection(e.preparedSelection, r), (e.updatedDisplay || e.startHeight != t.doc.height) && Wn(t, e.barMeasure), e.updatedDisplay && si(t, e.barMeasure), e.selectionChanged && hn(t), t.state.focused && e.updateInput && t.display.input.reset(e.typing), r && fn(e.cm)
}
function Kn(e) {
var t = e.cm, r = t.display, n = t.doc;
(e.updatedDisplay && ii(t, e.update), null == r.wheelStartX || null == e.scrollTop && null == e.scrollLeft && !e.scrollToPos || (r.wheelStartX = r.wheelStartY = null), null == e.scrollTop || r.scroller.scrollTop == e.scrollTop && !e.forceScroll || (n.scrollTop = Math.max(0, Math.min(r.scroller.scrollHeight - r.scroller.clientHeight, e.scrollTop)), r.scrollbars.setScrollTop(n.scrollTop), r.scroller.scrollTop = n.scrollTop), null == e.scrollLeft || r.scroller.scrollLeft == e.scrollLeft && !e.forceScroll || (n.scrollLeft = Math.max(0, Math.min(r.scroller.scrollWidth - r.scroller.clientWidth, e.scrollLeft)), r.scrollbars.setScrollLeft(n.scrollLeft), r.scroller.scrollLeft = n.scrollLeft, gn(t)), e.scrollToPos) && function (e, t) {
if (!st(e, "scrollCursorIntoView")) {
var r = e.display, n = r.sizer.getBoundingClientRect(), i = null;
if (t.top + n.top < 0 ? i = !0 : t.bottom + n.top > (window.innerHeight || document.documentElement.clientHeight) && (i = !1), null != i && !p) {
var o = O("div", "", null, "position: absolute;\n top: " + (t.top - r.viewOffset - Cr(e.display)) + "px;\n height: " + (t.bottom - t.top + Tr(e) + r.barHeight) + "px;\n left: " + t.left + "px; width: " + Math.max(2, t.right - t.left) + "px;");
e.display.lineSpace.appendChild(o), o.scrollIntoView(i), e.display.lineSpace.removeChild(o)
}
}
}(t, function (e, t, r, n) {
var i;
null == n && (n = 0);
for (var o = 0; o < 5; o++) {
var l = !1, s = jr(e, t), a = r && r != t ? jr(e, r) : s, u = Pn(e, i = {
left: Math.min(s.left, a.left),
top: Math.min(s.top, a.top) - n,
right: Math.max(s.left, a.left),
bottom: Math.max(s.bottom, a.bottom) + n
}), c = e.doc.scrollTop, h = e.doc.scrollLeft;
if (null != u.scrollTop && (wn(e, u.scrollTop), Math.abs(e.doc.scrollTop - c) > 1 && (l = !0)), null != u.scrollLeft && (xn(e, u.scrollLeft), Math.abs(e.doc.scrollLeft - h) > 1 && (l = !0)), !l) break
}
return i
}(t, Ce(n, e.scrollToPos.from), Ce(n, e.scrollToPos.to), e.scrollToPos.margin));
var i = e.maybeHiddenMarkers, o = e.maybeUnhiddenMarkers;
if (i) for (var l = 0; l < i.length; ++l) i[l].lines.length || lt(i[l], "hide");
if (o) for (var s = 0; s < o.length; ++s) o[s].lines.length && lt(o[s], "unhide");
r.wrapper.offsetHeight && (n.scrollTop = t.display.scroller.scrollTop), e.changeObjs && lt(t, "changes", t, e.changeObjs), e.update && e.update.finish()
}
function jn(e, t) {
if (e.curOp) return t();
Rn(e);
try {
return t()
} finally {
Bn(e)
}
}
function Xn(e, t) {
return function () {
if (e.curOp) return t.apply(e, arguments);
Rn(e);
try {
return t.apply(e, arguments)
} finally {
Bn(e)
}
}
}
function Yn(e) {
return function () {
if (this.curOp) return e.apply(this, arguments);
Rn(this);
try {
return e.apply(this, arguments)
} finally {
Bn(this)
}
}
}
function _n(e) {
return function () {
var t = this.cm;
if (!t || t.curOp) return e.apply(this, arguments);
Rn(t);
try {
return e.apply(this, arguments)
} finally {
Bn(t)
}
}
}
function $n(e, t, r, n) {
null == t && (t = e.doc.first), null == r && (r = e.doc.first + e.doc.size), n || (n = 0);
var i = e.display;
if (n && r < i.viewTo && (null == i.updateLineNumbers || i.updateLineNumbers > t) && (i.updateLineNumbers = t), e.curOp.viewChanged = !0, t >= i.viewTo) Te && Ge(e.doc, t) < i.viewTo && Zn(e); else if (r <= i.viewFrom) Te && Ue(e.doc, r + n) > i.viewFrom ? Zn(e) : (i.viewFrom += n, i.viewTo += n); else if (t <= i.viewFrom && r >= i.viewTo) Zn(e); else if (t <= i.viewFrom) {
var o = Qn(e, r, r + n, 1);
o ? (i.view = i.view.slice(o.index), i.viewFrom = o.lineN, i.viewTo += n) : Zn(e)
} else if (r >= i.viewTo) {
var l = Qn(e, t, t, -1);
l ? (i.view = i.view.slice(0, l.index), i.viewTo = l.lineN) : Zn(e)
} else {
var s = Qn(e, t, t, -1), a = Qn(e, r, r + n, 1);
s && a ? (i.view = i.view.slice(0, s.index).concat(ir(e, s.lineN, a.lineN)).concat(i.view.slice(a.index)), i.viewTo += n) : Zn(e)
}
var u = i.externalMeasured;
u && (r < u.lineN ? u.lineN += n : t < u.lineN + u.size && (i.externalMeasured = null))
}
function qn(e, t, r) {
e.curOp.viewChanged = !0;
var n = e.display, i = e.display.externalMeasured;
if (i && t >= i.lineN && t < i.lineN + i.size && (n.externalMeasured = null), !(t < n.viewFrom || t >= n.viewTo)) {
var o = n.view[ln(e, t)];
if (null != o.node) {
var l = o.changes || (o.changes = []);
-1 == B(l, r) && l.push(r)
}
}
}
function Zn(e) {
e.display.viewFrom = e.display.viewTo = e.doc.first, e.display.view = [], e.display.viewOffset = 0
}
function Qn(e, t, r, n) {
var i, o = ln(e, t), l = e.display.view;
if (!Te || r == e.doc.first + e.doc.size) return {index: o, lineN: r};
for (var s = e.display.viewFrom, a = 0; a < o; a++) s += l[a].size;
if (s != t) {
if (n > 0) {
if (o == l.length - 1) return null;
i = s + l[o].size - t, o++
} else i = s - t;
t += i, r += i
}
for (; Ge(e.doc, r) != r;) {
if (o == (n < 0 ? 0 : l.length - 1)) return null;
r += n * l[o - (n < 0 ? 1 : 0)].size, o += n
}
return {index: o, lineN: r}
}
function Jn(e) {
for (var t = e.display.view, r = 0, n = 0; n < t.length; n++) {
var i = t[n];
i.hidden || i.node && !i.changes || ++r
}
return r
}
function ei(e, t) {
e.doc.mode.startState && e.doc.frontier < e.display.viewTo && e.state.highlight.set(t, F(ti, e))
}
function ti(e) {
var t = e.doc;
if (t.frontier < t.first && (t.frontier = t.first), !(t.frontier >= e.display.viewTo)) {
var r = +new Date + e.options.workTime, n = Ht(t.mode, Rt(e, t.frontier)), i = [];
t.iter(t.frontier, Math.min(t.first + t.size, e.display.viewTo + 500), function (o) {
if (t.frontier >= e.display.viewFrom) {
var l = o.styles, s = o.text.length > e.options.maxHighlightLength, a = It(e, o, s ? Ht(t.mode, n) : n, !0);
o.styles = a.styles;
var u = o.styleClasses, c = a.classes;
c ? o.styleClasses = c : u && (o.styleClasses = null);
for (var h = !l || l.length != o.styles.length || u != c && (!u || !c || u.bgClass != c.bgClass || u.textClass != c.textClass), f = 0; !h && f < l.length; ++f) h = l[f] != o.styles[f];
h && i.push(t.frontier), o.stateAfter = s ? n : Ht(t.mode, n)
} else o.text.length <= e.options.maxHighlightLength && Bt(e, o.text, n), o.stateAfter = t.frontier % 5 == 0 ? Ht(t.mode, n) : null;
if (++t.frontier, +new Date > r) return ei(e, e.options.workDelay), !0
}), i.length && jn(e, function () {
for (var t = 0; t < i.length; t++) qn(e, i[t], "text")
})
}
}
var ri = function (e, t, r) {
var n = e.display;
this.viewport = t, this.visible = bn(n, e.doc, t), this.editorIsHidden = !n.wrapper.offsetWidth, this.wrapperHeight = n.wrapper.clientHeight, this.wrapperWidth = n.wrapper.clientWidth, this.oldDisplayWidth = kr(e), this.force = r, this.dims = en(e), this.events = []
};
function ni(e, t) {
var r = e.display, n = e.doc;
if (t.editorIsHidden) return Zn(e), !1;
if (!t.force && t.visible.from >= r.viewFrom && t.visible.to <= r.viewTo && (null == r.updateLineNumbers || r.updateLineNumbers >= r.viewTo) && r.renderedView == r.view && 0 == Jn(e)) return !1;
vn(e) && (Zn(e), t.dims = en(e));
var i = n.first + n.size, o = Math.max(t.visible.from - e.options.viewportMargin, n.first),
l = Math.min(i, t.visible.to + e.options.viewportMargin);
r.viewFrom < o && o - r.viewFrom < 20 && (o = Math.max(n.first, r.viewFrom)), r.viewTo > l && r.viewTo - l < 20 && (l = Math.min(i, r.viewTo)), Te && (o = Ge(e.doc, o), l = Ue(e.doc, l));
var s = o != r.viewFrom || l != r.viewTo || r.lastWrapHeight != t.wrapperHeight || r.lastWrapWidth != t.wrapperWidth;
!function (e, t, r) {
var n = e.display;
0 == n.view.length || t >= n.viewTo || r <= n.viewFrom ? (n.view = ir(e, t, r), n.viewFrom = t) : (n.viewFrom > t ? n.view = ir(e, t, n.viewFrom).concat(n.view) : n.viewFrom < t && (n.view = n.view.slice(ln(e, t))), n.viewFrom = t, n.viewTo < r ? n.view = n.view.concat(ir(e, n.viewTo, r)) : n.viewTo > r && (n.view = n.view.slice(0, ln(e, r)))), n.viewTo = r
}(e, o, l), r.viewOffset = je(se(e.doc, r.viewFrom)), e.display.mover.style.top = r.viewOffset + "px";
var u = Jn(e);
if (!s && 0 == u && !t.force && r.renderedView == r.view && (null == r.updateLineNumbers || r.updateLineNumbers >= r.viewTo)) return !1;
var c = D();
return u > 4 && (r.lineDiv.style.display = "none"), function (e, t, r) {
var n = e.display, i = e.options.lineNumbers, o = n.lineDiv, l = o.firstChild;
function s(t) {
var r = t.nextSibling;
return a && y && e.display.currentWheelTarget == t ? t.style.display = "none" : t.parentNode.removeChild(t), r
}
for (var u = n.view, c = n.viewFrom, h = 0; h < u.length; h++) {
var f = u[h];
if (f.hidden) ; else if (f.node && f.node.parentNode == o) {
for (; l != f.node;) l = s(l);
var d = i && null != t && t <= c && f.lineNumber;
f.changes && (B(f.changes, "gutter") > -1 && (d = !1), ur(e, f, c, r)), d && (M(f.lineNumber), f.lineNumber.appendChild(document.createTextNode(pe(e.options, c)))), l = f.node.nextSibling
} else {
var p = vr(e, f, c, r);
o.insertBefore(p, l)
}
c += f.size
}
for (; l;) l = s(l)
}(e, r.updateLineNumbers, t.dims), u > 4 && (r.lineDiv.style.display = ""), r.renderedView = r.view, c && D() != c && c.offsetHeight && c.focus(), M(r.cursorDiv), M(r.selectionDiv), r.gutters.style.height = r.sizer.style.minHeight = 0, s && (r.lastWrapHeight = t.wrapperHeight, r.lastWrapWidth = t.wrapperWidth, ei(e, 400)), r.updateLineNumbers = null, !0
}
function ii(e, t) {
for (var r = t.viewport, n = !0; (n && e.options.lineWrapping && t.oldDisplayWidth != kr(e) || (r && null != r.top && (r = {top: Math.min(e.doc.height + Sr(e.display) - Mr(e), r.top)}), t.visible = bn(e.display, e.doc, r), !(t.visible.from >= e.display.viewFrom && t.visible.to <= e.display.viewTo))) && ni(e, t); n = !1) {
mn(e);
var i = Mn(e);
sn(e), Wn(e, i), si(e, i)
}
t.signal(e, "update", e), e.display.viewFrom == e.display.reportedViewFrom && e.display.viewTo == e.display.reportedViewTo || (t.signal(e, "viewportChange", e, e.display.viewFrom, e.display.viewTo), e.display.reportedViewFrom = e.display.viewFrom, e.display.reportedViewTo = e.display.viewTo)
}
function oi(e, t) {
var r = new ri(e, t);
if (ni(e, r)) {
mn(e), ii(e, r);
var n = Mn(e);
sn(e), Wn(e, n), si(e, n), r.finish()
}
}
function li(e) {
var t = e.display.gutters.offsetWidth;
e.display.sizer.style.marginLeft = t + "px"
}
function si(e, t) {
e.display.sizer.style.minHeight = t.docHeight + "px", e.display.heightForcer.style.top = t.docHeight + "px", e.display.gutters.style.height = t.docHeight + e.display.barHeight + Tr(e) + "px"
}
function ai(e) {
var t = e.display.gutters, r = e.options.gutters;
M(t);
for (var n = 0; n < r.length; ++n) {
var i = r[n], o = t.appendChild(O("div", null, "CodeMirror-gutter " + i));
"CodeMirror-linenumbers" == i && (e.display.lineGutter = o, o.style.width = (e.display.lineNumWidth || 1) + "px")
}
t.style.display = n ? "" : "none", li(e)
}
function ui(e) {
var t = B(e.gutters, "CodeMirror-linenumbers");
-1 == t && e.lineNumbers ? e.gutters = e.gutters.concat(["CodeMirror-linenumbers"]) : t > -1 && !e.lineNumbers && (e.gutters = e.gutters.slice(0), e.gutters.splice(t, 1))
}
ri.prototype.signal = function (e, t) {
ut(e, t) && this.events.push(arguments)
}, ri.prototype.finish = function () {
for (var e = 0; e < this.events.length; e++) lt.apply(null, this.events[e])
};
var ci = function (e, t) {
this.ranges = e, this.primIndex = t
};
ci.prototype.primary = function () {
return this.ranges[this.primIndex]
}, ci.prototype.equals = function (e) {
if (e == this) return !0;
if (e.primIndex != this.primIndex || e.ranges.length != this.ranges.length) return !1;
for (var t = 0; t < this.ranges.length; t++) {
var r = this.ranges[t], n = e.ranges[t];
if (!me(r.anchor, n.anchor) || !me(r.head, n.head)) return !1
}
return !0
}, ci.prototype.deepCopy = function () {
for (var e = [], t = 0; t < this.ranges.length; t++) e[t] = new hi(ye(this.ranges[t].anchor), ye(this.ranges[t].head));
return new ci(e, this.primIndex)
}, ci.prototype.somethingSelected = function () {
for (var e = 0; e < this.ranges.length; e++) if (!this.ranges[e].empty()) return !0;
return !1
}, ci.prototype.contains = function (e, t) {
t || (t = e);
for (var r = 0; r < this.ranges.length; r++) {
var n = this.ranges[r];
if (ve(t, n.from()) >= 0 && ve(e, n.to()) <= 0) return r
}
return -1
};
var hi = function (e, t) {
this.anchor = e, this.head = t
};
function fi(e, t) {
var r = e[t];
e.sort(function (e, t) {
return ve(e.from(), t.from())
}), t = B(e, r);
for (var n = 1; n < e.length; n++) {
var i = e[n], o = e[n - 1];
if (ve(o.to(), i.from()) >= 0) {
var l = we(o.from(), i.from()), s = be(o.to(), i.to()), a = o.empty() ? i.from() == i.head : o.from() == o.head;
n <= t && --t, e.splice(--n, 2, new hi(a ? s : l, a ? l : s))
}
}
return new ci(e, t)
}
function di(e, t) {
return new ci([new hi(e, t || e)], 0)
}
function pi(e) {
return e.text ? ge(e.from.line + e.text.length - 1, $(e.text).length + (1 == e.text.length ? e.from.ch : 0)) : e.to
}
function gi(e, t) {
if (ve(e, t.from) < 0) return e;
if (ve(e, t.to) <= 0) return pi(t);
var r = e.line + t.text.length - (t.to.line - t.from.line) - 1, n = e.ch;
return e.line == t.to.line && (n += pi(t).ch - t.to.ch), ge(r, n)
}
function vi(e, t) {
for (var r = [], n = 0; n < e.sel.ranges.length; n++) {
var i = e.sel.ranges[n];
r.push(new hi(gi(i.anchor, t), gi(i.head, t)))
}
return fi(r, e.sel.primIndex)
}
function mi(e, t, r) {
return e.line == t.line ? ge(r.line, e.ch - t.ch + r.ch) : ge(r.line + (e.line - t.line), e.ch)
}
function yi(e) {
e.doc.mode = Wt(e.options, e.doc.modeOption), bi(e)
}
function bi(e) {
e.doc.iter(function (e) {
e.stateAfter && (e.stateAfter = null), e.styles && (e.styles = null)
}), e.doc.frontier = e.doc.first, ei(e, 100), e.state.modeGen++, e.curOp && $n(e)
}
function wi(e, t) {
return 0 == t.from.ch && 0 == t.to.ch && "" == $(t.text) && (!e.cm || e.cm.options.wholeLineUpdateBefore)
}
function xi(e, t, r, n) {
function i(e) {
return r ? r[e] : null
}
function o(e, r, i) {
!function (e, t, r, n) {
e.text = t, e.stateAfter && (e.stateAfter = null), e.styles && (e.styles = null), null != e.order && (e.order = null), Ae(e), De(e, r);
var i = n ? n(e) : 1;
i != e.height && ce(e, i)
}(e, r, i, n), sr(e, "change", e, t)
}
function l(e, t) {
for (var r = [], o = e; o < t; ++o) r.push(new Xt(u[o], i(o), n));
return r
}
var s = t.from, a = t.to, u = t.text, c = se(e, s.line), h = se(e, a.line), f = $(u), d = i(u.length - 1),
p = a.line - s.line;
if (t.full) e.insert(0, l(0, u.length)), e.remove(u.length, e.size - u.length); else if (wi(e, t)) {
var g = l(0, u.length - 1);
o(h, h.text, d), p && e.remove(s.line, p), g.length && e.insert(s.line, g)
} else if (c == h) if (1 == u.length) o(c, c.text.slice(0, s.ch) + f + c.text.slice(a.ch), d); else {
var v = l(1, u.length - 1);
v.push(new Xt(f + c.text.slice(a.ch), d, n)), o(c, c.text.slice(0, s.ch) + u[0], i(0)), e.insert(s.line + 1, v)
} else if (1 == u.length) o(c, c.text.slice(0, s.ch) + u[0] + h.text.slice(a.ch), i(0)), e.remove(s.line + 1, p); else {
o(c, c.text.slice(0, s.ch) + u[0], i(0)), o(h, f + h.text.slice(a.ch), d);
var m = l(1, u.length - 1);
p > 1 && e.remove(s.line + 1, p - 1), e.insert(s.line + 1, m)
}
sr(e, "change", e, t)
}
function Ci(e, t, r) {
!function e(n, i, o) {
if (n.linked) for (var l = 0; l < n.linked.length; ++l) {
var s = n.linked[l];
if (s.doc != i) {
var a = o && s.sharedHist;
r && !a || (t(s.doc, a), e(s.doc, n, a))
}
}
}(e, null, !0)
}
function Si(e, t) {
if (t.cm) throw new Error("This document is already in use.");
e.doc = t, t.cm = e, nn(e), yi(e), Li(e), e.options.lineWrapping || Ye(e), e.options.mode = t.modeOption, $n(e)
}
function Li(e) {
("rtl" == e.doc.direction ? H : k)(e.display.lineDiv, "CodeMirror-rtl")
}
function Ti(e) {
this.done = [], this.undone = [], this.undoDepth = 1 / 0, this.lastModTime = this.lastSelTime = 0, this.lastOp = this.lastSelOp = null, this.lastOrigin = this.lastSelOrigin = null, this.generation = this.maxGeneration = e || 1
}
function ki(e, t) {
var r = {from: ye(t.from), to: pi(t), text: ae(e, t.from, t.to)};
return Ai(e, r, t.from.line, t.to.line + 1), Ci(e, function (e) {
return Ai(e, r, t.from.line, t.to.line + 1)
}, !0), r
}
function Mi(e) {
for (; e.length;) {
if (!$(e).ranges) break;
e.pop()
}
}
function Ni(e, t, r, n) {
var i = e.history;
i.undone.length = 0;
var o, l, s = +new Date;
if ((i.lastOp == n || i.lastOrigin == t.origin && t.origin && ("+" == t.origin.charAt(0) && e.cm && i.lastModTime > s - e.cm.options.historyEventDelay || "*" == t.origin.charAt(0))) && (o = function (e, t) {
return t ? (Mi(e.done), $(e.done)) : e.done.length && !$(e.done).ranges ? $(e.done) : e.done.length > 1 && !e.done[e.done.length - 2].ranges ? (e.done.pop(), $(e.done)) : void 0
}(i, i.lastOp == n))) l = $(o.changes), 0 == ve(t.from, t.to) && 0 == ve(t.from, l.to) ? l.to = pi(t) : o.changes.push(ki(e, t)); else {
var a = $(i.done);
for (a && a.ranges || Wi(e.sel, i.done), o = {
changes: [ki(e, t)],
generation: i.generation
}, i.done.push(o); i.done.length > i.undoDepth;) i.done.shift(), i.done[0].ranges || i.done.shift()
}
i.done.push(r), i.generation = ++i.maxGeneration, i.lastModTime = i.lastSelTime = s, i.lastOp = i.lastSelOp = n, i.lastOrigin = i.lastSelOrigin = t.origin, l || lt(e, "historyAdded")
}
function Oi(e, t, r, n) {
var i = e.history, o = n && n.origin;
r == i.lastSelOp || o && i.lastSelOrigin == o && (i.lastModTime == i.lastSelTime && i.lastOrigin == o || function (e, t, r, n) {
var i = t.charAt(0);
return "*" == i || "+" == i && r.ranges.length == n.ranges.length && r.somethingSelected() == n.somethingSelected() && new Date - e.history.lastSelTime <= (e.cm ? e.cm.options.historyEventDelay : 500)
}(e, o, $(i.done), t)) ? i.done[i.done.length - 1] = t : Wi(t, i.done), i.lastSelTime = +new Date, i.lastSelOrigin = o, i.lastSelOp = r, n && !1 !== n.clearRedo && Mi(i.undone)
}
function Wi(e, t) {
var r = $(t);
r && r.ranges && r.equals(e) || t.push(e)
}
function Ai(e, t, r, n) {
var i = t["spans_" + e.id], o = 0;
e.iter(Math.max(e.first, r), Math.min(e.first + e.size, n), function (r) {
r.markedSpans && ((i || (i = t["spans_" + e.id] = {}))[o] = r.markedSpans), ++o
})
}
function Di(e) {
if (!e) return null;
for (var t, r = 0; r < e.length; ++r) e[r].marker.explicitlyCleared ? t || (t = e.slice(0, r)) : t && t.push(e[r]);
return t ? t.length ? t : null : e
}
function Hi(e, t) {
var r = function (e, t) {
var r = t["spans_" + e.id];
if (!r) return null;
for (var n = [], i = 0; i < t.text.length; ++i) n.push(Di(r[i]));
return n
}(e, t), n = Oe(e, t);
if (!r) return n;
if (!n) return r;
for (var i = 0; i < r.length; ++i) {
var o = r[i], l = n[i];
if (o && l) e:for (var s = 0; s < l.length; ++s) {
for (var a = l[s], u = 0; u < o.length; ++u) if (o[u].marker == a.marker) continue e;
o.push(a)
} else l && (r[i] = l)
}
return r
}
function Pi(e, t, r) {
for (var n = [], i = 0; i < e.length; ++i) {
var o = e[i];
if (o.ranges) n.push(r ? ci.prototype.deepCopy.call(o) : o); else {
var l = o.changes, s = [];
n.push({changes: s});
for (var a = 0; a < l.length; ++a) {
var u = l[a], c = void 0;
if (s.push({
from: u.from,
to: u.to,
text: u.text
}), t) for (var h in u) (c = h.match(/^spans_(\d+)$/)) && B(t, Number(c[1])) > -1 && ($(s)[h] = u[h], delete u[h])
}
}
}
return n
}
function Ei(e, t, r, n) {
if (e.cm && e.cm.display.shift || e.extend) {
var i = t.anchor;
if (n) {
var o = ve(r, i) < 0;
o != ve(n, i) < 0 ? (i = r, r = n) : o != ve(r, n) < 0 && (r = n)
}
return new hi(i, r)
}
return new hi(n || r, r)
}
function Fi(e, t, r, n) {
Gi(e, new ci([Ei(e, e.sel.primary(), t, r)], 0), n)
}
function Ii(e, t, r) {
for (var n = [], i = 0; i < e.sel.ranges.length; i++) n[i] = Ei(e, e.sel.ranges[i], t[i], null);
Gi(e, fi(n, e.sel.primIndex), r)
}
function zi(e, t, r, n) {
var i = e.sel.ranges.slice(0);
i[t] = r, Gi(e, fi(i, e.sel.primIndex), n)
}
function Ri(e, t, r, n) {
Gi(e, di(t, r), n)
}
function Bi(e, t, r) {
var n = e.history.done, i = $(n);
i && i.ranges ? (n[n.length - 1] = t, Ui(e, t, r)) : Gi(e, t, r)
}
function Gi(e, t, r) {
Ui(e, t, r), Oi(e, e.sel, e.cm ? e.cm.curOp.id : NaN, r)
}
function Ui(e, t, r) {
(ut(e, "beforeSelectionChange") || e.cm && ut(e.cm, "beforeSelectionChange")) && (t = function (e, t, r) {
var n = {
ranges: t.ranges, update: function (t) {
this.ranges = [];
for (var r = 0; r < t.length; r++) this.ranges[r] = new hi(Ce(e, t[r].anchor), Ce(e, t[r].head))
}, origin: r && r.origin
};
return lt(e, "beforeSelectionChange", e, n), e.cm && lt(e.cm, "beforeSelectionChange", e.cm, n), n.ranges != t.ranges ? fi(n.ranges, n.ranges.length - 1) : t
}(e, t, r)), Vi(e, ji(e, t, r && r.bias || (ve(t.primary().head, e.sel.primary().head) < 0 ? -1 : 1), !0)), r && !1 === r.scroll || !e.cm || Fn(e.cm)
}
function Vi(e, t) {
t.equals(e.sel) || (e.sel = t, e.cm && (e.cm.curOp.updateInput = e.cm.curOp.selectionChanged = !0, at(e.cm)), sr(e, "cursorActivity", e))
}
function Ki(e) {
Vi(e, ji(e, e.sel, null, !1))
}
function ji(e, t, r, n) {
for (var i, o = 0; o < t.ranges.length; o++) {
var l = t.ranges[o], s = t.ranges.length == e.sel.ranges.length && e.sel.ranges[o],
a = Yi(e, l.anchor, s && s.anchor, r, n), u = Yi(e, l.head, s && s.head, r, n);
(i || a != l.anchor || u != l.head) && (i || (i = t.ranges.slice(0, o)), i[o] = new hi(a, u))
}
return i ? fi(i, t.primIndex) : t
}
function Xi(e, t, r, n, i) {
var o = se(e, t.line);
if (o.markedSpans) for (var l = 0; l < o.markedSpans.length; ++l) {
var s = o.markedSpans[l], a = s.marker;
if ((null == s.from || (a.inclusiveLeft ? s.from <= t.ch : s.from < t.ch)) && (null == s.to || (a.inclusiveRight ? s.to >= t.ch : s.to > t.ch))) {
if (i && (lt(a, "beforeCursorEnter"), a.explicitlyCleared)) {
if (o.markedSpans) {
--l;
continue
}
break
}
if (!a.atomic) continue;
if (r) {
var u = a.find(n < 0 ? 1 : -1), c = void 0;
if ((n < 0 ? a.inclusiveRight : a.inclusiveLeft) && (u = _i(e, u, -n, u && u.line == t.line ? o : null)), u && u.line == t.line && (c = ve(u, r)) && (n < 0 ? c < 0 : c > 0)) return Xi(e, u, t, n, i)
}
var h = a.find(n < 0 ? -1 : 1);
return (n < 0 ? a.inclusiveLeft : a.inclusiveRight) && (h = _i(e, h, n, h.line == t.line ? o : null)), h ? Xi(e, h, t, n, i) : null
}
}
return t
}
function Yi(e, t, r, n, i) {
var o = n || 1,
l = Xi(e, t, r, o, i) || !i && Xi(e, t, r, o, !0) || Xi(e, t, r, -o, i) || !i && Xi(e, t, r, -o, !0);
return l || (e.cantEdit = !0, ge(e.first, 0))
}
function _i(e, t, r, n) {
return r < 0 && 0 == t.ch ? t.line > e.first ? Ce(e, ge(t.line - 1)) : null : r > 0 && t.ch == (n || se(e, t.line)).text.length ? t.line < e.first + e.size - 1 ? ge(t.line + 1, 0) : null : new ge(t.line, t.ch + r)
}
function $i(e) {
e.setSelection(ge(e.firstLine(), 0), ge(e.lastLine()), V)
}
function qi(e, t, r) {
var n = {
canceled: !1, from: t.from, to: t.to, text: t.text, origin: t.origin, cancel: function () {
return n.canceled = !0
}
};
return r && (n.update = function (t, r, i, o) {
t && (n.from = Ce(e, t)), r && (n.to = Ce(e, r)), i && (n.text = i), void 0 !== o && (n.origin = o)
}), lt(e, "beforeChange", e, n), e.cm && lt(e.cm, "beforeChange", e.cm, n), n.canceled ? null : {
from: n.from,
to: n.to,
text: n.text,
origin: n.origin
}
}
function Zi(e, t, r) {
if (e.cm) {
if (!e.cm.curOp) return Xn(e.cm, Zi)(e, t, r);
if (e.cm.state.suppressEdits) return
}
if (!(ut(e, "beforeChange") || e.cm && ut(e.cm, "beforeChange")) || (t = qi(e, t, !0))) {
var n = Le && !r && function (e, t, r) {
var n = null;
if (e.iter(t.line, r.line + 1, function (e) {
if (e.markedSpans) for (var t = 0; t < e.markedSpans.length; ++t) {
var r = e.markedSpans[t].marker;
!r.readOnly || n && -1 != B(n, r) || (n || (n = [])).push(r)
}
}), !n) return null;
for (var i = [{
from: t,
to: r
}], o = 0; o < n.length; ++o) for (var l = n[o], s = l.find(0), a = 0; a < i.length; ++a) {
var u = i[a];
if (!(ve(u.to, s.from) < 0 || ve(u.from, s.to) > 0)) {
var c = [a, 1], h = ve(u.from, s.from), f = ve(u.to, s.to);
(h < 0 || !l.inclusiveLeft && !h) && c.push({
from: u.from,
to: s.from
}), (f > 0 || !l.inclusiveRight && !f) && c.push({
from: s.to,
to: u.to
}), i.splice.apply(i, c), a += c.length - 3
}
}
return i
}(e, t.from, t.to);
if (n) for (var i = n.length - 1; i >= 0; --i) Qi(e, {
from: n[i].from,
to: n[i].to,
text: i ? [""] : t.text
}); else Qi(e, t)
}
}
function Qi(e, t) {
if (1 != t.text.length || "" != t.text[0] || 0 != ve(t.from, t.to)) {
var r = vi(e, t);
Ni(e, t, r, e.cm ? e.cm.curOp.id : NaN), to(e, t, r, Oe(e, t));
var n = [];
Ci(e, function (e, r) {
r || -1 != B(n, e.history) || (oo(e.history, t), n.push(e.history)), to(e, t, null, Oe(e, t))
})
}
}
function Ji(e, t, r) {
if (!e.cm || !e.cm.state.suppressEdits || r) {
for (var n, i = e.history, o = e.sel, l = "undo" == t ? i.done : i.undone, s = "undo" == t ? i.undone : i.done, a = 0; a < l.length && (n = l[a], r ? !n.ranges || n.equals(e.sel) : n.ranges); a++) ;
if (a != l.length) {
for (i.lastOrigin = i.lastSelOrigin = null; (n = l.pop()).ranges;) {
if (Wi(n, s), r && !n.equals(e.sel)) return void Gi(e, n, {clearRedo: !1});
o = n
}
var u = [];
Wi(o, s), s.push({changes: u, generation: i.generation}), i.generation = n.generation || ++i.maxGeneration;
for (var c = ut(e, "beforeChange") || e.cm && ut(e.cm, "beforeChange"), h = function (r) {
var i = n.changes[r];
if (i.origin = t, c && !qi(e, i, !1)) return l.length = 0, {};
u.push(ki(e, i));
var o = r ? vi(e, i) : $(l);
to(e, i, o, Hi(e, i)), !r && e.cm && e.cm.scrollIntoView({from: i.from, to: pi(i)});
var s = [];
Ci(e, function (e, t) {
t || -1 != B(s, e.history) || (oo(e.history, i), s.push(e.history)), to(e, i, null, Hi(e, i))
})
}, f = n.changes.length - 1; f >= 0; --f) {
var d = h(f);
if (d) return d.v
}
}
}
}
function eo(e, t) {
if (0 != t && (e.first += t, e.sel = new ci(q(e.sel.ranges, function (e) {
return new hi(ge(e.anchor.line + t, e.anchor.ch), ge(e.head.line + t, e.head.ch))
}), e.sel.primIndex), e.cm)) {
$n(e.cm, e.first, e.first - t, t);
for (var r = e.cm.display, n = r.viewFrom; n < r.viewTo; n++) qn(e.cm, n, "gutter")
}
}
function to(e, t, r, n) {
if (e.cm && !e.cm.curOp) return Xn(e.cm, to)(e, t, r, n);
if (t.to.line < e.first) eo(e, t.text.length - 1 - (t.to.line - t.from.line)); else if (!(t.from.line > e.lastLine())) {
if (t.from.line < e.first) {
var i = t.text.length - 1 - (e.first - t.from.line);
eo(e, i), t = {from: ge(e.first, 0), to: ge(t.to.line + i, t.to.ch), text: [$(t.text)], origin: t.origin}
}
var o = e.lastLine();
t.to.line > o && (t = {
from: t.from,
to: ge(o, se(e, o).text.length),
text: [t.text[0]],
origin: t.origin
}), t.removed = ae(e, t.from, t.to), r || (r = vi(e, t)), e.cm ? function (e, t, r) {
var n = e.doc, i = e.display, o = t.from, l = t.to, s = !1, a = o.line;
e.options.lineWrapping || (a = he(Be(se(n, o.line))), n.iter(a, l.line + 1, function (e) {
if (e == i.maxLine) return s = !0, !0
}));
n.sel.contains(t.from, t.to) > -1 && at(e);
xi(n, t, r, rn(e)), e.options.lineWrapping || (n.iter(a, o.line + t.text.length, function (e) {
var t = Xe(e);
t > i.maxLineLength && (i.maxLine = e, i.maxLineLength = t, i.maxLineChanged = !0, s = !1)
}), s && (e.curOp.updateMaxLine = !0));
n.frontier = Math.min(n.frontier, o.line), ei(e, 400);
var u = t.text.length - (l.line - o.line) - 1;
t.full ? $n(e) : o.line != l.line || 1 != t.text.length || wi(e.doc, t) ? $n(e, o.line, l.line + 1, u) : qn(e, o.line, "text");
var c = ut(e, "changes"), h = ut(e, "change");
if (h || c) {
var f = {from: o, to: l, text: t.text, removed: t.removed, origin: t.origin};
h && sr(e, "change", e, f), c && (e.curOp.changeObjs || (e.curOp.changeObjs = [])).push(f)
}
e.display.selForContextMenu = null
}(e.cm, t, n) : xi(e, t, n), Ui(e, r, V)
}
}
function ro(e, t, r, n, i) {
if (n || (n = r), ve(n, r) < 0) {
var o = n;
n = r, r = o
}
"string" == typeof t && (t = e.splitLines(t)), Zi(e, {from: r, to: n, text: t, origin: i})
}
function no(e, t, r, n) {
r < e.line ? e.line += n : t < e.line && (e.line = t, e.ch = 0)
}
function io(e, t, r, n) {
for (var i = 0; i < e.length; ++i) {
var o = e[i], l = !0;
if (o.ranges) {
o.copied || ((o = e[i] = o.deepCopy()).copied = !0);
for (var s = 0; s < o.ranges.length; s++) no(o.ranges[s].anchor, t, r, n), no(o.ranges[s].head, t, r, n)
} else {
for (var a = 0; a < o.changes.length; ++a) {
var u = o.changes[a];
if (r < u.from.line) u.from = ge(u.from.line + n, u.from.ch), u.to = ge(u.to.line + n, u.to.ch); else if (t <= u.to.line) {
l = !1;
break
}
}
l || (e.splice(0, i + 1), i = 0)
}
}
}
function oo(e, t) {
var r = t.from.line, n = t.to.line, i = t.text.length - (n - r) - 1;
io(e.done, r, n, i), io(e.undone, r, n, i)
}
function lo(e, t, r, n) {
var i = t, o = t;
return "number" == typeof t ? o = se(e, xe(e, t)) : i = he(t), null == i ? null : (n(o, i) && e.cm && qn(e.cm, i, r), o)
}
hi.prototype.from = function () {
return we(this.anchor, this.head)
}, hi.prototype.to = function () {
return be(this.anchor, this.head)
}, hi.prototype.empty = function () {
return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch
};
var so = function (e) {
this.lines = e, this.parent = null;
for (var t = 0, r = 0; r < e.length; ++r) e[r].parent = this, t += e[r].height;
this.height = t
};
so.prototype.chunkSize = function () {
return this.lines.length
}, so.prototype.removeInner = function (e, t) {
for (var r = e, n = e + t; r < n; ++r) {
var i = this.lines[r];
this.height -= i.height, Yt(i), sr(i, "delete")
}
this.lines.splice(e, t)
}, so.prototype.collapse = function (e) {
e.push.apply(e, this.lines)
}, so.prototype.insertInner = function (e, t, r) {
this.height += r, this.lines = this.lines.slice(0, e).concat(t).concat(this.lines.slice(e));
for (var n = 0; n < t.length; ++n) t[n].parent = this
}, so.prototype.iterN = function (e, t, r) {
for (var n = e + t; e < n; ++e) if (r(this.lines[e])) return !0
};
var ao = function (e) {
this.children = e;
for (var t = 0, r = 0, n = 0; n < e.length; ++n) {
var i = e[n];
t += i.chunkSize(), r += i.height, i.parent = this
}
this.size = t, this.height = r, this.parent = null
};
ao.prototype.chunkSize = function () {
return this.size
}, ao.prototype.removeInner = function (e, t) {
this.size -= t;
for (var r = 0; r < this.children.length; ++r) {
var n = this.children[r], i = n.chunkSize();
if (e < i) {
var o = Math.min(t, i - e), l = n.height;
if (n.removeInner(e, o), this.height -= l - n.height, i == o && (this.children.splice(r--, 1), n.parent = null), 0 == (t -= o)) break;
e = 0
} else e -= i
}
if (this.size - t < 25 && (this.children.length > 1 || !(this.children[0] instanceof so))) {
var s = [];
this.collapse(s), this.children = [new so(s)], this.children[0].parent = this
}
}, ao.prototype.collapse = function (e) {
for (var t = 0; t < this.children.length; ++t) this.children[t].collapse(e)
}, ao.prototype.insertInner = function (e, t, r) {
this.size += t.length, this.height += r;
for (var n = 0; n < this.children.length; ++n) {
var i = this.children[n], o = i.chunkSize();
if (e <= o) {
if (i.insertInner(e, t, r), i.lines && i.lines.length > 50) {
for (var l = i.lines.length % 25 + 25, s = l; s < i.lines.length;) {
var a = new so(i.lines.slice(s, s += 25));
i.height -= a.height, this.children.splice(++n, 0, a), a.parent = this
}
i.lines = i.lines.slice(0, l), this.maybeSpill()
}
break
}
e -= o
}
}, ao.prototype.maybeSpill = function () {
if (!(this.children.length <= 10)) {
var e = this;
do {
var t = e.children.splice(e.children.length - 5, 5), r = new ao(t);
if (e.parent) {
e.size -= r.size, e.height -= r.height;
var n = B(e.parent.children, e);
e.parent.children.splice(n + 1, 0, r)
} else {
var i = new ao(e.children);
i.parent = e, e.children = [i, r], e = i
}
r.parent = e.parent
} while (e.children.length > 10);
e.parent.maybeSpill()
}
}, ao.prototype.iterN = function (e, t, r) {
for (var n = 0; n < this.children.length; ++n) {
var i = this.children[n], o = i.chunkSize();
if (e < o) {
var l = Math.min(t, o - e);
if (i.iterN(e, l, r)) return !0;
if (0 == (t -= l)) break;
e = 0
} else e -= o
}
};
var uo = function (e, t, r) {
if (r) for (var n in r) r.hasOwnProperty(n) && (this[n] = r[n]);
this.doc = e, this.node = t
};
function co(e, t, r) {
je(t) < (e.curOp && e.curOp.scrollTop || e.doc.scrollTop) && En(e, null, r)
}
uo.prototype.clear = function () {
var e = this.doc.cm, t = this.line.widgets, r = this.line, n = he(r);
if (null != n && t) {
for (var i = 0; i < t.length; ++i) t[i] == this && t.splice(i--, 1);
t.length || (r.widgets = null);
var o = wr(this);
ce(r, Math.max(0, r.height - o)), e && (jn(e, function () {
co(e, r, -o), qn(e, n, "widget")
}), sr(e, "lineWidgetCleared", e, this, n))
}
}, uo.prototype.changed = function () {
var e = this, t = this.height, r = this.doc.cm, n = this.line;
this.height = null;
var i = wr(this) - t;
i && (ce(n, n.height + i), r && jn(r, function () {
r.curOp.forceUpdate = !0, co(r, n, i), sr(r, "lineWidgetChanged", r, e, he(n))
}))
}, ct(uo);
var ho = 0, fo = function (e, t) {
this.lines = [], this.type = t, this.doc = e, this.id = ++ho
};
function po(e, t, r, n, i) {
if (n && n.shared) return function (e, t, r, n, i) {
(n = I(n)).shared = !1;
var o = [po(e, t, r, n, i)], l = o[0], s = n.widgetNode;
return Ci(e, function (e) {
s && (n.widgetNode = s.cloneNode(!0)), o.push(po(e, Ce(e, t), Ce(e, r), n, i));
for (var a = 0; a < e.linked.length; ++a) if (e.linked[a].isParent) return;
l = $(o)
}), new go(o, l)
}(e, t, r, n, i);
if (e.cm && !e.cm.curOp) return Xn(e.cm, po)(e, t, r, n, i);
var o = new fo(e, i), l = ve(t, r);
if (n && I(n, o, !1), l > 0 || 0 == l && !1 !== o.clearWhenEmpty) return o;
if (o.replacedWith && (o.collapsed = !0, o.widgetNode = W("span", [o.replacedWith], "CodeMirror-widget"), n.handleMouseEvents || o.widgetNode.setAttribute("cm-ignore-events", "true"), n.insertLeft && (o.widgetNode.insertLeft = !0)), o.collapsed) {
if (Re(e, t.line, t, r, o) || t.line != r.line && Re(e, r.line, t, r, o)) throw new Error("Inserting collapsed marker partially overlapping an existing one");
Te = !0
}
o.addToHistory && Ni(e, {from: t, to: r, origin: "markText"}, e.sel, NaN);
var s, a = t.line, u = e.cm;
if (e.iter(a, r.line + 1, function (e) {
u && o.collapsed && !u.options.lineWrapping && Be(e) == u.display.maxLine && (s = !0), o.collapsed && a != t.line && ce(e, 0), function (e, t) {
e.markedSpans = e.markedSpans ? e.markedSpans.concat([t]) : [t], t.marker.attachLine(e)
}(e, new ke(o, a == t.line ? t.ch : null, a == r.line ? r.ch : null)), ++a
}), o.collapsed && e.iter(t.line, r.line + 1, function (t) {
Ve(e, t) && ce(t, 0)
}), o.clearOnEnter && nt(o, "beforeCursorEnter", function () {
return o.clear()
}), o.readOnly && (Le = !0, (e.history.done.length || e.history.undone.length) && e.clearHistory()), o.collapsed && (o.id = ++ho, o.atomic = !0), u) {
if (s && (u.curOp.updateMaxLine = !0), o.collapsed) $n(u, t.line, r.line + 1); else if (o.className || o.title || o.startStyle || o.endStyle || o.css) for (var c = t.line; c <= r.line; c++) qn(u, c, "text");
o.atomic && Ki(u.doc), sr(u, "markerAdded", u, o)
}
return o
}
fo.prototype.clear = function () {
if (!this.explicitlyCleared) {
var e = this.doc.cm, t = e && !e.curOp;
if (t && Rn(e), ut(this, "clear")) {
var r = this.find();
r && sr(this, "clear", r.from, r.to)
}
for (var n = null, i = null, o = 0; o < this.lines.length; ++o) {
var l = this.lines[o], s = Me(l.markedSpans, this);
e && !this.collapsed ? qn(e, he(l), "text") : e && (null != s.to && (i = he(l)), null != s.from && (n = he(l))), l.markedSpans = Ne(l.markedSpans, s), null == s.from && this.collapsed && !Ve(this.doc, l) && e && ce(l, Qr(e.display))
}
if (e && this.collapsed && !e.options.lineWrapping) for (var a = 0; a < this.lines.length; ++a) {
var u = Be(this.lines[a]), c = Xe(u);
c > e.display.maxLineLength && (e.display.maxLine = u, e.display.maxLineLength = c, e.display.maxLineChanged = !0)
}
null != n && e && this.collapsed && $n(e, n, i + 1), this.lines.length = 0, this.explicitlyCleared = !0, this.atomic && this.doc.cantEdit && (this.doc.cantEdit = !1, e && Ki(e.doc)), e && sr(e, "markerCleared", e, this, n, i), t && Bn(e), this.parent && this.parent.clear()
}
}, fo.prototype.find = function (e, t) {
var r, n;
null == e && "bookmark" == this.type && (e = 1);
for (var i = 0; i < this.lines.length; ++i) {
var o = this.lines[i], l = Me(o.markedSpans, this);
if (null != l.from && (r = ge(t ? o : he(o), l.from), -1 == e)) return r;
if (null != l.to && (n = ge(t ? o : he(o), l.to), 1 == e)) return n
}
return r && {from: r, to: n}
}, fo.prototype.changed = function () {
var e = this, t = this.find(-1, !0), r = this, n = this.doc.cm;
t && n && jn(n, function () {
var i = t.line, o = he(t.line), l = Wr(n, o);
if (l && (Ir(l), n.curOp.selectionChanged = n.curOp.forceUpdate = !0), n.curOp.updateMaxLine = !0, !Ve(r.doc, i) && null != r.height) {
var s = r.height;
r.height = null;
var a = wr(r) - s;
a && ce(i, i.height + a)
}
sr(n, "markerChanged", n, e)
})
}, fo.prototype.attachLine = function (e) {
if (!this.lines.length && this.doc.cm) {
var t = this.doc.cm.curOp;
t.maybeHiddenMarkers && -1 != B(t.maybeHiddenMarkers, this) || (t.maybeUnhiddenMarkers || (t.maybeUnhiddenMarkers = [])).push(this)
}
this.lines.push(e)
}, fo.prototype.detachLine = function (e) {
if (this.lines.splice(B(this.lines, e), 1), !this.lines.length && this.doc.cm) {
var t = this.doc.cm.curOp;
(t.maybeHiddenMarkers || (t.maybeHiddenMarkers = [])).push(this)
}
}, ct(fo);
var go = function (e, t) {
this.markers = e, this.primary = t;
for (var r = 0; r < e.length; ++r) e[r].parent = this
};
function vo(e) {
return e.findMarks(ge(e.first, 0), e.clipPos(ge(e.lastLine())), function (e) {
return e.parent
})
}
function mo(e) {
for (var t = function (t) {
var r = e[t], n = [r.primary.doc];
Ci(r.primary.doc, function (e) {
return n.push(e)
});
for (var i = 0; i < r.markers.length; i++) {
var o = r.markers[i];
-1 == B(n, o.doc) && (o.parent = null, r.markers.splice(i--, 1))
}
}, r = 0; r < e.length; r++) t(r)
}
go.prototype.clear = function () {
if (!this.explicitlyCleared) {
this.explicitlyCleared = !0;
for (var e = 0; e < this.markers.length; ++e) this.markers[e].clear();
sr(this, "clear")
}
}, go.prototype.find = function (e, t) {
return this.primary.find(e, t)
}, ct(go);
var yo = 0, bo = function (e, t, r, n, i) {
if (!(this instanceof bo)) return new bo(e, t, r, n, i);
null == r && (r = 0), ao.call(this, [new so([new Xt("", null)])]), this.first = r, this.scrollTop = this.scrollLeft = 0, this.cantEdit = !1, this.cleanGeneration = 1, this.frontier = r;
var o = ge(r, 0);
this.sel = di(o), this.history = new Ti(null), this.id = ++yo, this.modeOption = t, this.lineSep = n, this.direction = "rtl" == i ? "rtl" : "ltr", this.extend = !1, "string" == typeof e && (e = this.splitLines(e)), xi(this, {
from: o,
to: o,
text: e
}), Gi(this, di(o), V)
};
bo.prototype = Q(ao.prototype, {
constructor: bo, iter: function (e, t, r) {
r ? this.iterN(e - this.first, t - e, r) : this.iterN(this.first, this.first + this.size, e)
}, insert: function (e, t) {
for (var r = 0, n = 0; n < t.length; ++n) r += t[n].height;
this.insertInner(e - this.first, t, r)
}, remove: function (e, t) {
this.removeInner(e - this.first, t)
}, getValue: function (e) {
var t = ue(this, this.first, this.first + this.size);
return !1 === e ? t : t.join(e || this.lineSeparator())
}, setValue: _n(function (e) {
var t = ge(this.first, 0), r = this.first + this.size - 1;
Zi(this, {
from: t,
to: ge(r, se(this, r).text.length),
text: this.splitLines(e),
origin: "setValue",
full: !0
}, !0), Gi(this, di(t))
}), replaceRange: function (e, t, r, n) {
ro(this, e, t = Ce(this, t), r = r ? Ce(this, r) : t, n)
}, getRange: function (e, t, r) {
var n = ae(this, Ce(this, e), Ce(this, t));
return !1 === r ? n : n.join(r || this.lineSeparator())
}, getLine: function (e) {
var t = this.getLineHandle(e);
return t && t.text
}, getLineHandle: function (e) {
if (de(this, e)) return se(this, e)
}, getLineNumber: function (e) {
return he(e)
}, getLineHandleVisualStart: function (e) {
return "number" == typeof e && (e = se(this, e)), Be(e)
}, lineCount: function () {
return this.size
}, firstLine: function () {
return this.first
}, lastLine: function () {
return this.first + this.size - 1
}, clipPos: function (e) {
return Ce(this, e)
}, getCursor: function (e) {
var t = this.sel.primary();
return null == e || "head" == e ? t.head : "anchor" == e ? t.anchor : "end" == e || "to" == e || !1 === e ? t.to() : t.from()
}, listSelections: function () {
return this.sel.ranges
}, somethingSelected: function () {
return this.sel.somethingSelected()
}, setCursor: _n(function (e, t, r) {
Ri(this, Ce(this, "number" == typeof e ? ge(e, t || 0) : e), null, r)
}), setSelection: _n(function (e, t, r) {
Ri(this, Ce(this, e), Ce(this, t || e), r)
}), extendSelection: _n(function (e, t, r) {
Fi(this, Ce(this, e), t && Ce(this, t), r)
}), extendSelections: _n(function (e, t) {
Ii(this, Se(this, e), t)
}), extendSelectionsBy: _n(function (e, t) {
Ii(this, Se(this, q(this.sel.ranges, e)), t)
}), setSelections: _n(function (e, t, r) {
if (e.length) {
for (var n = [], i = 0; i < e.length; i++) n[i] = new hi(Ce(this, e[i].anchor), Ce(this, e[i].head));
null == t && (t = Math.min(e.length - 1, this.sel.primIndex)), Gi(this, fi(n, t), r)
}
}), addSelection: _n(function (e, t, r) {
var n = this.sel.ranges.slice(0);
n.push(new hi(Ce(this, e), Ce(this, t || e))), Gi(this, fi(n, n.length - 1), r)
}), getSelection: function (e) {
for (var t, r = this.sel.ranges, n = 0; n < r.length; n++) {
var i = ae(this, r[n].from(), r[n].to());
t = t ? t.concat(i) : i
}
return !1 === e ? t : t.join(e || this.lineSeparator())
}, getSelections: function (e) {
for (var t = [], r = this.sel.ranges, n = 0; n < r.length; n++) {
var i = ae(this, r[n].from(), r[n].to());
!1 !== e && (i = i.join(e || this.lineSeparator())), t[n] = i
}
return t
}, replaceSelection: function (e, t, r) {
for (var n = [], i = 0; i < this.sel.ranges.length; i++) n[i] = e;
this.replaceSelections(n, t, r || "+input")
}, replaceSelections: _n(function (e, t, r) {
for (var n = [], i = this.sel, o = 0; o < i.ranges.length; o++) {
var l = i.ranges[o];
n[o] = {from: l.from(), to: l.to(), text: this.splitLines(e[o]), origin: r}
}
for (var s = t && "end" != t && function (e, t, r) {
for (var n = [], i = ge(e.first, 0), o = i, l = 0; l < t.length; l++) {
var s = t[l], a = mi(s.from, i, o), u = mi(pi(s), i, o);
if (i = s.to, o = u, "around" == r) {
var c = e.sel.ranges[l], h = ve(c.head, c.anchor) < 0;
n[l] = new hi(h ? u : a, h ? a : u)
} else n[l] = new hi(a, a)
}
return new ci(n, e.sel.primIndex)
}(this, n, t), a = n.length - 1; a >= 0; a--) Zi(this, n[a]);
s ? Bi(this, s) : this.cm && Fn(this.cm)
}), undo: _n(function () {
Ji(this, "undo")
}), redo: _n(function () {
Ji(this, "redo")
}), undoSelection: _n(function () {
Ji(this, "undo", !0)
}), redoSelection: _n(function () {
Ji(this, "redo", !0)
}), setExtending: function (e) {
this.extend = e
}, getExtending: function () {
return this.extend
}, historySize: function () {
for (var e = this.history, t = 0, r = 0, n = 0; n < e.done.length; n++) e.done[n].ranges || ++t;
for (var i = 0; i < e.undone.length; i++) e.undone[i].ranges || ++r;
return {undo: t, redo: r}
}, clearHistory: function () {
this.history = new Ti(this.history.maxGeneration)
}, markClean: function () {
this.cleanGeneration = this.changeGeneration(!0)
}, changeGeneration: function (e) {
return e && (this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null), this.history.generation
}, isClean: function (e) {
return this.history.generation == (e || this.cleanGeneration)
}, getHistory: function () {
return {done: Pi(this.history.done), undone: Pi(this.history.undone)}
}, setHistory: function (e) {
var t = this.history = new Ti(this.history.maxGeneration);
t.done = Pi(e.done.slice(0), null, !0), t.undone = Pi(e.undone.slice(0), null, !0)
}, setGutterMarker: _n(function (e, t, r) {
return lo(this, e, "gutter", function (e) {
var n = e.gutterMarkers || (e.gutterMarkers = {});
return n[t] = r, !r && re(n) && (e.gutterMarkers = null), !0
})
}), clearGutter: _n(function (e) {
var t = this;
this.iter(function (r) {
r.gutterMarkers && r.gutterMarkers[e] && lo(t, r, "gutter", function () {
return r.gutterMarkers[e] = null, re(r.gutterMarkers) && (r.gutterMarkers = null), !0
})
})
}), lineInfo: function (e) {
var t;
if ("number" == typeof e) {
if (!de(this, e)) return null;
if (t = e, !(e = se(this, e))) return null
} else if (null == (t = he(e))) return null;
return {
line: t,
handle: e,
text: e.text,
gutterMarkers: e.gutterMarkers,
textClass: e.textClass,
bgClass: e.bgClass,
wrapClass: e.wrapClass,
widgets: e.widgets
}
}, addLineClass: _n(function (e, t, r) {
return lo(this, e, "gutter" == t ? "gutter" : "class", function (e) {
var n = "text" == t ? "textClass" : "background" == t ? "bgClass" : "gutter" == t ? "gutterClass" : "wrapClass";
if (e[n]) {
if (L(r).test(e[n])) return !1;
e[n] += " " + r
} else e[n] = r;
return !0
})
}), removeLineClass: _n(function (e, t, r) {
return lo(this, e, "gutter" == t ? "gutter" : "class", function (e) {
var n = "text" == t ? "textClass" : "background" == t ? "bgClass" : "gutter" == t ? "gutterClass" : "wrapClass",
i = e[n];
if (!i) return !1;
if (null == r) e[n] = null; else {
var o = i.match(L(r));
if (!o) return !1;
var l = o.index + o[0].length;
e[n] = i.slice(0, o.index) + (o.index && l != i.length ? " " : "") + i.slice(l) || null
}
return !0
})
}), addLineWidget: _n(function (e, t, r) {
return function (e, t, r, n) {
var i = new uo(e, r, n), o = e.cm;
return o && i.noHScroll && (o.display.alignWidgets = !0), lo(e, t, "widget", function (t) {
var r = t.widgets || (t.widgets = []);
if (null == i.insertAt ? r.push(i) : r.splice(Math.min(r.length - 1, Math.max(0, i.insertAt)), 0, i), i.line = t, o && !Ve(e, t)) {
var n = je(t) < e.scrollTop;
ce(t, t.height + wr(i)), n && En(o, null, i.height), o.curOp.forceUpdate = !0
}
return !0
}), sr(o, "lineWidgetAdded", o, i, "number" == typeof t ? t : he(t)), i
}(this, e, t, r)
}), removeLineWidget: function (e) {
e.clear()
}, markText: function (e, t, r) {
return po(this, Ce(this, e), Ce(this, t), r, r && r.type || "range")
}, setBookmark: function (e, t) {
var r = {
replacedWith: t && (null == t.nodeType ? t.widget : t),
insertLeft: t && t.insertLeft,
clearWhenEmpty: !1,
shared: t && t.shared,
handleMouseEvents: t && t.handleMouseEvents
};
return po(this, e = Ce(this, e), e, r, "bookmark")
}, findMarksAt: function (e) {
var t = [], r = se(this, (e = Ce(this, e)).line).markedSpans;
if (r) for (var n = 0; n < r.length; ++n) {
var i = r[n];
(null == i.from || i.from <= e.ch) && (null == i.to || i.to >= e.ch) && t.push(i.marker.parent || i.marker)
}
return t
}, findMarks: function (e, t, r) {
e = Ce(this, e), t = Ce(this, t);
var n = [], i = e.line;
return this.iter(e.line, t.line + 1, function (o) {
var l = o.markedSpans;
if (l) for (var s = 0; s < l.length; s++) {
var a = l[s];
null != a.to && i == e.line && e.ch >= a.to || null == a.from && i != e.line || null != a.from && i == t.line && a.from >= t.ch || r && !r(a.marker) || n.push(a.marker.parent || a.marker)
}
++i
}), n
}, getAllMarks: function () {
var e = [];
return this.iter(function (t) {
var r = t.markedSpans;
if (r) for (var n = 0; n < r.length; ++n) null != r[n].from && e.push(r[n].marker)
}), e
}, posFromIndex: function (e) {
var t, r = this.first, n = this.lineSeparator().length;
return this.iter(function (i) {
var o = i.text.length + n;
if (o > e) return t = e, !0;
e -= o, ++r
}), Ce(this, ge(r, t))
}, indexFromPos: function (e) {
var t = (e = Ce(this, e)).ch;
if (e.line < this.first || e.ch < 0) return 0;
var r = this.lineSeparator().length;
return this.iter(this.first, e.line, function (e) {
t += e.text.length + r
}), t
}, copy: function (e) {
var t = new bo(ue(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);
return t.scrollTop = this.scrollTop, t.scrollLeft = this.scrollLeft, t.sel = this.sel, t.extend = !1, e && (t.history.undoDepth = this.history.undoDepth, t.setHistory(this.getHistory())), t
}, linkedDoc: function (e) {
e || (e = {});
var t = this.first, r = this.first + this.size;
null != e.from && e.from > t && (t = e.from), null != e.to && e.to < r && (r = e.to);
var n = new bo(ue(this, t, r), e.mode || this.modeOption, t, this.lineSep, this.direction);
return e.sharedHist && (n.history = this.history), (this.linked || (this.linked = [])).push({
doc: n,
sharedHist: e.sharedHist
}), n.linked = [{doc: this, isParent: !0, sharedHist: e.sharedHist}], function (e, t) {
for (var r = 0; r < t.length; r++) {
var n = t[r], i = n.find(), o = e.clipPos(i.from), l = e.clipPos(i.to);
if (ve(o, l)) {
var s = po(e, o, l, n.primary, n.primary.type);
n.markers.push(s), s.parent = n
}
}
}(n, vo(this)), n
}, unlinkDoc: function (e) {
if (e instanceof ul && (e = e.doc), this.linked) for (var t = 0; t < this.linked.length; ++t) {
if (this.linked[t].doc == e) {
this.linked.splice(t, 1), e.unlinkDoc(this), mo(vo(this));
break
}
}
if (e.history == this.history) {
var r = [e.id];
Ci(e, function (e) {
return r.push(e.id)
}, !0), e.history = new Ti(null), e.history.done = Pi(this.history.done, r), e.history.undone = Pi(this.history.undone, r)
}
}, iterLinkedDocs: function (e) {
Ci(this, e)
}, getMode: function () {
return this.mode
}, getEditor: function () {
return this.cm
}, splitLines: function (e) {
return this.lineSep ? e.split(this.lineSep) : St(e)
}, lineSeparator: function () {
return this.lineSep || "\n"
}, setDirection: _n(function (e) {
var t;
("rtl" != e && (e = "ltr"), e != this.direction) && (this.direction = e, this.iter(function (e) {
return e.order = null
}), this.cm && jn(t = this.cm, function () {
Li(t), $n(t)
}))
})
}), bo.prototype.eachLine = bo.prototype.iter;
var wo = 0;
function xo(e) {
var t = this;
if (Co(t), !st(t, e) && !xr(t.display, e)) {
ht(e), l && (wo = +new Date);
var r = on(t, e, !0), n = e.dataTransfer.files;
if (r && !t.isReadOnly()) if (n && n.length && window.FileReader && window.File) for (var i = n.length, o = Array(i), s = 0, a = function (e, n) {
if (!t.options.allowDropFileTypes || -1 != B(t.options.allowDropFileTypes, e.type)) {
var l = new FileReader;
l.onload = Xn(t, function () {
var e = l.result;
if (/[\x00-\x08\x0e-\x1f]{2}/.test(e) && (e = ""), o[n] = e, ++s == i) {
var a = {
from: r = Ce(t.doc, r),
to: r,
text: t.doc.splitLines(o.join(t.doc.lineSeparator())),
origin: "paste"
};
Zi(t.doc, a), Bi(t.doc, di(r, pi(a)))
}
}), l.readAsText(e)
}
}, u = 0; u < i; ++u) a(n[u], u); else {
if (t.state.draggingText && t.doc.sel.contains(r) > -1) return t.state.draggingText(e), void setTimeout(function () {
return t.display.input.focus()
}, 20);
try {
var c = e.dataTransfer.getData("Text");
if (c) {
var h;
if (t.state.draggingText && !t.state.draggingText.copy && (h = t.listSelections()), Ui(t.doc, di(r, r)), h) for (var f = 0; f < h.length; ++f) ro(t.doc, "", h[f].anchor, h[f].head, "drag");
t.replaceSelection(c, "around", "paste"), t.display.input.focus()
}
} catch (e) {
}
}
}
}
function Co(e) {
e.display.dragCursor && (e.display.lineSpace.removeChild(e.display.dragCursor), e.display.dragCursor = null)
}
function So(e) {
if (document.body.getElementsByClassName) for (var t = document.body.getElementsByClassName("CodeMirror"), r = 0; r < t.length; r++) {
var n = t[r].CodeMirror;
n && e(n)
}
}
var Lo = !1;
function To() {
var e;
Lo || (nt(window, "resize", function () {
null == e && (e = setTimeout(function () {
e = null, So(ko)
}, 100))
}), nt(window, "blur", function () {
return So(pn)
}), Lo = !0)
}
function ko(e) {
var t = e.display;
t.lastWrapHeight == t.wrapper.clientHeight && t.lastWrapWidth == t.wrapper.clientWidth || (t.cachedCharWidth = t.cachedTextHeight = t.cachedPaddingH = null, t.scrollbarsClipped = !1, e.setSize())
}
for (var Mo = {
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"
}, No = 0; No < 10; No++) Mo[No + 48] = Mo[No + 96] = String(No);
for (var Oo = 65; Oo <= 90; Oo++) Mo[Oo] = String.fromCharCode(Oo);
for (var Wo = 1; Wo <= 12; Wo++) Mo[Wo + 111] = Mo[Wo + 63235] = "F" + Wo;
var Ao = {};
function Do(e) {
var t, r, n, i, o = e.split(/-(?!$)/);
e = o[o.length - 1];
for (var l = 0; l < o.length - 1; l++) {
var s = o[l];
if (/^(cmd|meta|m)$/i.test(s)) i = !0; else if (/^a(lt)?$/i.test(s)) t = !0; else if (/^(c|ctrl|control)$/i.test(s)) r = !0; else {
if (!/^s(hift)?$/i.test(s)) throw new Error("Unrecognized modifier name: " + s);
n = !0
}
}
return t && (e = "Alt-" + e), r && (e = "Ctrl-" + e), i && (e = "Cmd-" + e), n && (e = "Shift-" + e), e
}
function Ho(e) {
var t = {};
for (var r in e) if (e.hasOwnProperty(r)) {
var n = e[r];
if (/^(name|fallthrough|(de|at)tach)$/.test(r)) continue;
if ("..." == n) {
delete e[r];
continue
}
for (var i = q(r.split(" "), Do), o = 0; o < i.length; o++) {
var l = void 0, s = void 0;
o == i.length - 1 ? (s = i.join(" "), l = n) : (s = i.slice(0, o + 1).join(" "), l = "...");
var a = t[s];
if (a) {
if (a != l) throw new Error("Inconsistent bindings for " + s)
} else t[s] = l
}
delete e[r]
}
for (var u in t) e[u] = t[u];
return e
}
function Po(e, t, r, n) {
var i = (t = Io(t)).call ? t.call(e, n) : t[e];
if (!1 === i) return "nothing";
if ("..." === i) return "multi";
if (null != i && r(i)) return "handled";
if (t.fallthrough) {
if ("[object Array]" != Object.prototype.toString.call(t.fallthrough)) return Po(e, t.fallthrough, r, n);
for (var o = 0; o < t.fallthrough.length; o++) {
var l = Po(e, t.fallthrough[o], r, n);
if (l) return l
}
}
}
function Eo(e) {
var t = "string" == typeof e ? e : Mo[e.keyCode];
return "Ctrl" == t || "Alt" == t || "Shift" == t || "Mod" == t
}
function Fo(e, t) {
if (h && 34 == e.keyCode && e.char) return !1;
var r = Mo[e.keyCode], n = r;
return null != n && !e.altGraphKey && (e.altKey && "Alt" != r && (n = "Alt-" + n), (C ? e.metaKey : e.ctrlKey) && "Ctrl" != r && (n = "Ctrl-" + n), (C ? e.ctrlKey : e.metaKey) && "Cmd" != r && (n = "Cmd-" + n), !t && e.shiftKey && "Shift" != r && (n = "Shift-" + n), n)
}
function Io(e) {
return "string" == typeof e ? Ao[e] : e
}
function zo(e, t) {
for (var r = e.doc.sel.ranges, n = [], i = 0; i < r.length; i++) {
for (var o = t(r[i]); n.length && ve(o.from, $(n).to) <= 0;) {
var l = n.pop();
if (ve(l.from, o.from) < 0) {
o.from = l.from;
break
}
}
n.push(o)
}
jn(e, function () {
for (var t = n.length - 1; t >= 0; t--) ro(e.doc, "", n[t].from, n[t].to, "+delete");
Fn(e)
})
}
Ao.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"
}, Ao.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"
}, Ao.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"
}, Ao.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"]
}, Ao.default = y ? Ao.macDefault : Ao.pcDefault;
var Ro = {
selectAll: $i, singleSelection: function (e) {
return e.setSelection(e.getCursor("anchor"), e.getCursor("head"), V)
}, killLine: function (e) {
return zo(e, function (t) {
if (t.empty()) {
var r = se(e.doc, t.head.line).text.length;
return t.head.ch == r && t.head.line < e.lastLine() ? {
from: t.head,
to: ge(t.head.line + 1, 0)
} : {from: t.head, to: ge(t.head.line, r)}
}
return {from: t.from(), to: t.to()}
})
}, deleteLine: function (e) {
return zo(e, function (t) {
return {from: ge(t.from().line, 0), to: Ce(e.doc, ge(t.to().line + 1, 0))}
})
}, delLineLeft: function (e) {
return zo(e, function (e) {
return {from: ge(e.from().line, 0), to: e.from()}
})
}, delWrappedLineLeft: function (e) {
return zo(e, function (t) {
var r = e.charCoords(t.head, "div").top + 5;
return {from: e.coordsChar({left: 0, top: r}, "div"), to: t.from()}
})
}, delWrappedLineRight: function (e) {
return zo(e, function (t) {
var r = e.charCoords(t.head, "div").top + 5,
n = e.coordsChar({left: e.display.lineDiv.offsetWidth + 100, top: r}, "div");
return {from: t.from(), to: n}
})
}, undo: function (e) {
return e.undo()
}, redo: function (e) {
return e.redo()
}, undoSelection: function (e) {
return e.undoSelection()
}, redoSelection: function (e) {
return e.redoSelection()
}, goDocStart: function (e) {
return e.extendSelection(ge(e.firstLine(), 0))
}, goDocEnd: function (e) {
return e.extendSelection(ge(e.lastLine()))
}, goLineStart: function (e) {
return e.extendSelectionsBy(function (t) {
return Bo(e, t.head.line)
}, {origin: "+move", bias: 1})
}, goLineStartSmart: function (e) {
return e.extendSelectionsBy(function (t) {
return Go(e, t.head)
}, {origin: "+move", bias: 1})
}, goLineEnd: function (e) {
return e.extendSelectionsBy(function (t) {
return function (e, t) {
var r = se(e.doc, t), n = function (e) {
for (var t; t = ze(e);) e = t.find(1, !0).line;
return e
}(r);
n != r && (t = he(n));
return et(!0, e, r, t, -1)
}(e, t.head.line)
}, {origin: "+move", bias: -1})
}, goLineRight: function (e) {
return e.extendSelectionsBy(function (t) {
var r = e.charCoords(t.head, "div").top + 5;
return e.coordsChar({left: e.display.lineDiv.offsetWidth + 100, top: r}, "div")
}, j)
}, goLineLeft: function (e) {
return e.extendSelectionsBy(function (t) {
var r = e.charCoords(t.head, "div").top + 5;
return e.coordsChar({left: 0, top: r}, "div")
}, j)
}, goLineLeftSmart: function (e) {
return e.extendSelectionsBy(function (t) {
var r = e.charCoords(t.head, "div").top + 5, n = e.coordsChar({left: 0, top: r}, "div");
return n.ch < e.getLine(n.line).search(/\S/) ? Go(e, t.head) : n
}, j)
}, goLineUp: function (e) {
return e.moveV(-1, "line")
}, goLineDown: function (e) {
return e.moveV(1, "line")
}, goPageUp: function (e) {
return e.moveV(-1, "page")
}, goPageDown: function (e) {
return e.moveV(1, "page")
}, goCharLeft: function (e) {
return e.moveH(-1, "char")
}, goCharRight: function (e) {
return e.moveH(1, "char")
}, goColumnLeft: function (e) {
return e.moveH(-1, "column")
}, goColumnRight: function (e) {
return e.moveH(1, "column")
}, goWordLeft: function (e) {
return e.moveH(-1, "word")
}, goGroupRight: function (e) {
return e.moveH(1, "group")
}, goGroupLeft: function (e) {
return e.moveH(-1, "group")
}, goWordRight: function (e) {
return e.moveH(1, "word")
}, delCharBefore: function (e) {
return e.deleteH(-1, "char")
}, delCharAfter: function (e) {
return e.deleteH(1, "char")
}, delWordBefore: function (e) {
return e.deleteH(-1, "word")
}, delWordAfter: function (e) {
return e.deleteH(1, "word")
}, delGroupBefore: function (e) {
return e.deleteH(-1, "group")
}, delGroupAfter: function (e) {
return e.deleteH(1, "group")
}, indentAuto: function (e) {
return e.indentSelection("smart")
}, indentMore: function (e) {
return e.indentSelection("add")
}, indentLess: function (e) {
return e.indentSelection("subtract")
}, insertTab: function (e) {
return e.replaceSelection("\t")
}, insertSoftTab: function (e) {
for (var t = [], r = e.listSelections(), n = e.options.tabSize, i = 0; i < r.length; i++) {
var o = r[i].from(), l = z(e.getLine(o.line), o.ch, n);
t.push(_(n - l % n))
}
e.replaceSelections(t)
}, defaultTab: function (e) {
e.somethingSelected() ? e.indentSelection("add") : e.execCommand("insertTab")
}, transposeChars: function (e) {
return jn(e, function () {
for (var t = e.listSelections(), r = [], n = 0; n < t.length; n++) if (t[n].empty()) {
var i = t[n].head, o = se(e.doc, i.line).text;
if (o) if (i.ch == o.length && (i = new ge(i.line, i.ch - 1)), i.ch > 0) i = new ge(i.line, i.ch + 1), e.replaceRange(o.charAt(i.ch - 1) + o.charAt(i.ch - 2), ge(i.line, i.ch - 2), i, "+transpose"); else if (i.line > e.doc.first) {
var l = se(e.doc, i.line - 1).text;
l && (i = new ge(i.line, 1), e.replaceRange(o.charAt(0) + e.doc.lineSeparator() + l.charAt(l.length - 1), ge(i.line - 1, l.length - 1), i, "+transpose"))
}
r.push(new hi(i, i))
}
e.setSelections(r)
})
}, newlineAndIndent: function (e) {
return jn(e, function () {
for (var t = e.listSelections(), r = t.length - 1; r >= 0; r--) e.replaceRange(e.doc.lineSeparator(), t[r].anchor, t[r].head, "+input");
t = e.listSelections();
for (var n = 0; n < t.length; n++) e.indentLine(t[n].from().line, null, !0);
Fn(e)
})
}, openLine: function (e) {
return e.replaceSelection("\n", "start")
}, toggleOverwrite: function (e) {
return e.toggleOverwrite()
}
};
function Bo(e, t) {
var r = se(e.doc, t), n = Be(r);
return n != r && (t = he(n)), et(!0, e, n, t, 1)
}
function Go(e, t) {
var r = Bo(e, t.line), n = se(e.doc, r.line), i = Ze(n, e.doc.direction);
if (!i || 0 == i[0].level) {
var o = Math.max(0, n.text.search(/\S/)), l = t.line == r.line && t.ch <= o && t.ch;
return ge(r.line, l ? 0 : o, r.sticky)
}
return r
}
function Uo(e, t, r) {
if ("string" == typeof t && !(t = Ro[t])) return !1;
e.display.input.ensurePolled();
var n = e.display.shift, i = !1;
try {
e.isReadOnly() && (e.state.suppressEdits = !0), r && (e.display.shift = !1), i = t(e) != U
} finally {
e.display.shift = n, e.state.suppressEdits = !1
}
return i
}
var Vo = new R;
function Ko(e, t, r, n) {
var i = e.state.keySeq;
if (i) {
if (Eo(t)) return "handled";
Vo.set(50, function () {
e.state.keySeq == i && (e.state.keySeq = null, e.display.input.reset())
}), t = i + " " + t
}
var o = function (e, t, r) {
for (var n = 0; n < e.state.keyMaps.length; n++) {
var i = Po(t, e.state.keyMaps[n], r, e);
if (i) return i
}
return e.options.extraKeys && Po(t, e.options.extraKeys, r, e) || Po(t, e.options.keyMap, r, e)
}(e, t, n);
return "multi" == o && (e.state.keySeq = t), "handled" == o && sr(e, "keyHandled", e, t, r), "handled" != o && "multi" != o || (ht(r), hn(e)), i && !o && /\'$/.test(t) ? (ht(r), !0) : !!o
}
function jo(e, t) {
var r = Fo(t, !0);
return !!r && (t.shiftKey && !e.state.keySeq ? Ko(e, "Shift-" + r, t, function (t) {
return Uo(e, t, !0)
}) || Ko(e, r, t, function (t) {
if ("string" == typeof t ? /^go[A-Z]/.test(t) : t.motion) return Uo(e, t)
}) : Ko(e, r, t, function (t) {
return Uo(e, t)
}))
}
var Xo, Yo, _o = null;
function $o(e) {
var t = this;
if (t.curOp.focus = D(), !st(t, e)) {
l && s < 11 && 27 == e.keyCode && (e.returnValue = !1);
var r = e.keyCode;
t.display.shift = 16 == r || e.shiftKey;
var n = jo(t, e);
h && (_o = n ? r : null, !n && 88 == r && !Tt && (y ? e.metaKey : e.ctrlKey) && t.replaceSelection("", null, "cut")), 18 != r || /\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className) || function (e) {
var t = e.display.lineDiv;
function r(e) {
18 != e.keyCode && e.altKey || (k(t, "CodeMirror-crosshair"), ot(document, "keyup", r), ot(document, "mouseover", r))
}
H(t, "CodeMirror-crosshair"), nt(document, "keyup", r), nt(document, "mouseover", r)
}(t)
}
}
function qo(e) {
16 == e.keyCode && (this.doc.sel.shift = !1), st(this, e)
}
function Zo(e) {
var t = this;
if (!(xr(t.display, e) || st(t, e) || e.ctrlKey && !e.altKey || y && e.metaKey)) {
var r = e.keyCode, n = e.charCode;
if (h && r == _o) return _o = null, void ht(e);
if (!h || e.which && !(e.which < 10) || !jo(t, e)) {
var i = String.fromCharCode(null == n ? r : n);
"\b" != i && (function (e, t, r) {
return Ko(e, "'" + r + "'", t, function (t) {
return Uo(e, t, !0)
})
}(t, e, i) || t.display.input.onKeyPress(e))
}
}
}
function Qo(e) {
var t = this, r = t.display;
if (!(st(t, e) || r.activeTouch && r.input.supportsTouch())) if (r.input.ensurePolled(), r.shift = e.shiftKey, xr(r, e)) a || (r.scroller.draggable = !1, setTimeout(function () {
return r.scroller.draggable = !0
}, 100)); else if (!el(t, e)) {
var n = on(t, e);
switch (window.focus(), vt(e)) {
case 1:
t.state.selectingText ? t.state.selectingText(e) : n ? function (e, t, r) {
l ? setTimeout(F(fn, e), 0) : e.curOp.focus = D();
var n, i = +new Date;
Yo && Yo.time > i - 400 && 0 == ve(Yo.pos, r) ? n = "triple" : Xo && Xo.time > i - 400 && 0 == ve(Xo.pos, r) ? (n = "double", Yo = {
time: i,
pos: r
}) : (n = "single", Xo = {time: i, pos: r});
var o, u = e.doc.sel, c = y ? t.metaKey : t.ctrlKey;
e.options.dragDrop && bt && !e.isReadOnly() && "single" == n && (o = u.contains(r)) > -1 && (ve((o = u.ranges[o]).from(), r) < 0 || r.xRel > 0) && (ve(o.to(), r) > 0 || r.xRel < 0) ? function (e, t, r, n) {
var i = e.display, o = +new Date, u = Xn(e, function (c) {
a && (i.scroller.draggable = !1), e.state.draggingText = !1, ot(document, "mouseup", u), ot(i.scroller, "drop", u), Math.abs(t.clientX - c.clientX) + Math.abs(t.clientY - c.clientY) < 10 && (ht(c), !n && +new Date - 200 < o && Fi(e.doc, r), a || l && 9 == s ? setTimeout(function () {
document.body.focus(), i.input.focus()
}, 20) : i.input.focus())
});
a && (i.scroller.draggable = !0);
e.state.draggingText = u, u.copy = y ? t.altKey : t.ctrlKey, i.scroller.dragDrop && i.scroller.dragDrop();
nt(document, "mouseup", u), nt(i.scroller, "drop", u)
}(e, t, r, c) : function (e, t, r, n, i) {
var o = e.display, l = e.doc;
ht(t);
var s, a, u = l.sel, c = u.ranges;
i && !t.shiftKey ? (a = l.sel.contains(r), s = a > -1 ? c[a] : new hi(r, r)) : (s = l.sel.primary(), a = l.sel.primIndex);
if (b ? t.shiftKey && t.metaKey : t.altKey) n = "rect", i || (s = new hi(r, r)), r = on(e, t, !0, !0), a = -1; else if ("double" == n) {
var h = e.findWordAt(r);
s = e.display.shift || l.extend ? Ei(l, s, h.anchor, h.head) : h
} else if ("triple" == n) {
var f = new hi(ge(r.line, 0), Ce(l, ge(r.line + 1, 0)));
s = e.display.shift || l.extend ? Ei(l, s, f.anchor, f.head) : f
} else s = Ei(l, s, r);
i ? -1 == a ? (a = c.length, Gi(l, fi(c.concat([s]), a), {
scroll: !1,
origin: "*mouse"
})) : c.length > 1 && c[a].empty() && "single" == n && !t.shiftKey ? (Gi(l, fi(c.slice(0, a).concat(c.slice(a + 1)), 0), {
scroll: !1,
origin: "*mouse"
}), u = l.sel) : zi(l, a, s, K) : (a = 0, Gi(l, new ci([s], 0), K), u = l.sel);
var d = r;
var p = o.wrapper.getBoundingClientRect(), g = 0;
function v(t) {
var i = ++g, c = on(e, t, !0, "rect" == n);
if (c) if (0 != ve(c, d)) {
e.curOp.focus = D(), function (t) {
if (0 == ve(d, t)) return;
if (d = t, "rect" == n) {
for (var i = [], o = e.options.tabSize, c = z(se(l, r.line).text, r.ch, o), h = z(se(l, t.line).text, t.ch, o), f = Math.min(c, h), p = Math.max(c, h), g = Math.min(r.line, t.line), v = Math.min(e.lastLine(), Math.max(r.line, t.line)); g <= v; g++) {
var m = se(l, g).text, y = X(m, f, o);
f == p ? i.push(new hi(ge(g, y), ge(g, y))) : m.length > y && i.push(new hi(ge(g, y), ge(g, X(m, p, o))))
}
i.length || i.push(new hi(r, r)), Gi(l, fi(u.ranges.slice(0, a).concat(i), a), {
origin: "*mouse",
scroll: !1
}), e.scrollIntoView(t)
} else {
var b, w = s, x = w.anchor, C = t;
if ("single" != n) ve((b = "double" == n ? e.findWordAt(t) : new hi(ge(t.line, 0), Ce(l, ge(t.line + 1, 0)))).anchor, x) > 0 ? (C = b.head, x = we(w.from(), b.anchor)) : (C = b.anchor, x = be(w.to(), b.head));
var S = u.ranges.slice(0);
S[a] = new hi(Ce(l, x), C), Gi(l, fi(S, a), K)
}
}(c);
var h = bn(o, l);
(c.line >= h.to || c.line < h.from) && setTimeout(Xn(e, function () {
g == i && v(t)
}), 150)
} else {
var f = t.clientY < p.top ? -20 : t.clientY > p.bottom ? 20 : 0;
f && setTimeout(Xn(e, function () {
g == i && (o.scroller.scrollTop += f, v(t))
}), 50)
}
}
function m(t) {
e.state.selectingText = !1, g = 1 / 0, ht(t), o.input.focus(), ot(document, "mousemove", y), ot(document, "mouseup", w), l.history.lastSelOrigin = null
}
var y = Xn(e, function (e) {
vt(e) ? v(e) : m(e)
}), w = Xn(e, m);
e.state.selectingText = w, nt(document, "mousemove", y), nt(document, "mouseup", w)
}(e, t, r, n, c)
}(t, e, n) : gt(e) == r.scroller && ht(e);
break;
case 2:
a && (t.state.lastMiddleDown = +new Date), n && Fi(t.doc, n), setTimeout(function () {
return r.input.focus()
}, 20), ht(e);
break;
case 3:
S ? tl(t, e) : function (e) {
e.state.delayingBlurEvent = !0, setTimeout(function () {
e.state.delayingBlurEvent && (e.state.delayingBlurEvent = !1, pn(e))
}, 100)
}(t)
}
}
}
function Jo(e, t, r, n) {
var i, o;
try {
i = t.clientX, o = t.clientY
} catch (t) {
return !1
}
if (i >= Math.floor(e.display.gutters.getBoundingClientRect().right)) return !1;
n && ht(t);
var l = e.display, s = l.lineDiv.getBoundingClientRect();
if (o > s.bottom || !ut(e, r)) return dt(t);
o -= s.top - l.viewOffset;
for (var a = 0; a < e.options.gutters.length; ++a) {
var u = l.gutters.childNodes[a];
if (u && u.getBoundingClientRect().right >= i) return lt(e, r, e, fe(e.doc, o), e.options.gutters[a], t), dt(t)
}
}
function el(e, t) {
return Jo(e, t, "gutterClick", !0)
}
function tl(e, t) {
xr(e.display, t) || function (e, t) {
if (!ut(e, "gutterContextMenu")) return !1;
return Jo(e, t, "gutterContextMenu", !1)
}(e, t) || st(e, t, "contextmenu") || e.display.input.onContextMenu(t)
}
function rl(e) {
e.display.wrapper.className = e.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + e.options.theme.replace(/(^|\s)\s*/g, " cm-s-"), Rr(e)
}
var nl = {
toString: function () {
return "CodeMirror.Init"
}
}, il = {}, ol = {};
function ll(e) {
ai(e), $n(e), gn(e)
}
function sl(e, t, r) {
if (!t != !(r && r != nl)) {
var n = e.display.dragFunctions, i = t ? nt : ot;
i(e.display.scroller, "dragstart", n.start), i(e.display.scroller, "dragenter", n.enter), i(e.display.scroller, "dragover", n.over), i(e.display.scroller, "dragleave", n.leave), i(e.display.scroller, "drop", n.drop)
}
}
function al(e) {
e.options.lineWrapping ? (H(e.display.wrapper, "CodeMirror-wrap"), e.display.sizer.style.minWidth = "", e.display.sizerWidth = null) : (k(e.display.wrapper, "CodeMirror-wrap"), Ye(e)), nn(e), $n(e), Rr(e), setTimeout(function () {
return Wn(e)
}, 100)
}
function ul(e, t) {
var n = this;
if (!(this instanceof ul)) return new ul(e, t);
this.options = t = t ? I(t) : {}, I(il, t, !1), ui(t);
var i = t.value;
"string" == typeof i && (i = new bo(i, t.mode, null, t.lineSeparator, t.direction)), this.doc = i;
var o = new ul.inputStyles[t.inputStyle](this), u = this.display = new function (e, t, n) {
var i = this;
this.input = n, i.scrollbarFiller = O("div", null, "CodeMirror-scrollbar-filler"), i.scrollbarFiller.setAttribute("cm-not-content", "true"), i.gutterFiller = O("div", null, "CodeMirror-gutter-filler"), i.gutterFiller.setAttribute("cm-not-content", "true"), i.lineDiv = W("div", null, "CodeMirror-code"), i.selectionDiv = O("div", null, null, "position: relative; z-index: 1"), i.cursorDiv = O("div", null, "CodeMirror-cursors"), i.measure = O("div", null, "CodeMirror-measure"), i.lineMeasure = O("div", null, "CodeMirror-measure"), i.lineSpace = W("div", [i.measure, i.lineMeasure, i.selectionDiv, i.cursorDiv, i.lineDiv], null, "position: relative; outline: none");
var o = W("div", [i.lineSpace], "CodeMirror-lines");
i.mover = O("div", [o], null, "position: relative"), i.sizer = O("div", [i.mover], "CodeMirror-sizer"), i.sizerWidth = null, i.heightForcer = O("div", null, null, "position: absolute; height: " + G + "px; width: 1px;"), i.gutters = O("div", null, "CodeMirror-gutters"), i.lineGutter = null, i.scroller = O("div", [i.sizer, i.heightForcer, i.gutters], "CodeMirror-scroll"), i.scroller.setAttribute("tabIndex", "-1"), i.wrapper = O("div", [i.scrollbarFiller, i.gutterFiller, i.scroller], "CodeMirror"), l && s < 8 && (i.gutters.style.zIndex = -1, i.scroller.style.paddingRight = 0), a || r && m || (i.scroller.draggable = !0), e && (e.appendChild ? e.appendChild(i.wrapper) : e(i.wrapper)), i.viewFrom = i.viewTo = t.first, i.reportedViewFrom = i.reportedViewTo = t.first, i.view = [], i.renderedView = null, i.externalMeasured = null, i.viewOffset = 0, i.lastWrapHeight = i.lastWrapWidth = 0, i.updateLineNumbers = null, i.nativeBarWidth = i.barHeight = i.barWidth = 0, i.scrollbarsClipped = !1, i.lineNumWidth = i.lineNumInnerWidth = i.lineNumChars = null, i.alignWidgets = !1, i.cachedCharWidth = i.cachedTextHeight = i.cachedPaddingH = null, i.maxLine = null, i.maxLineLength = 0, i.maxLineChanged = !1, i.wheelDX = i.wheelDY = i.wheelStartX = i.wheelStartY = null, i.shift = !1, i.selForContextMenu = null, i.activeTouch = null, n.init(i)
}(e, i, o);
for (var c in u.wrapper.CodeMirror = this, ai(this), rl(this), t.lineWrapping && (this.display.wrapper.className += " CodeMirror-wrap"), Hn(this), this.state = {
keyMaps: [],
overlays: [],
modeGen: 0,
overwrite: !1,
delayingBlurEvent: !1,
focused: !1,
suppressEdits: !1,
pasteIncoming: !1,
cutIncoming: !1,
selectingText: !1,
draggingText: !1,
highlight: new R,
keySeq: null,
specialChars: null
}, t.autofocus && !m && u.input.focus(), l && s < 11 && setTimeout(function () {
return n.display.input.reset(!0)
}, 20), function (e) {
var t = e.display;
nt(t.scroller, "mousedown", Xn(e, Qo)), nt(t.scroller, "dblclick", l && s < 11 ? Xn(e, function (t) {
if (!st(e, t)) {
var r = on(e, t);
if (r && !el(e, t) && !xr(e.display, t)) {
ht(t);
var n = e.findWordAt(r);
Fi(e.doc, n.anchor, n.head)
}
}
}) : function (t) {
return st(e, t) || ht(t)
});
S || nt(t.scroller, "contextmenu", function (t) {
return tl(e, t)
});
var r, n = {end: 0};
function i() {
t.activeTouch && (r = setTimeout(function () {
return t.activeTouch = null
}, 1e3), (n = t.activeTouch).end = +new Date)
}
function o(e, t) {
if (null == t.left) return !0;
var r = t.left - e.left, n = t.top - e.top;
return r * r + n * n > 400
}
nt(t.scroller, "touchstart", function (i) {
if (!st(e, i) && !function (e) {
if (1 != e.touches.length) return !1;
var t = e.touches[0];
return t.radiusX <= 1 && t.radiusY <= 1
}(i)) {
t.input.ensurePolled(), clearTimeout(r);
var o = +new Date;
t.activeTouch = {
start: o,
moved: !1,
prev: o - n.end <= 300 ? n : null
}, 1 == i.touches.length && (t.activeTouch.left = i.touches[0].pageX, t.activeTouch.top = i.touches[0].pageY)
}
}), nt(t.scroller, "touchmove", function () {
t.activeTouch && (t.activeTouch.moved = !0)
}), nt(t.scroller, "touchend", function (r) {
var n = t.activeTouch;
if (n && !xr(t, r) && null != n.left && !n.moved && new Date - n.start < 300) {
var l, s = e.coordsChar(t.activeTouch, "page");
l = !n.prev || o(n, n.prev) ? new hi(s, s) : !n.prev.prev || o(n, n.prev.prev) ? e.findWordAt(s) : new hi(ge(s.line, 0), Ce(e.doc, ge(s.line + 1, 0))), e.setSelection(l.anchor, l.head), e.focus(), ht(r)
}
i()
}), nt(t.scroller, "touchcancel", i), nt(t.scroller, "scroll", function () {
t.scroller.clientHeight && (wn(e, t.scroller.scrollTop), xn(e, t.scroller.scrollLeft, !0), lt(e, "scroll", e))
}), nt(t.scroller, "mousewheel", function (t) {
return kn(e, t)
}), nt(t.scroller, "DOMMouseScroll", function (t) {
return kn(e, t)
}), nt(t.wrapper, "scroll", function () {
return t.wrapper.scrollTop = t.wrapper.scrollLeft = 0
}), t.dragFunctions = {
enter: function (t) {
st(e, t) || pt(t)
}, over: function (t) {
st(e, t) || (!function (e, t) {
var r = on(e, t);
if (r) {
var n = document.createDocumentFragment();
un(e, r, n), e.display.dragCursor || (e.display.dragCursor = O("div", null, "CodeMirror-cursors CodeMirror-dragcursors"), e.display.lineSpace.insertBefore(e.display.dragCursor, e.display.cursorDiv)), N(e.display.dragCursor, n)
}
}(e, t), pt(t))
}, start: function (t) {
return function (e, t) {
if (l && (!e.state.draggingText || +new Date - wo < 100)) pt(t); else if (!st(e, t) && !xr(e.display, t) && (t.dataTransfer.setData("Text", e.getSelection()), t.dataTransfer.effectAllowed = "copyMove", t.dataTransfer.setDragImage && !f)) {
var r = O("img", null, null, "position: fixed; left: 0; top: 0;");
r.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==", h && (r.width = r.height = 1, e.display.wrapper.appendChild(r), r._top = r.offsetTop), t.dataTransfer.setDragImage(r, 0, 0), h && r.parentNode.removeChild(r)
}
}(e, t)
}, drop: Xn(e, xo), leave: function (t) {
st(e, t) || Co(e)
}
};
var a = t.input.getField();
nt(a, "keyup", function (t) {
return qo.call(e, t)
}), nt(a, "keydown", Xn(e, $o)), nt(a, "keypress", Xn(e, Zo)), nt(a, "focus", function (t) {
return dn(e, t)
}), nt(a, "blur", function (t) {
return pn(e, t)
})
}(this), To(), Rn(this), this.curOp.forceUpdate = !0, Si(this, i), t.autofocus && !m || this.hasFocus() ? setTimeout(F(dn, this), 20) : pn(this), ol) ol.hasOwnProperty(c) && ol[c](n, t[c], nl);
vn(this), t.finishInit && t.finishInit(this);
for (var d = 0; d < cl.length; ++d) cl[d](n);
Bn(this), a && t.lineWrapping && "optimizelegibility" == getComputedStyle(u.lineDiv).textRendering && (u.lineDiv.style.textRendering = "auto")
}
ul.defaults = il, ul.optionHandlers = ol;
var cl = [];
function hl(e, t, r, n) {
var i, o = e.doc;
null == r && (r = "add"), "smart" == r && (o.mode.indent ? i = Rt(e, t) : r = "prev");
var l = e.options.tabSize, s = se(o, t), a = z(s.text, null, l);
s.stateAfter && (s.stateAfter = null);
var u, c = s.text.match(/^\s*/)[0];
if (n || /\S/.test(s.text)) {
if ("smart" == r && ((u = o.mode.indent(i, s.text.slice(c.length), s.text)) == U || u > 150)) {
if (!n) return;
r = "prev"
}
} else u = 0, r = "not";
"prev" == r ? u = t > o.first ? z(se(o, t - 1).text, null, l) : 0 : "add" == r ? u = a + e.options.indentUnit : "subtract" == r ? u = a - e.options.indentUnit : "number" == typeof r && (u = a + r), u = Math.max(0, u);
var h = "", f = 0;
if (e.options.indentWithTabs) for (var d = Math.floor(u / l); d; --d) f += l, h += "\t";
if (f < u && (h += _(u - f)), h != c) return ro(o, h, ge(t, 0), ge(t, c.length), "+input"), s.stateAfter = null, !0;
for (var p = 0; p < o.sel.ranges.length; p++) {
var g = o.sel.ranges[p];
if (g.head.line == t && g.head.ch < c.length) {
var v = ge(t, c.length);
zi(o, p, new hi(v, v));
break
}
}
}
ul.defineInitHook = function (e) {
return cl.push(e)
};
var fl = null;
function dl(e) {
fl = e
}
function pl(e, t, r, n, i) {
var o = e.doc;
e.display.shift = !1, n || (n = o.sel);
var l, s = e.state.pasteIncoming || "paste" == i, a = St(t), u = null;
if (s && n.ranges.length > 1) if (fl && fl.text.join("\n") == t) {
if (n.ranges.length % fl.text.length == 0) {
u = [];
for (var c = 0; c < fl.text.length; c++) u.push(o.splitLines(fl.text[c]))
}
} else a.length == n.ranges.length && (u = q(a, function (e) {
return [e]
}));
for (var h = n.ranges.length - 1; h >= 0; h--) {
var f = n.ranges[h], d = f.from(), p = f.to();
f.empty() && (r && r > 0 ? d = ge(d.line, d.ch - r) : e.state.overwrite && !s ? p = ge(p.line, Math.min(se(o, p.line).text.length, p.ch + $(a).length)) : fl && fl.lineWise && fl.text.join("\n") == t && (d = p = ge(d.line, 0))), l = e.curOp.updateInput;
var g = {
from: d,
to: p,
text: u ? u[h % u.length] : a,
origin: i || (s ? "paste" : e.state.cutIncoming ? "cut" : "+input")
};
Zi(e.doc, g), sr(e, "inputRead", e, g)
}
t && !s && vl(e, t), Fn(e), e.curOp.updateInput = l, e.curOp.typing = !0, e.state.pasteIncoming = e.state.cutIncoming = !1
}
function gl(e, t) {
var r = e.clipboardData && e.clipboardData.getData("Text");
if (r) return e.preventDefault(), t.isReadOnly() || t.options.disableInput || jn(t, function () {
return pl(t, r, 0, null, "paste")
}), !0
}
function vl(e, t) {
if (e.options.electricChars && e.options.smartIndent) for (var r = e.doc.sel, n = r.ranges.length - 1; n >= 0; n--) {
var i = r.ranges[n];
if (!(i.head.ch > 100 || n && r.ranges[n - 1].head.line == i.head.line)) {
var o = e.getModeAt(i.head), l = !1;
if (o.electricChars) {
for (var s = 0; s < o.electricChars.length; s++) if (t.indexOf(o.electricChars.charAt(s)) > -1) {
l = hl(e, i.head.line, "smart");
break
}
} else o.electricInput && o.electricInput.test(se(e.doc, i.head.line).text.slice(0, i.head.ch)) && (l = hl(e, i.head.line, "smart"));
l && sr(e, "electricInput", e, i.head.line)
}
}
}
function ml(e) {
for (var t = [], r = [], n = 0; n < e.doc.sel.ranges.length; n++) {
var i = e.doc.sel.ranges[n].head.line, o = {anchor: ge(i, 0), head: ge(i + 1, 0)};
r.push(o), t.push(e.getRange(o.anchor, o.head))
}
return {text: t, ranges: r}
}
function yl(e, t) {
e.setAttribute("autocorrect", "off"), e.setAttribute("autocapitalize", "off"), e.setAttribute("spellcheck", !!t)
}
function bl() {
var e = O("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),
t = O("div", [e], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
return a ? e.style.width = "1000px" : e.setAttribute("wrap", "off"), g && (e.style.border = "1px solid black"), yl(e), t
}
function wl(e, t, r, n, i) {
var o = t, l = r, s = se(e, t.line);
function a(n) {
var o, l;
if (null == (o = i ? tt(e.cm, s, t, r) : Je(s, t, r))) {
if (n || (l = t.line + r) < e.first || l >= e.first + e.size || (t = new ge(l, t.ch, t.sticky), !(s = se(e, l)))) return !1;
t = et(i, e.cm, s, t.line, r)
} else t = o;
return !0
}
if ("char" == n) a(); else if ("column" == n) a(!0); else if ("word" == n || "group" == n) for (var u = null, c = "group" == n, h = e.cm && e.cm.getHelper(t, "wordChars"), f = !0; !(r < 0) || a(!f); f = !1) {
var d = s.text.charAt(t.ch) || "\n", p = te(d, h) ? "w" : c && "\n" == d ? "n" : !c || /\s/.test(d) ? null : "p";
if (!c || f || p || (p = "s"), u && u != p) {
r < 0 && (r = 1, a(), t.sticky = "after");
break
}
if (p && (u = p), r > 0 && !a(!f)) break
}
var g = Yi(e, t, o, l, !0);
return me(o, g) && (g.hitSide = !0), g
}
function xl(e, t, r, n) {
var i, o, l = e.doc, s = t.left;
if ("page" == n) {
var a = Math.min(e.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight),
u = Math.max(a - .5 * Qr(e.display), 3);
i = (r > 0 ? t.bottom : t.top) + r * u
} else "line" == n && (i = r > 0 ? t.bottom + 3 : t.top - 3);
for (; (o = _r(e, s, i)).outside;) {
if (r < 0 ? i <= 0 : i >= l.height) {
o.hitSide = !0;
break
}
i += 5 * r
}
return o
}
var Cl = function (e) {
this.cm = e, this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null, this.polling = new R, this.composing = null, this.gracePeriod = !1, this.readDOMTimeout = null
};
function Sl(e, t) {
var r = Wr(e, t.line);
if (!r || r.hidden) return null;
var n = se(e.doc, t.line), i = Nr(r, n, t.line), o = Ze(n, e.doc.direction), l = "left";
o && (l = $e(o, t.ch) % 2 ? "right" : "left");
var s = Er(i.map, t.ch, l);
return s.offset = "right" == s.collapse ? s.end : s.start, s
}
function Ll(e, t) {
return t && (e.bad = !0), e
}
function Tl(e, t, r) {
var n;
if (t == e.display.lineDiv) {
if (!(n = e.display.lineDiv.childNodes[r])) return Ll(e.clipPos(ge(e.display.viewTo - 1)), !0);
t = null, r = 0
} else for (n = t; ; n = n.parentNode) {
if (!n || n == e.display.lineDiv) return null;
if (n.parentNode && n.parentNode == e.display.lineDiv) break
}
for (var i = 0; i < e.display.view.length; i++) {
var o = e.display.view[i];
if (o.node == n) return kl(o, t, r)
}
}
function kl(e, t, r) {
var n = e.text.firstChild, i = !1;
if (!t || !A(n, t)) return Ll(ge(he(e.line), 0), !0);
if (t == n && (i = !0, t = n.childNodes[r], r = 0, !t)) {
var o = e.rest ? $(e.rest) : e.line;
return Ll(ge(he(o), o.text.length), i)
}
var l = 3 == t.nodeType ? t : null, s = t;
for (l || 1 != t.childNodes.length || 3 != t.firstChild.nodeType || (l = t.firstChild, r && (r = l.nodeValue.length)); s.parentNode != n;) s = s.parentNode;
var a = e.measure, u = a.maps;
function c(t, r, n) {
for (var i = -1; i < (u ? u.length : 0); i++) for (var o = i < 0 ? a.map : u[i], l = 0; l < o.length; l += 3) {
var s = o[l + 2];
if (s == t || s == r) {
var c = he(i < 0 ? e.line : e.rest[i]), h = o[l] + n;
return (n < 0 || s != t) && (h = o[l + (n ? 1 : 0)]), ge(c, h)
}
}
}
var h = c(l, s, r);
if (h) return Ll(h, i);
for (var f = s.nextSibling, d = l ? l.nodeValue.length - r : 0; f; f = f.nextSibling) {
if (h = c(f, f.firstChild, 0)) return Ll(ge(h.line, h.ch - d), i);
d += f.textContent.length
}
for (var p = s.previousSibling, g = r; p; p = p.previousSibling) {
if (h = c(p, p.firstChild, -1)) return Ll(ge(h.line, h.ch + g), i);
g += p.textContent.length
}
}
Cl.prototype.init = function (e) {
var t = this, r = this, n = r.cm, i = r.div = e.lineDiv;
function o(e) {
if (!st(n, e)) {
if (n.somethingSelected()) dl({
lineWise: !1,
text: n.getSelections()
}), "cut" == e.type && n.replaceSelection("", null, "cut"); else {
if (!n.options.lineWiseCopyCut) return;
var t = ml(n);
dl({lineWise: !0, text: t.text}), "cut" == e.type && n.operation(function () {
n.setSelections(t.ranges, 0, V), n.replaceSelection("", null, "cut")
})
}
if (e.clipboardData) {
e.clipboardData.clearData();
var o = fl.text.join("\n");
if (e.clipboardData.setData("Text", o), e.clipboardData.getData("Text") == o) return void e.preventDefault()
}
var l = bl(), s = l.firstChild;
n.display.lineSpace.insertBefore(l, n.display.lineSpace.firstChild), s.value = fl.text.join("\n");
var a = document.activeElement;
E(s), setTimeout(function () {
n.display.lineSpace.removeChild(l), a.focus(), a == i && r.showPrimarySelection()
}, 50)
}
}
yl(i, n.options.spellcheck), nt(i, "paste", function (e) {
st(n, e) || gl(e, n) || s <= 11 && setTimeout(Xn(n, function () {
return t.updateFromDOM()
}), 20)
}), nt(i, "compositionstart", function (e) {
t.composing = {data: e.data, done: !1}
}), nt(i, "compositionupdate", function (e) {
t.composing || (t.composing = {data: e.data, done: !1})
}), nt(i, "compositionend", function (e) {
t.composing && (e.data != t.composing.data && t.readFromDOMSoon(), t.composing.done = !0)
}), nt(i, "touchstart", function () {
return r.forceCompositionEnd()
}), nt(i, "input", function () {
t.composing || t.readFromDOMSoon()
}), nt(i, "copy", o), nt(i, "cut", o)
}, Cl.prototype.prepareSelection = function () {
var e = an(this.cm, !1);
return e.focus = this.cm.state.focused, e
}, Cl.prototype.showSelection = function (e, t) {
e && this.cm.display.view.length && ((e.focus || t) && this.showPrimarySelection(), this.showMultipleSelections(e))
}, Cl.prototype.showPrimarySelection = function () {
var e = window.getSelection(), t = this.cm.doc.sel.primary(), n = Tl(this.cm, e.anchorNode, e.anchorOffset),
i = Tl(this.cm, e.focusNode, e.focusOffset);
if (!n || n.bad || !i || i.bad || 0 != ve(we(n, i), t.from()) || 0 != ve(be(n, i), t.to())) {
var o = Sl(this.cm, t.from()), l = Sl(this.cm, t.to());
if (o || l) {
var s, a = this.cm.display.view, u = e.rangeCount && e.getRangeAt(0);
if (o) {
if (!l) {
var c = a[a.length - 1].measure, h = c.maps ? c.maps[c.maps.length - 1] : c.map;
l = {node: h[h.length - 1], offset: h[h.length - 2] - h[h.length - 3]}
}
} else o = {node: a[0].measure.map[2], offset: 0};
try {
s = T(o.node, o.offset, l.offset, l.node)
} catch (e) {
}
s && (!r && this.cm.state.focused ? (e.collapse(o.node, o.offset), s.collapsed || (e.removeAllRanges(), e.addRange(s))) : (e.removeAllRanges(), e.addRange(s)), u && null == e.anchorNode ? e.addRange(u) : r && this.startGracePeriod()), this.rememberSelection()
} else e.removeAllRanges()
}
}, Cl.prototype.startGracePeriod = function () {
var e = this;
clearTimeout(this.gracePeriod), this.gracePeriod = setTimeout(function () {
e.gracePeriod = !1, e.selectionChanged() && e.cm.operation(function () {
return e.cm.curOp.selectionChanged = !0
})
}, 20)
}, Cl.prototype.showMultipleSelections = function (e) {
N(this.cm.display.cursorDiv, e.cursors), N(this.cm.display.selectionDiv, e.selection)
}, Cl.prototype.rememberSelection = function () {
var e = window.getSelection();
this.lastAnchorNode = e.anchorNode, this.lastAnchorOffset = e.anchorOffset, this.lastFocusNode = e.focusNode, this.lastFocusOffset = e.focusOffset
}, Cl.prototype.selectionInEditor = function () {
var e = window.getSelection();
if (!e.rangeCount) return !1;
var t = e.getRangeAt(0).commonAncestorContainer;
return A(this.div, t)
}, Cl.prototype.focus = function () {
"nocursor" != this.cm.options.readOnly && (this.selectionInEditor() || this.showSelection(this.prepareSelection(), !0), this.div.focus())
}, Cl.prototype.blur = function () {
this.div.blur()
}, Cl.prototype.getField = function () {
return this.div
}, Cl.prototype.supportsTouch = function () {
return !0
}, Cl.prototype.receivedFocus = function () {
var e = this;
this.selectionInEditor() ? this.pollSelection() : jn(this.cm, function () {
return e.cm.curOp.selectionChanged = !0
}), this.polling.set(this.cm.options.pollInterval, function t() {
e.cm.state.focused && (e.pollSelection(), e.polling.set(e.cm.options.pollInterval, t))
})
}, Cl.prototype.selectionChanged = function () {
var e = window.getSelection();
return e.anchorNode != this.lastAnchorNode || e.anchorOffset != this.lastAnchorOffset || e.focusNode != this.lastFocusNode || e.focusOffset != this.lastFocusOffset
}, Cl.prototype.pollSelection = function () {
if (null == this.readDOMTimeout && !this.gracePeriod && this.selectionChanged()) {
var e = window.getSelection(), t = this.cm;
if (v && c && this.cm.options.gutters.length && function (e) {
for (var t = e; t; t = t.parentNode) if (/CodeMirror-gutter-wrapper/.test(t.className)) return !0;
return !1
}(e.anchorNode)) return this.cm.triggerOnKeyDown({
type: "keydown",
keyCode: 8,
preventDefault: Math.abs
}), this.blur(), void this.focus();
if (!this.composing) {
this.rememberSelection();
var r = Tl(t, e.anchorNode, e.anchorOffset), n = Tl(t, e.focusNode, e.focusOffset);
r && n && jn(t, function () {
Gi(t.doc, di(r, n), V), (r.bad || n.bad) && (t.curOp.selectionChanged = !0)
})
}
}
}, Cl.prototype.pollContent = function () {
null != this.readDOMTimeout && (clearTimeout(this.readDOMTimeout), this.readDOMTimeout = null);
var e, t, r, n = this.cm, i = n.display, o = n.doc.sel.primary(), l = o.from(), s = o.to();
if (0 == l.ch && l.line > n.firstLine() && (l = ge(l.line - 1, se(n.doc, l.line - 1).length)), s.ch == se(n.doc, s.line).text.length && s.line < n.lastLine() && (s = ge(s.line + 1, 0)), l.line < i.viewFrom || s.line > i.viewTo - 1) return !1;
l.line == i.viewFrom || 0 == (e = ln(n, l.line)) ? (t = he(i.view[0].line), r = i.view[0].node) : (t = he(i.view[e].line), r = i.view[e - 1].node.nextSibling);
var a, u, c = ln(n, s.line);
if (c == i.view.length - 1 ? (a = i.viewTo - 1, u = i.lineDiv.lastChild) : (a = he(i.view[c + 1].line) - 1, u = i.view[c + 1].node.previousSibling), !r) return !1;
for (var h = n.doc.splitLines(function (e, t, r, n, i) {
var o = "", l = !1, s = e.doc.lineSeparator();
function a() {
l && (o += s, l = !1)
}
function u(e) {
e && (a(), o += e)
}
function c(t) {
if (1 == t.nodeType) {
var r = t.getAttribute("cm-text");
if (null != r) return void u(r || t.textContent.replace(/\u200b/g, ""));
var o, h = t.getAttribute("cm-marker");
if (h) {
var f = e.findMarks(ge(n, 0), ge(i + 1, 0), (g = +h, function (e) {
return e.id == g
}));
return void (f.length && (o = f[0].find()) && u(ae(e.doc, o.from, o.to).join(s)))
}
if ("false" == t.getAttribute("contenteditable")) return;
var d = /^(pre|div|p)$/i.test(t.nodeName);
d && a();
for (var p = 0; p < t.childNodes.length; p++) c(t.childNodes[p]);
d && (l = !0)
} else 3 == t.nodeType && u(t.nodeValue);
var g
}
for (; c(t), t != r;) t = t.nextSibling;
return o
}(n, r, u, t, a)), f = ae(n.doc, ge(t, 0), ge(a, se(n.doc, a).text.length)); h.length > 1 && f.length > 1;) if ($(h) == $(f)) h.pop(), f.pop(), a--; else {
if (h[0] != f[0]) break;
h.shift(), f.shift(), t++
}
for (var d = 0, p = 0, g = h[0], v = f[0], m = Math.min(g.length, v.length); d < m && g.charCodeAt(d) == v.charCodeAt(d);) ++d;
for (var y = $(h), b = $(f), w = Math.min(y.length - (1 == h.length ? d : 0), b.length - (1 == f.length ? d : 0)); p < w && y.charCodeAt(y.length - p - 1) == b.charCodeAt(b.length - p - 1);) ++p;
if (1 == h.length && 1 == f.length && t == l.line) for (; d && d > l.ch && y.charCodeAt(y.length - p - 1) == b.charCodeAt(b.length - p - 1);) d--, p++;
h[h.length - 1] = y.slice(0, y.length - p).replace(/^\u200b+/, ""), h[0] = h[0].slice(d).replace(/\u200b+$/, "");
var x = ge(t, d), C = ge(a, f.length ? $(f).length - p : 0);
return h.length > 1 || h[0] || ve(x, C) ? (ro(n.doc, h, x, C, "+input"), !0) : void 0
}, Cl.prototype.ensurePolled = function () {
this.forceCompositionEnd()
}, Cl.prototype.reset = function () {
this.forceCompositionEnd()
}, Cl.prototype.forceCompositionEnd = function () {
this.composing && (clearTimeout(this.readDOMTimeout), this.composing = null, this.updateFromDOM(), this.div.blur(), this.div.focus())
}, Cl.prototype.readFromDOMSoon = function () {
var e = this;
null == this.readDOMTimeout && (this.readDOMTimeout = setTimeout(function () {
if (e.readDOMTimeout = null, e.composing) {
if (!e.composing.done) return;
e.composing = null
}
e.updateFromDOM()
}, 80))
}, Cl.prototype.updateFromDOM = function () {
var e = this;
!this.cm.isReadOnly() && this.pollContent() || jn(this.cm, function () {
return $n(e.cm)
})
}, Cl.prototype.setUneditable = function (e) {
e.contentEditable = "false"
}, Cl.prototype.onKeyPress = function (e) {
0 != e.charCode && (e.preventDefault(), this.cm.isReadOnly() || Xn(this.cm, pl)(this.cm, String.fromCharCode(null == e.charCode ? e.keyCode : e.charCode), 0))
}, Cl.prototype.readOnlyChanged = function (e) {
this.div.contentEditable = String("nocursor" != e)
}, Cl.prototype.onContextMenu = function () {
}, Cl.prototype.resetPosition = function () {
}, Cl.prototype.needsContentAttribute = !0;
var Ml = function (e) {
this.cm = e, this.prevInput = "", this.pollingFast = !1, this.polling = new R, this.inaccurateSelection = !1, this.hasSelection = !1, this.composing = null
};
Ml.prototype.init = function (e) {
var t = this, r = this, n = this.cm, i = this.wrapper = bl(), o = this.textarea = i.firstChild;
function a(e) {
if (!st(n, e)) {
if (n.somethingSelected()) dl({
lineWise: !1,
text: n.getSelections()
}), r.inaccurateSelection && (r.prevInput = "", r.inaccurateSelection = !1, o.value = fl.text.join("\n"), E(o)); else {
if (!n.options.lineWiseCopyCut) return;
var t = ml(n);
dl({
lineWise: !0,
text: t.text
}), "cut" == e.type ? n.setSelections(t.ranges, null, V) : (r.prevInput = "", o.value = t.text.join("\n"), E(o))
}
"cut" == e.type && (n.state.cutIncoming = !0)
}
}
e.wrapper.insertBefore(i, e.wrapper.firstChild), g && (o.style.width = "0px"), nt(o, "input", function () {
l && s >= 9 && t.hasSelection && (t.hasSelection = null), r.poll()
}), nt(o, "paste", function (e) {
st(n, e) || gl(e, n) || (n.state.pasteIncoming = !0, r.fastPoll())
}), nt(o, "cut", a), nt(o, "copy", a), nt(e.scroller, "paste", function (t) {
xr(e, t) || st(n, t) || (n.state.pasteIncoming = !0, r.focus())
}), nt(e.lineSpace, "selectstart", function (t) {
xr(e, t) || ht(t)
}), nt(o, "compositionstart", function () {
var e = n.getCursor("from");
r.composing && r.composing.range.clear(), r.composing = {
start: e,
range: n.markText(e, n.getCursor("to"), {className: "CodeMirror-composing"})
}
}), nt(o, "compositionend", function () {
r.composing && (r.poll(), r.composing.range.clear(), r.composing = null)
})
}, Ml.prototype.prepareSelection = function () {
var e = this.cm, t = e.display, r = e.doc, n = an(e);
if (e.options.moveInputWithCursor) {
var i = jr(e, r.sel.primary().head, "div"), o = t.wrapper.getBoundingClientRect(),
l = t.lineDiv.getBoundingClientRect();
n.teTop = Math.max(0, Math.min(t.wrapper.clientHeight - 10, i.top + l.top - o.top)), n.teLeft = Math.max(0, Math.min(t.wrapper.clientWidth - 10, i.left + l.left - o.left))
}
return n
}, Ml.prototype.showSelection = function (e) {
var t = this.cm.display;
N(t.cursorDiv, e.cursors), N(t.selectionDiv, e.selection), null != e.teTop && (this.wrapper.style.top = e.teTop + "px", this.wrapper.style.left = e.teLeft + "px")
}, Ml.prototype.reset = function (e) {
if (!this.contextMenuPending) {
var t, r, n = this.cm, i = n.doc;
if (n.somethingSelected()) {
this.prevInput = "";
var o = i.sel.primary(),
a = (t = Tt && (o.to().line - o.from().line > 100 || (r = n.getSelection()).length > 1e3)) ? "-" : r || n.getSelection();
this.textarea.value = a, n.state.focused && E(this.textarea), l && s >= 9 && (this.hasSelection = a)
} else e || (this.prevInput = this.textarea.value = "", l && s >= 9 && (this.hasSelection = null));
this.inaccurateSelection = t
}
}, Ml.prototype.getField = function () {
return this.textarea
}, Ml.prototype.supportsTouch = function () {
return !1
}, Ml.prototype.focus = function () {
if ("nocursor" != this.cm.options.readOnly && (!m || D() != this.textarea)) try {
this.textarea.focus()
} catch (e) {
}
}, Ml.prototype.blur = function () {
this.textarea.blur()
}, Ml.prototype.resetPosition = function () {
this.wrapper.style.top = this.wrapper.style.left = 0
}, Ml.prototype.receivedFocus = function () {
this.slowPoll()
}, Ml.prototype.slowPoll = function () {
var e = this;
this.pollingFast || this.polling.set(this.cm.options.pollInterval, function () {
e.poll(), e.cm.state.focused && e.slowPoll()
})
}, Ml.prototype.fastPoll = function () {
var e = !1, t = this;
t.pollingFast = !0, t.polling.set(20, function r() {
t.poll() || e ? (t.pollingFast = !1, t.slowPoll()) : (e = !0, t.polling.set(60, r))
})
}, Ml.prototype.poll = function () {
var e = this, t = this.cm, r = this.textarea, n = this.prevInput;
if (this.contextMenuPending || !t.state.focused || Lt(r) && !n && !this.composing || t.isReadOnly() || t.options.disableInput || t.state.keySeq) return !1;
var i = r.value;
if (i == n && !t.somethingSelected()) return !1;
if (l && s >= 9 && this.hasSelection === i || y && /[\uf700-\uf7ff]/.test(i)) return t.display.input.reset(), !1;
if (t.doc.sel == t.display.selForContextMenu) {
var o = i.charCodeAt(0);
if (8203 != o || n || (n = ""), 8666 == o) return this.reset(), this.cm.execCommand("undo")
}
for (var a = 0, u = Math.min(n.length, i.length); a < u && n.charCodeAt(a) == i.charCodeAt(a);) ++a;
return jn(t, function () {
pl(t, i.slice(a), n.length - a, null, e.composing ? "*compose" : null), i.length > 1e3 || i.indexOf("\n") > -1 ? r.value = e.prevInput = "" : e.prevInput = i, e.composing && (e.composing.range.clear(), e.composing.range = t.markText(e.composing.start, t.getCursor("to"), {className: "CodeMirror-composing"}))
}), !0
}, Ml.prototype.ensurePolled = function () {
this.pollingFast && this.poll() && (this.pollingFast = !1)
}, Ml.prototype.onKeyPress = function () {
l && s >= 9 && (this.hasSelection = null), this.fastPoll()
}, Ml.prototype.onContextMenu = function (e) {
var t = this, r = t.cm, n = r.display, i = t.textarea, o = on(r, e), u = n.scroller.scrollTop;
if (o && !h) {
r.options.resetSelectionOnContextMenu && -1 == r.doc.sel.contains(o) && Xn(r, Gi)(r.doc, di(o), V);
var c = i.style.cssText, f = t.wrapper.style.cssText;
t.wrapper.style.cssText = "position: absolute";
var d, p = t.wrapper.getBoundingClientRect();
if (i.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - p.top - 5) + "px; left: " + (e.clientX - p.left - 5) + "px;\n z-index: 1000; background: " + (l ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);", a && (d = window.scrollY), n.input.focus(), a && window.scrollTo(null, d), n.input.reset(), r.somethingSelected() || (i.value = t.prevInput = " "), t.contextMenuPending = !0, n.selForContextMenu = r.doc.sel, clearTimeout(n.detectingSelectAll), l && s >= 9 && v(), S) {
pt(e);
var g = function () {
ot(window, "mouseup", g), setTimeout(m, 20)
};
nt(window, "mouseup", g)
} else setTimeout(m, 50)
}
function v() {
if (null != i.selectionStart) {
var e = r.somethingSelected(), o = "" + (e ? i.value : "");
i.value = "⇚", i.value = o, t.prevInput = e ? "" : "", i.selectionStart = 1, i.selectionEnd = o.length, n.selForContextMenu = r.doc.sel
}
}
function m() {
if (t.contextMenuPending = !1, t.wrapper.style.cssText = f, i.style.cssText = c, l && s < 9 && n.scrollbars.setScrollTop(n.scroller.scrollTop = u), null != i.selectionStart) {
(!l || l && s < 9) && v();
var e = 0, o = function () {
n.selForContextMenu == r.doc.sel && 0 == i.selectionStart && i.selectionEnd > 0 && "" == t.prevInput ? Xn(r, $i)(r) : e++ < 10 ? n.detectingSelectAll = setTimeout(o, 500) : (n.selForContextMenu = null, n.input.reset())
};
n.detectingSelectAll = setTimeout(o, 200)
}
}
}, Ml.prototype.readOnlyChanged = function (e) {
e || this.reset()
}, Ml.prototype.setUneditable = function () {
}, Ml.prototype.needsContentAttribute = !1, function (e) {
var t = e.optionHandlers;
function r(r, n, i, o) {
e.defaults[r] = n, i && (t[r] = o ? function (e, t, r) {
r != nl && i(e, t, r)
} : i)
}
e.defineOption = r, e.Init = nl, r("value", "", function (e, t) {
return e.setValue(t)
}, !0), r("mode", null, function (e, t) {
e.doc.modeOption = t, yi(e)
}, !0), r("indentUnit", 2, yi, !0), r("indentWithTabs", !1), r("smartIndent", !0), r("tabSize", 4, function (e) {
bi(e), Rr(e), $n(e)
}, !0), r("lineSeparator", null, function (e, t) {
if (e.doc.lineSep = t, t) {
var r = [], n = e.doc.first;
e.doc.iter(function (e) {
for (var i = 0; ;) {
var o = e.text.indexOf(t, i);
if (-1 == o) break;
i = o + t.length, r.push(ge(n, o))
}
n++
});
for (var i = r.length - 1; i >= 0; i--) ro(e.doc, t, r[i], ge(r[i].line, r[i].ch + t.length))
}
}), r("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (e, t, r) {
e.state.specialChars = new RegExp(t.source + (t.test("\t") ? "" : "|\t"), "g"), r != nl && e.refresh()
}), r("specialCharPlaceholder", Qt, function (e) {
return e.refresh()
}, !0), r("electricChars", !0), r("inputStyle", m ? "contenteditable" : "textarea", function () {
throw new Error("inputStyle can not (yet) be changed in a running editor")
}, !0), r("spellcheck", !1, function (e, t) {
return e.getInputField().spellcheck = t
}, !0), r("rtlMoveVisually", !w), r("wholeLineUpdateBefore", !0), r("theme", "default", function (e) {
rl(e), ll(e)
}, !0), r("keyMap", "default", function (e, t, r) {
var n = Io(t), i = r != nl && Io(r);
i && i.detach && i.detach(e, n), n.attach && n.attach(e, i || null)
}), r("extraKeys", null), r("lineWrapping", !1, al, !0), r("gutters", [], function (e) {
ui(e.options), ll(e)
}, !0), r("fixedGutter", !0, function (e, t) {
e.display.gutters.style.left = t ? tn(e.display) + "px" : "0", e.refresh()
}, !0), r("coverGutterNextToScrollbar", !1, function (e) {
return Wn(e)
}, !0), r("scrollbarStyle", "native", function (e) {
Hn(e), Wn(e), e.display.scrollbars.setScrollTop(e.doc.scrollTop), e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)
}, !0), r("lineNumbers", !1, function (e) {
ui(e.options), ll(e)
}, !0), r("firstLineNumber", 1, ll, !0), r("lineNumberFormatter", function (e) {
return e
}, ll, !0), r("showCursorWhenSelecting", !1, sn, !0), r("resetSelectionOnContextMenu", !0), r("lineWiseCopyCut", !0), r("readOnly", !1, function (e, t) {
"nocursor" == t ? (pn(e), e.display.input.blur(), e.display.disabled = !0) : e.display.disabled = !1, e.display.input.readOnlyChanged(t)
}), r("disableInput", !1, function (e, t) {
t || e.display.input.reset()
}, !0), r("dragDrop", !0, sl), r("allowDropFileTypes", null), r("cursorBlinkRate", 530), r("cursorScrollMargin", 0), r("cursorHeight", 1, sn, !0), r("singleCursorHeightPerLine", !0, sn, !0), r("workTime", 100), r("workDelay", 100), r("flattenSpans", !0, bi, !0), r("addModeClass", !1, bi, !0), r("pollInterval", 100), r("undoDepth", 200, function (e, t) {
return e.doc.history.undoDepth = t
}), r("historyEventDelay", 1250), r("viewportMargin", 10, function (e) {
return e.refresh()
}, !0), r("maxHighlightLength", 1e4, bi, !0), r("moveInputWithCursor", !0, function (e, t) {
t || e.display.input.resetPosition()
}), r("tabindex", null, function (e, t) {
return e.display.input.getField().tabIndex = t || ""
}), r("autofocus", null), r("direction", "ltr", function (e, t) {
return e.doc.setDirection(t)
}, !0)
}(ul), function (e) {
var t = e.optionHandlers, r = e.helpers = {};
e.prototype = {
constructor: e, focus: function () {
window.focus(), this.display.input.focus()
}, setOption: function (e, r) {
var n = this.options, i = n[e];
n[e] == r && "mode" != e || (n[e] = r, t.hasOwnProperty(e) && Xn(this, t[e])(this, r, i), lt(this, "optionChange", this, e))
}, getOption: function (e) {
return this.options[e]
}, getDoc: function () {
return this.doc
}, addKeyMap: function (e, t) {
this.state.keyMaps[t ? "push" : "unshift"](Io(e))
}, removeKeyMap: function (e) {
for (var t = this.state.keyMaps, r = 0; r < t.length; ++r) if (t[r] == e || t[r].name == e) return t.splice(r, 1), !0
}, addOverlay: Yn(function (t, r) {
var n = t.token ? t : e.getMode(this.options, t);
if (n.startState) throw new Error("Overlays may not be stateful.");
!function (e, t, r) {
for (var n = 0, i = r(t); n < e.length && r(e[n]) <= i;) n++;
e.splice(n, 0, t)
}(this.state.overlays, {
mode: n,
modeSpec: t,
opaque: r && r.opaque,
priority: r && r.priority || 0
}, function (e) {
return e.priority
}), this.state.modeGen++, $n(this)
}), removeOverlay: Yn(function (e) {
for (var t = this.state.overlays, r = 0; r < t.length; ++r) {
var n = t[r].modeSpec;
if (n == e || "string" == typeof e && n.name == e) return t.splice(r, 1), this.state.modeGen++, void $n(this)
}
}), indentLine: Yn(function (e, t, r) {
"string" != typeof t && "number" != typeof t && (t = null == t ? this.options.smartIndent ? "smart" : "prev" : t ? "add" : "subtract"), de(this.doc, e) && hl(this, e, t, r)
}), indentSelection: Yn(function (e) {
for (var t = this.doc.sel.ranges, r = -1, n = 0; n < t.length; n++) {
var i = t[n];
if (i.empty()) i.head.line > r && (hl(this, i.head.line, e, !0), r = i.head.line, n == this.doc.sel.primIndex && Fn(this)); else {
var o = i.from(), l = i.to(), s = Math.max(r, o.line);
r = Math.min(this.lastLine(), l.line - (l.ch ? 0 : 1)) + 1;
for (var a = s; a < r; ++a) hl(this, a, e);
var u = this.doc.sel.ranges;
0 == o.ch && t.length == u.length && u[n].from().ch > 0 && zi(this.doc, n, new hi(o, u[n].to()), V)
}
}
}), getTokenAt: function (e, t) {
return Vt(this, e, t)
}, getLineTokens: function (e, t) {
return Vt(this, ge(e), t, !0)
}, getTokenTypeAt: function (e) {
e = Ce(this.doc, e);
var t, r = zt(this, se(this.doc, e.line)), n = 0, i = (r.length - 1) / 2, o = e.ch;
if (0 == o) t = r[2]; else for (; ;) {
var l = n + i >> 1;
if ((l ? r[2 * l - 1] : 0) >= o) i = l; else {
if (!(r[2 * l + 1] < o)) {
t = r[2 * l + 2];
break
}
n = l + 1
}
}
var s = t ? t.indexOf("overlay ") : -1;
return s < 0 ? t : 0 == s ? null : t.slice(0, s - 1)
}, getModeAt: function (t) {
var r = this.doc.mode;
return r.innerMode ? e.innerMode(r, this.getTokenAt(t).state).mode : r
}, getHelper: function (e, t) {
return this.getHelpers(e, t)[0]
}, getHelpers: function (e, t) {
var n = [];
if (!r.hasOwnProperty(t)) return n;
var i = r[t], o = this.getModeAt(e);
if ("string" == typeof o[t]) i[o[t]] && n.push(i[o[t]]); else if (o[t]) for (var l = 0; l < o[t].length; l++) {
var s = i[o[t][l]];
s && n.push(s)
} else o.helperType && i[o.helperType] ? n.push(i[o.helperType]) : i[o.name] && n.push(i[o.name]);
for (var a = 0; a < i._global.length; a++) {
var u = i._global[a];
u.pred(o, this) && -1 == B(n, u.val) && n.push(u.val)
}
return n
}, getStateAfter: function (e, t) {
var r = this.doc;
return Rt(this, (e = xe(r, null == e ? r.first + r.size - 1 : e)) + 1, t)
}, cursorCoords: function (e, t) {
var r = this.doc.sel.primary();
return jr(this, null == e ? r.head : "object" == typeof e ? Ce(this.doc, e) : e ? r.from() : r.to(), t || "page")
}, charCoords: function (e, t) {
return Kr(this, Ce(this.doc, e), t || "page")
}, coordsChar: function (e, t) {
return _r(this, (e = Vr(this, e, t || "page")).left, e.top)
}, lineAtHeight: function (e, t) {
return e = Vr(this, {top: e, left: 0}, t || "page").top, fe(this.doc, e + this.display.viewOffset)
}, heightAtLine: function (e, t, r) {
var n, i = !1;
if ("number" == typeof e) {
var o = this.doc.first + this.doc.size - 1;
e < this.doc.first ? e = this.doc.first : e > o && (e = o, i = !0), n = se(this.doc, e)
} else n = e;
return Ur(this, n, {top: 0, left: 0}, t || "page", r || i).top + (i ? this.doc.height - je(n) : 0)
}, defaultTextHeight: function () {
return Qr(this.display)
}, defaultCharWidth: function () {
return Jr(this.display)
}, getViewport: function () {
return {from: this.display.viewFrom, to: this.display.viewTo}
}, addWidget: function (e, t, r, n, i) {
var o, l, s, a = this.display, u = (e = jr(this, Ce(this.doc, e))).bottom, c = e.left;
if (t.style.position = "absolute", t.setAttribute("cm-ignore-events", "true"), this.display.input.setUneditable(t), a.sizer.appendChild(t), "over" == n) u = e.top; else if ("above" == n || "near" == n) {
var h = Math.max(a.wrapper.clientHeight, this.doc.height),
f = Math.max(a.sizer.clientWidth, a.lineSpace.clientWidth);
("above" == n || e.bottom + t.offsetHeight > h) && e.top > t.offsetHeight ? u = e.top - t.offsetHeight : e.bottom + t.offsetHeight <= h && (u = e.bottom), c + t.offsetWidth > f && (c = f - t.offsetWidth)
}
t.style.top = u + "px", t.style.left = t.style.right = "", "right" == i ? (c = a.sizer.clientWidth - t.offsetWidth, t.style.right = "0px") : ("left" == i ? c = 0 : "middle" == i && (c = (a.sizer.clientWidth - t.offsetWidth) / 2), t.style.left = c + "px"), r && (o = this, l = {
left: c,
top: u,
right: c + t.offsetWidth,
bottom: u + t.offsetHeight
}, null != (s = Pn(o, l)).scrollTop && wn(o, s.scrollTop), null != s.scrollLeft && xn(o, s.scrollLeft))
}, triggerOnKeyDown: Yn($o), triggerOnKeyPress: Yn(Zo), triggerOnKeyUp: qo, execCommand: function (e) {
if (Ro.hasOwnProperty(e)) return Ro[e].call(null, this)
}, triggerElectric: Yn(function (e) {
vl(this, e)
}), findPosH: function (e, t, r, n) {
var i = 1;
t < 0 && (i = -1, t = -t);
for (var o = Ce(this.doc, e), l = 0; l < t && !(o = wl(this.doc, o, i, r, n)).hitSide; ++l) ;
return o
}, moveH: Yn(function (e, t) {
var r = this;
this.extendSelectionsBy(function (n) {
return r.display.shift || r.doc.extend || n.empty() ? wl(r.doc, n.head, e, t, r.options.rtlMoveVisually) : e < 0 ? n.from() : n.to()
}, j)
}), deleteH: Yn(function (e, t) {
var r = this.doc.sel, n = this.doc;
r.somethingSelected() ? n.replaceSelection("", null, "+delete") : zo(this, function (r) {
var i = wl(n, r.head, e, t, !1);
return e < 0 ? {from: i, to: r.head} : {from: r.head, to: i}
})
}), findPosV: function (e, t, r, n) {
var i = 1, o = n;
t < 0 && (i = -1, t = -t);
for (var l = Ce(this.doc, e), s = 0; s < t; ++s) {
var a = jr(this, l, "div");
if (null == o ? o = a.left : a.left = o, (l = xl(this, a, i, r)).hitSide) break
}
return l
}, moveV: Yn(function (e, t) {
var r = this, n = this.doc, i = [], o = !this.display.shift && !n.extend && n.sel.somethingSelected();
if (n.extendSelectionsBy(function (l) {
if (o) return e < 0 ? l.from() : l.to();
var s = jr(r, l.head, "div");
null != l.goalColumn && (s.left = l.goalColumn), i.push(s.left);
var a = xl(r, s, e, t);
return "page" == t && l == n.sel.primary() && En(r, null, Kr(r, a, "div").top - s.top), a
}, j), i.length) for (var l = 0; l < n.sel.ranges.length; l++) n.sel.ranges[l].goalColumn = i[l]
}), findWordAt: function (e) {
var t = se(this.doc, e.line).text, r = e.ch, n = e.ch;
if (t) {
var i = this.getHelper(e, "wordChars");
"before" != e.sticky && n != t.length || !r ? ++n : --r;
for (var o = t.charAt(r), l = te(o, i) ? function (e) {
return te(e, i)
} : /\s/.test(o) ? function (e) {
return /\s/.test(e)
} : function (e) {
return !/\s/.test(e) && !te(e)
}; r > 0 && l(t.charAt(r - 1));) --r;
for (; n < t.length && l(t.charAt(n));) ++n
}
return new hi(ge(e.line, r), ge(e.line, n))
}, toggleOverwrite: function (e) {
null != e && e == this.state.overwrite || ((this.state.overwrite = !this.state.overwrite) ? H(this.display.cursorDiv, "CodeMirror-overwrite") : k(this.display.cursorDiv, "CodeMirror-overwrite"), lt(this, "overwriteToggle", this, this.state.overwrite))
}, hasFocus: function () {
return this.display.input.getField() == D()
}, isReadOnly: function () {
return !(!this.options.readOnly && !this.doc.cantEdit)
}, scrollTo: Yn(function (e, t) {
null == e && null == t || In(this), null != e && (this.curOp.scrollLeft = e), null != t && (this.curOp.scrollTop = t)
}), getScrollInfo: function () {
var e = this.display.scroller;
return {
left: e.scrollLeft,
top: e.scrollTop,
height: e.scrollHeight - Tr(this) - this.display.barHeight,
width: e.scrollWidth - Tr(this) - this.display.barWidth,
clientHeight: Mr(this),
clientWidth: kr(this)
}
}, scrollIntoView: Yn(function (e, t) {
if (null == e ? (e = {
from: this.doc.sel.primary().head,
to: null
}, null == t && (t = this.options.cursorScrollMargin)) : "number" == typeof e ? e = {
from: ge(e, 0),
to: null
} : null == e.from && (e = {
from: e,
to: null
}), e.to || (e.to = e.from), e.margin = t || 0, null != e.from.line) In(this), this.curOp.scrollToPos = e; else {
var r = Pn(this, {
left: Math.min(e.from.left, e.to.left),
top: Math.min(e.from.top, e.to.top) - e.margin,
right: Math.max(e.from.right, e.to.right),
bottom: Math.max(e.from.bottom, e.to.bottom) + e.margin
});
this.scrollTo(r.scrollLeft, r.scrollTop)
}
}), setSize: Yn(function (e, t) {
var r = this, n = function (e) {
return "number" == typeof e || /^\d+$/.test(String(e)) ? e + "px" : e
};
null != e && (this.display.wrapper.style.width = n(e)), null != t && (this.display.wrapper.style.height = n(t)), this.options.lineWrapping && zr(this);
var i = this.display.viewFrom;
this.doc.iter(i, this.display.viewTo, function (e) {
if (e.widgets) for (var t = 0; t < e.widgets.length; t++) if (e.widgets[t].noHScroll) {
qn(r, i, "widget");
break
}
++i
}), this.curOp.forceUpdate = !0, lt(this, "refresh", this)
}), operation: function (e) {
return jn(this, e)
}, refresh: Yn(function () {
var e = this.display.cachedTextHeight;
$n(this), this.curOp.forceUpdate = !0, Rr(this), this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop), li(this), (null == e || Math.abs(e - Qr(this.display)) > .5) && nn(this), lt(this, "refresh", this)
}), swapDoc: Yn(function (e) {
var t = this.doc;
return t.cm = null, Si(this, e), Rr(this), this.display.input.reset(), this.scrollTo(e.scrollLeft, e.scrollTop), this.curOp.forceScroll = !0, sr(this, "swapDoc", this, t), t
}), 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
}
}, ct(e), e.registerHelper = function (t, n, i) {
r.hasOwnProperty(t) || (r[t] = e[t] = {_global: []}), r[t][n] = i
}, e.registerGlobalHelper = function (t, n, i, o) {
e.registerHelper(t, n, o), r[t]._global.push({pred: i, val: o})
}
}(ul);
var Nl = "iter insert remove copy getEditor constructor".split(" ");
for (var Ol in bo.prototype) bo.prototype.hasOwnProperty(Ol) && B(Nl, Ol) < 0 && (ul.prototype[Ol] = function (e) {
return function () {
return e.apply(this.doc, arguments)
}
}(bo.prototype[Ol]));
return ct(bo), ul.inputStyles = {textarea: Ml, contenteditable: Cl}, ul.defineMode = function (e) {
ul.defaults.mode || "null" == e || (ul.defaults.mode = e), function (e, t) {
arguments.length > 2 && (t.dependencies = Array.prototype.slice.call(arguments, 2)), Mt[e] = t
}.apply(this, arguments)
}, ul.defineMIME = function (e, t) {
Nt[e] = t
}, ul.defineMode("null", function () {
return {
token: function (e) {
return e.skipToEnd()
}
}
}), ul.defineMIME("text/plain", "null"), ul.defineExtension = function (e, t) {
ul.prototype[e] = t
}, ul.defineDocExtension = function (e, t) {
bo.prototype[e] = t
}, ul.fromTextArea = function (e, t) {
if ((t = t ? I(t) : {}).value = e.value, !t.tabindex && e.tabIndex && (t.tabindex = e.tabIndex), !t.placeholder && e.placeholder && (t.placeholder = e.placeholder), null == t.autofocus) {
var r = D();
t.autofocus = r == e || null != e.getAttribute("autofocus") && r == document.body
}
function n() {
e.value = s.getValue()
}
var i;
if (e.form && (nt(e.form, "submit", n), !t.leaveSubmitMethodAlone)) {
var o = e.form;
i = o.submit;
try {
var l = o.submit = function () {
n(), o.submit = i, o.submit(), o.submit = l
}
} catch (e) {
}
}
t.finishInit = function (t) {
t.save = n, t.getTextArea = function () {
return e
}, t.toTextArea = function () {
t.toTextArea = isNaN, n(), e.parentNode.removeChild(t.getWrapperElement()), e.style.display = "", e.form && (ot(e.form, "submit", n), "function" == typeof e.form.submit && (e.form.submit = i))
}
}, e.style.display = "none";
var s = ul(function (t) {
return e.parentNode.insertBefore(t, e.nextSibling)
}, t);
return s
}, function (e) {
e.off = ot, e.on = nt, e.wheelEventPixels = Tn, e.Doc = bo, e.splitLines = St, e.countColumn = z, e.findColumn = X, e.isWordChar = ee, e.Pass = U, e.signal = lt, e.Line = Xt, e.changeEnd = pi, e.scrollbarModel = Dn, e.Pos = ge, e.cmpPos = ve, e.modes = Mt, e.mimeModes = Nt, e.resolveMode = Ot, e.getMode = Wt, e.modeExtensions = At, e.extendMode = Dt, e.copyState = Ht, e.startState = Et, e.innerMode = Pt, e.commands = Ro, e.keyMap = Ao, e.keyName = Fo, e.isModifierKey = Eo, e.lookupKey = Po, e.normalizeKeyMap = Ho, e.StringStream = Ft, e.SharedTextMarker = go, e.TextMarker = fo, e.LineWidget = uo, e.e_preventDefault = ht, e.e_stopPropagation = ft, e.e_stop = pt, e.addClass = H, e.contains = A, e.rmClass = k, e.keyNames = Mo
}(ul), ul.version = "5.25.0", ul
});
(function () {
function diff_match_patch() {
this.Diff_Timeout = 1;
this.Diff_EditCost = 4;
this.Match_Threshold = 0.5;
this.Match_Distance = 1E3;
this.Patch_DeleteThreshold = 0.5;
this.Patch_Margin = 4;
this.Match_MaxBits = 32
}
diff_match_patch.prototype.diff_main = function (a, b, c, d) {
"undefined" == typeof d && (d = 0 >= this.Diff_Timeout ? Number.MAX_VALUE : (new Date).getTime() + 1E3 * this.Diff_Timeout);
if (null == a || null == b) throw Error("Null input. (diff_main)");
if (a == b) return a ? [[0, a]] : [];
"undefined" == typeof c && (c = !0);
var e = c, f = this.diff_commonPrefix(a, b);
c = a.substring(0, f);
a = a.substring(f);
b = b.substring(f);
var f = this.diff_commonSuffix(a, b), g = a.substring(a.length - f);
a = a.substring(0, a.length - f);
b = b.substring(0, b.length - f);
a = this.diff_compute_(a,
b, e, d);
c && a.unshift([0, c]);
g && a.push([0, g]);
this.diff_cleanupMerge(a);
return a
};
diff_match_patch.prototype.diff_compute_ = function (a, b, c, d) {
if (!a) return [[1, b]];
if (!b) return [[-1, a]];
var e = a.length > b.length ? a : b, f = a.length > b.length ? b : a, g = e.indexOf(f);
return -1 != g ? (c = [[1, e.substring(0, g)], [0, f], [1, e.substring(g + f.length)]], a.length > b.length && (c[0][0] = c[2][0] = -1), c) : 1 == f.length ? [[-1, a], [1, b]] : (e = this.diff_halfMatch_(a, b)) ? (f = e[0], a = e[1], g = e[2], b = e[3], e = e[4], f = this.diff_main(f, g, c, d), c = this.diff_main(a, b, c, d), f.concat([[0, e]], c)) : c && 100 < a.length && 100 < b.length ? this.diff_lineMode_(a, b,
d) : this.diff_bisect_(a, b, d)
};
diff_match_patch.prototype.diff_lineMode_ = function (a, b, c) {
var d = this.diff_linesToChars_(a, b);
a = d.chars1;
b = d.chars2;
d = d.lineArray;
a = this.diff_main(a, b, !1, c);
this.diff_charsToLines_(a, d);
this.diff_cleanupSemantic(a);
a.push([0, ""]);
for (var e = d = b = 0, f = "", g = ""; b < a.length;) {
switch (a[b][0]) {
case 1:
e++;
g += a[b][1];
break;
case -1:
d++;
f += a[b][1];
break;
case 0:
if (1 <= d && 1 <= e) {
a.splice(b - d - e, d + e);
b = b - d - e;
d = this.diff_main(f, g, !1, c);
for (e = d.length - 1; 0 <= e; e--) a.splice(b, 0, d[e]);
b += d.length
}
d = e = 0;
g = f = ""
}
b++
}
a.pop();
return a
};
diff_match_patch.prototype.diff_bisect_ = function (a, b, c) {
for (var d = a.length, e = b.length, f = Math.ceil((d + e) / 2), g = f, h = 2 * f, j = Array(h), i = Array(h), k = 0; k < h; k++) j[k] = -1, i[k] = -1;
j[g + 1] = 0;
i[g + 1] = 0;
for (var k = d - e, q = 0 != k % 2, r = 0, t = 0, p = 0, w = 0, v = 0; v < f && !((new Date).getTime() > c); v++) {
for (var n = -v + r; n <= v - t; n += 2) {
var l = g + n, m;
m = n == -v || n != v && j[l - 1] < j[l + 1] ? j[l + 1] : j[l - 1] + 1;
for (var s = m - n; m < d && s < e && a.charAt(m) == b.charAt(s);) m++, s++;
j[l] = m;
if (m > d) t += 2; else if (s > e) r += 2; else if (q && (l = g + k - n, 0 <= l && l < h && -1 != i[l])) {
var u = d - i[l];
if (m >=
u) return this.diff_bisectSplit_(a, b, m, s, c)
}
}
for (n = -v + p; n <= v - w; n += 2) {
l = g + n;
u = n == -v || n != v && i[l - 1] < i[l + 1] ? i[l + 1] : i[l - 1] + 1;
for (m = u - n; u < d && m < e && a.charAt(d - u - 1) == b.charAt(e - m - 1);) u++, m++;
i[l] = u;
if (u > d) w += 2; else if (m > e) p += 2; else if (!q && (l = g + k - n, 0 <= l && (l < h && -1 != j[l]) && (m = j[l], s = g + m - l, u = d - u, m >= u))) return this.diff_bisectSplit_(a, b, m, s, c)
}
}
return [[-1, a], [1, b]]
};
diff_match_patch.prototype.diff_bisectSplit_ = function (a, b, c, d, e) {
var f = a.substring(0, c), g = b.substring(0, d);
a = a.substring(c);
b = b.substring(d);
f = this.diff_main(f, g, !1, e);
e = this.diff_main(a, b, !1, e);
return f.concat(e)
};
diff_match_patch.prototype.diff_linesToChars_ = function (a, b) {
function c(a) {
for (var b = "", c = 0, f = -1, g = d.length; f < a.length - 1;) {
f = a.indexOf("\n", c);
-1 == f && (f = a.length - 1);
var r = a.substring(c, f + 1), c = f + 1;
(e.hasOwnProperty ? e.hasOwnProperty(r) : void 0 !== e[r]) ? b += String.fromCharCode(e[r]) : (b += String.fromCharCode(g), e[r] = g, d[g++] = r)
}
return b
}
var d = [], e = {};
d[0] = "";
var f = c(a), g = c(b);
return {chars1: f, chars2: g, lineArray: d}
};
diff_match_patch.prototype.diff_charsToLines_ = function (a, b) {
for (var c = 0; c < a.length; c++) {
for (var d = a[c][1], e = [], f = 0; f < d.length; f++) e[f] = b[d.charCodeAt(f)];
a[c][1] = e.join("")
}
};
diff_match_patch.prototype.diff_commonPrefix = function (a, b) {
if (!a || !b || a.charAt(0) != b.charAt(0)) return 0;
for (var c = 0, d = Math.min(a.length, b.length), e = d, f = 0; c < e;) a.substring(f, e) == b.substring(f, e) ? f = c = e : d = e, e = Math.floor((d - c) / 2 + c);
return e
};
diff_match_patch.prototype.diff_commonSuffix = function (a, b) {
if (!a || !b || a.charAt(a.length - 1) != b.charAt(b.length - 1)) return 0;
for (var c = 0, d = Math.min(a.length, b.length), e = d, f = 0; c < e;) a.substring(a.length - e, a.length - f) == b.substring(b.length - e, b.length - f) ? f = c = e : d = e, e = Math.floor((d - c) / 2 + c);
return e
};
diff_match_patch.prototype.diff_commonOverlap_ = function (a, b) {
var c = a.length, d = b.length;
if (0 == c || 0 == d) return 0;
c > d ? a = a.substring(c - d) : c < d && (b = b.substring(0, c));
c = Math.min(c, d);
if (a == b) return c;
for (var d = 0, e = 1; ;) {
var f = a.substring(c - e), f = b.indexOf(f);
if (-1 == f) return d;
e += f;
if (0 == f || a.substring(c - e) == b.substring(0, e)) d = e, e++
}
};
diff_match_patch.prototype.diff_halfMatch_ = function (a, b) {
function c(a, b, c) {
for (var d = a.substring(c, c + Math.floor(a.length / 4)), e = -1, g = "", h, j, n, l; -1 != (e = b.indexOf(d, e + 1));) {
var m = f.diff_commonPrefix(a.substring(c), b.substring(e)),
s = f.diff_commonSuffix(a.substring(0, c), b.substring(0, e));
g.length < s + m && (g = b.substring(e - s, e) + b.substring(e, e + m), h = a.substring(0, c - s), j = a.substring(c + m), n = b.substring(0, e - s), l = b.substring(e + m))
}
return 2 * g.length >= a.length ? [h, j, n, l, g] : null
}
if (0 >= this.Diff_Timeout) return null;
var d = a.length > b.length ? a : b, e = a.length > b.length ? b : a;
if (4 > d.length || 2 * e.length < d.length) return null;
var f = this, g = c(d, e, Math.ceil(d.length / 4)), d = c(d, e, Math.ceil(d.length / 2)), h;
if (!g && !d) return null;
h = d ? g ? g[4].length > d[4].length ? g : d : d : g;
var j;
a.length > b.length ? (g = h[0], d = h[1], e = h[2], j = h[3]) : (e = h[0], j = h[1], g = h[2], d = h[3]);
h = h[4];
return [g, d, e, j, h]
};
diff_match_patch.prototype.diff_cleanupSemantic = function (a) {
for (var b = !1, c = [], d = 0, e = null, f = 0, g = 0, h = 0, j = 0, i = 0; f < a.length;) 0 == a[f][0] ? (c[d++] = f, g = j, h = i, i = j = 0, e = a[f][1]) : (1 == a[f][0] ? j += a[f][1].length : i += a[f][1].length, e && (e.length <= Math.max(g, h) && e.length <= Math.max(j, i)) && (a.splice(c[d - 1], 0, [-1, e]), a[c[d - 1] + 1][0] = 1, d--, d--, f = 0 < d ? c[d - 1] : -1, i = j = h = g = 0, e = null, b = !0)), f++;
b && this.diff_cleanupMerge(a);
this.diff_cleanupSemanticLossless(a);
for (f = 1; f < a.length;) {
if (-1 == a[f - 1][0] && 1 == a[f][0]) {
b = a[f - 1][1];
c = a[f][1];
d = this.diff_commonOverlap_(b, c);
e = this.diff_commonOverlap_(c, b);
if (d >= e) {
if (d >= b.length / 2 || d >= c.length / 2) a.splice(f, 0, [0, c.substring(0, d)]), a[f - 1][1] = b.substring(0, b.length - d), a[f + 1][1] = c.substring(d), f++
} else if (e >= b.length / 2 || e >= c.length / 2) a.splice(f, 0, [0, b.substring(0, e)]), a[f - 1][0] = 1, a[f - 1][1] = c.substring(0, c.length - e), a[f + 1][0] = -1, a[f + 1][1] = b.substring(e), f++;
f++
}
f++
}
};
diff_match_patch.prototype.diff_cleanupSemanticLossless = function (a) {
function b(a, b) {
if (!a || !b) return 6;
var c = a.charAt(a.length - 1), d = b.charAt(0), e = c.match(diff_match_patch.nonAlphaNumericRegex_),
f = d.match(diff_match_patch.nonAlphaNumericRegex_), g = e && c.match(diff_match_patch.whitespaceRegex_),
h = f && d.match(diff_match_patch.whitespaceRegex_), c = g && c.match(diff_match_patch.linebreakRegex_),
d = h && d.match(diff_match_patch.linebreakRegex_), i = c && a.match(diff_match_patch.blanklineEndRegex_),
j = d && b.match(diff_match_patch.blanklineStartRegex_);
return i || j ? 5 : c || d ? 4 : e && !g && h ? 3 : g || h ? 2 : e || f ? 1 : 0
}
for (var c = 1; c < a.length - 1;) {
if (0 == a[c - 1][0] && 0 == a[c + 1][0]) {
var d = a[c - 1][1], e = a[c][1], f = a[c + 1][1], g = this.diff_commonSuffix(d, e);
if (g) var h = e.substring(e.length - g), d = d.substring(0, d.length - g),
e = h + e.substring(0, e.length - g), f = h + f;
for (var g = d, h = e, j = f, i = b(d, e) + b(e, f); e.charAt(0) === f.charAt(0);) {
var d = d + e.charAt(0), e = e.substring(1) + f.charAt(0), f = f.substring(1), k = b(d, e) + b(e, f);
k >= i && (i = k, g = d, h = e, j = f)
}
a[c - 1][1] != g && (g ? a[c - 1][1] = g : (a.splice(c - 1, 1), c--), a[c][1] =
h, j ? a[c + 1][1] = j : (a.splice(c + 1, 1), c--))
}
c++
}
};
diff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;
diff_match_patch.whitespaceRegex_ = /\s/;
diff_match_patch.linebreakRegex_ = /[\r\n]/;
diff_match_patch.blanklineEndRegex_ = /\n\r?\n$/;
diff_match_patch.blanklineStartRegex_ = /^\r?\n\r?\n/;
diff_match_patch.prototype.diff_cleanupEfficiency = function (a) {
for (var b = !1, c = [], d = 0, e = null, f = 0, g = !1, h = !1, j = !1, i = !1; f < a.length;) {
if (0 == a[f][0]) a[f][1].length < this.Diff_EditCost && (j || i) ? (c[d++] = f, g = j, h = i, e = a[f][1]) : (d = 0, e = null), j = i = !1; else if (-1 == a[f][0] ? i = !0 : j = !0, e && (g && h && j && i || e.length < this.Diff_EditCost / 2 && 3 == g + h + j + i)) a.splice(c[d - 1], 0, [-1, e]), a[c[d - 1] + 1][0] = 1, d--, e = null, g && h ? (j = i = !0, d = 0) : (d--, f = 0 < d ? c[d - 1] : -1, j = i = !1), b = !0;
f++
}
b && this.diff_cleanupMerge(a)
};
diff_match_patch.prototype.diff_cleanupMerge = function (a) {
a.push([0, ""]);
for (var b = 0, c = 0, d = 0, e = "", f = "", g; b < a.length;) switch (a[b][0]) {
case 1:
d++;
f += a[b][1];
b++;
break;
case -1:
c++;
e += a[b][1];
b++;
break;
case 0:
1 < c + d ? (0 !== c && 0 !== d && (g = this.diff_commonPrefix(f, e), 0 !== g && (0 < b - c - d && 0 == a[b - c - d - 1][0] ? a[b - c - d - 1][1] += f.substring(0, g) : (a.splice(0, 0, [0, f.substring(0, g)]), b++), f = f.substring(g), e = e.substring(g)), g = this.diff_commonSuffix(f, e), 0 !== g && (a[b][1] = f.substring(f.length - g) + a[b][1], f = f.substring(0, f.length -
g), e = e.substring(0, e.length - g))), 0 === c ? a.splice(b - d, c + d, [1, f]) : 0 === d ? a.splice(b - c, c + d, [-1, e]) : a.splice(b - c - d, c + d, [-1, e], [1, f]), b = b - c - d + (c ? 1 : 0) + (d ? 1 : 0) + 1) : 0 !== b && 0 == a[b - 1][0] ? (a[b - 1][1] += a[b][1], a.splice(b, 1)) : b++, c = d = 0, f = e = ""
}
"" === a[a.length - 1][1] && a.pop();
c = !1;
for (b = 1; b < a.length - 1;) 0 == a[b - 1][0] && 0 == a[b + 1][0] && (a[b][1].substring(a[b][1].length - a[b - 1][1].length) == a[b - 1][1] ? (a[b][1] = a[b - 1][1] + a[b][1].substring(0, a[b][1].length - a[b - 1][1].length), a[b + 1][1] = a[b - 1][1] + a[b + 1][1], a.splice(b - 1, 1), c = !0) : a[b][1].substring(0,
a[b + 1][1].length) == a[b + 1][1] && (a[b - 1][1] += a[b + 1][1], a[b][1] = a[b][1].substring(a[b + 1][1].length) + a[b + 1][1], a.splice(b + 1, 1), c = !0)), b++;
c && this.diff_cleanupMerge(a)
};
diff_match_patch.prototype.diff_xIndex = function (a, b) {
var c = 0, d = 0, e = 0, f = 0, g;
for (g = 0; g < a.length; g++) {
1 !== a[g][0] && (c += a[g][1].length);
-1 !== a[g][0] && (d += a[g][1].length);
if (c > b) break;
e = c;
f = d
}
return a.length != g && -1 === a[g][0] ? f : f + (b - e)
};
diff_match_patch.prototype.diff_prettyHtml = function (a) {
for (var b = [], c = /&/g, d = /</g, e = />/g, f = /\n/g, g = 0; g < a.length; g++) {
var h = a[g][0], j = a[g][1],
j = j.replace(c, "&amp;").replace(d, "&lt;").replace(e, "&gt;").replace(f, "&para;<br>");
switch (h) {
case 1:
b[g] = '<ins style="background:#e6ffe6;">' + j + "</ins>";
break;
case -1:
b[g] = '<del style="background:#ffe6e6;">' + j + "</del>";
break;
case 0:
b[g] = "<span>" + j + "</span>"
}
}
return b.join("")
};
diff_match_patch.prototype.diff_text1 = function (a) {
for (var b = [], c = 0; c < a.length; c++) 1 !== a[c][0] && (b[c] = a[c][1]);
return b.join("")
};
diff_match_patch.prototype.diff_text2 = function (a) {
for (var b = [], c = 0; c < a.length; c++) -1 !== a[c][0] && (b[c] = a[c][1]);
return b.join("")
};
diff_match_patch.prototype.diff_levenshtein = function (a) {
for (var b = 0, c = 0, d = 0, e = 0; e < a.length; e++) {
var f = a[e][0], g = a[e][1];
switch (f) {
case 1:
c += g.length;
break;
case -1:
d += g.length;
break;
case 0:
b += Math.max(c, d), d = c = 0
}
}
return b += Math.max(c, d)
};
diff_match_patch.prototype.diff_toDelta = function (a) {
for (var b = [], c = 0; c < a.length; c++) switch (a[c][0]) {
case 1:
b[c] = "+" + encodeURI(a[c][1]);
break;
case -1:
b[c] = "-" + a[c][1].length;
break;
case 0:
b[c] = "=" + a[c][1].length
}
return b.join("\t").replace(/%20/g, " ")
};
diff_match_patch.prototype.diff_fromDelta = function (a, b) {
for (var c = [], d = 0, e = 0, f = b.split(/\t/g), g = 0; g < f.length; g++) {
var h = f[g].substring(1);
switch (f[g].charAt(0)) {
case "+":
try {
c[d++] = [1, decodeURI(h)]
} catch (j) {
throw Error("Illegal escape in diff_fromDelta: " + h);
}
break;
case "-":
case "=":
var i = parseInt(h, 10);
if (isNaN(i) || 0 > i) throw Error("Invalid number in diff_fromDelta: " + h);
h = a.substring(e, e += i);
"=" == f[g].charAt(0) ? c[d++] = [0, h] : c[d++] = [-1, h];
break;
default:
if (f[g]) throw Error("Invalid diff operation in diff_fromDelta: " +
f[g]);
}
}
if (e != a.length) throw Error("Delta length (" + e + ") does not equal source text length (" + a.length + ").");
return c
};
diff_match_patch.prototype.match_main = function (a, b, c) {
if (null == a || null == b || null == c) throw Error("Null input. (match_main)");
c = Math.max(0, Math.min(c, a.length));
return a == b ? 0 : a.length ? a.substring(c, c + b.length) == b ? c : this.match_bitap_(a, b, c) : -1
};
diff_match_patch.prototype.match_bitap_ = function (a, b, c) {
function d(a, d) {
var e = a / b.length, g = Math.abs(c - d);
return !f.Match_Distance ? g ? 1 : e : e + g / f.Match_Distance
}
if (b.length > this.Match_MaxBits) throw Error("Pattern too long for this browser.");
var e = this.match_alphabet_(b), f = this, g = this.Match_Threshold, h = a.indexOf(b, c);
-1 != h && (g = Math.min(d(0, h), g), h = a.lastIndexOf(b, c + b.length), -1 != h && (g = Math.min(d(0, h), g)));
for (var j = 1 << b.length - 1, h = -1, i, k, q = b.length + a.length, r, t = 0; t < b.length; t++) {
i = 0;
for (k = q; i < k;) d(t, c +
k) <= g ? i = k : q = k, k = Math.floor((q - i) / 2 + i);
q = k;
i = Math.max(1, c - k + 1);
var p = Math.min(c + k, a.length) + b.length;
k = Array(p + 2);
for (k[p + 1] = (1 << t) - 1; p >= i; p--) {
var w = e[a.charAt(p - 1)];
k[p] = 0 === t ? (k[p + 1] << 1 | 1) & w : (k[p + 1] << 1 | 1) & w | ((r[p + 1] | r[p]) << 1 | 1) | r[p + 1];
if (k[p] & j && (w = d(t, p - 1), w <= g)) if (g = w, h = p - 1, h > c) i = Math.max(1, 2 * c - h); else break
}
if (d(t + 1, c) > g) break;
r = k
}
return h
};
diff_match_patch.prototype.match_alphabet_ = function (a) {
for (var b = {}, c = 0; c < a.length; c++) b[a.charAt(c)] = 0;
for (c = 0; c < a.length; c++) b[a.charAt(c)] |= 1 << a.length - c - 1;
return b
};
diff_match_patch.prototype.patch_addContext_ = function (a, b) {
if (0 != b.length) {
for (var c = b.substring(a.start2, a.start2 + a.length1), d = 0; b.indexOf(c) != b.lastIndexOf(c) && c.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin;) d += this.Patch_Margin, c = b.substring(a.start2 - d, a.start2 + a.length1 + d);
d += this.Patch_Margin;
(c = b.substring(a.start2 - d, a.start2)) && a.diffs.unshift([0, c]);
(d = b.substring(a.start2 + a.length1, a.start2 + a.length1 + d)) && a.diffs.push([0, d]);
a.start1 -= c.length;
a.start2 -= c.length;
a.length1 +=
c.length + d.length;
a.length2 += c.length + d.length
}
};
diff_match_patch.prototype.patch_make = function (a, b, c) {
var d;
if ("string" == typeof a && "string" == typeof b && "undefined" == typeof c) d = a, b = this.diff_main(d, b, !0), 2 < b.length && (this.diff_cleanupSemantic(b), this.diff_cleanupEfficiency(b)); else if (a && "object" == typeof a && "undefined" == typeof b && "undefined" == typeof c) b = a, d = this.diff_text1(b); else if ("string" == typeof a && b && "object" == typeof b && "undefined" == typeof c) d = a; else if ("string" == typeof a && "string" == typeof b && c && "object" == typeof c) d = a, b = c; else throw Error("Unknown call format to patch_make.");
if (0 === b.length) return [];
c = [];
a = new diff_match_patch.patch_obj;
for (var e = 0, f = 0, g = 0, h = d, j = 0; j < b.length; j++) {
var i = b[j][0], k = b[j][1];
!e && 0 !== i && (a.start1 = f, a.start2 = g);
switch (i) {
case 1:
a.diffs[e++] = b[j];
a.length2 += k.length;
d = d.substring(0, g) + k + d.substring(g);
break;
case -1:
a.length1 += k.length;
a.diffs[e++] = b[j];
d = d.substring(0, g) + d.substring(g + k.length);
break;
case 0:
k.length <= 2 * this.Patch_Margin && e && b.length != j + 1 ? (a.diffs[e++] = b[j], a.length1 += k.length, a.length2 += k.length) : k.length >= 2 * this.Patch_Margin &&
e && (this.patch_addContext_(a, h), c.push(a), a = new diff_match_patch.patch_obj, e = 0, h = d, f = g)
}
1 !== i && (f += k.length);
-1 !== i && (g += k.length)
}
e && (this.patch_addContext_(a, h), c.push(a));
return c
};
diff_match_patch.prototype.patch_deepCopy = function (a) {
for (var b = [], c = 0; c < a.length; c++) {
var d = a[c], e = new diff_match_patch.patch_obj;
e.diffs = [];
for (var f = 0; f < d.diffs.length; f++) e.diffs[f] = d.diffs[f].slice();
e.start1 = d.start1;
e.start2 = d.start2;
e.length1 = d.length1;
e.length2 = d.length2;
b[c] = e
}
return b
};
diff_match_patch.prototype.patch_apply = function (a, b) {
if (0 == a.length) return [b, []];
a = this.patch_deepCopy(a);
var c = this.patch_addPadding(a);
b = c + b + c;
this.patch_splitMax(a);
for (var d = 0, e = [], f = 0; f < a.length; f++) {
var g = a[f].start2 + d, h = this.diff_text1(a[f].diffs), j, i = -1;
if (h.length > this.Match_MaxBits) {
if (j = this.match_main(b, h.substring(0, this.Match_MaxBits), g), -1 != j && (i = this.match_main(b, h.substring(h.length - this.Match_MaxBits), g + h.length - this.Match_MaxBits), -1 == i || j >= i)) j = -1
} else j = this.match_main(b, h, g);
if (-1 == j) e[f] = !1, d -= a[f].length2 - a[f].length1; else if (e[f] = !0, d = j - g, g = -1 == i ? b.substring(j, j + h.length) : b.substring(j, i + this.Match_MaxBits), h == g) b = b.substring(0, j) + this.diff_text2(a[f].diffs) + b.substring(j + h.length); else if (g = this.diff_main(h, g, !1), h.length > this.Match_MaxBits && this.diff_levenshtein(g) / h.length > this.Patch_DeleteThreshold) e[f] = !1; else {
this.diff_cleanupSemanticLossless(g);
for (var h = 0, k, i = 0; i < a[f].diffs.length; i++) {
var q = a[f].diffs[i];
0 !== q[0] && (k = this.diff_xIndex(g, h));
1 === q[0] ? b = b.substring(0,
j + k) + q[1] + b.substring(j + k) : -1 === q[0] && (b = b.substring(0, j + k) + b.substring(j + this.diff_xIndex(g, h + q[1].length)));
-1 !== q[0] && (h += q[1].length)
}
}
}
b = b.substring(c.length, b.length - c.length);
return [b, e]
};
diff_match_patch.prototype.patch_addPadding = function (a) {
for (var b = this.Patch_Margin, c = "", d = 1; d <= b; d++) c += String.fromCharCode(d);
for (d = 0; d < a.length; d++) a[d].start1 += b, a[d].start2 += b;
var d = a[0], e = d.diffs;
if (0 == e.length || 0 != e[0][0]) e.unshift([0, c]), d.start1 -= b, d.start2 -= b, d.length1 += b, d.length2 += b; else if (b > e[0][1].length) {
var f = b - e[0][1].length;
e[0][1] = c.substring(e[0][1].length) + e[0][1];
d.start1 -= f;
d.start2 -= f;
d.length1 += f;
d.length2 += f
}
d = a[a.length - 1];
e = d.diffs;
0 == e.length || 0 != e[e.length - 1][0] ? (e.push([0,
c]), d.length1 += b, d.length2 += b) : b > e[e.length - 1][1].length && (f = b - e[e.length - 1][1].length, e[e.length - 1][1] += c.substring(0, f), d.length1 += f, d.length2 += f);
return c
};
diff_match_patch.prototype.patch_splitMax = function (a) {
for (var b = this.Match_MaxBits, c = 0; c < a.length; c++) if (!(a[c].length1 <= b)) {
var d = a[c];
a.splice(c--, 1);
for (var e = d.start1, f = d.start2, g = ""; 0 !== d.diffs.length;) {
var h = new diff_match_patch.patch_obj, j = !0;
h.start1 = e - g.length;
h.start2 = f - g.length;
"" !== g && (h.length1 = h.length2 = g.length, h.diffs.push([0, g]));
for (; 0 !== d.diffs.length && h.length1 < b - this.Patch_Margin;) {
var g = d.diffs[0][0], i = d.diffs[0][1];
1 === g ? (h.length2 += i.length, f += i.length, h.diffs.push(d.diffs.shift()),
j = !1) : -1 === g && 1 == h.diffs.length && 0 == h.diffs[0][0] && i.length > 2 * b ? (h.length1 += i.length, e += i.length, j = !1, h.diffs.push([g, i]), d.diffs.shift()) : (i = i.substring(0, b - h.length1 - this.Patch_Margin), h.length1 += i.length, e += i.length, 0 === g ? (h.length2 += i.length, f += i.length) : j = !1, h.diffs.push([g, i]), i == d.diffs[0][1] ? d.diffs.shift() : d.diffs[0][1] = d.diffs[0][1].substring(i.length))
}
g = this.diff_text2(h.diffs);
g = g.substring(g.length - this.Patch_Margin);
i = this.diff_text1(d.diffs).substring(0, this.Patch_Margin);
"" !== i &&
(h.length1 += i.length, h.length2 += i.length, 0 !== h.diffs.length && 0 === h.diffs[h.diffs.length - 1][0] ? h.diffs[h.diffs.length - 1][1] += i : h.diffs.push([0, i]));
j || a.splice(++c, 0, h)
}
}
};
diff_match_patch.prototype.patch_toText = function (a) {
for (var b = [], c = 0; c < a.length; c++) b[c] = a[c];
return b.join("")
};
diff_match_patch.prototype.patch_fromText = function (a) {
var b = [];
if (!a) return b;
a = a.split("\n");
for (var c = 0, d = /^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/; c < a.length;) {
var e = a[c].match(d);
if (!e) throw Error("Invalid patch string: " + a[c]);
var f = new diff_match_patch.patch_obj;
b.push(f);
f.start1 = parseInt(e[1], 10);
"" === e[2] ? (f.start1--, f.length1 = 1) : "0" == e[2] ? f.length1 = 0 : (f.start1--, f.length1 = parseInt(e[2], 10));
f.start2 = parseInt(e[3], 10);
"" === e[4] ? (f.start2--, f.length2 = 1) : "0" == e[4] ? f.length2 = 0 : (f.start2--, f.length2 =
parseInt(e[4], 10));
for (c++; c < a.length;) {
e = a[c].charAt(0);
try {
var g = decodeURI(a[c].substring(1))
} catch (h) {
throw Error("Illegal escape in patch_fromText: " + g);
}
if ("-" == e) f.diffs.push([-1, g]); else if ("+" == e) f.diffs.push([1, g]); else if (" " == e) f.diffs.push([0, g]); else if ("@" == e) break; else if ("" !== e) throw Error('Invalid patch mode "' + e + '" in: ' + g);
c++
}
}
return b
};
diff_match_patch.patch_obj = function () {
this.diffs = [];
this.start2 = this.start1 = null;
this.length2 = this.length1 = 0
};
diff_match_patch.patch_obj.prototype.toString = function () {
var a, b;
a = 0 === this.length1 ? this.start1 + ",0" : 1 == this.length1 ? this.start1 + 1 : this.start1 + 1 + "," + this.length1;
b = 0 === this.length2 ? this.start2 + ",0" : 1 == this.length2 ? this.start2 + 1 : this.start2 + 1 + "," + this.length2;
a = ["@@ -" + a + " +" + b + " @@\n"];
var c;
for (b = 0; b < this.diffs.length; b++) {
switch (this.diffs[b][0]) {
case 1:
c = "+";
break;
case -1:
c = "-";
break;
case 0:
c = " "
}
a[b + 1] = c + encodeURI(this.diffs[b][1]) + "\n"
}
return a.join("").replace(/%20/g, " ")
};
this.diff_match_patch = diff_match_patch;
this.DIFF_DELETE = -1;
this.DIFF_INSERT = 1;
this.DIFF_EQUAL = 0;
})();
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// merge.js
// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL
!function (e) {
"object" == typeof exports && "object" == typeof module ? e(require("../../lib/codemirror")) : "function" == typeof define && define.amd ? define(["../../lib/codemirror", "diff_match_patch"], e) : e(CodeMirror)
}(function (e) {
"use strict";
var t, i, r, n = e.Pos, o = "http://www.w3.org/2000/svg", l = 2, a = !0, s = null, c = !1;
function h(e, t) {
this.mv = e, this.type = t, this.classes = "left" == t ? {
chunk: "CodeMirror-merge-l-chunk",
start: "CodeMirror-merge-l-chunk-start",
end: "CodeMirror-merge-l-chunk-end",
insert: "CodeMirror-merge-l-inserted",
del: "CodeMirror-merge-l-deleted",
connect: "CodeMirror-merge-l-connect"
} : {
chunk: "CodeMirror-merge-r-chunk",
start: "CodeMirror-merge-r-chunk-start",
end: "CodeMirror-merge-r-chunk-end",
insert: "CodeMirror-merge-r-inserted",
del: "CodeMirror-merge-r-deleted",
connect: "CodeMirror-merge-r-connect"
}
}
function f(t) {
t.diffOutOfDate && (t.diff = I(t.orig.getValue(), t.edit.getValue(), t.mv.options.ignoreWhitespace), t.chunks = N(t.diff), t.diffOutOfDate = !1, e.signal(t.edit, "updateDiff", t.diff))
}
e.k_init = function (n, o, h) {
t = h, i = "", r = o;
var f = function () {
if (null == t) return;
var o = document.getElementById(n);
return o.innerHTML = "", f = e.MergeView(o, {
value: t,
origLeft: 3 != l || c || s ? null : i,
orig: r,
lineNumbers: !0,
mode: "text/html",
theme: "blackboard",
matchBrackets: !0,
highlightDifferences: a,
connect: s,
collapseIdentical: c,
readOnly: "nocursor",
revertButtons: !0
}), console.log(f.edit), f
}();
return f
}, h.prototype = {
constructor: h, init: function (t, i, r) {
this.edit = this.mv.edit, (this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this), this.orig = e(t, Q({
value: i,
readOnly: !this.mv.options.allowEditingOriginals
}, Q(r))), "align" == this.mv.options.connect && (this.edit.state.trackAlignable || (this.edit.state.trackAlignable = new X(this.edit)), this.orig.state.trackAlignable = new X(this.orig)), this.orig.state.diffViews = [this];
var n = r.chunkClassLocation || "background";
"[object Array]" != Object.prototype.toString.call(n) && (n = [n]), this.classes.classLocation = n, this.diff = I(x(i), x(r.value), this.mv.options.ignoreWhitespace), this.chunks = N(this.diff), this.diffOutOfDate = this.dealigned = !1, this.needsScrollSync = null, this.showDifferences = !1 !== r.showDifferences
}, registerEvents: function (t) {
this.forceUpdate = function (t) {
var i, r = {from: 0, to: 0, marked: []}, n = {from: 0, to: 0, marked: []}, o = !1;
function l(e) {
g = !0, o = !1, "full" == e && (t.svg && U(t.svg), t.copyButtons && U(t.copyButtons), p(t.edit, r.marked, t.classes), p(t.orig, n.marked, t.classes), r.from = r.to = n.from = n.to = 0), f(t), t.showDifferences && (k(t.edit, t.diff, r, DIFF_INSERT, t.classes), k(t.orig, t.diff, n, DIFF_DELETE, t.classes)), "align" == t.mv.options.connect && S(t), w(t), null != t.needsScrollSync && d(t, t.needsScrollSync), g = !1
}
function a(e) {
g || (t.dealigned = !0, s(e))
}
function s(e) {
g || o || (clearTimeout(i), !0 === e && (o = !0), i = setTimeout(l, !0 === e ? 20 : 250))
}
function c(e, i) {
t.diffOutOfDate || (t.diffOutOfDate = !0, r.from = r.to = n.from = n.to = 0), a(i.text.length - 1 != i.to.line - i.from.line)
}
function h() {
t.diffOutOfDate = !0, t.dealigned = !0, l("full")
}
t.edit.on("change", c), t.orig.on("change", c), t.edit.on("swapDoc", h), t.orig.on("swapDoc", h), "align" == t.mv.options.connect && (e.on(t.edit.state.trackAlignable, "realign", a), e.on(t.orig.state.trackAlignable, "realign", a));
return t.edit.on("viewportChange", function () {
s(!1)
}), t.orig.on("viewportChange", function () {
s(!1)
}), l(), l
}(this), m(this, !0, !1), function (e, t) {
e.edit.on("scroll", function () {
d(e, !0) && w(e)
}), e.orig.on("scroll", function () {
d(e, !1) && w(e), t && d(t, !0) && w(t)
})
}(this, t)
}, setShowDifferences: function (e) {
(e = !1 !== e) != this.showDifferences && (this.showDifferences = e, this.forceUpdate("full"))
}
};
var g = !1;
function d(e, t) {
if (e.diffOutOfDate) return e.lockScroll && null == e.needsScrollSync && (e.needsScrollSync = t), !1;
if (e.needsScrollSync = null, !e.lockScroll) return !0;
var i, r, n = +new Date;
if (t ? (i = e.edit, r = e.orig) : (i = e.orig, r = e.edit), i.state.scrollSetBy == e && (i.state.scrollSetAt || 0) + 250 > n) return !1;
var o = i.getScrollInfo();
if ("align" == e.mv.options.connect) v = o.top; else {
var l, a, s = .5 * o.clientHeight, c = o.top + s, h = i.lineAtHeight(c, "local"), f = function (e, t, i) {
for (var r, n, o, l, a = 0; a < e.length; a++) {
var s = e[a], c = i ? s.editFrom : s.origFrom, h = i ? s.editTo : s.origTo;
null == n && (c > t ? (n = s.editFrom, l = s.origFrom) : h > t && (n = s.editTo, l = s.origTo)), h <= t ? (r = s.editTo, o = s.origTo) : c <= t && (r = s.editFrom, o = s.origFrom)
}
return {edit: {before: r, after: n}, orig: {before: o, after: l}}
}(e.chunks, h, t), g = u(i, t ? f.edit : f.orig), d = u(r, t ? f.orig : f.edit),
m = (c - g.top) / (g.bot - g.top), v = d.top - s + m * (d.bot - d.top);
if (v > o.top && (a = o.top / s) < 1) v = v * a + o.top * (1 - a); else if ((l = o.height - o.clientHeight - o.top) < s) {
var p = r.getScrollInfo();
p.height - p.clientHeight - v > l && (a = l / s) < 1 && (v = v * a + (p.height - p.clientHeight - l) * (1 - a))
}
}
return r.scrollTo(o.left, v), r.state.scrollSetAt = n, r.state.scrollSetBy = e, !0
}
function u(e, t) {
var i = t.after;
return null == i && (i = e.lastLine() + 1), {
top: e.heightAtLine(t.before || 0, "local"),
bot: e.heightAtLine(i, "local")
}
}
function m(e, t, i) {
e.lockScroll = t, t && 0 != i && d(e, DIFF_INSERT) && w(e)
}
function v(e, t, i) {
for (var r = i.classLocation, n = 0; n < r.length; n++) e.removeLineClass(t, r[n], i.chunk), e.removeLineClass(t, r[n], i.start), e.removeLineClass(t, r[n], i.end)
}
function p(t, i, r) {
for (var n = 0; n < i.length; ++n) {
var o = i[n];
o instanceof e.TextMarker ? o.clear() : o.parent && v(t, o, r)
}
i.length = 0
}
function k(e, t, i, r, n) {
var o = e.getViewport();
e.operation(function () {
i.from == i.to || o.from - i.to > 20 || i.from - o.to > 20 ? (p(e, i.marked, n), b(e, t, r, i.marked, o.from, o.to, n), i.from = o.from, i.to = o.to) : (o.from < i.from && (b(e, t, r, i.marked, o.from, i.from, n), i.from = o.from), o.to > i.to && (b(e, t, r, i.marked, i.to, o.to, n), i.to = o.to))
})
}
function C(e, t, i, r, n, o) {
for (var l = i.classLocation, a = e.getLineHandle(t), s = 0; s < l.length; s++) r && e.addLineClass(a, l[s], i.chunk), n && e.addLineClass(a, l[s], i.start), o && e.addLineClass(a, l[s], i.end);
return a
}
function b(e, t, i, r, o, l, a) {
var s = n(0, 0), c = n(o, 0), h = e.clipPos(n(l - 1)), f = i == DIFF_DELETE ? a.del : a.insert;
function g(t, i) {
for (var n = Math.max(o, t), s = Math.min(l, i), c = n; c < s; ++c) r.push(C(e, c, a, !0, c == t, c == i - 1));
t == i && n == i && s == i && (n ? r.push(C(e, n - 1, a, !1, !1, !0)) : r.push(C(e, n, a, !1, !0, !1)))
}
for (var d = 0, u = !1, m = 0; m < t.length; ++m) {
var v = t[m], p = v[0], k = v[1];
if (p == DIFF_EQUAL) {
var b = s.line + (V(t, m) ? 0 : 1);
q(s, k);
var w = s.line + (R(t, m) ? 1 : 0);
w > b && (u && (g(d, b), u = !1), d = w)
} else if (u = !0, p == i) {
var T = q(s, k, !0), y = Z(c, s), F = Y(h, T);
$(y, F) || r.push(e.markText(y, F, {className: f})), s = T
}
}
u && g(d, s.line + 1)
}
function w(e) {
if (e.showDifferences) {
if (e.svg) {
U(e.svg);
var t = e.gap.offsetWidth;
z(e.svg, "width", t, "height", e.gap.offsetHeight)
}
e.copyButtons && U(e.copyButtons);
for (var i = e.edit.getViewport(), r = e.orig.getViewport(), n = e.mv.wrap.getBoundingClientRect().top, o = n - e.edit.getScrollerElement().getBoundingClientRect().top + e.edit.getScrollInfo().top, l = n - e.orig.getScrollerElement().getBoundingClientRect().top + e.orig.getScrollInfo().top, a = 0; a < e.chunks.length; a++) {
var s = e.chunks[a];
s.editFrom <= i.to && s.editTo >= i.from && s.origFrom <= r.to && s.origTo >= r.from && D(e, s, l, o, t)
}
}
}
function T(e, t) {
for (var i = 0, r = 0, n = 0; n < t.length; n++) {
var o = t[n];
if (o.editTo > e && o.editFrom <= e) return null;
if (o.editFrom > e) break;
i = o.editTo, r = o.origTo
}
return r + (e - i)
}
function y(e, t, i) {
for (var r = e.state.trackAlignable, n = e.firstLine(), o = 0, l = [], a = 0; ; a++) {
for (var s = t[a], c = s ? i ? s.origFrom : s.editFrom : 1e9; o < r.alignable.length; o += 2) {
var h = r.alignable[o] + 1;
if (!(h <= n)) {
if (!(h <= c)) break;
l.push(h)
}
}
if (!s) break;
l.push(n = i ? s.origTo : s.editTo)
}
return l
}
function F(e, t, i, r) {
var n = 0, o = 0, l = 0, a = 0;
e:for (; ; n++) {
var s = e[n], c = t[o];
if (!s && null == c) break;
for (var h = s ? s[0] : 1e9, f = null == c ? 1e9 : c; l < i.length;) {
var g = i[l];
if (g.origFrom <= f && g.origTo > f) {
o++, n--;
continue e
}
if (g.editTo > h) {
if (g.editFrom <= h) continue e;
break
}
a += g.origTo - g.origFrom - (g.editTo - g.editFrom), l++
}
if (h == f - a) s[r] = f, o++; else if (h < f - a) s[r] = h + a; else {
var d = [f - a, null, null];
d[r] = f, e.splice(n, 0, d), o++
}
}
}
function S(e, t) {
if (e.dealigned || t) {
if (!e.orig.curOp) return e.orig.operation(function () {
S(e, t)
});
e.dealigned = !1;
var i = e.mv.left == e ? e.mv.right : e.mv.left;
i && (f(i), i.dealigned = !1);
for (var r = function (e, t) {
var i = y(e.edit, e.chunks, !1), r = [];
if (t) for (var n = 0, o = 0; n < t.chunks.length; n++) {
for (var l = t.chunks[n].editTo; o < i.length && i[o] < l;) o++;
o != i.length && i[o] == l || i.splice(o++, 0, l)
}
for (n = 0; n < i.length; n++) r.push([i[n], null, null]);
return F(r, y(e.orig, e.chunks, !0), e.chunks, 1), t && F(r, y(t.orig, t.chunks, !0), t.chunks, 2), r
}(e, i), n = e.mv.aligners, o = 0; o < n.length; o++) n[o].clear();
n.length = 0;
var l = [e.edit, e.orig], a = [];
i && l.push(i.orig);
for (o = 0; o < l.length; o++) a.push(l[o].getScrollInfo().top);
for (var s = 0; s < r.length; s++) M(l, r[s], n);
for (o = 0; o < l.length; o++) l[o].scrollTo(null, a[o])
}
}
function M(e, t, i) {
for (var r = 0, n = [], o = 0; o < e.length; o++) if (null != t[o]) {
var l = e[o].heightAtLine(t[o], "local");
n[o] = l, r = Math.max(r, l)
}
for (o = 0; o < e.length; o++) if (null != t[o]) {
var a = r - n[o];
a > 1 && i.push(L(e[o], t[o], a))
}
}
function L(e, t, i) {
var r = !0;
t > e.lastLine() && (t--, r = !1);
var n = document.createElement("div");
return n.className = "CodeMirror-merge-spacer", n.style.height = i + "px", n.style.minWidth = "1px", e.addLineWidget(t, n, {
height: i,
above: r,
mergeSpacer: !0,
handleMouseEvents: !0
})
}
function D(e, t, i, r, n) {
var l = "left" == e.type, a = e.orig.heightAtLine(t.origFrom, "local", !0) - i;
if (e.svg) {
var s = a, c = e.edit.heightAtLine(t.editFrom, "local", !0) - r;
if (l) {
var h = s;
s = c, c = h
}
var f = e.orig.heightAtLine(t.origTo, "local", !0) - i, g = e.edit.heightAtLine(t.editTo, "local", !0) - r;
if (l) {
h = f;
f = g, g = h
}
var d = " C " + n / 2 + " " + c + " " + n / 2 + " " + s + " " + (n + 2) + " " + s,
u = " C " + n / 2 + " " + f + " " + n / 2 + " " + g + " -1 " + g;
z(e.svg.appendChild(document.createElementNS(o, "path")), "d", "M -1 " + c + d + " L " + (n + 2) + " " + f + u + " z", "class", e.classes.connect)
}
if (e.copyButtons) {
var m = e.copyButtons.appendChild(j("div", "left" == e.type ? "⇝" : "⇜", "CodeMirror-merge-copy")),
v = e.mv.options.allowEditingOriginals;
if (m.title = v ? "Push to left" : "Revert chunk", m.chunk = t, m.style.top = (t.origTo > t.origFrom ? a : e.edit.heightAtLine(t.editFrom, "local") - r) + "px", v) {
var p = e.edit.heightAtLine(t.editFrom, "local") - r,
k = e.copyButtons.appendChild(j("div", "right" == e.type ? "⇝" : "⇜", "CodeMirror-merge-copy-reverse"));
k.title = "Push to right", k.chunk = {
editFrom: t.origFrom,
editTo: t.origTo,
origFrom: t.editFrom,
origTo: t.editTo
}, k.style.top = p + "px", "right" == e.type ? k.style.left = "2px" : k.style.right = "2px"
}
}
}
function E(e, t, i, r) {
if (!e.diffOutOfDate) {
var o = r.origTo > i.lastLine() ? n(r.origFrom - 1) : n(r.origFrom, 0), l = n(r.origTo, 0),
a = r.editTo > t.lastLine() ? n(r.editFrom - 1) : n(r.editFrom, 0), s = n(r.editTo, 0),
c = e.mv.options.revertChunk;
c ? c(e.mv, i, o, l, t, a, s) : t.replaceRange(i.getRange(o, l), a, s)
}
}
var A = e.MergeView = function (t, i) {
if (!(this instanceof A)) return new A(t, i);
this.options = i;
var r = i.origLeft, n = null == i.origRight ? i.orig : i.origRight, o = null != r, l = null != n,
a = 1 + (o ? 1 : 0) + (l ? 1 : 0), s = [], c = this.left = null, f = this.right = null, g = this;
if (o) {
c = this.left = new h(this, "left");
var d = P("div", null, "CodeMirror-merge-pane CodeMirror-merge-left");
s.push(d), s.push(O(c))
}
var u = P("div", null, "CodeMirror-merge-pane CodeMirror-merge-editor");
if (s.push(u), l) {
f = this.right = new h(this, "right"), s.push(O(f));
var m = P("div", null, "CodeMirror-merge-pane CodeMirror-merge-right");
s.push(m)
}
(l ? m : u).className += " CodeMirror-merge-pane-rightmost", s.push(P("div", null, null, "height: 0; clear: both;"));
var v = this.wrap = t.appendChild(P("div", s, "CodeMirror-merge CodeMirror-merge-" + a + "pane"));
this.edit = e(u, Q(i)), c && c.init(d, r, i), f && f.init(m, n, i), i.collapseIdentical && this.editor().operation(function () {
!function (e, t) {
"number" != typeof t && (t = 2);
for (var i = [], r = e.editor(), n = r.firstLine(), o = n, l = r.lastLine(); o <= l; o++) i.push(!0);
e.left && H(e.left, t, n, i);
e.right && H(e.right, t, n, i);
for (var a = 0; a < i.length; a++) if (i[a]) {
for (var s = a + n, c = 1; a < i.length - 1 && i[a + 1]; a++, c++) ;
if (c > t) {
var h = [{line: s, cm: r}];
e.left && h.push({
line: T(s, e.left.chunks),
cm: e.left.orig
}), e.right && h.push({line: T(s, e.right.chunks), cm: e.right.orig});
var f = _(c, h);
e.options.onCollapse && e.options.onCollapse(e, s, c, f)
}
}
}(g, i.collapseIdentical)
}), "align" == i.connect && (this.aligners = [], S(this.left || this.right, !0)), c && c.registerEvents(f), f && f.registerEvents(c);
var p = function () {
c && w(c), f && w(f)
};
e.on(window, "resize", p);
var k = setInterval(function () {
for (var t = v.parentNode; t && t != document.body; t = t.parentNode) ;
t || (clearInterval(k), e.off(window, "resize", p))
}, 5e3)
};
function O(t) {
var i = t.lockButton = P("div", null, "CodeMirror-merge-scrolllock");
i.title = "Toggle locked scrolling";
var r = P("div", [i], "CodeMirror-merge-scrolllock-wrap");
e.on(i, "click", function () {
m(t, !t.lockScroll)
});
var n = [r];
if (!1 !== t.mv.options.revertButtons && (t.copyButtons = P("div", null, "CodeMirror-merge-copybuttons-" + t.type), e.on(t.copyButtons, "click", function (e) {
var i = e.target || e.srcElement;
i.chunk && ("CodeMirror-merge-copy-reverse" != i.className ? E(t, t.edit, t.orig, i.chunk) : E(t, t.orig, t.edit, i.chunk))
}), n.unshift(t.copyButtons)), "align" != t.mv.options.connect) {
var l = document.createElementNS && document.createElementNS(o, "svg");
l && !l.createSVGRect && (l = null), t.svg = l, l && n.push(l)
}
return t.gap = P("div", n, "CodeMirror-merge-gap")
}
function x(e) {
return "string" == typeof e ? e : e.getValue()
}
A.prototype = {
constructor: A, editor: function () {
return this.edit
}, rightOriginal: function () {
return this.right && this.right.orig
}, leftOriginal: function () {
return this.left && this.left.orig
}, setShowDifferences: function (e) {
this.right && this.right.setShowDifferences(e), this.left && this.left.setShowDifferences(e)
}, rightChunks: function () {
if (this.right) return f(this.right), this.right.chunks
}, leftChunks: function () {
if (this.left) return f(this.left), this.left.chunks
}
};
var B = new diff_match_patch;
function I(e, t, i) {
for (var r = B.diff_main(e, t), n = 0; n < r.length; ++n) {
var o = r[n];
(i ? /[^ \t]/.test(o[1]) : o[1]) ? n && r[n - 1][0] == o[0] && (r.splice(n--, 1), r[n][1] += o[1]) : r.splice(n--, 1)
}
return r
}
function N(e) {
for (var t = [], i = 0, r = 0, o = n(0, 0), l = n(0, 0), a = 0; a < e.length; ++a) {
var s = e[a], c = s[0];
if (c == DIFF_EQUAL) {
var h = !V(e, a) || o.line < i || l.line < r ? 1 : 0, f = o.line + h, g = l.line + h;
q(o, s[1], null, l);
var d = R(e, a) ? 1 : 0, u = o.line + d, m = l.line + d;
u > f && (a && t.push({origFrom: r, origTo: g, editFrom: i, editTo: f}), i = u, r = m)
} else q(c == DIFF_INSERT ? o : l, s[1])
}
return (i <= o.line || r <= l.line) && t.push({origFrom: r, origTo: l.line + 1, editFrom: i, editTo: o.line + 1}), t
}
function R(e, t) {
if (t == e.length - 1) return !0;
var i = e[t + 1][1];
return !(1 == i.length && t < e.length - 2 || 10 != i.charCodeAt(0)) && (t == e.length - 2 || ((i = e[t + 2][1]).length > 1 || t == e.length - 3) && 10 == i.charCodeAt(0))
}
function V(e, t) {
if (0 == t) return !0;
var i = e[t - 1][1];
return 10 == i.charCodeAt(i.length - 1) && (1 == t || 10 == (i = e[t - 2][1]).charCodeAt(i.length - 1))
}
function W(t, i, r) {
t.addLineClass(i, "wrap", "CodeMirror-merge-collapsed-line");
var o = document.createElement("span");
o.className = "CodeMirror-merge-collapsed-widget", o.title = "Identical text collapsed. Click to expand.";
var l = t.markText(n(i, 0), n(r - 1), {inclusiveLeft: !0, inclusiveRight: !0, replacedWith: o, clearOnEnter: !0});
function a() {
l.clear(), t.removeLineClass(i, "wrap", "CodeMirror-merge-collapsed-line")
}
return e.on(o, "click", a), {mark: l, clear: a}
}
function _(e, t) {
var i = [];
function r() {
for (var e = 0; e < i.length; e++) i[e].clear()
}
for (var n = 0; n < t.length; n++) {
var o = t[n], l = W(o.cm, o.line, o.line + e);
i.push(l), l.mark.on("clear", r)
}
return i[0].mark
}
function H(e, t, i, r) {
for (var n = 0; n < e.chunks.length; n++) for (var o = e.chunks[n], l = o.editFrom - t; l < o.editTo + t; l++) {
var a = l + i;
a >= 0 && a < r.length && (r[a] = !1)
}
}
function P(e, t, i, r) {
var n = document.createElement(e);
if (i && (n.className = i), r && (n.style.cssText = r), "string" == typeof t) n.appendChild(document.createTextNode(t)); else if (t) for (var o = 0; o < t.length; ++o) n.appendChild(t[o]);
return n
}
function j(e, t, i, r) {
var n = document.createElement(e);
if (i && (n.className = i), r && (n.style.cssText = r), "string" == typeof t) n.appendChild(document.createTextNode(t)); else if (t) for (var o = 0; o < t.length; ++o) n.appendChild(t[o]);
return n
}
function U(e) {
for (var t = e.childNodes.length; t > 0; --t) e.removeChild(e.firstChild)
}
function z(e) {
for (var t = 1; t < arguments.length; t += 2) e.setAttribute(arguments[t], arguments[t + 1])
}
function Q(e, t) {
for (var i in t || (t = {}), e) e.hasOwnProperty(i) && (t[i] = e[i]);
return t
}
function q(e, t, i, r) {
for (var o = i ? n(e.line, e.ch) : e, l = 0; ;) {
var a = t.indexOf("\n", l);
if (-1 == a) break;
++o.line, r && ++r.line, l = a + 1
}
return o.ch = (l ? 0 : o.ch) + (t.length - l), r && (r.ch = (l ? 0 : r.ch) + (t.length - l)), o
}
var G = 1, J = 2, K = 4;
function X(e) {
this.cm = e, this.alignable = [], this.height = e.doc.height;
var t = this;
e.on("markerAdded", function (e, i) {
if (i.collapsed) {
var r = i.find(1);
null != r && t.set(r.line, K)
}
}), e.on("markerCleared", function (e, i, r, n) {
null != n && i.collapsed && t.check(n, K, t.hasMarker)
}), e.on("markerChanged", this.signal.bind(this)), e.on("lineWidgetAdded", function (e, i, r) {
i.mergeSpacer || (i.above ? t.set(r - 1, J) : t.set(r, G))
}), e.on("lineWidgetCleared", function (e, i, r) {
i.mergeSpacer || (i.above ? t.check(r - 1, J, t.hasWidgetBelow) : t.check(r, G, t.hasWidget))
}), e.on("lineWidgetChanged", this.signal.bind(this)), e.on("change", function (e, i) {
var r = i.from.line, n = i.to.line - i.from.line, o = i.text.length - 1, l = r + o;
(n || o) && t.map(r, n, o), t.check(l, K, t.hasMarker), (n || o) && t.check(i.from.line, K, t.hasMarker)
}), e.on("viewportChange", function () {
t.cm.doc.height != t.height && t.signal()
})
}
function Y(e, t) {
return (e.line - t.line || e.ch - t.ch) < 0 ? e : t
}
function Z(e, t) {
return (e.line - t.line || e.ch - t.ch) > 0 ? e : t
}
function $(e, t) {
return e.line == t.line && e.ch == t.ch
}
function ee(e, t, i) {
for (var r = e.length - 1; r >= 0; r--) {
var n = e[r], o = (i ? n.origTo : n.editTo) - 1;
if (o < t) return o
}
}
function te(e, t, i) {
for (var r = 0; r < e.length; r++) {
var n = e[r], o = i ? n.origFrom : n.editFrom;
if (o > t) return o
}
}
function ie(t, i) {
var r = null, n = t.state.diffViews, o = t.getCursor().line;
if (n) for (var l = 0; l < n.length; l++) {
var a = n[l], s = t == a.orig;
f(a);
var c = i < 0 ? ee(a.chunks, o, s) : te(a.chunks, o, s);
null == c || null != r && !(i < 0 ? c > r : c < r) || (r = c)
}
if (null == r) return e.Pass;
t.setCursor(r, 0)
}
X.prototype = {
signal: function () {
e.signal(this, "realign"), this.height = this.cm.doc.height
}, set: function (e, t) {
for (var i = -1; i < this.alignable.length; i += 2) {
var r = this.alignable[i] - e;
if (0 == r) {
if ((this.alignable[i + 1] & t) == t) return;
return this.alignable[i + 1] |= t, void this.signal()
}
if (r > 0) break
}
this.signal(), this.alignable.splice(i, 0, e, t)
}, find: function (e) {
for (var t = 0; t < this.alignable.length; t += 2) if (this.alignable[t] == e) return t;
return -1
}, check: function (e, t, i) {
var r = this.find(e);
if (-1 != r && this.alignable[r + 1] & t && !i.call(this, e)) {
this.signal();
var n = this.alignable[r + 1] & ~t;
n ? this.alignable[r + 1] = n : this.alignable.splice(r, 2)
}
}, hasMarker: function (e) {
var t = this.cm.getLineHandle(e);
if (t.markedSpans) for (var i = 0; i < t.markedSpans.length; i++) if (t.markedSpans[i].mark.collapsed && null != t.markedSpans[i].to) return !0;
return !1
}, hasWidget: function (e) {
var t = this.cm.getLineHandle(e);
if (t.widgets) for (var i = 0; i < t.widgets.length; i++) if (!t.widgets[i].above && !t.widgets[i].mergeSpacer) return !0;
return !1
}, hasWidgetBelow: function (e) {
if (e == this.cm.lastLine()) return !1;
var t = this.cm.getLineHandle(e + 1);
if (t.widgets) for (var i = 0; i < t.widgets.length; i++) if (t.widgets[i].above && !t.widgets[i].mergeSpacer) return !0;
return !1
}, map: function (e, t, i) {
for (var r = i - t, n = e + t, o = -1, l = -1, a = 0; a < this.alignable.length; a += 2) {
var s = this.alignable[a];
s == e && this.alignable[a + 1] & J && (o = a), s == n && this.alignable[a + 1] & J && (l = a), s <= e || (s < n ? this.alignable.splice(a--, 2) : this.alignable[a] += r)
}
if (o > -1) {
var c = this.alignable[o + 1];
c == J ? this.alignable.splice(o, 2) : this.alignable[o + 1] = c & ~J
}
l > -1 && i && this.set(e + i, J)
}
}, e.commands.goNextDiff = function (e) {
return ie(e, 1)
}, e.commands.goPrevDiff = function (e) {
return ie(e, -1)
}
});
// ---------------------------------------------------------------------------------edu_tpi.js START
// 实训游戏需要的js功能
var EXPAND = 0; // 放大
var SHRINK = 1; // 缩小
var repositoryTabHeight = 40
$(function () {
function update_rows_and_cols(rows) {
// 非iframe模式使用
window.postMessage({tp: 'resize', rows: rows, cols: 0}, "*");
// iframe模式使用
// var _iframe = document.getElementById("game_webssh");
// if(_iframe == null || _iframe == undefined || _iframe == ""){
// return;
// }
// _iframe.contentWindow.postMessage({tp: 'resize', rows: rows, cols: 0}, "https://webssh.educoder.net");
}
window.top.__updateWebsshRows = update_rows_and_cols
// TPI拖拽功能 begin
var doc = $(document);
var lab = $(".b-label");
var cen = $(".h-center");
var nextW2, nextW1;
var dragging = false;
var flag = false;
var wrapWidth;
var wrapHeight;
var nRow = 0;
//var nCol = 0;
lab.live('mousedown touchstart', function () {
$('#game_webssh').css('pointer-events', 'none')
dragging = true;
leftOffset = $(".labelN").offset().left;
wrapWidth = $(".labelN").width();
return false;
}
);
cen.live('mousedown ', function () {
// 使得iframe不捕获事件
$('#game_webssh').css('pointer-events', 'none')
flag = true;
topOffset = $(".centerH").offset().top;
wrapHeight = $(".centerH").height();
return false;
}
);
// react add TODO react加载完dom再执行
setTimeout(function () {
$('#games_repository_contents .CodeMirror.cm-s-railscasts').css("height", $("#games_repository_contents").height() - repositoryTabHeight);
}, 800)
// window resize
$(window).on('resize', function () {
window._tpiWidthResize && window._tpiWidthResize()
$('#games_repository_contents .CodeMirror.cm-s-railscasts').css("height", $("#games_repository_contents").height() - repositoryTabHeight);
})
var FF = !(window.mozInnerScreenX == null);
var websshLineHeight = FF ? 19 : 18
function throttle(method, delay, duration) {
var timer = null, begin = new Date();
return function () {
var context = this, args = arguments, current = new Date();
clearTimeout(timer);
if (current - begin >= duration) {
method.apply(context, args);
begin = current;
} else {
timer = setTimeout(function () {
method.apply(context, args);
}, delay);
}
}
}
doc.live('mousemove touchmove', function (e) {
$(".-brother").show();// 代码行的遮罩显示
if (dragging) {
clickX = e.pageX || e.originalEvent.touches[0].pageX;
;
if (clickX > leftOffset + 0 && clickX < leftOffset + 1600) {
// console.log('resize')
lab.css('left', clickX - 7 - leftOffset + 'px');
$("#game_left_contents").width(clickX - leftOffset + 'px');
nextW2 = clickX - leftOffset;
$("#game_right_contents").width(wrapWidth - nextW2 + 'px');
//console.log(lab.next().width());
throttle(refresh_editor_monaco, 100, 200)()
} else {
lab.css('left', '0px');
}
}
if (flag) {
clickY = e.pageY;
if (clickY > topOffset + 100) {
cen.css('top', clickY - 7 - topOffset + 'px');
$("#games_repository_contents").height(clickY - topOffset + 'px');
// react add
$('.CodeMirror.cm-s-railscasts')
.css("height", clickY - topOffset - repositoryTabHeight - $('#games_repository_contents .codePath').height() - 12);
nextW1 = clickY - topOffset;
$("#games_valuation_contents").height(wrapHeight - nextW1 + 'px');
var h = $("#games_repository_contents").height() - $("#top_repository").height() - repositoryTabHeight;
var m = $("#games_repository_contents").height() - repositoryTabHeight;
var w = $("#games_repository_contents").width();
$(".game_webssh").css("min-height", m);
$(".game_webssh").css("max-height", m);
throttle(refresh_editor_monaco, 100, 200)(m)
// refresh_editor_monaco(m)
// 火狐下行高为19
// CodeRepositoryView.js有同样的计算逻辑用来初始化ssh
var rows = Math.round(m / websshLineHeight);
//var cols = parseInt(w / 6.2);
$("#file_entry_content").find(".CodeMirror-scroll").css("min-height", h);
$("#file_entry_content").find(".CodeMirror-scroll").css("max-height", h);
} else {
cen.css('top', '0px');
}
// 行高发生变化则调整webssh的term的高度
if (nRow != rows) {
//window.frames['game_webssh'].contentWindow.resizeTerminal({rows:rows});
update_rows_and_cols(rows);
nRow = rows;
} else {
nRow = rows;
}
}
});
doc.live("mouseup touchend", function (e) {
// 使得iframe可以继续捕获事件
$('#game_webssh').css('pointer-events', 'inherit')
flag = false;
dragging = false;
e.cancelBubble = true;
$(".-brother").hide(); // 代码行的遮罩隐藏
});
window.__tpiOnResize = function () {
var m = $("#games_repository_contents").height() - repositoryTabHeight;
$(".game_webssh").css("min-height", m);
$(".game_webssh").css("max-height", m);
refresh_editor_monaco(m)
var _iframe = document.getElementById("game_webssh");
if (!_iframe) {
return;
}
var FF = !(window.mozInnerScreenX == null);
var websshLineHeight = FF ? 19 : 18
var rows = Math.floor(m / websshLineHeight);
window.top.__updateWebsshRows && window.top.__updateWebsshRows(rows)
}
window.refresh_editor_monaco = function (height) {
console.log('refresh_editor_monaco')
if (window.editor_monaco) {
height && $('#codetab_con_1').height(height)
window.editor_monaco.layout();
}
// if ($('#game_operate_action').width() < 720) {
// $('#game_operate_action .time_limit').hide()
// } else {
// $('#game_operate_action .time_limit').show()
// }
}
// end;
//解決IE瀏覽器大小改變時webssh佈局變亂。
window.onresize = function () {
__tpiOnResize()
}
// 评论区域的回复按钮
function reply_to_dis(id, name) {
$("#comment_news").attr("placeholder", "回复" + name + ":");
$("#dis_reply_id").val(id);
$("#comment_news").focus();
}
// end
// 点击全部任务向右侧展开
$("#all_task_show").on("click", function (e) {
c = 0;
$("#all_task_tab").removeClass('leftnav-active');
$("#all_task_show").css("background", "rgba(0,0,0,0)");
$("#all_task_index").css("left", 0).stop().animate({
left: "-505px"
}, 400, function () {
$("#all_task_show").hide();
fadein = 0;
});
});
// end
// 列表区域阻止事件冒泡
$("#all_task_index").on("click", function (e) {
e.stopPropagation();
});
// end
// 下一关增加loading效果
$("#next_step").live("click", function () {
nNext = $("#next_step_area");
html = "<a href='javascript:void(0);' class='task-btn mr15 mt8'>下一关<img src='/images/bigdata/loading2.svg' style='width:25px;float:left;margin-top: 3px' /></a>";
nNext.html(html);
});
// end
// 上一关增加loading效果
$("#prev_step").live("click", function () {
nNext = $("#prev_step_area");
html = "<a href='javascript:void(0);' class='task-btn mr15 mt8'>上一关<img src='/images/bigdata/loading2.svg' style='width:25px;float:left;margin-top: 3px' /></a>";
nNext.html(html);
});
// end
});
// 查看参考答案
function open_answer(game, myshixun, choose) {
$.ajax({
url: "/myshixuns/" + myshixun + "/stages/" + game + "/answer",
data: {choose: choose},
dataType: "script"
})
}
// 选择题选择答案
function choice_answer(st, nThis) {
if (st == "2") {
//$(nThis).hasClass("card-check") ? $(nThis).removeClass("card-check") : $(nThis).addClass("card-check");
$(nThis).toggleClass("card-check");
$(nThis).toggleClass("color_white");
} else if (st == "1") {
var choice = $(".color_white");
choice.removeClass("card-check");
choice.removeClass("color_white");
$(nThis).addClass("card-check");
$(nThis).toggleClass("color_white");
}
}
// end
// 评测区域点击TAB切换样式
function check_tab(allClassName, addClassName, item) {
//点击tab添加样式
$("." + allClassName).removeClass(addClassName);
$(item).addClass(addClassName);
//获取当前点击的tab的索引位置
var index = $(item).index() + 1;
//显示或隐藏对应的内容块
$("#" + allClassName + "_" + index).siblings().addClass("undis");
$("#" + allClassName + "_" + index).removeClass("undis");
}
// end
// 选择题公开的测试集允许展开与隐藏
function toggle_test_case_choose(t_case, id) {
if (true) {
var nTest = $("#test_case_" + id).parent().prev(".-task-ces-top").children("i:first-child"); //图标节点
if (nTest.hasClass("fa-caret-down")) {
nTest.addClass("fa-caret-right");
nTest.removeClass("fa-caret-down");
} else if (nTest.hasClass("fa-caret-right")) {
nTest.addClass("fa-caret-down");
nTest.removeClass("fa-caret-right");
}
$("#test_case_" + id).toggle();
}
}
// 公开的测试集允许展开与隐藏
var dv;
function toggle_test_case(open, output, actual_output, id, power) {
var base64 = new Base64();
output = base64.decode(output);
actual_output = base64.decode(actual_output);
actual_output = actual_output.replace(/\\r\\n/g, "\r\n").replace(/\\r/g, "\r").replace(/\\n/g, "\n").replace(/\\t/g, "\t").replace(/<\/\/script>/g, "</script>");
output = output.replace(/\\r\\n/g, "\r\n").replace(/\\r/g, "\r").replace(/\\n/g, "\n").replace(/\\t/g, "\t");
if (true) {
var nTest = $("#test_case_" + id).parent().prev(".-task-ces-top").children("i:first-child"); //图标节点
if (nTest.hasClass("fa-caret-down")) {
nTest.addClass("fa-caret-right");
nTest.removeClass("fa-caret-down");
$("#result_different_show_" + id).siblings(".-task-ces-info").attr("style", "display:none");
$("#result_different_show_" + id).hide();
$("#test_case_" + id).hide();
} else if (nTest.hasClass("fa-caret-right")) {
nTest.addClass("fa-caret-down");
nTest.removeClass("fa-caret-right");
$("#result_different_show_" + id).show();
$("#test_case_" + id).show();
$("#result_different_show_" + id).siblings(".-task-ces-info").attr("style", "display:block");
if (open == 1 || power) {
var id = "result_different_show_" + id;
//var oldData = "摄氏温度\t\t华氏温度\n********************\n\n-40 \t\t -40.0\n-35 \t\t -31.0\n-30 \t\t -22.0\n-25 \t\t -13.0\n-20 \t\t -4.0\n-15 \t\t 5.0\n-10 \t\t 14.0\n-5 \t\t 23.0\n0 \t\t 32.0\n5 \t\t 41.0\n10 \t\t 50.0\n15 \t\t 59.0\n20 \t\t 68.0\n25 \t\t 77.0\n30 \t\t 86.0\n35 \t\t 95.0\n40 \t\t 104.0\n45 \t\t 113.0\n50 \t\t 122.0\n\n***********************\n\n[0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300]\n\n***********************\n5050 \t\t 5050\n\n***********************\n\n265252859812191058636308480000000\n\n***********************\n\nFalse\nFalse\nFalse\nFalse\nTrue\nTrue\nFalse\nFalse\nFalse\nTrue\n\n***********************\n\n3339 \t\t 333.9\n";
var oldData = output;
var orig1 = '';
var newData = actual_output == "null" ? "" : actual_output;
//var newData = "摄氏温度\t\t华氏温度\n********************\n-40 \t\t -40.0\n-35 \t\t -31.0\n-30 \t\t -22.0\n-25 \t\t -13.0\n-20 \t\t -4.0\n-15 \t\t 5.0\n-10 \t\t 14.0\n-5 \t\t 23.0\n0 \t\t 32.0\n5 \t\t 41.0\n10 \t\t 50.0\n15 \t\t 59.0\n20 \t\t 68.0\n25 \t\t 77.0\n30 \t\t 86.0\n35 \t\t 95.0\n40 \t\t 104.0\n45 \t\t 113.0\n50 \t\t 122.0\n\n***********************\n\n[0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300]\n\n***********************\n\n5050 \t\t 5050\n\n***********************\n\n265252859812191058636308480000000\n\n***********************\n\nFalse\nFalse\nFalse\nFalse\nTrue\nTrue\nFalse\nFalse\nFalse\nTrue\n\n***********************\n\n3339333.9\n";
var mv = CodeMirror.k_init(id, newData, oldData);
if (newData == "") {
$(".CodeMirror-merge-r-chunk").css("background", "none");
$(".CodeMirror-merge-r-inserted").css("background-image", "none");
//$(".CodeMirror-merge-copy").find('i').remove();
}
var height = 0;
if ($("#" + id).find(".CodeMirror-merge-pane").eq(0).height() > $("#" + id).find(".CodeMirror-merge-pane").eq(1).height()) {
height = parseInt($("#" + id).find(".CodeMirror-merge-pane").eq(0).height());
} else {
height = parseInt($("#" + id).find(".CodeMirror-merge-pane").eq(1).height());
}
$("#" + id).find(".CodeMirror").height(height);
$(".CodeMirror-merge-gap").css("height", height);
$(".CodeMirror-merge-gap").find("svg").css("height", height);
}
}
}
}
// end
// codemirror渲染textarea
function CodeMirror_fromTextArea(id) {
var Code = CodeMirror.fromTextArea(document.getElementById(id), {
/* mode: {name: "text/x-c++src",
// version: 2,
singleLineStringErrors: false},*/ // 目前补全js是引入的javascript-hint,因此目前不能指定语言
lineNumbers: true,
theme: "railscasts",
// extraKeys: {"Ctrl-Q": "autocomplete"}, // 快捷键
indentUnit: 4, //代码缩进为一个tab的距离
matchBrackets: true,
autoRefresh: true,
smartIndent: true,//智能换行
extraKeys: {"Ctrl-Q": "autocomplete"},
autofocus: true,
styleActiveLine: true,
lint: true,
gutters: ["CodeMirror-linenumbers", "breakpoints"]
});
return Code;
}
// end
var control = 0; // 版本库控制 0表示点击放大 1表示点击缩小
var control_1 = 0; // 测评控制 0表示点击放大 1表示点击缩小
// 版本库的放大与缩小
function repository_extend_and_zoom() {
var nGameRes = $("#games_repository_contents"); // 版本库区域
var nGameEva = $("#games_valuation_contents"); // 评测区域
var nRIcon = $("#extend_and_zoom").children("i"); // 版本库放大缩小按钮
var nCode = $("#file_entry_content").find(".CodeMirror-scroll"); // 版本库代码区域
var nMove = $(".h-center");
if (control == 0) {
nGameRes.addClass("-flex-basic100");
nGameEva.addClass("-flex-basic0");
nRIcon.addClass("fa-compress");
nRIcon.removeClass("fa-expand");
// $("#extend_and_zoom").attr("data-tip-left","收起");
nMove.hide();
control = 1;
} else if (control == 1) {
nGameRes.removeClass("-flex-basic100");
nGameEva.removeClass("-flex-basic0");
nRIcon.removeClass("fa-compress");
nRIcon.addClass("fa-expand");
// $("#extend_and_zoom").attr("data-tip-left","展开");
nMove.show();
control = 0;
}
// react环境下没有window['editor_CodeMirror']
var newHeight = $("#games_repository_contents").height() - repositoryTabHeight;
// react add
$('.CodeMirror.cm-s-railscasts').css("height", newHeight);
window['editor_CodeMirror'] && editor_CodeMirror.setSize("auto", "auto");
window.refresh_editor_monaco(newHeight)
var h = nGameRes.height() - $("#top_repository").height() - repositoryTabHeight;
nCode.css("min-height", h);
}
// end
// 测评的扩大与缩小
function valuation_extend_and_zoom() {
var nGameRes = $("#games_repository_contents"); // 版本库区域
var nGameEva = $("#games_valuation_contents"); // 评测区域
var nVIcon = $("#valuation_extend_and_zoom").children("i"); // 评测放大缩小
var nMove = $(".h-center");
if (control_1 == 0) {
nGameRes.addClass("-flex-basic0");
nGameEva.addClass("-flex-basic100");
nVIcon.removeClass("fa-expand");
nVIcon.addClass("fa-compress");
// $("#valuation_extend_and_zoom").attr("data-tip-left","收起");
nMove.hide();
control_1 = 1;
} else if (control_1 == 1) {
nGameRes.removeClass("-flex-basic0");
nGameEva.removeClass("-flex-basic100");
nVIcon.addClass("fa-expand");
nVIcon.removeClass("fa-compress");
// $("#valuation_extend_and_zoom").attr("data-tip-left","展开");
nMove.show();
control_1 = 0;
}
}
// end
// 点赞与取消点赞
var h = true;
function game_praise(obj_id, obj_type) {
if (treadStatus) {
return;
}
$.ajax({
url: "/praise_tread/praise_plus?obj_id=" + obj_id + "&obj_type=" + obj_type,
data: {horizontal: h, game_praise: true},
success: function (data) {
h = !h;
var praise_count = $("#game_praise_count");
if (data.praise) {
praiseStatus = true; //已赞
praise_count.html(data.praise_tread_count);
$("#game_praise_tread").children("i").addClass("color-orange03");
$("#game_praise_tread").attr("data-tip-top", "取消点赞")
} else {
praiseStatus = false; //取消赞
praise_count.html(data.praise_tread_count);
$("#game_praise_tread").children("i").removeClass("color-orange03");
$("#game_praise_tread").attr("data-tip-top", "点赞")
}
}
});
}
// 踩/取消踩功能
var d = true;
function game_tread(obj_id) {
if (praiseStatus) {
return;
}
$.ajax({
url: "/praise_tread/praise_plus?obj_id=" + obj_id + "&obj_type=ChallengeTread",
data: {horizontal: d, game_praise: true},
success: function (data) {
d = !d;
var tread_count = $("#game_tread_count");
if (data.praise) {
treadStatus = true; // 取消踩
tread_count.html(data.praise_tread_count);
$("#game_tread").children("i").addClass("color-orange");
$("#game_tread").attr("data-tip-top", "取消踩")
} else {
treadStatus = false; // 已踩
tread_count.html(data.praise_tread_count);
$("#game_tread").children("i").removeClass("color-orange");
$("#game_tread").attr("data-tip-top", "踩");
}
}
});
}
// end
function setupAjaxIndicatorBase() {
$('#ajax-indicator-base').bind('ajaxSend', function (event, xhr, settings) {
if (settings && settings.url
&& (settings.url.match(/account\/heartbeat$/)
|| settings.url.match(/file_update/)
|| settings.url.match(/game_build/)
|| settings.url.match(/game_status/)
|| settings.url.match(/refresh_game_list/)
|| settings.url.match(/next_step/)
|| settings.url.match(/prev_step/)
|| settings.url.match(/open_webssh/)
|| settings.url.match(/repository/)
|| settings.url.match(/get_waiting_time/)
)) {
return;
}
if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
$('#ajax-indicator-base').css("display", "flex").html("<embed src='/images/bigdata/loading2.svg' />").show();
}
});
$('#ajax-indicator-base').bind('ajaxStop', function () {
$('#ajax-indicator-base').html("").hide();
if (MathJax && MathJax.Hub)
MathJax.Hub.Queue(['Typeset', MathJax.Hub]); //如果是ajax刷新页面的话手动执行MathJax的公式显示
try {
prettyPrint(); //如果刷新出来的页面如果存在代码行的话,也需要美化
} catch (e) {
}
});
}
function match_specific_symbol(str) {
str = str.replace(/ /g, "<span class=\"empty\"></span>").replace(/\r\n$/, "<i class=\"fa fa-level-down color-grey font-16\" aria-hidden=\"true\"></i>").replace(/\n$/, "<i class=\"fa fa-level-down color-grey font-16\" aria-hidden=\"true\"></i>").replace(/\r$/, "<i class=\"fa fa-level-down color-grey font-16\" aria-hidden=\"true\"></i>").replace(/\r\n/g, "<br>").replace(/\n/g, "<br>").replace(/\r/g, "<br>").replace(/\t/g, "<span class=\"tab-key\"><i class=\"fa fa-long-arrow-right color-grey3\" aria-hidden=\"true\"></i></span>")
return str
};
/*
var panes = 2, highlight = true, connect = null, collapse = false;
function initUI(id, value, orig1, orig2, dv, panes, highlight, connect, collapse) {
if (value == null) return;
var target = document.getElementById(id);
target.innerHTML = "";
dv = CodeMirror.MergeView(target, {
value: value,
origLeft: panes == 3 && !collapse && !connect ? orig1 : null,
orig: orig2,
lineNumbers: true,
mode: "text/html",
highlightDifferences: highlight,
connect: connect,
collapseIdentical: collapse
});
}
function toggleDifferences() {
dv.setShowDifferences(highlight = !highlight);
}
function mergeViewHeight(mergeView) {
function editorHeight(editor) {
if (!editor) return 0;
return editor.getScrollInfo().height;
}
return Math.max(editorHeight(mergeView.leftOriginal()),
editorHeight(mergeView.editor()),
editorHeight(mergeView.rightOriginal()));
}
function resize(mergeView) {
var height = mergeViewHeight(mergeView);
for(;;) {
if (mergeView.leftOriginal())
mergeView.leftOriginal().setSize(null, height);
mergeView.editor().setSize(null, height);
if (mergeView.rightOriginal())
mergeView.rightOriginal().setSize(null, height);
var newHeight = mergeViewHeight(mergeView);
if (newHeight >= height) break;
else height = newHeight;
}
mergeView.wrap.style.height = height + "px";
}
*/
$(document).ready(setupAjaxIndicatorBase);
// test_sets测试集had_test_count输出集的个数test_sets_count测试集的个数had_passed_testsests_error_count测试集报错数test_sets_hidden_count隐藏测试集的个数
// test_sets_public_count公开测试集的个人had_passed_testsests_hidden_count通过的隐藏集个数had_passed_testsests_public_count通过的公开测试集个数
// final_score最终得经验数gold最终得的金币数latest_output最新的输出language实训的语言, power是否有权限看隐藏测试集, record最新的一次的评测时间信息, mirror_name镜像名
function code_evaluation(test_sets,
had_test_count,
test_sets_count,
had_passed_testsests_error_count,
test_sets_hidden_count,
test_sets_public_count,
had_passed_testsests_hidden_count,
had_passed_testsests_public_count,
final_score,
gold,
latest_output,
mirror_name,
power,
record
) {
//动态加载评测区域
/**
* Created by wang on 2017/8/9.
*/
//test_sets = [HtmlUtil.htmlDecode(test_sets)];
var $EffectDisplay, $b, $TestResult, $d, $e, $f, $g, $h, $EvaluationInformation, $n, $i;
// 第一块 效果显示
$EffectDisplay = "<div id=\"blacktab_con_1\" class=\"\" ></div>";
$b = "<div class=\"fit -scroll\">" +
"<div class=\"-layout-v -fit\">" +
"<div class=\"-flex -scroll task-padding16 loading-center undis\" id=\"html_ajax_loading\"></div>" +
"<form id=\"html_form\" method=\"post\" target=\"myFrame\">" +
"<input type=\"hidden\" name=\"contents\" id=\"data_param\" />" +
"</form>" +
"<iframe frameborder=\"0\" name=\"myFrame\" style='background: #fff;height: 100%;'>" +
"</iframe>" +
"</div>" +
"</div>";
if (mirror_name.indexOf("Html") != -1) {
$EffectDisplay = "<div id=\"blacktab_con_1\" class=\"\" >" + $b + "</div>";
}
//第二块 测试结果
if (had_test_count != "0") {
var $t = "";
if (record != "" && record != null && record != undefined) {
$t = " <span class=\"fr mr5 tab_color\">" + "本次评测耗时:" + record + "秒" + "</span>"
}
if (had_passed_testsests_error_count == test_sets_count) {
$d = $t + "<p class=\"color-light-green mb10\">" +
"<i class=\"fa fa-check-circle font-16\" ></i>" +
"<span class=\"ml5 mr5\">" + test_sets_count + "/" + test_sets_count + "</span> 全部通过</p>";
} else {
$d = $t + "<p class=\"-text-danger mb10\">" +
"<i class=\"fa fa-exclamation-circle font-16\" ></i>" +
" <span class=\"ml5 mr5 -text-danger\">" + had_passed_testsests_error_count + '/' + test_sets_count + "</span>" + latest_output + "</p>";
}
}
var $forHtml = "";
var $Bear = "";
for (var i = 0; i < test_sets.length; i++) {
if (test_sets[i].result == 0) {
$g = "<i class=\"fa fa-exclamation-circle -text-danger fr mt8 ml5\" ></i>"
} else if (test_sets[i].result == 1) {
$g = "<i class=\"fa fa-check-circle color-light-green fr mt8 ml5 font-16\" ></i>"
} else {
$g = ""
}
if (test_sets[i].is_public == 0) {
if (power && power != 'false') {
$g = "<i class=\"fa fa-unlock fr mt8 ml5\" ></i>" + $g
} else if (test_sets[i].result == 0 || test_sets[i].result == 1) {
$g = "<i class=\"fa fa-lock fr mt8 ml5\" ></i>" + $g
} else {
$g = "<i class=\"fa fa-lock fr mt8\" ></i>"
}
} else {
if (test_sets[i].result != 0 && test_sets[i].result != 1) {
$g = undefined;
}
}
if (test_sets[i].input == null || test_sets[i].input == "") {
$i = "";
} else {
$i = "<div class=\"clearfix df mt5\">" +
"<span class=\"color-blue fl fb\">测试输入:</span>" +
"<p class=\"fl\" style='flex:1'>" + ((test_sets[i].input == null || test_sets[i].input == "") ? "空" : test_sets[i].input.replace(/\r\n/g, "<br>")) + " </p>" +
"</div>"
}
if ((test_sets[i].is_public == 1 || power == 'true') || (power && power != 'false')) {
$h = "<div class=\"-task-ces-info\" style=\"display:none\" id=\"test_case_" + i + "\">" +
$i +
"<div class='clearfix'><p class='fl with52 color-blue'>预期输出:</p><p class='fl with48 pl5 color-blue' style='box-sizing:border-box'>实际输出:</p></div>" +
"</div>" +
"<div id=\"result_different_show_" + i + "\"></div>";
} else if (test_sets[i].is_public == 0) {
$h = "<div class=\"-task-ces-info undis\" id=\"test_case_" + i + "\">" +
" <ul class=\"font-14\">" +
" <li class=\"clearfix\">" +
"<div class=\"clearfix\">" +
"<p class=\"fl color-orange\" style=\"margin-left: 34px;\">此为隐藏测试项,<a href=\"javascript:void()\", class=\"color_white test_set_data\" style=\"text-decoration: underline;\">解锁</a></p>" +
" </div>" +
"</li>" +
" </ul>" +
"</div>";
}
$e = "<div class=\"-task-ces-box mb15 clearfix\">" + $h + "</div>";
// actual_output 正则匹配的目的: 因为字符串拼接\r\n时会转义导致js截成2断报错.因此需要编码
var base64 = new Base64();
var actual_output = test_sets[i].actual_output == null ? "" : base64.encode(test_sets[i].actual_output);
var output = test_sets[i].output == null ? "" : base64.encode(test_sets[i].output);
$f = "<div class=\"-task-ces-top clearfix\" onclick='toggle_test_case(" + test_sets[i].is_public + "," + '"' + output + '"' + "," + '"' + actual_output + '"' + "," + i + "," + power + ")' style=\"cursor:pointer\">" +
"<i class=\"fa fa-caret-right mr5 font-16\" ></i>" +
"<span class=\"font-14\">测试集 " + (i + 1) + "</span>" + ($g == undefined ? "" : $g) + "</div>";
$forHtml = $f + $e;
$Bear += $forHtml;
}
$TestResult = "<div id=\"blacktab_con_2\" class=\" " + (mirror_name.indexOf("Html") != -1 ? 'undis' : '') + "\">" +
"<div class=\"fit -scroll\">" +
"<div class=\"-layout-v -fit\">" +
"<div class=\"-flex -scroll task-padding16 loading-center undis\" id=\"evaluating_ajax_loading\"></div>" +
"<div class=\"-flex -scroll task-padding16\" id=\"evaluating_contents\">" + ($d == undefined ? "" : $d) + $Bear + "</div>" +
"</div>" +
"</div>" +
"</div>";
//第三块 评测信息
if (had_test_count != "0") {
if (had_passed_testsests_error_count == test_sets_count) {
$n = "<p class=\"color-light-green mb10\">" +
"<i class=\"fa fa-check-circle font-16 \" ></i>" +
"<span class=\"ml5 mr5\">" + test_sets_count + "/" + test_sets_count + "</span> 全部通过</p>";
} else {
$n = "<p class=\"-text-danger mb10\">" +
"<i class=\"fa fa-exclamation-circle font-16\" ></i>" +
"<span class=\"ml5 mr5 -text-danger\">" + had_passed_testsests_error_count + "/" + test_sets_count + "</span> " + latest_output + "</p>";
}
// $("#evaluating_info").html($n);
}
$EvaluationInformation = "<div id=\"blacktab_con_3\" class=\"undis\" >" +
"<div class=\"fit -scroll\">" +
"<div class=\"-layout-v -fit\">" +
"<div class=\"-flex -scroll task-padding16 loading-center undis\" id=\"info_ajax_loading\"></div>" +
"<div class=\"-flex -scroll task-padding16\" id=\"evaluating_info\">" + ($n == undefined ? "" : $n) + "<div class=\"-task-ces-box mb10 clearfix\">" +
"<div class=\"-task-ces-info\">" +
"<ul>" +
"<li>" +
"<span class=\"-task-ces-info-left \">公开测试:</span>" +
"<span class=\"color-light-green\">" + had_passed_testsests_public_count + "/" + test_sets_public_count + "</span>" +
"</li>" +
"<li>" +
"<span class=\"-task-ces-info-left\"> 隐藏测试:</span>" +
"<span class=\"color-light-green\">" + had_passed_testsests_hidden_count + "/" + test_sets_hidden_count + "</span>" +
"</li>" +
"<li>" +
"<span class=\"-task-ces-info-left\"> 经验值:</span>" +
"<span class=\"color-light-green\" id=\"experience_value\">+ " + final_score + " </span>" +
"</li>" +
"<li>" +
"<span class=\"-task-ces-info-left\">金币:</span>" +
"<span class=\"" + (gold >= 0 ? "color-light-green" : "-text-danger") + "\"" + "id=\"grade_value\">" + (gold >= 0 ? ("+ " + gold) : gold) + "</span>" +
"</li>" +
"</ul>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>" +
"</div>";
var $html = $EffectDisplay + $TestResult + $EvaluationInformation;
$("#game_test_set_results").html($html);
}
// end
// $.ajax({
// url: "http://localhost:3000/api/v1/games/zl6kx8f7vfpo",
// // The name of the callback parameter, as specified by the YQL service
// jsonp: "callback",
// // Tell jQuery we're expecting JSONP
// // dataType: "jsonp",
// // Tell YQL what we want and that we want JSON
// data: {
// // q: "select title,abstract,url from search.news where query=\"cat\"",
// format: "json"
// },
// // Work with the response
// success: function( response ) {
// console.log( response ); // server response
// }
// });
// ---------------------------------------------------------------------------------edu_tpi.js START
// ------------------------------------------- application.js
//自动保存草稿
var editor2;
function elocalStorage(editor, mdu, id) {
if (window.sessionStorage) {
editor2 = editor;
var oc = window.sessionStorage.getItem('content' + mdu);
if (oc !== null) {
var h = '您上次有已保存的数据,是否<a style="cursor: pointer;" class="color-orange05" onclick="rec_data(\'content\',\'' + mdu + '\',\'' + id + '\')">恢复</a> ? / <a style="cursor: pointer;" class="color-orange05" onclick="clear_data(\'content\',\'' + mdu + '\',\'' + id + '\')">不恢复</a>';
$("#e_tips_" + id).html(h);
}
setInterval(function () {
d = new Date();
var h = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
h = h < 10 ? '0' + h : h;
m = m < 10 ? '0' + m : m;
s = s < 10 ? '0' + s : s;
editor.sync();
if (!editor.isEmpty()) {
add_data("content", mdu, editor.html());
var id1 = "#e_tip_" + id;
var id2 = "#e_tips_" + id;
$(id1).html(" 数据已于 " + h + ':' + m + ':' + s + " 保存 ");
$(id2).html("");
}
}, 10000);
} else {
$('.ke-edit').after('您的浏览器不支持localStorage.无法开启自动保存草稿服务,请升级浏览器!');
}
}
function add_data(k, mdu, d) {
window.sessionStorage.setItem(k + mdu, d);
}
// 公共弹框样式
// 建议左右栏的Width460Height190
// 建议宽屏对应值Width760Height500
function pop_box_new(value, Width, Height) {
if ($("#popupAll").length > 0) {
$("#popupAll").remove();
}
w = ($(window).width() - Width) / 2;
h = ($(window).height() - Height) / 2;
var html = "<div class=\"popupAll none\" id='popupAll'><div class=\"pr\"><div id=\"popupWrap\"></div></div></div>";
$(document.body).append(html);
$("#popupWrap").html(value);
$('#popupWrap').css({
"top": h + "px",
"left": w + "px",
"padding": "0",
"border": "none",
"position": "fixed",
"z-index": "99999",
"background-color": "#fff",
"border-radius": "10px"
});
$("#popupWrap").parent().parent().show();
$('#popupWrap').find("a[class*='pop_close']").click(function () {
$("#popupAll").hide();
});
// w = ($(window).width() - Width)/2;
// h = ($(window).height() - Height)/2;
// $("#ajax-modal").html(value);
// showModal('ajax-modal', Width + 'px');
// $('#ajax-modal').siblings().remove();
// $('#ajax-modal').parent().css({"top": h+"px","left": w+"px","padding":"0","border":"none","position":"fixed"});
// $('#ajax-modal').parent().removeClass("resourceUploadPopup popbox_polls popbox");
// $('#ajax-modal').css({"padding":"0","overflow":"hidden"});
// $('#ajax-modal').parent().attr("id","popupWrap");
//拖拽
function Drag(id) {
this.div = document.getElementById(id);
if (this.div) {
this.div.style.cursor = "move";
this.div.style.position = "fixed";
}
this.disX = 0;
this.disY = 0;
var _this = this;
this.div.onmousedown = function (evt) {
_this.getDistance(evt);
document.onmousemove = function (evt) {
_this.setPosition(evt);
};
_this.div.onmouseup = function () {
_this.clearEvent();
}
}
}
Drag.prototype.getDistance = function (evt) {
var oEvent = evt || event;
this.disX = oEvent.clientX - this.div.offsetLeft;
this.disY = oEvent.clientY - this.div.offsetTop;
};
Drag.prototype.setPosition = function (evt) {
var oEvent = evt || event;
var l = oEvent.clientX - this.disX;
var t = oEvent.clientY - this.disY;
if (l <= 0) {
l = 0;
} else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) {
l = document.documentElement.clientWidth - this.div.offsetWidth;
}
if (t <= 0) {
t = 0;
} else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) {
t = document.documentElement.clientHeight - this.div.offsetHeight;
}
this.div.style.left = l + "px";
this.div.style.top = t + "px";
};
Drag.prototype.clearEvent = function () {
this.div.onmouseup = null;
document.onmousemove = null;
};
new Drag("popupWrap");
$("#popupWrap input, #popupWrap textarea, #popupWrap ul, #popupWrap a").mousedown(function (event) {
event.stopPropagation();
new Drag("popupWrap");
});
}
function sure_box_redirect_btn(url, str, btnstr) {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="task-popup-OK clearfix">' +
'<a href="' + url + '" class="task-btn task-btn-orange" onclick="hideModal();" target="_blank">' + btnstr + '</a></div></div>';
pop_box_new(htmlvalue, 480, 160);
}
function sure_box_redirect_btn2(url, str, btnstr) {
var htmlvalue = '<div class="task-popup" style="width:500px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3> <a href="javascript:void(0)" id="closeIcon" style="top: -48px;right: -20px;z-index: 100000;"><i class="iconfont icon-shanchudiao"></i></a></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="task-popup-submit clearfix" style="width: 150px"><a href="javascript:void(0);" onclick="hideModal();" class="task-btn fl">取消</a>' +
'<a href="' + url + '" class="task-btn task-btn-orange fr" target="_blank" onclick="hideModal();">' + btnstr + '</a></div></div>';
pop_box_new(htmlvalue, 578, 205);
}
function op_confirm_box_loading(url, str) {
var htmlvalue = '<div class="task-popup" style="width:578px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3> <a href="javascript:void(0)" id="closeIcon" style="top: -48px;right: -20px;z-index: 100000;"><i class="iconfont icon-shanchudiao"></i></a></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16 pt15">' + str + '</p></div><div class="task-popup-submit clearfix"><a href="javascript:void(0);" onclick="hideModal();" class="task-btn fl">取消</a>' +
'<a href="' + url + '" class="task-btn task-btn-orange fr" onclick="hideModal();$(\'.loading_all\').show();">确定</a></div></div>';
pop_box_new(htmlvalue, 578, 205);
}
//点击删除时的确认弹框: 走destroy方法,remote为true
function delete_confirm_box_2(url, str) {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3> <a href="javascript:void(0)" id="closeIcon" style="top: -48px;right: -20px;z-index: 100000;"><i class="iconfont icon-shanchudiao"></i></a></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="task-popup-submit clearfix"><a href="javascript:void(0);" onclick="hideModal();" class="task-btn fl">取消</a>' +
'<a href="' + url + '" class="task-btn task-btn-orange fr pop_close" data-method="delete" data-remote="true">确定</a></div></div>';
pop_box_new(htmlvalue, 480, 160);
}
//提示框:只有一个确定按钮,点击关闭弹框
//<a href="javascript:void(0);" class="pop_close"><i class="fa fa-times-circle font-18 link-color-grey fr mt5"></i></a>
function notice_box(str) {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="task-popup-sure clearfix">' +
'<a href="javascript:void(0);" class="task-btn task-btn-orange" onclick="hideModal();">确定</a></div></div>';
pop_box_new(htmlvalue, 480, 160);
}
// 长提示框:只有一个确定按钮,点击关闭弹框
function long_notice_box(str) {
var htmlvalue = '<div id="muban_popup_box" style="width:380px;"><div class="muban_popup_top"><h3 class="fl">提示</h3><a href="javascript:void(0);" class="muban_icons_close fr"></a></div>' +
'<div class="clear mt15"><p class="text_c f14">' + str + '</p><div class="cl"></div>' +
'<a href="javascript:void(0);" class="fr sy_btn_blue mt10 mr10" onclick="hideModal();" style="margin-right: 164px;">确定</a></div></div>';
pop_box_new(htmlvalue, 380, 140);
}
function hideModal(el) {
if ($("#popupAll").length > 0) {
$("#popupAll").remove();
} else {
var modal;
if (el) {
modal = $(el).parents('.ui-dialog-content');
} else {
modal = $('#ajax-modal');
}
modal.dialog("close");
}
}
// --------------------------------------------
function is_cdn_link(contents) {
if (contents.indexOf("http") != -1
|| contents.indexOf("com") != -1
|| contents.indexOf("net") != -1
|| contents.indexOf("org") != -1
|| contents.indexOf("cdn") != -1) {
return true;
} else {
return false;
}
}
// 渲染用户的HTML的CODE。
function tpi_html_show(newCode) {
//$($(".blacktab_con")[0]).trigger("click");
var contents = newCode;
var $htmlForm = $("#html_form");
var src = contents;
var arrCSS = [];
var arrSript = [];
var patternLink = /<link(?:.*?)href=[\"\](.+?)[\"\](?!<)(?:.*)\>(?:[\n\r\s]*?)(?:<\/link>)*/im;
var patternScript = /<script(?:.*?)src=[\"\](.+?)[\"\](?!<)(?:.*)\>(?:[\n\r\s]*?)(?:<\/script>)*/im;
var arrayMatchesLink = patternLink.exec(src);
var arrayMatchesScript = patternScript.exec(src);
// css部分
while (arrayMatchesLink != null) {
if (is_cdn_link(arrayMatchesLink[1])) {
src = src.replace(arrayMatchesLink[0], arrayMatchesLink[0].replace(/link/, "edulink"));
} else {
src = src.replace(patternLink, "EDUCODERCSS");
arrCSS.push(arrayMatchesLink[1]);
}
arrayMatchesLink = patternLink.exec(src);
}
// js部分
while (arrayMatchesScript != null) {
if (is_cdn_link(arrayMatchesScript[1])) {
src = src.replace(arrayMatchesScript[0], arrayMatchesScript[0].replace(/script/g, "w3scrw3ipttag"));
} else {
src = src.replace(patternScript, "EDUCODERJS");
arrSript.push(arrayMatchesScript[1]);
}
arrayMatchesScript = patternScript.exec(src);
}
// html部分 为了防止xss攻击先将敏感字符转换
src = src.replace(/=/gi, "w3equalsign").replace(/script/gi, "w3scrw3ipttag");
$("#data_param").val(src);
$("#data_css_param").val(arrCSS);
$("#data_js_param").val(arrSript);
// $htmlForm.attr("action", "/iframes/html_content?gpid="+ __myshixun.gpid );
$htmlForm.submit();
}
// 渲染用户的HTML的CODE。--------------------------------------------END
//提示框:只有一个知道啦按钮,点击打开新窗口
//<a href="'+ url +'" class="pop_close"><i class="fa fa-times-circle font-18 link-color-grey fr mt5"></i></a>
function sure_box_redirect(url, str) {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="task-popup-OK clearfix">' +
'<a href="' + url + '" class="task-btn task-btn-orange" onclick="hideModal();" target="_blank">知道啦</a></div></div>';
pop_box_new(htmlvalue, 480, 160);
}
// 长提示框:只有一个“知道啦”按钮,点击关闭弹框
//<a href="javascript:void(0);" class="pop_close"><i class="fa fa-times-circle font-18 link-color-grey fr mt5"></i></a>
function yes_notice_box(str) {
var htmlvalue = '<div class="task-popup" style="width:575px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="task-popup-OK clearfix">' +
'<a href="javascript:void(0);" class="task-btn task-btn-orange" onclick="hideModal();">知道啦</a></div></div>';
pop_box_new(htmlvalue, 575, 200);
}
// --------------------- --------------------- --------------------- --------------------- START
function notice_sure_box(str) {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix"><h3 class="fl color-grey3">提示</h3></div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="task-popup-OK clearfix">' +
'<a href="javascript:void(0);" class="task-btn task-btn-orange" onclick="hideModal();">知道啦</a></div></div>';
pop_box_new(htmlvalue, 480, 160);
}
//点击删除时的确认弹框: 走destroy方法,remote为true
function delete_confirm_box_2_react(url, str, data) {
var htmlvalue = '<div class="task-popup" style="width:480px;"><div class="task-popup-title clearfix">提示</div>' +
'<div class="task-popup-content"><p class="task-popup-text-center font-16">' + str + '</p></div><div class="clearfix edu-txt-center mb20 mt10"><div class="inline"><a href="javascript:void(0);" onclick="hideModal();" class="task-btn fl">取消</a>' +
'<a href="javascript:void(0)" onclick="window._triggerEvent(\'' + url + '\', \'' + encodeURIComponent(JSON.stringify(data)) + '\', $(\'body>#root\')[0])" class="task-btn task-btn-orange pop_close ml20" >确定</a></div></div></div>';
pop_box_new(htmlvalue, 480, 160);
// encodeURIComponent(JSON.stringify(data))
// "$(window.top).trigger(\'' + url +'\', \'' + url + '\')"
}
// https://github.com/facebook/react/issues/3249#issuecomment-177750141
function _triggerEvent(eventName, data, target) {
var event = document.createEvent("HTMLEvents");
event.initEvent(eventName, true, true);
var target = target || document;
// $('body>#root').data(eventName, data)
window[eventName] = data;
target.dispatchEvent(event);
hideModal();
}
// --------------------- --------------------- --------------------- --------------------- END
// ---------------------------------------------------------------------------------------------
$(function () { // 这里重新加一次事件监听,不在原有事件的基础上增加代码了
var doc = $(document);
var lab = $(".b-label");
var cen = $(".h-center");
var dragDom;
var dragging = false;
lab.live('mousedown', function () {
dragging = true;
dragDom = lab;
$('#htmlIframe').css('pointer-events', 'none')
$('#can-drag').show()
lab.hide()
return false;
}
);
cen.live('mousedown', function () {
dragging = true;
dragDom = cen;
// 使得iframe不捕获事件
$('#htmlIframe').css('pointer-events', 'none')
return false;
}
);
doc.live("mousemove", function (e) {
if (dragging === true && lab == dragDom) {
window._tpiWidthResize && window._tpiWidthResize()
// React 组件中需要resize搜索该引用可以找到初始化的位置
window._currentChildcommentMDEditor && window._currentChildcommentMDEditor.resize()
}
})
doc.live("mouseup", function (e) {
lab.show()
// 在大窗口将下边测试集滚动条拖上去后,将窗口缩小,再拖下来就有这种情况 https://www.trustie.net/issues/16326
if (dragging === true) {
$('#can-drag').hide()
window.editor_CodeMirror && window.editor_CodeMirror.refresh()
// 使得iframe可以继续捕获事件
$('#htmlIframe').css('pointer-events', 'inherit')
}
dragging = false;
});
})
// ---------------------------------------------------------------------------------------------
/**
* 评论使用的mdeditor初始化
* @param id 渲染DOM的id
* @param width 宽度
* @param high 高度
* @param placeholder
* @param imageUrl 上传图片的url
* @returns {*} 返回一个editorMD实例
*/
var _path = "/editormd/lib/"
var _isDev = window.location.port === "3007";
if (_isDev) {
_path = 'http://localhost:3000/editormd/lib/'
}
function create_editorMD_4comment(id, width, high, placeholder, imageUrl, callback, otherOptions) {
var editorName = window.editormd(id, Object.assign({
width: width,
height: high,
syncScrolling: "single",
//你的lib目录的路径我这边用JSP做测试的
path: _path, // "/editormd/lib/"
markdown: '',
tex: true,
tocm: true,
emoji: true,
taskList: true,
codeFold: true,
searchReplace: true,
htmlDecode: "style,script,iframe",
sequenceDiagram: true,
autoFocus: false,
toolbarIcons: function () {
// Or return editormd.toolbarModes[name]; // full, simple, mini
// Using "||" set icons align right.
return ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "|"
, "testIcon", "testIcon1", '|', "emoji", "image", "table", '|', "watch", "clear"]
},
toolbarCustomIcons: {
testIcon: "<a type=\"inline\" class=\"latex\" ><div class='zbg'></div></a>",
testIcon1: "<a type=\"latex\" class=\"latex\" ><div class='zbg_latex'></div></a>"
},
//这个配置在simple.html中并没有但是为了能够提交表单使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中方便post提交表单。
saveHTMLToTextarea: true,
// 用于增加自定义工具栏的功能可以直接插入HTML标签不使用默认的元素创建图标
dialogMaskOpacity: 0.6,
placeholder: placeholder,
imageUpload: true,
imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"],
imageUploadURL: imageUrl,//url
onload: function () {
// this.previewing();
$("#" + id + " [type=\"latex\"]").bind("click", function () {
editorName.cm.replaceSelection("```latex");
editorName.cm.replaceSelection("\n");
editorName.cm.replaceSelection("\n");
editorName.cm.replaceSelection("```");
var __Cursor = editorName.cm.getDoc().getCursor();
editorName.cm.setCursor(__Cursor.line - 1, 0);
});
$("#" + id + " [type=\"inline\"]").bind("click", function () {
editorName.cm.replaceSelection("$$$$");
var __Cursor = editorName.cm.getDoc().getCursor();
editorName.cm.setCursor(__Cursor.line, __Cursor.ch - 2);
editorName.cm.focus();
});
$("[type=\"inline\"]").attr("title", "行内公式");
$("[type=\"latex\"]").attr("title", "多行公式");
callback && callback()
}
}, otherOptions));
return editorName;
}
// ---------------------------------------------------------------------------------------------
// md编辑器拖拽改变高度TODO其他初始化参数高度改变阈值...
// 写这里供非react版本时copy一份用
function initMDEditorDragResize(resizeBarSelector, mdEditor, options) {
if (!options) {
options = {}
}
if ($('#' + mdEditor.id).length === 0) {
console.error('未找到editor')
return;
}
var doc = $(document);
var editor__resize = $('#' + mdEditor.id).parent().find(resizeBarSelector);
if (editor__resize.length === 0) {
console.error('未找到resizeBar')
return;
}
var dragging = false;
var topOffset, clickY, initDelta;
var initHeight = options.initHeight || 240;
editor__resize.on('mousedown', function () {
dragging = true;
topOffset = editor__resize.offset().top;
initDelta = $('#' + mdEditor.id).height() - initHeight;
});
doc.live('mousemove', function (e) {
if (dragging) {
clickY = e.pageY;
var delta = clickY - topOffset + initDelta;
if (delta > 300) {
delta = 300;
}
if (delta < 0) {
delta = 0;
}
mdEditor.resize('', (initHeight + delta) + 'px')
// $('#memo_comment_editorMd').height(initHeight + delta)
}
return false
});
doc.live("mouseup", function (e) {
dragging = false;
});
}
// 计算文本宽度 https://stackoverflow.com/questions/1582534/calculating-text-width
function _textWidth(text, font) {
if (!window._fakeEl) window._fakeEl = $('<span>').hide().appendTo(document.body);
window._fakeEl.text(typeof text == 'object' ? text.val() || text.text() : text).css('font', font || text.css('font'));
return window._fakeEl.width();
}