From 90aa8d59bd00794dc085a07ef37a19c954e0208b Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 19 Aug 2023 12:48:21 +0930 Subject: [PATCH 1/4] feat(docker): remove specified data volumes the volumes are not required as the data is ties to the container and changes on re-deploy. !11 --- dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/dockerfile b/dockerfile index dd52277..bdeb7e2 100644 --- a/dockerfile +++ b/dockerfile @@ -54,5 +54,3 @@ RUN cd /data; \ npm install --unsafe-perm --no-update-notifier --no-fund --only=production passport passport-keycloak-oauth2-oidc; HEALTHCHECK CMD curl http://localhost:1880/admin || exit 1 - -VOLUME [ "/data", "/usr/src/node-red" ] -- 2.49.0 From 527d8ffb9696e13e326de4e3dfa434b2d1069128 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 19 Aug 2023 12:50:49 +0930 Subject: [PATCH 2/4] feat(docker): listen port updated to HTTP/80 !11 --- dockerfile | 4 +++- includes/data/settings.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dockerfile b/dockerfile index bdeb7e2..5bab47a 100644 --- a/dockerfile +++ b/dockerfile @@ -53,4 +53,6 @@ USER node-red RUN cd /data; \ npm install --unsafe-perm --no-update-notifier --no-fund --only=production passport passport-keycloak-oauth2-oidc; -HEALTHCHECK CMD curl http://localhost:1880/admin || exit 1 +HEALTHCHECK CMD curl http://localhost:80/admin || exit 1 + +EXPOSE 80 diff --git a/includes/data/settings.js b/includes/data/settings.js index ea6771f..1acb8fb 100644 --- a/includes/data/settings.js +++ b/includes/data/settings.js @@ -141,7 +141,7 @@ module.exports = { ******************************************************************************/ /** the tcp port that the Node-RED web server is listening on */ - uiPort: process.env.PORT || 1880, + uiPort: process.env.PORT || 80, /** By default, the Node-RED UI accepts connections on all IPv4 interfaces. * To listen on all IPv6 addresses, set uiHost to "::", -- 2.49.0 From b4454afe82ee0e99de98375548377204745a12f2 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 19 Aug 2023 12:51:17 +0930 Subject: [PATCH 3/4] feat(NodeRED): add audit events to logging !11 --- includes/data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/data/settings.js b/includes/data/settings.js index 1acb8fb..417eb0b 100644 --- a/includes/data/settings.js +++ b/includes/data/settings.js @@ -298,7 +298,7 @@ module.exports = { /** Whether or not to include metric events in the log output */ metrics: false, /** Whether or not to include audit events in the log output */ - audit: false + audit: true } }, -- 2.49.0 From 9b1c30a5d4249b16a05078e4d6496961c0735194 Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 19 Aug 2023 13:07:28 +0930 Subject: [PATCH 4/4] feat(selfservice): migrate external js to internal request !11 --- flows.json | 274 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 202 insertions(+), 72 deletions(-) diff --git a/flows.json b/flows.json index c3e2dba..bab60f8 100644 --- a/flows.json +++ b/flows.json @@ -81,7 +81,7 @@ "d460346f6ae1673b" ], "x": 154, - "y": 819, + "y": 919, "w": 1912, "h": 122 }, @@ -104,7 +104,7 @@ "317930c679e833d1" ], "x": 154, - "y": 679, + "y": 779, "w": 1092, "h": 82 }, @@ -125,7 +125,7 @@ "2f628eec7ca4b343" ], "x": 154, - "y": 299, + "y": 399, "w": 812, "h": 82 }, @@ -190,7 +190,7 @@ "c9323e9dc74c9203" ], "x": 154, - "y": 419, + "y": 519, "w": 812, "h": 82 }, @@ -211,7 +211,7 @@ "dcfa3cfba4eb1356" ], "x": 154, - "y": 539, + "y": 639, "w": 812, "h": 82 }, @@ -250,8 +250,8 @@ "602e7197835bba91", "b664f0b9e6c17ad6" ], - "x": 674, - "y": 139, + "x": 694, + "y": 239, "w": 492, "h": 82 }, @@ -272,7 +272,7 @@ "c17fe14224b2a367" ], "x": 154, - "y": 999, + "y": 1099, "w": 752, "h": 82, "info": "# Logout\n\nThis group contains the `/logout` path.\nAs part of this groups glow, when navigated to. \nThe users cookie is set to expire and the user session is removed from the filesystem." @@ -529,7 +529,7 @@ ], "x": 148, "y": 313, - "w": 2944, + "w": 2964, "h": 914, "info": "# HTTP Server\n\nThis group provides the entrypoint for the application. it's broken down into further sub-groups that have their own individual responsibilities for processing a part of the HTTP servers workflow." }, @@ -970,12 +970,15 @@ "28ac8fd21056642c", "195e7631e8660db0", "e01b059fbd4cb54f", - "dce9621aba915bd4" + "dce9621aba915bd4", + "31b86caaa955a0ee", + "dc075811536fafda", + "f5365376f49c255d" ], "x": 2374, "y": 559, - "w": 692, - "h": 382, + "w": 712, + "h": 422, "info": "# Fetch CSS / JS Files\n\nThis sub-group is the forth step in the http workflow, and specifically for HTTP/Get methods only.\n\nThis sub-group is responsible for fetching the appropriate CSS Style or JS Script that is required to fulfill the page request.\n" }, { @@ -1528,13 +1531,33 @@ "w": 1612, "h": 82 }, + { + "id": "cd68bc6f76082c33", + "type": "group", + "z": "42b9663b67dbd983", + "name": "", + "style": { + "stroke": "#ff0000", + "fill": "#ffbfbf", + "label": true + }, + "nodes": [ + "db9de7d9adf2c039", + "2e8883be19eb130d", + "65dc1dee26e42599" + ], + "x": 694, + "y": 139, + "w": 492, + "h": 82 + }, { "id": "5798e39cbc3730ae", "type": "junction", "z": "42b9663b67dbd983", "g": "8ad5fe68ad170e2d", "x": 1240, - "y": 860, + "y": 960, "wires": [ [ "365ba07c1f4721ec" @@ -2017,7 +2040,7 @@ "type": "junction", "z": "379c65a27117b46c", "g": "5706252b01492258", - "x": 2780, + "x": 2800, "y": 680, "wires": [ [ @@ -2031,8 +2054,8 @@ "type": "junction", "z": "379c65a27117b46c", "g": "5706252b01492258", - "x": 2780, - "y": 740, + "x": 2800, + "y": 720, "wires": [ [ "1b1ca0bd7037ed0f", @@ -2045,8 +2068,8 @@ "type": "junction", "z": "379c65a27117b46c", "g": "5706252b01492258", - "x": 2780, - "y": 800, + "x": 2800, + "y": 840, "wires": [ [ "28ac8fd21056642c", @@ -2185,6 +2208,20 @@ ] ] }, + { + "id": "f5365376f49c255d", + "type": "junction", + "z": "379c65a27117b46c", + "g": "5706252b01492258", + "x": 2800, + "y": 800, + "wires": [ + [ + "31b86caaa955a0ee", + "dc075811536fafda" + ] + ] + }, { "id": "160d0b5ed597dc51", "type": "ldap", @@ -2637,13 +2674,18 @@ "v": "common.js", "vt": "str" }, + { + "t": "eq", + "v": "jquery.min.js", + "vt": "str" + }, { "t": "else" } ], "checkall": "false", "repair": false, - "outputs": 3, + "outputs": 4, "x": 2650, "y": 740, "wires": [ @@ -2653,6 +2695,9 @@ [ "e01b059fbd4cb54f" ], + [ + "f5365376f49c255d" + ], [ "dce9621aba915bd4" ] @@ -2668,7 +2713,7 @@ "links": [ "3502d9cf69680b66" ], - "x": 2940, + "x": 2960, "y": 640, "wires": [], "l": true @@ -2683,8 +2728,8 @@ "links": [ "4d40709eea926ab1" ], - "x": 2950, - "y": 860, + "x": 2970, + "y": 900, "wires": [], "l": true }, @@ -2702,7 +2747,7 @@ "targetType": "full", "statusVal": "", "statusType": "auto", - "x": 2940, + "x": 2960, "y": 600, "wires": [] }, @@ -2720,8 +2765,8 @@ "targetType": "full", "statusVal": "", "statusType": "auto", - "x": 2950, - "y": 900, + "x": 2970, + "y": 940, "wires": [] }, { @@ -2765,10 +2810,10 @@ "name": "common.js", "mode": "link", "links": [ - "602e7197835bba91" + "2e8883be19eb130d" ], - "x": 2950, - "y": 760, + "x": 2970, + "y": 740, "wires": [], "l": true }, @@ -2786,8 +2831,8 @@ "targetType": "full", "statusVal": "", "statusType": "auto", - "x": 2930, - "y": 720, + "x": 2950, + "y": 700, "wires": [] }, { @@ -3733,6 +3778,39 @@ ] ] }, + { + "id": "31b86caaa955a0ee", + "type": "debug", + "z": "379c65a27117b46c", + "g": "5706252b01492258", + "name": "JS File", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 2950, + "y": 780, + "wires": [] + }, + { + "id": "dc075811536fafda", + "type": "link out", + "z": "379c65a27117b46c", + "g": "5706252b01492258", + "name": "jquery.min.js", + "mode": "link", + "links": [ + "602e7197835bba91" + ], + "x": 2970, + "y": 820, + "wires": [], + "l": true + }, { "id": "02c4b9524d361ade", "type": "link in", @@ -3744,7 +3822,7 @@ "28c74c7b39a06100" ], "x": 320, - "y": 880, + "y": 980, "wires": [ [ "7e95892f2f3454b7" @@ -3766,7 +3844,7 @@ "template": "
\n

Password reset Questions

\n\n
\n

For ensuring that only you can reset your password, you are required to provide three questions and answers. These questions will then as part of the self-service password reset process to confirm that it's you who is requesting the password reset.

