From 9cc6f2fe117f21cc55297c676502f0aac48d9c08 Mon Sep 17 00:00:00 2001 From: Anthony Talarico Date: Tue, 15 Oct 2019 09:30:00 -0400 Subject: [PATCH] updating redux store, adding ajax actions to update theme options --- admin/.babelrc | 13 +- .../js/8e3c7f5520f5ae906c6cf6d7f3ddcd19.eot | Bin 106004 -> 0 bytes .../js/9c74e172f87984c48ddf5c8108cabe67.png | Bin 28123 -> 0 bytes .../js/b87b9ba532ace76ae9f6edfe9f72ded2.ttf | Bin 105784 -> 0 bytes admin/dist/js/glm-options.js | 338 +- admin/glm-theme-options.php | 43 +- admin/js/components/{App.jsx => App.js} | 0 .../{Controller.jsx => Controller.js} | 1 + .../{Dashboard.jsx => Dashboard.js} | 6 +- .../{DisplayArea.jsx => DisplayArea.js} | 2 +- admin/js/components/{Option.jsx => Option.js} | 0 .../js/components/{Sidebar.jsx => Sidebar.js} | 4 +- .../fields/{Select.jsx => Select.js} | 1 - .../fields/{Slider.jsx => Slider.js} | 0 .../fields/{Swatch.jsx => Swatch.js} | 0 .../components/fields/{Text.jsx => Text.js} | 0 .../fields/{TextArea.jsx => TextArea.js} | 0 admin/js/components/fields/Toggle.js | 57 + admin/js/components/fields/Toggle.jsx | 50 - .../components/fields/{index.jsx => index.js} | 0 admin/js/index.js | 4 +- admin/js/manifests/blog.js | 1 + admin/js/manifests/colors.js | 1 + admin/js/manifests/header.js | 4 +- admin/js/saveState.js | 7 + admin/js/store/actionCreators/index.js | 53 +- admin/js/store/actionCreators/themeOptions.js | 4 + admin/js/store/actionTypes.js | 6 +- admin/js/store/index.js | 20 +- admin/js/store/reducers/index.js | 5 +- admin/js/store/reducers/optionsReducers.js | 24 +- admin/js/utility.js | 137 +- admin/package-bak.json | 62 + admin/package-lock.json | 8828 ++++++----------- admin/package.json | 113 +- admin/utility.php | 18 + admin/webpack-back.config.js | 113 + admin/webpack.config.js | 125 +- 38 files changed, 3782 insertions(+), 6258 deletions(-) delete mode 100644 admin/dist/js/8e3c7f5520f5ae906c6cf6d7f3ddcd19.eot delete mode 100644 admin/dist/js/9c74e172f87984c48ddf5c8108cabe67.png delete mode 100644 admin/dist/js/b87b9ba532ace76ae9f6edfe9f72ded2.ttf rename admin/js/components/{App.jsx => App.js} (100%) rename admin/js/components/{Controller.jsx => Controller.js} (95%) rename admin/js/components/{Dashboard.jsx => Dashboard.js} (83%) rename admin/js/components/{DisplayArea.jsx => DisplayArea.js} (96%) rename admin/js/components/{Option.jsx => Option.js} (100%) rename admin/js/components/{Sidebar.jsx => Sidebar.js} (76%) rename admin/js/components/fields/{Select.jsx => Select.js} (97%) rename admin/js/components/fields/{Slider.jsx => Slider.js} (100%) rename admin/js/components/fields/{Swatch.jsx => Swatch.js} (100%) rename admin/js/components/fields/{Text.jsx => Text.js} (100%) rename admin/js/components/fields/{TextArea.jsx => TextArea.js} (100%) create mode 100644 admin/js/components/fields/Toggle.js delete mode 100644 admin/js/components/fields/Toggle.jsx rename admin/js/components/fields/{index.jsx => index.js} (100%) create mode 100644 admin/js/saveState.js create mode 100644 admin/js/store/actionCreators/themeOptions.js create mode 100755 admin/package-bak.json mode change 100755 => 100644 admin/package.json create mode 100644 admin/utility.php create mode 100755 admin/webpack-back.config.js diff --git a/admin/.babelrc b/admin/.babelrc index 6ab8eba..fbd6da0 100755 --- a/admin/.babelrc +++ b/admin/.babelrc @@ -1,11 +1,6 @@ { - "presets": [ - "@babel/env", - "@babel/react" - ], - "plugins": [ - "transform-class-properties", - "transform-object-rest-spread", - "transform-react-router-optimize" - ] + "presets": [ + "@babel/preset-env", + "@babel/preset-react" + ] } \ No newline at end of file diff --git a/admin/dist/js/8e3c7f5520f5ae906c6cf6d7f3ddcd19.eot b/admin/dist/js/8e3c7f5520f5ae906c6cf6d7f3ddcd19.eot deleted file mode 100644 index ef75106be9bdae7dac1277dd2ba56bbd7dd41ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106004 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 PvoiK&B4Ws6*Wv#Fi@o?r diff --git a/admin/dist/js/9c74e172f87984c48ddf5c8108cabe67.png b/admin/dist/js/9c74e172f87984c48ddf5c8108cabe67.png deleted file mode 100644 index cdd33c3bc609a91ff492fa352d835bc65de6eb9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28123 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 szvps9ukhz5h*B>3w`t1c9~9oX)@<@)c diff --git a/admin/dist/js/b87b9ba532ace76ae9f6edfe9f72ded2.ttf b/admin/dist/js/b87b9ba532ace76ae9f6edfe9f72ded2.ttf deleted file mode 100644 index 17bb6747a599c59238e88924d3f50b2911adeeea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105784 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 QpjjFFG7&N4vFq@^0RWZWBLDyZ diff --git a/admin/dist/js/glm-options.js b/admin/dist/js/glm-options.js index 2a967c9..8448dff 100644 --- a/admin/dist/js/glm-options.js +++ b/admin/dist/js/glm-options.js @@ -97,147 +97,158 @@ eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAAAoC /***/ }), -/***/ "./js/components/App.jsx": -/*!*******************************!*\ - !*** ./js/components/App.jsx ***! - \*******************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +/***/ "../node_modules/jquery/dist/jquery.js": +/*!*********************************************!*\ + !*** ../node_modules/jquery/dist/jquery.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var _Sidebar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Sidebar */ \"./js/components/Sidebar.jsx\");\n/* harmony import */ var _styles_App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../styles/App */ \"./js/styles/App.js\");\n/* harmony import */ var _DisplayArea__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DisplayArea */ \"./js/components/DisplayArea.jsx\");\n\n\n\n\n\n\nvar App = function App(props) {\n var mounted = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var updated = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var firstRender = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(true);\n mounted(function () {\n return function cleanup() {// clean up logic\n };\n }, []);\n updated(function () {\n if (firstRender.current) {\n firstRender.current = false;\n return;\n }\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n id: \"glmto-container\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n style: _styles_App__WEBPACK_IMPORTED_MODULE_3__[\"default\"].AppSpace\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Sidebar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_DisplayArea__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null)));\n};\n\nvar mapStatetoProps = function mapStatetoProps(state) {\n return state;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(mapStatetoProps, null)(App));\n\n//# sourceURL=webpack:///./js/components/App.jsx?"); +eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( true && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"