kefu/public/static/common/js/drag.js

1 line
268 KiB
JavaScript

!function (e, t) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function (C, e) { "use strict"; function g(e) { return null != e && e === e.window } var t = [], k = C.document, i = Object.getPrototypeOf, s = t.slice, m = t.concat, l = t.push, a = t.indexOf, n = {}, o = n.toString, v = n.hasOwnProperty, r = v.toString, c = r.call(Object), b = {}, y = function (e) { return "function" == typeof e && "number" != typeof e.nodeType }, d = { type: !0, src: !0, nonce: !0, noModule: !0 }; function w(e, t, n) { var i, a, o = (n = n || k).createElement("script"); if (o.text = e, t) for (i in d) (a = t[i] || t.getAttribute && t.getAttribute(i)) && o.setAttribute(i, a); n.head.appendChild(o).parentNode.removeChild(o) } function x(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e } var u = "3.4.1", T = function (e, t) { return new T.fn.init(e, t) }, p = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; function f(e) { var t = !!e && "length" in e && e.length, n = x(e); return !y(e) && !g(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e) } T.fn = T.prototype = { jquery: u, constructor: T, length: 0, toArray: function () { return s.call(this) }, get: function (e) { return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e] }, pushStack: function (e) { var t = T.merge(this.constructor(), e); return t.prevObject = this, t }, each: function (e) { return T.each(this, e) }, map: function (n) { return this.pushStack(T.map(this, function (e, t) { return n.call(e, t, e) })) }, slice: function () { return this.pushStack(s.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(0 <= n && n < t ? [this[n]] : []) }, end: function () { return this.prevObject || this.constructor() }, push: l, sort: t.sort, splice: t.splice }, T.extend = T.fn.extend = function () { var e, t, n, i, a, o, r = arguments[0] || {}, s = 1, l = arguments.length, c = !1; for ("boolean" == typeof r && (c = r, r = arguments[s] || {}, s++), "object" == typeof r || y(r) || (r = {}), s === l && (r = this, s--); s < l; s++)if (null != (e = arguments[s])) for (t in e) i = e[t], "__proto__" !== t && r !== i && (c && i && (T.isPlainObject(i) || (a = Array.isArray(i))) ? (n = r[t], o = a && !Array.isArray(n) ? [] : a || T.isPlainObject(n) ? n : {}, a = !1, r[t] = T.extend(c, o, i)) : void 0 !== i && (r[t] = i)); return r }, T.extend({ expando: "jQuery" + (u + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e) }, noop: function () { }, isPlainObject: function (e) { var t, n; return !(!e || "[object Object]" !== o.call(e) || (t = i(e)) && ("function" != typeof (n = v.call(t, "constructor") && t.constructor) || r.call(n) !== c)) }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0 }, globalEval: function (e, t) { w(e, { nonce: t && t.nonce }) }, each: function (e, t) { var n, i = 0; if (f(e)) for (n = e.length; i < n && !1 !== t.call(e[i], i, e[i]); i++); else for (i in e) if (!1 === t.call(e[i], i, e[i])) break; return e }, trim: function (e) { return null == e ? "" : (e + "").replace(p, "") }, makeArray: function (e, t) { var n = t || []; return null != e && (f(Object(e)) ? T.merge(n, "string" == typeof e ? [e] : e) : l.call(n, e)), n }, inArray: function (e, t, n) { return null == t ? -1 : a.call(t, e, n) }, merge: function (e, t) { for (var n = +t.length, i = 0, a = e.length; i < n; i++)e[a++] = t[i]; return e.length = a, e }, grep: function (e, t, n) { for (var i = [], a = 0, o = e.length, r = !n; a < o; a++)!t(e[a], a) != r && i.push(e[a]); return i }, map: function (e, t, n) { var i, a, o = 0, r = []; if (f(e)) for (i = e.length; o < i; o++)null != (a = t(e[o], o, n)) && r.push(a); else for (o in e) null != (a = t(e[o], o, n)) && r.push(a); return m.apply([], r) }, guid: 1, support: b }), "function" == typeof Symbol && (T.fn[Symbol.iterator] = t[Symbol.iterator]), T.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { n["[object " + t + "]"] = t.toLowerCase() }); var h = function (n) { function u(e, t, n) { var i = "0x" + t - 65536; return i != i || n ? t : i < 0 ? String.fromCharCode(65536 + i) : String.fromCharCode(i >> 10 | 55296, 1023 & i | 56320) } function a() { $() } var e, f, w, o, r, h, p, g, x, l, c, $, C, s, k, m, d, v, b, T = "sizzle" + 1 * new Date, y = n.document, H = 0, i = 0, j = le(), W = le(), _ = le(), S = le(), E = function (e, t) { return e === t && (c = !0), 0 }, M = {}.hasOwnProperty, t = [], A = t.pop, P = t.push, I = t.push, q = t.slice, L = function (e, t) { for (var n = 0, i = e.length; n < i; n++)if (e[n] === t) return n; return -1 }, D = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", O = "[\\x20\\t\\r\\n\\f]", F = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", z = "\\[" + O + "*(" + F + ")(?:" + O + "*([*^$|!~]?=)" + O + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + F + "))|)" + O + "*\\]", N = ":(" + F + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + z + ")*)|.*)\\)|)", R = new RegExp(O + "+", "g"), X = new RegExp("^" + O + "+|((?:^|[^\\\\])(?:\\\\.)*)" + O + "+$", "g"), B = new RegExp("^" + O + "*," + O + "*"), G = new RegExp("^" + O + "*([>+~]|" + O + ")" + O + "*"), V = new RegExp(O + "|>"), Y = new RegExp(N), U = new RegExp("^" + F + "$"), Q = { ID: new RegExp("^#(" + F + ")"), CLASS: new RegExp("^\\.(" + F + ")"), TAG: new RegExp("^(" + F + "|[*])"), ATTR: new RegExp("^" + z), PSEUDO: new RegExp("^" + N), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + O + "*(even|odd|(([+-]|)(\\d*)n|)" + O + "*(?:([+-]|)" + O + "*(\\d+)|))" + O + "*\\)|)", "i"), bool: new RegExp("^(?:" + D + ")$", "i"), needsContext: new RegExp("^" + O + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + O + "*((?:-\\d)?\\d*)" + O + "*\\)|)(?=[^-]|$)", "i") }, Z = /HTML$/i, K = /^(?:input|select|textarea|button)$/i, J = /^h\d$/i, ee = /^[^{]+\{\s*\[native \w/, te = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ne = /[+~]/, ie = new RegExp("\\\\([\\da-f]{1,6}" + O + "?|(" + O + ")|.)", "ig"), ae = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, oe = function (e, t) { return t ? "\0" === e ? "�" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e }, re = we(function (e) { return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase() }, { dir: "parentNode", next: "legend" }); try { I.apply(t = q.call(y.childNodes), y.childNodes), t[y.childNodes.length].nodeType } catch (e) { I = { apply: t.length ? function (e, t) { P.apply(e, q.call(t)) } : function (e, t) { for (var n = e.length, i = 0; e[n++] = t[i++];); e.length = n - 1 } } } function se(e, t, n, i) { var a, o, r, s, l, c, d, u = t && t.ownerDocument, p = t ? t.nodeType : 9; if (n = n || [], "string" != typeof e || !e || 1 !== p && 9 !== p && 11 !== p) return n; if (!i && ((t ? t.ownerDocument || t : y) !== C && $(t), t = t || C, k)) { if (11 !== p && (l = te.exec(e))) if (a = l[1]) { if (9 === p) { if (!(r = t.getElementById(a))) return n; if (r.id === a) return n.push(r), n } else if (u && (r = u.getElementById(a)) && b(t, r) && r.id === a) return n.push(r), n } else { if (l[2]) return I.apply(n, t.getElementsByTagName(e)), n; if ((a = l[3]) && f.getElementsByClassName && t.getElementsByClassName) return I.apply(n, t.getElementsByClassName(a)), n } if (f.qsa && !S[e + " "] && (!m || !m.test(e)) && (1 !== p || "object" !== t.nodeName.toLowerCase())) { if (d = e, u = t, 1 === p && V.test(e)) { for ((s = t.getAttribute("id")) ? s = s.replace(ae, oe) : t.setAttribute("id", s = T), o = (c = h(e)).length; o--;)c[o] = "#" + s + " " + ye(c[o]); d = c.join(","), u = ne.test(e) && ve(t.parentNode) || t } try { return I.apply(n, u.querySelectorAll(d)), n } catch (t) { S(e, !0) } finally { s === T && t.removeAttribute("id") } } } return g(e.replace(X, "$1"), t, n, i) } function le() { var i = []; return function e(t, n) { return i.push(t + " ") > w.cacheLength && delete e[i.shift()], e[t + " "] = n } } function ce(e) { return e[T] = !0, e } function de(e) { var t = C.createElement("fieldset"); try { return !!e(t) } catch (e) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } function ue(e, t) { for (var n = e.split("|"), i = n.length; i--;)w.attrHandle[n[i]] = t } function pe(e, t) { var n = t && e, i = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex; if (i) return i; if (n) for (; n = n.nextSibling;)if (n === t) return -1; return e ? 1 : -1 } function fe(t) { return function (e) { return "input" === e.nodeName.toLowerCase() && e.type === t } } function he(n) { return function (e) { var t = e.nodeName.toLowerCase(); return ("input" === t || "button" === t) && e.type === n } } function ge(t) { return function (e) { return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && re(e) === t : e.disabled === t : "label" in e && e.disabled === t } } function me(r) { return ce(function (o) { return o = +o, ce(function (e, t) { for (var n, i = r([], e.length, o), a = i.length; a--;)e[n = i[a]] && (e[n] = !(t[n] = e[n])) }) }) } function ve(e) { return e && void 0 !== e.getElementsByTagName && e } for (e in f = se.support = {}, r = se.isXML = function (e) { var t = e.namespaceURI, n = (e.ownerDocument || e).documentElement; return !Z.test(t || n && n.nodeName || "HTML") }, $ = se.setDocument = function (e) { var t, n, i = e ? e.ownerDocument || e : y; return i !== C && 9 === i.nodeType && i.documentElement && (s = (C = i).documentElement, k = !r(C), y !== C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", a, !1) : n.attachEvent && n.attachEvent("onunload", a)), f.attributes = de(function (e) { return e.className = "i", !e.getAttribute("className") }), f.getElementsByTagName = de(function (e) { return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length }), f.getElementsByClassName = ee.test(C.getElementsByClassName), f.getById = de(function (e) { return s.appendChild(e).id = T, !C.getElementsByName || !C.getElementsByName(T).length }), f.getById ? (w.filter.ID = function (e) { var t = e.replace(ie, u); return function (e) { return e.getAttribute("id") === t } }, w.find.ID = function (e, t) { if (void 0 !== t.getElementById && k) { var n = t.getElementById(e); return n ? [n] : [] } }) : (w.filter.ID = function (e) { var n = e.replace(ie, u); return function (e) { var t = void 0 !== e.getAttributeNode && e.getAttributeNode("id"); return t && t.value === n } }, w.find.ID = function (e, t) { if (void 0 !== t.getElementById && k) { var n, i, a, o = t.getElementById(e); if (o) { if ((n = o.getAttributeNode("id")) && n.value === e) return [o]; for (a = t.getElementsByName(e), i = 0; o = a[i++];)if ((n = o.getAttributeNode("id")) && n.value === e) return [o] } return [] } }), w.find.TAG = f.getElementsByTagName ? function (e, t) { return void 0 !== t.getElementsByTagName ? t.getElementsByTagName(e) : f.qsa ? t.querySelectorAll(e) : void 0 } : function (e, t) { var n, i = [], a = 0, o = t.getElementsByTagName(e); if ("*" !== e) return o; for (; n = o[a++];)1 === n.nodeType && i.push(n); return i }, w.find.CLASS = f.getElementsByClassName && function (e, t) { if (void 0 !== t.getElementsByClassName && k) return t.getElementsByClassName(e) }, d = [], m = [], (f.qsa = ee.test(C.querySelectorAll)) && (de(function (e) { s.appendChild(e).innerHTML = "<a id='" + T + "'></a><select id='" + T + "-\r\\' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && m.push("[*^$]=" + O + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || m.push("\\[" + O + "*(?:value|" + D + ")"), e.querySelectorAll("[id~=" + T + "-]").length || m.push("~="), e.querySelectorAll(":checked").length || m.push(":checked"), e.querySelectorAll("a#" + T + "+*").length || m.push(".#.+[+~]") }), de(function (e) { e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>"; var t = C.createElement("input"); t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && m.push("name" + O + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && m.push(":enabled", ":disabled"), s.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && m.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), m.push(",.*:") })), (f.matchesSelector = ee.test(v = s.matches || s.webkitMatchesSelector || s.mozMatchesSelector || s.oMatchesSelector || s.msMatchesSelector)) && de(function (e) { f.disconnectedMatch = v.call(e, "*"), v.call(e, "[s!='']:x"), d.push("!=", N) }), m = m.length && new RegExp(m.join("|")), d = d.length && new RegExp(d.join("|")), t = ee.test(s.compareDocumentPosition), b = t || ee.test(s.contains) ? function (e, t) { var n = 9 === e.nodeType ? e.documentElement : e, i = t && t.parentNode; return e === i || !(!i || 1 !== i.nodeType || !(n.contains ? n.contains(i) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(i))) } : function (e, t) { if (t) for (; t = t.parentNode;)if (t === e) return !0; return !1 }, E = t ? function (e, t) { if (e === t) return c = !0, 0; var n = !e.compareDocumentPosition - !t.compareDocumentPosition; return n || (1 & (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !f.sortDetached && t.compareDocumentPosition(e) === n ? e === C || e.ownerDocument === y && b(y, e) ? -1 : t === C || t.ownerDocument === y && b(y, t) ? 1 : l ? L(l, e) - L(l, t) : 0 : 4 & n ? -1 : 1) } : function (e, t) { if (e === t) return c = !0, 0; var n, i = 0, a = e.parentNode, o = t.parentNode, r = [e], s = [t]; if (!a || !o) return e === C ? -1 : t === C ? 1 : a ? -1 : o ? 1 : l ? L(l, e) - L(l, t) : 0; if (a === o) return pe(e, t); for (n = e; n = n.parentNode;)r.unshift(n); for (n = t; n = n.parentNode;)s.unshift(n); for (; r[i] === s[i];)i++; return i ? pe(r[i], s[i]) : r[i] === y ? -1 : s[i] === y ? 1 : 0 }), C }, se.matches = function (e, t) { return se(e, null, null, t) }, se.matchesSelector = function (e, t) { if ((e.ownerDocument || e) !== C && $(e), f.matchesSelector && k && !S[t + " "] && (!d || !d.test(t)) && (!m || !m.test(t))) try { var n = v.call(e, t); if (n || f.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n } catch (e) { S(t, !0) } return 0 < se(t, C, null, [e]).length }, se.contains = function (e, t) { return (e.ownerDocument || e) !== C && $(e), b(e, t) }, se.attr = function (e, t) { (e.ownerDocument || e) !== C && $(e); var n = w.attrHandle[t.toLowerCase()], i = n && M.call(w.attrHandle, t.toLowerCase()) ? n(e, t, !k) : void 0; return void 0 !== i ? i : f.attributes || !k ? e.getAttribute(t) : (i = e.getAttributeNode(t)) && i.specified ? i.value : null }, se.escape = function (e) { return (e + "").replace(ae, oe) }, se.error = function (e) { throw new Error("Syntax error, unrecognized expression: " + e) }, se.uniqueSort = function (e) { var t, n = [], i = 0, a = 0; if (c = !f.detectDuplicates, l = !f.sortStable && e.slice(0), e.sort(E), c) { for (; t = e[a++];)t === e[a] && (i = n.push(a)); for (; i--;)e.splice(n[i], 1) } return l = null, e }, o = se.getText = function (e) { var t, n = "", i = 0, a = e.nodeType; if (a) { if (1 === a || 9 === a || 11 === a) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling)n += o(e) } else if (3 === a || 4 === a) return e.nodeValue } else for (; t = e[i++];)n += o(t); return n }, (w = se.selectors = { cacheLength: 50, createPseudo: ce, match: Q, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return e[1] = e[1].replace(ie, u), e[3] = (e[3] || e[4] || e[5] || "").replace(ie, u), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) }, CHILD: function (e) { return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e }, PSEUDO: function (e) { var t, n = !e[6] && e[2]; return Q.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && Y.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) } }, filter: { TAG: function (e) { var t = e.replace(ie, u).toLowerCase(); return "*" === e ? function () { return !0 } : function (e) { return e.nodeName && e.nodeName.toLowerCase() === t } }, CLASS: function (e) { var t = j[e + " "]; return t || (t = new RegExp("(^|" + O + ")" + e + "(" + O + "|$)")) && j(e, function (e) { return t.test("string" == typeof e.className && e.className || void 0 !== e.getAttribute && e.getAttribute("class") || "") }) }, ATTR: function (n, i, a) { return function (e) { var t = se.attr(e, n); return null == t ? "!=" === i : !i || (t += "", "=" === i ? t === a : "!=" === i ? t !== a : "^=" === i ? a && 0 === t.indexOf(a) : "*=" === i ? a && -1 < t.indexOf(a) : "$=" === i ? a && t.slice(-a.length) === a : "~=" === i ? -1 < (" " + t.replace(R, " ") + " ").indexOf(a) : "|=" === i && (t === a || t.slice(0, a.length + 1) === a + "-")) } }, CHILD: function (h, e, t, g, m) { var v = "nth" !== h.slice(0, 3), b = "last" !== h.slice(-4), y = "of-type" === e; return 1 === g && 0 === m ? function (e) { return !!e.parentNode } : function (e, t, n) { var i, a, o, r, s, l, c = v != b ? "nextSibling" : "previousSibling", d = e.parentNode, u = y && e.nodeName.toLowerCase(), p = !n && !y, f = !1; if (d) { if (v) { for (; c;) { for (r = e; r = r[c];)if (y ? r.nodeName.toLowerCase() === u : 1 === r.nodeType) return !1; l = c = "only" === h && !l && "nextSibling" } return !0 } if (l = [b ? d.firstChild : d.lastChild], b && p) { for (f = (s = (i = (a = (o = (r = d)[T] || (r[T] = {}))[r.uniqueID] || (o[r.uniqueID] = {}))[h] || [])[0] === H && i[1]) && i[2], r = s && d.childNodes[s]; r = ++s && r && r[c] || (f = s = 0) || l.pop();)if (1 === r.nodeType && ++f && r === e) { a[h] = [H, s, f]; break } } else if (p && (f = s = (i = (a = (o = (r = e)[T] || (r[T] = {}))[r.uniqueID] || (o[r.uniqueID] = {}))[h] || [])[0] === H && i[1]), !1 === f) for (; (r = ++s && r && r[c] || (f = s = 0) || l.pop()) && ((y ? r.nodeName.toLowerCase() !== u : 1 !== r.nodeType) || !++f || (p && ((a = (o = r[T] || (r[T] = {}))[r.uniqueID] || (o[r.uniqueID] = {}))[h] = [H, f]), r !== e));); return (f -= m) === g || f % g == 0 && 0 <= f / g } } }, PSEUDO: function (e, o) { var t, r = w.pseudos[e] || w.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e); return r[T] ? r(o) : 1 < r.length ? (t = [e, e, "", o], w.setFilters.hasOwnProperty(e.toLowerCase()) ? ce(function (e, t) { for (var n, i = r(e, o), a = i.length; a--;)e[n = L(e, i[a])] = !(t[n] = i[a]) }) : function (e) { return r(e, 0, t) }) : r } }, pseudos: { not: ce(function (e) { var i = [], a = [], s = p(e.replace(X, "$1")); return s[T] ? ce(function (e, t, n, i) { for (var a, o = s(e, null, i, []), r = e.length; r--;)(a = o[r]) && (e[r] = !(t[r] = a)) }) : function (e, t, n) { return i[0] = e, s(i, null, n, a), i[0] = null, !a.pop() } }), has: ce(function (t) { return function (e) { return 0 < se(t, e).length } }), contains: ce(function (t) { return t = t.replace(ie, u), function (e) { return -1 < (e.textContent || o(e)).indexOf(t) } }), lang: ce(function (n) { return U.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(ie, u).toLowerCase(), function (e) { var t; do { if (t = k ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-") } while ((e = e.parentNode) && 1 === e.nodeType); return !1 } }), target: function (e) { var t = n.location && n.location.hash; return t && t.slice(1) === e.id }, root: function (e) { return e === s }, focus: function (e) { return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) }, enabled: ge(!1), disabled: ge(!0), checked: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && !!e.checked || "option" === t && !!e.selected }, selected: function (e) { return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling)if (e.nodeType < 6) return !1; return !0 }, parent: function (e) { return !w.pseudos.empty(e) }, header: function (e) { return J.test(e.nodeName) }, input: function (e) { return K.test(e.nodeName) }, button: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && "button" === e.type || "button" === t }, text: function (e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) }, first: me(function () { return [0] }), last: me(function (e, t) { return [t - 1] }), eq: me(function (e, t, n) { return [n < 0 ? n + t : n] }), even: me(function (e, t) { for (var n = 0; n < t; n += 2)e.push(n); return e }), odd: me(function (e, t) { for (var n = 1; n < t; n += 2)e.push(n); return e }), lt: me(function (e, t, n) { for (var i = n < 0 ? n + t : t < n ? t : n; 0 <= --i;)e.push(i); return e }), gt: me(function (e, t, n) { for (var i = n < 0 ? n + t : n; ++i < t;)e.push(i); return e }) } }).pseudos.nth = w.pseudos.eq, { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) w.pseudos[e] = fe(e); for (e in { submit: !0, reset: !0 }) w.pseudos[e] = he(e); function be() { } function ye(e) { for (var t = 0, n = e.length, i = ""; t < n; t++)i += e[t].value; return i } function we(s, e, t) { var l = e.dir, c = e.next, d = c || l, u = t && "parentNode" === d, p = i++; return e.first ? function (e, t, n) { for (; e = e[l];)if (1 === e.nodeType || u) return s(e, t, n); return !1 } : function (e, t, n) { var i, a, o, r = [H, p]; if (n) { for (; e = e[l];)if ((1 === e.nodeType || u) && s(e, t, n)) return !0 } else for (; e = e[l];)if (1 === e.nodeType || u) if (a = (o = e[T] || (e[T] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), c && c === e.nodeName.toLowerCase()) e = e[l] || e; else { if ((i = a[d]) && i[0] === H && i[1] === p) return r[2] = i[2]; if ((a[d] = r)[2] = s(e, t, n)) return !0 } return !1 } } function xe(a) { return 1 < a.length ? function (e, t, n) { for (var i = a.length; i--;)if (!a[i](e, t, n)) return !1; return !0 } : a[0] } function $e(e, t, n, i, a) { for (var o, r = [], s = 0, l = e.length, c = null != t; s < l; s++)(o = e[s]) && (n && !n(o, i, a) || (r.push(o), c && t.push(s))); return r } function Ce(f, h, g, m, v, e) { return m && !m[T] && (m = Ce(m)), v && !v[T] && (v = Ce(v, e)), ce(function (e, t, n, i) { var a, o, r, s = [], l = [], c = t.length, d = e || function (e, t, n) { for (var i = 0, a = t.length; i < a; i++)se(e, t[i], n); return n }(h || "*", n.nodeType ? [n] : n, []), u = !f || !e && h ? d : $e(d, s, f, n, i), p = g ? v || (e ? f : c || m) ? [] : t : u; if (g && g(u, p, n, i), m) for (a = $e(p, l), m(a, [], n, i), o = a.length; o--;)(r = a[o]) && (p[l[o]] = !(u[l[o]] = r)); if (e) { if (v || f) { if (v) { for (a = [], o = p.length; o--;)(r = p[o]) && a.push(u[o] = r); v(null, p = [], a, i) } for (o = p.length; o--;)(r = p[o]) && -1 < (a = v ? L(e, r) : s[o]) && (e[a] = !(t[a] = r)) } } else p = $e(p === t ? p.splice(c, p.length) : p), v ? v(null, t, p, i) : I.apply(t, p) }) } function ke(e) { for (var a, t, n, i = e.length, o = w.relative[e[0].type], r = o || w.relative[" "], s = o ? 1 : 0, l = we(function (e) { return e === a }, r, !0), c = we(function (e) { return -1 < L(a, e) }, r, !0), d = [function (e, t, n) { var i = !o && (n || t !== x) || ((a = t).nodeType ? l(e, t, n) : c(e, t, n)); return a = null, i }]; s < i; s++)if (t = w.relative[e[s].type]) d = [we(xe(d), t)]; else { if ((t = w.filter[e[s].type].apply(null, e[s].matches))[T]) { for (n = ++s; n < i && !w.relative[e[n].type]; n++); return Ce(1 < s && xe(d), 1 < s && ye(e.slice(0, s - 1).concat({ value: " " === e[s - 2].type ? "*" : "" })).replace(X, "$1"), t, s < n && ke(e.slice(s, n)), n < i && ke(e = e.slice(n)), n < i && ye(e)) } d.push(t) } return xe(d) } return be.prototype = w.filters = w.pseudos, w.setFilters = new be, h = se.tokenize = function (e, t) { var n, i, a, o, r, s, l, c = W[e + " "]; if (c) return t ? 0 : c.slice(0); for (r = e, s = [], l = w.preFilter; r;) { for (o in n && !(i = B.exec(r)) || (i && (r = r.slice(i[0].length) || r), s.push(a = [])), n = !1, (i = G.exec(r)) && (n = i.shift(), a.push({ value: n, type: i[0].replace(X, " ") }), r = r.slice(n.length)), w.filter) !(i = Q[o].exec(r)) || l[o] && !(i = l[o](i)) || (n = i.shift(), a.push({ value: n, type: o, matches: i }), r = r.slice(n.length)); if (!n) break } return t ? r.length : r ? se.error(e) : W(e, s).slice(0) }, p = se.compile = function (e, t) { var n, m, v, b, y, i, a = [], o = [], r = _[e + " "]; if (!r) { for (n = (t = t || h(e)).length; n--;)(r = ke(t[n]))[T] ? a.push(r) : o.push(r); (r = _(e, (m = o, b = 0 < (v = a).length, y = 0 < m.length, i = function (e, t, n, i, a) { var o, r, s, l = 0, c = "0", d = e && [], u = [], p = x, f = e || y && w.find.TAG("*", a), h = H += null == p ? 1 : Math.random() || .1, g = f.length; for (a && (x = t === C || t || a); c !== g && null != (o = f[c]); c++) { if (y && o) { for (r = 0, t || o.ownerDocument === C || ($(o), n = !k); s = m[r++];)if (s(o, t || C, n)) { i.push(o); break } a && (H = h) } b && ((o = !s && o) && l-- , e && d.push(o)) } if (l += c, b && c !== l) { for (r = 0; s = v[r++];)s(d, u, t, n); if (e) { if (0 < l) for (; c--;)d[c] || u[c] || (u[c] = A.call(i)); u = $e(u) } I.apply(i, u), a && !e && 0 < u.length && 1 < l + v.length && se.uniqueSort(i) } return a && (H = h, x = p), d }, b ? ce(i) : i))).selector = e } return r }, g = se.select = function (e, t, n, i) { var a, o, r, s, l, c = "function" == typeof e && e, d = !i && h(e = c.selector || e); if (n = n || [], 1 === d.length) { if (2 < (o = d[0] = d[0].slice(0)).length && "ID" === (r = o[0]).type && 9 === t.nodeType && k && w.relative[o[1].type]) { if (!(t = (w.find.ID(r.matches[0].replace(ie, u), t) || [])[0])) return n; c && (t = t.parentNode), e = e.slice(o.shift().value.length) } for (a = Q.needsContext.test(e) ? 0 : o.length; a-- && (r = o[a], !w.relative[s = r.type]);)if ((l = w.find[s]) && (i = l(r.matches[0].replace(ie, u), ne.test(o[0].type) && ve(t.parentNode) || t))) { if (o.splice(a, 1), !(e = i.length && ye(o))) return I.apply(n, i), n; break } } return (c || p(e, d))(i, t, !k, n, !t || ne.test(e) && ve(t.parentNode) || t), n }, f.sortStable = T.split("").sort(E).join("") === T, f.detectDuplicates = !!c, $(), f.sortDetached = de(function (e) { return 1 & e.compareDocumentPosition(C.createElement("fieldset")) }), de(function (e) { return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href") }) || ue("type|href|height|width", function (e, t, n) { if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) }), f.attributes && de(function (e) { return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") }) || ue("value", function (e, t, n) { if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue }), de(function (e) { return null == e.getAttribute("disabled") }) || ue(D, function (e, t, n) { var i; if (!n) return !0 === e[t] ? t.toLowerCase() : (i = e.getAttributeNode(t)) && i.specified ? i.value : null }), se }(C); T.find = h, T.expr = h.selectors, T.expr[":"] = T.expr.pseudos, T.uniqueSort = T.unique = h.uniqueSort, T.text = h.getText, T.isXMLDoc = h.isXML, T.contains = h.contains, T.escapeSelector = h.escape; function $(e, t, n) { for (var i = [], a = void 0 !== n; (e = e[t]) && 9 !== e.nodeType;)if (1 === e.nodeType) { if (a && T(e).is(n)) break; i.push(e) } return i } function H(e, t) { for (var n = []; e; e = e.nextSibling)1 === e.nodeType && e !== t && n.push(e); return n } var j = T.expr.match.needsContext; function W(e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() } var _ = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; function S(e, n, i) { return y(n) ? T.grep(e, function (e, t) { return !!n.call(e, t, e) !== i }) : n.nodeType ? T.grep(e, function (e) { return e === n !== i }) : "string" != typeof n ? T.grep(e, function (e) { return -1 < a.call(n, e) !== i }) : T.filter(n, e, i) } T.filter = function (e, t, n) { var i = t[0]; return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === i.nodeType ? T.find.matchesSelector(i, e) ? [i] : [] : T.find.matches(e, T.grep(t, function (e) { return 1 === e.nodeType })) }, T.fn.extend({ find: function (e) { var t, n, i = this.length, a = this; if ("string" != typeof e) return this.pushStack(T(e).filter(function () { for (t = 0; t < i; t++)if (T.contains(a[t], this)) return !0 })); for (n = this.pushStack([]), t = 0; t < i; t++)T.find(e, a[t], n); return 1 < i ? T.uniqueSort(n) : n }, filter: function (e) { return this.pushStack(S(this, e || [], !1)) }, not: function (e) { return this.pushStack(S(this, e || [], !0)) }, is: function (e) { return !!S(this, "string" == typeof e && j.test(e) ? T(e) : e || [], !1).length } }); var E, M = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; (T.fn.init = function (e, t, n) { var i, a; if (!e) return this; if (n = n || E, "string" != typeof e) return e.nodeType ? (this[0] = e, this.length = 1, this) : y(e) ? void 0 !== n.ready ? n.ready(e) : e(T) : T.makeArray(e, this); if (!(i = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : M.exec(e)) || !i[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (i[1]) { if (t = t instanceof T ? t[0] : t, T.merge(this, T.parseHTML(i[1], t && t.nodeType ? t.ownerDocument || t : k, !0)), _.test(i[1]) && T.isPlainObject(t)) for (i in t) y(this[i]) ? this[i](t[i]) : this.attr(i, t[i]); return this } return (a = k.getElementById(i[2])) && (this[0] = a, this.length = 1), this }).prototype = T.fn, E = T(k); var A = /^(?:parents|prev(?:Until|All))/, P = { children: !0, contents: !0, next: !0, prev: !0 }; function I(e, t) { for (; (e = e[t]) && 1 !== e.nodeType;); return e } T.fn.extend({ has: function (e) { var t = T(e, this), n = t.length; return this.filter(function () { for (var e = 0; e < n; e++)if (T.contains(this, t[e])) return !0 }) }, closest: function (e, t) { var n, i = 0, a = this.length, o = [], r = "string" != typeof e && T(e); if (!j.test(e)) for (; i < a; i++)for (n = this[i]; n && n !== t; n = n.parentNode)if (n.nodeType < 11 && (r ? -1 < r.index(n) : 1 === n.nodeType && T.find.matchesSelector(n, e))) { o.push(n); break } return this.pushStack(1 < o.length ? T.uniqueSort(o) : o) }, index: function (e) { return e ? "string" == typeof e ? a.call(T(e), this[0]) : a.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (e, t) { return this.pushStack(T.uniqueSort(T.merge(this.get(), T(e, t)))) }, addBack: function (e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) } }), T.each({ parent: function (e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null }, parents: function (e) { return $(e, "parentNode") }, parentsUntil: function (e, t, n) { return $(e, "parentNode", n) }, next: function (e) { return I(e, "nextSibling") }, prev: function (e) { return I(e, "previousSibling") }, nextAll: function (e) { return $(e, "nextSibling") }, prevAll: function (e) { return $(e, "previousSibling") }, nextUntil: function (e, t, n) { return $(e, "nextSibling", n) }, prevUntil: function (e, t, n) { return $(e, "previousSibling", n) }, siblings: function (e) { return H((e.parentNode || {}).firstChild, e) }, children: function (e) { return H(e.firstChild) }, contents: function (e) { return void 0 !== e.contentDocument ? e.contentDocument : (W(e, "template") && (e = e.content || e), T.merge([], e.childNodes)) } }, function (i, a) { T.fn[i] = function (e, t) { var n = T.map(this, a, e); return "Until" !== i.slice(-5) && (t = e), t && "string" == typeof t && (n = T.filter(t, n)), 1 < this.length && (P[i] || T.uniqueSort(n), A.test(i) && n.reverse()), this.pushStack(n) } }); var q = /[^\x20\t\r\n\f]+/g; function L(e) { return e } function D(e) { throw e } function O(e, t, n, i) { var a; try { e && y(a = e.promise) ? a.call(e).done(t).fail(n) : e && y(a = e.then) ? a.call(e, t, n) : t.apply(void 0, [e].slice(i)) } catch (e) { n.apply(void 0, [e]) } } T.Callbacks = function (i) { var e, n; i = "string" == typeof i ? (e = i, n = {}, T.each(e.match(q) || [], function (e, t) { n[t] = !0 }), n) : T.extend({}, i); function a() { for (s = s || i.once, r = o = !0; c.length; d = -1)for (t = c.shift(); ++d < l.length;)!1 === l[d].apply(t[0], t[1]) && i.stopOnFalse && (d = l.length, t = !1); i.memory || (t = !1), o = !1, s && (l = t ? [] : "") } var o, t, r, s, l = [], c = [], d = -1, u = { add: function () { return l && (t && !o && (d = l.length - 1, c.push(t)), function n(e) { T.each(e, function (e, t) { y(t) ? i.unique && u.has(t) || l.push(t) : t && t.length && "string" !== x(t) && n(t) }) }(arguments), t && !o && a()), this }, remove: function () { return T.each(arguments, function (e, t) { for (var n; -1 < (n = T.inArray(t, l, n));)l.splice(n, 1), n <= d && d-- }), this }, has: function (e) { return e ? -1 < T.inArray(e, l) : 0 < l.length }, empty: function () { return l = l && [], this }, disable: function () { return s = c = [], l = t = "", this }, disabled: function () { return !l }, lock: function () { return s = c = [], t || o || (l = t = ""), this }, locked: function () { return !!s }, fireWith: function (e, t) { return s || (t = [e, (t = t || []).slice ? t.slice() : t], c.push(t), o || a()), this }, fire: function () { return u.fireWith(this, arguments), this }, fired: function () { return !!r } }; return u }, T.extend({ Deferred: function (e) { var o = [["notify", "progress", T.Callbacks("memory"), T.Callbacks("memory"), 2], ["resolve", "done", T.Callbacks("once memory"), T.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", T.Callbacks("once memory"), T.Callbacks("once memory"), 1, "rejected"]], a = "pending", r = { state: function () { return a }, always: function () { return s.done(arguments).fail(arguments), this }, catch: function (e) { return r.then(null, e) }, pipe: function () { var a = arguments; return T.Deferred(function (i) { T.each(o, function (e, t) { var n = y(a[t[4]]) && a[t[4]]; s[t[1]](function () { var e = n && n.apply(this, arguments); e && y(e.promise) ? e.promise().progress(i.notify).done(i.resolve).fail(i.reject) : i[t[0] + "With"](this, n ? [e] : arguments) }) }), a = null }).promise() }, then: function (t, n, i) { var l = 0; function c(a, o, r, s) { return function () { function e() { var e, t; if (!(a < l)) { if ((e = r.apply(n, i)) === o.promise()) throw new TypeError("Thenable self-resolution"); t = e && ("object" == typeof e || "function" == typeof e) && e.then, y(t) ? s ? t.call(e, c(l, o, L, s), c(l, o, D, s)) : (l++ , t.call(e, c(l, o, L, s), c(l, o, D, s), c(l, o, L, o.notifyWith))) : (r !== L && (n = void 0, i = [e]), (s || o.resolveWith)(n, i)) } } var n = this, i = arguments, t = s ? e : function () { try { e() } catch (e) { T.Deferred.exceptionHook && T.Deferred.exceptionHook(e, t.stackTrace), l <= a + 1 && (r !== D && (n = void 0, i = [e]), o.rejectWith(n, i)) } }; a ? t() : (T.Deferred.getStackHook && (t.stackTrace = T.Deferred.getStackHook()), C.setTimeout(t)) } } return T.Deferred(function (e) { o[0][3].add(c(0, e, y(i) ? i : L, e.notifyWith)), o[1][3].add(c(0, e, y(t) ? t : L)), o[2][3].add(c(0, e, y(n) ? n : D)) }).promise() }, promise: function (e) { return null != e ? T.extend(e, r) : r } }, s = {}; return T.each(o, function (e, t) { var n = t[2], i = t[5]; r[t[1]] = n.add, i && n.add(function () { a = i }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function () { return s[t[0] + "With"](this === s ? void 0 : this, arguments), this }, s[t[0] + "With"] = n.fireWith }), r.promise(s), e && e.call(s, s), s }, when: function (e) { function t(t) { return function (e) { a[t] = this, o[t] = 1 < arguments.length ? s.call(arguments) : e, --n || r.resolveWith(a, o) } } var n = arguments.length, i = n, a = Array(i), o = s.call(arguments), r = T.Deferred(); if (n <= 1 && (O(e, r.done(t(i)).resolve, r.reject, !n), "pending" === r.state() || y(o[i] && o[i].then))) return r.then(); for (; i--;)O(o[i], t(i), r.reject); return r.promise() } }); var F = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; T.Deferred.exceptionHook = function (e, t) { C.console && C.console.warn && e && F.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t) }, T.readyException = function (e) { C.setTimeout(function () { throw e }) }; var z = T.Deferred(); function N() { k.removeEventListener("DOMContentLoaded", N), C.removeEventListener("load", N), T.ready() } T.fn.ready = function (e) { return z.then(e).catch(function (e) { T.readyException(e) }), this }, T.extend({ isReady: !1, readyWait: 1, ready: function (e) { (!0 === e ? --T.readyWait : T.isReady) || (T.isReady = !0) !== e && 0 < --T.readyWait || z.resolveWith(k, [T]) } }), T.ready.then = z.then, "complete" === k.readyState || "loading" !== k.readyState && !k.documentElement.doScroll ? C.setTimeout(T.ready) : (k.addEventListener("DOMContentLoaded", N), C.addEventListener("load", N)); var R = function (e, t, n, i, a, o, r) { var s = 0, l = e.length, c = null == n; if ("object" === x(n)) for (s in a = !0, n) R(e, t, s, n[s], !0, o, r); else if (void 0 !== i && (a = !0, y(i) || (r = !0), c && (t = r ? (t.call(e, i), null) : (c = t, function (e, t, n) { return c.call(T(e), n) })), t)) for (; s < l; s++)t(e[s], n, r ? i : i.call(e[s], s, t(e[s], n))); return a ? e : c ? t.call(e) : l ? t(e[0], n) : o }, X = /^-ms-/, B = /-([a-z])/g; function G(e, t) { return t.toUpperCase() } function V(e) { return e.replace(X, "ms-").replace(B, G) } function Y(e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType } function U() { this.expando = T.expando + U.uid++ } U.uid = 1, U.prototype = { cache: function (e) { var t = e[this.expando]; return t || (t = {}, Y(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t }, set: function (e, t, n) { var i, a = this.cache(e); if ("string" == typeof t) a[V(t)] = n; else for (i in t) a[V(i)] = t[i]; return a }, get: function (e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][V(t)] }, access: function (e, t, n) { return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t) }, remove: function (e, t) { var n, i = e[this.expando]; if (void 0 !== i) { if (void 0 !== t) { n = (t = Array.isArray(t) ? t.map(V) : (t = V(t)) in i ? [t] : t.match(q) || []).length; for (; n--;)delete i[t[n]] } void 0 !== t && !T.isEmptyObject(i) || (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]) } }, hasData: function (e) { var t = e[this.expando]; return void 0 !== t && !T.isEmptyObject(t) } }; var Q = new U, Z = new U, K = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, J = /[A-Z]/g; function ee(e, t, n) { var i, a; if (void 0 === n && 1 === e.nodeType) if (i = "data-" + t.replace(J, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(i))) { try { n = "true" === (a = n) || "false" !== a && ("null" === a ? null : a === +a + "" ? +a : K.test(a) ? JSON.parse(a) : a) } catch (e) { } Z.set(e, t, n) } else n = void 0; return n } T.extend({ hasData: function (e) { return Z.hasData(e) || Q.hasData(e) }, data: function (e, t, n) { return Z.access(e, t, n) }, removeData: function (e, t) { Z.remove(e, t) }, _data: function (e, t, n) { return Q.access(e, t, n) }, _removeData: function (e, t) { Q.remove(e, t) } }), T.fn.extend({ data: function (n, e) { var t, i, a, o = this[0], r = o && o.attributes; if (void 0 !== n) return "object" == typeof n ? this.each(function () { Z.set(this, n) }) : R(this, function (e) { var t; if (o && void 0 === e) return void 0 !== (t = Z.get(o, n)) ? t : void 0 !== (t = ee(o, n)) ? t : void 0; this.each(function () { Z.set(this, n, e) }) }, null, e, 1 < arguments.length, null, !0); if (this.length && (a = Z.get(o), 1 === o.nodeType && !Q.get(o, "hasDataAttrs"))) { for (t = r.length; t--;)r[t] && 0 === (i = r[t].name).indexOf("data-") && (i = V(i.slice(5)), ee(o, i, a[i])); Q.set(o, "hasDataAttrs", !0) } return a }, removeData: function (e) { return this.each(function () { Z.remove(this, e) }) } }), T.extend({ queue: function (e, t, n) { var i; if (e) return t = (t || "fx") + "queue", i = Q.get(e, t), n && (!i || Array.isArray(n) ? i = Q.access(e, t, T.makeArray(n)) : i.push(n)), i || [] }, dequeue: function (e, t) { t = t || "fx"; var n = T.queue(e, t), i = n.length, a = n.shift(), o = T._queueHooks(e, t); "inprogress" === a && (a = n.shift(), i--), a && ("fx" === t && n.unshift("inprogress"), delete o.stop, a.call(e, function () { T.dequeue(e, t) }, o)), !i && o && o.empty.fire() }, _queueHooks: function (e, t) { var n = t + "queueHooks"; return Q.get(e, n) || Q.access(e, n, { empty: T.Callbacks("once memory").add(function () { Q.remove(e, [t + "queue", n]) }) }) } }), T.fn.extend({ queue: function (t, n) { var e = 2; return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? T.queue(this[0], t) : void 0 === n ? this : this.each(function () { var e = T.queue(this, t, n); T._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && T.dequeue(this, t) }) }, dequeue: function (e) { return this.each(function () { T.dequeue(this, e) }) }, clearQueue: function (e) { return this.queue(e || "fx", []) }, promise: function (e, t) { function n() { --a || o.resolveWith(r, [r]) } var i, a = 1, o = T.Deferred(), r = this, s = this.length; for ("string" != typeof e && (t = e, e = void 0), e = e || "fx"; s--;)(i = Q.get(r[s], e + "queueHooks")) && i.empty && (a++ , i.empty.add(n)); return n(), o.promise(t) } }); var te = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, ne = new RegExp("^(?:([+-])=|)(" + te + ")([a-z%]*)$", "i"), ie = ["Top", "Right", "Bottom", "Left"], ae = k.documentElement, oe = function (e) { return T.contains(e.ownerDocument, e) }, re = { composed: !0 }; ae.getRootNode && (oe = function (e) { return T.contains(e.ownerDocument, e) || e.getRootNode(re) === e.ownerDocument }); function se(e, t) { return "none" === (e = t || e).style.display || "" === e.style.display && oe(e) && "none" === T.css(e, "display") } function le(e, t, n, i) { var a, o, r = {}; for (o in t) r[o] = e.style[o], e.style[o] = t[o]; for (o in a = n.apply(e, i || []), t) e.style[o] = r[o]; return a } function ce(e, t, n, i) { var a, o, r = 20, s = i ? function () { return i.cur() } : function () { return T.css(e, t, "") }, l = s(), c = n && n[3] || (T.cssNumber[t] ? "" : "px"), d = e.nodeType && (T.cssNumber[t] || "px" !== c && +l) && ne.exec(T.css(e, t)); if (d && d[3] !== c) { for (l /= 2, c = c || d[3], d = +l || 1; r--;)T.style(e, t, d + c), (1 - o) * (1 - (o = s() / l || .5)) <= 0 && (r = 0), d /= o; d *= 2, T.style(e, t, d + c), n = n || [] } return n && (d = +d || +l || 0, a = n[1] ? d + (n[1] + 1) * n[2] : +n[2], i && (i.unit = c, i.start = d, i.end = a)), a } var de = {}; function ue(e, t) { for (var n, i, a, o, r, s, l, c = [], d = 0, u = e.length; d < u; d++)(i = e[d]).style && (n = i.style.display, t ? ("none" === n && (c[d] = Q.get(i, "display") || null, c[d] || (i.style.display = "")), "" === i.style.display && se(i) && (c[d] = (l = r = o = void 0, r = (a = i).ownerDocument, s = a.nodeName, (l = de[s]) || (o = r.body.appendChild(r.createElement(s)), l = T.css(o, "display"), o.parentNode.removeChild(o), "none" === l && (l = "block"), de[s] = l)))) : "none" !== n && (c[d] = "none", Q.set(i, "display", n))); for (d = 0; d < u; d++)null != c[d] && (e[d].style.display = c[d]); return e } T.fn.extend({ show: function () { return ue(this, !0) }, hide: function () { return ue(this) }, toggle: function (e) { return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () { se(this) ? T(this).show() : T(this).hide() }) } }); var pe = /^(?:checkbox|radio)$/i, fe = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, he = /^$|^module$|\/(?:java|ecma)script/i, ge = { option: [1, "<select multiple='multiple'>", "</select>"], thead: [1, "<table>", "</table>"], col: [2, "<table><colgroup>", "</colgroup></table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], _default: [0, "", ""] }; function me(e, t) { var n; return n = void 0 !== e.getElementsByTagName ? e.getElementsByTagName(t || "*") : void 0 !== e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && W(e, t) ? T.merge([e], n) : n } function ve(e, t) { for (var n = 0, i = e.length; n < i; n++)Q.set(e[n], "globalEval", !t || Q.get(t[n], "globalEval")) } ge.optgroup = ge.option, ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td; var be, ye, we = /<|&#?\w+;/; function xe(e, t, n, i, a) { for (var o, r, s, l, c, d, u = t.createDocumentFragment(), p = [], f = 0, h = e.length; f < h; f++)if ((o = e[f]) || 0 === o) if ("object" === x(o)) T.merge(p, o.nodeType ? [o] : o); else if (we.test(o)) { for (r = r || u.appendChild(t.createElement("div")), s = (fe.exec(o) || ["", ""])[1].toLowerCase(), l = ge[s] || ge._default, r.innerHTML = l[1] + T.htmlPrefilter(o) + l[2], d = l[0]; d--;)r = r.lastChild; T.merge(p, r.childNodes), (r = u.firstChild).textContent = "" } else p.push(t.createTextNode(o)); for (u.textContent = "", f = 0; o = p[f++];)if (i && -1 < T.inArray(o, i)) a && a.push(o); else if (c = oe(o), r = me(u.appendChild(o), "script"), c && ve(r), n) for (d = 0; o = r[d++];)he.test(o.type || "") && n.push(o); return u } be = k.createDocumentFragment().appendChild(k.createElement("div")), (ye = k.createElement("input")).setAttribute("type", "radio"), ye.setAttribute("checked", "checked"), ye.setAttribute("name", "t"), be.appendChild(ye), b.checkClone = be.cloneNode(!0).cloneNode(!0).lastChild.checked, be.innerHTML = "<textarea>x</textarea>", b.noCloneChecked = !!be.cloneNode(!0).lastChild.defaultValue; var $e = /^key/, Ce = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, ke = /^([^.]*)(?:\.(.+)|)/; function Te() { return !0 } function He() { return !1 } function je(e, t) { return e === function () { try { return k.activeElement } catch (e) { } }() == ("focus" === t) } function We(e, t, n, i, a, o) { var r, s; if ("object" == typeof t) { for (s in "string" != typeof n && (i = i || n, n = void 0), t) We(e, s, n, i, t[s], o); return e } if (null == i && null == a ? (a = n, i = n = void 0) : null == a && ("string" == typeof n ? (a = i, i = void 0) : (a = i, i = n, n = void 0)), !1 === a) a = He; else if (!a) return e; return 1 === o && (r = a, (a = function (e) { return T().off(e), r.apply(this, arguments) }).guid = r.guid || (r.guid = T.guid++)), e.each(function () { T.event.add(this, t, a, i, n) }) } function _e(e, a, o) { o ? (Q.set(e, a, !1), T.event.add(e, a, { namespace: !1, handler: function (e) { var t, n, i = Q.get(this, a); if (1 & e.isTrigger && this[a]) { if (i.length) (T.event.special[a] || {}).delegateType && e.stopPropagation(); else if (i = s.call(arguments), Q.set(this, a, i), t = o(this, a), this[a](), i !== (n = Q.get(this, a)) || t ? Q.set(this, a, !1) : n = {}, i !== n) return e.stopImmediatePropagation(), e.preventDefault(), n.value } else i.length && (Q.set(this, a, { value: T.event.trigger(T.extend(i[0], T.Event.prototype), i.slice(1), this) }), e.stopImmediatePropagation()) } })) : void 0 === Q.get(e, a) && T.event.add(e, a, Te) } T.event = { global: {}, add: function (t, e, n, i, a) { var o, r, s, l, c, d, u, p, f, h, g, m = Q.get(t); if (m) for (n.handler && (n = (o = n).handler, a = o.selector), a && T.find.matchesSelector(ae, a), n.guid || (n.guid = T.guid++), (l = m.events) || (l = m.events = {}), (r = m.handle) || (r = m.handle = function (e) { return void 0 !== T && T.event.triggered !== e.type ? T.event.dispatch.apply(t, arguments) : void 0 }), c = (e = (e || "").match(q) || [""]).length; c--;)f = g = (s = ke.exec(e[c]) || [])[1], h = (s[2] || "").split(".").sort(), f && (u = T.event.special[f] || {}, f = (a ? u.delegateType : u.bindType) || f, u = T.event.special[f] || {}, d = T.extend({ type: f, origType: g, data: i, handler: n, guid: n.guid, selector: a, needsContext: a && T.expr.match.needsContext.test(a), namespace: h.join(".") }, o), (p = l[f]) || ((p = l[f] = []).delegateCount = 0, u.setup && !1 !== u.setup.call(t, i, h, r) || t.addEventListener && t.addEventListener(f, r)), u.add && (u.add.call(t, d), d.handler.guid || (d.handler.guid = n.guid)), a ? p.splice(p.delegateCount++, 0, d) : p.push(d), T.event.global[f] = !0) }, remove: function (e, t, n, i, a) { var o, r, s, l, c, d, u, p, f, h, g, m = Q.hasData(e) && Q.get(e); if (m && (l = m.events)) { for (c = (t = (t || "").match(q) || [""]).length; c--;)if (f = g = (s = ke.exec(t[c]) || [])[1], h = (s[2] || "").split(".").sort(), f) { for (u = T.event.special[f] || {}, p = l[f = (i ? u.delegateType : u.bindType) || f] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), r = o = p.length; o--;)d = p[o], !a && g !== d.origType || n && n.guid !== d.guid || s && !s.test(d.namespace) || i && i !== d.selector && ("**" !== i || !d.selector) || (p.splice(o, 1), d.selector && p.delegateCount-- , u.remove && u.remove.call(e, d)); r && !p.length && (u.teardown && !1 !== u.teardown.call(e, h, m.handle) || T.removeEvent(e, f, m.handle), delete l[f]) } else for (f in l) T.event.remove(e, f + t[c], n, i, !0); T.isEmptyObject(l) && Q.remove(e, "handle events") } }, dispatch: function (e) { var t, n, i, a, o, r, s = T.event.fix(e), l = new Array(arguments.length), c = (Q.get(this, "events") || {})[s.type] || [], d = T.event.special[s.type] || {}; for (l[0] = s, t = 1; t < arguments.length; t++)l[t] = arguments[t]; if (s.delegateTarget = this, !d.preDispatch || !1 !== d.preDispatch.call(this, s)) { for (r = T.event.handlers.call(this, s, c), t = 0; (a = r[t++]) && !s.isPropagationStopped();)for (s.currentTarget = a.elem, n = 0; (o = a.handlers[n++]) && !s.isImmediatePropagationStopped();)s.rnamespace && !1 !== o.namespace && !s.rnamespace.test(o.namespace) || (s.handleObj = o, s.data = o.data, void 0 !== (i = ((T.event.special[o.origType] || {}).handle || o.handler).apply(a.elem, l)) && !1 === (s.result = i) && (s.preventDefault(), s.stopPropagation())); return d.postDispatch && d.postDispatch.call(this, s), s.result } }, handlers: function (e, t) { var n, i, a, o, r, s = [], l = t.delegateCount, c = e.target; if (l && c.nodeType && !("click" === e.type && 1 <= e.button)) for (; c !== this; c = c.parentNode || this)if (1 === c.nodeType && ("click" !== e.type || !0 !== c.disabled)) { for (o = [], r = {}, n = 0; n < l; n++)void 0 === r[a = (i = t[n]).selector + " "] && (r[a] = i.needsContext ? -1 < T(a, this).index(c) : T.find(a, this, null, [c]).length), r[a] && o.push(i); o.length && s.push({ elem: c, handlers: o }) } return c = this, l < t.length && s.push({ elem: c, handlers: t.slice(l) }), s }, addProp: function (t, e) { Object.defineProperty(T.Event.prototype, t, { enumerable: !0, configurable: !0, get: y(e) ? function () { if (this.originalEvent) return e(this.originalEvent) } : function () { if (this.originalEvent) return this.originalEvent[t] }, set: function (e) { Object.defineProperty(this, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) } }) }, fix: function (e) { return e[T.expando] ? e : new T.Event(e) }, special: { load: { noBubble: !0 }, click: { setup: function (e) { var t = this || e; return pe.test(t.type) && t.click && W(t, "input") && _e(t, "click", Te), !1 }, trigger: function (e) { var t = this || e; return pe.test(t.type) && t.click && W(t, "input") && _e(t, "click"), !0 }, _default: function (e) { var t = e.target; return pe.test(t.type) && t.click && W(t, "input") && Q.get(t, "click") || W(t, "a") } }, beforeunload: { postDispatch: function (e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) } } } }, T.removeEvent = function (e, t, n) { e.removeEventListener && e.removeEventListener(t, n) }, T.Event = function (e, t) { if (!(this instanceof T.Event)) return new T.Event(e, t); e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Te : He, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && T.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[T.expando] = !0 }, T.Event.prototype = { constructor: T.Event, isDefaultPrevented: He, isPropagationStopped: He, isImmediatePropagationStopped: He, isSimulated: !1, preventDefault: function () { var e = this.originalEvent; this.isDefaultPrevented = Te, e && !this.isSimulated && e.preventDefault() }, stopPropagation: function () { var e = this.originalEvent; this.isPropagationStopped = Te, e && !this.isSimulated && e.stopPropagation() }, stopImmediatePropagation: function () { var e = this.originalEvent; this.isImmediatePropagationStopped = Te, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation() } }, T.each({ altKey: !0, bubbles: !0, cancelable: !0, changedTouches: !0, ctrlKey: !0, detail: !0, eventPhase: !0, metaKey: !0, pageX: !0, pageY: !0, shiftKey: !0, view: !0, char: !0, code: !0, charCode: !0, key: !0, keyCode: !0, button: !0, buttons: !0, clientX: !0, clientY: !0, offsetX: !0, offsetY: !0, pointerId: !0, pointerType: !0, screenX: !0, screenY: !0, targetTouches: !0, toElement: !0, touches: !0, which: function (e) { var t = e.button; return null == e.which && $e.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && Ce.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which } }, T.event.addProp), T.each({ focus: "focusin", blur: "focusout" }, function (e, t) { T.event.special[e] = { setup: function () { return _e(this, e, je), !1 }, trigger: function () { return _e(this, e), !0 }, delegateType: t } }), T.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function (e, a) { T.event.special[e] = { delegateType: a, bindType: a, handle: function (e) { var t, n = e.relatedTarget, i = e.handleObj; return n && (n === this || T.contains(this, n)) || (e.type = i.origType, t = i.handler.apply(this, arguments), e.type = a), t } } }), T.fn.extend({ on: function (e, t, n, i) { return We(this, e, t, n, i) }, one: function (e, t, n, i) { return We(this, e, t, n, i, 1) }, off: function (e, t, n) { var i, a; if (e && e.preventDefault && e.handleObj) return i = e.handleObj, T(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this; if ("object" != typeof e) return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = He), this.each(function () { T.event.remove(this, e, n, t) }); for (a in e) this.off(a, t, e[a]); return this } }); var Se = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, Ee = /<script|<style|<link/i, Me = /checked\s*(?:[^=]|=\s*.checked.)/i, Ae = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; function Pe(e, t) { return W(e, "table") && W(11 !== t.nodeType ? t : t.firstChild, "tr") && T(e).children("tbody")[0] || e } function Ie(e) { return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e } function qe(e) { return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e } function Le(e, t) { var n, i, a, o, r, s, l, c; if (1 === t.nodeType) { if (Q.hasData(e) && (o = Q.access(e), r = Q.set(t, o), c = o.events)) for (a in delete r.handle, r.events = {}, c) for (n = 0, i = c[a].length; n < i; n++)T.event.add(t, a, c[a][n]); Z.hasData(e) && (s = Z.access(e), l = T.extend({}, s), Z.set(t, l)) } } function De(n, i, a, o) { i = m.apply([], i); var e, t, r, s, l, c, d = 0, u = n.length, p = u - 1, f = i[0], h = y(f); if (h || 1 < u && "string" == typeof f && !b.checkClone && Me.test(f)) return n.each(function (e) { var t = n.eq(e); h && (i[0] = f.call(this, e, t.html())), De(t, i, a, o) }); if (u && (t = (e = xe(i, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) { for (s = (r = T.map(me(e, "script"), Ie)).length; d < u; d++)l = e, d !== p && (l = T.clone(l, !0, !0), s && T.merge(r, me(l, "script"))), a.call(n[d], l, d); if (s) for (c = r[r.length - 1].ownerDocument, T.map(r, qe), d = 0; d < s; d++)l = r[d], he.test(l.type || "") && !Q.access(l, "globalEval") && T.contains(c, l) && (l.src && "module" !== (l.type || "").toLowerCase() ? T._evalUrl && !l.noModule && T._evalUrl(l.src, { nonce: l.nonce || l.getAttribute("nonce") }) : w(l.textContent.replace(Ae, ""), l, c)) } return n } function Oe(e, t, n) { for (var i, a = t ? T.filter(t, e) : e, o = 0; null != (i = a[o]); o++)n || 1 !== i.nodeType || T.cleanData(me(i)), i.parentNode && (n && oe(i) && ve(me(i, "script")), i.parentNode.removeChild(i)); return e } T.extend({ htmlPrefilter: function (e) { return e.replace(Se, "<$1></$2>") }, clone: function (e, t, n) { var i, a, o, r, s, l, c, d = e.cloneNode(!0), u = oe(e); if (!(b.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || T.isXMLDoc(e))) for (r = me(d), i = 0, a = (o = me(e)).length; i < a; i++)s = o[i], "input" === (c = (l = r[i]).nodeName.toLowerCase()) && pe.test(s.type) ? l.checked = s.checked : "input" !== c && "textarea" !== c || (l.defaultValue = s.defaultValue); if (t) if (n) for (o = o || me(e), r = r || me(d), i = 0, a = o.length; i < a; i++)Le(o[i], r[i]); else Le(e, d); return 0 < (r = me(d, "script")).length && ve(r, !u && me(e, "script")), d }, cleanData: function (e) { for (var t, n, i, a = T.event.special, o = 0; void 0 !== (n = e[o]); o++)if (Y(n)) { if (t = n[Q.expando]) { if (t.events) for (i in t.events) a[i] ? T.event.remove(n, i) : T.removeEvent(n, i, t.handle); n[Q.expando] = void 0 } n[Z.expando] && (n[Z.expando] = void 0) } } }), T.fn.extend({ detach: function (e) { return Oe(this, e, !0) }, remove: function (e) { return Oe(this, e) }, text: function (e) { return R(this, function (e) { return void 0 === e ? T.text(this) : this.empty().each(function () { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e) }) }, null, e, arguments.length) }, append: function () { return De(this, arguments, function (e) { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || Pe(this, e).appendChild(e) }) }, prepend: function () { return De(this, arguments, function (e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = Pe(this, e); t.insertBefore(e, t.firstChild) } }) }, before: function () { return De(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this) }) }, after: function () { return De(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) }) }, empty: function () { for (var e, t = 0; null != (e = this[t]); t++)1 === e.nodeType && (T.cleanData(me(e, !1)), e.textContent = ""); return this }, clone: function (e, t) { return e = null != e && e, t = null == t ? e : t, this.map(function () { return T.clone(this, e, t) }) }, html: function (e) { return R(this, function (e) { var t = this[0] || {}, n = 0, i = this.length; if (void 0 === e && 1 === t.nodeType) return t.innerHTML; if ("string" == typeof e && !Ee.test(e) && !ge[(fe.exec(e) || ["", ""])[1].toLowerCase()]) { e = T.htmlPrefilter(e); try { for (; n < i; n++)1 === (t = this[n] || {}).nodeType && (T.cleanData(me(t, !1)), t.innerHTML = e); t = 0 } catch (e) { } } t && this.empty().append(e) }, null, e, arguments.length) }, replaceWith: function () { var n = []; return De(this, arguments, function (e) { var t = this.parentNode; T.inArray(this, n) < 0 && (T.cleanData(me(this)), t && t.replaceChild(e, this)) }, n) } }), T.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function (e, r) { T.fn[e] = function (e) { for (var t, n = [], i = T(e), a = i.length - 1, o = 0; o <= a; o++)t = o === a ? this : this.clone(!0), T(i[o])[r](t), l.apply(n, t.get()); return this.pushStack(n) } }); var Fe, ze, Ne, Re, Xe, Be, Ge, Ve = new RegExp("^(" + te + ")(?!px)[a-z%]+$", "i"), Ye = function (e) { var t = e.ownerDocument.defaultView; return t && t.opener || (t = C), t.getComputedStyle(e) }, Ue = new RegExp(ie.join("|"), "i"); function Qe(e, t, n) { var i, a, o, r, s = e.style; return (n = n || Ye(e)) && ("" !== (r = n.getPropertyValue(t) || n[t]) || oe(e) || (r = T.style(e, t)), !b.pixelBoxStyles() && Ve.test(r) && Ue.test(t) && (i = s.width, a = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = r, r = n.width, s.width = i, s.minWidth = a, s.maxWidth = o)), void 0 !== r ? r + "" : r } function Ze(e, t) { return { get: function () { if (!e()) return (this.get = t).apply(this, arguments); delete this.get } } } function Ke() { if (Ge) { Be.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", Ge.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", ae.appendChild(Be).appendChild(Ge); var e = C.getComputedStyle(Ge); Fe = "1%" !== e.top, Xe = 12 === Je(e.marginLeft), Ge.style.right = "60%", Re = 36 === Je(e.right), ze = 36 === Je(e.width), Ge.style.position = "absolute", Ne = 12 === Je(Ge.offsetWidth / 3), ae.removeChild(Be), Ge = null } } function Je(e) { return Math.round(parseFloat(e)) } Be = k.createElement("div"), (Ge = k.createElement("div")).style && (Ge.style.backgroundClip = "content-box", Ge.cloneNode(!0).style.backgroundClip = "", b.clearCloneStyle = "content-box" === Ge.style.backgroundClip, T.extend(b, { boxSizingReliable: function () { return Ke(), ze }, pixelBoxStyles: function () { return Ke(), Re }, pixelPosition: function () { return Ke(), Fe }, reliableMarginLeft: function () { return Ke(), Xe }, scrollboxSize: function () { return Ke(), Ne } })); var et = ["Webkit", "Moz", "ms"], tt = k.createElement("div").style, nt = {}; function it(e) { return T.cssProps[e] || nt[e] || (e in tt ? e : nt[e] = function (e) { for (var t = e[0].toUpperCase() + e.slice(1), n = et.length; n--;)if ((e = et[n] + t) in tt) return e }(e) || e) } var at = /^(none|table(?!-c[ea]).+)/, ot = /^--/, rt = { position: "absolute", visibility: "hidden", display: "block" }, st = { letterSpacing: "0", fontWeight: "400" }; function lt(e, t, n) { var i = ne.exec(t); return i ? Math.max(0, i[2] - (n || 0)) + (i[3] || "px") : t } function ct(e, t, n, i, a, o) { var r = "width" === t ? 1 : 0, s = 0, l = 0; if (n === (i ? "border" : "content")) return 0; for (; r < 4; r += 2)"margin" === n && (l += T.css(e, n + ie[r], !0, a)), i ? ("content" === n && (l -= T.css(e, "padding" + ie[r], !0, a)), "margin" !== n && (l -= T.css(e, "border" + ie[r] + "Width", !0, a))) : (l += T.css(e, "padding" + ie[r], !0, a), "padding" !== n ? l += T.css(e, "border" + ie[r] + "Width", !0, a) : s += T.css(e, "border" + ie[r] + "Width", !0, a)); return !i && 0 <= o && (l += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - l - s - .5)) || 0), l } function dt(e, t, n) { var i = Ye(e), a = (!b.boxSizingReliable() || n) && "border-box" === T.css(e, "boxSizing", !1, i), o = a, r = Qe(e, t, i), s = "offset" + t[0].toUpperCase() + t.slice(1); if (Ve.test(r)) { if (!n) return r; r = "auto" } return (!b.boxSizingReliable() && a || "auto" === r || !parseFloat(r) && "inline" === T.css(e, "display", !1, i)) && e.getClientRects().length && (a = "border-box" === T.css(e, "boxSizing", !1, i), (o = s in e) && (r = e[s])), (r = parseFloat(r) || 0) + ct(e, t, n || (a ? "border" : "content"), o, i, r) + "px" } function ut(e, t, n, i, a) { return new ut.prototype.init(e, t, n, i, a) } T.extend({ cssHooks: { opacity: { get: function (e, t) { if (t) { var n = Qe(e, "opacity"); return "" === n ? "1" : n } } } }, cssNumber: { animationIterationCount: !0, columnCount: !0, fillOpacity: !0, flexGrow: !0, flexShrink: !0, fontWeight: !0, gridArea: !0, gridColumn: !0, gridColumnEnd: !0, gridColumnStart: !0, gridRow: !0, gridRowEnd: !0, gridRowStart: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 }, cssProps: {}, style: function (e, t, n, i) { if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { var a, o, r, s = V(t), l = ot.test(t), c = e.style; if (l || (t = it(s)), r = T.cssHooks[t] || T.cssHooks[s], void 0 === n) return r && "get" in r && void 0 !== (a = r.get(e, !1, i)) ? a : c[t]; "string" == (o = typeof n) && (a = ne.exec(n)) && a[1] && (n = ce(e, t, a), o = "number"), null != n && n == n && ("number" !== o || l || (n += a && a[3] || (T.cssNumber[s] ? "" : "px")), b.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (c[t] = "inherit"), r && "set" in r && void 0 === (n = r.set(e, n, i)) || (l ? c.setProperty(t, n) : c[t] = n)) } }, css: function (e, t, n, i) { var a, o, r, s = V(t); return ot.test(t) || (t = it(s)), (r = T.cssHooks[t] || T.cssHooks[s]) && "get" in r && (a = r.get(e, !0, n)), void 0 === a && (a = Qe(e, t, i)), "normal" === a && t in st && (a = st[t]), "" === n || n ? (o = parseFloat(a), !0 === n || isFinite(o) ? o || 0 : a) : a } }), T.each(["height", "width"], function (e, l) { T.cssHooks[l] = { get: function (e, t, n) { if (t) return !at.test(T.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? dt(e, l, n) : le(e, rt, function () { return dt(e, l, n) }) }, set: function (e, t, n) { var i, a = Ye(e), o = !b.scrollboxSize() && "absolute" === a.position, r = (o || n) && "border-box" === T.css(e, "boxSizing", !1, a), s = n ? ct(e, l, n, r, a) : 0; return r && o && (s -= Math.ceil(e["offset" + l[0].toUpperCase() + l.slice(1)] - parseFloat(a[l]) - ct(e, l, "border", !1, a) - .5)), s && (i = ne.exec(t)) && "px" !== (i[3] || "px") && (e.style[l] = t, t = T.css(e, l)), lt(0, t, s) } } }), T.cssHooks.marginLeft = Ze(b.reliableMarginLeft, function (e, t) { if (t) return (parseFloat(Qe(e, "marginLeft")) || e.getBoundingClientRect().left - le(e, { marginLeft: 0 }, function () { return e.getBoundingClientRect().left })) + "px" }), T.each({ margin: "", padding: "", border: "Width" }, function (a, o) { T.cssHooks[a + o] = { expand: function (e) { for (var t = 0, n = {}, i = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++)n[a + ie[t] + o] = i[t] || i[t - 2] || i[0]; return n } }, "margin" !== a && (T.cssHooks[a + o].set = lt) }), T.fn.extend({ css: function (e, t) { return R(this, function (e, t, n) { var i, a, o = {}, r = 0; if (Array.isArray(t)) { for (i = Ye(e), a = t.length; r < a; r++)o[t[r]] = T.css(e, t[r], !1, i); return o } return void 0 !== n ? T.style(e, t, n) : T.css(e, t) }, e, t, 1 < arguments.length) } }), ((T.Tween = ut).prototype = { constructor: ut, init: function (e, t, n, i, a, o) { this.elem = e, this.prop = n, this.easing = a || T.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = i, this.unit = o || (T.cssNumber[n] ? "" : "px") }, cur: function () { var e = ut.propHooks[this.prop]; return e && e.get ? e.get(this) : ut.propHooks._default.get(this) }, run: function (e) { var t, n = ut.propHooks[this.prop]; return this.options.duration ? this.pos = t = T.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) : ut.propHooks._default.set(this), this } }).init.prototype = ut.prototype, (ut.propHooks = { _default: { get: function (e) { var t; return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = T.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0 }, set: function (e) { T.fx.step[e.prop] ? T.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !T.cssHooks[e.prop] && null == e.elem.style[it(e.prop)] ? e.elem[e.prop] = e.now : T.style(e.elem, e.prop, e.now + e.unit) } } }).scrollTop = ut.propHooks.scrollLeft = { set: function (e) { e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) } }, T.easing = { linear: function (e) { return e }, swing: function (e) { return .5 - Math.cos(e * Math.PI) / 2 }, _default: "swing" }, T.fx = ut.prototype.init, T.fx.step = {}; var pt, ft, ht, gt, mt = /^(?:toggle|show|hide)$/, vt = /queueHooks$/; function bt() { ft && (!1 === k.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(bt) : C.setTimeout(bt, T.fx.interval), T.fx.tick()) } function yt() { return C.setTimeout(function () { pt = void 0 }), pt = Date.now() } function wt(e, t) { var n, i = 0, a = { height: e }; for (t = t ? 1 : 0; i < 4; i += 2 - t)a["margin" + (n = ie[i])] = a["padding" + n] = e; return t && (a.opacity = a.width = e), a } function xt(e, t, n) { for (var i, a = ($t.tweeners[t] || []).concat($t.tweeners["*"]), o = 0, r = a.length; o < r; o++)if (i = a[o].call(n, t, e)) return i } function $t(o, e, t) { var n, r, i = 0, a = $t.prefilters.length, s = T.Deferred().always(function () { delete l.elem }), l = function () { if (r) return !1; for (var e = pt || yt(), t = Math.max(0, c.startTime + c.duration - e), n = 1 - (t / c.duration || 0), i = 0, a = c.tweens.length; i < a; i++)c.tweens[i].run(n); return s.notifyWith(o, [c, n, t]), n < 1 && a ? t : (a || s.notifyWith(o, [c, 1, 0]), s.resolveWith(o, [c]), !1) }, c = s.promise({ elem: o, props: T.extend({}, e), opts: T.extend(!0, { specialEasing: {}, easing: T.easing._default }, t), originalProperties: e, originalOptions: t, startTime: pt || yt(), duration: t.duration, tweens: [], createTween: function (e, t) { var n = T.Tween(o, c.opts, e, t, c.opts.specialEasing[e] || c.opts.easing); return c.tweens.push(n), n }, stop: function (e) { var t = 0, n = e ? c.tweens.length : 0; if (r) return this; for (r = !0; t < n; t++)c.tweens[t].run(1); return e ? (s.notifyWith(o, [c, 1, 0]), s.resolveWith(o, [c, e])) : s.rejectWith(o, [c, e]), this } }), d = c.props; for (function (e, t) { var n, i, a, o, r; for (n in e) if (a = t[i = V(n)], o = e[n], Array.isArray(o) && (a = o[1], o = e[n] = o[0]), n !== i && (e[i] = o, delete e[n]), (r = T.cssHooks[i]) && "expand" in r) for (n in o = r.expand(o), delete e[i], o) n in e || (e[n] = o[n], t[n] = a); else t[i] = a }(d, c.opts.specialEasing); i < a; i++)if (n = $t.prefilters[i].call(c, o, d, c.opts)) return y(n.stop) && (T._queueHooks(c.elem, c.opts.queue).stop = n.stop.bind(n)), n; return T.map(d, xt, c), y(c.opts.start) && c.opts.start.call(o, c), c.progress(c.opts.progress).done(c.opts.done, c.opts.complete).fail(c.opts.fail).always(c.opts.always), T.fx.timer(T.extend(l, { elem: o, anim: c, queue: c.opts.queue })), c } T.Animation = T.extend($t, { tweeners: { "*": [function (e, t) { var n = this.createTween(e, t); return ce(n.elem, e, ne.exec(t), n), n }] }, tweener: function (e, t) { for (var n, i = 0, a = (e = y(e) ? (t = e, ["*"]) : e.match(q)).length; i < a; i++)n = e[i], $t.tweeners[n] = $t.tweeners[n] || [], $t.tweeners[n].unshift(t) }, prefilters: [function (e, t, n) { var i, a, o, r, s, l, c, d, u = "width" in t || "height" in t, p = this, f = {}, h = e.style, g = e.nodeType && se(e), m = Q.get(e, "fxshow"); for (i in n.queue || (null == (r = T._queueHooks(e, "fx")).unqueued && (r.unqueued = 0, s = r.empty.fire, r.empty.fire = function () { r.unqueued || s() }), r.unqueued++ , p.always(function () { p.always(function () { r.unqueued-- , T.queue(e, "fx").length || r.empty.fire() }) })), t) if (a = t[i], mt.test(a)) { if (delete t[i], o = o || "toggle" === a, a === (g ? "hide" : "show")) { if ("show" !== a || !m || void 0 === m[i]) continue; g = !0 } f[i] = m && m[i] || T.style(e, i) } if ((l = !T.isEmptyObject(t)) || !T.isEmptyObject(f)) for (i in u && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (c = m && m.display) && (c = Q.get(e, "display")), "none" === (d = T.css(e, "display")) && (c ? d = c : (ue([e], !0), c = e.style.display || c, d = T.css(e, "display"), ue([e]))), ("inline" === d || "inline-block" === d && null != c) && "none" === T.css(e, "float") && (l || (p.done(function () { h.display = c }), null == c && (d = h.display, c = "none" === d ? "" : d)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function () { h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2] })), l = !1, f) l || (m ? "hidden" in m && (g = m.hidden) : m = Q.access(e, "fxshow", { display: c }), o && (m.hidden = !g), g && ue([e], !0), p.done(function () { for (i in g || ue([e]), Q.remove(e, "fxshow"), f) T.style(e, i, f[i]) })), l = xt(g ? m[i] : 0, i, p), i in m || (m[i] = l.start, g && (l.end = l.start, l.start = 0)) }], prefilter: function (e, t) { t ? $t.prefilters.unshift(e) : $t.prefilters.push(e) } }), T.speed = function (e, t, n) { var i = e && "object" == typeof e ? T.extend({}, e) : { complete: n || !n && t || y(e) && e, duration: e, easing: n && t || t && !y(t) && t }; return T.fx.off ? i.duration = 0 : "number" != typeof i.duration && (i.duration in T.fx.speeds ? i.duration = T.fx.speeds[i.duration] : i.duration = T.fx.speeds._default), null != i.queue && !0 !== i.queue || (i.queue = "fx"), i.old = i.complete, i.complete = function () { y(i.old) && i.old.call(this), i.queue && T.dequeue(this, i.queue) }, i }, T.fn.extend({ fadeTo: function (e, t, n, i) { return this.filter(se).css("opacity", 0).show().end().animate({ opacity: t }, e, n, i) }, animate: function (t, e, n, i) { function a() { var e = $t(this, T.extend({}, t), r); (o || Q.get(this, "finish")) && e.stop(!0) } var o = T.isEmptyObject(t), r = T.speed(e, n, i); return a.finish = a, o || !1 === r.queue ? this.each(a) : this.queue(r.queue, a) }, stop: function (a, e, o) { function r(e) { var t = e.stop; delete e.stop, t(o) } return "string" != typeof a && (o = e, e = a, a = void 0), e && !1 !== a && this.queue(a || "fx", []), this.each(function () { var e = !0, t = null != a && a + "queueHooks", n = T.timers, i = Q.get(this); if (t) i[t] && i[t].stop && r(i[t]); else for (t in i) i[t] && i[t].stop && vt.test(t) && r(i[t]); for (t = n.length; t--;)n[t].elem !== this || null != a && n[t].queue !== a || (n[t].anim.stop(o), e = !1, n.splice(t, 1)); !e && o || T.dequeue(this, a) }) }, finish: function (r) { return !1 !== r && (r = r || "fx"), this.each(function () { var e, t = Q.get(this), n = t[r + "queue"], i = t[r + "queueHooks"], a = T.timers, o = n ? n.length : 0; for (t.finish = !0, T.queue(this, r, []), i && i.stop && i.stop.call(this, !0), e = a.length; e--;)a[e].elem === this && a[e].queue === r && (a[e].anim.stop(!0), a.splice(e, 1)); for (e = 0; e < o; e++)n[e] && n[e].finish && n[e].finish.call(this); delete t.finish }) } }), T.each(["toggle", "show", "hide"], function (e, i) { var a = T.fn[i]; T.fn[i] = function (e, t, n) { return null == e || "boolean" == typeof e ? a.apply(this, arguments) : this.animate(wt(i, !0), e, t, n) } }), T.each({ slideDown: wt("show"), slideUp: wt("hide"), slideToggle: wt("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function (e, i) { T.fn[e] = function (e, t, n) { return this.animate(i, e, t, n) } }), T.timers = [], T.fx.tick = function () { var e, t = 0, n = T.timers; for (pt = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1); n.length || T.fx.stop(), pt = void 0 }, T.fx.timer = function (e) { T.timers.push(e), T.fx.start() }, T.fx.interval = 13, T.fx.start = function () { ft || (ft = !0, bt()) }, T.fx.stop = function () { ft = null }, T.fx.speeds = { slow: 600, fast: 200, _default: 400 }, T.fn.delay = function (i, e) { return i = T.fx && T.fx.speeds[i] || i, e = e || "fx", this.queue(e, function (e, t) { var n = C.setTimeout(e, i); t.stop = function () { C.clearTimeout(n) } }) }, ht = k.createElement("input"), gt = k.createElement("select").appendChild(k.createElement("option")), ht.type = "checkbox", b.checkOn = "" !== ht.value, b.optSelected = gt.selected, (ht = k.createElement("input")).value = "t", ht.type = "radio", b.radioValue = "t" === ht.value; var Ct, kt = T.expr.attrHandle; T.fn.extend({ attr: function (e, t) { return R(this, T.attr, e, t, 1 < arguments.length) }, removeAttr: function (e) { return this.each(function () { T.removeAttr(this, e) }) } }), T.extend({ attr: function (e, t, n) { var i, a, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return void 0 === e.getAttribute ? T.prop(e, t, n) : (1 === o && T.isXMLDoc(e) || (a = T.attrHooks[t.toLowerCase()] || (T.expr.match.bool.test(t) ? Ct : void 0)), void 0 !== n ? null === n ? void T.removeAttr(e, t) : a && "set" in a && void 0 !== (i = a.set(e, n, t)) ? i : (e.setAttribute(t, n + ""), n) : a && "get" in a && null !== (i = a.get(e, t)) ? i : null == (i = T.find.attr(e, t)) ? void 0 : i) }, attrHooks: { type: { set: function (e, t) { if (!b.radioValue && "radio" === t && W(e, "input")) { var n = e.value; return e.setAttribute("type", t), n && (e.value = n), t } } } }, removeAttr: function (e, t) { var n, i = 0, a = t && t.match(q); if (a && 1 === e.nodeType) for (; n = a[i++];)e.removeAttribute(n) } }), Ct = { set: function (e, t, n) { return !1 === t ? T.removeAttr(e, n) : e.setAttribute(n, n), n } }, T.each(T.expr.match.bool.source.match(/\w+/g), function (e, t) { var r = kt[t] || T.find.attr; kt[t] = function (e, t, n) { var i, a, o = t.toLowerCase(); return n || (a = kt[o], kt[o] = i, i = null != r(e, t, n) ? o : null, kt[o] = a), i } }); var Tt = /^(?:input|select|textarea|button)$/i, Ht = /^(?:a|area)$/i; function jt(e) { return (e.match(q) || []).join(" ") } function Wt(e) { return e.getAttribute && e.getAttribute("class") || "" } function _t(e) { return Array.isArray(e) ? e : "string" == typeof e && e.match(q) || [] } T.fn.extend({ prop: function (e, t) { return R(this, T.prop, e, t, 1 < arguments.length) }, removeProp: function (e) { return this.each(function () { delete this[T.propFix[e] || e] }) } }), T.extend({ prop: function (e, t, n) { var i, a, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return 1 === o && T.isXMLDoc(e) || (t = T.propFix[t] || t, a = T.propHooks[t]), void 0 !== n ? a && "set" in a && void 0 !== (i = a.set(e, n, t)) ? i : e[t] = n : a && "get" in a && null !== (i = a.get(e, t)) ? i : e[t] }, propHooks: { tabIndex: { get: function (e) { var t = T.find.attr(e, "tabindex"); return t ? parseInt(t, 10) : Tt.test(e.nodeName) || Ht.test(e.nodeName) && e.href ? 0 : -1 } } }, propFix: { for: "htmlFor", class: "className" } }), b.optSelected || (T.propHooks.selected = { get: function (e) { var t = e.parentNode; return t && t.parentNode && t.parentNode.selectedIndex, null }, set: function (e) { var t = e.parentNode; t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) } }), T.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { T.propFix[this.toLowerCase()] = this }), T.fn.extend({ addClass: function (t) { var e, n, i, a, o, r, s, l = 0; if (y(t)) return this.each(function (e) { T(this).addClass(t.call(this, e, Wt(this))) }); if ((e = _t(t)).length) for (; n = this[l++];)if (a = Wt(n), i = 1 === n.nodeType && " " + jt(a) + " ") { for (r = 0; o = e[r++];)i.indexOf(" " + o + " ") < 0 && (i += o + " "); a !== (s = jt(i)) && n.setAttribute("class", s) } return this }, removeClass: function (t) { var e, n, i, a, o, r, s, l = 0; if (y(t)) return this.each(function (e) { T(this).removeClass(t.call(this, e, Wt(this))) }); if (!arguments.length) return this.attr("class", ""); if ((e = _t(t)).length) for (; n = this[l++];)if (a = Wt(n), i = 1 === n.nodeType && " " + jt(a) + " ") { for (r = 0; o = e[r++];)for (; -1 < i.indexOf(" " + o + " ");)i = i.replace(" " + o + " ", " "); a !== (s = jt(i)) && n.setAttribute("class", s) } return this }, toggleClass: function (a, t) { var o = typeof a, r = "string" == o || Array.isArray(a); return "boolean" == typeof t && r ? t ? this.addClass(a) : this.removeClass(a) : y(a) ? this.each(function (e) { T(this).toggleClass(a.call(this, e, Wt(this), t), t) }) : this.each(function () { var e, t, n, i; if (r) for (t = 0, n = T(this), i = _t(a); e = i[t++];)n.hasClass(e) ? n.removeClass(e) : n.addClass(e); else void 0 !== a && "boolean" != o || ((e = Wt(this)) && Q.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === a ? "" : Q.get(this, "__className__") || "")) }) }, hasClass: function (e) { var t, n, i = 0; for (t = " " + e + " "; n = this[i++];)if (1 === n.nodeType && -1 < (" " + jt(Wt(n)) + " ").indexOf(t)) return !0; return !1 } }); var St = /\r/g; T.fn.extend({ val: function (n) { var i, e, a, t = this[0]; return arguments.length ? (a = y(n), this.each(function (e) { var t; 1 === this.nodeType && (null == (t = a ? n.call(this, e, T(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = T.map(t, function (e) { return null == e ? "" : e + "" })), (i = T.valHooks[this.type] || T.valHooks[this.nodeName.toLowerCase()]) && "set" in i && void 0 !== i.set(this, t, "value") || (this.value = t)) })) : t ? (i = T.valHooks[t.type] || T.valHooks[t.nodeName.toLowerCase()]) && "get" in i && void 0 !== (e = i.get(t, "value")) ? e : "string" == typeof (e = t.value) ? e.replace(St, "") : null == e ? "" : e : void 0 } }), T.extend({ valHooks: { option: { get: function (e) { var t = T.find.attr(e, "value"); return null != t ? t : jt(T.text(e)) } }, select: { get: function (e) { var t, n, i, a = e.options, o = e.selectedIndex, r = "select-one" === e.type, s = r ? null : [], l = r ? o + 1 : a.length; for (i = o < 0 ? l : r ? o : 0; i < l; i++)if (((n = a[i]).selected || i === o) && !n.disabled && (!n.parentNode.disabled || !W(n.parentNode, "optgroup"))) { if (t = T(n).val(), r) return t; s.push(t) } return s }, set: function (e, t) { for (var n, i, a = e.options, o = T.makeArray(t), r = a.length; r--;)((i = a[r]).selected = -1 < T.inArray(T.valHooks.option.get(i), o)) && (n = !0); return n || (e.selectedIndex = -1), o } } } }), T.each(["radio", "checkbox"], function () { T.valHooks[this] = { set: function (e, t) { if (Array.isArray(t)) return e.checked = -1 < T.inArray(T(e).val(), t) } }, b.checkOn || (T.valHooks[this].get = function (e) { return null === e.getAttribute("value") ? "on" : e.value }) }), b.focusin = "onfocusin" in C; function Et(e) { e.stopPropagation() } var Mt = /^(?:focusinfocus|focusoutblur)$/; T.extend(T.event, { trigger: function (e, t, n, i) { var a, o, r, s, l, c, d, u, p = [n || k], f = v.call(e, "type") ? e.type : e, h = v.call(e, "namespace") ? e.namespace.split(".") : []; if (o = u = r = n = n || k, 3 !== n.nodeType && 8 !== n.nodeType && !Mt.test(f + T.event.triggered) && (-1 < f.indexOf(".") && (f = (h = f.split(".")).shift(), h.sort()), l = f.indexOf(":") < 0 && "on" + f, (e = e[T.expando] ? e : new T.Event(f, "object" == typeof e && e)).isTrigger = i ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = n), t = null == t ? [e] : T.makeArray(t, [e]), d = T.event.special[f] || {}, i || !d.trigger || !1 !== d.trigger.apply(n, t))) { if (!i && !d.noBubble && !g(n)) { for (s = d.delegateType || f, Mt.test(s + f) || (o = o.parentNode); o; o = o.parentNode)p.push(o), r = o; r === (n.ownerDocument || k) && p.push(r.defaultView || r.parentWindow || C) } for (a = 0; (o = p[a++]) && !e.isPropagationStopped();)u = o, e.type = 1 < a ? s : d.bindType || f, (c = (Q.get(o, "events") || {})[e.type] && Q.get(o, "handle")) && c.apply(o, t), (c = l && o[l]) && c.apply && Y(o) && (e.result = c.apply(o, t), !1 === e.result && e.preventDefault()); return e.type = f, i || e.isDefaultPrevented() || d._default && !1 !== d._default.apply(p.pop(), t) || !Y(n) || l && y(n[f]) && !g(n) && ((r = n[l]) && (n[l] = null), T.event.triggered = f, e.isPropagationStopped() && u.addEventListener(f, Et), n[f](), e.isPropagationStopped() && u.removeEventListener(f, Et), T.event.triggered = void 0, r && (n[l] = r)), e.result } }, simulate: function (e, t, n) { var i = T.extend(new T.Event, n, { type: e, isSimulated: !0 }); T.event.trigger(i, null, t) } }), T.fn.extend({ trigger: function (e, t) { return this.each(function () { T.event.trigger(e, t, this) }) }, triggerHandler: function (e, t) { var n = this[0]; if (n) return T.event.trigger(e, t, n, !0) } }), b.focusin || T.each({ focus: "focusin", blur: "focusout" }, function (n, i) { function a(e) { T.event.simulate(i, e.target, T.event.fix(e)) } T.event.special[i] = { setup: function () { var e = this.ownerDocument || this, t = Q.access(e, i); t || e.addEventListener(n, a, !0), Q.access(e, i, (t || 0) + 1) }, teardown: function () { var e = this.ownerDocument || this, t = Q.access(e, i) - 1; t ? Q.access(e, i, t) : (e.removeEventListener(n, a, !0), Q.remove(e, i)) } } }); var At = C.location, Pt = Date.now(), It = /\?/; T.parseXML = function (e) { var t; if (!e || "string" != typeof e) return null; try { t = (new C.DOMParser).parseFromString(e, "text/xml") } catch (e) { t = void 0 } return t && !t.getElementsByTagName("parsererror").length || T.error("Invalid XML: " + e), t }; var qt = /\[\]$/, Lt = /\r?\n/g, Dt = /^(?:submit|button|image|reset|file)$/i, Ot = /^(?:input|select|textarea|keygen)/i; function Ft(n, e, i, a) { var t; if (Array.isArray(e)) T.each(e, function (e, t) { i || qt.test(n) ? a(n, t) : Ft(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, i, a) }); else if (i || "object" !== x(e)) a(n, e); else for (t in e) Ft(n + "[" + t + "]", e[t], i, a) } T.param = function (e, t) { function n(e, t) { var n = y(t) ? t() : t; a[a.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n) } var i, a = []; if (null == e) return ""; if (Array.isArray(e) || e.jquery && !T.isPlainObject(e)) T.each(e, function () { n(this.name, this.value) }); else for (i in e) Ft(i, e[i], t, n); return a.join("&") }, T.fn.extend({ serialize: function () { return T.param(this.serializeArray()) }, serializeArray: function () { return this.map(function () { var e = T.prop(this, "elements"); return e ? T.makeArray(e) : this }).filter(function () { var e = this.type; return this.name && !T(this).is(":disabled") && Ot.test(this.nodeName) && !Dt.test(e) && (this.checked || !pe.test(e)) }).map(function (e, t) { var n = T(this).val(); return null == n ? null : Array.isArray(n) ? T.map(n, function (e) { return { name: t.name, value: e.replace(Lt, "\r\n") } }) : { name: t.name, value: n.replace(Lt, "\r\n") } }).get() } }); var zt = /%20/g, Nt = /#.*$/, Rt = /([?&])_=[^&]*/, Xt = /^(.*?):[ \t]*([^\r\n]*)$/gm, Bt = /^(?:GET|HEAD)$/, Gt = /^\/\//, Vt = {}, Yt = {}, Ut = "*/".concat("*"), Qt = k.createElement("a"); function Zt(o) { return function (e, t) { "string" != typeof e && (t = e, e = "*"); var n, i = 0, a = e.toLowerCase().match(q) || []; if (y(t)) for (; n = a[i++];)"+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t) } } function Kt(t, a, o, r) { var s = {}, l = t === Yt; function c(e) { var i; return s[e] = !0, T.each(t[e] || [], function (e, t) { var n = t(a, o, r); return "string" != typeof n || l || s[n] ? l ? !(i = n) : void 0 : (a.dataTypes.unshift(n), c(n), !1) }), i } return c(a.dataTypes[0]) || !s["*"] && c("*") } function Jt(e, t) { var n, i, a = T.ajaxSettings.flatOptions || {}; for (n in t) void 0 !== t[n] && ((a[n] ? e : i = i || {})[n] = t[n]); return i && T.extend(!0, e, i), e } Qt.href = At.href, T.extend({ active: 0, lastModified: {}, etag: {}, ajaxSettings: { url: At.href, type: "GET", isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(At.protocol), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: { "*": Ut, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, responseFields: { xml: "responseXML", text: "responseText", json: "responseJSON" }, converters: { "* text": String, "text html": !0, "text json": JSON.parse, "text xml": T.parseXML }, flatOptions: { url: !0, context: !0 } }, ajaxSetup: function (e, t) { return t ? Jt(Jt(e, T.ajaxSettings), t) : Jt(T.ajaxSettings, e) }, ajaxPrefilter: Zt(Vt), ajaxTransport: Zt(Yt), ajax: function (e, t) { "object" == typeof e && (t = e, e = void 0), t = t || {}; var d, u, p, n, f, i, h, g, a, o, m = T.ajaxSetup({}, t), v = m.context || m, b = m.context && (v.nodeType || v.jquery) ? T(v) : T.event, y = T.Deferred(), w = T.Callbacks("once memory"), x = m.statusCode || {}, r = {}, s = {}, l = "canceled", $ = { readyState: 0, getResponseHeader: function (e) { var t; if (h) { if (!n) for (n = {}; t = Xt.exec(p);)n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2]); t = n[e.toLowerCase() + " "] } return null == t ? null : t.join(", ") }, getAllResponseHeaders: function () { return h ? p : null }, setRequestHeader: function (e, t) { return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, r[e] = t), this }, overrideMimeType: function (e) { return null == h && (m.mimeType = e), this }, statusCode: function (e) { var t; if (e) if (h) $.always(e[$.status]); else for (t in e) x[t] = [x[t], e[t]]; return this }, abort: function (e) { var t = e || l; return d && d.abort(t), c(0, t), this } }; if (y.promise($), m.url = ((e || m.url || At.href) + "").replace(Gt, At.protocol + "//"), m.type = t.method || t.type || m.method || m.type, m.dataTypes = (m.dataType || "*").toLowerCase().match(q) || [""], null == m.crossDomain) { i = k.createElement("a"); try { i.href = m.url, i.href = i.href, m.crossDomain = Qt.protocol + "//" + Qt.host != i.protocol + "//" + i.host } catch (e) { m.crossDomain = !0 } } if (m.data && m.processData && "string" != typeof m.data && (m.data = T.param(m.data, m.traditional)), Kt(Vt, m, t, $), h) return $; for (a in (g = T.event && m.global) && 0 == T.active++ && T.event.trigger("ajaxStart"), m.type = m.type.toUpperCase(), m.hasContent = !Bt.test(m.type), u = m.url.replace(Nt, ""), m.hasContent ? m.data && m.processData && 0 === (m.contentType || "").indexOf("application/x-www-form-urlencoded") && (m.data = m.data.replace(zt, "+")) : (o = m.url.slice(u.length), m.data && (m.processData || "string" == typeof m.data) && (u += (It.test(u) ? "&" : "?") + m.data, delete m.data), !1 === m.cache && (u = u.replace(Rt, "$1"), o = (It.test(u) ? "&" : "?") + "_=" + Pt++ + o), m.url = u + o), m.ifModified && (T.lastModified[u] && $.setRequestHeader("If-Modified-Since", T.lastModified[u]), T.etag[u] && $.setRequestHeader("If-None-Match", T.etag[u])), (m.data && m.hasContent && !1 !== m.contentType || t.contentType) && $.setRequestHeader("Content-Type", m.contentType), $.setRequestHeader("Accept", m.dataTypes[0] && m.accepts[m.dataTypes[0]] ? m.accepts[m.dataTypes[0]] + ("*" !== m.dataTypes[0] ? ", " + Ut + "; q=0.01" : "") : m.accepts["*"]), m.headers) $.setRequestHeader(a, m.headers[a]); if (m.beforeSend && (!1 === m.beforeSend.call(v, $, m) || h)) return $.abort(); if (l = "abort", w.add(m.complete), $.done(m.success), $.fail(m.error), d = Kt(Yt, m, t, $)) { if ($.readyState = 1, g && b.trigger("ajaxSend", [$, m]), h) return $; m.async && 0 < m.timeout && (f = C.setTimeout(function () { $.abort("timeout") }, m.timeout)); try { h = !1, d.send(r, c) } catch (e) { if (h) throw e; c(-1, e) } } else c(-1, "No Transport"); function c(e, t, n, i) { var a, o, r, s, l, c = t; h || (h = !0, f && C.clearTimeout(f), d = void 0, p = i || "", $.readyState = 0 < e ? 4 : 0, a = 200 <= e && e < 300 || 304 === e, n && (s = function (e, t, n) { for (var i, a, o, r, s = e.contents, l = e.dataTypes; "*" === l[0];)l.shift(), void 0 === i && (i = e.mimeType || t.getResponseHeader("Content-Type")); if (i) for (a in s) if (s[a] && s[a].test(i)) { l.unshift(a); break } if (l[0] in n) o = l[0]; else { for (a in n) { if (!l[0] || e.converters[a + " " + l[0]]) { o = a; break } r = r || a } o = o || r } if (o) return o !== l[0] && l.unshift(o), n[o] }(m, $, n)), s = function (e, t, n, i) { var a, o, r, s, l, c = {}, d = e.dataTypes.slice(); if (d[1]) for (r in e.converters) c[r.toLowerCase()] = e.converters[r]; for (o = d.shift(); o;)if (e.responseFields[o] && (n[e.responseFields[o]] = t), !l && i && e.dataFilter && (t = e.dataFilter(t, e.dataType)), l = o, o = d.shift()) if ("*" === o) o = l; else if ("*" !== l && l !== o) { if (!(r = c[l + " " + o] || c["* " + o])) for (a in c) if ((s = a.split(" "))[1] === o && (r = c[l + " " + s[0]] || c["* " + s[0]])) { !0 === r ? r = c[a] : !0 !== c[a] && (o = s[0], d.unshift(s[1])); break } if (!0 !== r) if (r && e.throws) t = r(t); else try { t = r(t) } catch (e) { return { state: "parsererror", error: r ? e : "No conversion from " + l + " to " + o } } } return { state: "success", data: t } }(m, s, $, a), a ? (m.ifModified && ((l = $.getResponseHeader("Last-Modified")) && (T.lastModified[u] = l), (l = $.getResponseHeader("etag")) && (T.etag[u] = l)), 204 === e || "HEAD" === m.type ? c = "nocontent" : 304 === e ? c = "notmodified" : (c = s.state, o = s.data, a = !(r = s.error))) : (r = c, !e && c || (c = "error", e < 0 && (e = 0))), $.status = e, $.statusText = (t || c) + "", a ? y.resolveWith(v, [o, c, $]) : y.rejectWith(v, [$, c, r]), $.statusCode(x), x = void 0, g && b.trigger(a ? "ajaxSuccess" : "ajaxError", [$, m, a ? o : r]), w.fireWith(v, [$, c]), g && (b.trigger("ajaxComplete", [$, m]), --T.active || T.event.trigger("ajaxStop"))) } return $ }, getJSON: function (e, t, n) { return T.get(e, t, n, "json") }, getScript: function (e, t) { return T.get(e, void 0, t, "script") } }), T.each(["get", "post"], function (e, a) { T[a] = function (e, t, n, i) { return y(t) && (i = i || n, n = t, t = void 0), T.ajax(T.extend({ url: e, type: a, dataType: i, data: t, success: n }, T.isPlainObject(e) && e)) } }), T._evalUrl = function (e, t) { return T.ajax({ url: e, type: "GET", dataType: "script", cache: !0, async: !1, global: !1, converters: { "text script": function () { } }, dataFilter: function (e) { T.globalEval(e, t) } }) }, T.fn.extend({ wrapAll: function (e) { var t; return this[0] && (y(e) && (e = e.call(this[0])), t = T(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () { for (var e = this; e.firstElementChild;)e = e.firstElementChild; return e }).append(this)), this }, wrapInner: function (n) { return y(n) ? this.each(function (e) { T(this).wrapInner(n.call(this, e)) }) : this.each(function () { var e = T(this), t = e.contents(); t.length ? t.wrapAll(n) : e.append(n) }) }, wrap: function (t) { var n = y(t); return this.each(function (e) { T(this).wrapAll(n ? t.call(this, e) : t) }) }, unwrap: function (e) { return this.parent(e).not("body").each(function () { T(this).replaceWith(this.childNodes) }), this } }), T.expr.pseudos.hidden = function (e) { return !T.expr.pseudos.visible(e) }, T.expr.pseudos.visible = function (e) { return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, T.ajaxSettings.xhr = function () { try { return new C.XMLHttpRequest } catch (e) { } }; var en = { 0: 200, 1223: 204 }, tn = T.ajaxSettings.xhr(); b.cors = !!tn && "withCredentials" in tn, b.ajax = tn = !!tn, T.ajaxTransport(function (a) { var o, r; if (b.cors || tn && !a.crossDomain) return { send: function (e, t) { var n, i = a.xhr(); if (i.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields) for (n in a.xhrFields) i[n] = a.xhrFields[n]; for (n in a.mimeType && i.overrideMimeType && i.overrideMimeType(a.mimeType), a.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) i.setRequestHeader(n, e[n]); o = function (e) { return function () { o && (o = r = i.onload = i.onerror = i.onabort = i.ontimeout = i.onreadystatechange = null, "abort" === e ? i.abort() : "error" === e ? "number" != typeof i.status ? t(0, "error") : t(i.status, i.statusText) : t(en[i.status] || i.status, i.statusText, "text" !== (i.responseType || "text") || "string" != typeof i.responseText ? { binary: i.response } : { text: i.responseText }, i.getAllResponseHeaders())) } }, i.onload = o(), r = i.onerror = i.ontimeout = o("error"), void 0 !== i.onabort ? i.onabort = r : i.onreadystatechange = function () { 4 === i.readyState && C.setTimeout(function () { o && r() }) }, o = o("abort"); try { i.send(a.hasContent && a.data || null) } catch (e) { if (o) throw e } }, abort: function () { o && o() } } }), T.ajaxPrefilter(function (e) { e.crossDomain && (e.contents.script = !1) }), T.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /\b(?:java|ecma)script\b/ }, converters: { "text script": function (e) { return T.globalEval(e), e } } }), T.ajaxPrefilter("script", function (e) { void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET") }), T.ajaxTransport("script", function (n) { var i, a; if (n.crossDomain || n.scriptAttrs) return { send: function (e, t) { i = T("<script>").attr(n.scriptAttrs || {}).prop({ charset: n.scriptCharset, src: n.url }).on("load error", a = function (e) { i.remove(), a = null, e && t("error" === e.type ? 404 : 200, e.type) }), k.head.appendChild(i[0]) }, abort: function () { a && a() } } }); var nn, an = [], on = /(=)\?(?=&|$)|\?\?/; T.ajaxSetup({ jsonp: "callback", jsonpCallback: function () { var e = an.pop() || T.expando + "_" + Pt++; return this[e] = !0, e } }), T.ajaxPrefilter("json jsonp", function (e, t, n) { var i, a, o, r = !1 !== e.jsonp && (on.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && on.test(e.data) && "data"); if (r || "jsonp" === e.dataTypes[0]) return i = e.jsonpCallback = y(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, r ? e[r] = e[r].replace(on, "$1" + i) : !1 !== e.jsonp && (e.url += (It.test(e.url) ? "&" : "?") + e.jsonp + "=" + i), e.converters["script json"] = function () { return o || T.error(i + " was not called"), o[0] }, e.dataTypes[0] = "json", a = C[i], C[i] = function () { o = arguments }, n.always(function () { void 0 === a ? T(C).removeProp(i) : C[i] = a, e[i] && (e.jsonpCallback = t.jsonpCallback, an.push(i)), o && y(a) && a(o[0]), o = a = void 0 }), "script" }), b.createHTMLDocument = ((nn = k.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === nn.childNodes.length), T.parseHTML = function (e, t, n) { return "string" != typeof e ? [] : ("boolean" == typeof t && (n = t, t = !1), t || (b.createHTMLDocument ? ((i = (t = k.implementation.createHTMLDocument("")).createElement("base")).href = k.location.href, t.head.appendChild(i)) : t = k), o = !n && [], (a = _.exec(e)) ? [t.createElement(a[1])] : (a = xe([e], t, o), o && o.length && T(o).remove(), T.merge([], a.childNodes))); var i, a, o }, T.fn.load = function (e, t, n) { var i, a, o, r = this, s = e.indexOf(" "); return -1 < s && (i = jt(e.slice(s)), e = e.slice(0, s)), y(t) ? (n = t, t = void 0) : t && "object" == typeof t && (a = "POST"), 0 < r.length && T.ajax({ url: e, type: a || "GET", dataType: "html", data: t }).done(function (e) { o = arguments, r.html(i ? T("<div>").append(T.parseHTML(e)).find(i) : e) }).always(n && function (e, t) { r.each(function () { n.apply(this, o || [e.responseText, t, e]) }) }), this }, T.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t) { T.fn[t] = function (e) { return this.on(t, e) } }), T.expr.pseudos.animated = function (t) { return T.grep(T.timers, function (e) { return t === e.elem }).length }, T.offset = { setOffset: function (e, t, n) { var i, a, o, r, s, l, c = T.css(e, "position"), d = T(e), u = {}; "static" === c && (e.style.position = "relative"), s = d.offset(), o = T.css(e, "top"), l = T.css(e, "left"), a = ("absolute" === c || "fixed" === c) && -1 < (o + l).indexOf("auto") ? (r = (i = d.position()).top, i.left) : (r = parseFloat(o) || 0, parseFloat(l) || 0), y(t) && (t = t.call(e, n, T.extend({}, s))), null != t.top && (u.top = t.top - s.top + r), null != t.left && (u.left = t.left - s.left + a), "using" in t ? t.using.call(e, u) : d.css(u) } }, T.fn.extend({ offset: function (t) { if (arguments.length) return void 0 === t ? this : this.each(function (e) { T.offset.setOffset(this, t, e) }); var e, n, i = this[0]; return i ? i.getClientRects().length ? (e = i.getBoundingClientRect(), n = i.ownerDocument.defaultView, { top: e.top + n.pageYOffset, left: e.left + n.pageXOffset }) : { top: 0, left: 0 } : void 0 }, position: function () { if (this[0]) { var e, t, n, i = this[0], a = { top: 0, left: 0 }; if ("fixed" === T.css(i, "position")) t = i.getBoundingClientRect(); else { for (t = this.offset(), n = i.ownerDocument, e = i.offsetParent || n.documentElement; e && (e === n.body || e === n.documentElement) && "static" === T.css(e, "position");)e = e.parentNode; e && e !== i && 1 === e.nodeType && ((a = T(e).offset()).top += T.css(e, "borderTopWidth", !0), a.left += T.css(e, "borderLeftWidth", !0)) } return { top: t.top - a.top - T.css(i, "marginTop", !0), left: t.left - a.left - T.css(i, "marginLeft", !0) } } }, offsetParent: function () { return this.map(function () { for (var e = this.offsetParent; e && "static" === T.css(e, "position");)e = e.offsetParent; return e || ae }) } }), T.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function (t, a) { var o = "pageYOffset" === a; T.fn[t] = function (e) { return R(this, function (e, t, n) { var i; if (g(e) ? i = e : 9 === e.nodeType && (i = e.defaultView), void 0 === n) return i ? i[a] : e[t]; i ? i.scrollTo(o ? i.pageXOffset : n, o ? n : i.pageYOffset) : e[t] = n }, t, e, arguments.length) } }), T.each(["top", "left"], function (e, n) { T.cssHooks[n] = Ze(b.pixelPosition, function (e, t) { if (t) return t = Qe(e, n), Ve.test(t) ? T(e).position()[n] + "px" : t }) }), T.each({ Height: "height", Width: "width" }, function (r, s) { T.each({ padding: "inner" + r, content: s, "": "outer" + r }, function (i, o) { T.fn[o] = function (e, t) { var n = arguments.length && (i || "boolean" != typeof e), a = i || (!0 === e || !0 === t ? "margin" : "border"); return R(this, function (e, t, n) { var i; return g(e) ? 0 === o.indexOf("outer") ? e["inner" + r] : e.document.documentElement["client" + r] : 9 === e.nodeType ? (i = e.documentElement, Math.max(e.body["scroll" + r], i["scroll" + r], e.body["offset" + r], i["offset" + r], i["client" + r])) : void 0 === n ? T.css(e, t, a) : T.style(e, t, n, a) }, s, n ? e : void 0, n) } }) }), T.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (e, n) { T.fn[n] = function (e, t) { return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n) } }), T.fn.extend({ hover: function (e, t) { return this.mouseenter(e).mouseleave(t || e) } }), T.fn.extend({ bind: function (e, t, n) { return this.on(e, null, t, n) }, unbind: function (e, t) { return this.off(e, null, t) }, delegate: function (e, t, n, i) { return this.on(t, e, n, i) }, undelegate: function (e, t, n) { return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n) } }), T.proxy = function (e, t) { var n, i, a; if ("string" == typeof t && (n = e[t], t = e, e = n), y(e)) return i = s.call(arguments, 2), (a = function () { return e.apply(t || this, i.concat(s.call(arguments))) }).guid = e.guid = e.guid || T.guid++ , a }, T.holdReady = function (e) { e ? T.readyWait++ : T.ready(!0) }, T.isArray = Array.isArray, T.parseJSON = JSON.parse, T.nodeName = W, T.isFunction = y, T.isWindow = g, T.camelCase = V, T.type = x, T.now = Date.now, T.isNumeric = function (e) { var t = T.type(e); return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e)) }, "function" == typeof define && define.amd && define("jquery", [], function () { return T }); var rn = C.jQuery, sn = C.$; return T.noConflict = function (e) { return C.$ === T && (C.$ = sn), e && C.jQuery === T && (C.jQuery = rn), T }, e || (C.jQuery = C.$ = T), T }), function (e) { "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery) }(function (g) { "use strict"; function e() { this.Version = "1.4.14", this.Plugins = {}, this.DontConflict = !1, this.Conflicts = { fn: {} }, this.ResizeHandlers = [], this.RAFHandlers = [], this.window = a, this.$window = g(a), this.document = o, this.$document = g(o), this.$body = null, this.windowWidth = 0, this.windowHeight = 0, this.fallbackWidth = 1024, this.fallbackHeight = 768, this.userAgent = window.navigator.userAgent || window.navigator.vendor || window.opera, this.isFirefox = /Firefox/i.test(this.userAgent), this.isChrome = /Chrome/i.test(this.userAgent), this.isSafari = /Safari/i.test(this.userAgent) && !this.isChrome, this.isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(this.userAgent), this.isIEMobile = /IEMobile/i.test(this.userAgent), this.isFirefoxMobile = this.isFirefox && this.isMobile, this.transform = null, this.transition = null, this.support = { file: !!(window.File && window.FileList && window.FileReader), history: !!(window.history && window.history.pushState && window.history.replaceState), matchMedia: !(!window.matchMedia && !window.msMatchMedia), pointer: !!window.PointerEvent, raf: !(!window.requestAnimationFrame || !window.cancelAnimationFrame), touch: !!("ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch), transition: !1, transform: !1 } } var t, n, i, a = "undefined" != typeof window ? window : this, o = a.document, r = { killEvent: function (e, t) { try { e.preventDefault(), e.stopPropagation(), t && e.stopImmediatePropagation() } catch (e) { } }, killGesture: function (e) { try { e.preventDefault() } catch (e) { } }, lockViewport: function (e) { f[e] = !0, g.isEmptyObject(f) || h || (t.length ? t.attr("content", i) : t = g("head").append('<meta name="viewport" content="' + i + '">'), l.$body.on(d.gestureChange, r.killGesture).on(d.gestureStart, r.killGesture).on(d.gestureEnd, r.killGesture), h = !0) }, unlockViewport: function (e) { "undefined" !== g.type(f[e]) && delete f[e], g.isEmptyObject(f) && h && (t.length && (n ? t.attr("content", n) : t.remove()), l.$body.off(d.gestureChange).off(d.gestureStart).off(d.gestureEnd), h = !1) }, startTimer: function (e, t, n, i) { return r.clearTimer(e), i ? setInterval(n, t) : setTimeout(n, t) }, clearTimer: function (e, t) { e && (t ? clearInterval(e) : clearTimeout(e), e = null) }, sortAsc: function (e, t) { return parseInt(e, 10) - parseInt(t, 10) }, sortDesc: function (e, t) { return parseInt(t, 10) - parseInt(e, 10) }, decodeEntities: function (e) { var t = l.document.createElement("textarea"); return t.innerHTML = e, t.value }, parseQueryString: function (e) { for (var t = {}, n = e.slice(e.indexOf("?") + 1).split("&"), i = 0; i < n.length; i++) { var a = n[i].split("="); t[a[0]] = a[1] } return t } }, l = new e, s = g.Deferred(), c = { base: "{ns}", element: "{ns}-element" }, d = { namespace: ".{ns}", beforeUnload: "beforeunload.{ns}", blur: "blur.{ns}", change: "change.{ns}", click: "click.{ns}", dblClick: "dblclick.{ns}", drag: "drag.{ns}", dragEnd: "dragend.{ns}", dragEnter: "dragenter.{ns}", dragLeave: "dragleave.{ns}", dragOver: "dragover.{ns}", dragStart: "dragstart.{ns}", drop: "drop.{ns}", error: "error.{ns}", focus: "focus.{ns}", focusIn: "focusin.{ns}", focusOut: "focusout.{ns}", gestureChange: "gesturechange.{ns}", gestureStart: "gesturestart.{ns}", gestureEnd: "gestureend.{ns}", input: "input.{ns}", keyDown: "keydown.{ns}", keyPress: "keypress.{ns}", keyUp: "keyup.{ns}", load: "load.{ns}", mouseDown: "mousedown.{ns}", mouseEnter: "mouseenter.{ns}", mouseLeave: "mouseleave.{ns}", mouseMove: "mousemove.{ns}", mouseOut: "mouseout.{ns}", mouseOver: "mouseover.{ns}", mouseUp: "mouseup.{ns}", panStart: "panstart.{ns}", pan: "pan.{ns}", panEnd: "panend.{ns}", resize: "resize.{ns}", scaleStart: "scalestart.{ns}", scaleEnd: "scaleend.{ns}", scale: "scale.{ns}", scroll: "scroll.{ns}", select: "select.{ns}", swipe: "swipe.{ns}", touchCancel: "touchcancel.{ns}", touchEnd: "touchend.{ns}", touchLeave: "touchleave.{ns}", touchMove: "touchmove.{ns}", touchStart: "touchstart.{ns}" }, u = null, p = 20, f = [], h = !1; function m(e, t, n, i) { var a, o = { raw: {} }; for (a in i = i || {}) i.hasOwnProperty(a) && ("classes" === e ? (o.raw[i[a]] = t + "-" + i[a], o[i[a]] = "." + t + "-" + i[a]) : (o.raw[a] = i[a], o[a] = i[a] + "." + t)); for (a in n) n.hasOwnProperty(a) && ("classes" === e ? (o.raw[a] = n[a].replace(/{ns}/g, t), o[a] = n[a].replace(/{ns}/g, "." + t)) : (o.raw[a] = n[a].replace(/.{ns}/g, ""), o[a] = n[a].replace(/{ns}/g, t))); return o } function v() { l.windowWidth = l.$window.width(), l.windowHeight = l.$window.height(), u = r.startTimer(u, p, b) } function b() { for (var e in l.ResizeHandlers) l.ResizeHandlers.hasOwnProperty(e) && l.ResizeHandlers[e].callback.call(window, l.windowWidth, l.windowHeight) } function y(e, t) { return parseInt(e.priority) - parseInt(t.priority) } return e.prototype.NoConflict = function () { for (var e in l.DontConflict = !0, l.Plugins) l.Plugins.hasOwnProperty(e) && (g[e] = l.Conflicts[e], g.fn[e] = l.Conflicts.fn[e]) }, e.prototype.Ready = function (e) { "complete" === l.document.readyState || "loading" !== l.document.readyState && !l.document.documentElement.doScroll ? e() : l.document.addEventListener("DOMContentLoaded", e) }, e.prototype.Plugin = function (e, t) { function u(e) { return e.data(h) } var p, f, n, h; return l.Plugins[e] = (f = t, n = "fs-" + (p = e), h = "fs" + p.replace(/(^|\s)([a-z])/g, function (e, t, n) { return t + n.toUpperCase() }), f.initialized = !1, f.priority = f.priority || 10, f.classes = m("classes", n, c, f.classes), f.events = m("events", p, d, f.events), f.functions = g.extend({ getData: u, iterate: function (e) { for (var t = Array.prototype.slice.call(arguments, 1), n = 0, i = this.length; n < i; n++) { var a = this.eq(n), o = u(a) || {}; "undefined" !== g.type(o.$el) && e.apply(a, [o].concat(t)) } return this } }, r, f.functions), f.methods = g.extend(!0, { _construct: g.noop, _postConstruct: g.noop, _destruct: g.noop, _resize: !1, destroy: function (e) { f.functions.iterate.apply(this, [f.methods._destruct].concat(Array.prototype.slice.call(arguments, 1))), this.removeClass(f.classes.raw.element).removeData(h) } }, f.methods), f.utilities = g.extend(!0, { _initialize: !1, _delegate: !1, defaults: function (e) { f.defaults = g.extend(!0, f.defaults, e || {}) } }, f.utilities), f.widget && (l.Conflicts.fn[p] = g.fn[p], g.fn[h] = function (e) { if (this instanceof g) { var t = f.methods[e]; if ("object" === g.type(e) || !e) return function (e) { var t, n, i, a = "object" === g.type(e), o = Array.prototype.slice.call(arguments, a ? 1 : 0), r = g(); for (e = g.extend(!0, {}, f.defaults || {}, a ? e : {}), n = 0, i = this.length; n < i; n++)if (!u(t = this.eq(n))) { f.guid++; var s = "__" + f.guid, l = f.classes.raw.base + s, c = t.data(p + "-options"), d = g.extend(!0, { $el: t, guid: s, numGuid: f.guid, rawGuid: l, dotGuid: "." + l }, e, "object" === g.type(c) ? c : {}); t.addClass(f.classes.raw.element).data(h, d), f.methods._construct.apply(t, [d].concat(o)), r = r.add(t) } for (n = 0, i = r.length; n < i; n++)t = r.eq(n), f.methods._postConstruct.apply(t, [u(t)]); return this }.apply(this, arguments); if (t && 0 !== e.indexOf("_")) { var n = [t].concat(Array.prototype.slice.call(arguments, 1)); return f.functions.iterate.apply(this, n) } return this } }, l.DontConflict || (g.fn[p] = g.fn[h])), l.Conflicts[p] = g[p], g[h] = f.utilities._delegate || function (e) { var t = f.utilities[e] || f.utilities._initialize || !1; if (t) { var n = Array.prototype.slice.call(arguments, "object" === g.type(e) ? 0 : 1); return t.apply(window, n) } }, l.DontConflict || (g[p] = g[h]), f.namespace = p, f.namespaceClean = h, f.guid = 0, f.methods._resize && (l.ResizeHandlers.push({ namespace: p, priority: f.priority, callback: f.methods._resize }), l.ResizeHandlers.sort(y)), f.methods._raf && (l.RAFHandlers.push({ namespace: p, priority: f.priority, callback: f.methods._raf }), l.RAFHandlers.sort(y)), f), l.Plugins[e] }, l.$window.on("resize.fs", v), v(), function e() { if (l.support.raf) for (var t in l.window.requestAnimationFrame(e), l.RAFHandlers) l.RAFHandlers.hasOwnProperty(t) && l.RAFHandlers[t].callback.call(window) }(), l.Ready(function () { l.$body = g("body"), g("html").addClass(l.support.touch ? "touchevents" : "no-touchevents"), t = g('meta[name="viewport"]'), n = !!t.length && t.attr("content"), i = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0", s.resolve() }), d.clickTouchStart = d.click + " " + d.touchStart, function () { var e, t = { WebkitTransition: "webkitTransitionEnd", MozTransition: "transitionend", OTransition: "otransitionend", transition: "transitionend" }, n = ["transition", "-webkit-transition"], i = { transform: "transform", MozTransform: "-moz-transform", OTransform: "-o-transform", msTransform: "-ms-transform", webkitTransform: "-webkit-transform" }, a = "transitionend", o = "", r = "", s = document.createElement("div"); for (e in t) if (t.hasOwnProperty(e) && e in s.style) { a = t[e], l.support.transition = !0; break } for (e in d.transitionEnd = a + ".{ns}", n) if (n.hasOwnProperty(e) && n[e] in s.style) { o = n[e]; break } for (e in l.transition = o, i) if (i.hasOwnProperty(e) && i[e] in s.style) { l.support.transform = !0, r = i[e]; break } l.transform = r }(), window.Formstone = l }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery"], e) : e(jQuery, Formstone) }(function (l, o) { "use strict"; function t() { u.scrollDepth && r() } function n() { var e, t = l(this), n = "undefined" !== l.type(t[0].href) ? t[0].href : "", i = document.domain.split(".").reverse(), a = null !== n.match(i[1] + "." + i[0]); n.match(/^mailto\:/i) ? e = "Email, Click, " + n.replace(/^mailto\:/i, "") : n.match(/^tel\:/i) ? e = "Telephone, Click, " + n.replace(/^tel\:/i, "") : n.match(u.fileTypes) ? e = "File, Download:" + (/[.]/.exec(n) ? /[^.]+$/.exec(n) : void 0)[0] + ", " + n.replace(/ /g, "-") : a || (e = "ExternalLink, Click, " + n), e && t.attr(y, e) } function i(e) { g.startTimer(x, 250, a) } function a() { for (var e, t = f.scrollTop() + o.windowHeight, n = 1 / u.scrollStops, i = n, a = 1; a <= u.scrollStops; a++)e = Math.round(100 * i).toString(), !w[$][e].passed && t > w[$][e].edge && (w[$][e].passed = !0, c(l.extend(u.scrollFields, { eventCategory: "ScrollDepth", eventAction: $, eventLabel: e, nonInteraction: !0 }))), i += n } function r() { var e, t = l.mediaquery("state"), n = h.outerHeight(), i = {}, a = 1 / u.scrollStops, o = a, r = 0; t.minWidth && ($ = "MinWidth:" + t.minWidth + "px"); for (var s = 1; s <= u.scrollStops; s++)r = parseInt(n * o), i[e = Math.round(100 * o).toString()] = { edge: "100" === e ? r - 10 : r, passsed: !(!w[$] || !w[$][e]) && w[$][e].passed }, o += a; w[$] = i } function s(e) { var t = l(this), n = t.attr("href"), i = t.data(b).split(","); for (var a in u.eventCallback && e.preventDefault(), i) i.hasOwnProperty(a) && (i[a] = l.trim(i[a])); c({ eventCategory: i[0], eventAction: i[1], eventLabel: i[2] || n, eventValue: i[3], nonInteraction: i[4] }, t) } function c(e, t) { p.location; var n = l.extend({ hitType: "event" }, e); if ("undefined" !== l.type(t) && !t.attr("data-analytics-stop")) { var i = "undefined" !== l.type(t[0].href) ? t[0].href : "", a = !i.match(/^mailto\:/i) && !i.match(/^tel\:/i) && i.indexOf(":") < 0 ? p.location.protocol + "//" + p.location.hostname + "/" + i : i; if ("" !== a) { var o = t.attr("target"); if (o) p.open(a, o); else if (u.eventCallback) { var r = "hitCallback"; n[r] = function () { var e; C && (g.clearTimer(C), e = a, document.location = e) }, C = g.startTimer(C, u.eventTimeout, n[r]) } } } d(n) } function d(e) { if ("function" === l.type(p.ga) && "function" === l.type(p.ga.getAll)) for (var t = p.ga.getAll(), n = 0, i = t.length; n < i; n++)p.ga(t[n].get("name") + ".send", e) } var e = o.Plugin("analytics", { methods: { _resize: t }, utilities: { _delegate: function () { if (arguments.length && "object" !== l.type(arguments[0])) if ("destroy" === arguments[0]) (function () { v && h && h.length && (f.off(m.namespace), h.off(m.namespace), v = !1) }).apply(this); else { var e = Array.prototype.slice.call(arguments, 1); switch (arguments[0]) { case "pageview": (function (e) { d(l.extend({ hitType: "pageview" }, e)) }).apply(this, e); break; case "event": c.apply(this, e) } } else (function (e) { !v && h && h.length && (v = !0, (u = l.extend(u, e || {})).autoEvents && h.find("a").not("[" + y + "]").each(n), u.scrollDepth && (r(), f.on(m.scroll, i).one(m.load, t)), h.on(m.click, "*[" + y + "]", s)) }).apply(this, arguments); return null } } }), u = { autoEvents: !1, fileTypes: /\.(zip|exe|dmg|pdf|doc.*|xls.*|ppt.*|mp3|txt|rar|wma|mov|avi|wmv|flv|wav)$/i, eventCallback: !1, eventTimeout: 1e3, scrollDepth: !1, scrollStops: 5, scrollFields: {} }, p = o.window, f = o.$window, h = null, g = e.functions, m = e.events, v = !1, b = "analytics-event", y = "data-" + b, w = {}, x = null, $ = "Site", C = null; o.Ready(function () { h = o.$body }) }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./analytics"], e) : e(jQuery, Formstone) }(function (l, t) { "use strict"; function n(e) { var t = e.currentTarget; 1 < e.which || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || window.location.protocol !== t.protocol || window.location.host !== t.host || "_blank" === t.target || t.hash && (t.href.replace(t.hash, "") === window.location.href.replace(location.hash, "") || t.href === window.location.href + "#") || t.href.match(u.ignoreTypes) || (g.killEvent(e), e.stopImmediatePropagation(), t.href !== y && a(t.href, !0)) } function i(e) { d && d.abort(); var t = e.originalEvent.state; t && (w = t.id, t.url !== y && a(t.url, !1)) } function a(i, e) { d && d.abort(), f.trigger(m.requested, [e]), u.transitionOutDeferred = u.transitionOut.apply(h, [!1]); var a = c(i), t = a.params, n = (a.hash, a.clean), o = "User error", r = null, s = l.Deferred(); t[u.requestKey] = !0, d = l.ajax({ url: n, data: t, dataType: "json", cache: u.cache, xhr: function () { var e = new h.XMLHttpRequest; return e.addEventListener("progress", function (e) { if (e.lengthComputable) { var t = e.loaded / e.total; f.trigger(m.progress, [t]) } }, !1), e }, success: function (e, t, n) { r = "string" === l.type(e) ? l.parseJSON(e) : e, e.location && (i = e.location, (a = c(i)).hash), s.resolve() }, error: function (e, t, n) { o = n, s.reject() } }), l.when(s, u.transitionOutDeferred).done(function () { !function (e, t, n) { var i, a; f.trigger(m.loaded, [t]), void 0 !== l.fsAnalytics && l.fsAnalytics("pageview"), u.render.call(this, t, e.hash), y = e.url, n && (i = ++w, a = y, history.pushState({ id: i, url: a }, b + i, a)), f.trigger(m.rendered, [t]); var o = !1; if ("" !== e.hash) { var r = l(e.hash); r.length && (o = r.offset().top) } !1 !== o && f.scrollTop(o) }(a, r, e) }).fail(function () { f.trigger(m.failed, [o]) }) } function o(e, t) { var n; if ("undefined" !== l.type(e)) for (var i in e) e.hasOwnProperty(i) && (n = l(i)).length && n.html(e[i]) } function r(e, t) { history.replaceState({ id: e, url: t }, b + e, t) } function c(e) { var t = e.indexOf("?"), n = e.indexOf("#"), i = {}, a = "", o = e; return -1 < n && (a = e.slice(n), o = e.slice(0, n)), -1 < t && (i = g.parseQueryString(e.slice(t + 1, -1 < n ? n : e.length)), o = e.slice(0, t)), { hash: a, params: i, url: e, clean: o } } var s, d, u, e = t.Plugin("asap", { utilities: { _initialize: function (e) { !u && t.support.history && (s = t.$body, (u = l.extend(p, e)).render === l.noop && (u.render = o), u.transitionOut === l.noop && (u.transitionOut = function () { return l.Deferred().resolve() }), history.state ? (w = history.state.id, y = history.state.url) : (y = window.location.href, r(w, y)), f.on(m.popState, i), s && !s.hasClass(v.base) && s.on(m.click, u.selector, n).addClass(v.base)) }, load: function (e) { u && t.support.history ? e && a(e, !0) : window.location.href = e }, replace: function (e) { var t = history.state; y = e, r(t.id, e) } }, events: { failed: "failed", loaded: "loaded", popState: "popstate", progress: "progress", requested: "requested", rendered: "rendered" } }), p = { cache: !0, ignoreTypes: /\.(jpg|sjpg|jpeg|png|gif|zip|exe|dmg|pdf|doc.*|xls.*|ppt.*|mp3|txt|rar|wma|mov|avi|wmv|flv|wav)$/i, render: l.noop, requestKey: "fs-asap", selector: "a", transitionOut: l.noop }, f = t.$window, h = f[0], g = e.functions, m = e.events, v = e.classes.raw, b = "asap-", y = "", w = 1 }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./transition"], e) : e(jQuery, Formstone) }(function (c, i) { "use strict"; function e() { (k = C.scrollTop() + i.windowHeight) < 0 && (k = 0), x.iterate.call(H, s) } function t() { T = c(b.base), H = c(b.lazy), x.iterate.call(H, r) } function n(e) { if (e.visible) { var t = e.source; e.source = null, a(e, t, !0) } } function a(e, t, n) { if (t !== e.source && e.visible) { if (e.source = t, e.responsive = !1, e.isYouTube = !1, "object" === c.type(t) && "string" === c.type(t.video)) { var i = t.video.match(/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i); i && 1 <= i.length && (e.isYouTube = !0, e.videoId = i[1]) } var a = !e.isYouTube && "object" === c.type(t) && (t.hasOwnProperty("mp4") || t.hasOwnProperty("ogg") || t.hasOwnProperty("webm")); if (e.video = e.isYouTube || a, e.playing = !1, e.isYouTube) e.playerReady = !1, e.posterLoaded = !1, p(e, t, n); else if ("object" === c.type(t) && t.hasOwnProperty("poster")) !function (t, e, n) { t.source && t.source.poster && (u(t, t.source.poster, !0, !0), n = !1); var i = '<div class="' + [y.media, y.video, !0 !== n ? y.animated : ""].join(" ") + '" aria-hidden="true">'; i += "<video playsinline", t.loop && (i += " loop"), t.mute && (i += " muted"), t.autoPlay && (i += " autoplay"), i += ">", t.source.webm && (i += '<source src="' + t.source.webm + '" type="video/webm" />'), t.source.mp4 && (i += '<source src="' + t.source.mp4 + '" type="video/mp4" />'), t.source.ogg && (i += '<source src="' + t.source.ogg + '" type="video/ogg" />'), i += "</video>"; var a = c(i += "</div>"); a.find("video").one(w.loadedMetaData, function (e) { a.fsTransition({ property: "opacity" }, function () { f(t) }).css({ opacity: 1 }), g(t), t.$el.trigger(w.loaded), t.autoPlay && h(t) }), t.$container.append(a) }(e, 0, n); else { var o = t; if ("object" === c.type(t)) { var r, s = [], l = []; for (r in t) t.hasOwnProperty(r) && l.push(r); for (r in l.sort(x.sortAsc), l) l.hasOwnProperty(r) && s.push({ width: parseInt(l[r]), url: t[l[r]], mq: $.matchMedia("(min-width: " + parseInt(l[r]) + "px)") }); e.responsive = !0, e.sources = s, o = d(e) } u(e, o, !1, n) } } else e.$el.trigger(w.loaded) } function d(e) { var t = e.source; if (e.responsive) for (var n in t = e.sources[0].url, e.sources) e.sources.hasOwnProperty(n) && (i.support.matchMedia ? e.sources[n].mq.matches && (t = e.sources[n].url) : e.sources[n].width < i.fallbackWidth && (t = e.sources[n].url)); return t } function u(e, t, n, i) { var a = [y.media, y.image, !0 !== i ? y.animated : ""].join(" "), o = c('<div class="' + a + '" aria-hidden="true"><img alt="' + e.alt + '"></div>'), r = o.find("img"), s = t; r.one(w.load, function () { j && o.addClass(y.native).css({ backgroundImage: "url('" + s + "')" }), o.fsTransition({ property: "opacity" }, function () { n || f(e) }).css({ opacity: 1 }), g(e), n && !i || e.$el.trigger(w.loaded) }).one(w.error, e, l).attr("src", s), e.responsive && o.addClass(y.responsive), e.$container.append(o), !r[0].complete && 4 !== r[0].readyState || r.trigger(w.load), e.currentSource = s } function p(t, e, n) { if (!t.videoId) { var i = e.match(/^.*(?:youtu.be\/|v\/|e\/|u\/\w+\/|embed\/|v=)([^#\&\?]*).*/); t.videoId = i[1] } if (t.posterLoaded || (t.source.poster || (t.source.poster = "//img.youtube.com/vi/" + t.videoId + "/0.jpg"), t.posterLoaded = !0, u(t, t.source.poster, !0, n), n = !1), c("script[src*='youtube.com/iframe_api']").length || c("head").append('<script src="//www.youtube.com/iframe_api"><\/script>'), W) { var a = t.guid + "_" + t.youTubeGuid++, o = '<div class="' + [y.media, y.embed, !0 !== n ? y.animated : ""].join(" ") + '" aria-hidden="true">'; o += '<div id="' + a + '"></div>'; var r = c(o += "</div>"), s = c.extend(!0, {}, { controls: 0, rel: 0, showinfo: 0, wmode: "transparent", enablejsapi: 1, version: 3, playerapiid: a, loop: t.loop ? 1 : 0, autoplay: 1, mute: 1, origin: $.location.protocol + "//" + $.location.host }, t.youtubeOptions); s.autoplay = 1, t.$container.append(r), t.player && (t.oldPlayer = t.player, t.player = null), t.player = new $.YT.Player(a, { videoId: t.videoId, playerVars: s, events: { onReady: function (e) { t.playerReady = !0, t.mute && t.player.mute(), t.autoPlay ? t.player.playVideo() : t.player.pauseVideo() }, onStateChange: function (e) { t.playing || e.data !== $.YT.PlayerState.PLAYING ? t.loop && t.playing && e.data === $.YT.PlayerState.ENDED && t.player.playVideo() : (t.playing = !0, r.fsTransition({ property: "opacity" }, function () { f(t) }).css({ opacity: 1 }), g(t), t.$el.trigger(w.loaded)), t.$el.find(b.embed).addClass(y.ready) }, onPlaybackQualityChange: function (e) { }, onPlaybackRateChange: function (e) { }, onError: function (e) { l({ data: t }) }, onApiChange: function (e) { } } }), g(t) } else _.push({ data: t, source: e }) } function f(e) { var t = e.$container.find(b.media); 1 <= t.length && (t.not(":last").remove(), e.oldPlayer = null) } function l(e) { e.data.$el.trigger(w.error) } function h(e) { if (e.video && !e.playing) if (e.isYouTube) e.playerReady ? e.player.playVideo() : e.autoPlay = !0; else { var t = e.$container.find("video"); t.length && t[0].play(), e.playing = !0 } } function o(e) { if (e.visible) if (e.responsive) { var t = d(e); t !== e.currentSource ? u(e, t, !1, !0) : g(e) } else g(e) } function g(e) { for (var t = e.$container.find(b.media), n = 0, i = t.length; n < i; n++) { var a = t.eq(n), o = e.isYouTube ? "iframe" : a.find("video").length ? "video" : "img", r = a.find(o); if (r.length && ("img" != o || !j)) { var s = e.$el.outerWidth(), l = e.$el.outerHeight(), c = m(e, r); e.width = c.width, e.height = c.height, e.left = 0, e.top = 0; var d = e.isYouTube ? e.embedRatio : e.width / e.height; e.height = l, e.width = e.height * d, e.width < s && (e.width = s, e.height = e.width / d), e.left = -(e.width - s) / 2, e.top = -(e.height - l) / 2, a.css({ height: e.height, width: e.width, left: e.left, top: e.top }) } } } function r(e) { e.scrollTop = e.$el.offset().top } function s(e) { !e.visible && e.scrollTop < k + e.lazyEdge && (e.visible = !0, n(e)) } function m(e, t) { if (e.isYouTube) return { height: 500, width: 500 / e.embedRatio }; if (t.is("img")) { var n = t[0]; if ("undefined" !== c.type(n.naturalHeight)) return { height: n.naturalHeight, width: n.naturalWidth }; var i = new Image; return i.src = n.src, { height: i.height, width: i.width } } return { height: t[0].videoHeight, width: t[0].videoWidth } } var v = i.Plugin("background", { widget: !0, defaults: { alt: "", autoPlay: !0, customClass: "", embedRatio: 1.777777, lazy: !1, lazyEdge: 100, loop: !0, mute: !0, source: null, youtubeOptions: {} }, classes: ["container", "media", "animated", "responsive", "native", "fixed", "ready", "lazy"], events: { loaded: "loaded", ready: "ready", loadedMetaData: "loadedmetadata" }, methods: { _construct: function (e) { e.youTubeGuid = 0, e.$container = c('<div class="' + y.container + '"></div>').appendTo(this), e.thisClasses = [y.base, e.customClass], e.visible = !0, e.lazy && (e.visible = !1, e.thisClasses.push(y.lazy)), this.addClass(e.thisClasses.join(" ")), t(), e.lazy ? (r(e), s(e)) : n(e) }, _destruct: function (e) { e.$container.remove(), this.removeClass(e.thisClasses.join(" ")).off(w.namespace), t() }, _resize: function () { x.iterate.call(T, o), x.iterate.call(H, r), x.iterate.call(H, s) }, play: h, pause: function (e) { if (e.video && e.playing) { if (e.isYouTube) e.playerReady ? e.player.pauseVideo() : e.autoPlay = !1; else { var t = e.$container.find("video"); t.length && t[0].pause() } e.playing = !1 } }, mute: function (e) { if (e.video) if (e.isYouTube && e.playerReady) e.player.mute(); else { var t = e.$container.find("video"); t.length && (t[0].muted = !0) } e.mute = !0 }, unmute: function (e) { if (e.video) { if (e.isYouTube && e.playerReady) e.player.unMute(); else { var t = e.$container.find("video"); t.length && (t[0].muted = !1) } e.playing = !0 } e.mute = !1 }, resize: g, load: a, unload: function (e) { var t = e.$container.find(b.media); 1 <= t.length && t.fsTransition({ property: "opacity" }, function () { t.remove(), delete e.source }).css({ opacity: 0 }) } } }), b = v.classes, y = b.raw, w = v.events, x = v.functions, $ = i.window, C = i.$window, k = 0, T = [], H = [], j = "backgroundSize" in i.document.documentElement.style, W = !1, _ = []; i.Ready(function () { e(), C.on("scroll", e) }), $.onYouTubeIframeAPIReady = function () { for (var e in W = !0, _) _.hasOwnProperty(e) && p(_[e].data, _[e].source); _ = [] } }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery", "./touch"], e) : e(jQuery, Formstone) }(function (p, f) { "use strict"; function u() { A = p(_.base) } function h(e) { e.enabled && (M.clearTimer(e.autoTimer), e.enabled = !1, e.$subordinate.off(E.update), this.removeClass([S.enabled, S.animated].join(" ")).off(E.namespace), e.$canister.fsTouch("destroy").off(E.namespace).attr("style", "").css(I, "none"), e.$items.css({ width: "", height: "" }).removeClass([S.visible, _.item_previous, _.item_next].join(" ")), e.$images.off(E.namespace), e.$controlItems.off(E.namespace), e.$pagination.html("").off(E.namespace), b(e), e.useMargin ? e.$canister.css({ marginLeft: "" }) : e.$canister.css(P, ""), e.index = 0) } function g(n) { n.enabled || (n.enabled = !0, this.addClass(S.enabled), n.$controlItems.on(E.click, n, r), n.$pagination.on(E.click, _.page, n, s), n.$items.on(E.click, n, x), n.$subordinate.on(E.update, n, C), C({ data: n }, 0), n.$canister.fsTouch({ axis: "x", pan: !0, swipe: !0 }).on(E.panStart, n, l).on(E.pan, n, c).on(E.panEnd, n, d).on(E.swipe, n, y).on(E.focusIn, n, $).css(I, ""), m(n), n.$images.on(E.load, n, o), n.autoAdvance && (n.autoTimer = M.startTimer(n.autoTimer, n.autoTime, function () { var e, t; (t = (e = n).index + 1) >= e.pageCount && (t = 0), v(e, t) }, !0)), i.call(this, n)) } function i(e) { if (e.enabled) { var t, n, i, a, o; if (e.count = e.$items.length, e.count < 1) return b(e), void e.$canister.css({ height: "" }); if (this.removeClass(S.animated), e.containerWidth = e.$container.outerWidth(!1), e.visible = function (e) { var t = 1; if (e.single) return t; if ("array" === p.type(e.show)) for (var n in e.show) e.show.hasOwnProperty(n) && (f.support.matchMedia ? e.show[n].mq.matches && (t = e.show[n].count) : e.show[n].width < f.fallbackWidth && (t = e.show[n].count)); else t = e.show; return e.fill && e.count < t ? e.count : t }(e), e.perPage = e.paged ? 1 : e.visible, e.itemMarginLeft = parseInt(e.$items.eq(0).css("marginLeft")), e.itemMarginRight = parseInt(e.$items.eq(0).css("marginRight")), e.itemMargin = e.itemMarginLeft + e.itemMarginRight, isNaN(e.itemMargin) && (e.itemMargin = 0), e.itemWidth = (e.containerWidth - e.itemMargin * (e.visible - 1)) / e.visible, e.itemHeight = 0, e.pageWidth = e.paged ? e.itemWidth : e.containerWidth, e.matchWidth) e.canisterWidth = e.single ? e.containerWidth : (e.itemWidth + e.itemMargin) * e.count; else for (e.canisterWidth = 0, e.$canister.css({ width: 1e6 }), t = 0; t < e.count; t++)e.canisterWidth += e.$items.eq(t).outerWidth(!0); e.$canister.css({ width: e.canisterWidth, height: "" }), e.$items.css({ width: e.matchWidth ? e.itemWidth : "", height: "" }).removeClass([S.visible, S.item_previous, S.item_next].join(" ")), e.pages = [], e.items = []; var r, s = 0, l = 0, c = 0; for (a = i = 0, n = p(), t = 0; t < e.count; t++)r = e.$items.eq(t), s = e.matchWidth ? e.itemWidth + e.itemMargin : r.outerWidth(!0), l = r.outerHeight(), c = r.position().left, e.items.push({ $el: r, width: s, left: e.rtl ? c - (e.canisterWidth - s) : c }), (n.length && i + s > e.containerWidth + e.itemMargin || e.paged && 0 < t) && (o = (e.rtl ? n.eq(n.length - 1) : n.eq(0)).position().left, e.pages.push({ left: e.rtl ? o - (e.canisterWidth - i) : o, height: a, width: i, $items: n }), n = p(), i = a = 0), n = n.add(r), i += s, a < l && (a = l), a > e.itemHeight && (e.itemHeight = a); e.rtl ? n.eq(n.length - 1) : n.eq(0), o = e.canisterWidth - e.containerWidth - (e.rtl ? e.itemMarginLeft : e.itemMarginRight), e.pages.push({ left: e.rtl ? -o : o, height: a, width: i, $items: n }), e.pageCount = e.pages.length, e.paged && (e.pageCount -= e.count % e.visible), e.pageCount <= 0 && (e.pageCount = 1), e.maxMove = -e.pages[e.pageCount - 1].left, e.autoHeight ? e.$canister.css({ height: e.pages[0].height }) : e.matchHeight && e.$items.css({ height: e.itemHeight }); var d = ""; for (t = 0; t < e.pageCount; t++)d += '<button type="button" class="' + S.page + '">' + (t + 1) + "</button>"; e.$pagination.html(d), e.pageCount <= 1 ? b(e) : ((u = e).$controls.addClass(S.visible), u.$controlItems.addClass(S.visible), u.$pagination.addClass(S.visible)), e.$paginationItems = e.$pagination.find(_.page), v(e, e.index, !1), setTimeout(function () { e.$el.addClass(S.animated) }, 5) } var u } function m(e) { e.$items = e.$canister.children().not(":hidden").addClass(S.item), e.$images = e.$canister.find("img"), e.totalImages = e.$images.length } function t(e, t) { e.$images.off(E.namespace), !1 !== t && e.$canister.html(t), e.index = 0, m(e), i.call(this, e) } function e(e, t, n, i, a) { e.enabled && (M.clearTimer(e.autoTimer), void 0 === a && (a = !0), v(e, t - 1, a, n, i)) } function n(e) { var t = e.index - 1; e.infinite && t < 0 && (t = e.pageCount - 1), v(e, t) } function a(e) { var t = e.index + 1; e.infinite && t >= e.pageCount && (t = 0), v(e, t) } function o(e) { var t = e.data; t.resizeTimer = M.startTimer(t.resizeTimer, 1, function () { i.call(t.$el, t) }) } function r(e) { M.killEvent(e); var t = e.data, n = t.index + (p(e.currentTarget).hasClass(S.control_next) ? 1 : -1); M.clearTimer(t.autoTimer), v(t, n) } function s(e) { M.killEvent(e); var t = e.data, n = t.$paginationItems.index(p(e.currentTarget)); M.clearTimer(t.autoTimer), v(t, n) } function v(e, t, n, i, a) { if (t < 0 && (t = e.infinite ? e.pageCount - 1 : 0), t >= e.pageCount && (t = e.infinite ? 0 : e.pageCount - 1), !(e.count < 1)) { if (e.pages[t] && (e.leftPosition = -e.pages[t].left), e.leftPosition = k(e, e.leftPosition), e.useMargin ? e.$canister.css({ marginLeft: e.leftPosition }) : !1 === n ? (e.$canister.css(I, "none").css(P, "translateX(" + e.leftPosition + "px)"), setTimeout(function () { e.$canister.css(I, "") }, 5)) : e.$canister.css(P, "translateX(" + e.leftPosition + "px)"), e.$items.removeClass([S.visible, S.item_previous, S.item_next].join(" ")), e.single) for (var o = 0, r = e.pages.length; o < r; o++)o === t ? e.pages[o].$items.addClass(S.visible).attr("aria-hidden", "false") : e.pages[o].$items.not(e.pages[t].$items).addClass(o < t ? S.item_previous : S.item_next).attr("aria-hidden", "true"); else for (o = 0; o < e.count; o++) { var s = e.rtl ? -1 : 1, l = e.leftPosition * s + e.items[o].left * s, c = l + e.items[o].width, d = e.containerWidth + e.itemMargin + 1; -1 <= l && c <= d ? e.items[o].$el.addClass(S.visible).attr("aria-hidden", "false") : l < 0 ? e.items[o].$el.addClass(S.item_previous).attr("aria-hidden", "false") : e.items[o].$el.addClass(S.item_next).attr("aria-hidden", "false") } e.autoHeight && e.$canister.css({ height: e.pages[t].height }), !1 !== n && !0 !== i && t !== e.index && (e.infinite || -1 < t && t < e.pageCount) && e.$el.trigger(E.update, [t]), e.index = t, e.linked && !0 !== a && p(e.linked).not(e.$el)[W]("jumpPage", e.index + 1, !0, !0), (u = e).$paginationItems.removeClass(S.active).eq(u.index).addClass(S.active), u.infinite ? u.$controlItems.addClass(S.visible) : u.pageCount < 1 ? u.$controlItems.removeClass(S.visible) : (u.$controlItems.addClass(S.visible), u.index <= 0 ? u.$controlPrevious.removeClass(S.visible) : (u.index >= u.pageCount - 1 || !u.single && u.leftPosition === u.maxMove) && u.$controlNext.removeClass(S.visible)) } var u } function b(e) { e.$controls.removeClass(S.visible), e.$controlItems.removeClass(S.visible), e.$pagination.removeClass(S.visible) } function l(e, t) { var n = e.data; if (M.clearTimer(n.autoTimer), !n.single) { if (n.useMargin) n.leftPosition = parseInt(n.$canister.css("marginLeft")); else { var i = n.$canister.css(P).split(","); n.leftPosition = parseInt(i[4]) } if (n.$canister.css(I, "none").css("will-change", "transform"), c(e), n.linked && !0 !== t) { var a = e.deltaX / n.pageWidth; n.rtl && (a *= -1), p(n.linked).not(n.$el)[W]("panStart", a) } } n.isTouching = !0 } function c(e, t) { var n = e.data; if (!n.single && (n.touchLeft = k(n, n.leftPosition + e.deltaX), n.useMargin ? n.$canister.css({ marginLeft: n.touchLeft }) : n.$canister.css(P, "translateX(" + n.touchLeft + "px)"), n.linked && !0 !== t)) { var i = e.deltaX / n.pageWidth; n.rtl && (i *= -1), p(n.linked).not(n.$el)[W]("pan", i) } } function d(e, t) { var n = e.data, i = Math.abs(e.deltaX), a = T(n, e), o = !1; if (n.didPan = !1, 0 == a) o = n.index; else { if (!n.single) { var r, s, l = Math.abs(n.touchLeft), c = !1, d = n.rtl ? "right" : "left"; if (e.directionX === d) for (r = 0, s = n.pages.length; r < s; r++)c = n.pages[r], l > Math.abs(c.left) + 20 && (o = r + 1); else for (r = n.pages.length - 1, s = 0; s <= r; r--)c = n.pages[r], l < Math.abs(c.left) && (o = r - 1) } !1 === o && (o = i < 50 ? n.index : n.index + a) } o !== n.index && (n.didPan = !0), n.linked && !0 !== t && p(n.linked).not(n.$el)[W]("panEnd", o), w(n, o) } function y(e, t) { var n = e.data, i = T(n, e), a = n.index + i; n.linked && !0 !== t && p(n.linked).not(n.$el)[W]("swipe", e.directionX), w(n, a) } function w(e, t) { e.$canister.css(I, "").css("will-change", ""), v(e, t), e.isTouching = !1 } function x(e) { var t = e.data, n = p(e.currentTarget); if (!t.didPan && (n.trigger(E.itemClick), t.controller)) { var i = t.$items.index(n); C(e, i), t.$subordinate[W]("jumpPage", i + 1, !0) } } function $(e) { var t = e.data; if (t.enabled && !t.isTouching) { M.clearTimer(t.autoTimer), t.$container.scrollLeft(0); var n, i = p(e.target); i.hasClass(S.item) ? n = i : i.parents(_.item).length && (n = i.parents(_.item).eq(0)); for (var a = 0; a < t.pageCount; a++)if (t.pages[a].$items.is(n)) { v(t, a); break } } } function C(e, t) { var n = e.data; if (n.controller) { var i = n.$items.eq(t); n.$items.removeClass(S.active), i.addClass(S.active); for (var a = 0; a < n.pageCount; a++)if (n.pages[a].$items.is(i)) { v(n, a, !0, !0); break } } } function k(e, t) { return isNaN(t) ? t = 0 : e.rtl ? (t > e.maxMove && (t = e.maxMove), t < 0 && (t = 0)) : (t < e.maxMove && (t = e.maxMove), 0 < t && (t = 0)), t } function T(e, t) { return Math.abs(t.deltaX) < Math.abs(t.deltaY) ? 0 : e.rtl ? "right" === t.directionX ? 1 : -1 : "left" === t.directionX ? 1 : -1 } var H = f.Plugin("carousel", { widget: !0, defaults: { autoAdvance: !1, autoHeight: !1, autoTime: 8e3, contained: !0, controls: !0, customClass: "", fill: !1, infinite: !1, labels: { next: "Next", previous: "Previous", controls: "Carousel {guid} Controls", pagination: "Carousel {guid} Pagination" }, matchHeight: !1, matchWidth: !0, maxWidth: 1 / 0, minWidth: "0px", paged: !1, pagination: !0, rtl: !1, show: 1, single: !1, theme: "fs-light", useMargin: !1 }, classes: ["ltr", "rtl", "viewport", "wrapper", "container", "canister", "item", "item_previous", "item_next", "controls", "controls_custom", "control", "control_previous", "control_next", "pagination", "page", "animated", "enabled", "visible", "active", "auto_height", "contained", "single"], events: { itemClick: "itemClick", update: "update" }, methods: { _construct: function (e) { var t; e.didPan = !1, e.carouselClasses = [S.base, e.theme, e.customClass, e.rtl ? S.rtl : S.ltr], e.maxWidth = e.maxWidth === 1 / 0 ? "100000px" : e.maxWidth, e.mq = "(min-width:" + e.minWidth + ") and (max-width:" + e.maxWidth + ")", e.customControls = "object" === p.type(e.controls) && e.controls.previous && e.controls.next, e.customPagination = "string" === p.type(e.pagination), e.id = this.attr("id"), e.id ? e.ariaId = e.id : (e.ariaId = e.rawGuid, this.attr("id", e.ariaId)), f.support.transform || (e.useMargin = !0); var n = "", i = "", a = [S.control, S.control_previous].join(" "), o = [S.control, S.control_next].join(" "); e.controls && !e.customControls && (e.labels.controls = e.labels.controls.replace("{guid}", e.numGuid), n += '<div class="' + S.controls + '" aria-label="' + e.labels.controls + '" aria-controls="' + e.ariaId + '">', n += '<button type="button" class="' + a + '" aria-label="' + e.labels.previous + '">' + e.labels.previous + "</button>", n += '<button type="button" class="' + o + '" aria-label="' + e.labels.next + '">' + e.labels.next + "</button>", n += "</div>"), e.pagination && !e.customPagination && (e.labels.pagination = e.labels.pagination.replace("{guid}", e.numGuid), i += '<div class="' + S.pagination + '" aria-label="' + e.labels.pagination + '" aria-controls="' + e.ariaId + '" role="navigation">', i += "</div>"), e.autoHeight && e.carouselClasses.push(S.auto_height), e.contained && e.carouselClasses.push(S.contained), e.single && e.carouselClasses.push(S.single), this.addClass(e.carouselClasses.join(" ")).wrapInner('<div class="' + S.wrapper + '" aria-live="polite"><div class="' + S.container + '"><div class="' + S.canister + '"></div></div></div>').append(n).wrapInner('<div class="' + S.viewport + '"></div>').append(i), e.$viewport = this.find(_.viewport).eq(0), e.$container = this.find(_.container).eq(0), e.$canister = this.find(_.canister).eq(0), e.$pagination = this.find(_.pagination).eq(0), e.$controlPrevious = e.$controlNext = p(""), e.customControls ? (e.$controls = p(e.controls.container).addClass([S.controls, S.controls_custom].join(" ")), e.$controlPrevious = p(e.controls.previous).addClass(a), e.$controlNext = p(e.controls.next).addClass(o)) : (e.$controls = this.find(_.controls).eq(0), e.$controlPrevious = e.$controls.find(_.control_previous), e.$controlNext = e.$controls.find(_.control_next)), e.$controlItems = e.$controlPrevious.add(e.$controlNext), e.customPagination && (e.$pagination = p(e.pagination).addClass([S.pagination])), e.$paginationItems = e.$pagination.find(_.page), e.index = 0, e.enabled = !1, e.leftPosition = 0, e.autoTimer = null, e.resizeTimer = null; var r = this.data(j + "-linked"); e.linked = !!r && "[data-" + j + '-linked="' + r + '"]', e.linked && (e.paged = !0); var s = this.data(j + "-controller-for") || ""; if (e.$subordinate = p(s), e.$subordinate.length && (e.controller = !0), "object" === p.type(e.show)) { var l = e.show, c = [], d = []; for (t in l) l.hasOwnProperty(t) && d.push(t); for (t in d.sort(M.sortAsc), d) d.hasOwnProperty(t) && c.push({ width: parseInt(d[t]), count: l[d[t]], mq: window.matchMedia("(min-width: " + parseInt(d[t]) + "px)") }); e.show = c } m(e), p.fsMediaquery("bind", e.rawGuid, e.mq, { enter: function () { g.call(e.$el, e) }, leave: function () { h.call(e.$el, e) } }), u(), e.carouselClasses.push(S.enabled), e.carouselClasses.push(S.animated) }, _destruct: function (e) { M.clearTimer(e.autoTimer), M.clearTimer(e.resizeTimer), h.call(this, e), p.fsMediaquery("unbind", e.rawGuid), e.id !== e.ariaId && this.removeAttr("id"), e.$controlItems.removeClass([_.control, S.control_previous, _.control_next, _.visible].join(" ")).off(E.namespace), e.$images.off(E.namespace), e.$canister.fsTouch("destroy"), e.$items.removeClass([S.item, S.visible, _.item_previous, _.item_next].join(" ")).unwrap().unwrap().unwrap().unwrap(), e.controls && !e.customControls && e.$controls.remove(), e.customControls && e.$controls.removeClass([S.controls, S.controls_custom, S.visible].join(" ")), e.pagination && !e.customPagination && e.$pagination.remove(), e.customPagination && e.$pagination.html("").removeClass([S.pagination, S.visible].join(" ")), this.removeClass(e.carouselClasses.join(" ")), u() }, _resize: function (e) { M.iterate.call(A, i) }, disable: h, enable: g, jump: e, previous: n, next: a, jumpPage: e, previousPage: n, nextPage: a, jumpItem: function (e, t, n, i, a) { if (e.enabled) { M.clearTimer(e.autoTimer); var o = e.$items.eq(t - 1); void 0 === a && (a = !0); for (var r = 0; r < e.pageCount; r++)if (e.pages[r].$items.is(o)) { v(e, r, a, n, i); break } } }, reset: function (e) { e.enabled && t.call(this, e, !1) }, resize: i, update: t, panStart: function (e, t) { if (M.clearTimer(e.autoTimer), !e.single) { if (e.rtl && (t *= -1), e.useMargin) e.leftPosition = parseInt(e.$canister.css("marginLeft")); else { var n = e.$canister.css(P).split(","); e.leftPosition = parseInt(n[4]) } e.$canister.css(I, "none"), c({ data: e, deltaX: e.pageWidth * t }, !0) } e.isTouching = !0 }, pan: function (e, t) { if (!e.single) { e.rtl && (t *= -1); var n = e.pageWidth * t; e.touchLeft = k(e, e.leftPosition + n), e.useMargin ? e.$canister.css({ marginLeft: e.touchLeft }) : e.$canister.css(P, "translateX(" + e.touchLeft + "px)") } }, panEnd: function (e, t) { w(e, t) }, swipe: function (e, t) { y({ data: e, directionX: t }, !0) } } }), j = H.namespace, W = H.namespaceClean, _ = H.classes, S = _.raw, E = H.events, M = H.functions, A = [], P = f.transform, I = f.transition }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (r, e) { "use strict"; function s(e) { var t = e.data; r(e.target).is(t.$el) || (e.preventDefault(), t.$el.trigger("click")) } function l(e) { var t = e.data, n = t.$el.is(":disabled"), i = t.$el.is(":checked"); n || (t.radio ? i && a(e) : i ? a(e) : c(e)) } function a(e) { e.data.radio && r('input[name="' + e.data.group + '"]').not(e.data.$el).trigger("deselect"), e.data.$el.trigger(h.focus), e.data.$classable.addClass(f.checked) } function c(e) { e.data.$classable.removeClass(f.checked) } function d(e) { e.data.$classable.addClass(f.focus) } function u(e) { e.data.$classable.removeClass(f.focus) } var t = e.Plugin("checkbox", { widget: !0, defaults: { customClass: "", toggle: !1, labels: { on: "ON", off: "OFF" }, theme: "fs-light" }, classes: ["element_placeholder", "label", "marker", "flag", "radio", "focus", "checked", "disabled", "toggle", "state", "state_on", "state_off"], methods: { _construct: function (e) { var t = this.closest("label"), n = t.length ? t.eq(0) : r("label[for=" + this.attr("id") + "]"), i = [f.base, e.theme, e.customClass].join(" "), a = [f.label, e.theme, e.customClass].join(" "), o = ""; e.radio = "radio" === this.attr("type"), e.group = this.attr("name"), o += '<div class="' + f.marker + '" aria-hidden="true">', o += '<div class="' + f.flag + '"></div>', e.toggle && (i += " " + f.toggle, a += " " + f.toggle, o += '<span class="' + [f.state, f.state_on].join(" ") + '">' + e.labels.on + "</span>", o += '<span class="' + [f.state, f.state_off].join(" ") + '">' + e.labels.off + "</span>"), e.radio && (i += " " + f.radio, a += " " + f.radio), o += "</div>", e.$placeholder = r('<span class="' + f.element_placeholder + '"></span>'), this.before(e.$placeholder), e.labelParent = n.find(this).length, e.labelClass = a, n.addClass(a), e.labelParent ? n.wrap('<div class="' + i + '"></div>').before(o) : this.before('<div class=" ' + i + '">' + o + "</div>"), e.$checkbox = e.labelParent ? n.parents(p.base) : this.prev(p.base), e.$marker = e.$checkbox.find(p.marker), e.$states = e.$checkbox.find(p.state), e.$label = n, e.$classable = r().add(e.$checkbox).add(e.$label), this.is(":checked") && e.$classable.addClass(f.checked), this.is(":disabled") && e.$classable.addClass(f.disabled), this.appendTo(e.$marker), this.on(h.focus, e, d).on(h.blur, e, u).on(h.change, e, l).on(h.click, e, s).on(h.deselect, e, c), e.$checkbox.on(h.click, e, s) }, _destruct: function (e) { e.$checkbox.off(h.namespace), e.$marker.remove(), e.$states.remove(), e.$label.removeClass(e.labelClass), e.labelParent ? e.$label.unwrap() : this.unwrap(), e.$placeholder.before(this), e.$placeholder.remove(), this.off(h.namespace) }, enable: function (e) { this.prop("disabled", !1), e.$classable.removeClass(f.disabled) }, disable: function (e) { this.prop("disabled", !0), e.$classable.addClass(f.disabled) }, update: function (e) { var t = e.$el.is(":disabled"), n = e.$el.is(":checked"); t || (n ? a({ data: e }) : c({ data: e })) } }, events: { deselect: "deselect" } }), p = t.classes, f = p.raw, h = t.events; t.functions }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (s, e) { "use strict"; function t() { f = p.height(), u.iterate.call(m, l) } function n() { m = s(r.base), t() } function i(e) { if (e.hasParent) { var t = e.$parent.scrollTop(); t !== e.parentScroll && (a(e), e.parentScroll = t) } } function l(e) { if (e.initialized) { switch (e.parentHeight = e.hasParent ? e.$parent.outerHeight(!1) : f, e.windowIntersect) { case "top": e.windowCheck = 0 - e.offset; break; case "middle": case "center": e.windowCheck = e.parentHeight / 2 - e.offset; break; case "bottom": e.windowCheck = e.parentHeight - e.offset }switch (e.elOffset = e.$target.offset(), e.elIntersect) { case "top": e.elCheck = e.elOffset.top; break; case "middle": e.elCheck = e.elOffset.top + e.$target.outerHeight() / 2; break; case "bottom": e.elCheck = e.elOffset.top + e.$target.outerHeight() }if (e.hasParent) { var t = e.$parent.offset(); e.elCheck -= t.top } a(e) } } function a(e) { e.initialized && (e.windowCheck + (e.hasParent ? e.parentScroll : h) >= e.elCheck ? (e.active || e.$el.trigger(d.activate), e.active = !0, e.$el.addClass(c.active)) : e.reverse && (e.active && e.$el.trigger(d.deactivate), e.active = !1, e.$el.removeClass(c.active))) } var o = e.Plugin("checkpoint", { widget: !0, defaults: { intersect: "bottom-top", offset: 0, reverse: !1 }, classes: ["active"], events: { activate: "activate", deactivate: "deactivate" }, methods: { _construct: function (e) { e.initialized = !1; var t = s(e.$el.data("checkpoint-parent")), n = s(e.$el.data("checkpoint-container")), i = e.$el.data("checkpoint-intersect"), a = e.$el.data("checkpoint-offset"); i && (e.intersect = i), a && (e.offset = a); var o = e.intersect.split("-"); e.windowIntersect = o[0], e.elIntersect = o[1], e.visible = !1, e.$target = n.length ? n : e.$el, e.hasParent = 0 < t.length, e.$parent = t; var r = e.$target.find("img"); r.length && r.on(d.load, e, l), e.$el.addClass(c.base), e.initialized = !0 }, _postConstruct: function (e) { n(), t() }, _destruct: function (e) { e.$el.removeClass(c.base), n() }, _resize: t, _raf: function () { (h = p.scrollTop()) < 0 && (h = 0), h !== g && (u.iterate.call(m, a), g = h), u.iterate.call(m, i) }, resize: l } }), r = (o.namespace, o.classes), c = r.raw, d = o.events, u = o.functions, p = (e.window, e.$window), f = 0, h = 0, g = 0, m = [] }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (d, e) { "use strict"; function i(e, t, n) { var i = !1, a = new Date; n.expires && "number" === d.type(n.expires) && (a.setTime(a.getTime() + n.expires), i = a.toGMTString()); var o = n.domain ? "; domain=" + n.domain : "", r = i ? "; expires=" + i : "", s = i ? "; max-age=" + n.expires / 1e3 : "", l = n.path ? "; path=" + n.path : "", c = n.secure ? "; secure" : ""; u.cookie = e + "=" + t + r + s + o + l + c } e.Plugin("cookie", { utilities: { _delegate: function (a, e, t) { if ("object" === d.type(a)) o = d.extend(o, a); else if (t = d.extend({}, o, t || {}), "undefined" !== d.type(a)) { if ("undefined" === d.type(e)) return function () { for (var e = a + "=", t = u.cookie.split(";"), n = 0; n < t.length; n++) { for (var i = t[n]; " " === i.charAt(0);)i = i.substring(1, i.length); if (0 === i.indexOf(e)) return i.substring(e.length, i.length) } return null }(); null === e ? (n = t, i(a, "", d.extend({}, n, { expires: -6048e5 }))) : i(a, e, t) } var n; return null } } }); var o = { domain: null, expires: 6048e5, path: null, secure: null }, u = e.document }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./scrollbar", "./touch"], e) : e(jQuery, Formstone) }(function (u, p) { "use strict"; function f(e) { for (var t = "", n = 0, i = e.$allOptions.length; n < i; n++) { var a = e.$allOptions.eq(n), o = []; if ("OPTGROUP" === a[0].tagName) o.push(C.group), a.prop("disabled") && o.push(C.disabled), t += '<span class="' + o.join(" ") + '">' + a.attr("label") + "</span>"; else { var r = a.val(), s = a.data("label"), l = e.links ? "a" : 'button type="button"'; a.attr("value") || a.attr("value", r), o.push(C.item), a.hasClass(C.item_placeholder) && (o.push(C.item_placeholder), l = "span"), a.prop("selected") && o.push(C.item_selected), a.prop("disabled") && o.push(C.item_disabled), t += "<" + l + ' class="' + o.join(" ") + '"', e.links ? "span" === l ? t += ' aria-hidden="true"' : (t += ' href="' + r + '"', e.external && (t += ' target="_blank"')) : t += ' data-value="' + r + '"', t += ' role="option"', a.prop("selected") && (t += ' "aria-selected"="true"'), t += ">", t += s || c.decodeEntities(x(a.text(), e.trim)), t += "</" + l + ">" } } e.$items = e.$wrapper.html(u.parseHTML(t)).find($.item) } function h(e) { c.killEvent(e); var t = e.data; t.disabled || t.useNative || (t.closed ? i(t) : r(t)), n(t) } function n(e) { u($.base).not(e.$dropdown).trigger(k.close, [e]) } function i(e) { if (e.closed) { var t = T.height(), n = e.$wrapper.outerHeight(!0); e.$dropdown[0].getBoundingClientRect().bottom + n > t - e.bottomEdge && e.$dropdown.addClass(C.bottom), H.on(k.click + e.dotGuid, ":not(" + $.options + ")", e, a), e.$dropdown.trigger(k.focusIn), e.$dropdown.addClass(C.open), s(e), e.closed = !1 } } function r(e) { e && !e.closed && (H.off(k.click + e.dotGuid), e.$dropdown.removeClass([C.open, C.bottom].join(" ")), e.closed = !0) } function a(e) { c.killEvent(e); var t = e.data; t && 0 === u(e.currentTarget).parents($.base).length && (r(t), t.$dropdown.trigger(k.focusOut)) } function g(e) { var t = e.data; t && (r(t), t.$dropdown.trigger(k.focusOut)) } function m(e) { var t = u(this), n = e.data; if (c.killEvent(e), !n.disabled) { var i = n.$items.index(t); n.focusIndex = i, n.$wrapper.is(":visible") && (w(i, n, e.shiftKey, e.metaKey || e.ctrlKey), l(n)), n.multiple || r(n), n.$dropdown.trigger(k.focus) } } function v(e, t) { u(this); var n = e.data; if (!t && !n.multiple) { var i = n.$options.index(n.$options.filter(":selected")); w(n.focusIndex = i, n), l(n, !0) } } function b(e) { c.killEvent(e), u(e.currentTarget); var t = e.data; t.disabled || t.multiple || t.focused || (n(t), t.focused = !0, t.focusIndex = t.index, t.input = "", t.$dropdown.addClass(C.focus).on(k.keyDown + t.dotGuid, t, o)) } function y(e) { c.killEvent(e), u(e.currentTarget); var t = e.data; t.focused && t.closed && (t.focused = !1, t.$dropdown.removeClass(C.focus).off(k.keyDown + t.dotGuid), t.multiple || (r(t), t.index !== t.focusIndex && (l(t), t.focusIndex = t.index))) } function o(e) { var t = e.data; if (t.keyTimer = c.startTimer(t.keyTimer, 1e3, function () { t.input = "" }), 13 === e.keyCode) t.closed || (r(t), w(t.index, t)), l(t); else if (!(9 === e.keyCode || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)) { c.killEvent(e); var n = t.$items.length - 1, i = t.index < 0 ? 0 : t.index; if (-1 < u.inArray(e.keyCode, p.isFirefox ? [38, 40, 37, 39] : [38, 40])) (i += 38 === e.keyCode || p.isFirefox && 37 === e.keyCode ? -1 : 1) < 0 && (i = 0), n < i && (i = n); else { var a, o = String.fromCharCode(e.keyCode).toUpperCase(); for (t.input += o, a = t.index + 1; a <= n; a++)if (t.$options.eq(a).text().substr(0, t.input.length).toUpperCase() === t.input) { i = a; break } if (i < 0 || i === t.index) for (a = 0; a <= n; a++)if (t.$options.eq(a).text().substr(0, t.input.length).toUpperCase() === t.input) { i = a; break } } 0 <= i && (w(i, t), s(t)) } } function w(e, t, n, i) { var a = t.$items.eq(e), o = t.$options.eq(e), r = a.hasClass(C.item_selected); if (!a.hasClass(C.item_disabled)) if (t.multiple) if (t.useNative) r ? (o.prop("selected", null).attr("aria-selected", null), a.removeClass(C.item_selected)) : (o.prop("selected", !0).attr("aria-selected", !0), a.addClass(C.item_selected)); else if (n && !1 !== t.lastIndex) { var s = t.lastIndex > e ? e : t.lastIndex, l = (t.lastIndex > e ? t.lastIndex : e) + 1; t.$options.prop("selected", null).attr("aria-selected", null), t.$items.filter($.item_selected).removeClass(C.item_selected), t.$options.slice(s, l).not("[disabled]").prop("selected", !0), t.$items.slice(s, l).not($.item_disabled).addClass(C.item_selected) } else i || t.selectMultiple ? r ? (o.prop("selected", null).attr("aria-selected", null), a.removeClass(C.item_selected)) : (o.prop("selected", !0).attr("aria-selected", !0), a.addClass(C.item_selected)) : (t.$options.prop("selected", null).attr("aria-selected", null), t.$items.filter($.item_selected).removeClass(C.item_selected), o.prop("selected", !0).attr("aria-selected", !0), a.addClass(C.item_selected)), t.lastIndex = e; else if (-1 < e && e < t.$items.length) { if (e !== t.index) { var c = o.data("label") || a.html(); t.$selected.html(c).removeClass($.item_placeholder), t.$items.filter($.item_selected).removeClass(C.item_selected), t.$el[0].selectedIndex = e, a.addClass(C.item_selected), t.index = e } } else "" !== t.label && t.$selected.html(t.label) } function s(e) { var t = e.$items.eq(e.index), n = 0 <= e.index && !t.hasClass(C.item_placeholder) ? t.position() : { left: 0, top: 0 }, i = (e.$wrapper.outerHeight() - t.outerHeight()) / 2; void 0 !== u.fn.fsScrollbar ? e.$wrapper.fsScrollbar("resize").fsScrollbar("scroll", e.$wrapper.find(".fs-scrollbar-content").scrollTop() + n.top) : e.$wrapper.scrollTop(e.$wrapper.scrollTop() + n.top - i) } function l(e, t) { var n, i; e.links ? (i = (n = e).$el.val(), n.external ? d.open(i) : d.location.href = i) : t || e.$el.trigger(k.raw.change, [!0]) } function x(e, t) { return 0 === t ? e : e.length > t ? e.substring(0, t) + "..." : e } var e = p.Plugin("dropdown", { widget: !0, defaults: { bottomEdge: 0, cover: !1, customClass: "", label: "", external: !1, links: !1, mobile: !1, native: !1, theme: "fs-light", trim: 0, selectMultiple: !1 }, methods: { _construct: function (e) { e.multiple = this.prop("multiple"), e.disabled = this.prop("disabled") || this.is("[readonly]"), e.lastIndex = !1, e.native = e.mobile || e.native, e.useNative = e.native || p.isMobile, e.multiple ? e.links = !1 : e.external && (e.links = !0); var t = this.find("[selected]").not(":disabled"), n = this.find(":selected").not(":disabled"), i = n.text(), a = this.find("option").index(n); e.multiple || "" === e.label || t.length ? e.label = "" : (n = this.prepend('<option value="" class="' + C.item_placeholder + '" selected>' + e.label + "</option>"), i = e.label, a = 0); var o = this.find("option, optgroup"), r = o.filter("option"), s = u('[for="' + this.attr("id") + '"]'); e.tabIndex = this[0].tabIndex, this[0].tabIndex = -1, s.length && (s[0].tabIndex = -1); var l = [C.base, e.theme, e.customClass]; e.useNative ? l.push(C.native) : e.cover && l.push(C.cover), e.multiple && l.push(C.multiple), e.disabled && l.push(C.disabled), e.id = this.attr("id"), e.id ? e.ariaId = e.id : e.ariaId = e.rawGuid, e.ariaId += "-dropdown", e.selectedAriaId = e.ariaId + "-selected"; var c = "", d = ""; c += '<div class="' + l.join(" ") + '"id="' + e.ariaId + '" tabindex="' + e.tabIndex + '" role="listbox"', e.multiple ? c += ' aria-label="multi select"' : c += ' aria-haspopup="true" aria-live="polite" aria-labelledby="' + e.selectedAriaId + '"', c += "></div>", e.multiple || (d += '<button type="button" class="' + C.selected + '" id="' + e.selectedAriaId + '" tabindex="-1">', d += u("<span></span>").text(x(i, e.trim)).html(), d += "</button>"), d += '<div class="' + C.options + '">', d += "</div>", this.wrap(c).after(d), e.$dropdown = this.parent($.base), e.$label = s, e.$allOptions = o, e.$options = r, e.$selected = e.$dropdown.find($.selected), e.$wrapper = e.$dropdown.find($.options), e.$placeholder = e.$dropdown.find($.placeholder), e.index = -1, e.closed = !0, e.focused = !1, f(e), e.multiple || w(a, e), void 0 !== u.fn.fsScrollbar && e.$wrapper.fsScrollbar({ theme: e.theme }).find(".fs-scrollbar-content").attr("tabindex", null), e.$dropdown.on(k.click, e, h), e.$selected.on(k.click, e, h), e.$dropdown.on(k.click, $.item, e, m).on(k.close, e, g), this.on(k.change, e, v), e.useNative || (this.on(k.focusIn, e, function (e) { e.data.$dropdown.trigger(k.raw.focus) }), e.$dropdown.on(k.focusIn, e, b).on(k.focusOut, e, y)) }, _destruct: function (e) { e.$dropdown.hasClass(C.open) && e.$selected.trigger(k.click), void 0 !== u.fn.fsScrollbar && e.$wrapper.fsScrollbar("destroy"), e.$el[0].tabIndex = e.tabIndex, e.$label.length && (e.$label[0].tabIndex = e.tabIndex), e.$dropdown.off(k.namespace), e.$options.off(k.namespace), e.$placeholder.remove(), e.$selected.remove(), e.$wrapper.remove(), e.$el.off(k.namespace).show().unwrap() }, disable: function (e, t) { if (void 0 !== t) { var n = e.$items.index(e.$items.filter("[data-value=" + t + "]")); e.$items.eq(n).addClass(C.item_disabled), e.$options.eq(n).prop("disabled", !0) } else e.$dropdown.hasClass(C.open) && e.$selected.trigger(k.click), e.$dropdown.addClass(C.disabled), e.$el.prop("disabled", !0), e.disabled = !0 }, enable: function (e, t) { if (void 0 !== t) { var n = e.$items.index(e.$items.filter("[data-value=" + t + "]")); e.$items.eq(n).removeClass(C.item_disabled), e.$options.eq(n).prop("disabled", !1) } else e.$dropdown.removeClass(C.disabled), e.$el.prop("disabled", !1), e.disabled = !1 }, update: function (e) { void 0 !== u.fn.fsScrollbar && e.$wrapper.fsScrollbar("destroy"); var t = e.index; e.$allOptions = e.$el.find("option, optgroup"), e.$options = e.$allOptions.filter("option"), e.index = -1, t = e.$options.index(e.$options.filter(":selected")), f(e), e.multiple || w(t, e), void 0 !== u.fn.fsScrollbar && e.$wrapper.fsScrollbar({ theme: e.theme }).find(".fs-scrollbar-content").attr("tabindex", null) }, open: i, close: r }, classes: ["cover", "bottom", "multiple", "mobile", "native", "open", "disabled", "focus", "selected", "options", "group", "item", "item_disabled", "item_selected", "item_placeholder"], events: { close: "close" } }), $ = e.classes, C = $.raw, k = e.events, c = e.functions, d = p.window, T = p.$window, H = (p.document, null); p.Ready(function () { H = p.$body }) }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery"], e) : e(jQuery, Formstone) }(function (t, e) { "use strict"; function n() { c = t(r.element) } function i(e) { if (e.data && (e = e.data), e.enabled) for (var t, n, i, a = 0; a < e.target.length; a++) { n = t = 0, (i = e.$el.find(e.target[a])).css(e.property, ""); for (var o = 0; o < i.length; o++)t < (n = i.eq(o)[e.type]()) && (t = n); i.css(e.property, t) } } function a(e) { for (var t = 0; t < e.target.length; t++)e.$el.find(e.target[t]).css(e.property, ""); e.$el.find("img").off(s.namespace) } var o = e.Plugin("equalize", { widget: !0, priority: 5, defaults: { maxWidth: 1 / 0, minWidth: "0px", property: "height", target: null }, methods: { _construct: function (e) { e.maxWidth = e.maxWidth === 1 / 0 ? "100000px" : e.maxWidth, e.mq = "(min-width:" + e.minWidth + ") and (max-width:" + e.maxWidth + ")", e.type = "height" === e.property ? "outerHeight" : "outerWidth", e.target ? t.isArray(e.target) || (e.target = [e.target]) : e.target = ["> *"], n(), t.fsMediaquery("bind", e.rawGuid, e.mq, { enter: function () { (function (e) { if (!e.enabled) { e.enabled = !0; var t = e.$el.find("img"); t.length && t.on(s.load, e, i), i(e) } }).call(e.$el, e) }, leave: function () { (function (e) { e.enabled && (e.enabled = !1, a(e)) }).call(e.$el, e) } }) }, _destruct: function (e) { a(e), t.fsMediaquery("unbind", e.rawGuid), n() }, _resize: function (e) { l.iterate.call(c, i) }, resize: i } }), r = o.classes, s = (r.raw, o.events), l = o.functions, c = [] }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./touch", "./transition", "./viewer"], e) : e(jQuery, Formstone) }(function (w, x) { "use strict"; function n(e) { if (!N) { var t = e.data; !0 === t.overlay && (t.mobile = !0), (N = w.extend({}, { visible: !1, gallery: { active: !1 }, isMobile: x.isMobile || t.mobile, isTouch: x.support.touch, isAnimating: !0, isZooming: !1, oldContentHeight: 0, oldContentWidth: 0, metaHeight: 0, thumbnailHeight: 0, captionOpen: !1, thumbnailsOpen: !1, tapTimer: null }, t)).isViewer = N.isMobile && t.viewer && void 0 !== w.fn.fsViewer; var n = t.$el, i = t.$object, a = n && n[0].href && n[0].href || "", o = n && n[0].hash && n[0].hash || "", r = (a.toLowerCase().split(".").pop().split(/\#|\?/), n ? n.data(I + "-type") : ""), s = "image" === r || a.match(t.fileTypes) || "data:image" === a.substr(0, 10), l = A(a), c = "url" === r || !s && !l && "http" === a.substr(0, 4) && !o, d = "element" === r || !s && !l && !c && "#" === o.substr(0, 1), u = void 0 !== i; if (d && (a = o), !(s || l || c || d || u)) return void (N = null); if (O.killEvent(e), N.margin *= 2, N.type = s ? "image" : l ? "video" : "element", s || l) { var p = n.data(I + "-gallery"); p && (N.gallery.active = !0, N.gallery.id = p, N.gallery.$items = w("a[data-lightbox-gallery= " + N.gallery.id + "], a[rel= " + N.gallery.id + "]"), N.gallery.index = N.gallery.$items.index(N.$el), N.gallery.total = N.gallery.$items.length - 1) } N.thumbnails && (s || l) && N.gallery.active || (N.thumbnails = !1); var f = ""; N.isMobile || (f += '<div class="' + [L.overlay, N.theme, N.customClass].join(" ") + '"></div>'); var h = [L.base, L.loading, L.animating, N.theme, N.customClass]; if (N.fixed && h.push(L.fixed), N.isMobile && h.push(L.mobile), N.isTouch && h.push(L.touch), c && h.push(L.iframed), (d || u) && h.push(L.inline), N.thumbnails && h.push(L.thumbnailed), N.labels.lightbox = N.labels.lightbox.replace("{guid}", t.numGuid), f += '<div class="' + h.join(" ") + '" role="dialog" aria-label="' + N.labels.lightbox + '" tabindex="-1">', f += '<button type="button" class="' + L.close + '">' + N.labels.close + "</button>", f += '<span class="' + L.loading_icon + '"></span>', f += '<div class="' + L.container + '">', N.gallery.active && N.thumbnails) { var g, m; f += '<div class="' + [L.thumbnails] + '">', f += '<div class="' + [L.thumbnail_container] + '">'; for (var v = 0, b = N.gallery.$items.length; v < b; v++)m = (m = (g = N.gallery.$items.eq(v)).data("lightbox-thumbnail")) || g.find("img").attr("src"), f += '<button class="' + [L.thumbnail_item] + '">', f += '<img src="' + m + '" alt="">', f += "</button>"; f += "</div></div>" } f += '<div class="' + L.content + '"></div>', (s || l) && (f += '<div class="' + L.tools + '">', f += '<div class="' + L.controls + '">', N.gallery.active && (f += '<button type="button" class="' + [L.control, L.control_previous].join(" ") + '">' + N.labels.previous + "</button>", f += '<button type="button" class="' + [L.control, L.control_next].join(" ") + '">' + N.labels.next + "</button>"), N.isMobile && N.isTouch && (f += '<button type="button" class="' + [L.toggle, L.caption_toggle].join(" ") + '">' + N.labels.captionClosed + "</button>", N.gallery.active && N.thumbnails && (f += '<button type="button" class="' + [L.toggle, L.thumbnail_toggle].join(" ") + '">' + N.labels.thumbnailsClosed + "</button>")), f += "</div>", f += '<div class="' + L.meta + '">', f += '<div class="' + L.meta_content + '">', N.gallery.active && (f += '<p class="' + L.position + '"', N.gallery.total < 1 && (f += ' style="display: none;"'), f += ">", f += '<span class="' + L.position_current + '">' + (N.gallery.index + 1) + "</span> ", f += N.labels.count, f += ' <span class="' + L.position_total + '">' + (N.gallery.total + 1) + "</span>", f += "</p>"), f += '<div class="' + L.caption + '">', f += N.formatter.call(n, t), f += "</div></div></div>", f += "</div>"), f += "</div></div>", z.append(f), N.$overlay = w(q.overlay), N.$lightbox = w(q.base), N.$close = w(q.close), N.$container = w(q.container), N.$content = w(q.content), N.$tools = w(q.tools), N.$meta = w(q.meta), N.$metaContent = w(q.meta_content), N.$position = w(q.position), N.$caption = w(q.caption), N.$controlBox = w(q.controls), N.$controls = w(q.control), N.$thumbnails = w(q.thumbnails), N.$thumbnailContainer = w(q.thumbnail_container), N.$thumbnailItems = w(q.thumbnail_item), N.isMobile ? (N.paddingVertical = N.$close.outerHeight(), N.paddingHorizontal = 0, N.mobilePaddingVertical = parseInt(N.$content.css("paddingTop"), 10) + parseInt(N.$content.css("paddingBottom"), 10), N.mobilePaddingHorizontal = parseInt(N.$content.css("paddingLeft"), 10) + parseInt(N.$content.css("paddingRight"), 10)) : (N.paddingVertical = parseInt(N.$lightbox.css("paddingTop"), 10) + parseInt(N.$lightbox.css("paddingBottom"), 10), N.paddingHorizontal = parseInt(N.$lightbox.css("paddingLeft"), 10) + parseInt(N.$lightbox.css("paddingRight"), 10), N.mobilePaddingVertical = 0, N.mobilePaddingHorizontal = 0), N.contentHeight = N.$lightbox.outerHeight() - N.paddingVertical, N.contentWidth = N.$lightbox.outerWidth() - N.paddingHorizontal, N.controlHeight = N.$controls.outerHeight(), y = C(), N.$lightbox.css({ top: N.fixed ? 0 : y.top }), N.gallery.active && (N.$lightbox.addClass(L.has_controls), S()), F.on(D.keyDown, E), z.on(D.click, [q.overlay, q.close].join(", "), $).on([D.focus, D.focusIn].join(" "), P), N.gallery.active && N.$lightbox.on(D.click, q.control, W), N.thumbnails && N.$lightbox.on(D.click, q.thumbnail_item, _), N.isMobile && N.isTouch && N.$lightbox.on(D.click, q.caption_toggle, k).on(D.click, q.thumbnail_toggle, T), N.$lightbox.fsTransition({ property: "opacity" }, function () { var e, t; s ? H(a) : l ? j(a) : c ? (t = a, t += -1 < t.indexOf("?") ? "&" + N.requestKey + "=true" : "?" + N.requestKey + "=true", M(w('<iframe class="' + L.iframe + '" src="' + t + '"></iframe>'))) : d ? (e = a, N.$inlineTarget = w(e), N.$inlineContents = N.$inlineTarget.children().detach(), M(N.$inlineContents)) : u && M(N.$object) }).addClass(L.open), N.$overlay.addClass(L.open) } var y } function e(e) { "object" != typeof e && (N.targetHeight = e, N.targetWidth = arguments[1]), "element" === N.type ? d(N.$content.find("> :first-child")) : "image" === N.type ? r() : "video" === N.type && s(), function () { if (N.visible && !N.isMobile) { var e = C(); N.$controls.css({ marginTop: (N.contentHeight - N.controlHeight - N.metaHeight + N.thumbnailHeight) / 2 }), N.$lightbox.css({ height: N.contentHeight + N.paddingVertical, width: N.contentWidth + N.paddingHorizontal, top: N.fixed ? 0 : e.top }), N.oldContentHeight = N.contentHeight, N.oldContentWidth = N.contentWidth } }() } function $(e) { O.killEvent(e), N && (N.$lightbox.fsTransition("destroy"), N.$content.fsTransition("destroy"), N.$lightbox.addClass(L.animating).fsTransition({ property: "opacity" }, function (e) { void 0 !== N.$inlineTarget && N.$inlineTarget.length && N.$inlineTarget.append(N.$inlineContents.detach()), N.isViewer && N.$imageContainer && N.$imageContainer.length && N.$imageContainer.fsViewer("destroy"), N.$lightbox.off(D.namespace), N.$container.off(D.namespace), F.off(D.keyDown), z.off(D.namespace), z.off(D.namespace), N.$overlay.remove(), N.$lightbox.remove(), void 0 !== N.$el && N.$el && N.$el.length && N.$el.focus(), N = null, F.trigger(D.close) }), N.$lightbox.removeClass(L.open), N.$overlay.removeClass(L.open), N.isMobile && (g.removeClass(L.lock), O.unlockViewport(I))) } function a() { var e = C(); N.isMobile || N.duration, N.isMobile ? O.lockViewport(I) : N.$controls.css({ marginTop: (N.contentHeight - N.controlHeight - N.metaHeight + N.thumbnailHeight) / 2 }), "" === N.$caption.html() ? (N.$caption.hide(), N.$lightbox.removeClass(L.has_caption), N.gallery.active || N.$tools.hide()) : (N.$caption.show(), N.$lightbox.addClass(L.has_caption)), N.$lightbox.fsTransition({ property: N.contentHeight !== N.oldContentHeight ? "height" : "width" }, function () { var e; N.$content.fsTransition({ property: "opacity" }, function () { N.$lightbox.removeClass(L.animating), N.isAnimating = !1 }), N.$lightbox.removeClass(L.loading).addClass(L.ready), N.visible = !0, F.trigger(D.open), N.gallery.active && (e = "", 0 < N.gallery.index && (A(e = N.gallery.$items.eq(N.gallery.index - 1).attr("href")) || w('<img src="' + e + '">')), N.gallery.index < N.gallery.total && (A(e = N.gallery.$items.eq(N.gallery.index + 1).attr("href")) || w('<img src="' + e + '">')), l(), function () { if (N.thumbnails) { var e = N.$thumbnailItems.eq(N.gallery.index), t = e.position().left + e.outerWidth(!1) / 2 - N.$thumbnailContainer.outerWidth(!0) / 2; N.$thumbnailContainer.stop().animate({ scrollLeft: t }, 200, "linear") } }()), N.$lightbox.focus() }), N.isMobile || N.$lightbox.css({ height: N.contentHeight + N.paddingVertical, width: N.contentWidth + N.paddingHorizontal, top: N.fixed ? 0 : e.top }); var t = N.oldContentHeight !== N.contentHeight || N.oldContentWidth !== N.contentWidth; !N.isMobile && t || N.$lightbox.fsTransition("resolve"), N.oldContentHeight = N.contentHeight, N.oldContentWidth = N.contentWidth, N.isMobile && g.addClass(L.lock) } function C() { if (N.isMobile) return { left: 0, top: 0 }; var e = { left: (x.windowWidth - N.contentWidth - N.paddingHorizontal) / 2, top: N.top <= 0 ? (x.windowHeight - N.contentHeight - N.paddingVertical) / 2 : N.top }; return !0 !== N.fixed && (e.top += F.scrollTop()), e } function k(e) { if (O.killEvent(e), N.captionOpen) i(); else { o(); var t = parseInt(N.$metaContent.outerHeight(!0)); t += parseInt(N.$meta.css("padding-top")), t += parseInt(N.$meta.css("padding-bottom")), N.$meta.css({ height: t }), N.$lightbox.addClass(L.caption_open).find(q.caption_toggle).text(N.labels.captionOpen), N.captionOpen = !0 } } function i() { N.$lightbox.removeClass(L.caption_open).find(q.caption_toggle).text(N.labels.captionClosed), N.captionOpen = !1 } function T(e) { O.killEvent(e), N.thumbnailsOpen ? o() : (i(), N.$lightbox.addClass(L.thumbnails_open).find(q.thumbnail_toggle).text(N.labels.thumbnailsOpen), N.thumbnailsOpen = !0) } function o() { N.$lightbox.removeClass(L.thumbnails_open).find(q.thumbnail_toggle).text(N.labels.thumbnailsClosed), N.thumbnailsOpen = !1 } function H(e) { N.isViewer ? (N.$imageContainer = w('<div class="' + L.image_container + '"><img></div>'), N.$image = N.$imageContainer.find("img"), N.$image.attr("src", e).addClass(L.image), N.$content.prepend(N.$imageContainer), r(), N.$imageContainer.one("loaded.viewer", function () { a() }).fsViewer({ theme: N.theme })) : (N.$imageContainer = w('<div class="' + L.image_container + '"><img></div>'), N.$image = N.$imageContainer.find("img"), N.$image.one(D.load, function () { var e, t, n = (e = N.$image[0], t = new Image, void 0 !== e.naturalHeight ? { naturalHeight: e.naturalHeight, naturalWidth: e.naturalWidth } : "img" === e.tagName.toLowerCase() && (t.src = e.src, { naturalHeight: t.height, naturalWidth: t.width })); N.naturalHeight = n.naturalHeight, N.naturalWidth = n.naturalWidth, N.retina && (N.naturalHeight /= 2, N.naturalWidth /= 2), N.$content.prepend(N.$imageContainer), r(), a() }).on(D.error, u).attr("src", e).addClass(L.image), !N.$image[0].complete && 4 !== N.$image[0].readyState || N.$image.trigger(D.load)) } function r() { if (N.$image) { var e = 0; for (N.windowHeight = N.viewportHeight = x.windowHeight - N.mobilePaddingVertical - N.paddingVertical, N.windowWidth = N.viewportWidth = x.windowWidth - N.mobilePaddingHorizontal - N.paddingHorizontal, N.contentHeight = 1 / 0, N.contentWidth = 1 / 0, N.imageMarginTop = 0, N.imageMarginLeft = 0; N.contentHeight > N.viewportHeight && e < 2;)N.imageHeight = 0 === e ? N.naturalHeight : N.$image.outerHeight(), N.imageWidth = 0 === e ? N.naturalWidth : N.$image.outerWidth(), N.metaHeight = 0 === e ? 0 : N.metaHeight, N.spacerHeight = 0 === e ? 0 : N.spacerHeight, N.thumbnailHeight = 0 === e ? 0 : N.thumbnailHeight, 0 === e && (N.ratioHorizontal = N.imageHeight / N.imageWidth, N.ratioVertical = N.imageWidth / N.imageHeight, N.isWide = N.imageWidth > N.imageHeight), N.imageHeight < N.minHeight && (N.minHeight = N.imageHeight), N.imageWidth < N.minWidth && (N.minWidth = N.imageWidth), N.isMobile ? (N.isTouch ? (N.$controlBox.css({ width: x.windowWidth }), N.spacerHeight = N.$controls.outerHeight(!0)) : (N.$tools.css({ width: x.windowWidth }), N.spacerHeight = N.$tools.outerHeight(!0)), N.contentHeight = N.viewportHeight, N.contentWidth = N.viewportWidth, N.isTouch || N.$content.css({ height: N.contentHeight - N.spacerHeight }), N.$thumbnails.length && (N.spacerHeight += N.$thumbnails.outerHeight(!0)), N.spacerHeight += 10, t(), N.imageMarginTop = (N.contentHeight - N.targetImageHeight - N.spacerHeight) / 2, N.imageMarginLeft = (N.contentWidth - N.targetImageWidth) / 2) : (0 === e && (N.viewportHeight -= N.margin + N.paddingVertical, N.viewportWidth -= N.margin + N.paddingHorizontal), N.viewportHeight -= N.metaHeight, N.thumbnails && (N.viewportHeight -= N.thumbnailHeight), t(), N.contentHeight = N.targetImageHeight, N.contentWidth = N.targetImageWidth), N.isMobile || N.isTouch || N.$meta.css({ width: N.contentWidth }), N.$image.css({ height: N.targetImageHeight, width: N.targetImageWidth, marginTop: N.imageMarginTop, marginLeft: N.imageMarginLeft }), N.isMobile || (N.metaHeight = N.$meta.outerHeight(!0), N.contentHeight += N.metaHeight), N.thumbnails && (N.thumbnailHeight = N.$thumbnails.outerHeight(!0), N.contentHeight += N.thumbnailHeight), e++ } } function t() { var e = N.isMobile ? N.contentHeight - N.spacerHeight : N.viewportHeight, t = N.isMobile ? N.contentWidth : N.viewportWidth; N.isWide ? (N.targetImageWidth = t, N.targetImageHeight = N.targetImageWidth * N.ratioHorizontal, N.targetImageHeight > e && (N.targetImageHeight = e, N.targetImageWidth = N.targetImageHeight * N.ratioVertical)) : (N.targetImageHeight = e, N.targetImageWidth = N.targetImageHeight * N.ratioVertical, N.targetImageWidth > t && (N.targetImageWidth = t, N.targetImageHeight = N.targetImageWidth * N.ratioHorizontal)), (N.targetImageWidth > N.imageWidth || N.targetImageHeight > N.imageHeight) && (N.targetImageHeight = N.imageHeight, N.targetImageWidth = N.imageWidth), (N.targetImageWidth < N.minWidth || N.targetImageHeight < N.minHeight) && (N.targetImageWidth < N.minWidth ? (N.targetImageWidth = N.minWidth, N.targetImageHeight = N.targetImageWidth * N.ratioHorizontal) : (N.targetImageHeight = N.minHeight, N.targetImageWidth = N.targetImageHeight * N.ratioVertical)) } function j(e) { var t = A(e), n = e.split("?"), i = "&origin=" + encodeURIComponent(window.location.protocol + "//" + window.location.hostname); t ? (2 <= n.length && (t += "?" + n.slice(1)[0].trim()), N.$videoWrapper = w('<div class="' + L.video_wrapper + '"></div>'), N.$video = w('<iframe class="' + L.video + '" frameborder="0" seamless="seamless" allowfullscreen></iframe>'), N.$video.attr("src", t + "&enablejsapi=1" + i).addClass(L.video).prependTo(N.$videoWrapper), N.$content.prepend(N.$videoWrapper), s(), a()) : u() } function s() { N.windowHeight = N.viewportHeight = x.windowHeight - N.mobilePaddingVertical - N.paddingVertical, N.windowWidth = N.viewportWidth = x.windowWidth - N.mobilePaddingHorizontal - N.paddingHorizontal, N.videoMarginTop = 0, N.videoMarginLeft = 0, N.isMobile ? (N.isTouch ? (N.$controlBox.css({ width: x.windowWidth }), N.spacerHeight = N.$controls.outerHeight(!0) + 10) : (N.$tools.css({ width: x.windowWidth }), N.spacerHeight = N.$tools.outerHeight(!0), N.spacerHeight += N.$thumbnails.outerHeight(!0) + 10), N.viewportHeight -= N.spacerHeight, N.targetVideoWidth = N.viewportWidth, N.targetVideoHeight = N.targetVideoWidth * N.videoRatio, N.targetVideoHeight > N.viewportHeight && (N.targetVideoHeight = N.viewportHeight, N.targetVideoWidth = N.targetVideoHeight / N.videoRatio), N.videoMarginTop = (N.viewportHeight - N.targetVideoHeight) / 2, N.videoMarginLeft = (N.viewportWidth - N.targetVideoWidth) / 2) : (N.viewportHeight = N.windowHeight - N.margin, N.viewportWidth = N.windowWidth - N.margin, N.targetVideoWidth = N.videoWidth > N.viewportWidth ? N.viewportWidth : N.videoWidth, N.targetVideoWidth < N.minWidth && (N.targetVideoWidth = N.minWidth), N.targetVideoHeight = N.targetVideoWidth * N.videoRatio, N.contentHeight = N.targetVideoHeight, N.contentWidth = N.targetVideoWidth), N.isMobile || N.isTouch || N.$meta.css({ width: N.contentWidth }), N.$videoWrapper.css({ height: N.targetVideoHeight, width: N.targetVideoWidth, marginTop: N.videoMarginTop, marginLeft: N.videoMarginLeft }), N.isMobile || (N.metaHeight = N.$meta.outerHeight(!0), N.contentHeight += N.metaHeight), N.thumbnails && (N.thumbnailHeight = N.$thumbnails.outerHeight(!0), N.contentHeight += N.thumbnailHeight) } function W(e) { O.killEvent(e); var t = w(e.currentTarget); N.isAnimating || t.hasClass(L.control_disabled) || (N.isAnimating = !0, i(), N.gallery.index += t.hasClass(L.control_next) ? 1 : -1, N.gallery.index > N.gallery.total && (N.gallery.index = N.infinite ? 0 : N.gallery.total), N.gallery.index < 0 && (N.gallery.index = N.infinite ? N.gallery.total : 0), l(), N.$lightbox.addClass(L.animating), N.$content.fsTransition({ property: "opacity" }, c), N.$lightbox.addClass(L.loading)) } function _(e) { O.killEvent(e); var t = w(e.currentTarget); N.isAnimating || t.hasClass(L.active) || (N.isAnimating = !0, i(), N.gallery.index = N.$thumbnailItems.index(t), l(), N.$lightbox.addClass(L.animating), N.$content.fsTransition({ property: "opacity" }, c), N.$lightbox.addClass(L.loading)) } function l() { if (N.thumbnails) { var e = N.$thumbnailItems.eq(N.gallery.index); N.$thumbnailItems.removeClass(L.active), e.addClass(L.active) } } function c() { void 0 !== N.$imageContainer && (N.isViewer && N.$imageContainer.fsViewer("destroy"), N.$imageContainer.remove()), void 0 !== N.$videoWrapper && N.$videoWrapper.remove(), N.$el = N.gallery.$items.eq(N.gallery.index), N.$caption.html(N.formatter.call(N.$el, N)), N.$position.find(q.position_current).html(N.gallery.index + 1); var e = N.$el.attr("href"); A(e) ? (N.type = "video", j(e)) : (N.type = "image", H(e)), S() } function S() { N.$controls.removeClass(L.control_disabled), N.infinite || (0 === N.gallery.index && N.$controls.filter(q.control_previous).addClass(L.control_disabled), N.gallery.index === N.gallery.total && N.$controls.filter(q.control_next).addClass(L.control_disabled)) } function E(e) { !N.gallery.active || 37 !== e.keyCode && 39 !== e.keyCode ? 27 === e.keyCode && N.$close.trigger(D.click) : (O.killEvent(e), N.$controls.filter(37 === e.keyCode ? q.control_previous : q.control_next).trigger(D.click)) } function M(e) { N.$content.append(e), d(e), a() } function d(e) { N.windowHeight = x.windowHeight - N.mobilePaddingVertical - N.paddingVertical, N.windowWidth = x.windowWidth - N.mobilePaddingHorizontal - N.paddingHorizontal, N.objectHeight = e.outerHeight(!0), N.objectWidth = e.outerWidth(!0), N.targetHeight = N.targetHeight || (N.$el ? N.$el.data(I + "-height") : null), N.targetWidth = N.targetWidth || (N.$el ? N.$el.data(I + "-width") : null), N.maxHeight = N.windowHeight < 0 ? N.minHeight : N.windowHeight, N.isIframe = e.is("iframe"), N.objectMarginTop = 0, N.objectMarginLeft = 0, N.isMobile || (N.windowHeight -= N.margin, N.windowWidth -= N.margin), N.contentHeight = N.targetHeight ? N.targetHeight : N.isIframe || N.isMobile ? N.windowHeight : N.objectHeight, N.contentWidth = N.targetWidth ? N.targetWidth : N.isIframe || N.isMobile ? N.windowWidth : N.objectWidth, (N.isIframe || N.isObject) && N.isMobile ? (N.contentHeight = N.windowHeight, N.contentWidth = N.windowWidth) : N.isObject && (N.contentHeight = N.contentHeight > N.windowHeight ? N.windowHeight : N.contentHeight, N.contentWidth = N.contentWidth > N.windowWidth ? N.windowWidth : N.contentWidth), N.isMobile || (N.contentHeight > N.maxHeight && (N.contentHeight = N.maxHeight), N.contentWidth > N.maxWidth && (N.contentWidth = N.maxWidth)) } function u() { var e = w('<div class="' + L.error + '"><p>Error Loading Resource</p></div>'); N.type = "element", N.$tools.remove(), N.$image.off(D.namespace), M(e), F.trigger(D.error) } function A(e) { var t, n = N.videoFormatter; for (var i in n) if (n.hasOwnProperty(i) && null !== (t = e.match(n[i].pattern))) return n[i].format.call(N, t); return !1 } function P(e) { var t = e.target; w.contains(N.$lightbox[0], t) || t === N.$lightbox[0] || t === N.$overlay[0] || (O.killEvent(e), N.$lightbox.focus()) } var p = x.Plugin("lightbox", { widget: !0, defaults: { customClass: "", fileTypes: /\.(jpg|sjpg|jpeg|png|gif)/i, fixed: !1, formatter: function () { var e = this.attr("title"), t = !(void 0 === e || !e) && e.replace(/^\s+|\s+$/g, ""); return t ? '<p class="caption">' + t + "</p>" : "" }, infinite: !1, labels: { close: "Close", count: "of", next: "Next", previous: "Previous", captionClosed: "View Caption", captionOpen: "Close Caption", thumbnailsClosed: "View Thumbnails", thumbnailsOpen: "Close Thumbnails", lightbox: "Lightbox {guid}" }, margin: 50, maxHeight: 1e4, maxWidth: 1e4, minHeight: 100, minWidth: 100, mobile: !1, overlay: !1, retina: !1, requestKey: "fs-lightbox", theme: "fs-light", thumbnails: !1, top: 0, videoFormatter: { youtube: { pattern: /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/, format: function (e) { return "//www.youtube.com/embed/" + e[1] } }, vimeo: { pattern: /(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/, format: function (e) { return "//player.vimeo.com/video/" + e[3] } } }, videoRatio: .5625, videoWidth: 800, viewer: !0 }, classes: ["loading", "animating", "fixed", "mobile", "touch", "inline", "iframed", "open", "ready", "overlay", "close", "loading_icon", "container", "content", "image", "image_container", "video", "video_wrapper", "tools", "meta", "meta_content", "controls", "control", "control_previous", "control_next", "control_disabled", "position", "position_current", "position_total", "toggle", "caption_toggle", "caption", "caption_open", "thumbnailed", "thumbnails_open", "thumbnail_toggle", "thumbnails", "thumbnail_container", "thumbnail_item", "active", "has_controls", "has_caption", "iframe", "error", "active", "lock"], events: { open: "open", close: "close" }, methods: { _construct: function (e) { this.on(D.click, e, n); var t = this.data(I + "-gallery"); !v && m && t === m && (v = !0, this.trigger(D.click)) }, _destruct: function (e) { $(), this.off(D.namespace) }, _resize: function () { N && e() }, resize: e }, utilities: { _initialize: function (e, t) { e instanceof w && n.apply(h, [{ data: w.extend(!0, {}, { $object: e }, f, t || {}) }]) }, close: $ } }), I = p.namespace, f = p.defaults, q = p.classes, L = q.raw, D = p.events, O = p.functions, h = x.window, F = x.$window, z = null, g = null, m = !1, v = !1, N = null; x.Ready(function () { z = x.$body, g = w("html, body"), m = x.window.location.hash.replace("#", "") }) }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (o, e) { "use strict"; function r() { !function () { for (var e in a = { unit: s.unit }, g) if (g.hasOwnProperty(e)) for (var t in h[e]) if (h[e].hasOwnProperty(t)) { var n = "Infinity" === t ? 1 / 0 : parseInt(t, 10), i = -1 < e.indexOf("max"); h[e][t].matches && (i ? (!a[e] || n < a[e]) && (a[e] = n) : (!a[e] || n > a[e]) && (a[e] = n)) } }(), n.trigger(d.mqChange, [a]) } function l(e) { var t = c(e.media), n = f[t], i = e.matches, a = i ? d.enter : d.leave; if (n && (n.active || !n.active && i)) { for (var o in n[a]) n[a].hasOwnProperty(o) && n[a][o].apply(n.mq); n.active = !0 } } function c(e) { return e.replace(/[^a-z0-9\s]/gi, "").replace(/[_\s]/g, "").replace(/^\s+|\s+$/g, "") } var t = e.Plugin("mediaquery", { utilities: { _initialize: function (e) { for (var t in e = e || {}, g) g.hasOwnProperty(t) && (s[t] = e[t] ? o.merge(e[t], s[t]) : s[t]); for (var n in (s = o.extend(s, e)).minWidth.sort(p.sortDesc), s.maxWidth.sort(p.sortAsc), s.minHeight.sort(p.sortDesc), s.maxHeight.sort(p.sortAsc), g) if (g.hasOwnProperty(n)) for (var i in h[n] = {}, s[n]) if (s[n].hasOwnProperty(i)) { var a = window.matchMedia("(" + g[n] + ": " + (s[n][i] === 1 / 0 ? 1e5 : s[n][i]) + s.unit + ")"); a.addListener(r), h[n][s[n][i]] = a } r() }, state: function () { return a }, bind: function (e, t, n) { var i = u.matchMedia(t), a = c(i.media); for (var o in f[a] || (f[a] = { mq: i, active: !0, enter: {}, leave: {} }, f[a].mq.addListener(l)), n) n.hasOwnProperty(o) && f[a].hasOwnProperty(o) && (f[a][o][e] = n[o]); var r = f[a], s = i.matches; s && r[d.enter].hasOwnProperty(e) ? (r[d.enter][e].apply(i), r.active = !0) : !s && r[d.leave].hasOwnProperty(e) && (r[d.leave][e].apply(i), r.active = !1) }, unbind: function (e, t) { if (e) if (t) { var n = c(t); f[n] && (f[n].enter[e] && delete f[n].enter[e], f[n].leave[e] && delete f[n].leave[e]) } else for (var i in f) f.hasOwnProperty(i) && (f[i].enter[e] && delete f[i].enter[e], f[i].leave[e] && delete f[i].leave[e]) } }, events: { mqChange: "mqchange" } }), s = { minWidth: [0], maxWidth: [1 / 0], minHeight: [0], maxHeight: [1 / 0], unit: "px" }, d = o.extend(t.events, { enter: "enter", leave: "leave" }), n = e.$window, u = n[0], p = t.functions, a = null, f = [], h = {}, g = { minWidth: "min-width", maxWidth: "max-width", minHeight: "min-height", maxHeight: "max-height" } }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery"], e) : e(jQuery, Formstone) }(function (a, e) { "use strict"; function i(e) { p.killEvent(e); var t = e.data, n = t.index + (a(e.currentTarget).hasClass(d.control_previous) ? -1 : 1); 0 <= n && t.$items.eq(n).trigger(u.raw.click) } function o(e) { p.killEvent(e); var t = e.data, n = a(e.currentTarget), i = parseInt(n.val(), 10); t.$items.eq(i).trigger(u.raw.click) } function r(e) { var t = e.data, n = a(e.currentTarget), i = t.$items.index(n); t.ajax ? p.killEvent(e) : n[0].click(), s(t, i) } function s(e, t) { if (t < 0 && (t = 0), t > e.total && (t = e.total), t !== e.index) { e.index = t; var n = e.index - e.visible, i = e.index + (e.visible + 1); n < 0 && (n = 0), i > e.total && (i = e.total), e.$items.removeClass(d.visible).removeClass(d.hidden).filter(c.active).removeClass(d.active).end().eq(e.index).addClass(d.active).end().slice(n, i).addClass(d.visible), e.$items.not(c.visible).addClass(d.hidden), e.$position.find(c.current).text(e.index + 1).end().find(c.total).text(e.total + 1), e.$select.val(e.index), e.$controls.removeClass(d.visible), 0 < t && e.$controls.filter(c.control_previous).addClass(d.visible), t < e.total && e.$controls.filter(c.control_next).addClass(d.visible), e.$ellipsis.removeClass(d.visible), t > e.visible + 1 && e.$ellipsis.eq(0).addClass(d.visible), t < e.total - e.visible - 1 && e.$ellipsis.eq(1).addClass(d.visible), e.$el.trigger(u.update, [e.index]) } } var l = e.Plugin("pagination", { widget: !0, defaults: { ajax: !1, customClass: "", labels: { count: "of", next: "Next", previous: "Previous", select: "Select Page", pagination: "Pagination {guid}" }, maxWidth: "740px", theme: "fs-light", visible: 2 }, classes: ["pages", "page", "active", "first", "last", "ellipsis", "visible", "hidden", "control", "control_previous", "control_next", "position", "select", "mobile", "current", "total"], events: { update: "update" }, methods: { _construct: function (e) { e.mq = "(max-width:" + (e.maxWidth === 1 / 0 ? "100000px" : e.maxWidth) + ")"; var t = ""; t += '<button type="button" class="' + [d.control, d.control_previous].join(" ") + '">' + e.labels.previous + "</button>", t += '<button type="button" class="' + [d.control, d.control_next].join(" ") + '">' + e.labels.next + "</button>", t += '<div class="' + d.position + '" aria-hidden="true">', t += '<span class="' + d.current + '">0</span>', t += " " + e.labels.count + " ", t += '<span class="' + d.total + '">0</span>', t += '<select class="' + d.select + '" title="' + e.labels.select + '" tabindex="-1" aria-hidden="true"></select>', t += "</div>", e.thisClasses = [d.base, e.theme, e.customClass], e.labels.pagination = e.labels.pagination.replace("{guid}", e.numGuid), this.addClass(e.thisClasses.join(" ")).wrapInner('<div class="' + d.pages + '" aria-label="' + e.labels.pagination + '"></div>').prepend(t), e.$controls = this.find(c.control), e.$pages = this.find(c.pages), e.$items = e.$pages.children().addClass(d.page), e.$position = this.find(c.position), e.$select = this.find(c.select), e.index = -1, e.total = e.$items.length - 1; var n = e.$items.index(e.$items.filter("[data-" + l.namespace + "-active]")); n < 0 && (n = e.$items.index(e.$items.filter(c.active))), e.$items.eq(0).addClass(d.first).after('<span class="' + d.ellipsis + '">&hellip;</span>').end().eq(e.total).addClass(d.last).before('<span class="' + d.ellipsis + '">&hellip;</span>'), e.$ellipsis = e.$pages.find(c.ellipsis), function (e) { for (var t = "", n = 0; n <= e.total; n++)t += '<option value="' + n + '"', n === e.index && (t += 'selected="selected"'), t += ">Page " + (n + 1) + "</option>"; e.$select.html(t) }(e), this.on(u.click, c.page, e, r).on(u.click, c.control, e, i).on(u.change, c.select, e, o), a.fsMediaquery("bind", e.rawGuid, e.mq, { enter: function () { e.$el.addClass(d.mobile) }, leave: function () { e.$el.removeClass(d.mobile) } }), s(e, n) }, _destruct: function (e) { a.fsMediaquery("unbind", e.rawGuid), e.$controls.remove(), e.$ellipsis.remove(), e.$select.remove(), e.$position.remove(), e.$items.removeClass([d.page, d.active, d.visible, d.first, d.last].join(" ")).unwrap(), this.removeClass(e.thisClasses.join(" ")).off(u.namespace) } } }), c = l.classes, d = c.raw, u = l.events, p = l.functions }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery", "./swap"], e) : e(jQuery, Formstone) }(function (o, e) { "use strict"; function n(e) { e.$handle.fsSwap("deactivate") } function r(e) { e.data.$handle.addClass(g.focus) } function s(e) { e.data.$handle.removeClass(g.focus) } function l(e) { var t = e.data; 13 !== e.keyCode && 32 !== e.keyCode || (v.killEvent(e), t.$handle.trigger(m.raw.click)) } function c(e) { if (!e.originalEvent) { var t = e.data; t.open || (t.$el.trigger(m.open).attr("aria-hidden", !1), t.$content.addClass(t.contentClassesOpen).one(m.click, function () { n(t) }), t.$handle.attr("aria-expanded", !0), t.label && t.$handle.html(t.labels.open), t.isToggle || b.addClass(g.lock), t.open = !0, t.$nav.focus()) } } function d(e) { if (!e.originalEvent) { var t = e.data; t.open && (t.$el.trigger(m.close).attr("aria-hidden", !0), t.$content.removeClass(t.contentClassesOpen).off(m.namespace), t.$handle.attr("aria-expanded", !1), t.label && t.$handle.html(t.labels.closed), i(t), t.open = !1, t.$el.focus()) } } function u(e) { var t = e.data; t.$el.attr("aria-hidden", !0), t.$handle.attr("aria-controls", t.ariaId).attr("aria-expanded", !1), t.$content.addClass(g.enabled), setTimeout(function () { t.$animate.addClass(g.animated) }, 0), t.label && t.$handle.html(t.labels.closed) } function p(e) { var t = e.data; t.$el.removeAttr("aria-hidden"), t.$handle.removeAttr("aria-controls").removeAttr("aria-expanded"), t.$content.removeClass(g.enabled, g.animated), t.$animate.removeClass(g.animated), a(t), i(t) } function i(e) { e.isToggle || b.removeClass(g.lock) } function a(e) { if (e.label) if (1 < e.$handle.length) for (var t = 0, n = e.$handle.length; t < n; t++)e.$handle.eq(t).html(e.originalLabel[t]); else e.$handle.html(e.originalLabel) } var t = e.Plugin("navigation", { widget: !0, defaults: { customClass: "", gravity: "left", label: !0, labels: { closed: "Menu", open: "Close" }, maxWidth: "980px", theme: "fs-light", type: "toggle" }, classes: ["handle", "nav", "content", "animated", "enabled", "focus", "open", "toggle", "push", "reveal", "overlay", "left", "right", "lock"], events: { open: "open", close: "close" }, methods: { _construct: function (e) { e.handleGuid = g.handle + e.guid, e.isToggle = "toggle" === e.type, e.open = !1, e.isToggle && (e.gravity = ""); var t = g.base, n = [t, e.type].join("-"), i = e.gravity ? [n, e.gravity].join("-") : "", a = [e.rawGuid, e.theme, e.customClass].join(" "); e.handle = this.data(f + "-handle"), e.content = this.data(f + "-content"), e.handleClasses = [g.handle, g.handle.replace(t, n), i ? g.handle.replace(t, i) : "", e.handleGuid, a].join(" "), e.thisClasses = [g.nav.replace(t, n), i ? g.nav.replace(t, i) : "", a], e.contentClasses = [g.content.replace(t, n), a].join(" "), e.contentClassesOpen = [i ? g.content.replace(t, i) : "", g.open].join(" "), e.$nav = this.addClass(e.thisClasses.join(" ")).attr("role", "navigation"), e.$handle = o(e.handle).addClass(e.handleClasses), e.$content = o(e.content).addClass(e.contentClasses), e.$animate = o().add(e.$nav).add(e.$content), function (e) { if (e.label) if (1 < e.$handle.length) { e.originalLabel = []; for (var t = 0, n = e.$handle.length; t < n; t++)e.originalLabel[t] = e.$handle.eq(t).html() } else e.originalLabel = e.$handle.html() }(e), e.navTabIndex = e.$nav.attr("tabindex"), e.$nav.attr("tabindex", -1), e.id = this.attr("id"), e.id ? e.ariaId = e.id : (e.ariaId = e.rawGuid, this.attr("id", e.ariaId)), e.$handle.attr("data-swap-target", e.dotGuid).attr("data-swap-linked", e.handleGuid).attr("data-swap-group", g.base).attr("tabindex", 0).on("activate.swap" + e.dotGuid, e, c).on("deactivate.swap" + e.dotGuid, e, d).on("enable.swap" + e.dotGuid, e, u).on("disable.swap" + e.dotGuid, e, p).on(m.focus + e.dotGuid, e, r).on(m.blur + e.dotGuid, e, s).fsSwap({ maxWidth: e.maxWidth, classes: { target: e.dotGuid, enabled: h.enabled, active: h.open, raw: { target: e.rawGuid, enabled: g.enabled, active: g.open } } }), e.$handle.is("a, button") || e.$handle.on(m.keyPress + e.dotGuid, e, l) }, _destruct: function (e) { e.$content.removeClass([e.contentClasses, e.contentClassesOpen].join(" ")).off(m.namespace), e.$handle.removeAttr("aria-controls").removeAttr("aria-expanded").removeAttr("data-swap-target").removeData("swap-target").removeAttr("data-swap-linked").removeAttr("data-swap-group").removeData("swap-linked").removeData("tabindex").removeClass(e.handleClasses).off(e.dotGuid).html(e.originalLabel).fsSwap("destroy"), e.$nav.attr("tabindex", e.navTabIndex), a(e), i(e), this.removeAttr("aria-hidden").removeClass(e.thisClasses.join(" ")).off(m.namespace), this.attr("id") === e.rawGuid && this.removeAttr("id") }, open: function (e) { e.$handle.fsSwap("activate") }, close: n, enable: function (e) { e.$handle.fsSwap("enable") }, disable: function (e) { e.$handle.fsSwap("disable") } } }), f = t.namespace, h = t.classes, g = h.raw, m = t.events, v = t.functions, b = null; e.Ready(function () { b = o("html, body") }) }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (s, e) { "use strict"; function a(e) { e.data.$container.addClass(p.focus) } function o(e) { c(e.data, 0), e.data.$container.removeClass(p.focus) } function r(e) { var t = e.data; 38 !== e.keyCode && 40 !== e.keyCode || (e.preventDefault(), c(t, 38 === e.keyCode ? t.step : -t.step)) } function l(e) { h.killEvent(e), i(e); var t = e.data; if (!t.disabled && e.which <= 1) { var n = s(e.target).hasClass(p.up) ? t.step : -t.step; t.timer = h.startTimer(t.timer, 300, function () { t.timer = h.startTimer(t.timer, 100, function () { c(t, n) }, !0) }), c(t, n), g.on([f.touchEnd, f.mouseUp].join(" "), t, i) } } function i(e) { h.killEvent(e); var t = e.data; h.clearTimer(t.timer, !0), g.off(f.namespace) } function c(e, t) { var n, i, a, o = parseFloat(e.$el.val()), r = t; "undefined" === s.type(o) || isNaN(o) ? r = isNaN(o) ? "" : !1 !== e.min ? e.min : "" : !1 !== e.min && o < e.min ? r = e.min : r += o, "" !== r && (!1 !== e.min && r < e.min && (r = e.min), !1 !== e.max && r > e.max && (r = e.max)), r === o && 0 != t || ("" !== r && (n = r, i = e.digits, a = Math.pow(10, i), r = Math.round(n * a) / a), e.$el.val(r).trigger(f.raw.change, [!0])) } function d(e) { var t = String(e); return -1 < t.indexOf(".") ? t.length - t.indexOf(".") - 1 : 0 } var t = e.Plugin("number", { widget: !0, defaults: { customClass: "", labels: { up: "Up", down: "Down" }, theme: "fs-light" }, classes: ["arrow", "up", "down", "disabled", "focus"], methods: { _construct: function (e) { var t = parseFloat(this.attr("min")), n = parseFloat(this.attr("max")); e.min = !(!t && 0 !== t) && t, e.max = !(!n && 0 !== n) && n, e.step = parseFloat(this.attr("step")) || 1, e.timer = null, e.digits = d(e.step), e.disabled = this.is(":disabled") || this.is("[readonly]"); var i = ""; i += '<button type="button" class="' + [p.arrow, p.up].join(" ") + '" aria-hidden="true" tabindex="-1">' + e.labels.up + "</button>", i += '<button type="button" class="' + [p.arrow, p.down].join(" ") + '" aria-hidden="true" tabindex="-1">' + e.labels.down + "</button>", this.wrap('<div class="' + [p.base, e.theme, e.customClass, e.disabled ? p.disabled : ""].join(" ") + '"></div>').after(i), e.$container = this.parent(u.base), e.$arrows = e.$container.find(u.arrow), this.on(f.focus, e, a).on(f.blur, e, o).on(f.keyPress, e, r), e.$container.on([f.touchStart, f.mouseDown].join(" "), u.arrow, e, l), c(e, 0) }, _destruct: function (e) { e.$arrows.remove(), this.unwrap().off(f.namespace) }, enable: function (e) { e.disabled && (this.prop("disabled", !1), e.$container.removeClass(p.disabled), e.disabled = !1) }, disable: function (e) { e.disabled || (this.prop("disabled", !0), e.$container.addClass(p.disabled), e.disabled = !0) }, update: function (e) { var t = parseFloat(e.$el.attr("min")), n = parseFloat(e.$el.attr("max")); e.min = !(!t && 0 !== t) && t, e.max = !(!n && 0 !== n) && n, e.step = parseFloat(e.$el.attr("step")) || 1, e.timer = null, e.digits = d(e.step), e.disabled = e.$el.is(":disabled") || e.$el.is("[readonly]"), c(e, 0) } } }), u = t.classes, p = u.raw, f = t.events, h = t.functions, g = null; e.Ready(function () { g = e.$body }) }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./touch"], e) : e(jQuery, Formstone) }(function (e, t) { "use strict"; function o() { v = e(h.element) } function r(e) { e.stepCount = (e.max - e.min) / e.step, e.offset = e.$track.offset(), e.vertical ? (e.trackHeight = e.$track.outerHeight(), e.handleHeight = e.$handle.outerHeight(), e.increment = e.trackHeight / e.stepCount) : (e.trackWidth = e.$track.outerWidth(), e.handleWidth = e.$handle.outerWidth(), e.increment = e.trackWidth / e.stepCount); var t = (e.$el.val() - e.min) / (e.max - e.min); a(e, t, !0) } function s(e) { i.killEvent(e); var t = e.data; t.disabled || (r(t), l(e), t.$container.addClass(g.focus)) } function l(e) { i.killEvent(); var t = e.data; t.disabled || a(t, t.vertical ? 1 - (e.pageY - t.offset.top) / t.trackHeight : (e.pageX - t.offset.left) / t.trackWidth) } function c(e) { i.killEvent(e); var t = e.data; t.disabled || t.$container.removeClass(g.focus) } function d(e) { e.data.$container.addClass(g.focus) } function u(e) { e.data.$container.removeClass(g.focus) } function a(e, t, n) { 1 < e.increment && (t = e.vertical ? Math.round(t * e.stepCount) * e.increment / e.trackHeight : Math.round(t * e.stepCount) * e.increment / e.trackWidth), t < 0 && (t = 0), 1 < t && (t = 1); var i = (e.min - e.max) * t; i = -parseFloat(i.toFixed(e.digits)), e.$fill.css(e.vertical ? "height" : "width", 100 * t + "%"), e.$handle.css(e.vertical ? "bottom" : "left", 100 * t + "%"), (i += e.min) !== e.value && !1 !== i && !0 !== n && (e.$el.val(i).trigger(m.raw.change, [!0]), e.value = i) } function p(e, t) { var n = e.data; if (!t && !n.disabled) { var i = (n.$el.val() - n.min) / (n.max - n.min); a(n, i) } } function f(e) { var t = e.toString().split("."); return t[0] = t[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","), t.join(".") } var n = t.Plugin("range", { widget: !0, defaults: { customClass: "", fill: !1, formatter: !1, labels: { max: !1, min: !1 }, theme: "fs-light", vertical: !1 }, classes: ["track", "handle", "fill", "marker", "labels", "label", "label_min", "label_max", "vertical", "focus", "disabled"], methods: { _construct: function (e) { e.formatter || (e.formatter = f), e.min = parseFloat(this.attr("min")) || 0, e.max = parseFloat(this.attr("max")) || 100, e.step = parseFloat(this.attr("step")) || 1, e.digits = e.step.toString().length - e.step.toString().indexOf("."), e.value = parseFloat(this.val()) || e.min + (e.max - e.min) / 2; var t = ""; e.vertical = "vertical" === this.attr("orient") || e.vertical, e.disabled = this.is(":disabled") || this.is("[readonly]"), t += '<div class="' + g.track + '" aria-hidden="true">', e.fill && (t += '<span class="' + g.fill + '"></span>'), t += '<div class="' + g.handle + '" role="slider">', t += '<span class="' + g.marker + '"></span>', t += "</div>", t += "</div>"; var n = [g.base, e.theme, e.customClass, e.vertical ? g.vertical : "", e.labels ? g.labels : "", e.disabled ? g.disabled : ""]; if (this.addClass(g.element).wrap('<div class="' + n.join(" ") + '"></div>').after(t), e.$container = this.parents(h.base), e.$track = e.$container.find(h.track), e.$fill = e.$container.find(h.fill), e.$handle = e.$container.find(h.handle), e.$output = e.$container.find(h.output), e.labels) { var i = '<span class="' + [g.label, g.label_max].join(" ") + '">' + e.formatter.call(this, e.labels.max ? e.labels.max : e.max) + "</span>", a = '<span class="' + [g.label, g.label_min].join(" ") + '">' + e.formatter.call(this, e.labels.max ? e.labels.min : e.min) + "</span>"; e.$container.prepend(e.vertical ? i : a).append(e.vertical ? a : i) } e.$labels = e.$container.find(h.label), this.on(m.focus, e, d).on(m.blur, e, u).on(m.change, e, p), e.$container.fsTouch({ pan: !0, axis: e.vertical ? "y" : "x" }).on(m.panStart, e, s).on(m.pan, e, l).on(m.panEnd, e, c), o(), r.call(this, e) }, _destruct: function (e) { e.$container.off(m.namespace).fsTouch("destroy"), e.$track.remove(), e.$labels.remove(), this.unwrap().removeClass(g.element).off(m.namespace), o() }, _resize: function (e) { i.iterate.call(v, r) }, enable: function (e) { e.disabled && (this.prop("disabled", !1), e.$container.removeClass(g.disabled), e.disabled = !1) }, disable: function (e) { e.disabled || (this.prop("disabled", !0), e.$container.addClass(g.disabled), e.disabled = !0) }, resize: r, update: function (e) { e.min = parseFloat(e.$el.attr("min")) || 0, e.max = parseFloat(e.$el.attr("max")) || 100, e.step = parseFloat(e.$el.attr("step")) || 1, e.digits = e.step.toString().length - e.step.toString().indexOf("."), e.value = parseFloat(this.val()) || e.min + (e.max - e.min) / 2, e.labels && (e.$labels.filter(h.label_max).html(e.formatter.call(this, e.labels.max ? e.labels.max : e.max)), e.$labels.filter(h.label_min).html(e.formatter.call(this, e.labels.max ? e.labels.min : e.min))), r.call(this, e) } } }), h = n.classes, g = h.raw, m = n.events, i = n.functions, v = [] }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./touch"], e) : e(jQuery, Formstone) }(function (s, e) { "use strict"; function n(e) { e.$el.addClass(f.isSetup); var t = {}, n = {}, i = {}, a = 0, o = !0; i = e.horizontal ? (e.barHeight = e.$content[0].offsetHeight - e.$content[0].clientHeight, e.frameWidth = e.$content.outerWidth(), e.trackWidth = e.frameWidth - 2 * e.trackMargin, e.scrollWidth = e.$content[0].scrollWidth, e.ratio = e.trackWidth / e.scrollWidth, e.trackRatio = e.trackWidth / e.scrollWidth, e.handleWidth = 0 < e.handleSize ? e.handleSize : e.trackWidth * e.trackRatio, e.scrollRatio = (e.scrollWidth - e.frameWidth) / (e.trackWidth - e.handleWidth), e.handleBounds = { left: 0, right: e.trackWidth - e.handleWidth }, e.$content.css({ paddingBottom: e.barHeight + e.paddingBottom }), a = e.$content.scrollLeft() * e.ratio, o = e.scrollWidth <= e.frameWidth, t = { width: e.frameWidth }, n = { width: e.trackWidth, marginLeft: e.trackMargin, marginRight: e.trackMargin }, { width: e.handleWidth }) : (e.barWidth = e.$content[0].offsetWidth - e.$content[0].clientWidth, e.frameHeight = e.$content.outerHeight(), e.trackHeight = e.frameHeight - 2 * e.trackMargin, e.scrollHeight = e.$content[0].scrollHeight, e.ratio = e.trackHeight / e.scrollHeight, e.trackRatio = e.trackHeight / e.scrollHeight, e.handleHeight = 0 < e.handleSize ? e.handleSize : e.trackHeight * e.trackRatio, e.scrollRatio = (e.scrollHeight - e.frameHeight) / (e.trackHeight - e.handleHeight), e.handleBounds = { top: 0, bottom: e.trackHeight - e.handleHeight }, a = e.$content.scrollTop() * e.ratio, o = e.scrollHeight <= e.frameHeight, t = { height: e.frameHeight }, n = { height: e.trackHeight, marginBottom: e.trackMargin, marginTop: e.trackMargin }, { height: e.handleHeight }), o ? e.$el.removeClass(f.active) : e.$el.addClass(f.active), e.$bar.css(t), e.$track.css(n), e.$handle.css(i), e.panning = !1, d(e, a), r({ data: e }), e.$el.removeClass(f.setup) } function r(e) { g.killEvent(e); var t = e.data, n = {}; if (!t.panning) { if (t.horizontal) { var i = t.$content.scrollLeft(); i < 0 && (i = 0), t.handleLeft = i / t.scrollRatio, t.handleLeft > t.handleBounds.right && (t.handleLeft = t.handleBounds.right), n = { left: t.handleLeft } } else { var a = t.$content.scrollTop(); a < 0 && (a = 0), t.handleTop = a / t.scrollRatio, t.handleTop > t.handleBounds.bottom && (t.handleTop = t.handleBounds.bottom), n = { top: t.handleTop } } t.$handle.css(n) } } function i(e) { a(e, !0) } function a(e, t) { var n, i, a = e.data; if (a.horizontal) { var o = a.$content[0].scrollLeft, r = a.$content[0].scrollWidth, s = a.$content.outerWidth(); if (n = e.originalEvent.deltaX * (!0 === t ? -1 : 1), !0 === t) return a.$content.scrollLeft(o - n), u(e); if ("left" == (i = n < 0 ? "right" : "left") && r - s - o < n) return a.$content.scrollLeft(r), u(e); if ("right" === i && o < -n) return a.$content.scrollLeft(0), u(e) } else { var l = a.$content[0].scrollTop, c = a.$content[0].scrollHeight, d = a.$content.outerHeight(); if (n = e.originalEvent.deltaY * (!0 === t ? -1 : 1), !0 === t) return a.$content.scrollTop(l - n), u(e); if ("down" == (i = n < 0 ? "up" : "down") && c - d - l < n) return a.$content.scrollTop(c), u(e); if ("up" === i && l < -n) return a.$content.scrollTop(0), u(e) } } function u(e) { return g.killEvent(e), e.returnValue = !1 } function o(e) { var t, n = e.data, i = n.$track.offset(); n.panning = !0, t = n.horizontal ? n.handleLeft = e.pageX - i.left - n.handleWidth / 2 : n.handleTop = e.pageY - i.top - n.handleHeight / 2, d(n, t) } function l(e) { var t = e.data; d(t, t.horizontal ? t.handleLeft + e.deltaX : t.handleTop + e.deltaY) } function c(e) { var t = e.data; t.panning = !1, t.horizontal ? t.handleLeft += e.deltaX : t.handleTop += e.deltaY } function d(e, t) { var n = {}; e.horizontal ? (t < e.handleBounds.left && (t = e.handleBounds.left), t > e.handleBounds.right && (t = e.handleBounds.right), n = { left: t }, e.$content.scrollLeft(Math.round(t * e.scrollRatio))) : (t < e.handleBounds.top && (t = e.handleBounds.top), t > e.handleBounds.bottom && (t = e.handleBounds.bottom), n = { top: t }, e.$content.scrollTop(Math.round(t * e.scrollRatio))), e.$handle.css(n) } var t = e.Plugin("scrollbar", { widget: !0, defaults: { customClass: "", duration: 0, handleSize: 0, horizontal: !1, mouseWheel: !0, theme: "fs-light", trackMargin: 0 }, classes: ["content", "bar", "track", "handle", "horizontal", "setup", "active"], methods: { _construct: function (e) { var t = ""; t += '<div class="' + f.bar + '">', t += '<div class="' + f.track + '">', t += '<button type="button" class="' + f.handle + '" aria-hidden="true" tabindex="-1"></button>', t += "</div></div>", e.paddingRight = parseInt(this.css("padding-right"), 10), e.paddingBottom = parseInt(this.css("padding-bottom"), 10), e.thisClasses = [f.base, e.theme, e.customClass, e.horizontal ? f.horizontal : ""], this.addClass(e.thisClasses.join(" ")).wrapInner('<div class="' + f.content + '" tabindex="0"></div>').prepend(t), e.$content = this.find(p.content), e.$bar = this.find(p.bar), e.$track = this.find(p.track), e.$handle = this.find(p.handle), e.trackMargin = parseInt(e.trackMargin, 10), e.$content.on(h.scroll, e, r), e.mouseWheel && e.$content.on("wheel" + h.namespace, e, a), e.$track.fsTouch({ axis: e.horizontal ? "x" : "y", pan: !0 }).on(h.panStart, e, o).on(h.pan, e, l).on(h.panEnd, e, c).on(h.click, g.killEvent).on("wheel" + h.namespace, e, i), n(e), m = s(p.base) }, _destruct: function (e) { e.$track.fsTouch("destroy"), e.$bar.remove(), e.$content.off(h.namespace).contents().unwrap(), this.removeClass(e.thisClasses.join(" ")).off(h.namespace), this.attr("id") === e.rawGuid && this.removeAttr("id") }, _resize: function (e) { g.iterate.call(m, n) }, scroll: function (e, t, n) { var i = n || e.duration, a = {}; if ("number" !== s.type(t)) { var o = s(t); if (0 < o.length) { var r = o.position(); t = e.horizontal ? r.left + e.$content.scrollLeft() : r.top + e.$content.scrollTop() } else t = "top" === t ? 0 : "bottom" === t ? e.horizontal ? e.$content[0].scrollWidth : e.$content[0].scrollHeight : e.$content.scrollTop() } a[e.horizontal ? "scrollLeft" : "scrollTop"] = t, e.$content.stop().animate(a, i) }, resize: n } }), p = t.classes, f = p.raw, h = t.events, g = t.functions, m = (e.$window, []); e.Ready(function () { e.$body }) }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery"], e) : e(jQuery, Formstone) }(function (n, e) { "use strict"; function t() { f.iterate.call(v, r) } function i() { v = n(d.base), t() } function a(e) { e.enabled = !0, e.$el.addClass(u.enabled), r(e) } function o(e) { e.enabled = !1, e.$el.css({ height: "", width: "", top: "", bottom: "", marginBottom: "" }).removeClass(u.enabled), e.$stickys.removeClass([u.passed, u.stuck].join(" ")) } function r(e) { if (e.enabled) { if (s(e), e.$container.length) { var t = e.$container.offset(); e.min = t.top - e.margin, e.max = e.min + e.$container.outerHeight(!1) - e.height } else { var n = (e.stuck ? e.$clone : e.$el).offset(); e.min = n.top - e.margin, e.max = !1 } l(e) } } function s(e) { var t; t = e.stuck ? e.$clone : e.$el, e.margin = parseInt(t.css("margin-top"), 10), e.$container.length ? e.containerMargin = parseInt(e.$container.css("margin-top"), 10) : e.containerMargin = 0, e.height = t.outerHeight(), e.width = t.outerWidth() } function l(e) { if (e.enabled) { var t = g + e.offset; if (t >= e.min) { e.stuck = !0, e.$stickys.addClass(u.stuck), e.stuck || (e.$el.trigger(p.stuck), s(e)); var n = e.offset, i = ""; e.max && t > e.max ? (e.passed || e.$el.trigger(p.passed), e.passed = !0, e.$stickys.addClass(u.passed), n = "", i = 0) : (e.passed = !1, e.$stickys.removeClass(u.passed)), e.$el.css({ height: e.height, width: e.width, top: n, bottom: i, marginBottom: 0 }) } else e.stuck = !1, e.$stickys.removeClass(u.stuck).removeClass(u.passed), e.stuck && e.$el.trigger(p.unstuck), e.$el.css({ height: "", width: "", top: "", bottom: "", marginBottom: "" }) } } var c = e.Plugin("sticky", { widget: !0, defaults: { maxWidth: 1 / 0, minWidth: "0px", offset: 0 }, classes: ["enabled", "sticky", "stuck", "clone", "container", "passed"], events: { passed: "passed", stuck: "stuck", unstuck: "unstuck" }, methods: { _construct: function (e) { e.enabled = !1, e.stuck = !1, e.passed = !0, e.$clone = e.$el.clone(), e.container = e.$el.data("sticky-container"), e.$container = n(e.container), e.$el.addClass(u.base), e.$clone.removeClass(u.element).addClass(u.clone), e.$container.addClass(u.container), e.$stickys = n().add(e.$el).add(e.$clone), e.$el.after(e.$clone); var t = n().add(e.$el.find("img")).add(e.$container.find("img")); t.length && t.on(p.load, e, r), e.maxWidth = e.maxWidth === 1 / 0 ? "100000px" : e.maxWidth, e.mq = "(min-width:" + e.minWidth + ") and (max-width:" + e.maxWidth + ")", n.fsMediaquery("bind", e.rawGuid, e.mq, { enter: function () { a.call(e.$el, e) }, leave: function () { o.call(e.$el, e) } }) }, _postConstruct: function (e) { i(), t() }, _destruct: function (e) { e.$clone.remove(), e.$container.removeClass(u.container), e.$el.css({ height: "", width: "", top: "", bottom: "", marginBottom: "" }).removeClass(u.base), i() }, _resize: t, _raf: function () { (g = h.scrollTop()) < 0 && (g = 0), g !== m && (f.iterate.call(v, l), m = g) }, disable: o, enable: a, reset: r, resize: r } }), d = (c.namespace, c.classes), u = d.raw, p = c.events, f = c.functions, h = (e.window, e.$window), g = 0, m = 0, v = [] }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery"], e) : e(jQuery, Formstone) }(function (i, e) { "use strict"; function n(e, t) { if (e.enabled && !e.active) { e.group && !t && i(e.group).not(e.$el).not(e.linked)[s.namespaceClean]("deactivate", !0); var n = e.group ? i(e.group).index(e.$el) : null; e.$swaps.addClass(e.classes.raw.active), t || e.linked && i(e.linked).not(e.$el)[s.namespaceClean]("activate", !0), this.trigger(d.activate, [n]), e.active = !0 } } function a(e, t) { e.enabled && e.active && (e.$swaps.removeClass(e.classes.raw.active), t || e.linked && i(e.linked).not(e.$el)[s.namespaceClean]("deactivate", !0), this.trigger(d.deactivate), e.active = !1) } function t(e, t) { e.enabled || (e.enabled = !0, e.$swaps.addClass(e.classes.raw.enabled), t || i(e.linked).not(e.$el)[s.namespaceClean]("enable"), this.trigger(d.enable), e.onEnable ? (e.active = !1, n.call(this, e)) : (e.active = !0, a.call(this, e))) } function o(e, t) { e.enabled && (e.enabled = !1, e.$swaps.removeClass([e.classes.raw.enabled, e.classes.raw.active].join(" ")), t || i(e.linked).not(e.$el)[s.namespaceClean]("disable"), this.trigger(d.disable)) } function r(e) { u.killEvent(e); var t = e.data; t.active && t.collapse ? a.call(t.$el, t) : n.call(t.$el, t) } var s = e.Plugin("swap", { widget: !0, defaults: { collapse: !0, maxWidth: 1 / 0 }, classes: ["target", "enabled", "active"], events: { activate: "activate", deactivate: "deactivate", enable: "enable", disable: "disable" }, methods: { _construct: function (e) { e.enabled = !1, e.active = !1, e.classes = i.extend(!0, {}, c, e.classes), e.target = this.data(l + "-target"), e.$target = i(e.target).addClass(e.classes.raw.target), e.mq = "(max-width:" + (e.maxWidth === 1 / 0 ? "100000px" : e.maxWidth) + ")"; var t = this.data(l + "-linked"); e.linked = !!t && "[data-" + l + '-linked="' + t + '"]'; var n = this.data(l + "-group"); e.group = !!n && "[data-" + l + '-group="' + n + '"]', e.$swaps = i().add(this).add(e.$target), this.on(d.click + e.dotGuid, e, r) }, _postConstruct: function (e) { e.collapse || !e.group || i(e.group).filter("[data-" + l + "-active]").length || i(e.group).eq(0).attr("data-" + l + "-active", "true"), e.onEnable = this.data(l + "-active") || !1, i.fsMediaquery("bind", e.rawGuid, e.mq, { enter: function () { t.call(e.$el, e, !0) }, leave: function () { o.call(e.$el, e, !0) } }) }, _destruct: function (e) { i.fsMediaquery("unbind", e.rawGuid), e.$swaps.removeClass([e.classes.raw.enabled, e.classes.raw.active].join(" ")).off(d.namespace) }, activate: n, deactivate: a, enable: t, disable: o } }), l = s.namespace, c = s.classes, d = s.events, u = s.functions }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./mediaquery", "./swap"], e) : e(jQuery, Formstone) }(function (a, o) { "use strict"; function r(e) { if (!e.originalEvent) { var t = e.data; t.$el.attr("aria-selected", !0).trigger(i.update, [0]), t.$mobileTab.addClass(u.active), t.$content.attr("aria-hidden", !1).addClass(u.active) } } function s(e) { if (!e.originalEvent) { var t = e.data; t.$el.attr("aria-selected", !1), t.$mobileTab.removeClass(u.active), t.$content.attr("aria-hidden", !0).removeClass(u.active) } } function l(e) { var t = e.data; t.$el.attr("aria-controls", t.ariaContentId), t.$mobileTab.addClass(u.enabled), t.$content.attr("aria-labelledby", t.ariaId).addClass(u.enabled) } function c(e) { var t = e.data; t.$el.removeAttr("aria-controls").removeAttr("aria-selected"), t.$mobileTab.removeClass(u.enabled), t.$content.removeAttr("aria-labelledby").removeAttr("aria-hidden").removeClass(u.enabled) } function t(e) { e.data.$el.fsSwap("activate") } var e = o.Plugin("tabs", { widget: !0, defaults: { customClass: "", maxWidth: 1 / 0, mobileMaxWidth: "740px", theme: "fs-light" }, classes: ["tab", "tab_mobile", "mobile", "content", "enabled", "active"], events: { update: "update" }, methods: { _construct: function (e) { e.mq = "(max-width:" + (e.mobileMaxWidth === 1 / 0 ? "100000px" : e.mobileMaxWidth) + ")", e.content = this.attr("href"), e.group = this.data(d + "-group"), e.elementClasses = [u.tab, e.rawGuid, e.theme, e.customClass], e.mobileTabClasses = [u.tab, u.tab_mobile, e.rawGuid, e.theme, e.customClass], e.contentClasses = [u.content, e.rawGuid, e.theme, e.customClass], e.$mobileTab = a('<button type="button" class="' + e.mobileTabClasses.join(" ") + '" aria-hidden="true">' + this.html() + "</button>"), e.$content = a(e.content).addClass(e.contentClasses.join(" ")), e.$content.before(e.$mobileTab).attr("role", "tabpanel"), this.attr("role", "tab"), e.id = this.attr("id"), e.id ? e.ariaId = e.id : (e.ariaId = e.rawGuid, this.attr("id", e.ariaId)), e.contentId = e.$content.attr("id"), e.contentGuid = e.rawGuid + "_content", e.contentId ? e.ariacontentId = e.contentId : (e.ariaContentId = e.contentGuid, e.$content.attr("id", e.ariaContentId)); var t = o.window.location.hash, n = !1, i = !1; t.length && (n = 0 < this.filter("[href*='" + t + "']").length, i = e.group && 0 < a("[data-" + d + '-group="' + e.group + '"]').filter("[href*='" + t + "']").length), n ? this.attr("data-swap-active", "true") : i ? this.removeAttr("data-swap-active").removeData("data-swap-active") : "true" === this.attr("data-tabs-active") && this.attr("data-swap-active", "true"), this.attr("data-swap-target", e.content).attr("data-swap-group", e.group).addClass(e.elementClasses.join(" ")).on("activate.swap" + e.dotGuid, e, r).on("deactivate.swap" + e.dotGuid, e, s).on("enable.swap" + e.dotGuid, e, l).on("disable.swap" + e.dotGuid, e, c) }, _postConstruct: function (e) { this.fsSwap({ maxWidth: e.maxWidth, classes: { target: e.dotGuid, enabled: n.enabled, active: n.active, raw: { target: e.rawGuid, enabled: u.enabled, active: u.active } }, collapse: !1 }), e.$mobileTab.on("click" + e.dotGuid, e, t), a.fsMediaquery("bind", e.rawGuid, e.mq, { enter: function () { (function (e) { e.$el.addClass(u.mobile), e.$mobileTab.addClass(u.mobile), e.$content.addClass(u.mobile) }).call(e.$el, e) }, leave: function () { (function (e) { e.$el.removeClass(u.mobile), e.$mobileTab.removeClass(u.mobile), e.$content.removeClass(u.mobile) }).call(e.$el, e) } }) }, _destruct: function (e) { a.fsMediaquery("unbind", e.rawGuid), e.$mobileTab.off(i.namespace).remove(), e.elementClasses.push(u.mobile), e.contentClasses.push(u.mobile), e.$content.removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("role").removeClass(e.contentClasses.join(" ")), e.$content.attr("id") === e.contentGuid && e.$content.removeAttr("id"), this.removeAttr("aria-controls").removeAttr("aria-selected").removeAttr("data-swap-active").removeData("data-swap-active").removeAttr("data-swap-target").removeData("data-swap-target").removeAttr("data-swap-group").removeData("data-swap-group").removeAttr("role").removeClass(e.elementClasses.join(" ")).off(i.namespace).fsSwap("destroy"), this.attr("id") === e.rawGuid && this.removeAttr("id") }, activate: function (e) { this.fsSwap("activate") }, enable: function (e) { this.fsSwap("enable") }, disable: function (e) { this.fsSwap("disable") } } }), d = e.namespace, n = e.classes, u = n.raw, i = e.events; e.functions }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (v, b) { "use strict"; function t(e) { $(); var t = e.data; t.left = e.pageX, t.top = e.pageY, function (e) { $(); var t = ""; t += '<div class="', t += [k.base, k[e.direction], e.theme, e.customClass].join(" "), t += '">', t += '<div class="' + k.content + '">', t += e.formatter.call(e.$el, e), t += '<span class="' + k.caret + '"></span>', t += "</div>", j = { $tooltip: v(t += "</div>"), $el: e.$el }, b.$body.append(j.$tooltip); var n = j.$tooltip.find(C.content), i = j.$tooltip.find(C.caret), a = e.$el.offset(), o = e.$el.outerHeight(), r = e.$el.outerWidth(), s = 0, l = 0, c = 0, d = 0, u = !1, p = !1, f = i.outerHeight(!0), h = i.outerWidth(!0), g = n.outerHeight(!0), m = n.outerWidth(!0); "right" === e.direction || "left" === e.direction ? (p = (g - f) / 2, d = -g / 2, "right" === e.direction ? c = e.margin : "left" === e.direction && (c = -(m + e.margin))) : (u = (m - h) / 2, c = -m / 2, "bottom" === e.direction ? d = e.margin : "top" === e.direction && (d = -(g + e.margin))), n.css({ top: d, left: c }), i.css({ top: p, left: u }), e.follow ? e.$el.on(T.mouseMove, e, w) : (e.match ? "right" === e.direction || "left" === e.direction ? (l = e.top, "right" === e.direction ? s = a.left + r : "left" === e.direction && (s = a.left)) : (s = e.left, "bottom" === e.direction ? l = a.top + o : "top" === e.direction && (l = a.top)) : "right" === e.direction || "left" === e.direction ? (l = a.top + o / 2, "right" === e.direction ? s = a.left + r : "left" === e.direction && (s = a.left)) : (s = a.left + r / 2, "bottom" === e.direction ? l = a.top + o : "top" === e.direction && (l = a.top)), x(s, l)), e.timer = H.startTimer(e.timer, e.delay, function () { j.$tooltip.addClass(k.visible) }), e.$el.one(T.mouseLeave, e, y) }(t) } function y(e) { var t = e.data; H.clearTimer(t.timer), $() } function w(e) { x(e.pageX, e.pageY) } function x(e, t) { j && j.$tooltip.css({ left: e, top: t }) } function $() { j && (j.$el.off([T.mouseMove, T.mouseLeave].join(" ")), j.$tooltip.remove(), j = null) } var e = b.Plugin("tooltip", { widget: !0, defaults: { customClass: "", delay: 0, direction: "top", follow: !1, formatter: function (e) { return this.data("title") }, margin: 15, match: !1, theme: "fs-light" }, classes: ["content", "caret", "visible", "top", "bottom", "right", "left"], methods: { _construct: function (e) { this.on(T.mouseEnter, e, t) }, _destruct: function (e) { $(), this.off(T.namespace) } } }), C = e.classes, k = C.raw, T = e.events, H = e.functions, j = null }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (m, o) { "use strict"; function r(e) { e.preventManipulation && e.preventManipulation(); var t = e.data, n = e.originalEvent; if (n.type.match(/(up|end|cancel)$/i)) h(e); else { if (n.pointerId) { var i = !1; for (var a in t.touches) t.touches[a].id === n.pointerId && (i = !0, t.touches[a].pageX = n.pageX, t.touches[a].pageY = n.pageY); i || t.touches.push({ id: n.pointerId, pageX: n.pageX, pageY: n.pageY }) } else t.touches = n.touches; n.type.match(/(down|start)$/i) ? v(e) : n.type.match(/move$/i) && s(e) } } function v(e) { var t = e.data, n = "undefined" !== m.type(t.touches) && t.touches.length ? t.touches[0] : null; n && t.$el.off(x.mouseDown), t.touching || (t.startE = e.originalEvent, t.startX = n ? n.pageX : e.pageX, t.startY = n ? n.pageY : e.pageY, t.startT = (new Date).getTime(), t.scaleD = 1, t.passedAxis = !1), t.$links && t.$links.off(x.click); var i = y(t.scale ? x.scaleStart : x.panStart, e, t.startX, t.startY, t.scaleD, 0, 0, "", ""); if (t.scale && t.touches && 2 <= t.touches.length) { var a = t.touches; t.pinch = { startX: g(a[0].pageX, a[1].pageX), startY: g(a[0].pageY, a[1].pageY), startD: w(a[1].pageX - a[0].pageX, a[1].pageY - a[0].pageY) }, i.pageX = t.startX = t.pinch.startX, i.pageY = t.startY = t.pinch.startY } t.touching || (t.touching = !0, t.pan && !n && C.on(x.mouseMove, t, s).on(x.mouseUp, t, h), o.support.pointer ? C.on([x.pointerMove, x.pointerUp, x.pointerCancel].join(" "), t, r) : C.on([x.touchMove, x.touchEnd, x.touchCancel].join(" "), t, r), t.$el.trigger(i)) } function s(e) { var t = e.data, n = "undefined" !== m.type(t.touches) && t.touches.length ? t.touches[0] : null, i = n ? n.pageX : e.pageX, a = n ? n.pageY : e.pageY, o = i - t.startX, r = a - t.startY, s = 0 < o ? "right" : "left", l = 0 < r ? "down" : "up", c = Math.abs(o) > t.threshold, d = Math.abs(r) > t.threshold; if (!t.passedAxis && t.axis && (t.axisX && d || t.axisY && c)) h(e); else { !t.passedAxis && (!t.axis || t.axis && t.axisX && c || t.axisY && d) && (t.passedAxis = !0), t.passedAxis && ($.killEvent(e), $.killEvent(t.startE)); var u = !0, p = y(t.scale ? x.scale : x.pan, e, i, a, t.scaleD, o, r, s, l); if (t.scale) if (t.touches && 2 <= t.touches.length) { var f = t.touches; t.pinch.endX = g(f[0].pageX, f[1].pageX), t.pinch.endY = g(f[0].pageY, f[1].pageY), t.pinch.endD = w(f[1].pageX - f[0].pageX, f[1].pageY - f[0].pageY), t.scaleD = t.pinch.endD / t.pinch.startD, p.pageX = t.pinch.endX, p.pageY = t.pinch.endY, p.scale = t.scaleD, p.deltaX = t.pinch.endX - t.pinch.startX, p.deltaY = t.pinch.endY - t.pinch.startY } else t.pan || (u = !1); u && t.$el.trigger(p) } } function h(e) { var t = e.data, n = "undefined" !== m.type(t.touches) && t.touches.length ? t.touches[0] : null, i = n ? n.pageX : e.pageX, a = n ? n.pageY : e.pageY, o = i - t.startX, r = a - t.startY, s = (new Date).getTime(), l = t.scale ? x.scaleEnd : x.panEnd, c = 0 < o ? "right" : "left", d = 0 < r ? "down" : "up", u = 1 < Math.abs(o), p = 1 < Math.abs(r); if (t.swipe && s - t.startT < t.time && Math.abs(o) > t.threshold && (l = x.swipe), t.axis && (t.axisX && p || t.axisY && u) || u || p) { t.$links = t.$el.find("a"); for (var f = 0, h = t.$links.length; f < h; f++)b(t.$links.eq(f), t) } var g = y(l, e, i, a, t.scaleD, o, r, c, d); C.off([x.touchMove, x.touchEnd, x.touchCancel, x.mouseMove, x.mouseUp, x.pointerMove, x.pointerUp, x.pointerCancel].join(" ")), t.$el.trigger(g), t.touches = [], t.scale, n && (t.touchTimer = $.startTimer(t.touchTimer, 5, function () { t.$el.on(x.mouseDown, t, v) })), t.touching = !1 } function b(e, t) { e.on(x.click, t, i); var n = m._data(e[0], "events").click; n.unshift(n.pop()) } function i(e) { $.killEvent(e, !0), e.data.$links.off(x.click) } function y(e, t, n, i, a, o, r, s, l) { return m.Event(e, { originalEvent: t, bubbles: !0, pageX: n, pageY: i, scale: a, deltaX: o, deltaY: r, directionX: s, directionY: l }) } function g(e, t) { return (e + t) / 2 } function w(e, t) { return Math.sqrt(e * e + t * t) } function n(e, t) { e.css({ "-ms-touch-action": t, "touch-action": t }) } var e = !o.window.PointerEvent, t = o.Plugin("touch", { widget: !0, defaults: { axis: !1, pan: !1, scale: !1, swipe: !1, threshold: 10, time: 50 }, methods: { _construct: function (e) { if (e.touches = [], e.touching = !1, this.on(x.dragStart, $.killEvent), e.swipe && (e.pan = !0), e.scale && (e.axis = !1), e.axisX = "x" === e.axis, e.axisY = "y" === e.axis, o.support.pointer) { var t = ""; !e.axis || e.axisX && e.axisY ? t = "none" : (e.axisX && (t += " pan-y"), e.axisY && (t += " pan-x")), n(this, t), this.on(x.pointerDown, e, r) } else this.on(x.touchStart, e, r).on(x.mouseDown, e, v) }, _destruct: function (e) { this.off(x.namespace), n(this, "") } }, events: { pointerDown: e ? "MSPointerDown" : "pointerdown", pointerUp: e ? "MSPointerUp" : "pointerup", pointerMove: e ? "MSPointerMove" : "pointermove", pointerCancel: e ? "MSPointerCancel" : "pointercancel" } }), x = t.events, $ = t.functions, C = o.$window; x.pan = "pan", x.panStart = "panstart", x.panEnd = "panend", x.scale = "scale", x.scaleStart = "scalestart", x.scaleEnd = "scaleend", x.swipe = "swipe" }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (s, a) { "use strict"; function o(e) { e.stopPropagation(), e.preventDefault(); var t = e.data, n = e.originalEvent, i = t.target ? t.$target : t.$el; t.property && n.propertyName !== t.property || !s(n.target).is(i) || r(t) } function r(e) { e.always || e.$el[t.namespaceClean]("destroy"), e.callback.apply(e.$el) } function l(e) { var t, n, i, a = {}; if (e instanceof s && (e = e[0]), u.getComputedStyle) for (var o = 0, r = (t = u.getComputedStyle(e, null)).length; o < r; o++)n = t[o], i = t.getPropertyValue(n), a[n] = i; else if (e.currentStyle) for (n in t = e.currentStyle) a[n] = t[n]; return a } var t = a.Plugin("transition", { widget: !0, defaults: { always: !1, property: null, target: null }, methods: { _construct: function (n, e) { if (e) { n.$target = this.find(n.target), n.$check = n.target ? n.$target : this, n.callback = e, n.styles = l(n.$check), n.timer = null; var t = n.$check.css(a.transition + "-duration"), i = parseFloat(t); a.support.transition && t && i ? this.on(c.transitionEnd, n, o) : n.timer = d.startTimer(n.timer, 50, function () { var e, t; t = l((e = n).$check), function (e, t) { if (s.type(e) !== s.type(t)) return !1; for (var n in e) { if (!e.hasOwnProperty(n)) return !1; if (!e.hasOwnProperty(n) || !t.hasOwnProperty(n) || e[n] !== t[n]) return !1 } return !0 }(e.styles, t) || r(e), e.styles = t }, !0) } }, _destruct: function (e) { d.clearTimer(e.timer, !0), this.off(c.namespace) }, resolve: r } }), c = t.events, d = t.functions, u = a.window }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core"], e) : e(jQuery, Formstone) }(function (l, i) { "use strict"; function c(e, t, n) { t.error = !0, e.$el.trigger(x.fileError, [t, n]), e.aborting || m(e) } function n(e) { e.disabled && (this.removeClass(w.disabled), e.$input.prop("disabled", !1), e.disabled = !1) } function a(e) { $.killEvent(e); var t = e.data; t.disabled || t.$input.trigger(x.click) } function o(e) { e.data.$el.addClass(w.focus) } function r(e) { e.data.$el.removeClass(w.focus) } function s(e) { $.killEvent(e); var t = e.data, n = t.$input[0].files; !t.disabled && n.length && h(t, n) } function d(e) { $.killEvent(e), e.data.$el.addClass(w.dropping).trigger(x.fileDragEnter) } function u(e) { $.killEvent(e), e.data.$el.addClass(w.dropping).trigger(x.fileDragOver) } function p(e) { $.killEvent(e), e.data.$el.removeClass(w.dropping).trigger(x.fileDragLeave) } function f(e) { $.killEvent(e); var t = e.data, n = e.originalEvent.dataTransfer.files; t.$el.removeClass(w.dropping), t.disabled || h(t, n) } function h(e, t) { var n = [], i = t.length; if (e.maxFiles) { var a = e.maxFiles - e.uploaded; 0 <= a && t.length > a && (i = a) } if (0 < i) { for (var o = 0; o < i; o++) { var r = { index: e.total++, file: t[o], name: t[o].name, size: t[o].size, started: !1, complete: !1, error: !1, transfer: null }; n.push(r), e.queue.push(r) } e.$el.trigger(x.queued, [n]), e.autoUpload && g(e) } e.$input.val("") } function g(e) { e.uploading || (C.on(x.beforeUnload, function () { return e.leave }), e.uploading = !0, e.$el.trigger(x.start, [e.queue])), m(e) } function m(e) { var t = 0, n = []; if (e.uploading) { for (var i in e.queue) !e.queue.hasOwnProperty(i) || e.queue[i].complete || e.queue[i].error || n.push(e.queue[i]); for (var a in e.queue = n, e.queue) if (e.queue.hasOwnProperty(a)) { if (e.queue[a].started || v(e, e.queue[a]), ++t >= e.maxConcurrent) return; i++ } 0 === t && (C.off(x.beforeUnload), e.uploading = !1, e.$el.trigger(x.complete)) } } function v(a, o) { if (o.size >= a.maxSize || !0 === o.error) c(a, o, "size"); else if (a.chunked) o.started = !0, o.chunkSize = 1024 * a.chunkSize, o.totalChunks = Math.ceil(o.size / o.chunkSize), o.currentChunk = 0, a.$el.trigger(x.fileStart, [o]), function a(r, s) { var e = s.chunkSize * s.currentChunk, t = e + s.chunkSize; t > s.size && (t = s.size); var n = s.file[k](e, t), i = new FormData; i.append(r.postKey, n, s.file.name), i.append("chunks", s.totalChunks), i.append("chunk", s.currentChunk), !1 === (i = b(r, i, s)) ? c(r, s, "abort") : s.chunkTransfer = l.ajax({ url: r.action, data: i, dataType: r.dataType, headers: r.headers, type: "POST", contentType: !1, processData: !1, cache: !1, beforeSend: function (e, t) { r.$el.trigger(x.chunkStart, [s, t, e]) }, success: function (e, t, n) { s.currentChunk++ , r.$el.trigger(x.chunkComplete, [s]); var i = Math.ceil(s.currentChunk / s.totalChunks * 100); r.$el.trigger(x.fileProgress, [s, i, t, n]), s.currentChunk < s.totalChunks ? a(r, s) : (s.complete = !0, r.$el.trigger(x.fileComplete, [s, e, t, n]), m(r)) }, error: function (e, t, n) { var i, a, o; a = s, o = n, (i = r).$el.trigger(x.chunkError, [a, o]), c(i, a, o) } }) }(a, o); else { var e = new FormData; e.append(a.postKey, o.file), !1 === (e = b(a, e, o)) ? c(a, o, "abort") : (o.started = !0, o.transfer = l.ajax({ url: a.action, data: e, dataType: a.dataType, headers: a.headers, type: "POST", contentType: !1, processData: !1, cache: !1, xhr: function () { var e = l.ajaxSettings.xhr(); return e.upload && e.upload.addEventListener("progress", function (e) { var t = 0, n = e.loaded || e.position, i = e.total; e.lengthComputable && (t = Math.ceil(n / i * 100)), a.$el.trigger(x.fileProgress, [o, t]) }, !1), e }, beforeSend: function (e, t) { a.$el.trigger(x.fileStart, [o, t, e]) }, success: function (e, t, n) { o.complete = !0, a.uploaded++ , a.$el.trigger(x.fileComplete, [o, e, t, n]), m(a) }, error: function (e, t, n) { c(a, o, n) } })) } } function b(e, t, n) { for (var i in e.postData) e.postData.hasOwnProperty(i) && t.append(i, e.postData[i]); return e.beforeSend.call(e.$el, t, n) } var e = i.Plugin("upload", { widget: !0, defaults: { accept: !1, action: "", autoUpload: !0, beforeSend: function (e) { return e }, chunked: !1, chunkSize: 100, customClass: "", dataType: "html", headers: {}, label: "Drag and drop files or click to select", leave: "You have uploads pending, are you sure you want to leave this page?", maxConcurrent: 2, maxFiles: !1, maxSize: 5242880, multiple: !0, postData: {}, postKey: "file", theme: "fs-light" }, classes: ["input", "target", "multiple", "dropping", "disabled", "focus"], methods: { _construct: function (e) { if (i.support.file) { var t = ""; k || (e.chunked = !1), e.maxQueue && (e.maxConcurrent = e.maxQueue), !1 !== e.label && (t += '<div class="' + w.target + '">', t += e.label, t += "</div>"), t += '<input class="' + w.input + '" type="file"', e.multiple && (t += " multiple"), e.accept && (t += ' accept="' + e.accept + '"'), t += ">", e.baseClasses = [w.base, e.theme, e.customClass].join(" "), this.addClass(e.baseClasses).append(t), e.$input = this.find(y.input), e.queue = [], e.total = 0, e.uploaded = 0, e.uploading = !1, e.disabled = !0, e.aborting = !1, this.on(x.click, y.target, e, a).on(x.dragEnter, e, d).on(x.dragOver, e, u).on(x.dragLeave, e, p).on(x.drop, e, f), e.$input.on(x.focus, e, o).on(x.blur, e, r).on(x.change, e, s), n.call(this, e) } }, _destruct: function (e) { i.support.file && (e.$input.off(x.namespace), this.off(x.namespace).removeClass(e.baseClasses).html("")) }, disable: function (e) { e.disabled || (this.addClass(w.disabled), e.$input.prop("disabled", !0), e.disabled = !0) }, enable: n, abort: function (e, t) { var n; for (var i in e.aborting = !0, e.queue) e.queue.hasOwnProperty(i) && (n = e.queue[i], ("undefined" === l.type(t) || 0 <= t && n.index === t) && (n.started && !n.complete ? e.chunked ? n.chunkTransfer.abort() : n.transfer.abort() : c(e, n, "abort"))); e.aborting = !1, m(e) }, start: g } }), y = e.classes, w = y.raw, x = e.events, $ = e.functions, C = (i.window, i.$window), k = !1; i.Ready(function () { var e = ["mozSlice", "webkitSlice", "slice"]; if (i.support.file) { var t = !1; try { t = new File([""], "f") } catch (e) { } if (!t) try { t = new Blob([""], {}) } catch (e) { } if (t) for (var n in e) if (e.hasOwnProperty(n) && e[n] in t) { k = e[n]; break } } }), x.chunkComplete = "chunkcomplete", x.chunkError = "chunkerror", x.chunkStart = "chunkstart", x.complete = "complete", x.fileComplete = "filecomplete", x.fileDragEnter = "filedragenter", x.fileDragLeave = "filedragleave", x.fileDragOver = "filedragover", x.fileError = "fileerror", x.fileProgress = "fileprogress", x.fileStart = "filestart", x.start = "start", x.queued = "queued" }), function (e) { "function" == typeof define && define.amd ? define(["jquery", "./core", "./transition"], e) : e(jQuery, Formstone) }(function (l, a) { "use strict"; function e() { M.scrollTop(), a.windowHeight } function c() { (A = l(W.base)).length ? E.lockViewport(j) : E.unlockViewport(j) } function d(r, e) { r.isAnimating || (r.isAnimating = !0, r.$container = l('<div class="' + _.container + '"><img></div>'), r.$image = r.$container.find("img"), r.$viewport.append(r.$container), r.$image.one(S.load, function () { var e, t, n, i, a, o; i = (n = e = r).$image[0], a = new Image, o = void 0 !== i.naturalHeight ? { naturalHeight: i.naturalHeight, naturalWidth: i.naturalWidth } : "img" === i.tagName.toLowerCase() && (a.src = i.src, { naturalHeight: a.height, naturalWidth: a.width }), n.naturalHeight = o.naturalHeight, n.naturalWidth = o.naturalWidth, n.ratioHorizontal = n.naturalHeight / n.naturalWidth, n.ratioVertical = n.naturalWidth / n.naturalHeight, n.isWide = n.naturalWidth > n.naturalHeight, s(e), e.containerTop = e.viewportHeight / 2, e.containerLeft = e.viewportWidth / 2, p(e), e.imageHeight = e.naturalHeight, e.imageWidth = e.naturalWidth, (t = e).imageHeight = t.imageMinHeight, t.imageWidth = t.imageMinWidth, u(e), f(e), h(e), g(e), m(e, { containerTop: e.containerTop, containerLeft: e.containerLeft, imageHeight: e.imageHeight, imageWidth: e.imageWidth, imageTop: e.imageTop, imageLeft: e.imageLeft }), e.isRendering = !0, r.isAnimating = !1, r.$container.fsTransition({ property: "opacity" }, function () { }), r.$el.removeClass(_.loading), r.$container.fsTouch({ pan: !0, scale: !0 }).on(S.scaleStart, r, v).on(S.scaleEnd, r, y).on(S.scale, r, b), r.$el.trigger(S.loaded) }).one(S.error, r, t).attr("src", e).addClass(_.image), !r.$image[0].complete && 4 !== r.$image[0].readyState || r.$image.trigger(S.load), r.source = e) } function t(e) { e.data.$el.trigger(S.error) } function s(e) { e.viewportHeight = e.$viewport.outerHeight(), e.viewportWidth = e.$viewport.outerWidth() } function u(e) { e.imageHeight <= e.viewportHeight ? (e.containerMinTop = e.viewportHeight / 2, e.containerMaxTop = e.viewportHeight / 2) : (e.containerMinTop = e.viewportHeight - e.imageHeight / 2, e.containerMaxTop = e.imageHeight / 2), e.imageWidth <= e.viewportWidth ? (e.containerMinLeft = e.viewportWidth / 2, e.containerMaxLeft = e.viewportWidth / 2) : (e.containerMinLeft = e.viewportWidth - e.imageWidth / 2, e.containerMaxLeft = e.imageWidth / 2) } function p(e) { e.isWide ? (e.imageMinWidth = e.viewportWidth, e.imageMinHeight = e.imageMinWidth * e.ratioHorizontal, e.imageMinHeight > e.viewportHeight && (e.imageMinHeight = e.viewportHeight, e.imageMinWidth = e.imageMinHeight * e.ratioVertical)) : (e.imageMinHeight = e.viewportHeight, e.imageMinWidth = e.imageMinHeight * e.ratioVertical, e.imageMinWidth > e.viewportWidth && (e.imageMinWidth = e.viewportWidth, e.imageMinHeight = e.imageMinWidth * e.ratioHorizontal)), (e.imageMinWidth > e.naturalWidth || e.imageMinHeight > e.naturalHeight) && (e.imageMinHeight = e.naturalHeight, e.imageMinWidth = e.naturalWidth), e.imageMaxHeight = e.naturalHeight, e.imageMaxWidth = e.naturalWidth } function f(e) { e.imageTop = -e.imageHeight / 2, e.imageLeft = -e.imageWidth / 2 } function h(e) { e.lastContainerTop = e.containerTop, e.lastContainerLeft = e.containerLeft, e.lastImageHeight = e.imageHeight, e.lastImageWidth = e.imageWidth, e.lastImageTop = e.imageTop, e.lastImageLeft = e.imageLeft } function g(e) { e.renderContainerTop = e.lastContainerTop, e.renderContainerLeft = e.lastContainerLeft, e.renderImageTop = e.lastImageTop, e.renderImageLeft = e.lastImageLeft, e.renderImageHeight = e.lastImageHeight, e.renderImageWidth = e.lastImageWidth } function n(e) { e.imageHeight < e.imageMinHeight && (e.imageHeight = e.imageMinHeight), e.imageHeight > e.imageMaxHeight && (e.imageHeight = e.imageMaxHeight), e.imageWidth < e.imageMinWidth && (e.imageWidth = e.imageMinWidth), e.imageWidth > e.imageMaxWidth && (e.imageWidth = e.imageMaxWidth) } function i(e) { e.containerTop < e.containerMinTop && (e.containerTop = e.containerMinTop), e.containerTop > e.containerMaxTop && (e.containerTop = e.containerMaxTop), e.containerLeft < e.containerMinLeft && (e.containerLeft = e.containerMinLeft), e.containerLeft > e.containerMaxLeft && (e.containerLeft = e.containerMaxLeft) } function o(e) { E.clearTimer(e.tapTimer), e.tapTimer = null } function m(e, t) { if (a.transform) { var n = t.imageWidth / e.naturalWidth, i = t.imageHeight / e.naturalHeight; e.$container.css(a.transform, "translate3d(" + t.containerLeft + "px, " + t.containerTop + "px, 0)"), e.$image.css(a.transform, "translate3d(-50%, -50%, 0) scale(" + n + "," + i + ")") } else e.$container.css({ top: t.containerTop, left: t.containerLeft }), e.$image.css({ height: t.imageHeight, width: t.imageWidth, top: t.imageTop, left: t.imageLeft }) } function v(e) { var t = e.data; (function (e) { var t, n; null === e.tapTimer ? e.tapTimer = E.startTimer(e.tapTimer, 500, function () { o(e) }) : (o(e), n = (t = e).imageHeight > t.imageMinHeight + 1, t.isZooming = !0, h(t), g(t), n ? (t.imageHeight = t.imageMinHeight, t.imageWidth = t.imageMinWidth) : (t.imageHeight = t.imageMaxHeight, t.imageWidth = t.imageMaxWidth), u(t), i(t), f(t), t.isRendering = !0) })(t), h(t) } function b(e) { var t = e.data; o(t), t.isRendering = !1, t.isZooming = !1, t.imageHeight, t.imageMinHeight, t.containerTop = t.lastContainerTop + e.deltaY, t.containerLeft = t.lastContainerLeft + e.deltaX, t.imageHeight = t.lastImageHeight * e.scale, t.imageWidth = t.lastImageWidth * e.scale, u(t), i(t), n(t), f(t), m(t, { containerTop: t.containerTop, containerLeft: t.containerLeft, imageHeight: t.imageHeight, imageWidth: t.imageWidth, imageTop: t.imageTop, imageLeft: t.imageLeft }) } function y(e) { var t = e.data; t.isZooming || (h(t), g(t), t.isRendering = !0) } function w(e) { E.killEvent(e); var t, n, i = l(e.currentTarget), a = e.data; "out" == (i.hasClass(_.control_zoom_out) ? "out" : "in") ? ((n = a).keyDownTime = 1, n.action = "zoom_out") : ((t = a).keyDownTime = 1, t.action = "zoom_in") } function x(e) { e.data.action = !1 } function r(e) { if (e.isRendering) { if (e.action) { e.keyDownTime += e.zoomIncrement; var t = ("zoom_out" === e.action ? -1 : 1) * Math.round(e.imageWidth * e.keyDownTime - e.imageWidth); t > e.zoomDelta && (t = e.zoomDelta), e.isWide ? (e.imageWidth += t, e.imageHeight = Math.round(e.imageWidth / e.ratioVertical)) : (e.imageHeight += t, e.imageWidth = Math.round(e.imageHeight / e.ratioHorizontal)), n(e), f(e), u(e), i(e) } e.renderContainerTop += Math.round((e.containerTop - e.renderContainerTop) * e.zoomEnertia), e.renderContainerLeft += Math.round((e.containerLeft - e.renderContainerLeft) * e.zoomEnertia), e.renderImageTop += Math.round((e.imageTop - e.renderImageTop) * e.zoomEnertia), e.renderImageLeft += Math.round((e.imageLeft - e.renderImageLeft) * e.zoomEnertia), e.renderImageHeight += Math.round((e.imageHeight - e.renderImageHeight) * e.zoomEnertia), e.renderImageWidth += Math.round((e.imageWidth - e.renderImageWidth) * e.zoomEnertia), m(e, { containerTop: e.renderContainerTop, containerLeft: e.renderContainerLeft, imageHeight: e.renderImageHeight, imageWidth: e.renderImageWidth, imageTop: e.renderImageTop, imageLeft: e.renderImageLeft }) } } function $(e, t) { var n; e.isAnimating || (o(e), e.isAnimating = !0, e.isRendering = !1, e.isZooming = !1, (n = e).$container && n.$container.length && n.$container.fsTouch("destroy").off(S.scaleStart, v).off(S.scaleEnd, y).off(S.scale, b), e.$container.fsTransition({ property: "opacity" }, function () { e.isAnimating = !1, e.$container.remove(), "function" == typeof t && t.call(window, e) }), e.$el.addClass(_.loading)) } function C(e) { E.killEvent(e); var t = l(e.currentTarget), n = e.data, i = n.index + (t.hasClass(_.control_next) ? 1 : -1); n.isAnimating || (i < 0 && (i = 0), i > n.total && (i = n.total), i !== n.index && (n.index = i, $(n, function () { d(n, n.images[n.index]) })), k(n)) } function k(e) { e.$controlItems.removeClass(_.control_disabled), 0 === e.index && e.$controlPrevious.addClass(_.control_disabled), e.index === e.images.length - 1 && e.$controlNext.addClass(_.control_disabled) } function T(e) { s(e), u(e), p(e), f(e), u(e), i(e), n(e) } var H = a.Plugin("viewer", { widget: !0, defaults: { controls: !0, customClass: "", labels: { count: "of", next: "Next", previous: "Previous", zoom_in: "Zoom In", zoom_out: "Zoom Out" }, theme: "fs-light", zoomDelta: 100, zoomEnertia: .2, zoomIncrement: .01 }, classes: ["source", "wrapper", "viewport", "container", "image", "gallery", "loading_icon", "controls", "controls_custom", "control", "control_previous", "control_next", "control_zoom_in", "control_zoom_out", "control_disabled", "loading"], events: { loaded: "loaded", ready: "ready" }, methods: { _construct: function (e) { var t, n = "", i = [_.control, _.control_previous].join(" "), a = [_.control, _.control_next].join(" "), o = [_.control, _.control_zoom_in].join(" "), r = [_.control, _.control_zoom_out].join(" "); e.thisClasses = [_.base, _.loading, e.customClass, e.theme], e.images = [], e.source = !1, e.gallery = !1, e.tapTimer = null, e.action = !1, e.isRendering = !1, e.isZooming = !1, e.isAnimating = !1, e.keyDownTime = 1, e.$images = this.find("img").addClass(_.source), e.index = 0, e.total = e.$images.length - 1, e.customControls = "object" === l.type(e.controls) && e.controls.zoom_in && e.controls.zoom_out, 1 < e.$images.length && (e.gallery = !0, e.thisClasses.push(_.gallery), !e.customControls || e.controls.previous && e.controls.next || (e.customControls = !1)); for (var s = 0; s < e.$images.length; s++)t = e.$images.eq(s), e.images.push(t.attr("src")); n += '<div class="' + _.wrapper + '">', n += '<div class="' + _.loading_icon + '"></div>', n += '<div class="' + _.viewport + '"></div>', n += "</div>", e.controls && !e.customControls && (n += '<div class="' + _.controls + '">', n += '<button type="button" class="' + i + '">' + e.labels.previous + "</button>", n += '<button type="button" class="' + r + '">' + e.labels.zoom_out + "</button>", n += '<button type="button" class="' + o + '">' + e.labels.zoom_in + "</button>", n += '<button type="button" class="' + a + '">' + e.labels.next + "</button>", n += "</div>"), this.addClass(e.thisClasses.join(" ")).prepend(n), e.$wrapper = this.find(W.wrapper), e.$viewport = this.find(W.viewport), e.customControls ? (e.$controls = l(e.controls.container).addClass([_.controls, _.controls_custom].join(" ")), e.$controlPrevious = l(e.controls.previous).addClass(i), e.$controlNext = l(e.controls.next).addClass(a), e.$controlZoomIn = l(e.controls.zoom_in).addClass(o), e.$controlZoomOut = l(e.controls.zoom_out).addClass(r)) : (e.$controls = this.find(W.controls), e.$controlPrevious = this.find(W.control_previous), e.$controlNext = this.find(W.control_next), e.$controlZoomIn = this.find(W.control_zoom_in), e.$controlZoomOut = this.find(W.control_zoom_out)), e.$controlItems = e.$controlPrevious.add(e.$controlNext), e.$controlZooms = e.$controlZoomIn.add(e.$controlZoomOut), c(), e.$controlItems.on(S.click, e, C), e.$controlZooms.on([S.touchStart, S.mouseDown].join(" "), e, w).on([S.touchEnd, S.mouseUp].join(" "), e, x), d(e, e.images[e.index]), k(e) }, _destruct: function (e) { e.$wrapper.remove(), e.$image.removeClass(_.source), e.controls && !e.customControls && e.$controls.remove(), e.customControls && (e.$controls.removeClass([_.controls, _.controls_custom].join(" ")), e.$controlItems.off(S.click).removeClass([_.control, _.control_previous, _.control_next].join(" ")), e.$controlZooms.off([S.touchStart, S.mouseDown].join(" ")).off([S.touchStart, S.mouseDown].join(" ")).off([S.touchEnd, S.mouseUp].join(" ")).removeClass([_.control, _.control_zoom_in, _.control_zoom_out].join(" "))), this.removeClass(e.thisClasses.join(" ")).off(S.namespace), c() }, _resize: function () { E.iterate.call(A, T) }, _raf: function () { E.iterate.call(A, r) }, resize: T, load: function (e, t) { e.index = 0, "string" == typeof t ? (e.total = 0, e.images = [t], e.gallery = !1, e.$el.removeClass(_.gallery)) : (e.total = t.length - 1, 1 < (e.images = t).length && (e.gallery = !0, e.$el.addClass(_.gallery)), t = e.images[e.index]), $(e, function () { d(e, t) }) }, unload: function (e) { $(e) } } }), j = H.namespace, W = H.classes, _ = W.raw, S = H.events, E = H.functions, M = (a.window, a.$window), A = []; a.Ready(function () { e(), M.on("scroll", e), a.$body }) }), function (o, e) { var n, t = {}; function i() { var e = o(this), t = o(e.attr("href")); t.find(".js-background").background("resize"), t.find(".js-carousel").carousel("resize"), t.find(".js-equalize").equalize("resize"), t.find("input[type=range]").range("resize"), t.find(".js-scrollbar").scrollbar("resize"), n.find(".js-checkpoint").checkpoint("resize"), n.find(".js-sticky").sticky("resize") } t.minXS = parseInt("320", 10), t.minSM = parseInt("500", 10), t.minMD = parseInt("740", 10), t.minLG = parseInt("980", 10), t.minXL = parseInt("1220", 10), t.maxXS = t.minXS - 1, t.maxSM = t.minSM - 1, t.maxMD = t.minMD - 1, t.maxLG = t.minLG - 1, t.maxXL = t.minXL - 1, t.minHTsm = parseInt("500", 10), t.minHT = parseInt("800", 10), t.maxHTsm = t.minHTsm - 1, t.maxHT = t.minHT - 1, e.Ready(function () { o(window), n = o("body"), o.mediaquery && o.mediaquery({ minWidth: [t.minXS, t.minSM, t.minMD, t.minLG, t.minXL], maxWidth: [t.maxXL, t.maxLG, t.maxMD, t.maxSM, t.maxXS], minHeight: [t.minHTsm, t.minHT], maxHeight: [t.maxHT, t.maxHTsm] }), o.cookie && o.cookie({ path: "/" }), o(".demo_container").each(function (e) { var t = "", n = o(this), i = n.find(".demo_example"), a = n.find(".demo_code"); i.attr("id", "example-" + e), a.attr("id", "code-" + e), t += '<div class="demo_tabs contain">', t += '<a href="#example-' + e + '" class="demo_tab js-demo_tabs" data-tabs-group="demo-' + e + '">Demo</a>', t += '<a href="#code-' + e + '" class="demo_tab js-demo_tabs" data-tabs-group="demo-' + e + '">Code</a>', t += "</div>", n.prepend(t) }), function (e) { var t = { theme: e }; o(".js-navigation_elements").appendTo("body"), n.find(".js-background").background("destroy"), n.find(".js-carousel").carousel("destroy"), n.find(".js-checkbox, .js-radio, input[type=checkbox], input[type=radio]").checkbox("destroy"), n.find(".js-checkpoint").checkpoint("destroy"), n.find(".js-dropdown").dropdown("destroy"), n.find(".js-equalize").equalize("destroy"), n.find(".js-lightbox").lightbox("destroy"), n.find(".js-navigation").navigation("destroy"), n.find("input[type=number]").number("destroy"), n.find(".js-pagination").pagination("destroy"), n.find("input[type=range]").range("destroy"), n.find(".js-scrollbar").scrollbar("destroy"), n.find(".js-sticky").sticky("destroy"), n.find(".js-swap").swap("destroy"), n.find(".js-tabs").tabs("destroy"), n.find(".js-tooltip").tooltip("destroy"), n.find(".js-upload").upload("destroy"), n.find(".js-viewer").viewer("destroy"), n.find(".js-background").background(t), n.find(".js-carousel").carousel(t), n.find(".js-checkbox, .js-radio, input[type=checkbox], input[type=radio]").checkbox(t), n.find(".js-checkpoint").checkpoint(), n.find(".js-dropdown").dropdown(t), n.find(".js-equalize").equalize(t), n.find(".js-lightbox").lightbox(t), n.find(".js-navigation").navigation(t), n.find("input[type=number]").number(t), n.find(".js-pagination").pagination(t), n.find("input[type=range]").range(t), n.find(".js-scrollbar").scrollbar(t), n.find(".js-sticky").sticky(t), n.find(".js-swap").swap(t), n.find(".js-tabs").tabs(t), n.find(".js-tooltip").tooltip(t), n.find(".js-upload").upload(t), n.find(".js-viewer").viewer(t), n.find(".js-demo_tabs").off("update.tabs").tabs("destroy"), n.find(".js-demo_tabs").tabs({ mobileMaxWidth: "0px", theme: "fs-demo" }).on("update.tabs", i) }("fs-light") }) }(jQuery, Formstone); var _self = "undefined" != typeof window ? window : "undefined" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope ? self : {}, Prism = function (c) { var d = /\blang(?:uage)?-([\w-]+)\b/i, t = 0, E = { manual: c.Prism && c.Prism.manual, disableWorkerMessageHandler: c.Prism && c.Prism.disableWorkerMessageHandler, util: { encode: function (e) { return e instanceof M ? new M(e.type, E.util.encode(e.content), e.alias) : Array.isArray(e) ? e.map(E.util.encode) : e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/\u00a0/g, " ") }, type: function (e) { return Object.prototype.toString.call(e).slice(8, -1) }, objId: function (e) { return e.__id || Object.defineProperty(e, "__id", { value: ++t }), e.__id }, clone: function n(e, i) { var a, t, o = E.util.type(e); switch (i = i || {}, o) { case "Object": if (t = E.util.objId(e), i[t]) return i[t]; for (var r in a = {}, i[t] = a, e) e.hasOwnProperty(r) && (a[r] = n(e[r], i)); return a; case "Array": return t = E.util.objId(e), i[t] ? i[t] : (a = [], i[t] = a, e.forEach(function (e, t) { a[t] = n(e, i) }), a); default: return e } } }, languages: { extend: function (e, t) { var n = E.util.clone(E.languages[e]); for (var i in t) n[i] = t[i]; return n }, insertBefore: function (n, e, t, i) { var a = (i = i || E.languages)[n], o = {}; for (var r in a) if (a.hasOwnProperty(r)) { if (r == e) for (var s in t) t.hasOwnProperty(s) && (o[s] = t[s]); t.hasOwnProperty(r) || (o[r] = a[r]) } var l = i[n]; return i[n] = o, E.languages.DFS(E.languages, function (e, t) { t === l && e != n && (this[e] = o) }), o }, DFS: function e(t, n, i, a) { a = a || {}; var o = E.util.objId; for (var r in t) if (t.hasOwnProperty(r)) { n.call(t, r, t[r], i || r); var s = t[r], l = E.util.type(s); "Object" !== l || a[o(s)] ? "Array" !== l || a[o(s)] || (a[o(s)] = !0, e(s, n, r, a)) : (a[o(s)] = !0, e(s, n, null, a)) } } }, plugins: {}, highlightAll: function (e, t) { E.highlightAllUnder(document, e, t) }, highlightAllUnder: function (e, t, n) { var i = { callback: n, selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code' }; E.hooks.run("before-highlightall", i); for (var a, o = i.elements || e.querySelectorAll(i.selector), r = 0; a = o[r++];)E.highlightElement(a, !0 === t, i.callback) }, highlightElement: function (e, t, n) { for (var i, a, o = e; o && !d.test(o.className);)o = o.parentNode; o && (i = (o.className.match(d) || [, ""])[1].toLowerCase(), a = E.languages[i]), e.className = e.className.replace(d, "").replace(/\s+/g, " ") + " language-" + i, e.parentNode && (o = e.parentNode, /pre/i.test(o.nodeName) && (o.className = o.className.replace(d, "").replace(/\s+/g, " ") + " language-" + i)); function r(e) { s.highlightedCode = e, E.hooks.run("before-insert", s), s.element.innerHTML = s.highlightedCode, E.hooks.run("after-highlight", s), E.hooks.run("complete", s), n && n.call(s.element) } var s = { element: e, language: i, grammar: a, code: e.textContent }; if (E.hooks.run("before-sanity-check", s), s.code) if (E.hooks.run("before-highlight", s), s.grammar) if (t && c.Worker) { var l = new Worker(E.filename); l.onmessage = function (e) { r(e.data) }, l.postMessage(JSON.stringify({ language: s.language, code: s.code, immediateClose: !0 })) } else r(E.highlight(s.code, s.grammar, s.language)); else r(E.util.encode(s.code)); else E.hooks.run("complete", s) }, highlight: function (e, t, n) { var i = { code: e, grammar: t, language: n }; return E.hooks.run("before-tokenize", i), i.tokens = E.tokenize(i.code, i.grammar), E.hooks.run("after-tokenize", i), M.stringify(E.util.encode(i.tokens), i.language) }, matchGrammar: function (e, t, n, i, a, o, r) { for (var s in n) if (n.hasOwnProperty(s) && n[s]) { if (s == r) return; var l = n[s]; l = "Array" === E.util.type(l) ? l : [l]; for (var c = 0; c < l.length; ++c) { var d = l[c], u = d.inside, p = !!d.lookbehind, f = !!d.greedy, h = 0, g = d.alias; if (f && !d.pattern.global) { var m = d.pattern.toString().match(/[imuy]*$/)[0]; d.pattern = RegExp(d.pattern.source, m + "g") } d = d.pattern || d; for (var v = i, b = a; v < t.length; b += t[v].length, ++v) { var y = t[v]; if (t.length > e.length) return; if (!(y instanceof M)) { if (f && v != t.length - 1) { if (d.lastIndex = b, !(T = d.exec(e))) break; for (var w = T.index + (p ? T[1].length : 0), x = T.index + T[0].length, $ = v, C = b, k = t.length; $ < k && (C < x || !t[$].type && !t[$ - 1].greedy); ++$)(C += t[$].length) <= w && (++v, b = C); if (t[v] instanceof M) continue; H = $ - v, y = e.slice(b, C), T.index -= b } else { d.lastIndex = 0; var T = d.exec(y), H = 1 } if (T) { p && (h = T[1] ? T[1].length : 0); x = (w = T.index + h) + (T = T[0].slice(h)).length; var j = y.slice(0, w), W = y.slice(x), _ = [v, H]; j && (++v, b += j.length, _.push(j)); var S = new M(s, u ? E.tokenize(T, u) : T, g, T, f); if (_.push(S), W && _.push(W), Array.prototype.splice.apply(t, _), 1 != H && E.matchGrammar(e, t, n, v, b, !0, s), o) break } else if (o) break } } } } }, tokenize: function (e, t) { var n = [e], i = t.rest; if (i) { for (var a in i) t[a] = i[a]; delete t.rest } return E.matchGrammar(e, n, t, 0, 0, !1), n }, hooks: { all: {}, add: function (e, t) { var n = E.hooks.all; n[e] = n[e] || [], n[e].push(t) }, run: function (e, t) { var n = E.hooks.all[e]; if (n && n.length) for (var i, a = 0; i = n[a++];)i(t) } }, Token: M }; function M(e, t, n, i, a) { this.type = e, this.content = t, this.alias = n, this.length = 0 | (i || "").length, this.greedy = !!a } if (c.Prism = E, M.stringify = function (t, n, e) { if ("string" == typeof t) return t; if (Array.isArray(t)) return t.map(function (e) { return M.stringify(e, n, t) }).join(""); var i = { type: t.type, content: M.stringify(t.content, n, e), tag: "span", classes: ["token", t.type], attributes: {}, language: n, parent: e }; if (t.alias) { var a = Array.isArray(t.alias) ? t.alias : [t.alias]; Array.prototype.push.apply(i.classes, a) } E.hooks.run("wrap", i); var o = Object.keys(i.attributes).map(function (e) { return e + '="' + (i.attributes[e] || "").replace(/"/g, "&quot;") + '"' }).join(" "); return "<" + i.tag + ' class="' + i.classes.join(" ") + '"' + (o ? " " + o : "") + ">" + i.content + "</" + i.tag + ">" }, !c.document) return c.addEventListener && (E.disableWorkerMessageHandler || c.addEventListener("message", function (e) { var t = JSON.parse(e.data), n = t.language, i = t.code, a = t.immediateClose; c.postMessage(E.highlight(i, E.languages[n], n)), a && c.close() }, !1)), E; var e = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop(); return e && (E.filename = e.src, E.manual || e.hasAttribute("data-manual") || ("loading" !== document.readyState ? window.requestAnimationFrame ? window.requestAnimationFrame(E.highlightAll) : window.setTimeout(E.highlightAll, 16) : document.addEventListener("DOMContentLoaded", E.highlightAll))), E }(_self); "undefined" != typeof module && module.exports && (module.exports = Prism), "undefined" != typeof global && (global.Prism = Prism), Prism.languages.markup = { comment: /<!--[\s\S]*?-->/, prolog: /<\?[\s\S]+?\?>/, doctype: /<!DOCTYPE[\s\S]+?>/i, cdata: /<!\[CDATA\[[\s\S]*?]]>/i, tag: { pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i, greedy: !0, inside: { tag: { pattern: /^<\/?[^\s>\/]+/i, inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ } }, "attr-value": { pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i, inside: { punctuation: [/^=/, { pattern: /^(\s*)["']|["']$/, lookbehind: !0 }] } }, punctuation: /\/?>/, "attr-name": { pattern: /[^\s>\/]+/, inside: { namespace: /^[^\s>\/:]+:/ } } } }, entity: /&#?[\da-z]{1,8};/i }, Prism.languages.markup.tag.inside["attr-value"].inside.entity = Prism.languages.markup.entity, Prism.hooks.add("wrap", function (e) { "entity" === e.type && (e.attributes.title = e.content.replace(/&amp;/, "&")) }), Object.defineProperty(Prism.languages.markup.tag, "addInlined", { value: function (e, t) { var n = {}; n["language-" + t] = { pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i, lookbehind: !0, inside: Prism.languages[t] }, n.cdata = /^<!\[CDATA\[|\]\]>$/i; var i = { "included-cdata": { pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, inside: n } }; i["language-" + t] = { pattern: /[\s\S]+/, inside: Prism.languages[t] }; var a = {}; a[e] = { pattern: RegExp(/(<__[\s\S]*?>)(?:<!\[CDATA\[[\s\S]*?\]\]>\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g, e), "i"), lookbehind: !0, greedy: !0, inside: i }, Prism.languages.insertBefore("markup", "cdata", a) } }), Prism.languages.xml = Prism.languages.extend("markup", {}), Prism.languages.html = Prism.languages.markup, Prism.languages.mathml = Prism.languages.markup, Prism.languages.svg = Prism.languages.markup, function (e) { var t = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/; e.languages.css = { comment: /\/\*[\s\S]*?\*\//, atrule: { pattern: /@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i, inside: { rule: /@[\w-]+/ } }, url: RegExp("url\\((?:" + t.source + "|.*?)\\)", "i"), selector: RegExp("[^{}\\s](?:[^{};\"']|" + t.source + ")*?(?=\\s*\\{)"), string: { pattern: t, greedy: !0 }, property: /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i, important: /!important\b/i, function: /[-a-z0-9]+(?=\()/i, punctuation: /[(){};:,]/ }, e.languages.css.atrule.inside.rest = e.languages.css; var n = e.languages.markup; n && (n.tag.addInlined("style", "css"), e.languages.insertBefore("inside", "attr-value", { "style-attr": { pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i, inside: { "attr-name": { pattern: /^\s*style/i, inside: n.tag.inside }, punctuation: /^\s*=\s*['"]|['"]\s*$/, "attr-value": { pattern: /.+/i, inside: e.languages.css } }, alias: "language-css" } }, n.tag)) }(Prism), Prism.languages.clike = { comment: [{ pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: !0 }, { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 }], string: { pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, greedy: !0 }, "class-name": { pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i, lookbehind: !0, inside: { punctuation: /[.\\]/ } }, keyword: /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, boolean: /\b(?:true|false)\b/, function: /\w+(?=\()/, number: /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i, operator: /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, punctuation: /[{}[\];(),.:]/ }, Prism.languages.javascript = Prism.languages.extend("clike", { "class-name": [Prism.languages.clike["class-name"], { pattern: /(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/, lookbehind: !0 }], keyword: [{ pattern: /((?:^|})\s*)(?:catch|finally)\b/, lookbehind: !0 }, { pattern: /(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/, lookbehind: !0 }], number: /\b(?:(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+)n?|\d+n|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/, function: /[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, operator: /-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/ }), Prism.languages.javascript["class-name"][0].pattern = /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/, Prism.languages.insertBefore("javascript", "keyword", { regex: { pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/, lookbehind: !0, greedy: !0 }, "function-variable": { pattern: /[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/, alias: "function" }, parameter: [{ pattern: /(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/, lookbehind: !0, inside: Prism.languages.javascript }, { pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i, inside: Prism.languages.javascript }, { pattern: /(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/, lookbehind: !0, inside: Prism.languages.javascript }, { pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/, lookbehind: !0, inside: Prism.languages.javascript }], constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/ }), Prism.languages.insertBefore("javascript", "string", { "template-string": { pattern: /`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/, greedy: !0, inside: { interpolation: { pattern: /\${[^}]+}/, inside: { "interpolation-punctuation": { pattern: /^\${|}$/, alias: "punctuation" }, rest: Prism.languages.javascript } }, string: /[\s\S]+/ } } }), Prism.languages.markup && Prism.languages.markup.tag.addInlined("script", "javascript"), Prism.languages.js = Prism.languages.javascript, "undefined" != typeof self && self.Prism && self.document && document.querySelector && (self.Prism.fileHighlight = function (e) { e = e || document; var l = { js: "javascript", py: "python", rb: "ruby", ps1: "powershell", psm1: "powershell", sh: "bash", bat: "batch", h: "c", tex: "latex" }; Array.prototype.slice.call(e.querySelectorAll("pre[data-src]")).forEach(function (e) { if (!e.hasAttribute("data-src-loaded")) { for (var t, n = e.getAttribute("data-src"), i = e, a = /\blang(?:uage)?-([\w-]+)\b/i; i && !a.test(i.className);)i = i.parentNode; if (i && (t = (e.className.match(a) || [, ""])[1]), !t) { var o = (n.match(/\.(\w+)$/) || [, ""])[1]; t = l[o] || o } var r = document.createElement("code"); r.className = "language-" + t, e.textContent = "", r.textContent = "Loading…", e.appendChild(r); var s = new XMLHttpRequest; s.open("GET", n, !0), s.onreadystatechange = function () { 4 == s.readyState && (s.status < 400 && s.responseText ? (r.textContent = s.responseText, Prism.highlightElement(r), e.setAttribute("data-src-loaded", "")) : 400 <= s.status ? r.textContent = "✖ Error " + s.status + " while fetching file: " + s.statusText : r.textContent = "✖ Error: File does not exist or is empty") }, s.send(null) } }), Prism.plugins.toolbar && Prism.plugins.toolbar.registerButton("download-file", function (e) { var t = e.element.parentNode; if (t && /pre/i.test(t.nodeName) && t.hasAttribute("data-src") && t.hasAttribute("data-download-link")) { var n = t.getAttribute("data-src"), i = document.createElement("a"); return i.textContent = t.getAttribute("data-download-link-label") || "Download", i.setAttribute("download", ""), i.href = n, i } }) }, document.addEventListener("DOMContentLoaded", function () { self.Prism.fileHighlight() }));