\n

When choosing your questions, it's important to ensure that the questions that you use, only you would know the answers. This is to ensure that no one could guess the answers as only you would know the answers.

\n

In the fields below type out your question and answer, don't include punctuation or the use of any special characters. Valid characters are A-Z, a-z and 0-9. Any character entered into the form that are not part of this list will be removed.

\n
\n \n \n \n \n
\n\n
\n \n \n \n \n
\n\n
\n \n \n \n \n
\n\n

On Form submission, your answers will be hashed before storage. As such, no one will be able to view the answers, this includes you. This method however, still enables us to confirm an answer to a question as would occur during the password reset process.

\n\n \n
\n \n
\n\n
\n Results\n \n
\n
\n \n
\n", "output": "str", "x": 1670, - "y": 860, + "y": 960, "wires": [ [ "591e68e90f876dd1" @@ -3784,7 +3862,7 @@ "7db929503cf13635" ], "x": 1950, - "y": 860, + "y": 960, "wires": [], "l": true }, @@ -3798,7 +3876,7 @@ "cad86e4a717ecb58" ], "x": 280, - "y": 720, + "y": 820, "wires": [ [ "317930c679e833d1" @@ -3835,7 +3913,7 @@ "to": "", "reg": false, "x": 720, - "y": 720, + "y": 820, "wires": [ [ "f3b55ea2.f4d51" @@ -3854,7 +3932,7 @@ "syntax": "mustache", "template": "
\n

Self-Service Password Reset

\n\n
\n

To reset your password, ALL fields are Mandatory. On completing this form click 'submit' below. Results will be posted in the results window underneath the submit button.

\n \n \n\n \n \n\n \n \n\n \n \n\n

This is the first half of your password

\n \n\n \n
\n \n
\n\n
\n Results\n \n
\n
\n \n
\n", "x": 850, - "y": 720, + "y": 820, "wires": [ [ "457583335831f826" @@ -3872,7 +3950,7 @@ "7db929503cf13635" ], "x": 1130, - "y": 720, + "y": 820, "wires": [], "l": true }, @@ -3938,9 +4016,9 @@ "fieldType": "msg", "format": "javascript", "syntax": "plain", - "template": "\n$(document).ready(function(e) {\n \n $(\"form[ajax=true]\").submit(function(e) {\n\n $(\"input[type=submit]\").attr(\"disabled\", true);\n $(\"input[type=submit]\").attr(\"value\", \"Sent\");\n\n e.preventDefault();\n \n var form_data = $(this).serialize();\n var form_url = $(this).attr(\"action\");\n var form_method = $(this).attr(\"method\").toUpperCase();\n \n $(\"#loadingimg\").show();\n\n $.ajax({\n url: form_url, \n type: form_method, \n data: form_data, \n cache: false,\n success: function(returnhtml){ \n \n $(\"#result\").html(returnhtml); \n $(\"#loadingimg\").hide(); \n } \n }); \n \n });\n \n});\n", - "x": 930, - "y": 180, + "template": "/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */\n!function (a, b) { \"object\" == typeof module && \"object\" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function (a) { if (!a.document) throw new Error(\"jQuery requires a window with a document\"); return b(a) } : b(a) }(\"undefined\" != typeof window ? window : this, function (a, b) {\n var c = [], d = c.slice, e = c.concat, f = c.push, g = c.indexOf, h = {}, i = h.toString, j = h.hasOwnProperty, k = \"\".trim, l = {}, m = a.document, n = \"2.1.0\", o = function (a, b) { return new o.fn.init(a, b) }, p = /^-ms-/, q = /-([\\da-z])/gi, r = function (a, b) { return b.toUpperCase() }; o.fn = o.prototype = { jquery: n, constructor: o, selector: \"\", length: 0, toArray: function () { return d.call(this) }, get: function (a) { return null != a ? 0 > a ? this[a + this.length] : this[a] : d.call(this) }, pushStack: function (a) { var b = o.merge(this.constructor(), a); return b.prevObject = this, b.context = this.context, b }, each: function (a, b) { return o.each(this, a, b) }, map: function (a) { return this.pushStack(o.map(this, function (b, c) { return a.call(b, c, b) })) }, slice: function () { return this.pushStack(d.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, eq: function (a) { var b = this.length, c = +a + (0 > a ? b : 0); return this.pushStack(c >= 0 && b > c ? [this[c]] : []) }, end: function () { return this.prevObject || this.constructor(null) }, push: f, sort: c.sort, splice: c.splice }, o.extend = o.fn.extend = function () { var a, b, c, d, e, f, g = arguments[0] || {}, h = 1, i = arguments.length, j = !1; for (\"boolean\" == typeof g && (j = g, g = arguments[h] || {}, h++), \"object\" == typeof g || o.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++)if (null != (a = arguments[h])) for (b in a) c = g[b], d = a[b], g !== d && (j && d && (o.isPlainObject(d) || (e = o.isArray(d))) ? (e ? (e = !1, f = c && o.isArray(c) ? c : []) : f = c && o.isPlainObject(c) ? c : {}, g[b] = o.extend(j, f, d)) : void 0 !== d && (g[b] = d)); return g }, o.extend({ expando: \"jQuery\" + (n + Math.random()).replace(/\\D/g, \"\"), isReady: !0, error: function (a) { throw new Error(a) }, noop: function () { }, isFunction: function (a) { return \"function\" === o.type(a) }, isArray: Array.isArray, isWindow: function (a) { return null != a && a === a.window }, isNumeric: function (a) { return a - parseFloat(a) >= 0 }, isPlainObject: function (a) { if (\"object\" !== o.type(a) || a.nodeType || o.isWindow(a)) return !1; try { if (a.constructor && !j.call(a.constructor.prototype, \"isPrototypeOf\")) return !1 } catch (b) { return !1 } return !0 }, isEmptyObject: function (a) { var b; for (b in a) return !1; return !0 }, type: function (a) { return null == a ? a + \"\" : \"object\" == typeof a || \"function\" == typeof a ? h[i.call(a)] || \"object\" : typeof a }, globalEval: function (a) { var b, c = eval; a = o.trim(a), a && (1 === a.indexOf(\"use strict\") ? (b = m.createElement(\"script\"), b.text = a, m.head.appendChild(b).parentNode.removeChild(b)) : c(a)) }, camelCase: function (a) { return a.replace(p, \"ms-\").replace(q, r) }, nodeName: function (a, b) { return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase() }, each: function (a, b, c) { var d, e = 0, f = a.length, g = s(a); if (c) { if (g) { for (; f > e; e++)if (d = b.apply(a[e], c), d === !1) break } else for (e in a) if (d = b.apply(a[e], c), d === !1) break } else if (g) { for (; f > e; e++)if (d = b.call(a[e], e, a[e]), d === !1) break } else for (e in a) if (d = b.call(a[e], e, a[e]), d === !1) break; return a }, trim: function (a) { return null == a ? \"\" : k.call(a) }, makeArray: function (a, b) { var c = b || []; return null != a && (s(Object(a)) ? o.merge(c, \"string\" == typeof a ? [a] : a) : f.call(c, a)), c }, inArray: function (a, b, c) { return null == b ? -1 : g.call(b, a, c) }, merge: function (a, b) { for (var c = +b.length, d = 0, e = a.length; c > d; d++)a[e++] = b[d]; return a.length = e, a }, grep: function (a, b, c) { for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++)d = !b(a[f], f), d !== h && e.push(a[f]); return e }, map: function (a, b, c) { var d, f = 0, g = a.length, h = s(a), i = []; if (h) for (; g > f; f++)d = b(a[f], f, c), null != d && i.push(d); else for (f in a) d = b(a[f], f, c), null != d && i.push(d); return e.apply([], i) }, guid: 1, proxy: function (a, b) { var c, e, f; return \"string\" == typeof b && (c = a[b], b = a, a = c), o.isFunction(a) ? (e = d.call(arguments, 2), f = function () { return a.apply(b || this, e.concat(d.call(arguments))) }, f.guid = a.guid = a.guid || o.guid++, f) : void 0 }, now: Date.now, support: l }), o.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function (a, b) { h[\"[object \" + b + \"]\"] = b.toLowerCase() }); function s(a) { var b = a.length, c = o.type(a); return \"function\" === c || o.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : \"array\" === c || 0 === b || \"number\" == typeof b && b > 0 && b - 1 in a } var t = function (a) { var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s = \"sizzle\" + -new Date, t = a.document, u = 0, v = 0, w = eb(), x = eb(), y = eb(), z = function (a, b) { return a === b && (j = !0), 0 }, A = \"undefined\", B = 1 << 31, C = {}.hasOwnProperty, D = [], E = D.pop, F = D.push, G = D.push, H = D.slice, I = D.indexOf || function (a) { for (var b = 0, c = this.length; c > b; b++)if (this[b] === a) return b; return -1 }, J = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\", K = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\", L = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\", M = L.replace(\"w\", \"w#\"), N = \"\\\\[\" + K + \"*(\" + L + \")\" + K + \"*(?:([*^$|!~]?=)\" + K + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + M + \")|)|)\" + K + \"*\\\\]\", O = \":(\" + L + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + N.replace(3, 8) + \")*)|.*)\\\\)|)\", P = new RegExp(\"^\" + K + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + K + \"+$\", \"g\"), Q = new RegExp(\"^\" + K + \"*,\" + K + \"*\"), R = new RegExp(\"^\" + K + \"*([>+~]|\" + K + \")\" + K + \"*\"), S = new RegExp(\"=\" + K + \"*([^\\\\]'\\\"]*?)\" + K + \"*\\\\]\", \"g\"), T = new RegExp(O), U = new RegExp(\"^\" + M + \"$\"), V = { ID: new RegExp(\"^#(\" + L + \")\"), CLASS: new RegExp(\"^\\\\.(\" + L + \")\"), TAG: new RegExp(\"^(\" + L.replace(\"w\", \"w*\") + \")\"), ATTR: new RegExp(\"^\" + N), PSEUDO: new RegExp(\"^\" + O), CHILD: new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + K + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + K + \"*(?:([+-]|)\" + K + \"*(\\\\d+)|))\" + K + \"*\\\\)|)\", \"i\"), bool: new RegExp(\"^(?:\" + J + \")$\", \"i\"), needsContext: new RegExp(\"^\" + K + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + K + \"*((?:-\\\\d)?\\\\d*)\" + K + \"*\\\\)|)(?=[^-]|$)\", \"i\") }, W = /^(?:input|select|textarea|button)$/i, X = /^h\\d$/i, Y = /^[^{]+\\{\\s*\\[native \\w/, Z = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, $ = /[+~]/, _ = /'|\\\\/g, ab = new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\" + K + \"?|(\" + K + \")|.)\", \"ig\"), bb = function (a, b, c) { var d = \"0x\" + b - 65536; return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320) }; try { G.apply(D = H.call(t.childNodes), t.childNodes), D[t.childNodes.length].nodeType } catch (cb) { G = { apply: D.length ? function (a, b) { F.apply(a, H.call(b)) } : function (a, b) { var c = a.length, d = 0; while (a[c++] = b[d++]); a.length = c - 1 } } } function db(a, b, d, e) { var f, g, h, i, j, m, p, q, u, v; if ((b ? b.ownerDocument || b : t) !== l && k(b), b = b || l, d = d || [], !a || \"string\" != typeof a) return d; if (1 !== (i = b.nodeType) && 9 !== i) return []; if (n && !e) { if (f = Z.exec(a)) if (h = f[1]) { if (9 === i) { if (g = b.getElementById(h), !g || !g.parentNode) return d; if (g.id === h) return d.push(g), d } else if (b.ownerDocument && (g = b.ownerDocument.getElementById(h)) && r(b, g) && g.id === h) return d.push(g), d } else { if (f[2]) return G.apply(d, b.getElementsByTagName(a)), d; if ((h = f[3]) && c.getElementsByClassName && b.getElementsByClassName) return G.apply(d, b.getElementsByClassName(h)), d } if (c.qsa && (!o || !o.test(a))) { if (q = p = s, u = b, v = 9 === i && a, 1 === i && \"object\" !== b.nodeName.toLowerCase()) { m = ob(a), (p = b.getAttribute(\"id\")) ? q = p.replace(_, \"\\\\$&\") : b.setAttribute(\"id\", q), q = \"[id='\" + q + \"'] \", j = m.length; while (j--) m[j] = q + pb(m[j]); u = $.test(a) && mb(b.parentNode) || b, v = m.join(\",\") } if (v) try { return G.apply(d, u.querySelectorAll(v)), d } catch (w) { } finally { p || b.removeAttribute(\"id\") } } } return xb(a.replace(P, \"$1\"), b, d, e) } function eb() { var a = []; function b(c, e) { return a.push(c + \" \") > d.cacheLength && delete b[a.shift()], b[c + \" \"] = e } return b } function fb(a) { return a[s] = !0, a } function gb(a) { var b = l.createElement(\"div\"); try { return !!a(b) } catch (c) { return !1 } finally { b.parentNode && b.parentNode.removeChild(b), b = null } } function hb(a, b) { var c = a.split(\"|\"), e = a.length; while (e--) d.attrHandle[c[e]] = b } function ib(a, b) { var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || B) - (~a.sourceIndex || B); if (d) return d; if (c) while (c = c.nextSibling) if (c === b) return -1; return a ? 1 : -1 } function jb(a) { return function (b) { var c = b.nodeName.toLowerCase(); return \"input\" === c && b.type === a } } function kb(a) { return function (b) { var c = b.nodeName.toLowerCase(); return (\"input\" === c || \"button\" === c) && b.type === a } } function lb(a) { return fb(function (b) { return b = +b, fb(function (c, d) { var e, f = a([], c.length, b), g = f.length; while (g--) c[e = f[g]] && (c[e] = !(d[e] = c[e])) }) }) } function mb(a) { return a && typeof a.getElementsByTagName !== A && a } c = db.support = {}, f = db.isXML = function (a) { var b = a && (a.ownerDocument || a).documentElement; return b ? \"HTML\" !== b.nodeName : !1 }, k = db.setDocument = function (a) { var b, e = a ? a.ownerDocument || a : t, g = e.defaultView; return e !== l && 9 === e.nodeType && e.documentElement ? (l = e, m = e.documentElement, n = !f(e), g && g !== g.top && (g.addEventListener ? g.addEventListener(\"unload\", function () { k() }, !1) : g.attachEvent && g.attachEvent(\"onunload\", function () { k() })), c.attributes = gb(function (a) { return a.className = \"i\", !a.getAttribute(\"className\") }), c.getElementsByTagName = gb(function (a) { return a.appendChild(e.createComment(\"\")), !a.getElementsByTagName(\"*\").length }), c.getElementsByClassName = Y.test(e.getElementsByClassName) && gb(function (a) { return a.innerHTML = \"
\", a.firstChild.className = \"i\", 2 === a.getElementsByClassName(\"i\").length }), c.getById = gb(function (a) { return m.appendChild(a).id = s, !e.getElementsByName || !e.getElementsByName(s).length }), c.getById ? (d.find.ID = function (a, b) { if (typeof b.getElementById !== A && n) { var c = b.getElementById(a); return c && c.parentNode ? [c] : [] } }, d.filter.ID = function (a) { var b = a.replace(ab, bb); return function (a) { return a.getAttribute(\"id\") === b } }) : (delete d.find.ID, d.filter.ID = function (a) { var b = a.replace(ab, bb); return function (a) { var c = typeof a.getAttributeNode !== A && a.getAttributeNode(\"id\"); return c && c.value === b } }), d.find.TAG = c.getElementsByTagName ? function (a, b) { return typeof b.getElementsByTagName !== A ? b.getElementsByTagName(a) : void 0 } : function (a, b) { var c, d = [], e = 0, f = b.getElementsByTagName(a); if (\"*\" === a) { while (c = f[e++]) 1 === c.nodeType && d.push(c); return d } return f }, d.find.CLASS = c.getElementsByClassName && function (a, b) { return typeof b.getElementsByClassName !== A && n ? b.getElementsByClassName(a) : void 0 }, p = [], o = [], (c.qsa = Y.test(e.querySelectorAll)) && (gb(function (a) { a.innerHTML = \"\", a.querySelectorAll(\"[t^='']\").length && o.push(\"[*^$]=\" + K + \"*(?:''|\\\"\\\")\"), a.querySelectorAll(\"[selected]\").length || o.push(\"\\\\[\" + K + \"*(?:value|\" + J + \")\"), a.querySelectorAll(\":checked\").length || o.push(\":checked\") }), gb(function (a) { var b = e.createElement(\"input\"); b.setAttribute(\"type\", \"hidden\"), a.appendChild(b).setAttribute(\"name\", \"D\"), a.querySelectorAll(\"[name=d]\").length && o.push(\"name\" + K + \"*[*^$|!~]?=\"), a.querySelectorAll(\":enabled\").length || o.push(\":enabled\", \":disabled\"), a.querySelectorAll(\"*,:x\"), o.push(\",.*:\") })), (c.matchesSelector = Y.test(q = m.webkitMatchesSelector || m.mozMatchesSelector || m.oMatchesSelector || m.msMatchesSelector)) && gb(function (a) { c.disconnectedMatch = q.call(a, \"div\"), q.call(a, \"[s!='']:x\"), p.push(\"!=\", O) }), o = o.length && new RegExp(o.join(\"|\")), p = p.length && new RegExp(p.join(\"|\")), b = Y.test(m.compareDocumentPosition), r = b || Y.test(m.contains) ? function (a, b) { var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode; return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d))) } : function (a, b) { if (b) while (b = b.parentNode) if (b === a) return !0; return !1 }, z = b ? function (a, b) { if (a === b) return j = !0, 0; var d = !a.compareDocumentPosition - !b.compareDocumentPosition; return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === e || a.ownerDocument === t && r(t, a) ? -1 : b === e || b.ownerDocument === t && r(t, b) ? 1 : i ? I.call(i, a) - I.call(i, b) : 0 : 4 & d ? -1 : 1) } : function (a, b) { if (a === b) return j = !0, 0; var c, d = 0, f = a.parentNode, g = b.parentNode, h = [a], k = [b]; if (!f || !g) return a === e ? -1 : b === e ? 1 : f ? -1 : g ? 1 : i ? I.call(i, a) - I.call(i, b) : 0; if (f === g) return ib(a, b); c = a; while (c = c.parentNode) h.unshift(c); c = b; while (c = c.parentNode) k.unshift(c); while (h[d] === k[d]) d++; return d ? ib(h[d], k[d]) : h[d] === t ? -1 : k[d] === t ? 1 : 0 }, e) : l }, db.matches = function (a, b) { return db(a, null, null, b) }, db.matchesSelector = function (a, b) { if ((a.ownerDocument || a) !== l && k(a), b = b.replace(S, \"='$1']\"), !(!c.matchesSelector || !n || p && p.test(b) || o && o.test(b))) try { var d = q.call(a, b); if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d } catch (e) { } return db(b, l, null, [a]).length > 0 }, db.contains = function (a, b) { return (a.ownerDocument || a) !== l && k(a), r(a, b) }, db.attr = function (a, b) { (a.ownerDocument || a) !== l && k(a); var e = d.attrHandle[b.toLowerCase()], f = e && C.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !n) : void 0; return void 0 !== f ? f : c.attributes || !n ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null }, db.error = function (a) { throw new Error(\"Syntax error, unrecognized expression: \" + a) }, db.uniqueSort = function (a) { var b, d = [], e = 0, f = 0; if (j = !c.detectDuplicates, i = !c.sortStable && a.slice(0), a.sort(z), j) { while (b = a[f++]) b === a[f] && (e = d.push(f)); while (e--) a.splice(d[e], 1) } return i = null, a }, e = db.getText = function (a) { var b, c = \"\", d = 0, f = a.nodeType; if (f) { if (1 === f || 9 === f || 11 === f) { if (\"string\" == typeof a.textContent) return a.textContent; for (a = a.firstChild; a; a = a.nextSibling)c += e(a) } else if (3 === f || 4 === f) return a.nodeValue } else while (b = a[d++]) c += e(b); return c }, d = db.selectors = { cacheLength: 50, createPseudo: fb, match: V, attrHandle: {}, find: {}, relative: { \">\": { dir: \"parentNode\", first: !0 }, \" \": { dir: \"parentNode\" }, \"+\": { dir: \"previousSibling\", first: !0 }, \"~\": { dir: \"previousSibling\" } }, preFilter: { ATTR: function (a) { return a[1] = a[1].replace(ab, bb), a[3] = (a[4] || a[5] || \"\").replace(ab, bb), \"~=\" === a[2] && (a[3] = \" \" + a[3] + \" \"), a.slice(0, 4) }, CHILD: function (a) { return a[1] = a[1].toLowerCase(), \"nth\" === a[1].slice(0, 3) ? (a[3] || db.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * (\"even\" === a[3] || \"odd\" === a[3])), a[5] = +(a[7] + a[8] || \"odd\" === a[3])) : a[3] && db.error(a[0]), a }, PSEUDO: function (a) { var b, c = !a[5] && a[2]; return V.CHILD.test(a[0]) ? null : (a[3] && void 0 !== a[4] ? a[2] = a[4] : c && T.test(c) && (b = ob(c, !0)) && (b = c.indexOf(\")\", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3)) } }, filter: { TAG: function (a) { var b = a.replace(ab, bb).toLowerCase(); return \"*\" === a ? function () { return !0 } : function (a) { return a.nodeName && a.nodeName.toLowerCase() === b } }, CLASS: function (a) { var b = w[a + \" \"]; return b || (b = new RegExp(\"(^|\" + K + \")\" + a + \"(\" + K + \"|$)\")) && w(a, function (a) { return b.test(\"string\" == typeof a.className && a.className || typeof a.getAttribute !== A && a.getAttribute(\"class\") || \"\") }) }, ATTR: function (a, b, c) { return function (d) { var e = db.attr(d, a); return null == e ? \"!=\" === b : b ? (e += \"\", \"=\" === b ? e === c : \"!=\" === b ? e !== c : \"^=\" === b ? c && 0 === e.indexOf(c) : \"*=\" === b ? c && e.indexOf(c) > -1 : \"$=\" === b ? c && e.slice(-c.length) === c : \"~=\" === b ? (\" \" + e + \" \").indexOf(c) > -1 : \"|=\" === b ? e === c || e.slice(0, c.length + 1) === c + \"-\" : !1) : !0 } }, CHILD: function (a, b, c, d, e) { var f = \"nth\" !== a.slice(0, 3), g = \"last\" !== a.slice(-4), h = \"of-type\" === b; return 1 === d && 0 === e ? function (a) { return !!a.parentNode } : function (b, c, i) { var j, k, l, m, n, o, p = f !== g ? \"nextSibling\" : \"previousSibling\", q = b.parentNode, r = h && b.nodeName.toLowerCase(), t = !i && !h; if (q) { if (f) { while (p) { l = b; while (l = l[p]) if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) return !1; o = p = \"only\" === a && !o && \"nextSibling\" } return !0 } if (o = [g ? q.firstChild : q.lastChild], g && t) { k = q[s] || (q[s] = {}), j = k[a] || [], n = j[0] === u && j[1], m = j[0] === u && j[2], l = n && q.childNodes[n]; while (l = ++n && l && l[p] || (m = n = 0) || o.pop()) if (1 === l.nodeType && ++m && l === b) { k[a] = [u, n, m]; break } } else if (t && (j = (b[s] || (b[s] = {}))[a]) && j[0] === u) m = j[1]; else while (l = ++n && l && l[p] || (m = n = 0) || o.pop()) if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) && ++m && (t && ((l[s] || (l[s] = {}))[a] = [u, m]), l === b)) break; return m -= e, m === d || m % d === 0 && m / d >= 0 } } }, PSEUDO: function (a, b) { var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || db.error(\"unsupported pseudo: \" + a); return e[s] ? e(b) : e.length > 1 ? (c = [a, a, \"\", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? fb(function (a, c) { var d, f = e(a, b), g = f.length; while (g--) d = I.call(a, f[g]), a[d] = !(c[d] = f[g]) }) : function (a) { return e(a, 0, c) }) : e } }, pseudos: { not: fb(function (a) { var b = [], c = [], d = g(a.replace(P, \"$1\")); return d[s] ? fb(function (a, b, c, e) { var f, g = d(a, null, e, []), h = a.length; while (h--) (f = g[h]) && (a[h] = !(b[h] = f)) }) : function (a, e, f) { return b[0] = a, d(b, null, f, c), !c.pop() } }), has: fb(function (a) { return function (b) { return db(a, b).length > 0 } }), contains: fb(function (a) { return function (b) { return (b.textContent || b.innerText || e(b)).indexOf(a) > -1 } }), lang: fb(function (a) { return U.test(a || \"\") || db.error(\"unsupported lang: \" + a), a = a.replace(ab, bb).toLowerCase(), function (b) { var c; do if (c = n ? b.lang : b.getAttribute(\"xml:lang\") || b.getAttribute(\"lang\")) return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + \"-\"); while ((b = b.parentNode) && 1 === b.nodeType); return !1 } }), target: function (b) { var c = a.location && a.location.hash; return c && c.slice(1) === b.id }, root: function (a) { return a === m }, focus: function (a) { return a === l.activeElement && (!l.hasFocus || l.hasFocus()) && !!(a.type || a.href || ~a.tabIndex) }, enabled: function (a) { return a.disabled === !1 }, disabled: function (a) { return a.disabled === !0 }, checked: function (a) { var b = a.nodeName.toLowerCase(); return \"input\" === b && !!a.checked || \"option\" === b && !!a.selected }, selected: function (a) { return a.parentNode && a.parentNode.selectedIndex, a.selected === !0 }, empty: function (a) { for (a = a.firstChild; a; a = a.nextSibling)if (a.nodeType < 6) return !1; return !0 }, parent: function (a) { return !d.pseudos.empty(a) }, header: function (a) { return X.test(a.nodeName) }, input: function (a) { return W.test(a.nodeName) }, button: function (a) { var b = a.nodeName.toLowerCase(); return \"input\" === b && \"button\" === a.type || \"button\" === b }, text: function (a) { var b; return \"input\" === a.nodeName.toLowerCase() && \"text\" === a.type && (null == (b = a.getAttribute(\"type\")) || \"text\" === b.toLowerCase()) }, first: lb(function () { return [0] }), last: lb(function (a, b) { return [b - 1] }), eq: lb(function (a, b, c) { return [0 > c ? c + b : c] }), even: lb(function (a, b) { for (var c = 0; b > c; c += 2)a.push(c); return a }), odd: lb(function (a, b) { for (var c = 1; b > c; c += 2)a.push(c); return a }), lt: lb(function (a, b, c) { for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d); return a }), gt: lb(function (a, b, c) { for (var d = 0 > c ? c + b : c; ++d < b;)a.push(d); return a }) } }, d.pseudos.nth = d.pseudos.eq; for (b in { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) d.pseudos[b] = jb(b); for (b in { submit: !0, reset: !0 }) d.pseudos[b] = kb(b); function nb() { } nb.prototype = d.filters = d.pseudos, d.setFilters = new nb; function ob(a, b) { var c, e, f, g, h, i, j, k = x[a + \" \"]; if (k) return b ? 0 : k.slice(0); h = a, i = [], j = d.preFilter; while (h) { (!c || (e = Q.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = R.exec(h)) && (c = e.shift(), f.push({ value: c, type: e[0].replace(P, \" \") }), h = h.slice(c.length)); for (g in d.filter) !(e = V[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({ value: c, type: g, matches: e }), h = h.slice(c.length)); if (!c) break } return b ? h.length : h ? db.error(a) : x(a, i).slice(0) } function pb(a) { for (var b = 0, c = a.length, d = \"\"; c > b; b++)d += a[b].value; return d } function qb(a, b, c) { var d = b.dir, e = c && \"parentNode\" === d, f = v++; return b.first ? function (b, c, f) { while (b = b[d]) if (1 === b.nodeType || e) return a(b, c, f) } : function (b, c, g) { var h, i, j = [u, f]; if (g) { while (b = b[d]) if ((1 === b.nodeType || e) && a(b, c, g)) return !0 } else while (b = b[d]) if (1 === b.nodeType || e) { if (i = b[s] || (b[s] = {}), (h = i[d]) && h[0] === u && h[1] === f) return j[2] = h[2]; if (i[d] = j, j[2] = a(b, c, g)) return !0 } } } function rb(a) { return a.length > 1 ? function (b, c, d) { var e = a.length; while (e--) if (!a[e](b, c, d)) return !1; return !0 } : a[0] } function sb(a, b, c, d, e) { for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h)); return g } function tb(a, b, c, d, e, f) { return d && !d[s] && (d = tb(d)), e && !e[s] && (e = tb(e, f)), fb(function (f, g, h, i) { var j, k, l, m = [], n = [], o = g.length, p = f || wb(b || \"*\", h.nodeType ? [h] : h, []), q = !a || !f && b ? p : sb(p, m, a, h, i), r = c ? e || (f ? a : o || d) ? [] : g : q; if (c && c(q, r, h, i), d) { j = sb(r, n), d(j, [], h, i), k = j.length; while (k--) (l = j[k]) && (r[n[k]] = !(q[n[k]] = l)) } if (f) { if (e || a) { if (e) { j = [], k = r.length; while (k--) (l = r[k]) && j.push(q[k] = l); e(null, r = [], j, i) } k = r.length; while (k--) (l = r[k]) && (j = e ? I.call(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l)) } } else r = sb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : G.apply(g, r) }) } function ub(a) { for (var b, c, e, f = a.length, g = d.relative[a[0].type], i = g || d.relative[\" \"], j = g ? 1 : 0, k = qb(function (a) { return a === b }, i, !0), l = qb(function (a) { return I.call(b, a) > -1 }, i, !0), m = [function (a, c, d) { return !g && (d || c !== h) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d)) }]; f > j; j++)if (c = d.relative[a[j].type]) m = [qb(rb(m), c)]; else { if (c = d.filter[a[j].type].apply(null, a[j].matches), c[s]) { for (e = ++j; f > e; e++)if (d.relative[a[e].type]) break; return tb(j > 1 && rb(m), j > 1 && pb(a.slice(0, j - 1).concat({ value: \" \" === a[j - 2].type ? \"*\" : \"\" })).replace(P, \"$1\"), c, e > j && ub(a.slice(j, e)), f > e && ub(a = a.slice(e)), f > e && pb(a)) } m.push(c) } return rb(m) } function vb(a, b) { var c = b.length > 0, e = a.length > 0, f = function (f, g, i, j, k) { var m, n, o, p = 0, q = \"0\", r = f && [], s = [], t = h, v = f || e && d.find.TAG(\"*\", k), w = u += null == t ? 1 : Math.random() || .1, x = v.length; for (k && (h = g !== l && g); q !== x && null != (m = v[q]); q++) { if (e && m) { n = 0; while (o = a[n++]) if (o(m, g, i)) { j.push(m); break } k && (u = w) } c && ((m = !o && m) && p--, f && r.push(m)) } if (p += q, c && q !== p) { n = 0; while (o = b[n++]) o(r, s, g, i); if (f) { if (p > 0) while (q--) r[q] || s[q] || (s[q] = E.call(j)); s = sb(s) } G.apply(j, s), k && !f && s.length > 0 && p + b.length > 1 && db.uniqueSort(j) } return k && (u = w, h = t), r }; return c ? fb(f) : f } g = db.compile = function (a, b) { var c, d = [], e = [], f = y[a + \" \"]; if (!f) { b || (b = ob(a)), c = b.length; while (c--) f = ub(b[c]), f[s] ? d.push(f) : e.push(f); f = y(a, vb(e, d)) } return f }; function wb(a, b, c) { for (var d = 0, e = b.length; e > d; d++)db(a, b[d], c); return c } function xb(a, b, e, f) { var h, i, j, k, l, m = ob(a); if (!f && 1 === m.length) { if (i = m[0] = m[0].slice(0), i.length > 2 && \"ID\" === (j = i[0]).type && c.getById && 9 === b.nodeType && n && d.relative[i[1].type]) { if (b = (d.find.ID(j.matches[0].replace(ab, bb), b) || [])[0], !b) return e; a = a.slice(i.shift().value.length) } h = V.needsContext.test(a) ? 0 : i.length; while (h--) { if (j = i[h], d.relative[k = j.type]) break; if ((l = d.find[k]) && (f = l(j.matches[0].replace(ab, bb), $.test(i[0].type) && mb(b.parentNode) || b))) { if (i.splice(h, 1), a = f.length && pb(i), !a) return G.apply(e, f), e; break } } } return g(a, m)(f, b, !n, e, $.test(a) && mb(b.parentNode) || b), e } return c.sortStable = s.split(\"\").sort(z).join(\"\") === s, c.detectDuplicates = !!j, k(), c.sortDetached = gb(function (a) { return 1 & a.compareDocumentPosition(l.createElement(\"div\")) }), gb(function (a) { return a.innerHTML = \"\", \"#\" === a.firstChild.getAttribute(\"href\") }) || hb(\"type|href|height|width\", function (a, b, c) { return c ? void 0 : a.getAttribute(b, \"type\" === b.toLowerCase() ? 1 : 2) }), c.attributes && gb(function (a) { return a.innerHTML = \"\", a.firstChild.setAttribute(\"value\", \"\"), \"\" === a.firstChild.getAttribute(\"value\") }) || hb(\"value\", function (a, b, c) { return c || \"input\" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue }), gb(function (a) { return null == a.getAttribute(\"disabled\") }) || hb(J, function (a, b, c) { var d; return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null }), db }(a); o.find = t, o.expr = t.selectors, o.expr[\":\"] = o.expr.pseudos, o.unique = t.uniqueSort, o.text = t.getText, o.isXMLDoc = t.isXML, o.contains = t.contains; var u = o.expr.match.needsContext, v = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/, w = /^.[^:#\\[\\.,]*$/; function x(a, b, c) { if (o.isFunction(b)) return o.grep(a, function (a, d) { return !!b.call(a, d, a) !== c }); if (b.nodeType) return o.grep(a, function (a) { return a === b !== c }); if (\"string\" == typeof b) { if (w.test(b)) return o.filter(b, a, c); b = o.filter(b, a) } return o.grep(a, function (a) { return g.call(b, a) >= 0 !== c }) } o.filter = function (a, b, c) { var d = b[0]; return c && (a = \":not(\" + a + \")\"), 1 === b.length && 1 === d.nodeType ? o.find.matchesSelector(d, a) ? [d] : [] : o.find.matches(a, o.grep(b, function (a) { return 1 === a.nodeType })) }, o.fn.extend({ find: function (a) { var b, c = this.length, d = [], e = this; if (\"string\" != typeof a) return this.pushStack(o(a).filter(function () { for (b = 0; c > b; b++)if (o.contains(e[b], this)) return !0 })); for (b = 0; c > b; b++)o.find(a, e[b], d); return d = this.pushStack(c > 1 ? o.unique(d) : d), d.selector = this.selector ? this.selector + \" \" + a : a, d }, filter: function (a) { return this.pushStack(x(this, a || [], !1)) }, not: function (a) { return this.pushStack(x(this, a || [], !0)) }, is: function (a) { return !!x(this, \"string\" == typeof a && u.test(a) ? o(a) : a || [], !1).length } }); var y, z = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/, A = o.fn.init = function (a, b) { var c, d; if (!a) return this; if (\"string\" == typeof a) { if (c = \"<\" === a[0] && \">\" === a[a.length - 1] && a.length >= 3 ? [null, a, null] : z.exec(a), !c || !c[1] && b) return !b || b.jquery ? (b || y).find(a) : this.constructor(b).find(a); if (c[1]) { if (b = b instanceof o ? b[0] : b, o.merge(this, o.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : m, !0)), v.test(c[1]) && o.isPlainObject(b)) for (c in b) o.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]); return this } return d = m.getElementById(c[2]), d && d.parentNode && (this.length = 1, this[0] = d), this.context = m, this.selector = a, this } return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : o.isFunction(a) ? \"undefined\" != typeof y.ready ? y.ready(a) : a(o) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), o.makeArray(a, this)) }; A.prototype = o.fn, y = o(m); var B = /^(?:parents|prev(?:Until|All))/, C = { children: !0, contents: !0, next: !0, prev: !0 }; o.extend({ dir: function (a, b, c) { var d = [], e = void 0 !== c; while ((a = a[b]) && 9 !== a.nodeType) if (1 === a.nodeType) { if (e && o(a).is(c)) break; d.push(a) } return d }, sibling: function (a, b) { for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a); return c } }), o.fn.extend({ has: function (a) { var b = o(a, this), c = b.length; return this.filter(function () { for (var a = 0; c > a; a++)if (o.contains(this, b[a])) return !0 }) }, closest: function (a, b) { for (var c, d = 0, e = this.length, f = [], g = u.test(a) || \"string\" != typeof a ? o(a, b || this.context) : 0; e > d; d++)for (c = this[d]; c && c !== b; c = c.parentNode)if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && o.find.matchesSelector(c, a))) { f.push(c); break } return this.pushStack(f.length > 1 ? o.unique(f) : f) }, index: function (a) { return a ? \"string\" == typeof a ? g.call(o(a), this[0]) : g.call(this, a.jquery ? a[0] : a) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (a, b) { return this.pushStack(o.unique(o.merge(this.get(), o(a, b)))) }, addBack: function (a) { return this.add(null == a ? this.prevObject : this.prevObject.filter(a)) } }); function D(a, b) { while ((a = a[b]) && 1 !== a.nodeType); return a } o.each({ parent: function (a) { var b = a.parentNode; return b && 11 !== b.nodeType ? b : null }, parents: function (a) { return o.dir(a, \"parentNode\") }, parentsUntil: function (a, b, c) { return o.dir(a, \"parentNode\", c) }, next: function (a) { return D(a, \"nextSibling\") }, prev: function (a) { return D(a, \"previousSibling\") }, nextAll: function (a) { return o.dir(a, \"nextSibling\") }, prevAll: function (a) { return o.dir(a, \"previousSibling\") }, nextUntil: function (a, b, c) { return o.dir(a, \"nextSibling\", c) }, prevUntil: function (a, b, c) { return o.dir(a, \"previousSibling\", c) }, siblings: function (a) { return o.sibling((a.parentNode || {}).firstChild, a) }, children: function (a) { return o.sibling(a.firstChild) }, contents: function (a) { return a.contentDocument || o.merge([], a.childNodes) } }, function (a, b) { o.fn[a] = function (c, d) { var e = o.map(this, b, c); return \"Until\" !== a.slice(-5) && (d = c), d && \"string\" == typeof d && (e = o.filter(d, e)), this.length > 1 && (C[a] || o.unique(e), B.test(a) && e.reverse()), this.pushStack(e) } }); var E = /\\S+/g, F = {}; function G(a) { var b = F[a] = {}; return o.each(a.match(E) || [], function (a, c) { b[c] = !0 }), b } o.Callbacks = function (a) { a = \"string\" == typeof a ? F[a] || G(a) : o.extend({}, a); var b, c, d, e, f, g, h = [], i = !a.once && [], j = function (l) { for (b = a.memory && l, c = !0, g = e || 0, e = 0, f = h.length, d = !0; h && f > g; g++)if (h[g].apply(l[0], l[1]) === !1 && a.stopOnFalse) { b = !1; break } d = !1, h && (i ? i.length && j(i.shift()) : b ? h = [] : k.disable()) }, k = { add: function () { if (h) { var c = h.length; !function g(b) { o.each(b, function (b, c) { var d = o.type(c); \"function\" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && \"string\" !== d && g(c) }) }(arguments), d ? f = h.length : b && (e = c, j(b)) } return this }, remove: function () { return h && o.each(arguments, function (a, b) { var c; while ((c = o.inArray(b, h, c)) > -1) h.splice(c, 1), d && (f >= c && f--, g >= c && g--) }), this }, has: function (a) { return a ? o.inArray(a, h) > -1 : !(!h || !h.length) }, empty: function () { return h = [], f = 0, this }, disable: function () { return h = i = b = void 0, this }, disabled: function () { return !h }, lock: function () { return i = void 0, b || k.disable(), this }, locked: function () { return !i }, fireWith: function (a, b) { return !h || c && !i || (b = b || [], b = [a, b.slice ? b.slice() : b], d ? i.push(b) : j(b)), this }, fire: function () { return k.fireWith(this, arguments), this }, fired: function () { return !!c } }; return k }, o.extend({ Deferred: function (a) { var b = [[\"resolve\", \"done\", o.Callbacks(\"once memory\"), \"resolved\"], [\"reject\", \"fail\", o.Callbacks(\"once memory\"), \"rejected\"], [\"notify\", \"progress\", o.Callbacks(\"memory\")]], c = \"pending\", d = { state: function () { return c }, always: function () { return e.done(arguments).fail(arguments), this }, then: function () { var a = arguments; return o.Deferred(function (c) { o.each(b, function (b, f) { var g = o.isFunction(a[b]) && a[b]; e[f[1]](function () { var a = g && g.apply(this, arguments); a && o.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + \"With\"](this === d ? c.promise() : this, g ? [a] : arguments) }) }), a = null }).promise() }, promise: function (a) { return null != a ? o.extend(a, d) : d } }, e = {}; return d.pipe = d.then, o.each(b, function (a, f) { var g = f[2], h = f[3]; d[f[1]] = g.add, h && g.add(function () { c = h }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () { return e[f[0] + \"With\"](this === e ? d : this, arguments), this }, e[f[0] + \"With\"] = g.fireWith }), d.promise(e), a && a.call(e, e), e }, when: function (a) { var b = 0, c = d.call(arguments), e = c.length, f = 1 !== e || a && o.isFunction(a.promise) ? e : 0, g = 1 === f ? a : o.Deferred(), h = function (a, b, c) { return function (e) { b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c) } }, i, j, k; if (e > 1) for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++)c[b] && o.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f; return f || g.resolveWith(k, c), g.promise() } }); var H; o.fn.ready = function (a) { return o.ready.promise().done(a), this }, o.extend({ isReady: !1, readyWait: 1, holdReady: function (a) { a ? o.readyWait++ : o.ready(!0) }, ready: function (a) { (a === !0 ? --o.readyWait : o.isReady) || (o.isReady = !0, a !== !0 && --o.readyWait > 0 || (H.resolveWith(m, [o]), o.fn.trigger && o(m).trigger(\"ready\").off(\"ready\"))) } }); function I() { m.removeEventListener(\"DOMContentLoaded\", I, !1), a.removeEventListener(\"load\", I, !1), o.ready() } o.ready.promise = function (b) { return H || (H = o.Deferred(), \"complete\" === m.readyState ? setTimeout(o.ready) : (m.addEventListener(\"DOMContentLoaded\", I, !1), a.addEventListener(\"load\", I, !1))), H.promise(b) }, o.ready.promise(); var J = o.access = function (a, b, c, d, e, f, g) { var h = 0, i = a.length, j = null == c; if (\"object\" === o.type(c)) { e = !0; for (h in c) o.access(a, b, h, c[h], !0, f, g) } else if (void 0 !== d && (e = !0, o.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) { return j.call(o(a), c) })), b)) for (; i > h; h++)b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c))); return e ? a : j ? b.call(a) : i ? b(a[0], c) : f }; o.acceptData = function (a) { return 1 === a.nodeType || 9 === a.nodeType || !+a.nodeType }; function K() { Object.defineProperty(this.cache = {}, 0, { get: function () { return {} } }), this.expando = o.expando + Math.random() } K.uid = 1, K.accepts = o.acceptData, K.prototype = { key: function (a) { if (!K.accepts(a)) return 0; var b = {}, c = a[this.expando]; if (!c) { c = K.uid++; try { b[this.expando] = { value: c }, Object.defineProperties(a, b) } catch (d) { b[this.expando] = c, o.extend(a, b) } } return this.cache[c] || (this.cache[c] = {}), c }, set: function (a, b, c) { var d, e = this.key(a), f = this.cache[e]; if (\"string\" == typeof b) f[b] = c; else if (o.isEmptyObject(f)) o.extend(this.cache[e], b); else for (d in b) f[d] = b[d]; return f }, get: function (a, b) { var c = this.cache[this.key(a)]; return void 0 === b ? c : c[b] }, access: function (a, b, c) { var d; return void 0 === b || b && \"string\" == typeof b && void 0 === c ? (d = this.get(a, b), void 0 !== d ? d : this.get(a, o.camelCase(b))) : (this.set(a, b, c), void 0 !== c ? c : b) }, remove: function (a, b) { var c, d, e, f = this.key(a), g = this.cache[f]; if (void 0 === b) this.cache[f] = {}; else { o.isArray(b) ? d = b.concat(b.map(o.camelCase)) : (e = o.camelCase(b), b in g ? d = [b, e] : (d = e, d = d in g ? [d] : d.match(E) || [])), c = d.length; while (c--) delete g[d[c]] } }, hasData: function (a) { return !o.isEmptyObject(this.cache[a[this.expando]] || {}) }, discard: function (a) { a[this.expando] && delete this.cache[a[this.expando]] } }; var L = new K, M = new K, N = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/, O = /([A-Z])/g; function P(a, b, c) { var d; if (void 0 === c && 1 === a.nodeType) if (d = \"data-\" + b.replace(O, \"-$1\").toLowerCase(), c = a.getAttribute(d), \"string\" == typeof c) { try { c = \"true\" === c ? !0 : \"false\" === c ? !1 : \"null\" === c ? null : +c + \"\" === c ? +c : N.test(c) ? o.parseJSON(c) : c } catch (e) { } M.set(a, b, c) } else c = void 0; return c } o.extend({ hasData: function (a) { return M.hasData(a) || L.hasData(a) }, data: function (a, b, c) { return M.access(a, b, c) }, removeData: function (a, b) { M.remove(a, b) }, _data: function (a, b, c) { return L.access(a, b, c) }, _removeData: function (a, b) { L.remove(a, b) } }), o.fn.extend({\n data: function (a, b) {\n var c, d, e, f = this[0], g = f && f.attributes; if (void 0 === a) {\n if (this.length && (e = M.get(f), 1 === f.nodeType && !L.get(f, \"hasDataAttrs\"))) {\n c = g.length;\n while (c--) d = g[c].name, 0 === d.indexOf(\"data-\") && (d = o.camelCase(d.slice(5)), P(f, d, e[d])); L.set(f, \"hasDataAttrs\", !0)\n } return e\n } return \"object\" == typeof a ? this.each(function () { M.set(this, a) }) : J(this, function (b) { var c, d = o.camelCase(a); if (f && void 0 === b) { if (c = M.get(f, a), void 0 !== c) return c; if (c = M.get(f, d), void 0 !== c) return c; if (c = P(f, d, void 0), void 0 !== c) return c } else this.each(function () { var c = M.get(this, d); M.set(this, d, b), -1 !== a.indexOf(\"-\") && void 0 !== c && M.set(this, a, b) }) }, null, b, arguments.length > 1, null, !0)\n }, removeData: function (a) { return this.each(function () { M.remove(this, a) }) }\n }), o.extend({ queue: function (a, b, c) { var d; return a ? (b = (b || \"fx\") + \"queue\", d = L.get(a, b), c && (!d || o.isArray(c) ? d = L.access(a, b, o.makeArray(c)) : d.push(c)), d || []) : void 0 }, dequeue: function (a, b) { b = b || \"fx\"; var c = o.queue(a, b), d = c.length, e = c.shift(), f = o._queueHooks(a, b), g = function () { o.dequeue(a, b) }; \"inprogress\" === e && (e = c.shift(), d--), e && (\"fx\" === b && c.unshift(\"inprogress\"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire() }, _queueHooks: function (a, b) { var c = b + \"queueHooks\"; return L.get(a, c) || L.access(a, c, { empty: o.Callbacks(\"once memory\").add(function () { L.remove(a, [b + \"queue\", c]) }) }) } }), o.fn.extend({ queue: function (a, b) { var c = 2; return \"string\" != typeof a && (b = a, a = \"fx\", c--), arguments.length < c ? o.queue(this[0], a) : void 0 === b ? this : this.each(function () { var c = o.queue(this, a, b); o._queueHooks(this, a), \"fx\" === a && \"inprogress\" !== c[0] && o.dequeue(this, a) }) }, dequeue: function (a) { return this.each(function () { o.dequeue(this, a) }) }, clearQueue: function (a) { return this.queue(a || \"fx\", []) }, promise: function (a, b) { var c, d = 1, e = o.Deferred(), f = this, g = this.length, h = function () { --d || e.resolveWith(f, [f]) }; \"string\" != typeof a && (b = a, a = void 0), a = a || \"fx\"; while (g--) c = L.get(f[g], a + \"queueHooks\"), c && c.empty && (d++, c.empty.add(h)); return h(), e.promise(b) } }); var Q = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source, R = [\"Top\", \"Right\", \"Bottom\", \"Left\"], S = function (a, b) { return a = b || a, \"none\" === o.css(a, \"display\") || !o.contains(a.ownerDocument, a) }, T = /^(?:checkbox|radio)$/i; !function () { var a = m.createDocumentFragment(), b = a.appendChild(m.createElement(\"div\")); b.innerHTML = \"\", l.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, b.innerHTML = \"\", l.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue }(); var U = \"undefined\"; l.focusinBubbles = \"onfocusin\" in a; var V = /^key/, W = /^(?:mouse|contextmenu)|click/, X = /^(?:focusinfocus|focusoutblur)$/, Y = /^([^.]*)(?:\\.(.+)|)$/; function Z() { return !0 } function $() { return !1 } function _() { try { return m.activeElement } catch (a) { } } o.event = { global: {}, add: function (a, b, c, d, e) { var f, g, h, i, j, k, l, m, n, p, q, r = L.get(a); if (r) { c.handler && (f = c, c = f.handler, e = f.selector), c.guid || (c.guid = o.guid++), (i = r.events) || (i = r.events = {}), (g = r.handle) || (g = r.handle = function (b) { return typeof o !== U && o.event.triggered !== b.type ? o.event.dispatch.apply(a, arguments) : void 0 }), b = (b || \"\").match(E) || [\"\"], j = b.length; while (j--) h = Y.exec(b[j]) || [], n = q = h[1], p = (h[2] || \"\").split(\".\").sort(), n && (l = o.event.special[n] || {}, n = (e ? l.delegateType : l.bindType) || n, l = o.event.special[n] || {}, k = o.extend({ type: n, origType: q, data: d, handler: c, guid: c.guid, selector: e, needsContext: e && o.expr.match.needsContext.test(e), namespace: p.join(\".\") }, f), (m = i[n]) || (m = i[n] = [], m.delegateCount = 0, l.setup && l.setup.call(a, d, p, g) !== !1 || a.addEventListener && a.addEventListener(n, g, !1)), l.add && (l.add.call(a, k), k.handler.guid || (k.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, k) : m.push(k), o.event.global[n] = !0) } }, remove: function (a, b, c, d, e) { var f, g, h, i, j, k, l, m, n, p, q, r = L.hasData(a) && L.get(a); if (r && (i = r.events)) { b = (b || \"\").match(E) || [\"\"], j = b.length; while (j--) if (h = Y.exec(b[j]) || [], n = q = h[1], p = (h[2] || \"\").split(\".\").sort(), n) { l = o.event.special[n] || {}, n = (d ? l.delegateType : l.bindType) || n, m = i[n] || [], h = h[2] && new RegExp(\"(^|\\\\.)\" + p.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"), g = f = m.length; while (f--) k = m[f], !e && q !== k.origType || c && c.guid !== k.guid || h && !h.test(k.namespace) || d && d !== k.selector && (\"**\" !== d || !k.selector) || (m.splice(f, 1), k.selector && m.delegateCount--, l.remove && l.remove.call(a, k)); g && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || o.removeEvent(a, n, r.handle), delete i[n]) } else for (n in i) o.event.remove(a, n + b[j], c, d, !0); o.isEmptyObject(i) && (delete r.handle, L.remove(a, \"events\")) } }, trigger: function (b, c, d, e) { var f, g, h, i, k, l, n, p = [d || m], q = j.call(b, \"type\") ? b.type : b, r = j.call(b, \"namespace\") ? b.namespace.split(\".\") : []; if (g = h = d = d || m, 3 !== d.nodeType && 8 !== d.nodeType && !X.test(q + o.event.triggered) && (q.indexOf(\".\") >= 0 && (r = q.split(\".\"), q = r.shift(), r.sort()), k = q.indexOf(\":\") < 0 && \"on\" + q, b = b[o.expando] ? b : new o.Event(q, \"object\" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = r.join(\".\"), b.namespace_re = b.namespace ? new RegExp(\"(^|\\\\.)\" + r.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : o.makeArray(c, [b]), n = o.event.special[q] || {}, e || !n.trigger || n.trigger.apply(d, c) !== !1)) { if (!e && !n.noBubble && !o.isWindow(d)) { for (i = n.delegateType || q, X.test(i + q) || (g = g.parentNode); g; g = g.parentNode)p.push(g), h = g; h === (d.ownerDocument || m) && p.push(h.defaultView || h.parentWindow || a) } f = 0; while ((g = p[f++]) && !b.isPropagationStopped()) b.type = f > 1 ? i : n.bindType || q, l = (L.get(g, \"events\") || {})[b.type] && L.get(g, \"handle\"), l && l.apply(g, c), l = k && g[k], l && l.apply && o.acceptData(g) && (b.result = l.apply(g, c), b.result === !1 && b.preventDefault()); return b.type = q, e || b.isDefaultPrevented() || n._default && n._default.apply(p.pop(), c) !== !1 || !o.acceptData(d) || k && o.isFunction(d[q]) && !o.isWindow(d) && (h = d[k], h && (d[k] = null), o.event.triggered = q, d[q](), o.event.triggered = void 0, h && (d[k] = h)), b.result } }, dispatch: function (a) { a = o.event.fix(a); var b, c, e, f, g, h = [], i = d.call(arguments), j = (L.get(this, \"events\") || {})[a.type] || [], k = o.event.special[a.type] || {}; if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) { h = o.event.handlers.call(this, a, j), b = 0; while ((f = h[b++]) && !a.isPropagationStopped()) { a.currentTarget = f.elem, c = 0; while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) (!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((o.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation())) } return k.postDispatch && k.postDispatch.call(this, a), a.result } }, handlers: function (a, b) { var c, d, e, f, g = [], h = b.delegateCount, i = a.target; if (h && i.nodeType && (!a.button || \"click\" !== a.type)) for (; i !== this; i = i.parentNode || this)if (i.disabled !== !0 || \"click\" !== a.type) { for (d = [], c = 0; h > c; c++)f = b[c], e = f.selector + \" \", void 0 === d[e] && (d[e] = f.needsContext ? o(e, this).index(i) >= 0 : o.find(e, this, null, [i]).length), d[e] && d.push(f); d.length && g.push({ elem: i, handlers: d }) } return h < b.length && g.push({ elem: this, handlers: b.slice(h) }), g }, props: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"), fixHooks: {}, keyHooks: { props: \"char charCode key keyCode\".split(\" \"), filter: function (a, b) { return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a } }, mouseHooks: { props: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"), filter: function (a, b) { var c, d, e, f = b.button; return null == a.pageX && null != b.clientX && (c = a.target.ownerDocument || m, d = c.documentElement, e = c.body, a.pageX = b.clientX + (d && d.scrollLeft || e && e.scrollLeft || 0) - (d && d.clientLeft || e && e.clientLeft || 0), a.pageY = b.clientY + (d && d.scrollTop || e && e.scrollTop || 0) - (d && d.clientTop || e && e.clientTop || 0)), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a } }, fix: function (a) { if (a[o.expando]) return a; var b, c, d, e = a.type, f = a, g = this.fixHooks[e]; g || (this.fixHooks[e] = g = W.test(e) ? this.mouseHooks : V.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new o.Event(f), b = d.length; while (b--) c = d[b], a[c] = f[c]; return a.target || (a.target = m), 3 === a.target.nodeType && (a.target = a.target.parentNode), g.filter ? g.filter(a, f) : a }, special: { load: { noBubble: !0 }, focus: { trigger: function () { return this !== _() && this.focus ? (this.focus(), !1) : void 0 }, delegateType: \"focusin\" }, blur: { trigger: function () { return this === _() && this.blur ? (this.blur(), !1) : void 0 }, delegateType: \"focusout\" }, click: { trigger: function () { return \"checkbox\" === this.type && this.click && o.nodeName(this, \"input\") ? (this.click(), !1) : void 0 }, _default: function (a) { return o.nodeName(a.target, \"a\") } }, beforeunload: { postDispatch: function (a) { void 0 !== a.result && (a.originalEvent.returnValue = a.result) } } }, simulate: function (a, b, c, d) { var e = o.extend(new o.Event, c, { type: a, isSimulated: !0, originalEvent: {} }); d ? o.event.trigger(e, null, b) : o.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault() } }, o.removeEvent = function (a, b, c) { a.removeEventListener && a.removeEventListener(b, c, !1) }, o.Event = function (a, b) { return this instanceof o.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.getPreventDefault && a.getPreventDefault() ? Z : $) : this.type = a, b && o.extend(this, b), this.timeStamp = a && a.timeStamp || o.now(), void (this[o.expando] = !0)) : new o.Event(a, b) }, o.Event.prototype = { isDefaultPrevented: $, isPropagationStopped: $, isImmediatePropagationStopped: $, preventDefault: function () { var a = this.originalEvent; this.isDefaultPrevented = Z, a && a.preventDefault && a.preventDefault() }, stopPropagation: function () { var a = this.originalEvent; this.isPropagationStopped = Z, a && a.stopPropagation && a.stopPropagation() }, stopImmediatePropagation: function () { this.isImmediatePropagationStopped = Z, this.stopPropagation() } }, o.each({ mouseenter: \"mouseover\", mouseleave: \"mouseout\" }, function (a, b) { o.event.special[a] = { delegateType: b, bindType: b, handle: function (a) { var c, d = this, e = a.relatedTarget, f = a.handleObj; return (!e || e !== d && !o.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c } } }), l.focusinBubbles || o.each({ focus: \"focusin\", blur: \"focusout\" }, function (a, b) { var c = function (a) { o.event.simulate(b, a.target, o.event.fix(a), !0) }; o.event.special[b] = { setup: function () { var d = this.ownerDocument || this, e = L.access(d, b); e || d.addEventListener(a, c, !0), L.access(d, b, (e || 0) + 1) }, teardown: function () { var d = this.ownerDocument || this, e = L.access(d, b) - 1; e ? L.access(d, b, e) : (d.removeEventListener(a, c, !0), L.remove(d, b)) } } }), o.fn.extend({ on: function (a, b, c, d, e) { var f, g; if (\"object\" == typeof a) { \"string\" != typeof b && (c = c || b, b = void 0); for (g in a) this.on(g, b, c, a[g], e); return this } if (null == c && null == d ? (d = b, c = b = void 0) : null == d && (\"string\" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1) d = $; else if (!d) return this; return 1 === e && (f = d, d = function (a) { return o().off(a), f.apply(this, arguments) }, d.guid = f.guid || (f.guid = o.guid++)), this.each(function () { o.event.add(this, a, d, c, b) }) }, one: function (a, b, c, d) { return this.on(a, b, c, d, 1) }, off: function (a, b, c) { var d, e; if (a && a.preventDefault && a.handleObj) return d = a.handleObj, o(a.delegateTarget).off(d.namespace ? d.origType + \".\" + d.namespace : d.origType, d.selector, d.handler), this; if (\"object\" == typeof a) { for (e in a) this.off(e, b, a[e]); return this } return (b === !1 || \"function\" == typeof b) && (c = b, b = void 0), c === !1 && (c = $), this.each(function () { o.event.remove(this, a, c, b) }) }, trigger: function (a, b) { return this.each(function () { o.event.trigger(a, b, this) }) }, triggerHandler: function (a, b) { var c = this[0]; return c ? o.event.trigger(a, b, c, !0) : void 0 } }); var ab = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi, bb = /<([\\w:]+)/, cb = /<|&#?\\w+;/, db = /<(?:script|style|link)/i, eb = /checked\\s*(?:[^=]|=\\s*.checked.)/i, fb = /^$|\\/(?:java|ecma)script/i, gb = /^true\\/(.*)/, hb = /^\\s*\\s*$/g, ib = { option: [1, \"\"], thead: [1, \"\", \"
\"], col: [2, \"\", \"
\"], tr: [2, \"\", \"
\"], td: [3, \"\", \"
\"], _default: [0, \"\", \"\"] }; ib.optgroup = ib.option, ib.tbody = ib.tfoot = ib.colgroup = ib.caption = ib.thead, ib.th = ib.td; function jb(a, b) { return o.nodeName(a, \"table\") && o.nodeName(11 !== b.nodeType ? b : b.firstChild, \"tr\") ? a.getElementsByTagName(\"tbody\")[0] || a.appendChild(a.ownerDocument.createElement(\"tbody\")) : a } function kb(a) { return a.type = (null !== a.getAttribute(\"type\")) + \"/\" + a.type, a } function lb(a) { var b = gb.exec(a.type); return b ? a.type = b[1] : a.removeAttribute(\"type\"), a } function mb(a, b) { for (var c = 0, d = a.length; d > c; c++)L.set(a[c], \"globalEval\", !b || L.get(b[c], \"globalEval\")) } function nb(a, b) { var c, d, e, f, g, h, i, j; if (1 === b.nodeType) { if (L.hasData(a) && (f = L.access(a), g = L.set(b, f), j = f.events)) { delete g.handle, g.events = {}; for (e in j) for (c = 0, d = j[e].length; d > c; c++)o.event.add(b, e, j[e][c]) } M.hasData(a) && (h = M.access(a), i = o.extend({}, h), M.set(b, i)) } } function ob(a, b) { var c = a.getElementsByTagName ? a.getElementsByTagName(b || \"*\") : a.querySelectorAll ? a.querySelectorAll(b || \"*\") : []; return void 0 === b || b && o.nodeName(a, b) ? o.merge([a], c) : c } function pb(a, b) { var c = b.nodeName.toLowerCase(); \"input\" === c && T.test(a.type) ? b.checked = a.checked : (\"input\" === c || \"textarea\" === c) && (b.defaultValue = a.defaultValue) } o.extend({ clone: function (a, b, c) { var d, e, f, g, h = a.cloneNode(!0), i = o.contains(a.ownerDocument, a); if (!(l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || o.isXMLDoc(a))) for (g = ob(h), f = ob(a), d = 0, e = f.length; e > d; d++)pb(f[d], g[d]); if (b) if (c) for (f = f || ob(a), g = g || ob(h), d = 0, e = f.length; e > d; d++)nb(f[d], g[d]); else nb(a, h); return g = ob(h, \"script\"), g.length > 0 && mb(g, !i && ob(a, \"script\")), h }, buildFragment: function (a, b, c, d) { for (var e, f, g, h, i, j, k = b.createDocumentFragment(), l = [], m = 0, n = a.length; n > m; m++)if (e = a[m], e || 0 === e) if (\"object\" === o.type(e)) o.merge(l, e.nodeType ? [e] : e); else if (cb.test(e)) { f = f || k.appendChild(b.createElement(\"div\")), g = (bb.exec(e) || [\"\", \"\"])[1].toLowerCase(), h = ib[g] || ib._default, f.innerHTML = h[1] + e.replace(ab, \"<$1>\") + h[2], j = h[0]; while (j--) f = f.lastChild; o.merge(l, f.childNodes), f = k.firstChild, f.textContent = \"\" } else l.push(b.createTextNode(e)); k.textContent = \"\", m = 0; while (e = l[m++]) if ((!d || -1 === o.inArray(e, d)) && (i = o.contains(e.ownerDocument, e), f = ob(k.appendChild(e), \"script\"), i && mb(f), c)) { j = 0; while (e = f[j++]) fb.test(e.type || \"\") && c.push(e) } return k }, cleanData: function (a) { for (var b, c, d, e, f, g, h = o.event.special, i = 0; void 0 !== (c = a[i]); i++) { if (o.acceptData(c) && (f = c[L.expando], f && (b = L.cache[f]))) { if (d = Object.keys(b.events || {}), d.length) for (g = 0; void 0 !== (e = d[g]); g++)h[e] ? o.event.remove(c, e) : o.removeEvent(c, e, b.handle); L.cache[f] && delete L.cache[f] } delete M.cache[c[M.expando]] } } }), o.fn.extend({ text: function (a) { return J(this, function (a) { return void 0 === a ? o.text(this) : this.empty().each(function () { (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && (this.textContent = a) }) }, null, a, arguments.length) }, append: function () { return this.domManip(arguments, function (a) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var b = jb(this, a); b.appendChild(a) } }) }, prepend: function () { return this.domManip(arguments, function (a) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var b = jb(this, a); b.insertBefore(a, b.firstChild) } }) }, before: function () { return this.domManip(arguments, function (a) { this.parentNode && this.parentNode.insertBefore(a, this) }) }, after: function () { return this.domManip(arguments, function (a) { this.parentNode && this.parentNode.insertBefore(a, this.nextSibling) }) }, remove: function (a, b) { for (var c, d = a ? o.filter(a, this) : this, e = 0; null != (c = d[e]); e++)b || 1 !== c.nodeType || o.cleanData(ob(c)), c.parentNode && (b && o.contains(c.ownerDocument, c) && mb(ob(c, \"script\")), c.parentNode.removeChild(c)); return this }, empty: function () { for (var a, b = 0; null != (a = this[b]); b++)1 === a.nodeType && (o.cleanData(ob(a, !1)), a.textContent = \"\"); return this }, clone: function (a, b) { return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () { return o.clone(this, a, b) }) }, html: function (a) { return J(this, function (a) { var b = this[0] || {}, c = 0, d = this.length; if (void 0 === a && 1 === b.nodeType) return b.innerHTML; if (\"string\" == typeof a && !db.test(a) && !ib[(bb.exec(a) || [\"\", \"\"])[1].toLowerCase()]) { a = a.replace(ab, \"<$1>\"); try { for (; d > c; c++)b = this[c] || {}, 1 === b.nodeType && (o.cleanData(ob(b, !1)), b.innerHTML = a); b = 0 } catch (e) { } } b && this.empty().append(a) }, null, a, arguments.length) }, replaceWith: function () { var a = arguments[0]; return this.domManip(arguments, function (b) { a = this.parentNode, o.cleanData(ob(this)), a && a.replaceChild(b, this) }), a && (a.length || a.nodeType) ? this : this.remove() }, detach: function (a) { return this.remove(a, !0) }, domManip: function (a, b) { a = e.apply([], a); var c, d, f, g, h, i, j = 0, k = this.length, m = this, n = k - 1, p = a[0], q = o.isFunction(p); if (q || k > 1 && \"string\" == typeof p && !l.checkClone && eb.test(p)) return this.each(function (c) { var d = m.eq(c); q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b) }); if (k && (c = o.buildFragment(a, this[0].ownerDocument, !1, this), d = c.firstChild, 1 === c.childNodes.length && (c = d), d)) { for (f = o.map(ob(c, \"script\"), kb), g = f.length; k > j; j++)h = c, j !== n && (h = o.clone(h, !0, !0), g && o.merge(f, ob(h, \"script\"))), b.call(this[j], h, j); if (g) for (i = f[f.length - 1].ownerDocument, o.map(f, lb), j = 0; g > j; j++)h = f[j], fb.test(h.type || \"\") && !L.access(h, \"globalEval\") && o.contains(i, h) && (h.src ? o._evalUrl && o._evalUrl(h.src) : o.globalEval(h.textContent.replace(hb, \"\"))) } return this } }), o.each({ appendTo: \"append\", prependTo: \"prepend\", insertBefore: \"before\", insertAfter: \"after\", replaceAll: \"replaceWith\" }, function (a, b) { o.fn[a] = function (a) { for (var c, d = [], e = o(a), g = e.length - 1, h = 0; g >= h; h++)c = h === g ? this : this.clone(!0), o(e[h])[b](c), f.apply(d, c.get()); return this.pushStack(d) } }); var qb, rb = {}; function sb(b, c) { var d = o(c.createElement(b)).appendTo(c.body), e = a.getDefaultComputedStyle ? a.getDefaultComputedStyle(d[0]).display : o.css(d[0], \"display\"); return d.detach(), e } function tb(a) { var b = m, c = rb[a]; return c || (c = sb(a, b), \"none\" !== c && c || (qb = (qb || o(\"